diff --git a/.changelog/19218.txt b/.changelog/19218.txt deleted file mode 100644 index a3dde32317b47..0000000000000 --- a/.changelog/19218.txt +++ /dev/null @@ -1,3 +0,0 @@ -```release-note:improvement -resource: lowercase names enforced for v2 resources only. -``` \ No newline at end of file diff --git a/.changelog/19306.txt b/.changelog/19274.txt similarity index 100% rename from .changelog/19306.txt rename to .changelog/19274.txt diff --git a/.changelog/19311.txt b/.changelog/19311.txt deleted file mode 100644 index e53536f44d32b..0000000000000 --- a/.changelog/19311.txt +++ /dev/null @@ -1,3 +0,0 @@ -```release-note:bug -raft: Fix panic during downgrade from enterprise to oss. -``` \ No newline at end of file diff --git a/.changelog/19499.txt b/.changelog/19499.txt deleted file mode 100644 index 83849637d4138..0000000000000 --- a/.changelog/19499.txt +++ /dev/null @@ -1,3 +0,0 @@ -```release-note:feature -acl: add policy bindtype to binding rules. -``` \ No newline at end of file diff --git a/.changelog/19663.txt b/.changelog/19663.txt deleted file mode 100644 index d3b338dfdf250..0000000000000 --- a/.changelog/19663.txt +++ /dev/null @@ -1,3 +0,0 @@ -```release-note:improvement -connect: Default `stats_flush_interval` to 60 seconds when using the Consul Telemetry Collector, unless custom stats sink are present or an explicit flush interval is configured. -``` \ No newline at end of file diff --git a/.changelog/19682.txt b/.changelog/19682.txt new file mode 100644 index 0000000000000..cfcee3e9b1c0f --- /dev/null +++ b/.changelog/19682.txt @@ -0,0 +1,3 @@ +```release-note:improvement +cloud: push additional server TLS metadata to HCP +``` diff --git a/.changelog/19705.txt b/.changelog/19705.txt new file mode 100644 index 0000000000000..7b9100d816168 --- /dev/null +++ b/.changelog/19705.txt @@ -0,0 +1,3 @@ +```release-note:security +Update `github.com/golang-jwt/jwt/v4` to v4.5.0 to address [PRISMA-2022-0270](https://github.com/golang-jwt/jwt/issues/258). +``` diff --git a/.changelog/19728.txt b/.changelog/19728.txt new file mode 100644 index 0000000000000..53c61bc5e0e85 --- /dev/null +++ b/.changelog/19728.txt @@ -0,0 +1,3 @@ +```release-note:improvement +acl: add api-gateway templated policy +``` \ No newline at end of file diff --git a/.changelog/19735.txt b/.changelog/19735.txt new file mode 100644 index 0000000000000..b7a712ced6e96 --- /dev/null +++ b/.changelog/19735.txt @@ -0,0 +1,3 @@ +```release-note:improvement +acl: add templated policy descriptions +``` \ No newline at end of file diff --git a/.changelog/19827.txt b/.changelog/19827.txt new file mode 100644 index 0000000000000..6a3d9a7ec8270 --- /dev/null +++ b/.changelog/19827.txt @@ -0,0 +1,3 @@ +```release-note:feature +acl: Adds nomad client templated policy +``` diff --git a/.github/scripts/notify_slack.sh b/.github/scripts/notify_slack.sh new file mode 100755 index 0000000000000..8df3f3f648766 --- /dev/null +++ b/.github/scripts/notify_slack.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash +# Copyright (c) HashiCorp, Inc. +# SPDX-License-Identifier: BUSL-1.1 + +set -uo pipefail + +# This script is used in GitHub Actions pipelines to notify Slack of a job failure. + +if [[ $GITHUB_REF_NAME == "main" ]]; then + GITHUB_ENDPOINT="https://github.com/${GITHUB_REPOSITORY}/commit/${GITHUB_SHA}" + GITHUB_ACTIONS_ENDPOINT="https://github.com/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}" + COMMIT_MESSAGE=$(git log -1 --pretty=%B | head -n1) + SHORT_REF=$(git rev-parse --short "${GITHUB_SHA}") + curl -X POST -H 'Content-type: application/json' \ + --data \ + "{ \ + \"attachments\": [ \ + { \ + \"fallback\": \"GitHub Actions workflow failed!\", \ + \"text\": \"❌ Failed: \`${GITHUB_ACTOR}\`'s <${GITHUB_ACTIONS_ENDPOINT}|${GITHUB_JOB}> job failed for commit <${GITHUB_ENDPOINT}|${SHORT_REF}> on \`${GITHUB_REF_NAME}\`!\n\n- <${COMMIT_MESSAGE}\", \ + \"footer\": \"${GITHUB_REPOSITORY}\", \ + \"ts\": \"$(date +%s)\", \ + \"color\": \"danger\" \ + } \ + ] \ + }" "${FEED_CONSUL_GH_URL}" +else + echo "Not posting slack failure notifications for non-main branch" +fi diff --git a/.github/scripts/set_test_package_matrix.sh b/.github/scripts/set_test_package_matrix.sh index 212d9fa481c40..3f8a389297f4a 100755 --- a/.github/scripts/set_test_package_matrix.sh +++ b/.github/scripts/set_test_package_matrix.sh @@ -5,13 +5,7 @@ set -euo pipefail export RUNNER_COUNT=$1 -if ((RUNNER_COUNT < 1 )) -then - echo ERROR: RUNNER_COUNT must be greater than zero. - exit 1 # terminate and indicate error -fi - # set matrix var to list of unique packages containing tests -matrix="$(go list -json="ImportPath,TestGoFiles" ./... | jq --compact-output '. | select(.TestGoFiles != null) | .ImportPath' | shuf | jq --slurp --compact-output '.' | jq --argjson runnercount $RUNNER_COUNT -cM '[_nwise(length / $runnercount | ceil)]'))" +matrix="$(go list -json="ImportPath,TestGoFiles" ./... | jq --compact-output '. | select(.TestGoFiles != null) | .ImportPath' | shuf | jq --slurp --compact-output '.' | jq --argjson runnercount $RUNNER_COUNT -cM '[_nwise(length / $runnercount | floor)]'))" echo "matrix=${matrix}" >> "${GITHUB_OUTPUT}" diff --git a/.github/workflows/backport-assistant.yml b/.github/workflows/backport-assistant.yml index 78125b6dabed6..17462f811261c 100644 --- a/.github/workflows/backport-assistant.yml +++ b/.github/workflows/backport-assistant.yml @@ -23,7 +23,7 @@ jobs: steps: - name: Run Backport Assistant for release branches run: | - backport-assistant backport -merge-method=squash + backport-assistant backport -merge-method=squash -gh-automerge env: BACKPORT_LABEL_REGEXP: "backport/(?P\\d+\\.\\d+)" BACKPORT_TARGET_TEMPLATE: "release/{{.target}}.x" diff --git a/.github/workflows/go-tests.yml b/.github/workflows/go-tests.yml index 0a9cafcd98da7..06bf97f5b3b8d 100644 --- a/.github/workflows/go-tests.yml +++ b/.github/workflows/go-tests.yml @@ -4,12 +4,12 @@ on: pull_request: branches-ignore: - stable-website - - 'docs/**' - - 'ui/**' - - 'mktg-**' # Digital Team Terraform-generated branches' prefix - - 'backport/docs/**' - - 'backport/ui/**' - - 'backport/mktg-**' + - "docs/**" + - "ui/**" + - "mktg-**" # Digital Team Terraform-generated branches' prefix + - "backport/docs/**" + - "backport/ui/**" + - "backport/mktg-**" push: branches: # Push events on the main branch @@ -31,14 +31,14 @@ concurrency: jobs: conditional-skip: - runs-on: ubuntu-latest + runs-on: ubuntu-latest name: Get files changed and conditionally skip CI outputs: skip-ci: ${{ steps.read-files.outputs.skip-ci }} steps: - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 with: - fetch-depth: 0 + fetch-depth: 0 - name: Get changed files id: read-files run: ./.github/scripts/filter_changed_files_go_test.sh @@ -54,14 +54,14 @@ jobs: compute-large: ${{ steps.setup-outputs.outputs.compute-large }} compute-xl: ${{ steps.setup-outputs.outputs.compute-xl }} steps: - - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 - - id: setup-outputs - name: Setup outputs - run: ./.github/scripts/get_runner_classes.sh + - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 + - id: setup-outputs + name: Setup outputs + run: ./.github/scripts/get_runner_classes.sh check-go-mod: needs: - - setup + - setup uses: ./.github/workflows/reusable-check-go-mod.yml with: runs-on: ${{ needs.setup.outputs.compute-small }} @@ -71,96 +71,111 @@ jobs: check-generated-protobuf: needs: - - setup + - setup runs-on: ${{ fromJSON(needs.setup.outputs.compute-medium) }} steps: - - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 - # NOTE: This step is specifically needed for ENT. It allows us to access the required private HashiCorp repos. - - name: Setup Git - if: ${{ endsWith(github.repository, '-enterprise') }} - run: git config --global url."https://${{ secrets.ELEVATED_GITHUB_TOKEN }}:@github.com".insteadOf "https://github.com" - - uses: actions/setup-go@fac708d6674e30b6ba41289acaab6d4b75aa0753 # v4.0.1 - with: - go-version-file: 'go.mod' - - run: make proto-tools - name: Install protobuf - - run: make proto-format - name: "Protobuf Format" - - run: make --always-make proto - - run: | - if ! git diff --exit-code; then - echo "Generated code was not updated correctly" - exit 1 - fi - - run: make proto-lint - name: "Protobuf Lint" + - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 + # NOTE: This step is specifically needed for ENT. It allows us to access the required private HashiCorp repos. + - name: Setup Git + if: ${{ endsWith(github.repository, '-enterprise') }} + run: git config --global url."https://${{ secrets.ELEVATED_GITHUB_TOKEN }}:@github.com".insteadOf "https://github.com" + - uses: actions/setup-go@fac708d6674e30b6ba41289acaab6d4b75aa0753 # v4.0.1 + with: + go-version-file: "go.mod" + - run: make proto-tools + name: Install protobuf + - run: make proto-format + name: "Protobuf Format" + - run: make --always-make proto + - run: | + if ! git diff --exit-code; then + echo "Generated code was not updated correctly" + exit 1 + fi + - run: make proto-lint + name: "Protobuf Lint" + - name: Notify Slack + if: ${{ failure() }} + run: .github/scripts/notify_slack.sh check-codegen: - needs: - - setup - runs-on: ${{ fromJSON(needs.setup.outputs.compute-large) }} - steps: - - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 - # NOTE: This step is specifically needed for ENT. It allows us to access the required private HashiCorp repos. - - name: Setup Git - if: ${{ endsWith(github.repository, '-enterprise') }} - run: git config --global url."https://${{ secrets.ELEVATED_GITHUB_TOKEN }}:@github.com".insteadOf "https://github.com" - - uses: actions/setup-go@fac708d6674e30b6ba41289acaab6d4b75aa0753 # v4.0.1 - with: - go-version-file: 'go.mod' - - run: make --always-make codegen - - run: | - if ! git diff --exit-code; then - echo "Generated code was not updated correctly" - exit 1 - fi + needs: + - setup + runs-on: ${{ fromJSON(needs.setup.outputs.compute-large) }} + steps: + - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 + # NOTE: This step is specifically needed for ENT. It allows us to access the required private HashiCorp repos. + - name: Setup Git + if: ${{ endsWith(github.repository, '-enterprise') }} + run: git config --global url."https://${{ secrets.ELEVATED_GITHUB_TOKEN }}:@github.com".insteadOf "https://github.com" + - uses: actions/setup-go@fac708d6674e30b6ba41289acaab6d4b75aa0753 # v4.0.1 + with: + go-version-file: "go.mod" + - run: make --always-make codegen + - run: | + if ! git diff --exit-code; then + echo "Generated code was not updated correctly" + exit 1 + fi + - name: Notify Slack + if: ${{ failure() }} + run: .github/scripts/notify_slack.sh lint-enums: needs: - - setup + - setup runs-on: ${{ fromJSON(needs.setup.outputs.compute-large) }} steps: - - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 - # NOTE: This step is specifically needed for ENT. It allows us to access the required private HashiCorp repos. - - name: Setup Git - if: ${{ endsWith(github.repository, '-enterprise') }} - run: git config --global url."https://${{ secrets.ELEVATED_GITHUB_TOKEN }}:@github.com".insteadOf "https://github.com" - - uses: actions/setup-go@fac708d6674e30b6ba41289acaab6d4b75aa0753 # v4.0.1 - with: - go-version-file: 'go.mod' - - run: go install github.com/reillywatson/enumcover/cmd/enumcover@master && enumcover ./... + - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 + # NOTE: This step is specifically needed for ENT. It allows us to access the required private HashiCorp repos. + - name: Setup Git + if: ${{ endsWith(github.repository, '-enterprise') }} + run: git config --global url."https://${{ secrets.ELEVATED_GITHUB_TOKEN }}:@github.com".insteadOf "https://github.com" + - uses: actions/setup-go@fac708d6674e30b6ba41289acaab6d4b75aa0753 # v4.0.1 + with: + go-version-file: "go.mod" + - run: go install github.com/reillywatson/enumcover/cmd/enumcover@master && enumcover ./... + - name: Notify Slack + if: ${{ failure() }} + run: .github/scripts/notify_slack.sh lint-container-test-deps: needs: - - setup + - setup runs-on: ${{ fromJSON(needs.setup.outputs.compute-small) }} steps: - - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 - # NOTE: This step is specifically needed for ENT. It allows us to access the required private HashiCorp repos. - - name: Setup Git - run: git config --global url."https://${{ secrets.ELEVATED_GITHUB_TOKEN }}:@github.com".insteadOf "https://github.com" - - uses: actions/setup-go@fac708d6674e30b6ba41289acaab6d4b75aa0753 # v4.0.1 - with: - go-version-file: 'go.mod' - - run: make lint-container-test-deps + - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 + # NOTE: This step is specifically needed for ENT. It allows us to access the required private HashiCorp repos. + - name: Setup Git + run: git config --global url."https://${{ secrets.ELEVATED_GITHUB_TOKEN }}:@github.com".insteadOf "https://github.com" + - uses: actions/setup-go@fac708d6674e30b6ba41289acaab6d4b75aa0753 # v4.0.1 + with: + go-version-file: "go.mod" + - run: make lint-container-test-deps + - name: Notify Slack + if: ${{ failure() }} + run: .github/scripts/notify_slack.sh lint-consul-retry: needs: - - setup + - setup runs-on: ${{ fromJSON(needs.setup.outputs.compute-small) }} steps: - - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 - # NOTE: This step is specifically needed for ENT. It allows us to access the required private HashiCorp repos. - - name: Setup Git - if: ${{ endsWith(github.repository, '-enterprise') }} - run: git config --global url."https://${{ secrets.ELEVATED_GITHUB_TOKEN }}:@github.com".insteadOf "https://github.com" - - uses: actions/setup-go@fac708d6674e30b6ba41289acaab6d4b75aa0753 # v4.0.1 - with: - go-version-file: 'go.mod' - - run: go install github.com/hashicorp/lint-consul-retry@master && lint-consul-retry + - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 + # NOTE: This step is specifically needed for ENT. It allows us to access the required private HashiCorp repos. + - name: Setup Git + if: ${{ endsWith(github.repository, '-enterprise') }} + run: git config --global url."https://${{ secrets.ELEVATED_GITHUB_TOKEN }}:@github.com".insteadOf "https://github.com" + - uses: actions/setup-go@fac708d6674e30b6ba41289acaab6d4b75aa0753 # v4.0.1 + with: + go-version-file: "go.mod" + - run: go install github.com/hashicorp/lint-consul-retry@v1.3.0 && lint-consul-retry + - name: Notify Slack + if: ${{ failure() }} + run: .github/scripts/notify_slack.sh lint: needs: - - setup + - setup uses: ./.github/workflows/reusable-lint.yml with: runs-on: ${{ needs.setup.outputs.compute-large }} @@ -170,7 +185,7 @@ jobs: lint-32bit: needs: - - setup + - setup uses: ./.github/workflows/reusable-lint.yml with: go-arch: "386" @@ -182,7 +197,7 @@ jobs: # create a development build dev-build: needs: - - setup + - setup uses: ./.github/workflows/reusable-dev-build.yml with: runs-on: ${{ needs.setup.outputs.compute-large }} @@ -229,7 +244,7 @@ jobs: # uploaded-binary-name: 'consul-bin-arm64' # runner-count: 12 # runs-on: "['self-hosted', 'ondemand', 'os=macos-arm', 'arm64']" - # go-test-flags: "${{ (github.ref_name != 'main' && !startsWith(github.ref_name, 'release/')) && '-short' || '' }}" + # go-test-flags: 'if ! [[ "$GITHUB_REF_NAME" =~ ^main$|^release/ ]]; then export GO_TEST_FLAGS="-short"; fi' # repository-name: ${{ github.repository }} # secrets: # elevated-github-token: ${{ secrets.ELEVATED_GITHUB_TOKEN }} @@ -238,16 +253,15 @@ jobs: go-test-ce: needs: - - setup - - dev-build + - setup + - dev-build uses: ./.github/workflows/reusable-unit-split.yml with: directory: . - runner-count: 6 + runner-count: 12 runs-on: ${{ needs.setup.outputs.compute-large }} repository-name: ${{ github.repository }} go-tags: "" - go-test-flags: "${{ (github.ref_name != 'main' && !startsWith(github.ref_name, 'release/')) && '-short' || '' }}" permissions: id-token: write # NOTE: this permission is explicitly required for Vault auth. contents: read @@ -259,16 +273,15 @@ jobs: go-test-enterprise: if: ${{ endsWith(github.repository, '-enterprise') }} needs: - - setup - - dev-build + - setup + - dev-build uses: ./.github/workflows/reusable-unit-split.yml with: directory: . - runner-count: 6 + runner-count: 12 runs-on: ${{ needs.setup.outputs.compute-large }} repository-name: ${{ github.repository }} - go-tags: "${{ github.event.repository.name == 'consul-enterprise' && 'consulent consuldev' || '' }}" - go-test-flags: "${{ (github.ref_name != 'main' && !startsWith(github.ref_name, 'release/')) && '-short' || '' }}" + go-tags: "${{ github.event.repository.name == 'consul-enterprise' && 'consulent consulprem consuldev' || '' }}" permissions: id-token: write # NOTE: this permission is explicitly required for Vault auth. contents: read @@ -279,16 +292,16 @@ jobs: go-test-race: needs: - - setup - - dev-build + - setup + - dev-build uses: ./.github/workflows/reusable-unit.yml with: directory: . - go-test-flags: "-race -gcflags=all=-d=checkptr=0" + go-test-flags: 'GO_TEST_FLAGS="-race -gcflags=all=-d=checkptr=0"' package-names-command: "go list ./... | grep -E -v '^github.com/hashicorp/consul/agent(/consul|/local|/routine-leak-checker)?$' | grep -E -v '^github.com/hashicorp/consul(/command|/connect|/snapshot)'" runs-on: ${{ needs.setup.outputs.compute-large }} repository-name: ${{ github.repository }} - go-tags: "${{ github.event.repository.name == 'consul-enterprise' && 'consulent consuldev' || '' }}" + go-tags: "${{ github.event.repository.name == 'consul-enterprise' && 'consulent consulprem consuldev' || '' }}" permissions: id-token: write # NOTE: this permission is explicitly required for Vault auth. contents: read @@ -299,16 +312,16 @@ jobs: go-test-32bit: needs: - - setup - - dev-build + - setup + - dev-build uses: ./.github/workflows/reusable-unit.yml with: directory: . go-arch: "386" - go-test-flags: "-short" + go-test-flags: 'export GO_TEST_FLAGS="-short"' runs-on: ${{ needs.setup.outputs.compute-large }} repository-name: ${{ github.repository }} - go-tags: "${{ github.event.repository.name == 'consul-enterprise' && 'consulent consuldev' || '' }}" + go-tags: "${{ github.event.repository.name == 'consul-enterprise' && 'consulent consulprem consuldev' || '' }}" permissions: id-token: write # NOTE: this permission is explicitly required for Vault auth. contents: read @@ -326,10 +339,10 @@ jobs: # with: # uploaded-binary-name: 'consul-bin-s390x' # directory: . - # go-test-flags: -short" + # go-test-flags: 'export GO_TEST_FLAGS="-short"' # runs-on: ${{ needs.setup.outputs.compute-large }} # repository-name: ${{ github.repository }} - # go-tags: "${{ github.event.repository.name == 'consul-enterprise' && 'consulent consuldev' || '' }}" + # go-tags: "${{ github.event.repository.name == 'consul-enterprise' && 'consulent consulprem consuldev' || '' }}" # permissions: # id-token: write # NOTE: this permission is explicitly required for Vault auth. # contents: read @@ -340,14 +353,14 @@ jobs: go-test-envoyextensions: needs: - - setup - - dev-build + - setup + - dev-build uses: ./.github/workflows/reusable-unit.yml with: directory: envoyextensions runs-on: ${{ needs.setup.outputs.compute-large }} repository-name: ${{ github.repository }} - go-tags: "${{ github.event.repository.name == 'consul-enterprise' && 'consulent consuldev' || '' }}" + go-tags: "${{ github.event.repository.name == 'consul-enterprise' && 'consulent consulprem consuldev' || '' }}" permissions: id-token: write # NOTE: this permission is explicitly required for Vault auth. contents: read @@ -358,14 +371,14 @@ jobs: go-test-troubleshoot: needs: - - setup - - dev-build + - setup + - dev-build uses: ./.github/workflows/reusable-unit.yml with: directory: troubleshoot runs-on: ${{ needs.setup.outputs.compute-large }} repository-name: ${{ github.repository }} - go-tags: "${{ github.event.repository.name == 'consul-enterprise' && 'consulent consuldev' || '' }}" + go-tags: "${{ github.event.repository.name == 'consul-enterprise' && 'consulent consulprem consuldev' || '' }}" permissions: id-token: write # NOTE: this permission is explicitly required for Vault auth. contents: read @@ -376,14 +389,14 @@ jobs: go-test-api-1-19: needs: - - setup - - dev-build + - setup + - dev-build uses: ./.github/workflows/reusable-unit.yml with: directory: api runs-on: ${{ needs.setup.outputs.compute-large }} repository-name: ${{ github.repository }} - go-tags: "${{ github.event.repository.name == 'consul-enterprise' && 'consulent consuldev' || '' }}" + go-tags: "${{ github.event.repository.name == 'consul-enterprise' && 'consulent consulprem consuldev' || '' }}" go-version: "1.19" permissions: id-token: write # NOTE: this permission is explicitly required for Vault auth. @@ -395,14 +408,14 @@ jobs: go-test-api-1-20: needs: - - setup - - dev-build + - setup + - dev-build uses: ./.github/workflows/reusable-unit.yml with: directory: api runs-on: ${{ needs.setup.outputs.compute-large }} repository-name: ${{ github.repository }} - go-tags: "${{ github.event.repository.name == 'consul-enterprise' && 'consulent consuldev' || '' }}" + go-tags: "${{ github.event.repository.name == 'consul-enterprise' && 'consulent consulprem consuldev' || '' }}" go-version: "1.20" permissions: id-token: write # NOTE: this permission is explicitly required for Vault auth. @@ -414,14 +427,14 @@ jobs: go-test-sdk-1-19: needs: - - setup - - dev-build + - setup + - dev-build uses: ./.github/workflows/reusable-unit.yml with: directory: sdk runs-on: ${{ needs.setup.outputs.compute-large }} repository-name: ${{ github.repository }} - go-tags: "${{ github.event.repository.name == 'consul-enterprise' && 'consulent consuldev' || '' }}" + go-tags: "${{ github.event.repository.name == 'consul-enterprise' && 'consulent consulprem consuldev' || '' }}" go-version: "1.19" permissions: id-token: write # NOTE: this permission is explicitly required for Vault auth. @@ -433,14 +446,14 @@ jobs: go-test-sdk-1-20: needs: - - setup - - dev-build + - setup + - dev-build uses: ./.github/workflows/reusable-unit.yml with: directory: sdk runs-on: ${{ needs.setup.outputs.compute-large }} repository-name: ${{ github.repository }} - go-tags: "${{ github.event.repository.name == 'consul-enterprise' && 'consulent consuldev' || '' }}" + go-tags: "${{ github.event.repository.name == 'consul-enterprise' && 'consulent consulprem consuldev' || '' }}" go-version: "1.20" permissions: id-token: write # NOTE: this permission is explicitly required for Vault auth. @@ -471,27 +484,27 @@ jobs: go-tests-success: needs: - - conditional-skip - - setup - - check-codegen - - check-generated-protobuf - - check-go-mod - - lint-consul-retry - - lint-container-test-deps - - lint-enums - - lint - - lint-32bit - # - go-test-arm64 - - go-test-enterprise - - go-test-ce - - go-test-race - - go-test-envoyextensions - - go-test-troubleshoot - - go-test-api-1-19 - - go-test-api-1-20 - - go-test-sdk-1-19 - - go-test-sdk-1-20 - - go-test-32bit + - conditional-skip + - setup + - check-codegen + - check-generated-protobuf + - check-go-mod + - lint-consul-retry + - lint-container-test-deps + - lint-enums + - lint + - lint-32bit + # - go-test-arm64 + - go-test-enterprise + - go-test-ce + - go-test-race + - go-test-envoyextensions + - go-test-troubleshoot + - go-test-api-1-19 + - go-test-api-1-20 + - go-test-sdk-1-19 + - go-test-sdk-1-20 + - go-test-32bit # - go-test-s390x runs-on: ${{ fromJSON(needs.setup.outputs.compute-small) }} if: always() && needs.conditional-skip.outputs.skip-ci != 'true' @@ -503,15 +516,3 @@ jobs: printf "Tests failed or workflow cancelled:\n\n${{ toJSON(needs) }}" exit 1 fi - - name: Notify Slack - if: ${{ failure() && (github.ref_name == 'main' || startsWith(github.ref_name, 'release/')) }} - id: slack - uses: slackapi/slack-github-action@e28cf165c92ffef168d23c5c9000cffc8a25e117 # v1.24.0 - with: - # github.event.head_commit.message and github.ref_name both rely on this event occurring on a push / merge - payload: | - { - "message": "❌ ${{ github.workflow }} workflow failed: \n\n- Run: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} \n- Branch: ${{ github.ref_name }} \n- Message: ${{ github.event.head_commit.message }} \n- Author: ${{ github.event.sender.login }}" - } - env: - SLACK_WEBHOOK_URL: ${{ secrets.CONSUL_NIGHTLY_INTEG_TEST_SLACK_WEBHOOK }} \ No newline at end of file diff --git a/.github/workflows/nightly-test-1.17.x.yaml b/.github/workflows/nightly-test-1.13.x.yaml similarity index 96% rename from .github/workflows/nightly-test-1.17.x.yaml rename to .github/workflows/nightly-test-1.13.x.yaml index 9a063001e402c..f314a475dfbd7 100644 --- a/.github/workflows/nightly-test-1.17.x.yaml +++ b/.github/workflows/nightly-test-1.13.x.yaml @@ -1,7 +1,7 @@ # Copyright (c) HashiCorp, Inc. # SPDX-License-Identifier: MPL-2.0 -name: Nightly Frontend Test 1.17.x +name: Nightly Frontend Test 1.13.x on: schedule: - cron: '0 4 * * *' @@ -9,8 +9,8 @@ on: env: EMBER_PARTITION_TOTAL: 4 # Has to be changed in tandem with the matrix.partition - BRANCH: "release/1.17.x" - BRANCH_NAME: "release-1.17.x" # Used for naming artifacts + BRANCH: "release/1.13.x" + BRANCH_NAME: "release-1.13.x" # Used for naming artifacts GOPRIVATE: github.com/hashicorp # Required for enterprise deps jobs: @@ -24,7 +24,7 @@ jobs: # Not necessary to use yarn, but enables caching - uses: actions/setup-node@e33196f7422957bea03ed53f6fbb155025ffc7b8 # v3.7.0 with: - node-version: 18 + node-version: 14 cache: 'yarn' cache-dependency-path: ./ui/yarn.lock @@ -56,7 +56,7 @@ jobs: # Not necessary to use yarn, but enables caching - uses: actions/setup-node@e33196f7422957bea03ed53f6fbb155025ffc7b8 # v3.7.0 with: - node-version: 18 + node-version: 14 cache: 'yarn' cache-dependency-path: ./ui/yarn.lock @@ -95,7 +95,7 @@ jobs: # Not necessary to use yarn, but enables caching - uses: actions/setup-node@e33196f7422957bea03ed53f6fbb155025ffc7b8 # v3.7.0 with: - node-version: 18 + node-version: 14 cache: 'yarn' cache-dependency-path: ./ui/yarn.lock @@ -128,7 +128,7 @@ jobs: # Not necessary to use yarn, but enables caching - uses: actions/setup-node@e33196f7422957bea03ed53f6fbb155025ffc7b8 # v3.7.0 with: - node-version: 18 + node-version: 14 cache: 'yarn' cache-dependency-path: ./ui/yarn.lock @@ -167,7 +167,7 @@ jobs: # Not necessary to use yarn, but enables caching - uses: actions/setup-node@e33196f7422957bea03ed53f6fbb155025ffc7b8 # v3.7.0 with: - node-version: 18 + node-version: 14 cache: 'yarn' cache-dependency-path: ./ui/yarn.lock @@ -198,7 +198,7 @@ jobs: # Not necessary to use yarn, but enables caching - uses: actions/setup-node@e33196f7422957bea03ed53f6fbb155025ffc7b8 # v3.7.0 with: - node-version: 18 + node-version: 14 cache: 'yarn' cache-dependency-path: ./ui/yarn.lock diff --git a/.github/workflows/nightly-test-integrations-1.15.x.yml b/.github/workflows/nightly-test-integrations-1.15.x.yml index a6f2ce184f13b..c570a541abd11 100644 --- a/.github/workflows/nightly-test-integrations-1.15.x.yml +++ b/.github/workflows/nightly-test-integrations-1.15.x.yml @@ -14,7 +14,7 @@ env: TEST_RESULTS_ARTIFACT_NAME: test-results CONSUL_LICENSE: ${{ secrets.CONSUL_LICENSE }} GOTAGS: ${{ endsWith(github.repository, '-enterprise') && 'consulent' || '' }} - GOTESTSUM_VERSION: "1.11.0" + GOTESTSUM_VERSION: "1.10.1" CONSUL_BINARY_UPLOAD_NAME: consul-bin # strip the hashicorp/ off the front of github.repository for consul CONSUL_LATEST_IMAGE_NAME: ${{ endsWith(github.repository, '-enterprise') && github.repository || 'hashicorp/consul' }} @@ -234,8 +234,9 @@ jobs: docker run --rm ${{ env.CONSUL_LATEST_IMAGE_NAME }}:local consul version go run gotest.tools/gotestsum@v${{env.GOTESTSUM_VERSION}} \ --raw-command \ - --format=github-actions \ - --rerun-fails \ + --format=short-verbose \ + --debug \ + --rerun-fails=2 \ --packages="./..." \ -- \ go test \ diff --git a/.github/workflows/nightly-test-integrations-1.16.x.yml b/.github/workflows/nightly-test-integrations-1.16.x.yml index 2492f5c80a7e0..d9a771c3fe133 100644 --- a/.github/workflows/nightly-test-integrations-1.16.x.yml +++ b/.github/workflows/nightly-test-integrations-1.16.x.yml @@ -14,7 +14,7 @@ env: TEST_RESULTS_ARTIFACT_NAME: test-results CONSUL_LICENSE: ${{ secrets.CONSUL_LICENSE }} GOTAGS: ${{ endsWith(github.repository, '-enterprise') && 'consulent' || '' }} - GOTESTSUM_VERSION: "1.11.0" + GOTESTSUM_VERSION: "1.10.1" CONSUL_BINARY_UPLOAD_NAME: consul-bin # strip the hashicorp/ off the front of github.repository for consul CONSUL_LATEST_IMAGE_NAME: ${{ endsWith(github.repository, '-enterprise') && github.repository || 'hashicorp/consul' }} @@ -255,8 +255,9 @@ jobs: docker run --rm ${{ env.CONSUL_LATEST_IMAGE_NAME }}:local consul version go run gotest.tools/gotestsum@v${{env.GOTESTSUM_VERSION}} \ --raw-command \ - --format=github-actions \ - --rerun-fails \ + --format=short-verbose \ + --debug \ + --rerun-fails=2 \ --packages="./..." \ -- \ go test \ diff --git a/.github/workflows/nightly-test-integrations-1.17.x.yml b/.github/workflows/nightly-test-integrations-1.17.x.yml deleted file mode 100644 index 1dc692e010500..0000000000000 --- a/.github/workflows/nightly-test-integrations-1.17.x.yml +++ /dev/null @@ -1,431 +0,0 @@ -# Copyright (c) HashiCorp, Inc. -# SPDX-License-Identifier: MPL-2.0 - -name: Nightly test-integrations 1.17.x - -on: - schedule: - # Run nightly at 1AM UTC/9PM EST/6PM PST - - cron: '* 1 * * *' - workflow_dispatch: {} - -env: - TEST_RESULTS_DIR: /tmp/test-results - TEST_RESULTS_ARTIFACT_NAME: test-results - CONSUL_LICENSE: ${{ secrets.CONSUL_LICENSE }} - GOTAGS: ${{ endsWith(github.repository, '-enterprise') && 'consulent' || '' }} - GOTESTSUM_VERSION: "1.11.0" - CONSUL_BINARY_UPLOAD_NAME: consul-bin - # strip the hashicorp/ off the front of github.repository for consul - CONSUL_LATEST_IMAGE_NAME: ${{ endsWith(github.repository, '-enterprise') && github.repository || 'hashicorp/consul' }} - GOPRIVATE: github.com/hashicorp # Required for enterprise deps - BRANCH: "release/1.17.x" - BRANCH_NAME: "release-1.17.x" # Used for naming artifacts - -jobs: - setup: - runs-on: ubuntu-latest - name: Setup - outputs: - compute-small: ${{ steps.runners.outputs.compute-small }} - compute-medium: ${{ steps.runners.outputs.compute-medium }} - compute-large: ${{ steps.runners.outputs.compute-large }} - compute-xl: ${{ steps.runners.outputs.compute-xl }} - enterprise: ${{ steps.runners.outputs.enterprise }} - steps: - - name: Checkout code - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 - with: - ref: ${{ env.BRANCH }} - - id: runners - run: .github/scripts/get_runner_classes.sh - - dev-build: - needs: [setup] - uses: ./.github/workflows/reusable-dev-build.yml - with: - runs-on: ${{ needs.setup.outputs.compute-large }} - repository-name: ${{ github.repository }} - uploaded-binary-name: 'consul-bin' - branch-name: "release/1.17.x" - secrets: - elevated-github-token: ${{ secrets.ELEVATED_GITHUB_TOKEN }} - - generate-envoy-job-matrices: - needs: [setup] - runs-on: ${{ fromJSON(needs.setup.outputs.compute-small) }} - name: Generate Envoy Job Matrices - outputs: - envoy-matrix: ${{ steps.set-matrix.outputs.envoy-matrix }} - steps: - - name: Checkout code - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 - with: - ref: ${{ env.BRANCH }} - - name: Generate Envoy Job Matrix - id: set-matrix - env: - # this is further going to multiplied in envoy-integration tests by the - # other dimensions in the matrix. Currently TOTAL_RUNNERS would be - # multiplied by 8 based on these values: - # envoy-version: ["1.24.12", "1.25.11", "1.26.6", "1.27.2"] - # xds-target: ["server", "client"] - TOTAL_RUNNERS: 4 - JQ_SLICER: '[ inputs ] | [_nwise(length / $runnercount | floor)]' - run: | - NUM_RUNNERS=$TOTAL_RUNNERS - NUM_DIRS=$(find ./test/integration/connect/envoy -mindepth 1 -maxdepth 1 -type d | wc -l) - - if [ "$NUM_DIRS" -lt "$NUM_RUNNERS" ]; then - echo "TOTAL_RUNNERS is larger than the number of tests/packages to split." - NUM_RUNNERS=$((NUM_DIRS-1)) - fi - # fix issue where test splitting calculation generates 1 more split than TOTAL_RUNNERS. - NUM_RUNNERS=$((NUM_RUNNERS-1)) - { - echo -n "envoy-matrix=" - find ./test/integration/connect/envoy -maxdepth 1 -type d -print0 \ - | xargs -0 -n 1 basename \ - | jq --raw-input --argjson runnercount "$NUM_RUNNERS" "$JQ_SLICER" \ - | jq --compact-output 'map(join("|"))' - } >> "$GITHUB_OUTPUT" - - envoy-integration-test: - runs-on: ${{ fromJSON(needs.setup.outputs.compute-large) }} - needs: - - setup - - generate-envoy-job-matrices - - dev-build - permissions: - id-token: write # NOTE: this permission is explicitly required for Vault auth. - contents: read - strategy: - fail-fast: false - matrix: - envoy-version: ["1.24.12", "1.25.11", "1.26.6", "1.27.2"] - xds-target: ["server", "client"] - test-cases: ${{ fromJSON(needs.generate-envoy-job-matrices.outputs.envoy-matrix) }} - env: - ENVOY_VERSION: ${{ matrix.envoy-version }} - XDS_TARGET: ${{ matrix.xds-target }} - AWS_LAMBDA_REGION: us-west-2 - steps: - - name: Checkout code - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 - with: - ref: ${{ env.BRANCH }} - - uses: actions/setup-go@fac708d6674e30b6ba41289acaab6d4b75aa0753 # v4.0.1 - with: - go-version-file: 'go.mod' - - - name: fetch binary - uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a # v3.0.2 - with: - name: '${{ env.CONSUL_BINARY_UPLOAD_NAME }}' - path: ./bin - - name: restore mode+x - run: chmod +x ./bin/consul - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@2a1a44ac4aa01993040736bd95bb470da1a38365 # v2.9.0 - - - name: Docker build - run: docker build -t consul:local -f ./build-support/docker/Consul-Dev.dockerfile ./bin - - - name: Envoy Integration Tests - env: - GOTESTSUM_JUNITFILE: ${{ env.TEST_RESULTS_DIR }}/results.xml - GOTESTSUM_FORMAT: standard-verbose - COMPOSE_INTERACTIVE_NO_CLI: 1 - LAMBDA_TESTS_ENABLED: "true" - # tput complains if this isn't set to something. - TERM: ansi - run: | - # shellcheck disable=SC2001 - echo "Running $(sed 's,|, ,g' <<< "${{ matrix.test-cases }}" |wc -w) subtests" - # shellcheck disable=SC2001 - sed 's,|,\n,g' <<< "${{ matrix.test-cases }}" - go run gotest.tools/gotestsum@v${{env.GOTESTSUM_VERSION}} \ - --debug \ - --rerun-fails \ - --rerun-fails-report=/tmp/gotestsum-rerun-fails \ - --jsonfile /tmp/jsonfile/go-test.log \ - --packages=./test/integration/connect/envoy \ - -- -timeout=30m -tags integration -run="TestEnvoy/(${{ matrix.test-cases }})" - - # NOTE: ENT specific step as we store secrets in Vault. - - name: Authenticate to Vault - if: ${{ endsWith(github.repository, '-enterprise') }} - id: vault-auth - run: vault-auth - - # NOTE: ENT specific step as we store secrets in Vault. - - name: Fetch Secrets - if: ${{ endsWith(github.repository, '-enterprise') }} - id: secrets - uses: hashicorp/vault-action@v2.5.0 - with: - url: ${{ steps.vault-auth.outputs.addr }} - caCertificate: ${{ steps.vault-auth.outputs.ca_certificate }} - token: ${{ steps.vault-auth.outputs.token }} - secrets: | - kv/data/github/${{ github.repository }}/datadog apikey | DATADOG_API_KEY; - - - name: prepare datadog-ci - if: ${{ !endsWith(github.repository, '-enterprise') }} - run: | - curl -L --fail "https://github.com/DataDog/datadog-ci/releases/latest/download/datadog-ci_linux-x64" --output "/usr/local/bin/datadog-ci" - chmod +x /usr/local/bin/datadog-ci - - - name: upload coverage - # do not run on forks - if: github.event.pull_request.head.repo.full_name == github.repository - env: - DATADOG_API_KEY: "${{ endsWith(github.repository, '-enterprise') && env.DATADOG_API_KEY || secrets.DATADOG_API_KEY }}" - DD_ENV: ci - run: datadog-ci junit upload --service "$GITHUB_REPOSITORY" $TEST_RESULTS_DIR/results.xml - - upgrade-integration-test: - runs-on: ${{ fromJSON(needs.setup.outputs.compute-large) }} - needs: - - setup - - dev-build - permissions: - id-token: write # NOTE: this permission is explicitly required for Vault auth. - contents: read - strategy: - fail-fast: false - matrix: - consul-version: ["1.15", "1.16", "1.17"] - env: - CONSUL_LATEST_VERSION: ${{ matrix.consul-version }} - ENVOY_VERSION: "1.24.6" - steps: - - name: Checkout code - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 - with: - ref: ${{ env.BRANCH }} - # NOTE: This step is specifically needed for ENT. It allows us to access the required private HashiCorp repos. - - name: Setup Git - if: ${{ endsWith(github.repository, '-enterprise') }} - run: git config --global url."https://${{ secrets.ELEVATED_GITHUB_TOKEN }}:@github.com".insteadOf "https://github.com" - - uses: actions/setup-go@fac708d6674e30b6ba41289acaab6d4b75aa0753 # v4.0.1 - with: - go-version-file: 'go.mod' - - run: go env - - # Get go binary from workspace - - name: fetch binary - uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a # v3.0.2 - with: - name: '${{ env.CONSUL_BINARY_UPLOAD_NAME }}' - path: . - - name: restore mode+x - run: chmod +x consul - - name: Build consul:local image - run: docker build -t ${{ env.CONSUL_LATEST_IMAGE_NAME }}:local -f ./build-support/docker/Consul-Dev.dockerfile . - - name: Build consul-envoy:latest-version image - id: buildConsulEnvoyLatestImage - run: | - if ${{ endsWith(github.repository, '-enterprise') }} == 'true' - then - docker build -t consul-envoy:latest-version --build-arg CONSUL_IMAGE=docker.mirror.hashicorp.services/${{ env.CONSUL_LATEST_IMAGE_NAME }}:${{ env.CONSUL_LATEST_VERSION }}-ent --build-arg ENVOY_VERSION=${{ env.ENVOY_VERSION }} -f ./test/integration/consul-container/assets/Dockerfile-consul-envoy ./test/integration/consul-container/assets - else - docker build -t consul-envoy:latest-version --build-arg CONSUL_IMAGE=docker.mirror.hashicorp.services/${{ env.CONSUL_LATEST_IMAGE_NAME }}:${{ env.CONSUL_LATEST_VERSION }} --build-arg ENVOY_VERSION=${{ env.ENVOY_VERSION }} -f ./test/integration/consul-container/assets/Dockerfile-consul-envoy ./test/integration/consul-container/assets - fi - - name: Build consul-envoy:target-version image - id: buildConsulEnvoyTargetImage - continue-on-error: true - run: docker build -t consul-envoy:target-version --build-arg CONSUL_IMAGE=${{ env.CONSUL_LATEST_IMAGE_NAME }}:local --build-arg ENVOY_VERSION=${{ env.ENVOY_VERSION }} -f ./test/integration/consul-container/assets/Dockerfile-consul-envoy ./test/integration/consul-container/assets - - name: Retry Build consul-envoy:target-version image - if: steps.buildConsulEnvoyTargetImage.outcome == 'failure' - run: docker build -t consul-envoy:target-version --build-arg CONSUL_IMAGE=${{ env.CONSUL_LATEST_IMAGE_NAME }}:local --build-arg ENVOY_VERSION=${{ env.ENVOY_VERSION }} -f ./test/integration/consul-container/assets/Dockerfile-consul-envoy ./test/integration/consul-container/assets - - name: Build sds image - run: docker build -t consul-sds-server ./test/integration/connect/envoy/test-sds-server/ - - name: Configure GH workaround for ipv6 loopback - if: ${{ !endsWith(github.repository, '-enterprise') }} - run: | - cat /etc/hosts && echo "-----------" - sudo sed -i 's/::1 *localhost ip6-localhost ip6-loopback/::1 ip6-localhost ip6-loopback/g' /etc/hosts - cat /etc/hosts - - name: Upgrade Integration Tests - run: | - mkdir -p "${{ env.TEST_RESULTS_DIR }}" - cd ./test/integration/consul-container/test/upgrade - docker run --rm ${{ env.CONSUL_LATEST_IMAGE_NAME }}:local consul version - go run gotest.tools/gotestsum@v${{env.GOTESTSUM_VERSION}} \ - --raw-command \ - --format=github-actions \ - --rerun-fails \ - --packages="./..." \ - -- \ - go test \ - -p=4 \ - -tags "${{ env.GOTAGS }}" \ - -timeout=30m \ - -json \ - ./... \ - --follow-log=false \ - --target-image ${{ env.CONSUL_LATEST_IMAGE_NAME }} \ - --target-version local \ - --latest-image docker.mirror.hashicorp.services/${{ env.CONSUL_LATEST_IMAGE_NAME }} \ - --latest-version "${{ env.CONSUL_LATEST_VERSION }}" - ls -lrt - env: - # this is needed because of incompatibility between RYUK container and GHA - GOTESTSUM_JUNITFILE: ${{ env.TEST_RESULTS_DIR }}/results.xml - GOTESTSUM_FORMAT: standard-verbose - COMPOSE_INTERACTIVE_NO_CLI: 1 - # tput complains if this isn't set to something. - TERM: ansi - # NOTE: ENT specific step as we store secrets in Vault. - - name: Authenticate to Vault - if: ${{ endsWith(github.repository, '-enterprise') }} - id: vault-auth - run: vault-auth - - # NOTE: ENT specific step as we store secrets in Vault. - - name: Fetch Secrets - if: ${{ endsWith(github.repository, '-enterprise') }} - id: secrets - uses: hashicorp/vault-action@v2.5.0 - with: - url: ${{ steps.vault-auth.outputs.addr }} - caCertificate: ${{ steps.vault-auth.outputs.ca_certificate }} - token: ${{ steps.vault-auth.outputs.token }} - secrets: | - kv/data/github/${{ github.repository }}/datadog apikey | DATADOG_API_KEY; - - - name: prepare datadog-ci - if: ${{ !endsWith(github.repository, '-enterprise') }} - run: | - curl -L --fail "https://github.com/DataDog/datadog-ci/releases/latest/download/datadog-ci_linux-x64" --output "/usr/local/bin/datadog-ci" - chmod +x /usr/local/bin/datadog-ci - - - name: upload coverage - # do not run on forks - if: github.event.pull_request.head.repo.full_name == github.repository - env: - DATADOG_API_KEY: "${{ endsWith(github.repository, '-enterprise') && env.DATADOG_API_KEY || secrets.DATADOG_API_KEY }}" - DD_ENV: ci - run: datadog-ci junit upload --service "$GITHUB_REPOSITORY" $TEST_RESULTS_DIR/results.xml - - upgrade-integration-test-deployer: - runs-on: ${{ fromJSON(needs.setup.outputs.compute-large ) }} - needs: - - setup - - dev-build - permissions: - id-token: write # NOTE: this permission is explicitly required for Vault auth. - contents: read - strategy: - fail-fast: false - matrix: - consul-version: [ "1.15", "1.16", "1.17"] - env: - CONSUL_LATEST_VERSION: ${{ matrix.consul-version }} - steps: - - name: Checkout code - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 - with: - ref: ${{ env.BRANCH }} - # NOTE: This step is specifically needed for ENT. It allows us to access the required private HashiCorp repos. - - name: Setup Git - if: ${{ endsWith(github.repository, '-enterprise') }} - run: git config --global url."https://${{ secrets.ELEVATED_GITHUB_TOKEN }}:@github.com".insteadOf "https://github.com" - - uses: actions/setup-go@fac708d6674e30b6ba41289acaab6d4b75aa0753 # v4.0.1 - with: - go-version-file: 'go.mod' - - run: go env - - name: Build image - run: make test-deployer-setup - - name: Upgrade Integration Tests - run: | - mkdir -p "${{ env.TEST_RESULTS_DIR }}" - export NOLOGBUFFER=1 - cd ./test-integ/upgrade - docker run --rm ${{ env.CONSUL_LATEST_IMAGE_NAME }}:local consul version - go run gotest.tools/gotestsum@v${{env.GOTESTSUM_VERSION}} \ - --raw-command \ - --format=standard-verbose \ - --debug \ - --packages="./..." \ - -- \ - go test \ - -tags "${{ env.GOTAGS }}" \ - -timeout=60m \ - -parallel=2 \ - -json \ - ./... \ - --target-image ${{ env.CONSUL_LATEST_IMAGE_NAME }} \ - --target-version local \ - --latest-image docker.mirror.hashicorp.services/${{ env.CONSUL_LATEST_IMAGE_NAME }} \ - --latest-version "${{ env.CONSUL_LATEST_VERSION }}" - env: - # this is needed because of incompatibility between RYUK container and GHA - GOTESTSUM_JUNITFILE: ${{ env.TEST_RESULTS_DIR }}/results.xml - GOTESTSUM_FORMAT: standard-verbose - COMPOSE_INTERACTIVE_NO_CLI: 1 - # tput complains if this isn't set to something. - TERM: ansi - # NOTE: ENT specific step as we store secrets in Vault. - - name: Authenticate to Vault - if: ${{ endsWith(github.repository, '-enterprise') }} - id: vault-auth - run: vault-auth - - # NOTE: ENT specific step as we store secrets in Vault. - - name: Fetch Secrets - if: ${{ endsWith(github.repository, '-enterprise') }} - id: secrets - uses: hashicorp/vault-action@v2.5.0 - with: - url: ${{ steps.vault-auth.outputs.addr }} - caCertificate: ${{ steps.vault-auth.outputs.ca_certificate }} - token: ${{ steps.vault-auth.outputs.token }} - secrets: | - kv/data/github/${{ github.repository }}/datadog apikey | DATADOG_API_KEY; - - - name: prepare datadog-ci - if: ${{ !endsWith(github.repository, '-enterprise') }} - run: | - curl -L --fail "https://github.com/DataDog/datadog-ci/releases/latest/download/datadog-ci_linux-x64" --output "/usr/local/bin/datadog-ci" - chmod +x /usr/local/bin/datadog-ci - - - name: upload coverage - # do not run on forks - if: github.event.pull_request.head.repo.full_name == github.repository - env: - DATADOG_API_KEY: "${{ endsWith(github.repository, '-enterprise') && env.DATADOG_API_KEY || secrets.DATADOG_API_KEY }}" - DD_ENV: ci - run: datadog-ci junit upload --service "$GITHUB_REPOSITORY" $TEST_RESULTS_DIR/results.xml - - test-integrations-success: - needs: - - setup - - dev-build - - generate-envoy-job-matrices - - envoy-integration-test - - upgrade-integration-test - - upgrade-integration-test-deployer - runs-on: ${{ fromJSON(needs.setup.outputs.compute-small) }} - if: ${{ always() }} - steps: - - name: evaluate upstream job results - run: | - # exit 1 if failure or cancelled result for any upstream job - if printf '${{ toJSON(needs) }}' | grep -E -i '\"result\": \"(failure|cancelled)\"'; then - printf "Tests failed or workflow cancelled:\n\n${{ toJSON(needs) }}" - exit 1 - fi - - name: Notify Slack - if: ${{ failure() }} - id: slack - uses: slackapi/slack-github-action@e28cf165c92ffef168d23c5c9000cffc8a25e117 # v1.24.0 - with: - payload: | - { - "message": "One or more nightly integration tests have failed on branch ${{ env.BRANCH }} for Consul. ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" - } - env: - SLACK_WEBHOOK_URL: ${{ secrets.CONSUL_NIGHTLY_INTEG_TEST_SLACK_WEBHOOK }} diff --git a/.github/workflows/nightly-test-integrations.yml b/.github/workflows/nightly-test-integrations.yml index 96359458ad300..cb49791c15f80 100644 --- a/.github/workflows/nightly-test-integrations.yml +++ b/.github/workflows/nightly-test-integrations.yml @@ -14,7 +14,7 @@ env: TEST_RESULTS_ARTIFACT_NAME: test-results CONSUL_LICENSE: ${{ secrets.CONSUL_LICENSE }} GOTAGS: ${{ endsWith(github.repository, '-enterprise') && 'consulent' || '' }} - GOTESTSUM_VERSION: "1.11.0" + GOTESTSUM_VERSION: "1.10.1" CONSUL_BINARY_UPLOAD_NAME: consul-bin # strip the hashicorp/ off the front of github.repository for consul CONSUL_LATEST_IMAGE_NAME: ${{ endsWith(github.repository, '-enterprise') && github.repository || 'hashicorp/consul' }} @@ -193,10 +193,10 @@ jobs: strategy: fail-fast: false matrix: - consul-version: [ "1.16", "1.17"] + consul-version: [ "1.15", "1.16", "1.17"] env: CONSUL_LATEST_VERSION: ${{ matrix.consul-version }} - ENVOY_VERSION: "1.25.4" + ENVOY_VERSION: "1.24.6" steps: - name: Checkout code uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 @@ -252,8 +252,9 @@ jobs: docker run --rm ${{ env.CONSUL_LATEST_IMAGE_NAME }}:local consul version go run gotest.tools/gotestsum@v${{env.GOTESTSUM_VERSION}} \ --raw-command \ - --format=github-actions \ - --rerun-fails \ + --format=short-verbose \ + --debug \ + --rerun-fails=2 \ --packages="./..." \ -- \ go test \ @@ -348,7 +349,8 @@ jobs: docker run --rm ${{ env.CONSUL_LATEST_IMAGE_NAME }}:local consul version go run gotest.tools/gotestsum@v${{env.GOTESTSUM_VERSION}} \ --raw-command \ - --format=github-actions \ + --format=short-verbose \ + --debug \ --packages="./..." \ -- \ go test \ @@ -431,12 +433,13 @@ jobs: - name: Upgrade Integration Tests run: | mkdir -p "${{ env.TEST_RESULTS_DIR }}" - #export NOLOGBUFFER=1 + export NOLOGBUFFER=1 cd ./test-integ/upgrade docker run --rm ${{ env.CONSUL_LATEST_IMAGE_NAME }}:local consul version go run gotest.tools/gotestsum@v${{env.GOTESTSUM_VERSION}} \ --raw-command \ - --format=github-actions \ + --format=standard-verbose \ + --debug \ --packages="./..." \ -- \ go test \ diff --git a/.github/workflows/reusable-check-go-mod.yml b/.github/workflows/reusable-check-go-mod.yml index 72442b2184c6f..51fd682776899 100644 --- a/.github/workflows/reusable-check-go-mod.yml +++ b/.github/workflows/reusable-check-go-mod.yml @@ -26,10 +26,14 @@ jobs: - uses: actions/setup-go@fac708d6674e30b6ba41289acaab6d4b75aa0753 # v4.0.1 with: go-version-file: 'go.mod' - - run: go mod tidy + # Run on all go.mod (include submodules). + - run: make go-mod-tidy - run: | if [[ -n $(git status -s) ]]; then echo "Git directory has changes" git status -s exit 1 fi + - name: Notify Slack + if: ${{ failure() }} + run: .github/scripts/notify_slack.sh diff --git a/.github/workflows/reusable-dev-build-windows.yml b/.github/workflows/reusable-dev-build-windows.yml index b6bde2653b4bf..01247c477878c 100644 --- a/.github/workflows/reusable-dev-build-windows.yml +++ b/.github/workflows/reusable-dev-build-windows.yml @@ -42,3 +42,6 @@ jobs: with: name: ${{inputs.uploaded-binary-name}} path: consul.exe + - name: Notify Slack + if: ${{ failure() }} + run: .github/scripts/notify_slack.sh diff --git a/.github/workflows/reusable-dev-build.yml b/.github/workflows/reusable-dev-build.yml index eaf9a643ebaa8..99bcb96592c3a 100644 --- a/.github/workflows/reusable-dev-build.yml +++ b/.github/workflows/reusable-dev-build.yml @@ -54,3 +54,6 @@ jobs: with: name: ${{inputs.uploaded-binary-name}} path: ./bin/consul + - name: Notify Slack + if: ${{ failure() }} + run: .github/scripts/notify_slack.sh diff --git a/.github/workflows/reusable-lint.yml b/.github/workflows/reusable-lint.yml index 52d2dc67d9af3..902ff1867144f 100644 --- a/.github/workflows/reusable-lint.yml +++ b/.github/workflows/reusable-lint.yml @@ -18,7 +18,7 @@ on: elevated-github-token: required: true env: - GOTAGS: "${{ github.event.repository.name == 'consul-enterprise' && 'consulent consuldev' || '' }}" + GOTAGS: "${{ github.event.repository.name == 'consul-enterprise' && 'consulent consulprem consuldev' || '' }}" GOARCH: ${{inputs.go-arch}} GOPRIVATE: github.com/hashicorp # Required for enterprise deps @@ -55,3 +55,6 @@ jobs: version: v1.51.1 args: --build-tags="${{ env.GOTAGS }}" -v skip-cache: true + - name: Notify Slack + if: ${{ failure() }} + run: .github/scripts/notify_slack.sh diff --git a/.github/workflows/reusable-unit-split.yml b/.github/workflows/reusable-unit-split.yml index 0095d7739e16e..3d959d168beda 100644 --- a/.github/workflows/reusable-unit-split.yml +++ b/.github/workflows/reusable-unit-split.yml @@ -46,7 +46,7 @@ on: required: true env: TEST_RESULTS: /tmp/test-results - GOTESTSUM_VERSION: "1.11.0" + GOTESTSUM_VERSION: "1.10.1" GOARCH: ${{inputs.go-arch}} TOTAL_RUNNERS: ${{inputs.runner-count}} CONSUL_LICENSE: ${{secrets.consul-license}} @@ -115,19 +115,21 @@ jobs: PACKAGE_NAMES="${{ join(matrix.package, ' ') }}" # PACKAGE_NAMES="${{ matrix.package }}" + ${{inputs.go-test-flags}} + # some tests expect this umask, and arm images have a different default umask 0022 go run gotest.tools/gotestsum@v${{env.GOTESTSUM_VERSION}} \ - --format=github-actions \ - --format-hide-empty-pkg \ + --format=short-verbose \ --jsonfile /tmp/jsonfile/go-test.log \ - --rerun-fails \ + --debug \ + --rerun-fails=3 \ + --rerun-fails-max-failures=40 \ --rerun-fails-report=/tmp/gotestsum-rerun-fails \ --packages="$PACKAGE_NAMES" \ --junitfile ${{env.TEST_RESULTS}}/gotestsum-report.xml -- \ -tags="${{env.GOTAGS}}" \ - ${{inputs.go-test-flags}} \ -cover -coverprofile=coverage.txt \ -timeout=30m @@ -173,3 +175,6 @@ jobs: - name: "Re-run fails report" run: | .github/scripts/rerun_fails_report.sh /tmp/gotestsum-rerun-fails + - name: Notify Slack + if: ${{ failure() }} + run: .github/scripts/notify_slack.sh diff --git a/.github/workflows/reusable-unit.yml b/.github/workflows/reusable-unit.yml index 8a69d22385e4f..3b50bfa7e3887 100644 --- a/.github/workflows/reusable-unit.yml +++ b/.github/workflows/reusable-unit.yml @@ -46,7 +46,7 @@ on: required: true env: TEST_RESULTS: /tmp/test-results - GOTESTSUM_VERSION: "1.11.0" + GOTESTSUM_VERSION: "1.10.1" GOARCH: ${{inputs.go-arch}} CONSUL_LICENSE: ${{secrets.consul-license}} GOTAGS: ${{ inputs.go-tags}} @@ -96,15 +96,19 @@ jobs: # some tests expect this umask, and arm images have a different default umask 0022 + ${{inputs.go-test-flags}} + go run gotest.tools/gotestsum@v${{env.GOTESTSUM_VERSION}} \ - --format=github-actions \ + --format=short-verbose \ --jsonfile /tmp/jsonfile/go-test.log \ - --rerun-fails \ + --debug \ + --rerun-fails=3 \ + --rerun-fails-max-failures=40 \ --rerun-fails-report=/tmp/gotestsum-rerun-fails \ --packages="$PACKAGE_NAMES" \ --junitfile ${{env.TEST_RESULTS}}/gotestsum-report.xml -- \ -tags="${{env.GOTAGS}}" \ - ${{inputs.go-test-flags}} \ + ${GO_TEST_FLAGS-} \ -cover -coverprofile=coverage.txt \ -timeout=30m @@ -150,3 +154,6 @@ jobs: - name: "Re-run fails report" run: | .github/scripts/rerun_fails_report.sh /tmp/gotestsum-rerun-fails + - name: Notify Slack + if: ${{ failure() }} + run: .github/scripts/notify_slack.sh diff --git a/.github/workflows/test-integrations-windows.yml b/.github/workflows/test-integrations-windows.yml index 29080a10ea28b..16f7b26fdc67a 100644 --- a/.github/workflows/test-integrations-windows.yml +++ b/.github/workflows/test-integrations-windows.yml @@ -11,7 +11,7 @@ env: TEST_RESULTS_ARTIFACT_NAME: test-results CONSUL_LICENSE: ${{ secrets.CONSUL_LICENSE }} GOTAGS: ${{ endsWith(github.repository, '-enterprise') && 'consulent' || '' }} - GOTESTSUM_VERSION: "1.11.0" + GOTESTSUM_VERSION: "1.9.0" CONSUL_BINARY_UPLOAD_NAME: consul.exe # strip the hashicorp/ off the front of github.repository for consul CONSUL_LATEST_IMAGE_NAME: ${{ endsWith(github.repository, '-enterprise') && github.repository || 'consul' }} diff --git a/.github/workflows/test-integrations.yml b/.github/workflows/test-integrations.yml index 7782ec9b31d6b..87b1154f8cfbc 100644 --- a/.github/workflows/test-integrations.yml +++ b/.github/workflows/test-integrations.yml @@ -19,7 +19,7 @@ env: TEST_RESULTS_ARTIFACT_NAME: test-results CONSUL_LICENSE: ${{ secrets.CONSUL_LICENSE }} GOTAGS: ${{ endsWith(github.repository, '-enterprise') && 'consulent' || '' }} - GOTESTSUM_VERSION: "1.11.0" + GOTESTSUM_VERSION: "1.10.1" CONSUL_BINARY_UPLOAD_NAME: consul-bin # strip the hashicorp/ off the front of github.repository for consul CONSUL_LATEST_IMAGE_NAME: ${{ endsWith(github.repository, '-enterprise') && github.repository || 'hashicorp/consul' }} @@ -81,6 +81,7 @@ jobs: strategy: matrix: nomad-version: ['v1.6.2', 'v1.5.9', 'v1.4.13'] + steps: - name: Checkout Nomad uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 @@ -110,7 +111,7 @@ jobs: run: | go install gotest.tools/gotestsum@v${{env.GOTESTSUM_VERSION}} && \ gotestsum \ - --format=github-actions \ + --format=short-verbose \ --rerun-fails \ --rerun-fails-report=/tmp/gotestsum-rerun-fails \ --packages="./command/agent/consul" \ @@ -184,17 +185,17 @@ jobs: run: | mkdir -p "${{ env.TEST_RESULTS_DIR }}" go run gotest.tools/gotestsum@v${{env.GOTESTSUM_VERSION}} \ - --format=github-actions \ + --format=short-verbose \ --junitfile "${{ env.TEST_RESULTS_DIR }}/gotestsum-report.xml" \ -- -tags "${{ env.GOTAGS }}" -cover -coverprofile=coverage.txt ./agent/connect/ca # Run leader tests that require Vault go run gotest.tools/gotestsum@v${{env.GOTESTSUM_VERSION}} \ - --format=github-actions \ + --format=short-verbose \ --junitfile "${{ env.TEST_RESULTS_DIR }}/gotestsum-report-leader.xml" \ -- -tags "${{ env.GOTAGS }}" -cover -coverprofile=coverage-leader.txt -run Vault ./agent/consul # Run agent tests that require Vault go run gotest.tools/gotestsum@v${{env.GOTESTSUM_VERSION}} \ - --format=github-actions \ + --format=short-verbose \ --junitfile "${{ env.TEST_RESULTS_DIR }}/gotestsum-report-agent.xml" \ -- -tags "${{ env.GOTAGS }}" -cover -coverprofile=coverage-agent.txt -run Vault ./agent @@ -431,8 +432,9 @@ jobs: docker run --rm ${{ env.CONSUL_LATEST_IMAGE_NAME }}:local consul version go run gotest.tools/gotestsum@v${{env.GOTESTSUM_VERSION}} \ --raw-command \ - --format=github-actions \ - --rerun-fails \ + --format=pkgname-and-test-fails \ + --debug \ + --rerun-fails=3 \ -- \ go test \ -p=6 \ @@ -513,11 +515,12 @@ jobs: - name: Integration Tests run: | mkdir -p "${{ env.TEST_RESULTS_DIR }}" - #export NOLOGBUFFER=1 + export NOLOGBUFFER=1 cd ./test-integ go run gotest.tools/gotestsum@v${{env.GOTESTSUM_VERSION}} \ --raw-command \ - --format=github-actions \ + --format=standard-verbose \ + --debug \ -- \ go test \ -tags "${{ env.GOTAGS }}" \ diff --git a/.github/workflows/verify-envoy-version.yml b/.github/workflows/verify-envoy-version.yml index dafa9db6f22a6..003888eddf6e1 100644 --- a/.github/workflows/verify-envoy-version.yml +++ b/.github/workflows/verify-envoy-version.yml @@ -13,7 +13,7 @@ on: branches: - main - release/** - + env: SKIP_VERIFY_ENVOY_VERSION: ${{ vars.SKIP_VERIFY_ENVOY_VERSION }} diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml deleted file mode 100644 index ec68f1133db8e..0000000000000 --- a/.pre-commit-config.yaml +++ /dev/null @@ -1,54 +0,0 @@ -# Copyright (c) HashiCorp, Inc. -# SPDX-License-Identifier: BUSL-1.1 - -# See https://pre-commit.com for more information -# See https://pre-commit.com/hooks.html for more hooks -# -# Opt-in to running pre-commit hooks by running `make tools`. -# -# Guidelines for adding new pre-commit hooks -# ==================================================================== -# A hook SHOULD be blazingly fast (<2s) to impose minimal latency on -# developer workflows (e.g. golangci-lint takes > 8s) -# -# A hook SHOULD attempt to fix errors, not just identify them. -# -# A hook SHOULD address common errors in files that tend to change -# frequently. While surfacing esoteric issues is nice, hooks that have a -# wider impact are preferred. -# -repos: -- repo: https://github.com/tekwizely/pre-commit-golang - rev: v1.0.0-rc.1 - hooks: - # Formats go imports into deterministic sections. - # `pre-commit run gci` to run in isolation. - - id: my-cmd - name: Format go imports - alias: gci - # skip all generated go files - exclude: | - (?x)( - ^proto-public/| - ^proto/| - ^agent/xds/z_xds_packages\.go$| - ^testing/deployer/topology/default_versions\.go$| - \.deepcopy\.go$| - \.gen\.go$| - \.pb\.go$| - \.pb\.binary\.go$| - generated_funcs\.go$| - _generated_test\.go$| - mock_.+\.go$ - ) - args: - - "gci" - - "write" - - "--section" - - "standard" - - "--section" - - "default" - - "--section" - - "prefix(github.com/hashicorp/)" - - "--section" - - "prefix(github.com/hashicorp/consul/)" diff --git a/LICENSE b/LICENSE index 4c58afb51844f..032314fc058ea 100644 --- a/LICENSE +++ b/LICENSE @@ -1,44 +1,15 @@ License text copyright (c) 2020 MariaDB Corporation Ab, All Rights Reserved. -“Business Source License” is a trademark of MariaDB Corporation Ab. +"Business Source License" is a trademark of MariaDB Corporation Ab. Parameters Licensor: HashiCorp, Inc. -Licensed Work: Consul 1.17.0. The Licensed Work is (c) 2023 HashiCorp, Inc. -Additional Use Grant: You may make production use of the Licensed Work, provided - Your use does not include offering the Licensed Work to third - parties on a hosted or embedded basis in order to compete with - HashiCorp’s paid version(s) of the Licensed Work. For purposes - of this license: - - A “competitive offering” is a Product that is offered to third - parties on a paid basis, including through paid support - arrangements, that significantly overlaps with the capabilities - of HashiCorp’s paid version(s) of the Licensed Work. If Your - Product is not a competitive offering when You first make it - generally available, it will not become a competitive offering - later due to HashiCorp releasing a new version of the Licensed - Work with additional capabilities. In addition, Products that - are not provided on a paid basis are not competitive. - - “Product” means software that is offered to end users to manage - in their own environments or offered as a service on a hosted - basis. - - “Embedded” means including the source code or executable code - from the Licensed Work in a competitive offering. “Embedded” - also means packaging the competitive offering in such a way - that the Licensed Work must be accessed or downloaded for the - competitive offering to operate. - - Hosting or using the Licensed Work(s) for internal purposes - within an organization is not considered a competitive - offering. HashiCorp considers your organization to include all - of your affiliates under common control. - - For binding interpretive guidance on using HashiCorp products - under the Business Source License, please visit our FAQ. - (https://www.hashicorp.com/license-faq) +Licensed Work: Consul Version 1.17.0 or later. The Licensed Work is (c) 2023 + HashiCorp, Inc. +Additional Use Grant: You may make production use of the Licensed Work, + provided such use does not include offering the Licensed Work + to third parties on a hosted or embedded basis which is + competitive with HashiCorp's products. Change Date: Four years from the date the Licensed Work is published. Change License: MPL 2.0 @@ -88,4 +59,4 @@ TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON AN “AS IS” BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS OR IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND -TITLE. +TITLE. \ No newline at end of file diff --git a/Makefile b/Makefile index 7c3a76f7557fd..d98335a7b9931 100644 --- a/Makefile +++ b/Makefile @@ -14,14 +14,13 @@ GOLANGCI_LINT_VERSION='v1.51.1' MOCKERY_VERSION='v2.20.0' BUF_VERSION='v1.26.0' -PROTOC_GEN_GO_GRPC_VERSION='v1.2.0' +PROTOC_GEN_GO_GRPC_VERSION="v1.2.0" MOG_VERSION='v0.4.1' PROTOC_GO_INJECT_TAG_VERSION='v1.3.0' -PROTOC_GEN_GO_BINARY_VERSION='v0.1.0' +PROTOC_GEN_GO_BINARY_VERSION="v0.1.0" DEEP_COPY_VERSION='bc3f5aa5735d8a54961580a3a24422c308c831c2' COPYWRITE_TOOL_VERSION='v0.16.4' -# Go imports formatter -GCI_VERSION='v0.11.2' +LINT_CONSUL_RETRY_VERSION='v1.3.0' MOCKED_PB_DIRS= pbdns diff --git a/README.md b/README.md index c23053f0e1f7d..870e00f76c761 100644 --- a/README.md +++ b/README.md @@ -23,9 +23,6 @@ Consul provides several key features: can use sidecar proxies in a service mesh configuration to establish TLS connections for inbound and outbound connections with Transparent Proxy. -* **API Gateway** - Consul API Gateway manages access to services within Consul Service Mesh, - allow users to define traffic and authorization policies to services deployed within the mesh. - * **Service Discovery** - Consul makes it simple for services to register themselves and to discover other services via a DNS or HTTP interface. External services such as SaaS providers can be registered as well. diff --git a/acl/validation.go b/acl/validation.go index 652a76e87930c..c0017effa15d7 100644 --- a/acl/validation.go +++ b/acl/validation.go @@ -68,10 +68,6 @@ func IsValidRoleName(name string) bool { return validRoleName.MatchString(name) } -func IsValidPolicyName(name string) bool { - return ValidatePolicyName(name) == nil -} - // IsValidRoleName returns true if the provided name can be used as an // ACLAuthMethod Name. func IsValidAuthMethodName(name string) bool { diff --git a/agent/acl_endpoint.go b/agent/acl_endpoint.go index fb94862800eba..ac773c59b443c 100644 --- a/agent/acl_endpoint.go +++ b/agent/acl_endpoint.go @@ -1166,6 +1166,7 @@ func (s *HTTPHandlers) ACLTemplatedPoliciesList(resp http.ResponseWriter, req *h TemplateName: tmpBase.TemplateName, Schema: tmpBase.Schema, Template: tmpBase.Template, + Description: tmpBase.Description, } } @@ -1211,6 +1212,7 @@ func (s *HTTPHandlers) ACLTemplatedPolicyRead(resp http.ResponseWriter, req *htt TemplateName: baseTemplate.TemplateName, Schema: baseTemplate.Schema, Template: baseTemplate.Template, + Description: baseTemplate.Description, }, nil } diff --git a/agent/acl_endpoint_test.go b/agent/acl_endpoint_test.go index b8a607ec05184..419763e5c4fe7 100644 --- a/agent/acl_endpoint_test.go +++ b/agent/acl_endpoint_test.go @@ -1407,12 +1407,13 @@ func TestACL_HTTP(t *testing.T) { var list map[string]api.ACLTemplatedPolicyResponse require.NoError(t, json.NewDecoder(resp.Body).Decode(&list)) - require.Len(t, list, 5) + require.Len(t, list, 7) require.Equal(t, api.ACLTemplatedPolicyResponse{ TemplateName: api.ACLTemplatedPolicyServiceName, Schema: structs.ACLTemplatedPolicyServiceSchema, Template: structs.ACLTemplatedPolicyService, + Description: structs.ACLTemplatedPolicyServiceDescription, }, list[api.ACLTemplatedPolicyServiceName]) }) t.Run("Read", func(t *testing.T) { @@ -1435,6 +1436,7 @@ func TestACL_HTTP(t *testing.T) { var templatedPolicy api.ACLTemplatedPolicyResponse require.NoError(t, json.NewDecoder(resp.Body).Decode(&templatedPolicy)) require.Equal(t, structs.ACLTemplatedPolicyNoRequiredVariablesSchema, templatedPolicy.Schema) + require.Equal(t, structs.ACLTemplatedPolicyDNSDescription, templatedPolicy.Description) require.Equal(t, api.ACLTemplatedPolicyDNSName, templatedPolicy.TemplateName) require.Equal(t, structs.ACLTemplatedPolicyDNS, templatedPolicy.Template) }) diff --git a/agent/config/runtime_test.go b/agent/config/runtime_test.go index 8890fa443df1e..7158b014d15d1 100644 --- a/agent/config/runtime_test.go +++ b/agent/config/runtime_test.go @@ -69,9 +69,6 @@ var defaultGrpcTlsAddr = net.TCPAddrFromAddrPort(netip.MustParseAddrPort("127.0. // checks for warnings on deprecated fields and flags. These tests // should check one option at a time if possible func TestLoad_IntegrationWithFlags(t *testing.T) { - if testing.Short() { - t.Skip("too slow for testing.Short") - } dataDir := testutil.TempDir(t, "config") run := func(t *testing.T, tc testCase) { diff --git a/agent/connect/ca/provider_vault_test.go b/agent/connect/ca/provider_vault_test.go index 24b81abd54701..edd094f5502a7 100644 --- a/agent/connect/ca/provider_vault_test.go +++ b/agent/connect/ca/provider_vault_test.go @@ -628,9 +628,6 @@ func TestVaultCAProvider_SignLeaf(t *testing.T) { } func TestVaultCAProvider_CrossSignCA(t *testing.T) { - if testing.Short() { - t.Skip("too slow for testing.Short") - } SkipIfVaultNotPresent(t) t.Parallel() diff --git a/agent/consul/acl_endpoint_test.go b/agent/consul/acl_endpoint_test.go index 7033e90881ee9..39840942d1851 100644 --- a/agent/consul/acl_endpoint_test.go +++ b/agent/consul/acl_endpoint_test.go @@ -3663,37 +3663,6 @@ func TestACLEndpoint_BindingRuleSet(t *testing.T) { require.Equal(t, "test-node", rule.BindName) }) - t.Run("Bind Policy", func(t *testing.T) { - req := structs.ACLBindingRuleSetRequest{ - Datacenter: "dc1", - BindingRule: structs.ACLBindingRule{ - Description: "foobar policy", - AuthMethod: testAuthMethod.Name, - Selector: "serviceaccount.name==abc", - BindType: structs.BindingRuleBindTypePolicy, - BindName: "test-policy", - }, - WriteRequest: structs.WriteRequest{Token: TestDefaultInitialManagementToken}, - } - var resp structs.ACLBindingRule - - err := aclEp.BindingRuleSet(&req, &resp) - require.NoError(t, err) - require.NotNil(t, resp.ID) - - // Get the rule directly to validate that it exists - ruleResp, err := retrieveTestBindingRule(codec, TestDefaultInitialManagementToken, "dc1", resp.ID) - require.NoError(t, err) - rule := ruleResp.BindingRule - - require.NotEmpty(t, rule.ID) - require.Equal(t, rule.Description, "foobar policy") - require.Equal(t, rule.AuthMethod, testAuthMethod.Name) - require.Equal(t, "serviceaccount.name==abc", rule.Selector) - require.Equal(t, structs.BindingRuleBindTypePolicy, rule.BindType) - require.Equal(t, "test-policy", rule.BindName) - }) - t.Run("templated policy", func(t *testing.T) { req := structs.ACLBindingRuleSetRequest{ Datacenter: "dc1", @@ -3872,7 +3841,7 @@ func TestACLEndpoint_BindingRuleSet(t *testing.T) { t.Run("Create fails; invalid bind type", func(t *testing.T) { reqRule := newRule() reqRule.BindType = "invalid" - requireSetErrors(t, reqRule, "invalid Binding Rule: unknown BindType") + requireSetErrors(t, reqRule, "Invalid Binding Rule: unknown BindType") }) t.Run("Create fails; bind name with unknown vars", func(t *testing.T) { @@ -4571,11 +4540,6 @@ func TestACLEndpoint_Login(t *testing.T) { "fake-node", "default", "mynode", "jkl101", ) - testauth.InstallSessionToken( - testSessionID, - "fake-policy", // 1 rule (policy) - "default", "mypolicy", "jkl012", - ) method, err := upsertTestAuthMethod(codec, TestDefaultInitialManagementToken, "dc1", testSessionID) require.NoError(t, err) @@ -4623,15 +4587,6 @@ func TestACLEndpoint_Login(t *testing.T) { ) require.NoError(t, err) - // policy rule - _, err = upsertTestBindingRule( - codec, TestDefaultInitialManagementToken, "dc1", method.Name, - "serviceaccount.namespace==default and serviceaccount.name==mypolicy", - structs.BindingRuleBindTypePolicy, - "method-${serviceaccount.name}", - ) - require.NoError(t, err) - t.Run("do not provide a token", func(t *testing.T) { req := structs.ACLLoginRequest{ Auth: &structs.ACLLoginParams{ diff --git a/agent/consul/auth/binder.go b/agent/consul/auth/binder.go index ba66bc916bdbe..1964cc5a877ea 100644 --- a/agent/consul/auth/binder.go +++ b/agent/consul/auth/binder.go @@ -36,16 +36,14 @@ func NewBinder(store BinderStateStore, datacenter string) *Binder { type BinderStateStore interface { ACLBindingRuleList(ws memdb.WatchSet, methodName string, entMeta *acl.EnterpriseMeta) (uint64, structs.ACLBindingRules, error) ACLRoleGetByName(ws memdb.WatchSet, roleName string, entMeta *acl.EnterpriseMeta) (uint64, *structs.ACLRole, error) - ACLPolicyGetByName(ws memdb.WatchSet, policyName string, entMeta *acl.EnterpriseMeta) (uint64, *structs.ACLPolicy, error) } -// Bindings contains the ACL roles, service identities, node identities, policies, +// Bindings contains the ACL roles, service identities, node identities, // templated policies, and enterprise meta to be assigned to the created token. type Bindings struct { Roles []structs.ACLTokenRoleLink ServiceIdentities []*structs.ACLServiceIdentity NodeIdentities []*structs.ACLNodeIdentity - Policies []structs.ACLTokenPolicyLink TemplatedPolicies structs.ACLTemplatedPolicies EnterpriseMeta acl.EnterpriseMeta } @@ -60,8 +58,7 @@ func (b *Bindings) None() bool { return len(b.ServiceIdentities) == 0 && len(b.NodeIdentities) == 0 && len(b.TemplatedPolicies) == 0 && - len(b.Roles) == 0 && - len(b.Policies) == 0 + len(b.Roles) == 0 } // Bind collects the ACL roles, service identities, etc. to be assigned to the @@ -122,24 +119,6 @@ func (b *Binder) Bind(authMethod *structs.ACLAuthMethod, verifiedIdentity *authm } bindings.TemplatedPolicies = append(bindings.TemplatedPolicies, templatedPolicy) - case structs.BindingRuleBindTypePolicy: - bindName, err := computeBindName(rule.BindName, verifiedIdentity.ProjectedVars, acl.IsValidRoleName) - if err != nil { - return nil, err - } - - _, policy, err := b.store.ACLPolicyGetByName(nil, bindName, &bindings.EnterpriseMeta) - if err != nil { - return nil, err - } - - if policy != nil { - bindings.Policies = append(bindings.Policies, structs.ACLTokenPolicyLink{ - ID: policy.ID, - Name: policy.Name, - }) - } - case structs.BindingRuleBindTypeRole: bindName, err := computeBindName(rule.BindName, verifiedIdentity.ProjectedVars, acl.IsValidRoleName) if err != nil { @@ -198,13 +177,8 @@ func IsValidBindingRule(bindType, bindName string, bindVars *structs.ACLTemplate if _, err := computeBindName(bindName, fakeVarMap, acl.IsValidRoleName); err != nil { return fmt.Errorf("failed to validate bindType %q: %w", bindType, err) } - - case structs.BindingRuleBindTypePolicy: - if _, err := computeBindName(bindName, fakeVarMap, acl.IsValidPolicyName); err != nil { - return fmt.Errorf("failed to validate bindType %q: %w", bindType, err) - } default: - return fmt.Errorf("invalid Binding Rule: unknown BindType %q", bindType) + return fmt.Errorf("Invalid Binding Rule: unknown BindType %q", bindType) } return nil diff --git a/agent/consul/auth/binder_test.go b/agent/consul/auth/binder_test.go index 3220ff2b303c1..41e0d14ddc35f 100644 --- a/agent/consul/auth/binder_test.go +++ b/agent/consul/auth/binder_test.go @@ -15,7 +15,6 @@ import ( "github.com/hashicorp/consul/agent/consul/authmethod" "github.com/hashicorp/consul/agent/consul/state" "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/api" ) func TestBindings_None(t *testing.T) { @@ -28,79 +27,11 @@ func TestBindings_None(t *testing.T) { b = &Bindings{Roles: []structs.ACLTokenRoleLink{{ID: generateID(t)}}} require.False(t, b.None()) - b = &Bindings{Policies: []structs.ACLTokenPolicyLink{{ID: generateID(t)}}} - require.False(t, b.None()) - b = &Bindings{ServiceIdentities: []*structs.ACLServiceIdentity{{ServiceName: "web"}}} require.False(t, b.None()) b = &Bindings{NodeIdentities: []*structs.ACLNodeIdentity{{NodeName: "node-123"}}} require.False(t, b.None()) - - b = &Bindings{TemplatedPolicies: []*structs.ACLTemplatedPolicy{{TemplateName: api.ACLTemplatedPolicyDNSName}}} - require.False(t, b.None()) -} - -func TestBinder_Policy_Success(t *testing.T) { - store := testStateStore(t) - binder := &Binder{store: store} - - authMethod := &structs.ACLAuthMethod{ - Name: "test-auth-method", - Type: "testing", - } - require.NoError(t, store.ACLAuthMethodSet(0, authMethod)) - - targetPolicy := &structs.ACLPolicy{ - ID: generateID(t), - Name: "foo-policy", - } - require.NoError(t, store.ACLPolicySet(0, targetPolicy)) - - otherPolicy := &structs.ACLPolicy{ - ID: generateID(t), - Name: "not-my-policy", - } - require.NoError(t, store.ACLPolicySet(0, otherPolicy)) - - bindingRules := structs.ACLBindingRules{ - { - ID: generateID(t), - Selector: "role==engineer", - BindType: structs.BindingRuleBindTypePolicy, - BindName: "${editor}-policy", - AuthMethod: authMethod.Name, - }, - { - ID: generateID(t), - Selector: "role==engineer", - BindType: structs.BindingRuleBindTypePolicy, - BindName: "this-policy-does-not-exist", - AuthMethod: authMethod.Name, - }, - { - ID: generateID(t), - Selector: "language==js", - BindType: structs.BindingRuleBindTypePolicy, - BindName: otherPolicy.Name, - AuthMethod: authMethod.Name, - }, - } - require.NoError(t, store.ACLBindingRuleBatchSet(0, bindingRules)) - - result, err := binder.Bind(&structs.ACLAuthMethod{}, &authmethod.Identity{ - SelectableFields: map[string]string{ - "role": "engineer", - "language": "go", - }, - ProjectedVars: map[string]string{ - "editor": "foo", - }, - }) - require.NoError(t, err) - require.Equal(t, []structs.ACLTokenPolicyLink{ - {ID: targetPolicy.ID, Name: targetPolicy.Name}, - }, result.Policies) } func TestBinder_Roles_Success(t *testing.T) { @@ -191,32 +122,6 @@ func TestBinder_Roles_NameValidation(t *testing.T) { require.Contains(t, err.Error(), "invalid bind name") } -func TestBinder_Policy_NameValidation(t *testing.T) { - store := testStateStore(t) - binder := &Binder{store: store} - - authMethod := &structs.ACLAuthMethod{ - Name: "test-auth-method", - Type: "testing", - } - require.NoError(t, store.ACLAuthMethodSet(0, authMethod)) - - bindingRules := structs.ACLBindingRules{ - { - ID: generateID(t), - Selector: "", - BindType: structs.BindingRuleBindTypePolicy, - BindName: "INVALID!", - AuthMethod: authMethod.Name, - }, - } - require.NoError(t, store.ACLBindingRuleBatchSet(0, bindingRules)) - - _, err := binder.Bind(&structs.ACLAuthMethod{}, &authmethod.Identity{}) - require.Error(t, err) - require.Contains(t, err.Error(), "invalid bind name") -} - func TestBinder_ServiceIdentities_Success(t *testing.T) { store := testStateStore(t) binder := &Binder{store: store} @@ -370,60 +275,54 @@ func Test_IsValidBindingRule(t *testing.T) { "invalid", "blah", nil, "", true}, // valid HIL, invalid name {"empty", - "all", "", nil, "", true}, + "both", "", nil, "", true}, {"just end", - "all", "}", nil, "", true}, + "both", "}", nil, "", true}, {"var without start", - "all", " item }", nil, "item", true}, + "both", " item }", nil, "item", true}, {"two vars missing second start", - "all", "before-${ item }after--more }", nil, "item,more", true}, + "both", "before-${ item }after--more }", nil, "item,more", true}, // names for the two types are validated differently {"@ is disallowed", - "all", "bad@name", nil, "", true}, + "both", "bad@name", nil, "", true}, {"leading dash", "role", "-name", nil, "", false}, - {"leading dash", - "policy", "-name", nil, "", false}, {"leading dash", "service", "-name", nil, "", true}, {"trailing dash", "role", "name-", nil, "", false}, - {"trailing dash", - "policy", "name-", nil, "", false}, {"trailing dash", "service", "name-", nil, "", true}, {"inner dash", - "all", "name-end", nil, "", false}, + "both", "name-end", nil, "", false}, {"upper case", "role", "NAME", nil, "", false}, - {"upper case", - "policy", "NAME", nil, "", false}, {"upper case", "service", "NAME", nil, "", true}, // valid HIL, valid name {"no vars", - "all", "nothing", nil, "", false}, + "both", "nothing", nil, "", false}, {"just var", - "all", "${item}", nil, "item", false}, + "both", "${item}", nil, "item", false}, {"var in middle", - "all", "before-${item}after", nil, "item", false}, + "both", "before-${item}after", nil, "item", false}, {"two vars", - "all", "before-${item}after-${more}", nil, "item,more", false}, + "both", "before-${item}after-${more}", nil, "item,more", false}, // bad {"no bind name", - "all", "", nil, "", true}, + "both", "", nil, "", true}, {"just start", - "all", "${", nil, "", true}, + "both", "${", nil, "", true}, {"backwards", - "all", "}${", nil, "", true}, + "both", "}${", nil, "", true}, {"no varname", - "all", "${}", nil, "", true}, + "both", "${}", nil, "", true}, {"missing map key", - "all", "${item}", nil, "", true}, + "both", "${item}", nil, "", true}, {"var without end", - "all", "${ item ", nil, "item", true}, + "both", "${ item ", nil, "item", true}, {"two vars missing first end", - "all", "before-${ item after-${ more }", nil, "item,more", true}, + "both", "before-${ item after-${ more }", nil, "item,more", true}, // bind type: templated policy - bad input {"templated-policy missing bindvars", "templated-policy", "builtin/service", nil, "", true}, @@ -439,16 +338,12 @@ func Test_IsValidBindingRule(t *testing.T) { "templated-policy", "builtin/service", &structs.ACLTemplatedPolicyVariables{Name: "before-${item}after-${more}"}, "item,more", false}, } { var cases []testcase - if test.bindType == "all" { + if test.bindType == "both" { test1 := test test1.bindType = "role" test2 := test test2.bindType = "service" - test3 := test - test3.bindType = "policy" - test4 := test - test4.bindType = "node" - cases = []testcase{test1, test2, test3, test4} + cases = []testcase{test1, test2} } else { cases = []testcase{test} } diff --git a/agent/consul/auth/login.go b/agent/consul/auth/login.go index 0b9b5eeac77ae..a084f33bf19bf 100644 --- a/agent/consul/auth/login.go +++ b/agent/consul/auth/login.go @@ -48,7 +48,6 @@ func (l *Login) TokenForVerifiedIdentity(identity *authmethod.Identity, authMeth NodeIdentities: bindings.NodeIdentities, TemplatedPolicies: bindings.TemplatedPolicies, Roles: bindings.Roles, - Policies: bindings.Policies, EnterpriseMeta: bindings.EnterpriseMeta, } token.ACLAuthMethodEnterpriseMeta.FillWithEnterpriseMeta(&authMethod.EnterpriseMeta) diff --git a/agent/consul/fsm/commands_ce.go b/agent/consul/fsm/commands_ce.go index 77bc94de1a9ae..c5e7fd968238b 100644 --- a/agent/consul/fsm/commands_ce.go +++ b/agent/consul/fsm/commands_ce.go @@ -4,7 +4,6 @@ package fsm import ( - "errors" "fmt" "time" @@ -153,11 +152,7 @@ func init() { func (c *FSM) applyRegister(buf []byte, index uint64) interface{} { defer metrics.MeasureSince([]string{"fsm", "register"}, time.Now()) var req structs.RegisterRequest - if err := decodeRegistrationReq(buf, &req); err != nil { - if errors.Is(err, ErrDroppingTenantedReq) { - c.logger.Warn("dropping tenanted register request") - return nil - } + if err := structs.Decode(buf, &req); err != nil { panic(fmt.Errorf("failed to decode request: %v", err)) } @@ -172,11 +167,7 @@ func (c *FSM) applyRegister(buf []byte, index uint64) interface{} { func (c *FSM) applyDeregister(buf []byte, index uint64) interface{} { defer metrics.MeasureSince([]string{"fsm", "deregister"}, time.Now()) var req structs.DeregisterRequest - if err := decodeDeregistrationReq(buf, &req); err != nil { - if errors.Is(err, ErrDroppingTenantedReq) { - c.logger.Warn("dropping tenanted deregister request") - return nil - } + if err := structs.Decode(buf, &req); err != nil { panic(fmt.Errorf("failed to decode request: %v", err)) } @@ -204,11 +195,7 @@ func (c *FSM) applyDeregister(buf []byte, index uint64) interface{} { func (c *FSM) applyKVSOperation(buf []byte, index uint64) interface{} { var req structs.KVSRequest - if err := decodeKVSRequest(buf, &req); err != nil { - if errors.Is(err, ErrDroppingTenantedReq) { - c.logger.Warn("dropping tenanted KV request") - return nil - } + if err := structs.Decode(buf, &req); err != nil { panic(fmt.Errorf("failed to decode request: %v", err)) } defer metrics.MeasureSinceWithLabels([]string{"fsm", "kvs"}, time.Now(), @@ -253,11 +240,7 @@ func (c *FSM) applyKVSOperation(buf []byte, index uint64) interface{} { func (c *FSM) applySessionOperation(buf []byte, index uint64) interface{} { var req structs.SessionRequest - if err := decodeSessionRequest(buf, &req); err != nil { - if errors.Is(err, ErrDroppingTenantedReq) { - c.logger.Warn("dropping tenanted session request") - return nil - } + if err := structs.Decode(buf, &req); err != nil { panic(fmt.Errorf("failed to decode request: %v", err)) } defer metrics.MeasureSinceWithLabels([]string{"fsm", "session"}, time.Now(), @@ -316,11 +299,7 @@ func (c *FSM) applyCoordinateBatchUpdate(buf []byte, index uint64) interface{} { // state store. func (c *FSM) applyPreparedQueryOperation(buf []byte, index uint64) interface{} { var req structs.PreparedQueryRequest - if err := decodePreparedQueryRequest(buf, &req); err != nil { - if errors.Is(err, ErrDroppingTenantedReq) { - c.logger.Warn("dropping tenanted prepared query request") - return nil - } + if err := structs.Decode(buf, &req); err != nil { panic(fmt.Errorf("failed to decode request: %v", err)) } @@ -339,7 +318,7 @@ func (c *FSM) applyPreparedQueryOperation(buf []byte, index uint64) interface{} func (c *FSM) applyTxn(buf []byte, index uint64) interface{} { var req structs.TxnRequest - if err := decodeTxnRequest(buf, &req); err != nil { + if err := structs.Decode(buf, &req); err != nil { panic(fmt.Errorf("failed to decode request: %v", err)) } defer metrics.MeasureSince([]string{"fsm", "txn"}, time.Now()) @@ -506,7 +485,7 @@ func (c *FSM) applyConnectCALeafOperation(buf []byte, index uint64) interface{} func (c *FSM) applyACLTokenSetOperation(buf []byte, index uint64) interface{} { var req structs.ACLTokenBatchSetRequest - if err := decodeACLTokenBatchSetRequest(buf, &req); err != nil { + if err := structs.Decode(buf, &req); err != nil { panic(fmt.Errorf("failed to decode request: %v", err)) } defer metrics.MeasureSinceWithLabels([]string{"fsm", "acl", "token"}, time.Now(), @@ -544,7 +523,7 @@ func (c *FSM) applyACLTokenBootstrap(buf []byte, index uint64) interface{} { func (c *FSM) applyACLPolicySetOperation(buf []byte, index uint64) interface{} { var req structs.ACLPolicyBatchSetRequest - if err := decodeACLPolicyBatchSetRequest(buf, &req); err != nil { + if err := structs.Decode(buf, &req); err != nil { panic(fmt.Errorf("failed to decode request: %v", err)) } defer metrics.MeasureSinceWithLabels([]string{"fsm", "acl", "policy"}, time.Now(), @@ -565,12 +544,10 @@ func (c *FSM) applyACLPolicyDeleteOperation(buf []byte, index uint64) interface{ } func (c *FSM) applyConfigEntryOperation(buf []byte, index uint64) interface{} { - req := structs.ConfigEntryRequest{} - if err := decodeConfigEntryOperationRequest(buf, &req); err != nil { - if errors.Is(err, ErrDroppingTenantedReq) { - c.logger.Warn("dropping tenanted config entry request") - return nil - } + req := structs.ConfigEntryRequest{ + Entry: &structs.ProxyConfigEntry{}, + } + if err := structs.Decode(buf, &req); err != nil { panic(fmt.Errorf("failed to decode request: %v", err)) } @@ -617,7 +594,7 @@ func (c *FSM) applyConfigEntryOperation(buf []byte, index uint64) interface{} { func (c *FSM) applyACLRoleSetOperation(buf []byte, index uint64) interface{} { var req structs.ACLRoleBatchSetRequest - if err := decodeACLRoleBatchSetRequest(buf, &req); err != nil { + if err := structs.Decode(buf, &req); err != nil { panic(fmt.Errorf("failed to decode request: %v", err)) } defer metrics.MeasureSinceWithLabels([]string{"fsm", "acl", "role"}, time.Now(), @@ -639,7 +616,7 @@ func (c *FSM) applyACLRoleDeleteOperation(buf []byte, index uint64) interface{} func (c *FSM) applyACLBindingRuleSetOperation(buf []byte, index uint64) interface{} { var req structs.ACLBindingRuleBatchSetRequest - if err := decodeACLBindingRuleBatchSetRequest(buf, &req); err != nil { + if err := structs.Decode(buf, &req); err != nil { panic(fmt.Errorf("failed to decode request: %v", err)) } defer metrics.MeasureSinceWithLabels([]string{"fsm", "acl", "bindingrule"}, time.Now(), @@ -661,7 +638,7 @@ func (c *FSM) applyACLBindingRuleDeleteOperation(buf []byte, index uint64) inter func (c *FSM) applyACLAuthMethodSetOperation(buf []byte, index uint64) interface{} { var req structs.ACLAuthMethodBatchSetRequest - if err := decodeACLAuthMethodBatchSetRequest(buf, &req); err != nil { + if err := structs.Decode(buf, &req); err != nil { panic(fmt.Errorf("failed to decode request: %v", err)) } defer metrics.MeasureSinceWithLabels([]string{"fsm", "acl", "authmethod"}, time.Now(), @@ -672,11 +649,7 @@ func (c *FSM) applyACLAuthMethodSetOperation(buf []byte, index uint64) interface func (c *FSM) applyACLAuthMethodDeleteOperation(buf []byte, index uint64) interface{} { var req structs.ACLAuthMethodBatchDeleteRequest - if err := decodeACLAuthMethodBatchDeleteRequest(buf, &req); err != nil { - if errors.Is(err, ErrDroppingTenantedReq) { - c.logger.Warn("dropping tenanted acl auth method delete request") - return nil - } + if err := structs.Decode(buf, &req); err != nil { panic(fmt.Errorf("failed to decode request: %v", err)) } defer metrics.MeasureSinceWithLabels([]string{"fsm", "acl", "authmethod"}, time.Now(), @@ -733,11 +706,7 @@ func (c *FSM) applySystemMetadataOperation(buf []byte, index uint64) interface{} func (c *FSM) applyPeeringWrite(buf []byte, index uint64) interface{} { var req pbpeering.PeeringWriteRequest - if err := decodePeeringWriteRequest(buf, &req); err != nil { - if errors.Is(err, ErrDroppingTenantedReq) { - c.logger.Warn("dropping tenanted peering write request") - return nil - } + if err := structs.DecodeProto(buf, &req); err != nil { panic(fmt.Errorf("failed to decode peering write request: %v", err)) } @@ -749,11 +718,7 @@ func (c *FSM) applyPeeringWrite(buf []byte, index uint64) interface{} { func (c *FSM) applyPeeringDelete(buf []byte, index uint64) interface{} { var req pbpeering.PeeringDeleteRequest - if err := decodePeeringDeleteRequest(buf, &req); err != nil { - if errors.Is(err, ErrDroppingTenantedReq) { - c.logger.Warn("dropping tenanted peering delete request") - return nil - } + if err := structs.DecodeProto(buf, &req); err != nil { panic(fmt.Errorf("failed to decode peering delete request: %v", err)) } @@ -793,11 +758,7 @@ func (c *FSM) applyPeeringTerminate(buf []byte, index uint64) interface{} { func (c *FSM) applyPeeringTrustBundleWrite(buf []byte, index uint64) interface{} { var req pbpeering.PeeringTrustBundleWriteRequest - if err := decodePeeringTrustBundleWriteRequest(buf, &req); err != nil { - if errors.Is(err, ErrDroppingTenantedReq) { - c.logger.Warn("dropping tenanted peering trust bundle write request") - return nil - } + if err := structs.DecodeProto(buf, &req); err != nil { panic(fmt.Errorf("failed to decode peering trust bundle write request: %v", err)) } @@ -809,11 +770,7 @@ func (c *FSM) applyPeeringTrustBundleWrite(buf []byte, index uint64) interface{} func (c *FSM) applyPeeringTrustBundleDelete(buf []byte, index uint64) interface{} { var req pbpeering.PeeringTrustBundleDeleteRequest - if err := decodePeeringTrustBundleDeleteRequest(buf, &req); err != nil { - if errors.Is(err, ErrDroppingTenantedReq) { - c.logger.Warn("dropping tenanted peering trust bundle delete request") - return nil - } + if err := structs.DecodeProto(buf, &req); err != nil { panic(fmt.Errorf("failed to decode peering trust bundle delete request: %v", err)) } @@ -833,11 +790,7 @@ func (f *FSM) applyResourceOperation(buf []byte, idx uint64) any { func (c *FSM) applyManualVirtualIPs(buf []byte, index uint64) interface{} { var req state.ServiceVirtualIP - if err := decodeServiceVirtualIPRequest(buf, &req); err != nil { - if errors.Is(err, ErrDroppingTenantedReq) { - c.logger.Warn("dropping tenanted virtual ip request") - return nil - } + if err := structs.Decode(buf, &req); err != nil { panic(fmt.Errorf("failed to decode request: %v", err)) } diff --git a/agent/consul/fsm/decode_ce.go b/agent/consul/fsm/decode_ce.go deleted file mode 100644 index 2f4d3da3a26cb..0000000000000 --- a/agent/consul/fsm/decode_ce.go +++ /dev/null @@ -1,145 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: BUSL-1.1 - -//go:build !consulent -// +build !consulent - -package fsm - -import ( - "github.com/hashicorp/consul/agent/consul/state" - "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/proto/private/pbpeering" -) - -func decodeRegistrationReq(buf []byte, req *structs.RegisterRequest) error { - if !structs.CEDowngrade { - return structs.Decode(buf, req) - } - return decodeRegistration(buf, req) -} - -func decodeDeregistrationReq(buf []byte, req *structs.DeregisterRequest) error { - if !structs.CEDowngrade { - return structs.Decode(buf, req) - } - return decodeDeregistration(buf, req) -} - -func decodeKVSRequest(buf []byte, req *structs.KVSRequest) error { - if !structs.CEDowngrade { - return structs.Decode(buf, req) - } - return decodeKVS(buf, req) -} - -func decodeSessionRequest(buf []byte, req *structs.SessionRequest) error { - if !structs.CEDowngrade { - return structs.Decode(buf, req) - } - - return decodeSession(buf, req) -} - -func decodePreparedQueryRequest(buf []byte, req *structs.PreparedQueryRequest) error { - if !structs.CEDowngrade { - return structs.Decode(buf, req) - } - return decodePreparedQuery(buf, req) -} - -func decodeTxnRequest(buf []byte, req *structs.TxnRequest) error { - if !structs.CEDowngrade { - return structs.Decode(buf, req) - } - return decodeTxn(buf, req) -} - -func decodeACLTokenBatchSetRequest(buf []byte, req *structs.ACLTokenBatchSetRequest) error { - if !structs.CEDowngrade { - return structs.Decode(buf, req) - } - return decodeACLTokenBatchSet(buf, req) - -} - -func decodeACLPolicyBatchSetRequest(buf []byte, req *structs.ACLPolicyBatchSetRequest) error { - if !structs.CEDowngrade { - return structs.Decode(buf, req) - } - return decodeACLPolicyBatchSet(buf, req) - -} - -func decodeACLRoleBatchSetRequest(buf []byte, req *structs.ACLRoleBatchSetRequest) error { - if !structs.CEDowngrade { - return structs.Decode(buf, req) - } - return decodeACLRoleBatchSet(buf, req) -} - -func decodeACLBindingRuleBatchSetRequest(buf []byte, req *structs.ACLBindingRuleBatchSetRequest) error { - if !structs.CEDowngrade { - return structs.Decode(buf, req) - } - return decodeACLBindingRuleBatchSet(buf, req) -} - -func decodeACLAuthMethodBatchSetRequest(buf []byte, req *structs.ACLAuthMethodBatchSetRequest) error { - if !structs.CEDowngrade { - return structs.Decode(buf, req) - } - return decodeACLAuthMethodBatchSet(buf, req) -} - -func decodeACLAuthMethodBatchDeleteRequest(buf []byte, req *structs.ACLAuthMethodBatchDeleteRequest) error { - if !structs.CEDowngrade { - return structs.Decode(buf, req) - } - - return decodeACLAuthMethodBatchDelete(buf, req) -} - -func decodeServiceVirtualIPRequest(buf []byte, req *state.ServiceVirtualIP) error { - if !structs.CEDowngrade { - return structs.Decode(buf, req) - } - return decodeServiceVirtualIP(buf, req) -} - -func decodePeeringWriteRequest(buf []byte, req *pbpeering.PeeringWriteRequest) error { - if !structs.CEDowngrade { - return structs.DecodeProto(buf, req) - } - return decodePeeringWrite(buf, req) -} - -func decodePeeringDeleteRequest(buf []byte, req *pbpeering.PeeringDeleteRequest) error { - if !structs.CEDowngrade { - return structs.DecodeProto(buf, req) - } - - return decodePeeringDelete(buf, req) -} - -func decodePeeringTrustBundleWriteRequest(buf []byte, req *pbpeering.PeeringTrustBundleWriteRequest) error { - if !structs.CEDowngrade { - return structs.DecodeProto(buf, req) - } - return decodePeeringTrustBundleWrite(buf, req) -} - -func decodePeeringTrustBundleDeleteRequest(buf []byte, req *pbpeering.PeeringTrustBundleDeleteRequest) error { - if !structs.CEDowngrade { - return structs.DecodeProto(buf, req) - } - return decodePeeringTrustBundleDelete(buf, req) -} - -func decodeConfigEntryOperationRequest(buf []byte, req *structs.ConfigEntryRequest) error { - if !structs.CEDowngrade { - return structs.Decode(buf, req) - } - - return decodeConfigEntryOperation(buf, req) -} diff --git a/agent/consul/fsm/decode_downgrade.go b/agent/consul/fsm/decode_downgrade.go deleted file mode 100644 index 7b8e2fce719f2..0000000000000 --- a/agent/consul/fsm/decode_downgrade.go +++ /dev/null @@ -1,1011 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: BUSL-1.1 - -package fsm - -import ( - "errors" - "fmt" - - "github.com/hashicorp/consul-net-rpc/go-msgpack/codec" - "github.com/hashicorp/consul/agent/consul/state" - "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/lib" - "github.com/hashicorp/consul/proto/private/pbpeering" -) - -func IsEnterpriseData(namespace, partition string) bool { - if (namespace != "" && namespace != "default") || (partition != "" && partition != "default") { - return true - } - return false -} - -var errIncompatibleTenantedData = errors.New("incompatible tenanted data") -var ErrDroppingTenantedReq = errors.New("dropping tenanted request") - -func decodeRegistration(buf []byte, req *structs.RegisterRequest) error { - type serviceRequest struct { - Namespace string - Partition string - *structs.NodeService - } - type checkRequest struct { - Namespace string - Partition string - *structs.HealthCheck - } - type NewRegReq struct { - - // shadows the Service field from the register request so that we can detect - // tenanted service registrations for untenanted nodes - Service *serviceRequest - - // shadows the Check field from the register request so that we can detect - // tenanted check registrations for untenanted nodes. - Check *checkRequest - - // shadows the Checks field for the same reasons as the singular version. - Checks []*checkRequest - - // Allows parsing the namespace of the whole request/node - Namespace string - - // Allows parsing the partition of the whole request/node - Partition string - *structs.RegisterRequest - } - var newReq NewRegReq - if err := structs.Decode(buf, &newReq); err != nil { - return err - } - - // checks if the node is tenanted - if IsEnterpriseData(newReq.Namespace, newReq.Partition) { - // the whole request can be dropped because the node itself is tenanted - return ErrDroppingTenantedReq - } - - // check if the service is tenanted - if newReq.Service != nil && !IsEnterpriseData(newReq.Service.Namespace, newReq.Service.Partition) { - // copy the shadow service pointer into the real RegisterRequest - newReq.RegisterRequest.Service = newReq.Service.NodeService - } - - // check if the singular check is tenanted - if newReq.Check != nil && !IsEnterpriseData(newReq.Check.Namespace, newReq.Check.Partition) { - newReq.RegisterRequest.Check = newReq.Check.HealthCheck - } - - // check for tenanted checks in the slice - for _, chk := range newReq.Checks { - if !IsEnterpriseData(chk.Namespace, chk.Partition) { - newReq.RegisterRequest.Checks = append(newReq.RegisterRequest.Checks, chk.HealthCheck) - } - } - // copy the data to the output request value - *req = *newReq.RegisterRequest - return nil -} - -func decodeDeregistration(buf []byte, req *structs.DeregisterRequest) error { - type NewDeRegReq struct { - Namespace string - - // Allows parsing the partition of the whole request/node - Partition string - - *structs.DeregisterRequest - - // Allows parsing the namespace of the whole request/node - - } - var newReq NewDeRegReq - if err := structs.Decode(buf, &newReq); err != nil { - return err - } - - // checks if the node is tenanted - if IsEnterpriseData(newReq.Namespace, newReq.Partition) { - // the whole request can be dropped because the node itself is tenanted - return ErrDroppingTenantedReq - } - - // copy the data to the output request value - *req = *newReq.DeregisterRequest - return nil -} - -func decodeKVS(buf []byte, req *structs.KVSRequest) error { - type dirEntryReq struct { - Namespace string - Partition string - *structs.DirEntry - } - type NewDirEntReq struct { - // shadows the DirEnt field from KVSRequest so that we can detect - // tenanted service registrations for untenanted nodes - DirEnt *dirEntryReq - *structs.KVSRequest - } - var newReq NewDirEntReq - if err := structs.Decode(buf, &newReq); err != nil { - return err - } - - if newReq.DirEnt != nil && IsEnterpriseData(newReq.DirEnt.Namespace, newReq.DirEnt.Partition) { - return ErrDroppingTenantedReq - } - - newReq.KVSRequest.DirEnt = *newReq.DirEnt.DirEntry - *req = *newReq.KVSRequest - return nil -} - -func decodeSession(buf []byte, req *structs.SessionRequest) error { - type sessionReq struct { - Namespace string - Partition string - *structs.Session - } - type NewSessionReq struct { - // shadows the Session field from SessionRequest so that we can detect - // tenanted service registrations for untenanted nodes - Session *sessionReq - *structs.SessionRequest - } - var newReq NewSessionReq - if err := structs.Decode(buf, &newReq); err != nil { - return err - } - - if newReq.Session != nil && IsEnterpriseData(newReq.Session.Namespace, newReq.Session.Partition) { - return ErrDroppingTenantedReq - - } - serviceChecks := newReq.Session.ServiceChecks - newReq.Session.ServiceChecks = nil - for _, sessionServiceCheck := range serviceChecks { - if !IsEnterpriseData(sessionServiceCheck.Namespace, "") { - newReq.Session.ServiceChecks = append(newReq.Session.ServiceChecks, sessionServiceCheck) - } - } - - newReq.SessionRequest.Session = *newReq.Session.Session - *req = *newReq.SessionRequest - return nil -} - -func decodePreparedQuery(buf []byte, req *structs.PreparedQueryRequest) error { - type serviceQuery struct { - Namespace string - Partition string - *structs.ServiceQuery - } - type prepQuery struct { - Service *serviceQuery - *structs.PreparedQuery - } - type NewPreparedQueryReq struct { - Query *prepQuery - *structs.PreparedQueryRequest - } - var newReq NewPreparedQueryReq - if err := structs.Decode(buf, &newReq); err != nil { - return err - } - - if newReq.Query != nil && newReq.Query.Service != nil && IsEnterpriseData(newReq.Query.Service.Namespace, newReq.Query.Service.Partition) { - return ErrDroppingTenantedReq - } - - newReq.Query.PreparedQuery.Service = *newReq.Query.Service.ServiceQuery - newReq.PreparedQueryRequest.Query = newReq.Query.PreparedQuery - *req = *newReq.PreparedQueryRequest - return nil -} - -func decodeTxn(buf []byte, req *structs.TxnRequest) error { - type dirEntryReq struct { - Namespace string - Partition string - *structs.DirEntry - } - type txnKVOp struct { - DirEnt *dirEntryReq - *structs.TxnKVOp - } - type nodeService struct { - Namespace string - Partition string - *structs.NodeService - } - type txnServiceOp struct { - Service *nodeService - *structs.TxnServiceOp - } - type healthCheck struct { - Namespace string - Partition string - *structs.HealthCheck - } - type txnCheckOp struct { - Check *healthCheck - *structs.TxnCheckOp - } - type session struct { - Namespace string - Partition string - *structs.Session - } - type txnSessionOp struct { - Session *session - *structs.TxnSessionOp - } - // Only one of the types should be filled out per entry. - type txnOp struct { - KV *txnKVOp - Service *txnServiceOp - Check *txnCheckOp - Session *txnSessionOp - *structs.TxnOp - } - type NewTxnRequest struct { - Ops []*txnOp - *structs.TxnRequest - } - var newReq NewTxnRequest - if err := structs.Decode(buf, &newReq); err != nil { - return err - } - for _, op := range newReq.Ops { - if op.KV != nil && op.KV.DirEnt != nil && !IsEnterpriseData(op.KV.DirEnt.Namespace, op.KV.DirEnt.Partition) { - txnOp := &structs.TxnOp{ - KV: &structs.TxnKVOp{ - Verb: op.KV.Verb, - DirEnt: *op.KV.DirEnt.DirEntry, - }, - } - newReq.TxnRequest.Ops = append(newReq.TxnRequest.Ops, txnOp) - continue - } - - if op.Service != nil && op.Service.Service != nil && !IsEnterpriseData(op.Service.Service.Namespace, op.Service.Service.Partition) { - txnOp := &structs.TxnOp{ - Service: &structs.TxnServiceOp{ - Verb: op.Service.Verb, - Node: op.Service.Node, - Service: *op.Service.Service.NodeService, - }, - } - newReq.TxnRequest.Ops = append(newReq.TxnRequest.Ops, txnOp) - continue - } - - if op.Check != nil && op.Check.Check != nil && !IsEnterpriseData(op.Check.Check.Namespace, op.Check.Check.Partition) { - txnOp := &structs.TxnOp{ - Check: &structs.TxnCheckOp{ - Verb: op.Check.Verb, - Check: *op.Check.Check.HealthCheck, - }, - } - newReq.TxnRequest.Ops = append(newReq.TxnRequest.Ops, txnOp) - continue - } - - if op.Session != nil && op.Session.Session != nil && !IsEnterpriseData(op.Session.Session.Namespace, op.Session.Session.Partition) { - txnOp := &structs.TxnOp{ - Session: &structs.TxnSessionOp{ - Verb: op.Session.Verb, - Session: *op.Session.Session.Session, - }, - } - txnOp.Session.Session.ServiceChecks = nil - for _, sessionServiceCheck := range op.Session.Session.ServiceChecks { - if !IsEnterpriseData(sessionServiceCheck.Namespace, "") { - txnOp.Session.Session.ServiceChecks = append(txnOp.Session.Session.ServiceChecks, sessionServiceCheck) - } - } - newReq.TxnRequest.Ops = append(newReq.TxnRequest.Ops, txnOp) - } - } - - *req = *newReq.TxnRequest - return nil -} - -func decodeACLTokenBatchSet(buf []byte, req *structs.ACLTokenBatchSetRequest) error { - type aclToken struct { - Namespace string - Partition string - *structs.ACLToken - } - type NewACLTokenBatchSetRequest struct { - Tokens []*aclToken - *structs.ACLTokenBatchSetRequest - } - var newReq NewACLTokenBatchSetRequest - if err := structs.Decode(buf, &newReq); err != nil { - return err - } - - for _, token := range newReq.Tokens { - if !IsEnterpriseData(token.Namespace, token.Partition) { - newReq.ACLTokenBatchSetRequest.Tokens = append(newReq.ACLTokenBatchSetRequest.Tokens, token.ACLToken) - } - } - - *req = *newReq.ACLTokenBatchSetRequest - return nil - -} - -func decodeACLPolicyBatchSet(buf []byte, req *structs.ACLPolicyBatchSetRequest) error { - type aclPolicy struct { - Namespace string - Partition string - *structs.ACLPolicy - } - type NewACLPolicyBatchSetRequest struct { - Policies []*aclPolicy - *structs.ACLPolicyBatchSetRequest - } - var newReq NewACLPolicyBatchSetRequest - if err := structs.Decode(buf, &newReq); err != nil { - return err - } - if newReq.ACLPolicyBatchSetRequest == nil { - newReq.ACLPolicyBatchSetRequest = &structs.ACLPolicyBatchSetRequest{} - } - for _, policy := range newReq.Policies { - if !IsEnterpriseData(policy.Namespace, policy.Partition) { - newReq.ACLPolicyBatchSetRequest.Policies = append(newReq.ACLPolicyBatchSetRequest.Policies, policy.ACLPolicy) - } - } - - *req = *newReq.ACLPolicyBatchSetRequest - return nil - -} - -func decodeACLRoleBatchSet(buf []byte, req *structs.ACLRoleBatchSetRequest) error { - type aclRole struct { - Namespace string - Partition string - *structs.ACLRole - } - type NewACLRoleBatchSetRequest struct { - Roles []*aclRole - *structs.ACLRoleBatchSetRequest - } - var newReq NewACLRoleBatchSetRequest - if err := structs.Decode(buf, &newReq); err != nil { - return err - } - - for _, role := range newReq.Roles { - if !IsEnterpriseData(role.Namespace, role.Partition) { - newReq.ACLRoleBatchSetRequest.Roles = append(newReq.ACLRoleBatchSetRequest.Roles, role.ACLRole) - } - } - - *req = *newReq.ACLRoleBatchSetRequest - return nil -} - -func decodeACLBindingRuleBatchSet(buf []byte, req *structs.ACLBindingRuleBatchSetRequest) error { - type aCLBindingRule struct { - Namespace string - Partition string - *structs.ACLBindingRule - } - type NewACLBindingRuleBatchSetRequest struct { - BindingRules []*aCLBindingRule - *structs.ACLBindingRuleBatchSetRequest - } - var newReq NewACLBindingRuleBatchSetRequest - if err := structs.Decode(buf, &newReq); err != nil { - return err - } - if newReq.ACLBindingRuleBatchSetRequest == nil { - newReq.ACLBindingRuleBatchSetRequest = &structs.ACLBindingRuleBatchSetRequest{} - } - for _, rule := range newReq.BindingRules { - if !IsEnterpriseData(rule.Namespace, rule.Partition) { - newReq.ACLBindingRuleBatchSetRequest.BindingRules = append(newReq.ACLBindingRuleBatchSetRequest.BindingRules, rule.ACLBindingRule) - } - } - - *req = *newReq.ACLBindingRuleBatchSetRequest - return nil -} - -func decodeACLAuthMethodBatchSet(buf []byte, req *structs.ACLAuthMethodBatchSetRequest) error { - type aCLAuthMethod struct { - Namespace string - Partition string - *structs.ACLAuthMethod - } - type NewACLAuthMethodBatchSetRequest struct { - AuthMethods []*aCLAuthMethod - *structs.ACLAuthMethodBatchSetRequest - } - var newReq NewACLAuthMethodBatchSetRequest - if err := structs.Decode(buf, &newReq); err != nil { - return err - } - if newReq.ACLAuthMethodBatchSetRequest == nil { - newReq.ACLAuthMethodBatchSetRequest = &structs.ACLAuthMethodBatchSetRequest{} - } - for _, authMethod := range newReq.AuthMethods { - if !IsEnterpriseData(authMethod.Namespace, authMethod.Partition) { - newReq.ACLAuthMethodBatchSetRequest.AuthMethods = append(newReq.ACLAuthMethodBatchSetRequest.AuthMethods, authMethod.ACLAuthMethod) - } - } - - *req = *newReq.ACLAuthMethodBatchSetRequest - return nil -} - -func decodeACLAuthMethodBatchDelete(buf []byte, req *structs.ACLAuthMethodBatchDeleteRequest) error { - type NewACLAuthMethodBatchDeleteRequest struct { - Namespace string - Partition string - *structs.ACLAuthMethodBatchDeleteRequest - } - - var newReq NewACLAuthMethodBatchDeleteRequest - if err := structs.Decode(buf, &newReq); err != nil { - return err - } - - if IsEnterpriseData(newReq.Namespace, newReq.Partition) { - return ErrDroppingTenantedReq - } - - *req = *newReq.ACLAuthMethodBatchDeleteRequest - return nil -} - -func decodeServiceVirtualIP(buf []byte, req *state.ServiceVirtualIP) error { - type serviceName struct { - Namespace string - Partition string - *structs.ServiceName - } - type peeredServiceName struct { - ServiceName *serviceName - *structs.PeeredServiceName - } - type NewServiceVirtualIP struct { - Service *peeredServiceName - *state.ServiceVirtualIP - } - var newReq NewServiceVirtualIP - if err := structs.Decode(buf, &newReq); err != nil { - return err - } - - if newReq.Service != nil && newReq.Service.ServiceName != nil && IsEnterpriseData(newReq.Service.ServiceName.Namespace, newReq.Service.ServiceName.Partition) { - return ErrDroppingTenantedReq - } - newReq.ServiceVirtualIP.Service.ServiceName = *newReq.Service.ServiceName.ServiceName - *req = *newReq.ServiceVirtualIP - return nil -} - -func decodePeeringWrite(buf []byte, req *pbpeering.PeeringWriteRequest) error { - if err := structs.DecodeProto(buf, req); err != nil { - return err - } - - if req.Peering != nil && IsEnterpriseData("", req.Peering.Partition) { - return ErrDroppingTenantedReq - } - - return nil -} - -func decodePeeringDelete(buf []byte, req *pbpeering.PeeringDeleteRequest) error { - if err := structs.DecodeProto(buf, req); err != nil { - return err - } - - if IsEnterpriseData("", req.Partition) { - return ErrDroppingTenantedReq - } - - return nil -} - -func decodePeeringTrustBundleWrite(buf []byte, req *pbpeering.PeeringTrustBundleWriteRequest) error { - if err := structs.DecodeProto(buf, req); err != nil { - return err - } - - if IsEnterpriseData("", req.PeeringTrustBundle.Partition) { - return ErrDroppingTenantedReq - } - - return nil -} - -func decodePeeringTrustBundleDelete(buf []byte, req *pbpeering.PeeringTrustBundleDeleteRequest) error { - if err := structs.DecodeProto(buf, req); err != nil { - return err - } - - if IsEnterpriseData("", req.Partition) { - return ErrDroppingTenantedReq - } - - return nil -} - -func decodeConfigEntryOperation(buf []byte, req *structs.ConfigEntryRequest) error { - - newReq := &ShadowConfigEntryRequest{ - ConfigEntryRequest: req, - } - if err := structs.Decode(buf, newReq); err != nil { - return err - } - shadowConfigEntry := newReq.ConfigEntryRequest.Entry.(ShadowConfigentry) - if err := shadowConfigEntry.CheckEnt(); err != nil { - return err - } - req.Entry = shadowConfigEntry.GetRealConfigEntry() - return nil -} - -type ShadowConfigEntryRequest struct { - *structs.ConfigEntryRequest -} - -func (c *ShadowConfigEntryRequest) UnmarshalBinary(data []byte) error { - // First decode the kind prefix - var kind string - dec := codec.NewDecoderBytes(data, structs.MsgpackHandle) - if err := dec.Decode(&kind); err != nil { - return err - } - - // Then decode the real thing with appropriate kind of ConfigEntry - entry, err := MakeShadowConfigEntry(kind, "") - if err != nil { - return err - } - c.Entry = entry - // Alias juggling to prevent infinite recursive calls back to this decode - // method. - type Alias structs.ConfigEntryRequest - as := struct { - *Alias - }{ - Alias: (*Alias)(c.ConfigEntryRequest), - } - if err := dec.Decode(&as); err != nil { - return err - } - return nil -} -func MakeShadowConfigEntry(kind, name string) (structs.ConfigEntry, error) { - switch kind { - case structs.RateLimitIPConfig: - return nil, ErrDroppingTenantedReq - case structs.ServiceDefaults: - return &ShadowServiceConfigEntry{ServiceConfigEntry: &structs.ServiceConfigEntry{Name: name}}, nil - case structs.ProxyDefaults: - return &ShadowProxyConfigEntry{ProxyConfigEntry: &structs.ProxyConfigEntry{Name: name}}, nil - case structs.ServiceRouter: - return &ShadowServiceRouterConfigEntry{ServiceRouterConfigEntry: &structs.ServiceRouterConfigEntry{Name: name}}, nil - case structs.ServiceSplitter: - return &ShadowServiceSplitterConfigEntry{ServiceSplitterConfigEntry: &structs.ServiceSplitterConfigEntry{Name: name}}, nil - case structs.ServiceResolver: - return &ShadowServiceResolverConfigEntry{ServiceResolverConfigEntry: &structs.ServiceResolverConfigEntry{Name: name}}, nil - case structs.IngressGateway: - return &ShadowIngressGatewayConfigEntry{IngressGatewayConfigEntry: &structs.IngressGatewayConfigEntry{Name: name}}, nil - case structs.TerminatingGateway: - return &ShadowTerminatingGatewayConfigEntry{TerminatingGatewayConfigEntry: &structs.TerminatingGatewayConfigEntry{Name: name}}, nil - case structs.ServiceIntentions: - return &ShadowServiceIntentionsConfigEntry{ServiceIntentionsConfigEntry: &structs.ServiceIntentionsConfigEntry{Name: name}}, nil - case structs.MeshConfig: - return &ShadowMeshConfigEntry{MeshConfigEntry: &structs.MeshConfigEntry{}}, nil - case structs.ExportedServices: - return &ShadowExportedServicesConfigEntry{ExportedServicesConfigEntry: &structs.ExportedServicesConfigEntry{Name: name}}, nil - case structs.SamenessGroup: - return &ShadowSamenessGroupConfigEntry{SamenessGroupConfigEntry: &structs.SamenessGroupConfigEntry{Name: name}}, nil - case structs.APIGateway: - return &ShadowAPIGatewayConfigEntry{APIGatewayConfigEntry: &structs.APIGatewayConfigEntry{Name: name}}, nil - case structs.BoundAPIGateway: - return &ShadowBoundAPIGatewayConfigEntry{BoundAPIGatewayConfigEntry: &structs.BoundAPIGatewayConfigEntry{Name: name}}, nil - case structs.InlineCertificate: - return &ShadowInlineCertificateConfigEntry{InlineCertificateConfigEntry: &structs.InlineCertificateConfigEntry{Name: name}}, nil - case structs.HTTPRoute: - return &ShadowHTTPRouteConfigEntry{HTTPRouteConfigEntry: &structs.HTTPRouteConfigEntry{Name: name}}, nil - case structs.TCPRoute: - return &ShadowTCPRouteConfigEntry{TCPRouteConfigEntry: &structs.TCPRouteConfigEntry{Name: name}}, nil - case structs.JWTProvider: - return &ShadowJWTProviderConfigEntry{JWTProviderConfigEntry: &structs.JWTProviderConfigEntry{Name: name}}, nil - default: - return nil, fmt.Errorf("invalid config entry kind: %s", kind) - } -} - -type ShadowBase struct { - Namespace string - Partition string -} - -func (s ShadowBase) CheckEnt() error { - if IsEnterpriseData(s.Namespace, s.Partition) { - return ErrDroppingTenantedReq - } - return nil -} - -type ShadowConfigentry interface { - CheckEnt() error - GetRealConfigEntry() structs.ConfigEntry -} - -type ShadowProxyConfigEntry struct { - ShadowBase - *structs.ProxyConfigEntry -} - -func (s ShadowProxyConfigEntry) GetRealConfigEntry() structs.ConfigEntry { - return s.ProxyConfigEntry -} - -type ShadowServiceResolverConfigEntry struct { - ShadowBase - *structs.ServiceResolverConfigEntry -} - -func (s ShadowServiceResolverConfigEntry) CheckEnt() error { - if err := s.ShadowBase.CheckEnt(); err != nil { - return err - } - if s.ServiceResolverConfigEntry.Redirect != nil && (IsEnterpriseData(s.ServiceResolverConfigEntry.Redirect.Namespace, s.ServiceResolverConfigEntry.Redirect.Partition) || s.ServiceResolverConfigEntry.Redirect.SamenessGroup != "") { - return errIncompatibleTenantedData - } - for _, failover := range s.ServiceResolverConfigEntry.Failover { - if IsEnterpriseData(failover.Namespace, "") || failover.SamenessGroup != "" { - return errIncompatibleTenantedData - } - for _, target := range failover.Targets { - if IsEnterpriseData(target.Namespace, target.Partition) { - return errIncompatibleTenantedData - } - } - } - return nil -} - -func (s ShadowServiceResolverConfigEntry) GetRealConfigEntry() structs.ConfigEntry { - return s.ServiceResolverConfigEntry -} - -func (e *ShadowProxyConfigEntry) UnmarshalBinary(data []byte) error { - // The goal here is to add a post-decoding operation to - // decoding of a ProxyConfigEntry. The cleanest way I could - // find to do so was to implement the BinaryMarshaller interface - // and use a type alias to do the original round of decoding, - // followed by a MapWalk of the Config to coerce everything - // into JSON compatible types. - type Alias structs.ProxyConfigEntry - as := struct { - *ShadowBase - *Alias - }{ - ShadowBase: &e.ShadowBase, - Alias: (*Alias)(e.ProxyConfigEntry), - } - dec := codec.NewDecoderBytes(data, structs.MsgpackHandle) - if err := dec.Decode(&as); err != nil { - return err - } - config, err := lib.MapWalk(e.Config) - if err != nil { - return err - } - e.Config = config - return nil -} - -type ShadowUpstreamConfig struct { - ShadowBase - *structs.UpstreamConfig -} -type ShadowUpstreamConfiguration struct { - Overrides []*ShadowUpstreamConfig - *structs.UpstreamConfiguration -} -type ShadowServiceConfigEntry struct { - ShadowBase - UpstreamConfig *ShadowUpstreamConfiguration - *structs.ServiceConfigEntry -} - -func (s ShadowServiceConfigEntry) GetRealConfigEntry() structs.ConfigEntry { - if s.UpstreamConfig != nil { - for _, override := range s.UpstreamConfig.Overrides { - if !IsEnterpriseData(override.Namespace, override.Partition) { - if s.ServiceConfigEntry.UpstreamConfig == nil { - s.ServiceConfigEntry.UpstreamConfig = &structs.UpstreamConfiguration{} - } - s.ServiceConfigEntry.UpstreamConfig.Overrides = append(s.ServiceConfigEntry.UpstreamConfig.Overrides, override.UpstreamConfig) - } - } - } - return s.ServiceConfigEntry -} - -type ShadowServiceRouterConfigEntry struct { - ShadowBase - *structs.ServiceRouterConfigEntry -} - -func (s ShadowServiceRouterConfigEntry) CheckEnt() error { - if err := s.ShadowBase.CheckEnt(); err != nil { - return err - } - for _, route := range s.ServiceRouterConfigEntry.Routes { - if IsEnterpriseData(route.Destination.Namespace, route.Destination.Partition) { - return errIncompatibleTenantedData - } - } - return nil -} - -func (s ShadowServiceRouterConfigEntry) GetRealConfigEntry() structs.ConfigEntry { - return s.ServiceRouterConfigEntry -} - -type ShadowServiceSplitterConfigEntry struct { - ShadowBase - *structs.ServiceSplitterConfigEntry -} - -func (s ShadowServiceSplitterConfigEntry) CheckEnt() error { - if err := s.ShadowBase.CheckEnt(); err != nil { - return err - } - for _, split := range s.ServiceSplitterConfigEntry.Splits { - if IsEnterpriseData(split.Namespace, split.Partition) { - return errIncompatibleTenantedData - } - } - return nil -} -func (s ShadowServiceSplitterConfigEntry) GetRealConfigEntry() structs.ConfigEntry { - return s.ServiceSplitterConfigEntry -} - -type ShadowIngressService struct { - ShadowBase - *structs.IngressService -} -type ShadowIngressListener struct { - Services []ShadowIngressService - *structs.IngressListener -} -type ShadowIngressGatewayConfigEntry struct { - ShadowBase - Listeners []ShadowIngressListener - *structs.IngressGatewayConfigEntry -} - -func (s ShadowIngressGatewayConfigEntry) GetRealConfigEntry() structs.ConfigEntry { - for _, listner := range s.Listeners { - for _, svc := range listner.Services { - if !IsEnterpriseData(svc.Namespace, svc.Partition) { - listner.IngressListener.Services = append(listner.IngressListener.Services, *svc.IngressService) - } - } - if len(listner.IngressListener.Services) == 0 { - continue - } - s.IngressGatewayConfigEntry.Listeners = append(s.IngressGatewayConfigEntry.Listeners, *listner.IngressListener) - } - return s.IngressGatewayConfigEntry -} - -type ShadowLinkedService struct { - ShadowBase - *structs.LinkedService -} - -type ShadowTerminatingGatewayConfigEntry struct { - ShadowBase - Services []ShadowLinkedService - *structs.TerminatingGatewayConfigEntry -} - -func (s ShadowTerminatingGatewayConfigEntry) GetRealConfigEntry() structs.ConfigEntry { - for _, svc := range s.Services { - if !IsEnterpriseData(svc.Namespace, svc.Partition) { - s.TerminatingGatewayConfigEntry.Services = append(s.TerminatingGatewayConfigEntry.Services, *svc.LinkedService) - } - } - return s.TerminatingGatewayConfigEntry -} - -type ShadowSourceIntention struct { - ShadowBase - *structs.SourceIntention -} -type ShadowServiceIntentionsConfigEntry struct { - ShadowBase - Sources []*ShadowSourceIntention - *structs.ServiceIntentionsConfigEntry -} - -func (s ShadowServiceIntentionsConfigEntry) GetRealConfigEntry() structs.ConfigEntry { - for _, source := range s.Sources { - if !IsEnterpriseData(source.Namespace, source.Partition) && source.SamenessGroup == "" { - s.ServiceIntentionsConfigEntry.Sources = append(s.ServiceIntentionsConfigEntry.Sources, source.SourceIntention) - } - } - return s.ServiceIntentionsConfigEntry -} - -type ShadowMeshConfigEntry struct { - ShadowBase - *structs.MeshConfigEntry -} - -func (s ShadowMeshConfigEntry) GetRealConfigEntry() structs.ConfigEntry { - return s.MeshConfigEntry -} - -type ShadowExportedServicesConfigEntry struct { - ShadowBase - *structs.ExportedServicesConfigEntry -} - -func (s ShadowExportedServicesConfigEntry) GetRealConfigEntry() structs.ConfigEntry { - services := []structs.ExportedService{} - for _, svc := range s.ExportedServicesConfigEntry.Services { - if !IsEnterpriseData(svc.Namespace, "") { - consumers := []structs.ServiceConsumer{} - for _, consumer := range svc.Consumers { - if !IsEnterpriseData("", consumer.Partition) && consumer.SamenessGroup == "" { - consumers = append(consumers, consumer) - } - } - if len(consumers) == 0 { - continue - } - services = append(services, svc) - } - } - s.ExportedServicesConfigEntry.Services = services - return s.ExportedServicesConfigEntry -} - -type ShadowSamenessGroupConfigEntry struct { - ShadowBase - *structs.SamenessGroupConfigEntry -} - -func (s ShadowSamenessGroupConfigEntry) GetRealConfigEntry() structs.ConfigEntry { - return s.SamenessGroupConfigEntry -} - -type ShadowAPIGatewayConfigEntry struct { - ShadowBase - *structs.APIGatewayConfigEntry -} - -func (s ShadowAPIGatewayConfigEntry) GetRealConfigEntry() structs.ConfigEntry { - return s.APIGatewayConfigEntry -} - -type ShadowBoundAPIGatewayListener struct { - Routes []ShadowResourceReference - Certificates []ShadowResourceReference - *structs.BoundAPIGatewayListener -} -type ShadowBoundAPIGatewayConfigEntry struct { - ShadowBase - Listeners []ShadowBoundAPIGatewayListener - *structs.BoundAPIGatewayConfigEntry -} - -func (s ShadowBoundAPIGatewayConfigEntry) GetRealConfigEntry() structs.ConfigEntry { - for _, listner := range s.Listeners { - for _, route := range listner.Routes { - if !IsEnterpriseData(route.Namespace, route.Partition) { - listner.BoundAPIGatewayListener.Routes = append(listner.BoundAPIGatewayListener.Routes, *route.ResourceReference) - } - } - for _, cf := range listner.Certificates { - if !IsEnterpriseData(cf.Namespace, cf.Partition) { - listner.BoundAPIGatewayListener.Certificates = append(listner.BoundAPIGatewayListener.Certificates, *cf.ResourceReference) - } - } - s.BoundAPIGatewayConfigEntry.Listeners = append(s.BoundAPIGatewayConfigEntry.Listeners, *listner.BoundAPIGatewayListener) - } - return s.BoundAPIGatewayConfigEntry -} - -type ShadowInlineCertificateConfigEntry struct { - ShadowBase - *structs.InlineCertificateConfigEntry -} - -func (s ShadowInlineCertificateConfigEntry) GetRealConfigEntry() structs.ConfigEntry { - return s.InlineCertificateConfigEntry -} - -type ShadowHTTPService struct { - ShadowBase - *structs.HTTPService -} -type ShadowHTTPRouteRule struct { - Services []ShadowHTTPService - *structs.HTTPRouteRule -} -type ShadowResourceReference struct { - ShadowBase - *structs.ResourceReference -} -type ShadowHTTPRouteConfigEntry struct { - ShadowBase - Parents []ShadowResourceReference - Rules []ShadowHTTPRouteRule - *structs.HTTPRouteConfigEntry -} - -func (s ShadowHTTPRouteConfigEntry) GetRealConfigEntry() structs.ConfigEntry { - for _, parent := range s.Parents { - if !IsEnterpriseData(parent.Namespace, parent.Partition) { - s.HTTPRouteConfigEntry.Parents = append(s.HTTPRouteConfigEntry.Parents, *parent.ResourceReference) - } - } - for _, rule := range s.Rules { - for _, svc := range rule.Services { - if !IsEnterpriseData(svc.Namespace, svc.Partition) { - rule.HTTPRouteRule.Services = append(rule.HTTPRouteRule.Services, *svc.HTTPService) - } - } - s.HTTPRouteConfigEntry.Rules = append(s.HTTPRouteConfigEntry.Rules, *rule.HTTPRouteRule) - } - return s.HTTPRouteConfigEntry -} - -type ShadowTCPService struct { - ShadowBase - *structs.TCPService -} -type ShadowTCPRouteConfigEntry struct { - ShadowBase - Parents []ShadowResourceReference - Services []ShadowTCPService - *structs.TCPRouteConfigEntry -} - -func (s ShadowTCPRouteConfigEntry) GetRealConfigEntry() structs.ConfigEntry { - for _, parent := range s.Parents { - if !IsEnterpriseData(parent.Namespace, parent.Partition) { - s.TCPRouteConfigEntry.Parents = append(s.TCPRouteConfigEntry.Parents, *parent.ResourceReference) - } - } - for _, svc := range s.Services { - if !IsEnterpriseData(svc.Namespace, svc.Partition) { - s.TCPRouteConfigEntry.Services = append(s.TCPRouteConfigEntry.Services, *svc.TCPService) - } - } - return s.TCPRouteConfigEntry -} - -type ShadowJWTProviderConfigEntry struct { - ShadowBase - *structs.JWTProviderConfigEntry -} - -func (s ShadowJWTProviderConfigEntry) GetRealConfigEntry() structs.ConfigEntry { - return s.JWTProviderConfigEntry -} diff --git a/agent/consul/fsm/fsm.go b/agent/consul/fsm/fsm.go index 5a350e4dae778..92a3931b5b331 100644 --- a/agent/consul/fsm/fsm.go +++ b/agent/consul/fsm/fsm.go @@ -195,10 +195,6 @@ func (c *FSM) Apply(log *raft.Log) interface{} { c.logger.Warn("ignoring unknown message type, upgrade to newer version", "type", msgType) return nil } - if structs.CEDowngrade && msgType >= 64 { - c.logger.Warn("ignoring enterprise message, for downgrading to oss", "type", msgType) - return nil - } panic(fmt.Errorf("failed to apply request: %#v", buf)) } @@ -267,10 +263,7 @@ func (c *FSM) Restore(old io.ReadCloser) error { return err } default: - if structs.CEDowngrade && msg >= 64 { - c.logger.Warn("ignoring enterprise message , for downgrading to oss", "type", msg) - return nil - } else if msg >= 64 { + if msg >= 64 { return fmt.Errorf("msg type <%d> is a Consul Enterprise log entry. Consul CE cannot restore it", msg) } else { return fmt.Errorf("Unrecognized msg type %d", msg) diff --git a/agent/consul/gateways/controller_gateways.go b/agent/consul/gateways/controller_gateways.go index ae82bdddc4495..ab96ca7b2449c 100644 --- a/agent/consul/gateways/controller_gateways.go +++ b/agent/consul/gateways/controller_gateways.go @@ -624,6 +624,7 @@ func getAllGatewayMeta(store *state.Store) ([]*gatewayMeta, error) { meta := make([]*gatewayMeta, 0, len(boundGateways)) for _, b := range boundGateways { bound := b.(*structs.BoundAPIGatewayConfigEntry) + bound = bound.DeepCopy() for _, g := range gateways { gateway := g.(*structs.APIGatewayConfigEntry) if bound.IsInitializedForGateway(gateway) { @@ -667,6 +668,10 @@ func (g *gatewayMeta) updateRouteBinding(route structs.BoundRoute) (bool, []stru return nil }) + if g.BoundGateway.Services == nil { + g.BoundGateway.Services = make(structs.ServiceRouteReferences) + } + // now try and bind all of the route's current refs for _, ref := range route.GetParents() { if !g.shouldBindRoute(ref) { @@ -708,6 +713,9 @@ func (g *gatewayMeta) updateRouteBinding(route structs.BoundRoute) (bool, []stru } if refDidBind { + for _, serviceName := range route.GetServiceNames() { + g.BoundGateway.Services.AddService(structs.NewServiceName(serviceName.Name, &serviceName.EnterpriseMeta), routeRef) + } boundRefs = append(boundRefs, ref) } } @@ -1138,6 +1146,7 @@ func removeRoute(route structs.ResourceReference, entries ...*gatewayMeta) []*ga for _, entry := range entries { if entry.unbindRoute(route) { modified = append(modified, entry) + entry.BoundGateway.Services.RemoveRouteRef(route) } } diff --git a/agent/consul/gateways/controller_gateways_test.go b/agent/consul/gateways/controller_gateways_test.go index 5acb06f0411b8..666f9e002cf47 100644 --- a/agent/consul/gateways/controller_gateways_test.go +++ b/agent/consul/gateways/controller_gateways_test.go @@ -217,6 +217,7 @@ func TestBoundAPIGatewayBindRoute(t *testing.T) { Kind: structs.TerminatingGateway, Name: "Gateway", Listeners: []structs.BoundAPIGatewayListener{}, + Services: make(structs.ServiceRouteReferences), }, expectedDidBind: false, }, @@ -484,6 +485,7 @@ func TestBindRoutesToGateways(t *testing.T) { }, }, }, + Services: make(structs.ServiceRouteReferences), }, }, expectedReferenceErrors: map[structs.ResourceReference]error{}, @@ -533,6 +535,7 @@ func TestBindRoutesToGateways(t *testing.T) { Routes: []structs.ResourceReference{}, }, }, + Services: make(structs.ServiceRouteReferences), }, }, expectedReferenceErrors: map[structs.ResourceReference]error{}, @@ -628,6 +631,7 @@ func TestBindRoutesToGateways(t *testing.T) { }, }, }, + Services: make(structs.ServiceRouteReferences), }, { Name: "Gateway 2", @@ -643,6 +647,7 @@ func TestBindRoutesToGateways(t *testing.T) { }, }, }, + Services: make(structs.ServiceRouteReferences), }, }, expectedReferenceErrors: map[structs.ResourceReference]error{}, @@ -720,6 +725,7 @@ func TestBindRoutesToGateways(t *testing.T) { }, }, }, + Services: make(structs.ServiceRouteReferences), }, }, expectedReferenceErrors: map[structs.ResourceReference]error{}, @@ -803,6 +809,7 @@ func TestBindRoutesToGateways(t *testing.T) { }, }, }, + Services: make(structs.ServiceRouteReferences), }, }, expectedReferenceErrors: map[structs.ResourceReference]error{}, @@ -892,6 +899,7 @@ func TestBindRoutesToGateways(t *testing.T) { }, }, }, + Services: make(structs.ServiceRouteReferences), }, }, expectedReferenceErrors: map[structs.ResourceReference]error{}, @@ -1007,6 +1015,7 @@ func TestBindRoutesToGateways(t *testing.T) { }, }, }, + Services: make(structs.ServiceRouteReferences), }, { Name: "Gateway 2", @@ -1026,6 +1035,7 @@ func TestBindRoutesToGateways(t *testing.T) { }, }, }, + Services: make(structs.ServiceRouteReferences), }, }, expectedReferenceErrors: map[structs.ResourceReference]error{}, @@ -1109,6 +1119,7 @@ func TestBindRoutesToGateways(t *testing.T) { }, }, }, + Services: make(structs.ServiceRouteReferences), }, }, expectedReferenceErrors: map[structs.ResourceReference]error{}, @@ -1215,6 +1226,7 @@ func TestBindRoutesToGateways(t *testing.T) { }, }, }, + Services: make(structs.ServiceRouteReferences), }, { Name: "Gateway 2", @@ -1230,6 +1242,7 @@ func TestBindRoutesToGateways(t *testing.T) { }, }, }, + Services: make(structs.ServiceRouteReferences), }, }, expectedReferenceErrors: map[structs.ResourceReference]error{}, @@ -1362,6 +1375,7 @@ func TestBindRoutesToGateways(t *testing.T) { }, }, }, + Services: make(structs.ServiceRouteReferences), }, }, expectedReferenceErrors: map[structs.ResourceReference]error{}, @@ -1999,6 +2013,11 @@ func TestAPIGatewayController(t *testing.T) { EnterpriseMeta: *defaultMeta, }}, }}, + + Services: structs.ServiceRouteReferences{structs.NewServiceName("tcp-upstream", nil): []structs.ResourceReference{{ + Kind: "tcp-route", + Name: "tcp-route", + }}}, }, &structs.APIGatewayConfigEntry{ Kind: structs.APIGateway, @@ -2226,6 +2245,16 @@ func TestAPIGatewayController(t *testing.T) { EnterpriseMeta: *defaultMeta, }}, }}, + Services: structs.ServiceRouteReferences{structs.NewServiceName("tcp-upstream", nil): []structs.ResourceReference{ + { + Kind: "tcp-route", + Name: "tcp-route-one", + }, + { + Kind: "tcp-route", + Name: "tcp-route-two", + }, + }}, }, &structs.APIGatewayConfigEntry{ Kind: structs.APIGateway, @@ -2375,6 +2404,16 @@ func TestAPIGatewayController(t *testing.T) { EnterpriseMeta: *defaultMeta, }}, }}, + Services: structs.ServiceRouteReferences{structs.NewServiceName("http-upstream", nil): []structs.ResourceReference{ + { + Kind: "http-route", + Name: "http-route-one", + }, + { + Kind: "http-route", + Name: "http-route-two", + }, + }}, }, &structs.APIGatewayConfigEntry{ Kind: structs.APIGateway, @@ -2522,6 +2561,10 @@ func TestAPIGatewayController(t *testing.T) { EnterpriseMeta: *defaultMeta, }}, }}, + Services: structs.ServiceRouteReferences{structs.NewServiceName("http-upstream", nil): []structs.ResourceReference{{ + Kind: "http-route", + Name: "http-route", + }}}, }, &structs.APIGatewayConfigEntry{ Kind: structs.APIGateway, @@ -2682,6 +2725,20 @@ func TestAPIGatewayController(t *testing.T) { EnterpriseMeta: *defaultMeta, }}, }}, + Services: structs.ServiceRouteReferences{ + structs.NewServiceName("http-upstream", nil): []structs.ResourceReference{ + { + Kind: "http-route", + Name: "http-route", + }, + }, + structs.NewServiceName("tcp-upstream", nil): []structs.ResourceReference{ + { + Kind: "tcp-route", + Name: "tcp-route", + }, + }, + }, }, &structs.APIGatewayConfigEntry{ Kind: structs.APIGateway, @@ -2809,6 +2866,7 @@ func TestAPIGatewayController(t *testing.T) { Name: "tcp-listener", Routes: []structs.ResourceReference{}, }}, + Services: make(structs.ServiceRouteReferences), }, &structs.APIGatewayConfigEntry{ Kind: structs.APIGateway, @@ -2898,6 +2956,7 @@ func TestAPIGatewayController(t *testing.T) { Name: "tcp-listener", Routes: []structs.ResourceReference{}, }}, + Services: make(structs.ServiceRouteReferences), }, &structs.APIGatewayConfigEntry{ Kind: structs.APIGateway, @@ -3041,6 +3100,14 @@ func TestAPIGatewayController(t *testing.T) { EnterpriseMeta: *defaultMeta, }}, }}, + Services: structs.ServiceRouteReferences{ + structs.NewServiceName("http-upstream", nil): []structs.ResourceReference{ + { + Kind: "http-route", + Name: "http-route", + }, + }, + }, }, &structs.APIGatewayConfigEntry{ Kind: structs.APIGateway, @@ -3214,6 +3281,7 @@ func TestAPIGatewayController(t *testing.T) { Name: "tcp-listener", Routes: []structs.ResourceReference{}, }}, + Services: make(structs.ServiceRouteReferences), }, &structs.APIGatewayConfigEntry{ Kind: structs.APIGateway, @@ -3353,6 +3421,7 @@ func TestAPIGatewayController(t *testing.T) { Listeners: []structs.BoundAPIGatewayListener{{ Name: "http-listener", }}, + Services: make(structs.ServiceRouteReferences), }, }, }, @@ -3427,6 +3496,7 @@ func TestAPIGatewayController(t *testing.T) { EnterpriseMeta: *defaultMeta, }}, }}, + Services: make(structs.ServiceRouteReferences), }, }, }, @@ -3552,6 +3622,7 @@ func TestAPIGatewayController(t *testing.T) { }, }, }, + Services: make(structs.ServiceRouteReferences), }, }, }, @@ -3651,6 +3722,7 @@ func TestAPIGatewayController(t *testing.T) { {Name: "listener-1"}, {Name: "listener-2"}, }, + Services: make(structs.ServiceRouteReferences), }, }, }, @@ -3766,6 +3838,7 @@ func TestAPIGatewayController(t *testing.T) { Name: "invalid-listener", }, }, + Services: make(structs.ServiceRouteReferences), }, }, }, @@ -3854,6 +3927,7 @@ func TestAPIGatewayController(t *testing.T) { EnterpriseMeta: *defaultMeta, }}, }}, + Services: make(structs.ServiceRouteReferences), }, }, }, diff --git a/agent/consul/options.go b/agent/consul/options.go index 88c16bd1a99c5..6dc754b3aef70 100644 --- a/agent/consul/options.go +++ b/agent/consul/options.go @@ -49,7 +49,7 @@ type Deps struct { EnterpriseDeps } -// UseV2Resources returns true if "resource-apis" is present in the Experiments +// useV2Resources returns true if "resource-apis" is present in the Experiments // array of the agent config. func (d Deps) UseV2Resources() bool { if stringslice.Contains(d.Experiments, CatalogResourceExperimentName) { @@ -58,15 +58,6 @@ func (d Deps) UseV2Resources() bool { return false } -// UseV2Tenancy returns true if "v2tenancy" is present in the Experiments -// array of the agent config. -func (d Deps) UseV2Tenancy() bool { - if stringslice.Contains(d.Experiments, V2TenancyExperimentName) { - return true - } - return false -} - type GRPCClientConner interface { ClientConn(datacenter string) (*grpc.ClientConn, error) ClientConnLeader() (*grpc.ClientConn, error) diff --git a/agent/consul/server.go b/agent/consul/server.go index 32829318bcd22..2e32fa7786810 100644 --- a/agent/consul/server.go +++ b/agent/consul/server.go @@ -20,9 +20,6 @@ import ( "time" "github.com/armon/go-metrics" - "github.com/hashicorp/consul/internal/auth" - "github.com/hashicorp/consul/internal/mesh" - "github.com/hashicorp/consul/internal/multicluster" "github.com/hashicorp/go-connlimit" "github.com/hashicorp/go-hclog" "github.com/hashicorp/go-memdb" @@ -43,6 +40,7 @@ import ( "github.com/hashicorp/consul/acl" "github.com/hashicorp/consul/acl/resolver" "github.com/hashicorp/consul/agent/blockingquery" + "github.com/hashicorp/consul/agent/connect" "github.com/hashicorp/consul/agent/consul/authmethod" "github.com/hashicorp/consul/agent/consul/authmethod/ssoauth" "github.com/hashicorp/consul/agent/consul/fsm" @@ -73,14 +71,15 @@ import ( "github.com/hashicorp/consul/agent/rpc/peering" "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/agent/token" + "github.com/hashicorp/consul/internal/auth" "github.com/hashicorp/consul/internal/catalog" "github.com/hashicorp/consul/internal/controller" + "github.com/hashicorp/consul/internal/mesh" proxysnapshot "github.com/hashicorp/consul/internal/mesh/proxy-snapshot" "github.com/hashicorp/consul/internal/resource" "github.com/hashicorp/consul/internal/resource/demo" "github.com/hashicorp/consul/internal/resource/reaper" raftstorage "github.com/hashicorp/consul/internal/storage/raft" - "github.com/hashicorp/consul/internal/tenancy" "github.com/hashicorp/consul/lib" "github.com/hashicorp/consul/lib/routine" "github.com/hashicorp/consul/lib/stringslice" @@ -469,9 +468,6 @@ type Server struct { registry resource.Registry useV2Resources bool - - // useV2Tenancy is tied to the "v2tenancy" feature flag. - useV2Tenancy bool } func (s *Server) DecrementBlockingQueries() uint64 { @@ -561,7 +557,6 @@ func NewServer(config *Config, flat Deps, externalGRPCServer *grpc.Server, routineManager: routine.NewManager(logger.Named(logging.ConsulServer)), registry: flat.Registry, useV2Resources: flat.UseV2Resources(), - useV2Tenancy: flat.UseV2Tenancy(), } incomingRPCLimiter.Register(s) @@ -839,7 +834,7 @@ func NewServer(config *Config, flat Deps, externalGRPCServer *grpc.Server, go s.reportingManager.Run(&lib.StopChannelContext{StopCh: s.shutdownCh}) // Setup insecure resource service client. - if err := s.setupInsecureResourceServiceClient(flat.Registry, logger); err != nil { + if err := s.setupInsecureResourceServiceClient(flat.Registry, logger, flat); err != nil { return nil, err } @@ -936,17 +931,9 @@ func isV1CatalogRequest(rpcName string) bool { } func (s *Server) registerControllers(deps Deps, proxyUpdater ProxyUpdater) error { - // When not enabled, the v1 tenancy bridge is used by default. - if s.useV2Tenancy { - tenancy.RegisterControllers( - s.controllerManager, - tenancy.Dependencies{Registry: deps.Registry}, - ) - } - if s.useV2Resources { catalog.RegisterControllers(s.controllerManager, catalog.DefaultControllerDependencies()) - multicluster.RegisterControllers(s.controllerManager) + defaultAllow, err := s.config.ACLResolverSettings.IsDefaultAllow() if err != nil { return err @@ -990,7 +977,7 @@ func (s *Server) registerControllers(deps Deps, proxyUpdater ProxyUpdater) error demo.RegisterControllers(s.controllerManager) } - return s.controllerManager.ValidateDependencies(s.registry.Types()) + return nil } func newGRPCHandlerFromConfig(deps Deps, config *Config, s *Server) connHandler { @@ -1469,9 +1456,8 @@ func (s *Server) setupExternalGRPC(config *Config, deps Deps, logger hclog.Logge s.peerStreamServer.Register(s.externalGRPCServer) tenancyBridge := NewV1TenancyBridge(s) - if s.useV2Tenancy { - tenancyBridgeV2 := tenancy.NewV2TenancyBridge() - tenancyBridge = tenancyBridgeV2.WithClient(s.insecureResourceServiceClient) + if stringslice.Contains(deps.Experiments, V2TenancyExperimentName) { + tenancyBridge = resource.NewV2TenancyBridge() } s.resourceServiceServer = resourcegrpc.NewServer(resourcegrpc.Config{ @@ -1480,23 +1466,20 @@ func (s *Server) setupExternalGRPC(config *Config, deps Deps, logger hclog.Logge ACLResolver: s.ACLResolver, Logger: logger.Named("grpc-api.resource"), TenancyBridge: tenancyBridge, - UseV2Tenancy: s.useV2Tenancy, }) s.resourceServiceServer.Register(s.externalGRPCServer) reflection.Register(s.externalGRPCServer) } -func (s *Server) setupInsecureResourceServiceClient(typeRegistry resource.Registry, logger hclog.Logger) error { +func (s *Server) setupInsecureResourceServiceClient(typeRegistry resource.Registry, logger hclog.Logger, deps Deps) error { if s.raftStorageBackend == nil { return fmt.Errorf("raft storage backend cannot be nil") } - // Can't use interface type var here since v2 specific "WithClient(...)" is called futher down. tenancyBridge := NewV1TenancyBridge(s) - tenancyBridgeV2 := tenancy.NewV2TenancyBridge() - if s.useV2Tenancy { - tenancyBridge = tenancyBridgeV2 + if stringslice.Contains(deps.Experiments, V2TenancyExperimentName) { + tenancyBridge = resource.NewV2TenancyBridge() } server := resourcegrpc.NewServer(resourcegrpc.Config{ Registry: typeRegistry, @@ -1504,7 +1487,6 @@ func (s *Server) setupInsecureResourceServiceClient(typeRegistry resource.Regist ACLResolver: resolver.DANGER_NO_AUTH{}, Logger: logger.Named("grpc-api.resource"), TenancyBridge: tenancyBridge, - UseV2Tenancy: s.useV2Tenancy, }) conn, err := s.runInProcessGRPCServer(server.Register) @@ -1512,7 +1494,7 @@ func (s *Server) setupInsecureResourceServiceClient(typeRegistry resource.Regist return err } s.insecureResourceServiceClient = pbresource.NewResourceServiceClient(conn) - tenancyBridgeV2.WithClient(s.insecureResourceServiceClient) + return nil } @@ -2234,24 +2216,9 @@ func (s *Server) hcpServerStatus(deps Deps) hcp.StatusCallback { status.RPCPort = s.config.RPCAddr.Port status.Datacenter = s.config.Datacenter - tlsCert := s.tlsConfigurator.Cert() - if tlsCert != nil { - status.TLS.Enabled = true - leaf := tlsCert.Leaf - if leaf == nil { - // Parse the leaf cert - leaf, err = x509.ParseCertificate(tlsCert.Certificate[0]) - if err != nil { - // Shouldn't be possible - return - } - } - status.TLS.CertName = leaf.Subject.CommonName - status.TLS.CertSerial = leaf.SerialNumber.String() - status.TLS.CertExpiry = leaf.NotAfter - status.TLS.VerifyIncoming = s.tlsConfigurator.VerifyIncomingRPC() - status.TLS.VerifyOutgoing = s.tlsConfigurator.Base().InternalRPC.VerifyOutgoing - status.TLS.VerifyServerHostname = s.tlsConfigurator.VerifyServerHostname() + err = addServerTLSInfo(&status, s.tlsConfigurator) + if err != nil { + return status, fmt.Errorf("error adding server tls info: %w", err) } status.Raft.IsLeader = s.raft.State() == raft.Leader @@ -2340,6 +2307,83 @@ func convertConsulConfigToRateLimitHandlerConfig(limitsConfig RequestLimits, mul return hc } +// addServerTLSInfo adds the server's TLS information if available to the status +func addServerTLSInfo(status *hcpclient.ServerStatus, tlsConfigurator tlsutil.ConfiguratorIface) error { + tlsCert := tlsConfigurator.Cert() + if tlsCert == nil { + return nil + } + + leaf := tlsCert.Leaf + var err error + if leaf == nil { + // Parse the leaf cert + if len(tlsCert.Certificate) == 0 { + return fmt.Errorf("expected a leaf certificate but there was none") + } + leaf, err = x509.ParseCertificate(tlsCert.Certificate[0]) + if err != nil { + // Shouldn't be possible + return fmt.Errorf("error parsing leaf cert: %w", err) + } + } + + tlsInfo := hcpclient.ServerTLSInfo{ + Enabled: true, + CertIssuer: leaf.Issuer.CommonName, + CertName: leaf.Subject.CommonName, + CertSerial: leaf.SerialNumber.String(), + CertExpiry: leaf.NotAfter, + VerifyIncoming: tlsConfigurator.VerifyIncomingRPC(), + VerifyOutgoing: tlsConfigurator.Base().InternalRPC.VerifyOutgoing, + VerifyServerHostname: tlsConfigurator.VerifyServerHostname(), + } + + // Collect metadata for all CA certs used for internal RPC + metadata := make([]hcpclient.CertificateMetadata, 0) + for _, pemStr := range tlsConfigurator.ManualCAPems() { + cert, err := connect.ParseCert(pemStr) + if err != nil { + return fmt.Errorf("error parsing manual ca pem: %w", err) + } + + metadatum := hcpclient.CertificateMetadata{ + CertExpiry: cert.NotAfter, + CertName: cert.Subject.CommonName, + CertSerial: cert.SerialNumber.String(), + } + metadata = append(metadata, metadatum) + } + for ix, certBytes := range tlsCert.Certificate { + if ix == 0 { + // Skip the leaf cert at index 0. Only collect intermediates + continue + } + + cert, err := x509.ParseCertificate(certBytes) + if err != nil { + return fmt.Errorf("error parsing tls cert index %d: %w", ix, err) + } + + metadatum := hcpclient.CertificateMetadata{ + CertExpiry: cert.NotAfter, + CertName: cert.Subject.CommonName, + CertSerial: cert.SerialNumber.String(), + } + metadata = append(metadata, metadatum) + } + tlsInfo.CertificateAuthorities = metadata + + status.ServerTLSMetadata.InternalRPC = tlsInfo + + // TODO: remove status.TLS in preference for server.ServerTLSMetadata.InternalRPC + // when deprecation path is ready + // https://hashicorp.atlassian.net/browse/CC-7015 + status.TLS = tlsInfo + + return nil +} + // peersInfoContent is used to help operators understand what happened to the // peers.json file. This is written to a file called peers.info in the same // location. diff --git a/agent/consul/server_test.go b/agent/consul/server_test.go index 95fa102d4a464..e72549babbef1 100644 --- a/agent/consul/server_test.go +++ b/agent/consul/server_test.go @@ -5,12 +5,11 @@ package consul import ( "context" + "crypto/tls" "crypto/x509" - "flag" "fmt" "net" "os" - "path/filepath" "reflect" "strings" "sync" @@ -38,12 +37,10 @@ import ( external "github.com/hashicorp/consul/agent/grpc-external" grpcmiddleware "github.com/hashicorp/consul/agent/grpc-middleware" hcpclient "github.com/hashicorp/consul/agent/hcp/client" - "github.com/hashicorp/consul/agent/leafcert" "github.com/hashicorp/consul/agent/metadata" "github.com/hashicorp/consul/agent/rpc/middleware" "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/agent/token" - proxytracker "github.com/hashicorp/consul/internal/mesh/proxy-tracker" "github.com/hashicorp/consul/ipaddr" "github.com/hashicorp/consul/sdk/freeport" "github.com/hashicorp/consul/sdk/testutil" @@ -341,8 +338,7 @@ func newServerWithDeps(t *testing.T, c *Config, deps Deps) (*Server, error) { } } grpcServer := external.NewServer(deps.Logger.Named("grpc.external"), nil, deps.TLSConfigurator, rpcRate.NullRequestLimitsHandler(), keepalive.ServerParameters{}) - proxyUpdater := proxytracker.NewProxyTracker(proxytracker.ProxyTrackerConfig{}) - srv, err := NewServer(c, deps, grpcServer, nil, deps.Logger, proxyUpdater) + srv, err := NewServer(c, deps, grpcServer, nil, deps.Logger, nil) if err != nil { return nil, err } @@ -2107,37 +2103,146 @@ func TestServer_hcpManager(t *testing.T) { } -// goldenMarkdown reads and optionally writes the expected data to the goldenMarkdown file, -// returning the contents as a string. -func goldenMarkdown(t *testing.T, name, got string) string { - t.Helper() - - golden := filepath.Join("testdata", name+".md") - update := flag.Lookup("update").Value.(flag.Getter).Get().(bool) - if update && got != "" { - err := os.WriteFile(golden, []byte(got), 0644) - require.NoError(t, err) - } - - expected, err := os.ReadFile(golden) - require.NoError(t, err) - - return string(expected) -} +func TestServer_addServerTLSInfo(t *testing.T) { + testCases := map[string]struct { + errMsg string + setupConfigurator func(*testing.T) tlsutil.ConfiguratorIface + checkStatus func(*testing.T, hcpclient.ServerStatus) + }{ + "Success": { + setupConfigurator: func(t *testing.T) tlsutil.ConfiguratorIface { + tlsConfig := tlsutil.Config{ + InternalRPC: tlsutil.ProtocolConfig{ + CAFile: "../../test/ca/root.cer", + CertFile: "../../test/key/ourdomain_with_intermediate.cer", + KeyFile: "../../test/key/ourdomain.key", + VerifyIncoming: true, + VerifyOutgoing: true, + VerifyServerHostname: true, + }, + } -func TestServer_ControllerDependencies(t *testing.T) { - t.Parallel() + tlsConfigurator, err := tlsutil.NewConfigurator(tlsConfig, hclog.NewNullLogger()) + require.NoError(t, err) + return tlsConfigurator + }, + checkStatus: func(t *testing.T, s hcpclient.ServerStatus) { + expected := hcpclient.ServerTLSInfo{ + Enabled: true, + CertIssuer: "test.internal", + CertName: "testco.internal", + CertSerial: "40", + CertExpiry: time.Date(2123, time.October, 9, 17, 20, 16, 0, time.UTC), + VerifyIncoming: true, + VerifyOutgoing: true, + VerifyServerHostname: true, + CertificateAuthorities: []hcpclient.CertificateMetadata{ + { // manual ca pem + CertExpiry: time.Date(2033, time.October, 30, 15, 50, 29, 0, time.UTC), + CertName: "test.internal", + CertSerial: "191297809789001034260919865367524695178070761520", + }, + { // certificate intermediate + CertExpiry: time.Date(2033, time.October, 30, 15, 50, 29, 0, time.UTC), + CertName: "test.internal", + CertSerial: "191297809789001034260919865367524695178070761520", + }, + }, + } - _, conf := testServerConfig(t) - deps := newDefaultDeps(t, conf) - deps.Experiments = []string{"resource-apis"} - deps.LeafCertManager = &leafcert.Manager{} + require.Equal(t, expected, s.ServerTLSMetadata.InternalRPC) - s1, err := newServerWithDeps(t, conf, deps) - require.NoError(t, err) + // TODO: remove check for status.TLS once deprecation is ready + // https://hashicorp.atlassian.net/browse/CC-7015 + require.Equal(t, expected, s.TLS) + }, + }, + "Nil Cert": { + setupConfigurator: func(t *testing.T) tlsutil.ConfiguratorIface { + tlsConfigurator, err := tlsutil.NewConfigurator(tlsutil.Config{}, + hclog.NewNullLogger()) + require.NoError(t, err) + return tlsConfigurator + }, + checkStatus: func(t *testing.T, s hcpclient.ServerStatus) { + require.Empty(t, s.TLS) + require.Empty(t, s.ServerTLSMetadata.InternalRPC) + }, + }, + "Fail: No leaf": { + errMsg: "expected a leaf certificate", + setupConfigurator: func(t *testing.T) tlsutil.ConfiguratorIface { + return tlsutil.MockConfigurator{ + TlsCert: &tls.Certificate{}, + } + }, + }, + "Fail: Parse leaf cert": { + errMsg: "error parsing leaf cert", + setupConfigurator: func(t *testing.T) tlsutil.ConfiguratorIface { + return tlsutil.MockConfigurator{ + TlsCert: &tls.Certificate{ + Certificate: [][]byte{{}}, + }, + } + }, + }, + "Fail: Parse manual ca pems": { + errMsg: "error parsing manual ca pem", + setupConfigurator: func(t *testing.T) tlsutil.ConfiguratorIface { + tlsConfig := tlsutil.Config{ + InternalRPC: tlsutil.ProtocolConfig{ + CertFile: "../../test/key/ourdomain.cer", + KeyFile: "../../test/key/ourdomain.key", + }, + } + tlsConfigurator, err := tlsutil.NewConfigurator(tlsConfig, hclog.NewNullLogger()) + require.NoError(t, err) - waitForLeaderEstablishment(t, s1) - actual := fmt.Sprintf("```mermaid\n%s\n```", s1.controllerManager.CalculateDependencies(s1.registry.Types()).ToMermaid()) - expected := goldenMarkdown(t, "v2-resource-dependencies", actual) - require.Equal(t, expected, actual) + return tlsutil.MockConfigurator{ + TlsCert: tlsConfigurator.Cert(), + ManualCAPemsArr: []string{"invalid-format"}, + } + }, + }, + "Fail: Parse tls cert intermediate": { + errMsg: "error parsing tls cert", + setupConfigurator: func(t *testing.T) tlsutil.ConfiguratorIface { + tlsConfig := tlsutil.Config{ + InternalRPC: tlsutil.ProtocolConfig{ + CertFile: "../../test/key/ourdomain.cer", + KeyFile: "../../test/key/ourdomain.key", + }, + } + tlsConfigurator, err := tlsutil.NewConfigurator(tlsConfig, hclog.NewNullLogger()) + require.NoError(t, err) + cert := tlsConfigurator.Cert().Certificate + cert = append(cert, []byte{}) + return tlsutil.MockConfigurator{ + TlsCert: &tls.Certificate{ + Certificate: cert, + }, + } + }, + }, + } + for name, tc := range testCases { + t.Run(name, func(t *testing.T) { + require.NotNil(t, tc.setupConfigurator) + tlsConfigurator := tc.setupConfigurator(t) + + status := hcpclient.ServerStatus{} + err := addServerTLSInfo(&status, tlsConfigurator) + + if len(tc.errMsg) > 0 { + require.Error(t, err) + require.Contains(t, err.Error(), tc.errMsg) + require.Empty(t, status) + } else { + require.NoError(t, err) + require.NotNil(t, tc.checkStatus) + tc.checkStatus(t, status) + } + }) + } } diff --git a/agent/consul/state/catalog.go b/agent/consul/state/catalog.go index 02abd77132ac6..993dd9b0b2835 100644 --- a/agent/consul/state/catalog.go +++ b/agent/consul/state/catalog.go @@ -3831,6 +3831,9 @@ func updateGatewayNamespace(tx WriteTxn, idx uint64, service *structs.GatewaySer if service.GatewayKind == structs.ServiceKindTerminatingGateway && !hasNonConnectInstance { continue } + if service.GatewayKind == structs.ServiceKindAPIGateway && !hasConnectInstance { + continue + } existing, err := tx.First(tableGatewayServices, indexID, service.Gateway, sn.CompoundServiceName().ServiceName, service.Port) if err != nil { @@ -4231,6 +4234,36 @@ func serviceGatewayNodes(tx ReadTxn, ws memdb.WatchSet, service string, kind str return maxIdx, ret, nil } +// metricsProtocolForAPIGateway determines the protocol that should be used when fetching metrics for an api gateway +// Since api gateways may have listeners with different protocols, favor capturing all traffic by only returning HTTP +// when all listeners are HTTP-like. +func metricsProtocolForAPIGateway(tx ReadTxn, ws memdb.WatchSet, sn structs.ServiceName) (uint64, string, error) { + idx, conf, err := configEntryTxn(tx, ws, structs.APIGateway, sn.Name, &sn.EnterpriseMeta) + if err != nil { + return 0, "", fmt.Errorf("failed to get api-gateway config entry for %q: %v", sn.String(), err) + } + if conf == nil { + return 0, "", nil + } + entry, ok := conf.(*structs.APIGatewayConfigEntry) + if !ok { + return 0, "", fmt.Errorf("unexpected config entry type: %T", conf) + } + counts := make(map[string]int) + for _, l := range entry.Listeners { + if structs.IsProtocolHTTPLike(string(l.Protocol)) { + counts["http"] += 1 + } else { + counts["tcp"] += 1 + } + } + protocol := "tcp" + if counts["tcp"] == 0 && counts["http"] > 0 { + protocol = "http" + } + return idx, protocol, nil +} + // metricsProtocolForIngressGateway determines the protocol that should be used when fetching metrics for an ingress gateway // Since ingress gateways may have listeners with different protocols, favor capturing all traffic by only returning HTTP // when all listeners are HTTP-like. @@ -4304,7 +4337,11 @@ func (s *Store) ServiceTopology( if err != nil { return 0, nil, fmt.Errorf("failed to fetch protocol for service %s: %v", sn.String(), err) } - + case structs.ServiceKindAPIGateway: + maxIdx, protocol, err = metricsProtocolForAPIGateway(tx, ws, sn) + if err != nil { + return 0, nil, fmt.Errorf("failed to fetch protocol for service %s: %v", sn.String(), err) + } case structs.ServiceKindTypical: maxIdx, protocol, err = protocolForService(tx, ws, sn) if err != nil { @@ -4362,11 +4399,23 @@ func (s *Store) ServiceTopology( maxIdx = idx } - var upstreamSources = make(map[string]string) + upstreamSources := make(map[string]string) for _, un := range upstreamNames { upstreamSources[un.String()] = structs.TopologySourceRegistration } + if kind == structs.ServiceKind(structs.APIGateway) { + upstreamFromGW, err := upstreamServicesForGatewayTxn(tx, sn) + if err != nil { + return 0, nil, err + } + + for _, dn := range upstreamFromGW { + upstreamNames = append(upstreamNames, dn) + upstreamSources[dn.String()] = structs.TopologySourceRegistration + } + } + upstreamDecisions := make(map[string]structs.IntentionDecisionSummary) // Only transparent proxies / connect native services have upstreams from intentions @@ -4483,11 +4532,24 @@ func (s *Store) ServiceTopology( maxIdx = idx } - var downstreamSources = make(map[string]string) + downstreamSources := make(map[string]string) for _, dn := range downstreamNames { downstreamSources[dn.String()] = structs.TopologySourceRegistration } + idx, downstreamGWs, err := s.downstreamGatewaysForServiceTxn(tx, sn) + if err != nil { + return 0, nil, err + } + if idx > maxIdx { + maxIdx = idx + } + + for _, dn := range downstreamGWs { + downstreamNames = append(downstreamNames, dn) + downstreamSources[dn.String()] = structs.TopologySourceRegistration + } + idx, intentionDownstreams, err := s.intentionTopologyTxn(tx, ws, sn, true, defaultAllow, structs.IntentionTargetService) if err != nil { return 0, nil, err @@ -4628,6 +4690,61 @@ func (s *Store) combinedServiceNodesTxn(tx ReadTxn, ws memdb.WatchSet, names []s return maxIdx, resp, nil } +func upstreamServicesForGatewayTxn(tx ReadTxn, service structs.ServiceName) ([]structs.ServiceName, error) { + val, err := tx.First(tableConfigEntries, indexID, configentry.KindName{Kind: structs.BoundAPIGateway, Name: service.Name}) + if err != nil { + return nil, err + } + + if gw, ok := val.(*structs.BoundAPIGatewayConfigEntry); ok { + serviceIDs := gw.ListRelatedServices() + names := make([]structs.ServiceName, 0, len(serviceIDs)) + for _, id := range serviceIDs { + names = append(names, structs.NewServiceName(id.ID, &id.EnterpriseMeta)) + } + return names, nil + } + + return nil, errors.New("not an APIGateway") +} + +// downstreamsForServiceTxn will find all downstream services that could route traffic to the input service. +// There are two factors at play. Upstreams defined in a proxy registration, and the discovery chain for those upstreams. +func (s *Store) downstreamGatewaysForServiceTxn(tx ReadTxn, service structs.ServiceName) (uint64, []structs.ServiceName, error) { + iter, err := tx.Get(tableConfigEntries, indexLink, service.ToServiceID()) + if err != nil { + return 0, nil, err + } + + var ( + idx uint64 + resp []structs.ServiceName + seen = make(map[structs.ServiceName]struct{}) + ) + for raw := iter.Next(); raw != nil; raw = iter.Next() { + entry, ok := raw.(*structs.BoundAPIGatewayConfigEntry) + if !ok { + continue + } + + if entry.ModifyIndex > idx { + idx = entry.ModifyIndex + } + + gwServiceName := structs.NewServiceName(entry.Name, &entry.EnterpriseMeta) + if _, ok := seen[gwServiceName]; ok { + continue + } + + seen[gwServiceName] = struct{}{} + + resp = append(resp, gwServiceName) + + } + + return idx, resp, nil +} + // downstreamsForServiceTxn will find all downstream services that could route traffic to the input service. // There are two factors at play. Upstreams defined in a proxy registration, and the discovery chain for those upstreams. func (s *Store) downstreamsForServiceTxn(tx ReadTxn, ws memdb.WatchSet, dc string, service structs.ServiceName) (uint64, []structs.ServiceName, error) { diff --git a/agent/consul/state/peering.go b/agent/consul/state/peering.go index 05dfa59a37af3..1763777cff838 100644 --- a/agent/consul/state/peering.go +++ b/agent/consul/state/peering.go @@ -202,9 +202,6 @@ func (s *Store) peeringSecretsWriteTxn(tx WriteTxn, req *pbpeering.SecretsWriteR return fmt.Errorf("failed to read peering by id: %w", err) } if peering == nil { - if structs.CEDowngrade { - return nil - } return fmt.Errorf("unknown peering %q for secret", req.PeerID) } diff --git a/agent/consul/testdata/v2-resource-dependencies.md b/agent/consul/testdata/v2-resource-dependencies.md deleted file mode 100644 index edc7263299f0c..0000000000000 --- a/agent/consul/testdata/v2-resource-dependencies.md +++ /dev/null @@ -1,50 +0,0 @@ -```mermaid -flowchart TD - auth/v2beta1/computedtrafficpermissions --> auth/v2beta1/trafficpermissions - auth/v2beta1/computedtrafficpermissions --> auth/v2beta1/workloadidentity - catalog/v2beta1/failoverpolicy --> catalog/v2beta1/service - catalog/v2beta1/healthstatus - catalog/v2beta1/node --> catalog/v2beta1/healthstatus - catalog/v2beta1/service - catalog/v2beta1/serviceendpoints --> catalog/v2beta1/service - catalog/v2beta1/serviceendpoints --> catalog/v2beta1/workload - catalog/v2beta1/workload --> catalog/v2beta1/healthstatus - catalog/v2beta1/workload --> catalog/v2beta1/node - demo/v1/album - demo/v1/artist - demo/v1/concept - demo/v1/executive - demo/v1/recordlabel - demo/v2/album - demo/v2/artist - internal/v1/tombstone - mesh/v2beta1/computedexplicitdestinations --> catalog/v2beta1/service - mesh/v2beta1/computedexplicitdestinations --> catalog/v2beta1/workload - mesh/v2beta1/computedexplicitdestinations --> mesh/v2beta1/computedroutes - mesh/v2beta1/computedexplicitdestinations --> mesh/v2beta1/destinations - mesh/v2beta1/computedproxyconfiguration --> catalog/v2beta1/workload - mesh/v2beta1/computedproxyconfiguration --> mesh/v2beta1/proxyconfiguration - mesh/v2beta1/computedroutes --> catalog/v2beta1/failoverpolicy - mesh/v2beta1/computedroutes --> catalog/v2beta1/service - mesh/v2beta1/computedroutes --> mesh/v2beta1/destinationpolicy - mesh/v2beta1/computedroutes --> mesh/v2beta1/grpcroute - mesh/v2beta1/computedroutes --> mesh/v2beta1/httproute - mesh/v2beta1/computedroutes --> mesh/v2beta1/tcproute - mesh/v2beta1/destinationpolicy - mesh/v2beta1/destinations - mesh/v2beta1/grpcroute - mesh/v2beta1/httproute - mesh/v2beta1/meshgateway - mesh/v2beta1/proxyconfiguration - mesh/v2beta1/proxystatetemplate --> auth/v2beta1/computedtrafficpermissions - mesh/v2beta1/proxystatetemplate --> catalog/v2beta1/service - mesh/v2beta1/proxystatetemplate --> catalog/v2beta1/workload - mesh/v2beta1/proxystatetemplate --> mesh/v2beta1/computedexplicitdestinations - mesh/v2beta1/proxystatetemplate --> mesh/v2beta1/computedproxyconfiguration - mesh/v2beta1/proxystatetemplate --> mesh/v2beta1/computedroutes - mesh/v2beta1/tcproute - multicluster/v2beta1/computedexportedservices --> catalog/v2beta1/service - multicluster/v2beta1/computedexportedservices --> multicluster/v2beta1/exportedservices - multicluster/v2beta1/computedexportedservices --> multicluster/v2beta1/namespaceexportedservices - multicluster/v2beta1/computedexportedservices --> multicluster/v2beta1/partitionexportedservices -``` \ No newline at end of file diff --git a/agent/consul/type_registry.go b/agent/consul/type_registry.go index 8bf093c41a112..d93309159d4bb 100644 --- a/agent/consul/type_registry.go +++ b/agent/consul/type_registry.go @@ -7,7 +7,6 @@ import ( "github.com/hashicorp/consul/internal/auth" "github.com/hashicorp/consul/internal/catalog" "github.com/hashicorp/consul/internal/mesh" - "github.com/hashicorp/consul/internal/multicluster" "github.com/hashicorp/consul/internal/resource" "github.com/hashicorp/consul/internal/resource/demo" "github.com/hashicorp/consul/internal/tenancy" @@ -28,7 +27,6 @@ func NewTypeRegistry() resource.Registry { catalog.RegisterTypes(registry) auth.RegisterTypes(registry) tenancy.RegisterTypes(registry) - multicluster.RegisterTypes(registry) return registry } diff --git a/agent/grpc-external/services/resource/delete.go b/agent/grpc-external/services/resource/delete.go index cbe3583c1cc82..2f30e27f983fb 100644 --- a/agent/grpc-external/services/resource/delete.go +++ b/agent/grpc-external/services/resource/delete.go @@ -7,7 +7,6 @@ import ( "context" "errors" "fmt" - "strings" "time" "github.com/oklog/ulid/v2" @@ -28,7 +27,7 @@ import ( // - Errors with Aborted if the requested Version does not match the stored Version. // - Errors with PermissionDenied if ACL check fails func (s *Server) Delete(ctx context.Context, req *pbresource.DeleteRequest) (*pbresource.DeleteResponse, error) { - reg, err := s.ensureDeleteRequestValid(req) + reg, err := s.validateDeleteRequest(req) if err != nil { return nil, err } @@ -74,21 +73,6 @@ func (s *Server) Delete(ctx context.Context, req *pbresource.DeleteRequest) (*pb deleteId = existing.Id } - // Check finalizers for a deferred delete - if resource.HasFinalizers(existing) { - if resource.IsMarkedForDeletion(existing) { - // Delete previously requested and finalizers still present so nothing to do - return &pbresource.DeleteResponse{}, nil - } - - // Mark for deletion and let controllers that put finalizers in place do their - // thing. Note we're passing in a clone of the recently read resource since - // we've not crossed a network/serialization boundary since the read and we - // don't want to mutate the in-mem reference. - return s.markForDeletion(ctx, clone(existing)) - } - - // Continue with an immediate delete if err := s.maybeCreateTombstone(ctx, deleteId); err != nil { return nil, err } @@ -104,16 +88,6 @@ func (s *Server) Delete(ctx context.Context, req *pbresource.DeleteRequest) (*pb } } -func (s *Server) markForDeletion(ctx context.Context, res *pbresource.Resource) (*pbresource.DeleteResponse, error) { - // Write the deletion timestamp - res.Metadata[resource.DeletionTimestampKey] = time.Now().Format(time.RFC3339) - _, err := s.Write(ctx, &pbresource.WriteRequest{Resource: res}) - if err != nil { - return nil, err - } - return &pbresource.DeleteResponse{}, nil -} - // Create a tombstone to capture the intent to delete child resources. // Tombstones are created preemptively to prevent partial failures even though // we are currently unaware of the success/failure/no-op of DeleteCAS. In @@ -170,7 +144,7 @@ func (s *Server) maybeCreateTombstone(ctx context.Context, deleteId *pbresource. } } -func (s *Server) ensureDeleteRequestValid(req *pbresource.DeleteRequest) (*resource.Registration, error) { +func (s *Server) validateDeleteRequest(req *pbresource.DeleteRequest) (*resource.Registration, error) { if req.Id == nil { return nil, status.Errorf(codes.InvalidArgument, "id is required") } @@ -184,10 +158,6 @@ func (s *Server) ensureDeleteRequestValid(req *pbresource.DeleteRequest) (*resou return nil, err } - if err = checkV2Tenancy(s.UseV2Tenancy, req.Id.Type); err != nil { - return nil, err - } - // Check scope if reg.Scope == resource.ScopePartition && req.Id.Tenancy.Namespace != "" { return nil, status.Errorf( @@ -205,5 +175,5 @@ func (s *Server) ensureDeleteRequestValid(req *pbresource.DeleteRequest) (*resou // name by embedding the resources's Uid in the name. func tombstoneName(deleteId *pbresource.ID) string { // deleteId.Name is just included for easier identification - return fmt.Sprintf("tombstone-%v-%v", deleteId.Name, strings.ToLower(deleteId.Uid)) + return fmt.Sprintf("tombstone-%v-%v", deleteId.Name, deleteId.Uid) } diff --git a/agent/grpc-external/services/resource/delete_test.go b/agent/grpc-external/services/resource/delete_test.go index 4c13393138629..5f5d7d7e21920 100644 --- a/agent/grpc-external/services/resource/delete_test.go +++ b/agent/grpc-external/services/resource/delete_test.go @@ -5,7 +5,6 @@ package resource import ( "context" - "strings" "testing" "github.com/stretchr/testify/mock" @@ -17,106 +16,45 @@ import ( "github.com/hashicorp/consul/acl/resolver" "github.com/hashicorp/consul/internal/resource" "github.com/hashicorp/consul/internal/resource/demo" - rtest "github.com/hashicorp/consul/internal/resource/resourcetest" "github.com/hashicorp/consul/proto-public/pbresource" - pbdemo "github.com/hashicorp/consul/proto/private/pbdemo/v1" ) func TestDelete_InputValidation(t *testing.T) { server := testServer(t) client := testClient(t, server) - demo.RegisterTypes(server.Registry) - type testCase struct { - modFn func(artistId, recordLabelId *pbresource.ID) *pbresource.ID - errContains string - } + demo.RegisterTypes(server.Registry) - testCases := map[string]testCase{ - "no id": { - modFn: func(_, _ *pbresource.ID) *pbresource.ID { - return nil - }, - errContains: "id is required", - }, - "no type": { - modFn: func(artistId, _ *pbresource.ID) *pbresource.ID { - artistId.Type = nil - return artistId - }, - errContains: "id.type is required", - }, - "no name": { - modFn: func(artistId, _ *pbresource.ID) *pbresource.ID { - artistId.Name = "" - return artistId - }, - errContains: "id.name invalid", - }, - "mixed case name": { - modFn: func(artistId, _ *pbresource.ID) *pbresource.ID { - artistId.Name = "DepecheMode" - return artistId - }, - errContains: "id.name invalid", - }, - "name too long": { - modFn: func(artistId, _ *pbresource.ID) *pbresource.ID { - artistId.Name = strings.Repeat("n", resource.MaxNameLength+1) - return artistId - }, - errContains: "id.name invalid", - }, - "partition mixed case": { - modFn: func(artistId, _ *pbresource.ID) *pbresource.ID { - artistId.Tenancy.Partition = "Default" - return artistId - }, - errContains: "id.tenancy.partition invalid", + testCases := map[string]func(artistId, recordLabelId *pbresource.ID) *pbresource.ID{ + "no id": func(artistId, recordLabelId *pbresource.ID) *pbresource.ID { + return nil }, - "partition name too long": { - modFn: func(artistId, _ *pbresource.ID) *pbresource.ID { - artistId.Tenancy.Partition = strings.Repeat("p", resource.MaxNameLength+1) - return artistId - }, - errContains: "id.tenancy.partition invalid", - }, - "namespace mixed case": { - modFn: func(artistId, _ *pbresource.ID) *pbresource.ID { - artistId.Tenancy.Namespace = "Default" - return artistId - }, - errContains: "id.tenancy.namespace invalid", + "no type": func(artistId, _ *pbresource.ID) *pbresource.ID { + artistId.Type = nil + return artistId }, - "namespace name too long": { - modFn: func(artistId, _ *pbresource.ID) *pbresource.ID { - artistId.Tenancy.Namespace = strings.Repeat("n", resource.MaxNameLength+1) - return artistId - }, - errContains: "id.tenancy.namespace invalid", + "no name": func(artistId, _ *pbresource.ID) *pbresource.ID { + artistId.Name = "" + return artistId }, - "partition scoped resource with namespace": { - modFn: func(_, recordLabelId *pbresource.ID) *pbresource.ID { - recordLabelId.Tenancy.Namespace = "ishouldnothaveanamespace" - return recordLabelId - }, - errContains: "cannot have a namespace", + "partition scoped resource with namespace": func(_, recordLabelId *pbresource.ID) *pbresource.ID { + recordLabelId.Tenancy.Namespace = "ishouldnothaveanamespace" + return recordLabelId }, } - for desc, tc := range testCases { + for desc, modFn := range testCases { t.Run(desc, func(t *testing.T) { - recordLabel, err := demo.GenerateV1RecordLabel("looney-tunes") + recordLabel, err := demo.GenerateV1RecordLabel("LoonyTunes") require.NoError(t, err) artist, err := demo.GenerateV2Artist() require.NoError(t, err) - req := &pbresource.DeleteRequest{Id: tc.modFn(artist.Id, recordLabel.Id), Version: ""} + req := &pbresource.DeleteRequest{Id: modFn(artist.Id, recordLabel.Id), Version: ""} _, err = client.Delete(testContext(t), req) require.Error(t, err) require.Equal(t, codes.InvalidArgument.String(), status.Code(err).String()) - require.ErrorContains(t, err, tc.errContains) }) } } @@ -191,7 +129,7 @@ func TestDelete_Success(t *testing.T) { server, client, ctx := testDeps(t) demo.RegisterTypes(server.Registry) - recordLabel, err := demo.GenerateV1RecordLabel("looney-tunes") + recordLabel, err := demo.GenerateV1RecordLabel("LoonyTunes") require.NoError(t, err) writeRsp, err := client.Write(ctx, &pbresource.WriteRequest{Resource: recordLabel}) require.NoError(t, err) @@ -315,68 +253,6 @@ func TestDelete_VersionMismatch(t *testing.T) { require.ErrorContains(t, err, "CAS operation failed") } -func TestDelete_MarkedForDeletionWhenFinalizersPresent(t *testing.T) { - server, client, ctx := testDeps(t) - demo.RegisterTypes(server.Registry) - - // Create a resource with a finalizer - res := rtest.Resource(demo.TypeV1Artist, "manwithnoname"). - WithTenancy(resource.DefaultClusteredTenancy()). - WithData(t, &pbdemo.Artist{Name: "Man With No Name"}). - WithMeta(resource.FinalizerKey, "finalizer1"). - Write(t, client) - - // Delete it - _, err := client.Delete(ctx, &pbresource.DeleteRequest{Id: res.Id}) - require.NoError(t, err) - - // Verify resource has been marked for deletion - rsp, err := client.Read(ctx, &pbresource.ReadRequest{Id: res.Id}) - require.NoError(t, err) - require.True(t, resource.IsMarkedForDeletion(rsp.Resource)) - - // Delete again - should be no-op - _, err = client.Delete(ctx, &pbresource.DeleteRequest{Id: res.Id}) - require.NoError(t, err) - - // Verify no-op by checking version still the same - rsp2, err := client.Read(ctx, &pbresource.ReadRequest{Id: res.Id}) - require.NoError(t, err) - rtest.RequireVersionUnchanged(t, rsp2.Resource, rsp.Resource.Version) -} - -func TestDelete_ImmediatelyDeletedAfterFinalizersRemoved(t *testing.T) { - server, client, ctx := testDeps(t) - demo.RegisterTypes(server.Registry) - - // Create a resource with a finalizer - res := rtest.Resource(demo.TypeV1Artist, "manwithnoname"). - WithTenancy(resource.DefaultClusteredTenancy()). - WithData(t, &pbdemo.Artist{Name: "Man With No Name"}). - WithMeta(resource.FinalizerKey, "finalizer1"). - Write(t, client) - - // Delete should mark it for deletion - _, err := client.Delete(ctx, &pbresource.DeleteRequest{Id: res.Id}) - require.NoError(t, err) - - // Remove the finalizer - rsp, err := client.Read(ctx, &pbresource.ReadRequest{Id: res.Id}) - require.NoError(t, err) - resource.RemoveFinalizer(rsp.Resource, "finalizer1") - _, err = client.Write(ctx, &pbresource.WriteRequest{Resource: rsp.Resource}) - require.NoError(t, err) - - // Delete should be immediate - _, err = client.Delete(ctx, &pbresource.DeleteRequest{Id: rsp.Resource.Id}) - require.NoError(t, err) - - // Verify deleted - _, err = client.Read(ctx, &pbresource.ReadRequest{Id: rsp.Resource.Id}) - require.Error(t, err) - require.Equal(t, codes.NotFound.String(), status.Code(err).String()) -} - func testDeps(t *testing.T) (*Server, pbresource.ResourceServiceClient, context.Context) { server := testServer(t) client := testClient(t, server) diff --git a/agent/grpc-external/services/resource/list.go b/agent/grpc-external/services/resource/list.go index dc7f88a404c8e..c1ecb253448ce 100644 --- a/agent/grpc-external/services/resource/list.go +++ b/agent/grpc-external/services/resource/list.go @@ -16,7 +16,7 @@ import ( ) func (s *Server) List(ctx context.Context, req *pbresource.ListRequest) (*pbresource.ListResponse, error) { - reg, err := s.ensureListRequestValid(req) + reg, err := s.validateListRequest(req) if err != nil { return nil, err } @@ -81,7 +81,7 @@ func (s *Server) List(ctx context.Context, req *pbresource.ListRequest) (*pbreso return &pbresource.ListResponse{Resources: result}, nil } -func (s *Server) ensureListRequestValid(req *pbresource.ListRequest) (*resource.Registration, error) { +func (s *Server) validateListRequest(req *pbresource.ListRequest) (*resource.Registration, error) { var field string switch { case req.Type == nil: @@ -100,13 +100,8 @@ func (s *Server) ensureListRequestValid(req *pbresource.ListRequest) (*resource. return nil, err } - if err = checkV2Tenancy(s.UseV2Tenancy, req.Type); err != nil { - return nil, err - } - - if err := validateWildcardTenancy(req.Tenancy, req.NamePrefix); err != nil { - return nil, err - } + // Lowercase + resource.Normalize(req.Tenancy) // Error when partition scoped and namespace not empty. if reg.Scope == resource.ScopePartition && req.Tenancy.Namespace != "" { diff --git a/agent/grpc-external/services/resource/list_by_owner.go b/agent/grpc-external/services/resource/list_by_owner.go index e810ce31a4d0f..2310a5b50eda2 100644 --- a/agent/grpc-external/services/resource/list_by_owner.go +++ b/agent/grpc-external/services/resource/list_by_owner.go @@ -15,7 +15,7 @@ import ( ) func (s *Server) ListByOwner(ctx context.Context, req *pbresource.ListByOwnerRequest) (*pbresource.ListByOwnerResponse, error) { - reg, err := s.ensureListByOwnerRequestValid(req) + reg, err := s.validateListByOwnerRequest(req) if err != nil { return nil, err } @@ -42,8 +42,8 @@ func (s *Server) ListByOwner(ctx context.Context, req *pbresource.ListByOwnerReq return nil, status.Errorf(codes.Internal, "failed list acl: %v", err) } - // Check tenancy exists for the v2 resource. - if err = tenancyExists(reg, s.TenancyBridge, req.Owner.Tenancy, codes.InvalidArgument); err != nil { + // Check v1 tenancy exists for the v2 resource. + if err = v1TenancyExists(reg, s.TenancyBridge, req.Owner.Tenancy, codes.InvalidArgument); err != nil { return nil, err } @@ -87,7 +87,7 @@ func (s *Server) ListByOwner(ctx context.Context, req *pbresource.ListByOwnerReq return &pbresource.ListByOwnerResponse{Resources: result}, nil } -func (s *Server) ensureListByOwnerRequestValid(req *pbresource.ListByOwnerRequest) (*resource.Registration, error) { +func (s *Server) validateListByOwnerRequest(req *pbresource.ListByOwnerRequest) (*resource.Registration, error) { if req.Owner == nil { return nil, status.Errorf(codes.InvalidArgument, "owner is required") } @@ -105,9 +105,8 @@ func (s *Server) ensureListByOwnerRequestValid(req *pbresource.ListByOwnerReques return nil, err } - if err = checkV2Tenancy(s.UseV2Tenancy, req.Owner.Type); err != nil { - return nil, err - } + // Lowercase + resource.Normalize(req.Owner.Tenancy) // Error when partition scoped and namespace not empty. if reg.Scope == resource.ScopePartition && req.Owner.Tenancy.Namespace != "" { diff --git a/agent/grpc-external/services/resource/list_by_owner_test.go b/agent/grpc-external/services/resource/list_by_owner_test.go index 78024e68d0fb2..11c6027c0b642 100644 --- a/agent/grpc-external/services/resource/list_by_owner_test.go +++ b/agent/grpc-external/services/resource/list_by_owner_test.go @@ -6,7 +6,6 @@ package resource import ( "context" "fmt" - "strings" "testing" "github.com/hashicorp/consul/acl" @@ -14,7 +13,6 @@ import ( "github.com/hashicorp/consul/internal/resource/demo" "github.com/hashicorp/consul/proto-public/pbresource" "github.com/hashicorp/consul/proto/private/prototest" - "github.com/oklog/ulid/v2" "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" @@ -28,104 +26,41 @@ func TestListByOwner_InputValidation(t *testing.T) { client := testClient(t, server) demo.RegisterTypes(server.Registry) - type testCase struct { - modFn func(artistId, recordlabelId *pbresource.ID) *pbresource.ID - errContains string - } - testCases := map[string]testCase{ - "no owner": { - modFn: func(artistId, recordLabelId *pbresource.ID) *pbresource.ID { - return nil - }, - errContains: "owner is required", - }, - "no type": { - modFn: func(artistId, _ *pbresource.ID) *pbresource.ID { - artistId.Type = nil - return artistId - }, - errContains: "owner.type is required", - }, - "no name": { - modFn: func(artistId, _ *pbresource.ID) *pbresource.ID { - artistId.Name = "" - return artistId - }, - errContains: "owner.name invalid", - }, - "name mixed case": { - modFn: func(artistId, _ *pbresource.ID) *pbresource.ID { - artistId.Name = "U2" - return artistId - }, - errContains: "owner.name invalid", + testCases := map[string]func(artistId, recordlabelId *pbresource.ID) *pbresource.ID{ + "no owner": func(artistId, recordLabelId *pbresource.ID) *pbresource.ID { + return nil }, - "name too long": { - modFn: func(artistId, _ *pbresource.ID) *pbresource.ID { - artistId.Name = strings.Repeat("n", resource.MaxNameLength+1) - return artistId - }, - errContains: "owner.name invalid", + "no type": func(artistId, _ *pbresource.ID) *pbresource.ID { + artistId.Type = nil + return artistId }, - "partition mixed case": { - modFn: func(artistId, _ *pbresource.ID) *pbresource.ID { - artistId.Tenancy.Partition = "Default" - return artistId - }, - errContains: "owner.tenancy.partition invalid", + "no name": func(artistId, _ *pbresource.ID) *pbresource.ID { + artistId.Name = "" + return artistId }, - "partition too long": { - modFn: func(artistId, _ *pbresource.ID) *pbresource.ID { - artistId.Tenancy.Partition = strings.Repeat("p", resource.MaxNameLength+1) - return artistId - }, - errContains: "owner.tenancy.partition invalid", + "no uid": func(artistId, _ *pbresource.ID) *pbresource.ID { + artistId.Uid = "" + return artistId }, - "namespace mixed case": { - modFn: func(artistId, _ *pbresource.ID) *pbresource.ID { - artistId.Tenancy.Namespace = "Default" - return artistId - }, - errContains: "owner.tenancy.namespace invalid", - }, - "namespace too long": { - modFn: func(artistId, _ *pbresource.ID) *pbresource.ID { - artistId.Tenancy.Namespace = strings.Repeat("n", resource.MaxNameLength+1) - return artistId - }, - errContains: "owner.tenancy.namespace invalid", - }, - "no uid": { - modFn: func(artistId, _ *pbresource.ID) *pbresource.ID { - artistId.Uid = "" - return artistId - }, - errContains: "owner uid is required", - }, - "partition scope with non-empty namespace": { - modFn: func(_, recordLabelId *pbresource.ID) *pbresource.ID { - recordLabelId.Uid = ulid.Make().String() - recordLabelId.Tenancy.Namespace = "ishouldnothaveanamespace" - return recordLabelId - }, - errContains: "cannot have a namespace", + "partition scope with non-empty namespace": func(_, recordLabelId *pbresource.ID) *pbresource.ID { + recordLabelId.Tenancy.Namespace = "ishouldnothaveanamespace" + return recordLabelId }, } - for desc, tc := range testCases { + for desc, modFn := range testCases { t.Run(desc, func(t *testing.T) { artist, err := demo.GenerateV2Artist() require.NoError(t, err) - recordLabel, err := demo.GenerateV1RecordLabel("looney-tunes") + recordLabel, err := demo.GenerateV1RecordLabel("LoonyTunes") require.NoError(t, err) // Each test case picks which resource to use based on the resource type's scope. - req := &pbresource.ListByOwnerRequest{Owner: tc.modFn(artist.Id, recordLabel.Id)} + req := &pbresource.ListByOwnerRequest{Owner: modFn(artist.Id, recordLabel.Id)} _, err = client.ListByOwner(testContext(t), req) require.Error(t, err) require.Equal(t, codes.InvalidArgument.String(), status.Code(err).String()) - require.ErrorContains(t, err, tc.errContains) }) } } @@ -196,46 +131,33 @@ func TestListByOwner_Many(t *testing.T) { } func TestListByOwner_OwnerTenancyDoesNotExist(t *testing.T) { - type testCase struct { - modFn func(artistId, recordlabelId *pbresource.ID) *pbresource.ID - errContains string - } - tenancyCases := map[string]testCase{ - "partition not found when namespace scoped": { - modFn: func(artistId, _ *pbresource.ID) *pbresource.ID { - id := clone(artistId) - id.Uid = "doesnotmatter" - id.Tenancy.Partition = "boguspartition" - return id - }, - errContains: "partition not found", + tenancyCases := map[string]func(artistId, recordlabelId *pbresource.ID) *pbresource.ID{ + "partition not found when namespace scoped": func(artistId, _ *pbresource.ID) *pbresource.ID { + id := clone(artistId) + id.Uid = "doesnotmatter" + id.Tenancy.Partition = "boguspartition" + return id }, - "namespace not found when namespace scoped": { - modFn: func(artistId, _ *pbresource.ID) *pbresource.ID { - id := clone(artistId) - id.Uid = "doesnotmatter" - id.Tenancy.Namespace = "bogusnamespace" - return id - }, - errContains: "namespace not found", + "namespace not found when namespace scoped": func(artistId, _ *pbresource.ID) *pbresource.ID { + id := clone(artistId) + id.Uid = "doesnotmatter" + id.Tenancy.Namespace = "bogusnamespace" + return id }, - "partition not found when partition scoped": { - modFn: func(_, recordLabelId *pbresource.ID) *pbresource.ID { - id := clone(recordLabelId) - id.Uid = "doesnotmatter" - id.Tenancy.Partition = "boguspartition" - return id - }, - errContains: "partition not found", + "partition not found when partition scoped": func(_, recordLabelId *pbresource.ID) *pbresource.ID { + id := clone(recordLabelId) + id.Uid = "doesnotmatter" + id.Tenancy.Partition = "boguspartition" + return id }, } - for desc, tc := range tenancyCases { + for desc, modFn := range tenancyCases { t.Run(desc, func(t *testing.T) { server := testServer(t) demo.RegisterTypes(server.Registry) client := testClient(t, server) - recordLabel, err := demo.GenerateV1RecordLabel("looney-tunes") + recordLabel, err := demo.GenerateV1RecordLabel("LoonyTunes") require.NoError(t, err) recordLabel, err = server.Backend.WriteCAS(testContext(t), recordLabel) require.NoError(t, err) @@ -245,11 +167,11 @@ func TestListByOwner_OwnerTenancyDoesNotExist(t *testing.T) { artist, err = server.Backend.WriteCAS(testContext(t), artist) require.NoError(t, err) - // Verify non-existant tenancy units in owner err with invalid arg. - _, err = client.ListByOwner(testContext(t), &pbresource.ListByOwnerRequest{Owner: tc.modFn(artist.Id, recordLabel.Id)}) + // Verify non-existant tenancy units in owner err with not found. + _, err = client.ListByOwner(testContext(t), &pbresource.ListByOwnerRequest{Owner: modFn(artist.Id, recordLabel.Id)}) require.Error(t, err) require.Equal(t, codes.InvalidArgument.String(), status.Code(err).String()) - require.ErrorContains(t, err, tc.errContains) + require.Contains(t, err.Error(), "resource not found") }) } } @@ -262,7 +184,7 @@ func TestListByOwner_Tenancy_Defaults_And_Normalization(t *testing.T) { client := testClient(t, server) // Create partition scoped recordLabel. - recordLabel, err := demo.GenerateV1RecordLabel("looney-tunes") + recordLabel, err := demo.GenerateV1RecordLabel("LoonyTunes") require.NoError(t, err) rsp1, err := client.Write(testContext(t), &pbresource.WriteRequest{Resource: recordLabel}) require.NoError(t, err) diff --git a/agent/grpc-external/services/resource/list_test.go b/agent/grpc-external/services/resource/list_test.go index 5af6747f84444..64026b7d34e59 100644 --- a/agent/grpc-external/services/resource/list_test.go +++ b/agent/grpc-external/services/resource/list_test.go @@ -6,8 +6,6 @@ package resource import ( "context" "fmt" - "strconv" - "strings" "testing" "github.com/hashicorp/consul/acl" @@ -28,66 +26,28 @@ import ( func TestList_InputValidation(t *testing.T) { server := testServer(t) client := testClient(t, server) - demo.RegisterTypes(server.Registry) - type testCase struct { - modReqFn func(req *pbresource.ListRequest) - errContains string - } + demo.RegisterTypes(server.Registry) - testCases := map[string]testCase{ - "no type": { - modReqFn: func(req *pbresource.ListRequest) { req.Type = nil }, - errContains: "type is required", - }, - "no tenancy": { - modReqFn: func(req *pbresource.ListRequest) { req.Tenancy = nil }, - errContains: "tenancy is required", - }, - "partition mixed case": { - modReqFn: func(req *pbresource.ListRequest) { req.Tenancy.Partition = "Default" }, - errContains: "tenancy.partition invalid", - }, - "partition too long": { - modReqFn: func(req *pbresource.ListRequest) { - req.Tenancy.Partition = strings.Repeat("p", resource.MaxNameLength+1) - }, - errContains: "tenancy.partition invalid", - }, - "namespace mixed case": { - modReqFn: func(req *pbresource.ListRequest) { req.Tenancy.Namespace = "Default" }, - errContains: "tenancy.namespace invalid", - }, - "namespace too long": { - modReqFn: func(req *pbresource.ListRequest) { - req.Tenancy.Namespace = strings.Repeat("n", resource.MaxNameLength+1) - }, - errContains: "tenancy.namespace invalid", - }, - "name_prefix mixed case": { - modReqFn: func(req *pbresource.ListRequest) { req.NamePrefix = "Violator" }, - errContains: "name_prefix invalid", - }, - "partitioned resource provides non-empty namespace": { - modReqFn: func(req *pbresource.ListRequest) { - req.Type = demo.TypeV1RecordLabel - req.Tenancy.Namespace = "bad" - }, - errContains: "cannot have a namespace", + testCases := map[string]func(*pbresource.ListRequest){ + "no type": func(req *pbresource.ListRequest) { req.Type = nil }, + "no tenancy": func(req *pbresource.ListRequest) { req.Tenancy = nil }, + "partitioned resource provides non-empty namespace": func(req *pbresource.ListRequest) { + req.Type = demo.TypeV1RecordLabel + req.Tenancy.Namespace = "bad" }, } - for desc, tc := range testCases { + for desc, modFn := range testCases { t.Run(desc, func(t *testing.T) { req := &pbresource.ListRequest{ Type: demo.TypeV2Album, Tenancy: resource.DefaultNamespacedTenancy(), } - tc.modReqFn(req) + modFn(req) _, err := client.List(testContext(t), req) require.Error(t, err) require.Equal(t, codes.InvalidArgument.String(), status.Code(err).String()) - require.ErrorContains(t, err, tc.errContains) }) } } @@ -156,46 +116,6 @@ func TestList_Many(t *testing.T) { } } -func TestList_NamePrefix(t *testing.T) { - for desc, tc := range listTestCases() { - t.Run(desc, func(t *testing.T) { - server := testServer(t) - demo.RegisterTypes(server.Registry) - client := testClient(t, server) - - expectedResources := []*pbresource.Resource{} - - namePrefixIndex := 0 - // create a name prefix that is always present - namePrefix := fmt.Sprintf("%s-", strconv.Itoa(namePrefixIndex)) - for i := 0; i < 10; i++ { - artist, err := demo.GenerateV2Artist() - require.NoError(t, err) - - // Prevent test flakes if the generated names collide. - artist.Id.Name = fmt.Sprintf("%d-%s", i, artist.Id.Name) - - rsp, err := client.Write(tc.ctx, &pbresource.WriteRequest{Resource: artist}) - require.NoError(t, err) - - // only matching name prefix are expected - if i == namePrefixIndex { - expectedResources = append(expectedResources, rsp.Resource) - } - } - - rsp, err := client.List(tc.ctx, &pbresource.ListRequest{ - Type: demo.TypeV2Artist, - Tenancy: resource.DefaultNamespacedTenancy(), - NamePrefix: namePrefix, - }) - - require.NoError(t, err) - prototest.AssertElementsMatch(t, expectedResources, rsp.Resources) - }) - } -} - func TestList_Tenancy_Defaults_And_Normalization(t *testing.T) { // Test units of tenancy get defaulted correctly when empty. ctx := context.Background() @@ -206,7 +126,7 @@ func TestList_Tenancy_Defaults_And_Normalization(t *testing.T) { client := testClient(t, server) // Write partition scoped record label - recordLabel, err := demo.GenerateV1RecordLabel("looney-tunes") + recordLabel, err := demo.GenerateV1RecordLabel("LooneyTunes") require.NoError(t, err) recordLabelRsp, err := client.Write(ctx, &pbresource.WriteRequest{Resource: recordLabel}) require.NoError(t, err) @@ -230,6 +150,7 @@ func TestList_Tenancy_Defaults_And_Normalization(t *testing.T) { prototest.AssertDeepEqual(t, artistRsp.Resource, listRsp.Resources[0]) } }) + } } diff --git a/agent/grpc-external/services/resource/read.go b/agent/grpc-external/services/resource/read.go index 9fe59024ce8e6..b6cec37254566 100644 --- a/agent/grpc-external/services/resource/read.go +++ b/agent/grpc-external/services/resource/read.go @@ -18,7 +18,7 @@ import ( func (s *Server) Read(ctx context.Context, req *pbresource.ReadRequest) (*pbresource.ReadResponse, error) { // Light first pass validation based on what user passed in and not much more. - reg, err := s.ensureReadRequestValid(req) + reg, err := s.validateReadRequest(req) if err != nil { return nil, err } @@ -59,8 +59,8 @@ func (s *Server) Read(ctx context.Context, req *pbresource.ReadRequest) (*pbreso return nil, status.Errorf(codes.Internal, "failed read acl: %v", err) } - // Check tenancy exists for the V2 resource. - if err = tenancyExists(reg, s.TenancyBridge, req.Id.Tenancy, codes.NotFound); err != nil { + // Check V1 tenancy exists for the V2 resource. + if err = v1TenancyExists(reg, s.TenancyBridge, req.Id.Tenancy, codes.NotFound); err != nil { return nil, err } @@ -87,7 +87,7 @@ func (s *Server) Read(ctx context.Context, req *pbresource.ReadRequest) (*pbreso return &pbresource.ReadResponse{Resource: resource}, nil } -func (s *Server) ensureReadRequestValid(req *pbresource.ReadRequest) (*resource.Registration, error) { +func (s *Server) validateReadRequest(req *pbresource.ReadRequest) (*resource.Registration, error) { if req.Id == nil { return nil, status.Errorf(codes.InvalidArgument, "id is required") } @@ -102,14 +102,32 @@ func (s *Server) ensureReadRequestValid(req *pbresource.ReadRequest) (*resource. return nil, err } - if err = checkV2Tenancy(s.UseV2Tenancy, req.Id.Type); err != nil { - return nil, err - } - // Check scope - if err = validateScopedTenancy(reg.Scope, req.Id.Type, req.Id.Tenancy); err != nil { - return nil, err + if reg.Scope == resource.ScopePartition && req.Id.Tenancy.Namespace != "" { + return nil, status.Errorf( + codes.InvalidArgument, + "partition scoped resource %s cannot have a namespace. got: %s", + resource.ToGVK(req.Id.Type), + req.Id.Tenancy.Namespace, + ) + } + if reg.Scope == resource.ScopeCluster { + if req.Id.Tenancy.Partition != "" { + return nil, status.Errorf( + codes.InvalidArgument, + "cluster scoped resource %s cannot have a partition: %s", + resource.ToGVK(req.Id.Type), + req.Id.Tenancy.Partition, + ) + } + if req.Id.Tenancy.Namespace != "" { + return nil, status.Errorf( + codes.InvalidArgument, + "cluster scoped resource %s cannot have a namespace: %s", + resource.ToGVK(req.Id.Type), + req.Id.Tenancy.Namespace, + ) + } } - return reg, nil } diff --git a/agent/grpc-external/services/resource/read_test.go b/agent/grpc-external/services/resource/read_test.go index 2afdfeab0e1ea..2601689bc6c4b 100644 --- a/agent/grpc-external/services/resource/read_test.go +++ b/agent/grpc-external/services/resource/read_test.go @@ -6,7 +6,6 @@ package resource import ( "context" "fmt" - "strings" "sync" "testing" @@ -35,114 +34,46 @@ func TestRead_InputValidation(t *testing.T) { tenancy.RegisterTypes(server.Registry) demo.RegisterTypes(server.Registry) - type testCase struct { - modFn func(artistId, recordlabelId, executiveId *pbresource.ID) *pbresource.ID - errContains string - } - - testCases := map[string]testCase{ - "no id": { - modFn: func(_, _, _ *pbresource.ID) *pbresource.ID { - return nil - }, - errContains: "id is required", - }, - "no type": { - modFn: func(artistId, _, _ *pbresource.ID) *pbresource.ID { - artistId.Type = nil - return artistId - }, - errContains: "id.type is required", - }, - "no name": { - modFn: func(artistId, _, _ *pbresource.ID) *pbresource.ID { - artistId.Name = "" - return artistId - }, - errContains: "id.name invalid", - }, - "name is mixed case": { - modFn: func(artistId, _, _ *pbresource.ID) *pbresource.ID { - artistId.Name = "MixedCaseNotAllowed" - return artistId - }, - errContains: "id.name invalid", + testCases := map[string]func(artistId, recordlabelId, executiveId *pbresource.ID) *pbresource.ID{ + "no id": func(_, _, _ *pbresource.ID) *pbresource.ID { return nil }, + "no type": func(artistId, _, _ *pbresource.ID) *pbresource.ID { + artistId.Type = nil + return artistId }, - "name too long": { - modFn: func(artistId, _, _ *pbresource.ID) *pbresource.ID { - artistId.Name = strings.Repeat("a", resource.MaxNameLength+1) - return artistId - }, - errContains: "id.name invalid", + "no name": func(artistId, _, _ *pbresource.ID) *pbresource.ID { + artistId.Name = "" + return artistId }, - "partition is mixed case": { - modFn: func(artistId, _, _ *pbresource.ID) *pbresource.ID { - artistId.Tenancy.Partition = "Default" - return artistId - }, - errContains: "id.tenancy.partition invalid", + "partition scope with non-empty namespace": func(_, recordLabelId, _ *pbresource.ID) *pbresource.ID { + recordLabelId.Tenancy.Namespace = "ishouldnothaveanamespace" + return recordLabelId }, - "partition too long": { - modFn: func(artistId, _, _ *pbresource.ID) *pbresource.ID { - artistId.Tenancy.Partition = strings.Repeat("p", resource.MaxNameLength+1) - return artistId - }, - errContains: "id.tenancy.partition invalid", + "cluster scope with non-empty partition": func(_, _, executiveId *pbresource.ID) *pbresource.ID { + executiveId.Tenancy = &pbresource.Tenancy{Partition: resource.DefaultPartitionName} + return executiveId }, - "namespace is mixed case": { - modFn: func(artistId, _, _ *pbresource.ID) *pbresource.ID { - artistId.Tenancy.Namespace = "Default" - return artistId - }, - errContains: "id.tenancy.namespace invalid", - }, - "namespace too long": { - modFn: func(artistId, _, _ *pbresource.ID) *pbresource.ID { - artistId.Tenancy.Namespace = strings.Repeat("n", resource.MaxNameLength+1) - return artistId - }, - errContains: "id.tenancy.namespace invalid", - }, - "partition scope with non-empty namespace": { - modFn: func(_, recordLabelId, _ *pbresource.ID) *pbresource.ID { - recordLabelId.Tenancy.Namespace = "ishouldnothaveanamespace" - return recordLabelId - }, - errContains: "cannot have a namespace", - }, - "cluster scope with non-empty partition": { - modFn: func(_, _, executiveId *pbresource.ID) *pbresource.ID { - executiveId.Tenancy = &pbresource.Tenancy{Partition: resource.DefaultPartitionName} - return executiveId - }, - errContains: "cannot have a partition", - }, - "cluster scope with non-empty namespace": { - modFn: func(_, _, executiveId *pbresource.ID) *pbresource.ID { - executiveId.Tenancy = &pbresource.Tenancy{Namespace: resource.DefaultNamespaceName} - return executiveId - }, - errContains: "cannot have a namespace", + "cluster scope with non-empty namespace": func(_, _, executiveId *pbresource.ID) *pbresource.ID { + executiveId.Tenancy = &pbresource.Tenancy{Namespace: resource.DefaultNamespaceName} + return executiveId }, } - for desc, tc := range testCases { + for desc, modFn := range testCases { t.Run(desc, func(t *testing.T) { artist, err := demo.GenerateV2Artist() require.NoError(t, err) - recordLabel, err := demo.GenerateV1RecordLabel("looney-tunes") + recordLabel, err := demo.GenerateV1RecordLabel("LoonyTunes") require.NoError(t, err) - executive, err := demo.GenerateV1Executive("music-man", "CEO") + executive, err := demo.GenerateV1Executive("MusicMan", "CEO") require.NoError(t, err) // Each test case picks which resource to use based on the resource type's scope. - req := &pbresource.ReadRequest{Id: tc.modFn(artist.Id, recordLabel.Id, executive.Id)} + req := &pbresource.ReadRequest{Id: modFn(artist.Id, recordLabel.Id, executive.Id)} _, err = client.Read(testContext(t), req) require.Error(t, err) require.Equal(t, codes.InvalidArgument.String(), status.Code(err).String()) - require.ErrorContains(t, err, tc.errContains) }) } } @@ -163,50 +94,34 @@ func TestRead_TypeNotFound(t *testing.T) { func TestRead_ResourceNotFound(t *testing.T) { for desc, tc := range readTestCases() { t.Run(desc, func(t *testing.T) { - type tenancyCase struct { - modFn func(artistId, recordlabelId *pbresource.ID) *pbresource.ID - errContains string - } - tenancyCases := map[string]tenancyCase{ - "resource not found by name": { - modFn: func(artistId, _ *pbresource.ID) *pbresource.ID { - artistId.Name = "bogusname" - return artistId - }, - errContains: "resource not found", + tenancyCases := map[string]func(artistId, recordlabelId *pbresource.ID) *pbresource.ID{ + "resource not found by name": func(artistId, _ *pbresource.ID) *pbresource.ID { + artistId.Name = "bogusname" + return artistId }, - "partition not found when namespace scoped": { - modFn: func(artistId, _ *pbresource.ID) *pbresource.ID { - id := clone(artistId) - id.Tenancy.Partition = "boguspartition" - return id - }, - errContains: "partition not found", + "partition not found when namespace scoped": func(artistId, _ *pbresource.ID) *pbresource.ID { + id := clone(artistId) + id.Tenancy.Partition = "boguspartition" + return id }, - "namespace not found when namespace scoped": { - modFn: func(artistId, _ *pbresource.ID) *pbresource.ID { - id := clone(artistId) - id.Tenancy.Namespace = "bogusnamespace" - return id - }, - errContains: "namespace not found", + "namespace not found when namespace scoped": func(artistId, _ *pbresource.ID) *pbresource.ID { + id := clone(artistId) + id.Tenancy.Namespace = "bogusnamespace" + return id }, - "partition not found when partition scoped": { - modFn: func(_, recordLabelId *pbresource.ID) *pbresource.ID { - id := clone(recordLabelId) - id.Tenancy.Partition = "boguspartition" - return id - }, - errContains: "partition not found", + "partition not found when partition scoped": func(_, recordLabelId *pbresource.ID) *pbresource.ID { + id := clone(recordLabelId) + id.Tenancy.Partition = "boguspartition" + return id }, } - for tenancyDesc, tenancyCase := range tenancyCases { + for tenancyDesc, modFn := range tenancyCases { t.Run(tenancyDesc, func(t *testing.T) { server := testServer(t) demo.RegisterTypes(server.Registry) client := testClient(t, server) - recordLabel, err := demo.GenerateV1RecordLabel("looney-tunes") + recordLabel, err := demo.GenerateV1RecordLabel("LoonyTunes") require.NoError(t, err) recordLabel, err = server.Backend.WriteCAS(tc.ctx, recordLabel) require.NoError(t, err) @@ -217,10 +132,10 @@ func TestRead_ResourceNotFound(t *testing.T) { require.NoError(t, err) // Each tenancy test case picks which resource to use based on the resource type's scope. - _, err = client.Read(tc.ctx, &pbresource.ReadRequest{Id: tenancyCase.modFn(artist.Id, recordLabel.Id)}) + _, err = client.Read(tc.ctx, &pbresource.ReadRequest{Id: modFn(artist.Id, recordLabel.Id)}) require.Error(t, err) require.Equal(t, codes.NotFound.String(), status.Code(err).String()) - require.ErrorContains(t, err, tenancyCase.errContains) + require.Contains(t, err.Error(), "resource not found") }) } }) @@ -261,7 +176,7 @@ func TestRead_Success(t *testing.T) { demo.RegisterTypes(server.Registry) client := testClient(t, server) - recordLabel, err := demo.GenerateV1RecordLabel("looney-tunes") + recordLabel, err := demo.GenerateV1RecordLabel("LoonyTunes") require.NoError(t, err) recordLabel, err = server.Backend.WriteCAS(tc.ctx, recordLabel) require.NoError(t, err) diff --git a/agent/grpc-external/services/resource/server.go b/agent/grpc-external/services/resource/server.go index b07ebaff38b98..5fc5a01fafd77 100644 --- a/agent/grpc-external/services/resource/server.go +++ b/agent/grpc-external/services/resource/server.go @@ -5,16 +5,14 @@ package resource import ( "context" - "strings" + "github.com/hashicorp/go-hclog" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/metadata" "google.golang.org/grpc/status" "google.golang.org/protobuf/proto" - "github.com/hashicorp/go-hclog" - "github.com/hashicorp/consul/acl" "github.com/hashicorp/consul/acl/resolver" "github.com/hashicorp/consul/internal/resource" @@ -36,11 +34,6 @@ type Config struct { // TenancyBridge temporarily allows us to use V1 implementations of // partitions and namespaces until V2 implementations are available. TenancyBridge TenancyBridge - - // UseV2Tenancy is true if the "v2tenancy" experiement is active, false otherwise. - // Attempts to create v2 tenancy resources (partition or namespace) will fail when the - // flag is false. - UseV2Tenancy bool } //go:generate mockery --name Registry --inpackage @@ -136,12 +129,16 @@ func isGRPCStatusError(err error) bool { } func validateId(id *pbresource.ID, errorPrefix string) error { - if id.Type == nil { - return status.Errorf(codes.InvalidArgument, "%s.type is required", errorPrefix) + var field string + switch { + case id.Type == nil: + field = "type" + case id.Name == "": + field = "name" } - if err := resource.ValidateName(id.Name); err != nil { - return status.Errorf(codes.InvalidArgument, "%s.name invalid: %v", errorPrefix, err) + if field != "" { + return status.Errorf(codes.InvalidArgument, "%s.%s is required", errorPrefix, field) } // Better UX: Allow callers to pass in nil tenancy. Defaulting and inheritance of tenancy @@ -155,145 +152,57 @@ func validateId(id *pbresource.ID, errorPrefix string) error { } } - if id.Tenancy.Partition != "" { - if err := resource.ValidateName(id.Tenancy.Partition); err != nil { - return status.Errorf(codes.InvalidArgument, "%s.tenancy.partition invalid: %v", errorPrefix, err) - } - } - if id.Tenancy.Namespace != "" { - if err := resource.ValidateName(id.Tenancy.Namespace); err != nil { - return status.Errorf(codes.InvalidArgument, "%s.tenancy.namespace invalid: %v", errorPrefix, err) - } - } - // TODO(spatel): NET-5475 - Remove as part of peer_name moving to PeerTenancy - if id.Tenancy.PeerName == "" { - id.Tenancy.PeerName = resource.DefaultPeerName - } + resource.Normalize(id.Tenancy) return nil } -func validateRef(ref *pbresource.Reference, errorPrefix string) error { - if ref.Type == nil { - return status.Errorf(codes.InvalidArgument, "%s.type is required", errorPrefix) - } - if err := resource.ValidateName(ref.Name); err != nil { - return status.Errorf(codes.InvalidArgument, "%s.name invalid: %v", errorPrefix, err) - } - if err := resource.ValidateName(ref.Tenancy.Partition); err != nil { - return status.Errorf(codes.InvalidArgument, "%s.tenancy.partition invalid: %v", errorPrefix, err) - } - if err := resource.ValidateName(ref.Tenancy.Namespace); err != nil { - return status.Errorf(codes.InvalidArgument, "%s.tenancy.namespace invalid: %v", errorPrefix, err) - } - return nil -} - -func validateWildcardTenancy(tenancy *pbresource.Tenancy, namePrefix string) error { - // Partition has to be a valid name if not wildcard or empty - if tenancy.Partition != "" && tenancy.Partition != "*" { - if err := resource.ValidateName(tenancy.Partition); err != nil { - return status.Errorf(codes.InvalidArgument, "tenancy.partition invalid: %v", err) - } - } - - // Namespace has to be a valid name if not wildcard or empty - if tenancy.Namespace != "" && tenancy.Namespace != "*" { - if err := resource.ValidateName(tenancy.Namespace); err != nil { - return status.Errorf(codes.InvalidArgument, "tenancy.namespace invalid: %v", err) - } - } - - // Not doing a strict resource name validation here because the prefix can be - // something like "foo-" which is a valid prefix but not valid resource name. - // relax validation to just check for lowercasing - if namePrefix != strings.ToLower(namePrefix) { - return status.Errorf(codes.InvalidArgument, "name_prefix invalid: must be lowercase alphanumeric, got: %v", namePrefix) - } - - // TODO(spatel): NET-5475 - Remove as part of peer_name moving to PeerTenancy - if tenancy.PeerName == "" { - tenancy.PeerName = resource.DefaultPeerName - } - - return nil -} - -// tenancyExists return an error with the passed in gRPC status code when tenancy partition or namespace do not exist. -func tenancyExists(reg *resource.Registration, tenancyBridge TenancyBridge, tenancy *pbresource.Tenancy, errCode codes.Code) error { +// v1TenancyExists return an error with the passed in gRPC status code when tenancy partition or namespace do not exist. +func v1TenancyExists(reg *resource.Registration, v1Bridge TenancyBridge, tenancy *pbresource.Tenancy, errCode codes.Code) error { if reg.Scope == resource.ScopePartition || reg.Scope == resource.ScopeNamespace { - exists, err := tenancyBridge.PartitionExists(tenancy.Partition) + exists, err := v1Bridge.PartitionExists(tenancy.Partition) switch { case err != nil: return err case !exists: - return status.Errorf(errCode, "partition not found: %v", tenancy.Partition) + return status.Errorf(errCode, "partition resource not found: %v", tenancy.Partition) } } if reg.Scope == resource.ScopeNamespace { - exists, err := tenancyBridge.NamespaceExists(tenancy.Partition, tenancy.Namespace) + exists, err := v1Bridge.NamespaceExists(tenancy.Partition, tenancy.Namespace) switch { case err != nil: return err case !exists: - return status.Errorf(errCode, "namespace not found: %v", tenancy.Namespace) - } - } - return nil -} - -func validateScopedTenancy(scope resource.Scope, resourceType *pbresource.Type, tenancy *pbresource.Tenancy) error { - if scope == resource.ScopePartition && tenancy.Namespace != "" { - return status.Errorf( - codes.InvalidArgument, - "partition scoped resource %s cannot have a namespace. got: %s", - resource.ToGVK(resourceType), - tenancy.Namespace, - ) - } - if scope == resource.ScopeCluster { - if tenancy.Partition != "" { - return status.Errorf( - codes.InvalidArgument, - "cluster scoped resource %s cannot have a partition: %s", - resource.ToGVK(resourceType), - tenancy.Partition, - ) - } - if tenancy.Namespace != "" { - return status.Errorf( - codes.InvalidArgument, - "cluster scoped resource %s cannot have a namespace: %s", - resource.ToGVK(resourceType), - tenancy.Namespace, - ) + return status.Errorf(errCode, "namespace resource not found: %v", tenancy.Namespace) } } return nil } -func isTenancyMarkedForDeletion(reg *resource.Registration, tenancyBridge TenancyBridge, tenancy *pbresource.Tenancy) (bool, error) { +// v1TenancyMarkedForDeletion returns a gRPC InvalidArgument when either partition or namespace is marked for deletion. +func v1TenancyMarkedForDeletion(reg *resource.Registration, v1Bridge TenancyBridge, tenancy *pbresource.Tenancy) error { if reg.Scope == resource.ScopePartition || reg.Scope == resource.ScopeNamespace { - marked, err := tenancyBridge.IsPartitionMarkedForDeletion(tenancy.Partition) - if err != nil { - return false, err - } - if marked { - return marked, nil + marked, err := v1Bridge.IsPartitionMarkedForDeletion(tenancy.Partition) + switch { + case err != nil: + return err + case marked: + return status.Errorf(codes.InvalidArgument, "partition marked for deletion: %v", tenancy.Partition) } } if reg.Scope == resource.ScopeNamespace { - marked, err := tenancyBridge.IsNamespaceMarkedForDeletion(tenancy.Partition, tenancy.Namespace) - if err != nil { - return false, err + marked, err := v1Bridge.IsNamespaceMarkedForDeletion(tenancy.Partition, tenancy.Namespace) + switch { + case err != nil: + return err + case marked: + return status.Errorf(codes.InvalidArgument, "namespace marked for deletion: %v", tenancy.Namespace) } - return marked, nil } - - // Cluster scope has no tenancy so always return false - return false, nil + return nil } func clone[T proto.Message](v T) T { return proto.Clone(v).(T) } diff --git a/agent/grpc-external/services/resource/server_ce.go b/agent/grpc-external/services/resource/server_ce.go index 2e3f792fe1d10..bc48194574131 100644 --- a/agent/grpc-external/services/resource/server_ce.go +++ b/agent/grpc-external/services/resource/server_ce.go @@ -6,13 +6,9 @@ package resource import ( - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - "github.com/hashicorp/consul/acl" "github.com/hashicorp/consul/internal/resource" "github.com/hashicorp/consul/proto-public/pbresource" - pbtenancy "github.com/hashicorp/consul/proto-public/pbtenancy/v2beta1" ) func v2TenancyToV1EntMeta(tenancy *pbresource.Tenancy) *acl.EnterpriseMeta { @@ -28,12 +24,3 @@ func v1EntMetaToV2Tenancy(reg *resource.Registration, entMeta *acl.EnterpriseMet tenancy.Namespace = entMeta.NamespaceOrDefault() } } - -// checkV2Tenancy returns FailedPrecondition error for namespace resource type -// when the "v2tenancy" feature flag is not enabled. -func checkV2Tenancy(useV2Tenancy bool, rtype *pbresource.Type) error { - if resource.EqualType(rtype, pbtenancy.NamespaceType) && !useV2Tenancy { - return status.Errorf(codes.FailedPrecondition, "use of the v2 namespace resource requires the \"v2tenancy\" feature flag") - } - return nil -} diff --git a/agent/grpc-external/services/resource/server_test.go b/agent/grpc-external/services/resource/server_test.go index e0b52263901fe..99add64971218 100644 --- a/agent/grpc-external/services/resource/server_test.go +++ b/agent/grpc-external/services/resource/server_test.go @@ -6,6 +6,7 @@ package resource import ( "context" "fmt" + "strings" "testing" "github.com/stretchr/testify/mock" @@ -75,7 +76,7 @@ func testServer(t *testing.T) *Server { } }) - // Mock the tenancy bridge since we can't use the real thing. + // Mock the V1 tenancy bridge since we can't use the real thing. mockTenancyBridge := &MockTenancyBridge{} mockTenancyBridge.On("PartitionExists", resource.DefaultPartitionName).Return(true, nil) mockTenancyBridge.On("NamespaceExists", resource.DefaultPartitionName, resource.DefaultNamespaceName).Return(true, nil) @@ -157,20 +158,19 @@ func wildcardTenancyCases() map[string]struct { PeerName: "local", }, }, - // TODO(spatel): NET-5475 - Remove as part of peer_name moving to PeerTenancy - "namespaced type with empty peername": { + "namespaced type with empty partition and namespace": { typ: demo.TypeV2Artist, tenancy: &pbresource.Tenancy{ - Partition: resource.DefaultPartitionName, - Namespace: resource.DefaultNamespaceName, - PeerName: "", + Partition: "", + Namespace: "", + PeerName: "local", }, }, - "namespaced type with empty partition and namespace": { + "namespaced type with uppercase partition and namespace": { typ: demo.TypeV2Artist, tenancy: &pbresource.Tenancy{ - Partition: "", - Namespace: "", + Partition: "DEFAULT", + Namespace: "DEFAULT", PeerName: "local", }, }, @@ -198,6 +198,14 @@ func wildcardTenancyCases() map[string]struct { PeerName: "local", }, }, + "partitioned type with uppercase partition": { + typ: demo.TypeV1RecordLabel, + tenancy: &pbresource.Tenancy{ + Partition: "DEFAULT", + Namespace: "", + PeerName: "local", + }, + }, "partitioned type with wildcard partition": { typ: demo.TypeV1RecordLabel, tenancy: &pbresource.Tenancy{ @@ -216,6 +224,12 @@ func tenancyCases() map[string]func(artistId, recordlabelId *pbresource.ID) *pbr "namespaced resource provides nonempty partition and namespace": func(artistId, recordLabelId *pbresource.ID) *pbresource.ID { return artistId }, + "namespaced resource provides uppercase partition and namespace": func(artistId, _ *pbresource.ID) *pbresource.ID { + id := clone(artistId) + id.Tenancy.Partition = strings.ToUpper(artistId.Tenancy.Partition) + id.Tenancy.Namespace = strings.ToUpper(artistId.Tenancy.Namespace) + return id + }, "namespaced resource inherits tokens partition when empty": func(artistId, _ *pbresource.ID) *pbresource.ID { id := clone(artistId) id.Tenancy.Partition = "" @@ -240,6 +254,11 @@ func tenancyCases() map[string]func(artistId, recordlabelId *pbresource.ID) *pbr "partitioned resource provides nonempty partition": func(_, recordLabelId *pbresource.ID) *pbresource.ID { return recordLabelId }, + "partitioned resource provides uppercase partition": func(_, recordLabelId *pbresource.ID) *pbresource.ID { + id := clone(recordLabelId) + id.Tenancy.Partition = strings.ToUpper(recordLabelId.Tenancy.Partition) + return id + }, "partitioned resource inherits tokens partition when empty": func(_, recordLabelId *pbresource.ID) *pbresource.ID { id := clone(recordLabelId) id.Tenancy.Partition = "" diff --git a/agent/grpc-external/services/resource/testing/testing.go b/agent/grpc-external/services/resource/testing/testing.go index f38d74532109f..2375ae95b8894 100644 --- a/agent/grpc-external/services/resource/testing/testing.go +++ b/agent/grpc-external/services/resource/testing/testing.go @@ -7,12 +7,13 @@ import ( "context" "testing" - "github.com/hashicorp/go-uuid" "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure" + "github.com/hashicorp/go-uuid" + "github.com/hashicorp/consul/acl" "github.com/hashicorp/consul/acl/resolver" svc "github.com/hashicorp/consul/agent/grpc-external/services/resource" @@ -20,9 +21,7 @@ import ( internal "github.com/hashicorp/consul/agent/grpc-internal" "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/internal/resource" - rtest "github.com/hashicorp/consul/internal/resource/resourcetest" "github.com/hashicorp/consul/internal/storage/inmem" - "github.com/hashicorp/consul/internal/tenancy" "github.com/hashicorp/consul/proto-public/pbresource" "github.com/hashicorp/consul/sdk/testutil" ) @@ -58,23 +57,6 @@ func RunResourceService(t *testing.T, registerFns ...func(resource.Registry)) pb return RunResourceServiceWithConfig(t, svc.Config{}, registerFns...) } -// RunResourceServiceWithTenancies runs a Resource Service with tenancies returned from TestTenancies. -func RunResourceServiceWithTenancies(t *testing.T, registerFns ...func(resource.Registry)) pbresource.ResourceServiceClient { - mockTenancyBridge := &svc.MockTenancyBridge{} - - for _, tenant := range rtest.TestTenancies() { - mockTenancyBridge.On("PartitionExists", tenant.Partition).Return(true, nil) - mockTenancyBridge.On("NamespaceExists", tenant.Partition, tenant.Namespace).Return(true, nil) - mockTenancyBridge.On("IsPartitionMarkedForDeletion", tenant.Partition).Return(false, nil) - mockTenancyBridge.On("IsNamespaceMarkedForDeletion", tenant.Partition, tenant.Namespace).Return(false, nil) - } - - cfg := &svc.Config{ - TenancyBridge: mockTenancyBridge, - } - return RunResourceServiceWithConfig(t, *cfg, registerFns...) -} - // RunResourceServiceWithConfig runs a ResourceService with caller injectable config to ease mocking dependencies. // Any nil config field is replaced with a reasonable default with the following behavior: // @@ -112,17 +94,10 @@ func RunResourceServiceWithConfig(t *testing.T, config svc.Config, registerFns . mockTenancyBridge.On("PartitionExists", resource.DefaultPartitionName).Return(true, nil) mockTenancyBridge.On("PartitionExists", "foo").Return(true, nil) mockTenancyBridge.On("NamespaceExists", resource.DefaultPartitionName, resource.DefaultNamespaceName).Return(true, nil) - mockTenancyBridge.On("PartitionExists", "foo").Return(true, nil) mockTenancyBridge.On("IsPartitionMarkedForDeletion", resource.DefaultPartitionName).Return(false, nil) mockTenancyBridge.On("IsPartitionMarkedForDeletion", "foo").Return(false, nil) mockTenancyBridge.On("IsNamespaceMarkedForDeletion", resource.DefaultPartitionName, resource.DefaultNamespaceName).Return(false, nil) config.TenancyBridge = mockTenancyBridge - } else { - switch config.TenancyBridge.(type) { - case *tenancy.V2TenancyBridge: - err = initTenancy(ctx, backend) - require.NoError(t, err) - } } if config.ACLResolver == nil { @@ -165,14 +140,6 @@ func RunResourceServiceWithConfig(t *testing.T, config svc.Config, registerFns . ) require.NoError(t, err) t.Cleanup(func() { _ = conn.Close() }) - client := pbresource.NewResourceServiceClient(conn) - if config.TenancyBridge != nil { - switch config.TenancyBridge.(type) { - case *tenancy.V2TenancyBridge: - config.TenancyBridge.(*tenancy.V2TenancyBridge).WithClient(client) - } - - } - return client + return pbresource.NewResourceServiceClient(conn) } diff --git a/agent/grpc-external/services/resource/testing/testing_ce.go b/agent/grpc-external/services/resource/testing/testing_ce.go index da20be3533d44..023fa5189cccc 100644 --- a/agent/grpc-external/services/resource/testing/testing_ce.go +++ b/agent/grpc-external/services/resource/testing/testing_ce.go @@ -6,19 +6,7 @@ package testing import ( - "context" - "errors" - "time" - - "github.com/oklog/ulid/v2" - "google.golang.org/protobuf/types/known/anypb" - "github.com/hashicorp/consul/acl" - "github.com/hashicorp/consul/internal/resource" - "github.com/hashicorp/consul/internal/storage" - "github.com/hashicorp/consul/internal/storage/inmem" - "github.com/hashicorp/consul/proto-public/pbresource" - pbtenancy "github.com/hashicorp/consul/proto-public/pbtenancy/v2beta1" ) func FillEntMeta(entMeta *acl.EnterpriseMeta) { @@ -28,38 +16,3 @@ func FillEntMeta(entMeta *acl.EnterpriseMeta) { func FillAuthorizerContext(authzContext *acl.AuthorizerContext) { // nothing to to in CE. } - -// initTenancy create the base tenancy objects (default/default) -func initTenancy(ctx context.Context, b *inmem.Backend) error { - //TODO(dhiaayachi): This is now called for testing purpose but at some point we need to add something similar - // when bootstrapping a server, probably in the tenancy controllers. - nsData, err := anypb.New(&pbtenancy.Namespace{Description: "default namespace in default partition"}) - if err != nil { - return err - } - nsID := &pbresource.ID{ - Type: pbtenancy.NamespaceType, - Name: resource.DefaultNamespaceName, - Tenancy: resource.DefaultPartitionedTenancy(), - Uid: ulid.Make().String(), - } - read, err := b.Read(ctx, storage.StrongConsistency, nsID) - if err != nil && !errors.Is(err, storage.ErrNotFound) { - return err - } - if read == nil && errors.Is(err, storage.ErrNotFound) { - _, err = b.WriteCAS(ctx, &pbresource.Resource{ - Id: nsID, - Generation: ulid.Make().String(), - Data: nsData, - Metadata: map[string]string{ - "generated_at": time.Now().Format(time.RFC3339), - }, - }) - if err != nil { - return err - } - } - return nil - -} diff --git a/agent/grpc-external/services/resource/watch.go b/agent/grpc-external/services/resource/watch.go index adabb3d256ee0..f20d3f00f875a 100644 --- a/agent/grpc-external/services/resource/watch.go +++ b/agent/grpc-external/services/resource/watch.go @@ -16,7 +16,7 @@ import ( ) func (s *Server) WatchList(req *pbresource.WatchListRequest, stream pbresource.ResourceService_WatchListServer) error { - reg, err := s.ensureWatchListRequestValid(req) + reg, err := s.validateWatchListRequest(req) if err != nil { return err } @@ -91,9 +91,17 @@ func (s *Server) WatchList(req *pbresource.WatchListRequest, stream pbresource.R } } -func (s *Server) ensureWatchListRequestValid(req *pbresource.WatchListRequest) (*resource.Registration, error) { - if req.Type == nil { - return nil, status.Errorf(codes.InvalidArgument, "type is required") +func (s *Server) validateWatchListRequest(req *pbresource.WatchListRequest) (*resource.Registration, error) { + var field string + switch { + case req.Type == nil: + field = "type" + case req.Tenancy == nil: + field = "tenancy" + } + + if field != "" { + return nil, status.Errorf(codes.InvalidArgument, "%s is required", field) } // Check type exists. @@ -102,46 +110,18 @@ func (s *Server) ensureWatchListRequestValid(req *pbresource.WatchListRequest) ( return nil, err } - // if no tenancy is passed defaults to wildcard - if req.Tenancy == nil { - req.Tenancy = wildcardTenancyFor(reg.Scope) - } - - if err = checkV2Tenancy(s.UseV2Tenancy, req.Type); err != nil { - return nil, err - } - - if err := validateWildcardTenancy(req.Tenancy, req.NamePrefix); err != nil { - return nil, err - } - - // Check scope - if err = validateScopedTenancy(reg.Scope, req.Type, req.Tenancy); err != nil { - return nil, err + // Lowercase + resource.Normalize(req.Tenancy) + + // Error when partition scoped and namespace not empty. + if reg.Scope == resource.ScopePartition && req.Tenancy.Namespace != "" { + return nil, status.Errorf( + codes.InvalidArgument, + "partition scoped type %s cannot have a namespace. got: %s", + resource.ToGVK(req.Type), + req.Tenancy.Namespace, + ) } return reg, nil } - -func wildcardTenancyFor(scope resource.Scope) *pbresource.Tenancy { - var defaultTenancy *pbresource.Tenancy - - switch scope { - case resource.ScopeCluster: - defaultTenancy = &pbresource.Tenancy{ - PeerName: storage.Wildcard, - } - case resource.ScopePartition: - defaultTenancy = &pbresource.Tenancy{ - Partition: storage.Wildcard, - PeerName: storage.Wildcard, - } - default: - defaultTenancy = &pbresource.Tenancy{ - Partition: storage.Wildcard, - PeerName: storage.Wildcard, - Namespace: storage.Wildcard, - } - } - return defaultTenancy -} diff --git a/agent/grpc-external/services/resource/watch_test.go b/agent/grpc-external/services/resource/watch_test.go index 1c9da4b68d0d4..051264441bbc8 100644 --- a/agent/grpc-external/services/resource/watch_test.go +++ b/agent/grpc-external/services/resource/watch_test.go @@ -7,7 +7,6 @@ import ( "context" "errors" "io" - "strings" "testing" "time" @@ -28,71 +27,24 @@ import ( func TestWatchList_InputValidation(t *testing.T) { server := testServer(t) client := testClient(t, server) - demo.RegisterTypes(server.Registry) - type testCase struct { - modFn func(*pbresource.WatchListRequest) - errContains string - } + demo.RegisterTypes(server.Registry) - testCases := map[string]testCase{ - "no type": { - modFn: func(req *pbresource.WatchListRequest) { req.Type = nil }, - errContains: "type is required", - }, - "partition mixed case": { - modFn: func(req *pbresource.WatchListRequest) { req.Tenancy.Partition = "Default" }, - errContains: "tenancy.partition invalid", - }, - "partition too long": { - modFn: func(req *pbresource.WatchListRequest) { - req.Tenancy.Partition = strings.Repeat("p", resource.MaxNameLength+1) - }, - errContains: "tenancy.partition invalid", - }, - "namespace mixed case": { - modFn: func(req *pbresource.WatchListRequest) { req.Tenancy.Namespace = "Default" }, - errContains: "tenancy.namespace invalid", - }, - "namespace too long": { - modFn: func(req *pbresource.WatchListRequest) { - req.Tenancy.Namespace = strings.Repeat("n", resource.MaxNameLength+1) - }, - errContains: "tenancy.namespace invalid", - }, - "name_prefix mixed case": { - modFn: func(req *pbresource.WatchListRequest) { req.NamePrefix = "Smashing" }, - errContains: "name_prefix invalid", - }, - "partitioned type provides non-empty namespace": { - modFn: func(req *pbresource.WatchListRequest) { - req.Type = demo.TypeV1RecordLabel - req.Tenancy.Namespace = "bad" - }, - errContains: "cannot have a namespace", - }, - "cluster scope with non-empty partition": { - modFn: func(req *pbresource.WatchListRequest) { - req.Type = demo.TypeV1Executive - req.Tenancy = &pbresource.Tenancy{Partition: "bad"} - }, - errContains: "cannot have a partition", - }, - "cluster scope with non-empty namespace": { - modFn: func(req *pbresource.WatchListRequest) { - req.Type = demo.TypeV1Executive - req.Tenancy = &pbresource.Tenancy{Namespace: "bad"} - }, - errContains: "cannot have a namespace", + testCases := map[string]func(*pbresource.WatchListRequest){ + "no type": func(req *pbresource.WatchListRequest) { req.Type = nil }, + "no tenancy": func(req *pbresource.WatchListRequest) { req.Tenancy = nil }, + "partitioned type provides non-empty namespace": func(req *pbresource.WatchListRequest) { + req.Type = demo.TypeV1RecordLabel + req.Tenancy.Namespace = "bad" }, } - for desc, tc := range testCases { + for desc, modFn := range testCases { t.Run(desc, func(t *testing.T) { req := &pbresource.WatchListRequest{ Type: demo.TypeV2Album, Tenancy: resource.DefaultNamespacedTenancy(), } - tc.modFn(req) + modFn(req) stream, err := client.WatchList(testContext(t), req) require.NoError(t, err) @@ -100,7 +52,6 @@ func TestWatchList_InputValidation(t *testing.T) { _, err = stream.Recv() require.Error(t, err) require.Equal(t, codes.InvalidArgument.String(), status.Code(err).String()) - require.ErrorContains(t, err, tc.errContains) }) } } @@ -185,7 +136,7 @@ func TestWatchList_Tenancy_Defaults_And_Normalization(t *testing.T) { rspCh := handleResourceStream(t, stream) // Testcase will pick one of recordLabel or artist based on scope of type. - recordLabel, err := demo.GenerateV1RecordLabel("looney-tunes") + recordLabel, err := demo.GenerateV1RecordLabel("LooneyTunes") require.NoError(t, err) artist, err := demo.GenerateV2Artist() require.NoError(t, err) @@ -392,30 +343,3 @@ type resourceOrError struct { rsp *pbresource.WatchEvent err error } - -func TestWatchList_NoTenancy(t *testing.T) { - t.Parallel() - ctx := context.Background() - server := testServer(t) - client := testClient(t, server) - demo.RegisterTypes(server.Registry) - - // Create a watch. - stream, err := client.WatchList(ctx, &pbresource.WatchListRequest{ - Type: demo.TypeV1RecordLabel, - }) - require.NoError(t, err) - rspCh := handleResourceStream(t, stream) - - recordLabel, err := demo.GenerateV1RecordLabel("looney-tunes") - require.NoError(t, err) - - // Create and verify upsert event received. - recordLabel, err = server.Backend.WriteCAS(ctx, recordLabel) - require.NoError(t, err) - - rsp := mustGetResource(t, rspCh) - - require.Equal(t, pbresource.WatchEvent_OPERATION_UPSERT, rsp.Operation) - prototest.AssertDeepEqual(t, recordLabel, rsp.Resource) -} diff --git a/agent/grpc-external/services/resource/write.go b/agent/grpc-external/services/resource/write.go index b0dc27e2f0710..7110122313fa3 100644 --- a/agent/grpc-external/services/resource/write.go +++ b/agent/grpc-external/services/resource/write.go @@ -10,10 +10,8 @@ import ( "time" "github.com/oklog/ulid/v2" - "golang.org/x/exp/maps" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - "google.golang.org/protobuf/proto" "github.com/hashicorp/consul/acl" "github.com/hashicorp/consul/internal/resource" @@ -39,7 +37,7 @@ import ( var errUseWriteStatus = status.Error(codes.InvalidArgument, "resource.status can only be set using the WriteStatus endpoint") func (s *Server) Write(ctx context.Context, req *pbresource.WriteRequest) (*pbresource.WriteResponse, error) { - reg, err := s.ensureWriteRequestValid(req) + reg, err := s.validateWriteRequest(req) if err != nil { return nil, err } @@ -80,16 +78,14 @@ func (s *Server) Write(ctx context.Context, req *pbresource.WriteRequest) (*pbre return nil, status.Errorf(codes.Internal, "failed write acl: %v", err) } - // Check tenancy exists for the V2 resource - if err = tenancyExists(reg, s.TenancyBridge, req.Resource.Id.Tenancy, codes.InvalidArgument); err != nil { + // Check V1 tenancy exists for the V2 resource + if err = v1TenancyExists(reg, s.TenancyBridge, req.Resource.Id.Tenancy, codes.InvalidArgument); err != nil { return nil, err } - // This is used later in the "create" and "update" paths to block non-delete related writes - // when a tenancy unit has been marked for deletion. - tenancyMarkedForDeletion, err := isTenancyMarkedForDeletion(reg, s.TenancyBridge, req.Resource.Id.Tenancy) - if err != nil { - return nil, status.Errorf(codes.Internal, "failed tenancy marked for deletion check: %v", err) + // Check V1 tenancy not marked for deletion. + if err = v1TenancyMarkedForDeletion(reg, s.TenancyBridge, req.Resource.Id.Tenancy); err != nil { + return nil, err } // At the storage backend layer, all writes are CAS operations. @@ -131,16 +127,6 @@ func (s *Server) Write(ctx context.Context, req *pbresource.WriteRequest) (*pbre return errUseWriteStatus } - // Reject creation in tenancy unit marked for deletion. - if tenancyMarkedForDeletion { - return status.Errorf(codes.InvalidArgument, "tenancy marked for deletion: %v", input.Id.Tenancy.String()) - } - - // Reject attempts to create a resource with a deletionTimestamp. - if resource.IsMarkedForDeletion(input) { - return status.Errorf(codes.InvalidArgument, "resource.metadata.%s can't be set on resource creation", resource.DeletionTimestampKey) - } - // Generally, we expect resources with owners to be created by controllers, // and they should provide the Uid. In cases where no Uid is given (e.g. the // owner is specified in the resource HCL) we'll look up whatever the current @@ -182,11 +168,9 @@ func (s *Server) Write(ctx context.Context, req *pbresource.WriteRequest) (*pbre // just want to update the current resource. input.Id = existing.Id - // User is doing a non-CAS write, use the current version and preserve - // deferred deletion metadata if not present. + // User is doing a non-CAS write, use the current version. if input.Version == "" { input.Version = existing.Version - preserveDeferredDeletionMetadata(input, existing) } // Check the stored version matches the user-given version. @@ -224,13 +208,6 @@ func (s *Server) Write(ctx context.Context, req *pbresource.WriteRequest) (*pbre return errUseWriteStatus } - // If the write is related to a deferred deletion (marking for deletion or removal - // of finalizers), make sure nothing else is changed. - if err := vetIfDeleteRelated(input, existing, tenancyMarkedForDeletion); err != nil { - return err - } - - // Otherwise, let the write continue default: return err } @@ -288,7 +265,7 @@ func (s *Server) retryCAS(ctx context.Context, vsn string, cas func() error) err return err } -func (s *Server) ensureWriteRequestValid(req *pbresource.WriteRequest) (*resource.Registration, error) { +func (s *Server) validateWriteRequest(req *pbresource.WriteRequest) (*resource.Registration, error) { var field string switch { case req.Resource == nil: @@ -317,10 +294,6 @@ func (s *Server) ensureWriteRequestValid(req *pbresource.WriteRequest) (*resourc return nil, err } - if err = checkV2Tenancy(s.UseV2Tenancy, req.Resource.Id.Type); err != nil { - return nil, err - } - // Check scope if reg.Scope == resource.ScopePartition && req.Resource.Id.Tenancy.Namespace != "" { return nil, status.Errorf( @@ -333,139 +306,3 @@ func (s *Server) ensureWriteRequestValid(req *pbresource.WriteRequest) (*resourc return reg, nil } - -func ensureMetadataSameExceptFor(input *pbresource.Resource, existing *pbresource.Resource, ignoreKey string) error { - // Work on copies since we're mutating them - inputCopy := maps.Clone(input.Metadata) - existingCopy := maps.Clone(existing.Metadata) - - delete(inputCopy, ignoreKey) - delete(existingCopy, ignoreKey) - - if !maps.Equal(inputCopy, existingCopy) { - return status.Error(codes.InvalidArgument, "cannot modify metadata") - } - - return nil -} - -func ensureDataUnchanged(input *pbresource.Resource, existing *pbresource.Resource) error { - // Check data last since this could potentially be the most expensive comparison. - if !proto.Equal(input.Data, existing.Data) { - return status.Error(codes.InvalidArgument, "cannot modify data") - } - return nil -} - -// ensureFinalizerRemoved ensures at least one finalizer was removed. -func ensureFinalizerRemoved(input *pbresource.Resource, existing *pbresource.Resource) error { - inputFinalizers := resource.GetFinalizers(input) - existingFinalizers := resource.GetFinalizers(existing) - if !inputFinalizers.IsProperSubset(existingFinalizers) { - return status.Error(codes.InvalidArgument, "expected at least one finalizer to be removed") - } - return nil -} - -func vetIfDeleteRelated(input, existing *pbresource.Resource, tenancyMarkedForDeletion bool) error { - // Keep track of whether this write is a normal write or a write that is related - // to deferred resource deletion involving setting the deletionTimestamp or the - // removal of finalizers. - deleteRelated := false - - existingMarked := resource.IsMarkedForDeletion(existing) - inputMarked := resource.IsMarkedForDeletion(input) - - // Block removal of deletion timestamp - if !inputMarked && existingMarked { - return status.Errorf(codes.InvalidArgument, "cannot remove %s", resource.DeletionTimestampKey) - } - - // Block modification of existing deletion timestamp - if existing.Metadata[resource.DeletionTimestampKey] != "" && (existing.Metadata[resource.DeletionTimestampKey] != input.Metadata[resource.DeletionTimestampKey]) { - return status.Errorf(codes.InvalidArgument, "cannot modify %s", resource.DeletionTimestampKey) - } - - // Block writes that do more than just adding a deletion timestamp - if inputMarked && !existingMarked { - deleteRelated = deleteRelated || true - // Verify rest of resource is unchanged - if err := ensureMetadataSameExceptFor(input, existing, resource.DeletionTimestampKey); err != nil { - return err - } - if err := ensureDataUnchanged(input, existing); err != nil { - return err - } - } - - // Block no-op writes writes to resource that already has a deletion timestamp. The - // only valid writes should be removal of finalizers. - if inputMarked && existingMarked { - deleteRelated = deleteRelated || true - // Check if a no-op - errMetadataSame := ensureMetadataSameExceptFor(input, existing, resource.DeletionTimestampKey) - errDataUnchanged := ensureDataUnchanged(input, existing) - if errMetadataSame == nil && errDataUnchanged == nil { - return status.Error(codes.InvalidArgument, "cannot no-op write resource marked for deletion") - } - } - - // Block writes that do more than removing finalizers if previously marked for deletion. - if inputMarked && existingMarked && resource.HasFinalizers(existing) { - deleteRelated = deleteRelated || true - if err := ensureMetadataSameExceptFor(input, existing, resource.FinalizerKey); err != nil { - return err - } - if err := ensureDataUnchanged(input, existing); err != nil { - return err - } - if err := ensureFinalizerRemoved(input, existing); err != nil { - return err - } - } - - // Classify writes that just remove finalizer as deleteRelated regardless of deletion state. - if err := ensureFinalizerRemoved(input, existing); err == nil { - if err := ensureDataUnchanged(input, existing); err == nil { - deleteRelated = deleteRelated || true - } - } - - // Lastly, block writes when the resource's tenancy unit has been marked for deletion and - // the write is not related a valid delete scenario. - if tenancyMarkedForDeletion && !deleteRelated { - return status.Errorf(codes.InvalidArgument, "cannot write resource when tenancy marked for deletion: %s", existing.Id.Tenancy) - } - - return nil -} - -// preserveDeferredDeletionMetadata only applies to user writes (Version == "") which is a precondition. -func preserveDeferredDeletionMetadata(input, existing *pbresource.Resource) { - // preserve existing deletionTimestamp if not provided in input - if !resource.IsMarkedForDeletion(input) && resource.IsMarkedForDeletion(existing) { - if input.Metadata == nil { - input.Metadata = make(map[string]string) - } - input.Metadata[resource.DeletionTimestampKey] = existing.Metadata[resource.DeletionTimestampKey] - } - - // Only preserve finalizers if the is key absent from input and present in existing. - // If the key is present in input, the user clearly wants to remove finalizers! - inputHasKey := false - if input.Metadata != nil { - _, inputHasKey = input.Metadata[resource.FinalizerKey] - } - - existingHasKey := false - if existing.Metadata != nil { - _, existingHasKey = existing.Metadata[resource.FinalizerKey] - } - - if !inputHasKey && existingHasKey { - if input.Metadata == nil { - input.Metadata = make(map[string]string) - } - input.Metadata[resource.FinalizerKey] = existing.Metadata[resource.FinalizerKey] - } -} diff --git a/agent/grpc-external/services/resource/write_status.go b/agent/grpc-external/services/resource/write_status.go index 7009a7fd72bb2..0d3b68bb08766 100644 --- a/agent/grpc-external/services/resource/write_status.go +++ b/agent/grpc-external/services/resource/write_status.go @@ -34,9 +34,9 @@ func (s *Server) WriteStatus(ctx context.Context, req *pbresource.WriteStatusReq // Apply defaults when tenancy units empty. v1EntMetaToV2Tenancy(reg, entMeta, req.Id.Tenancy) - // Check tenancy exists for the V2 resource. Ignore "marked for deletion" since status updates + // Check V1 tenancy exists for the V2 resource. Ignore "marked for deletion" since status updates // should still work regardless. - if err = tenancyExists(reg, s.TenancyBridge, req.Id.Tenancy, codes.InvalidArgument); err != nil { + if err = v1TenancyExists(reg, s.TenancyBridge, req.Id.Tenancy, codes.InvalidArgument); err != nil { return nil, err } @@ -178,17 +178,8 @@ func (s *Server) validateWriteStatusRequest(req *pbresource.WriteStatusRequest) } } - if err := validateId(req.Id, "id"); err != nil { - return nil, err - } - - for i, condition := range req.Status.Conditions { - if condition.Resource != nil { - if err := validateRef(condition.Resource, fmt.Sprintf("status.conditions[%d].resource", i)); err != nil { - return nil, err - } - } - } + // Lowercase + resource.Normalize(req.Id.Tenancy) // Check type exists. reg, err := s.resolveType(req.Id.Type) diff --git a/agent/grpc-external/services/resource/write_status_test.go b/agent/grpc-external/services/resource/write_status_test.go index 1ddf738632365..5b71983475d94 100644 --- a/agent/grpc-external/services/resource/write_status_test.go +++ b/agent/grpc-external/services/resource/write_status_test.go @@ -74,155 +74,64 @@ func TestWriteStatus_InputValidation(t *testing.T) { demo.RegisterTypes(server.Registry) testCases := map[string]struct { - typ *pbresource.Type - modFn func(req *pbresource.WriteStatusRequest) - errContains string + typ *pbresource.Type + modFn func(req *pbresource.WriteStatusRequest) }{ "no id": { - typ: demo.TypeV2Artist, - modFn: func(req *pbresource.WriteStatusRequest) { req.Id = nil }, - errContains: "id is required", + typ: demo.TypeV2Artist, + modFn: func(req *pbresource.WriteStatusRequest) { req.Id = nil }, }, "no type": { - typ: demo.TypeV2Artist, - modFn: func(req *pbresource.WriteStatusRequest) { req.Id.Type = nil }, - errContains: "id.type is required", + typ: demo.TypeV2Artist, + modFn: func(req *pbresource.WriteStatusRequest) { req.Id.Type = nil }, }, "no name": { - typ: demo.TypeV2Artist, - modFn: func(req *pbresource.WriteStatusRequest) { req.Id.Name = "" }, - errContains: "id.name is required", + typ: demo.TypeV2Artist, + modFn: func(req *pbresource.WriteStatusRequest) { req.Id.Name = "" }, }, "no uid": { - typ: demo.TypeV2Artist, - modFn: func(req *pbresource.WriteStatusRequest) { req.Id.Uid = "" }, - errContains: "id.uid is required", - }, - "name mixed case": { - typ: demo.TypeV2Artist, - modFn: func(req *pbresource.WriteStatusRequest) { req.Id.Name = "U2" }, - errContains: "id.name invalid", - }, - "name too long": { - typ: demo.TypeV2Artist, - modFn: func(req *pbresource.WriteStatusRequest) { - req.Id.Name = strings.Repeat("a", resource.MaxNameLength+1) - }, - errContains: "id.name invalid", - }, - "partition mixed case": { - typ: demo.TypeV2Artist, - modFn: func(req *pbresource.WriteStatusRequest) { req.Id.Tenancy.Partition = "Default" }, - errContains: "id.tenancy.partition invalid", - }, - "partition too long": { - typ: demo.TypeV2Artist, - modFn: func(req *pbresource.WriteStatusRequest) { - req.Id.Tenancy.Partition = strings.Repeat("p", resource.MaxNameLength+1) - }, - errContains: "id.tenancy.partition invalid", - }, - "namespace mixed case": { - typ: demo.TypeV2Artist, - modFn: func(req *pbresource.WriteStatusRequest) { req.Id.Tenancy.Namespace = "Default" }, - errContains: "id.tenancy.namespace invalid", - }, - "namespace too long": { - typ: demo.TypeV2Artist, - modFn: func(req *pbresource.WriteStatusRequest) { - req.Id.Tenancy.Namespace = strings.Repeat("n", resource.MaxNameLength+1) - }, - errContains: "id.tenancy.namespace invalid", + typ: demo.TypeV2Artist, + modFn: func(req *pbresource.WriteStatusRequest) { req.Id.Uid = "" }, }, "no key": { - typ: demo.TypeV2Artist, - modFn: func(req *pbresource.WriteStatusRequest) { req.Key = "" }, - errContains: "key is required", + typ: demo.TypeV2Artist, + modFn: func(req *pbresource.WriteStatusRequest) { req.Key = "" }, }, "no status": { - typ: demo.TypeV2Artist, - modFn: func(req *pbresource.WriteStatusRequest) { req.Status = nil }, - errContains: "status is required", + typ: demo.TypeV2Artist, + modFn: func(req *pbresource.WriteStatusRequest) { req.Status = nil }, }, "no observed generation": { - typ: demo.TypeV2Artist, - modFn: func(req *pbresource.WriteStatusRequest) { req.Status.ObservedGeneration = "" }, - errContains: "status.observed_generation is required", + typ: demo.TypeV2Artist, + modFn: func(req *pbresource.WriteStatusRequest) { req.Status.ObservedGeneration = "" }, }, "bad observed generation": { - typ: demo.TypeV2Artist, - modFn: func(req *pbresource.WriteStatusRequest) { req.Status.ObservedGeneration = "bogus" }, - errContains: "status.observed_generation is not valid", + typ: demo.TypeV2Artist, + modFn: func(req *pbresource.WriteStatusRequest) { req.Status.ObservedGeneration = "bogus" }, }, "no condition type": { - typ: demo.TypeV2Artist, - modFn: func(req *pbresource.WriteStatusRequest) { req.Status.Conditions[0].Type = "" }, - errContains: "status.conditions[0].type is required", + typ: demo.TypeV2Artist, + modFn: func(req *pbresource.WriteStatusRequest) { req.Status.Conditions[0].Type = "" }, }, "no reference type": { - typ: demo.TypeV2Artist, - modFn: func(req *pbresource.WriteStatusRequest) { req.Status.Conditions[0].Resource.Type = nil }, - errContains: "status.conditions[0].resource.type is required", + typ: demo.TypeV2Artist, + modFn: func(req *pbresource.WriteStatusRequest) { req.Status.Conditions[0].Resource.Type = nil }, }, "no reference tenancy": { - typ: demo.TypeV2Artist, - modFn: func(req *pbresource.WriteStatusRequest) { req.Status.Conditions[0].Resource.Tenancy = nil }, - errContains: "status.conditions[0].resource.tenancy is required", + typ: demo.TypeV2Artist, + modFn: func(req *pbresource.WriteStatusRequest) { req.Status.Conditions[0].Resource.Tenancy = nil }, }, "no reference name": { - typ: demo.TypeV2Artist, - modFn: func(req *pbresource.WriteStatusRequest) { req.Status.Conditions[0].Resource.Name = "" }, - errContains: "status.conditions[0].resource.name is required", - }, - "reference name mixed case": { - typ: demo.TypeV2Artist, - modFn: func(req *pbresource.WriteStatusRequest) { req.Status.Conditions[0].Resource.Name = "U2" }, - errContains: "status.conditions[0].resource.name invalid", - }, - "reference name too long": { - typ: demo.TypeV2Artist, - modFn: func(req *pbresource.WriteStatusRequest) { - req.Status.Conditions[0].Resource.Name = strings.Repeat("r", resource.MaxNameLength+1) - }, - errContains: "status.conditions[0].resource.name invalid", - }, - "reference partition mixed case": { - typ: demo.TypeV2Artist, - modFn: func(req *pbresource.WriteStatusRequest) { - req.Status.Conditions[0].Resource.Tenancy.Partition = "Default" - }, - errContains: "status.conditions[0].resource.tenancy.partition invalid", - }, - "reference partition too long": { - typ: demo.TypeV2Artist, - modFn: func(req *pbresource.WriteStatusRequest) { - req.Status.Conditions[0].Resource.Tenancy.Partition = strings.Repeat("p", resource.MaxNameLength+1) - }, - errContains: "status.conditions[0].resource.tenancy.partition invalid", - }, - "reference namespace mixed case": { - typ: demo.TypeV2Artist, - modFn: func(req *pbresource.WriteStatusRequest) { - req.Status.Conditions[0].Resource.Tenancy.Namespace = "Default" - }, - errContains: "status.conditions[0].resource.tenancy.namespace invalid", - }, - "reference namespace too long": { - typ: demo.TypeV2Artist, - modFn: func(req *pbresource.WriteStatusRequest) { - req.Status.Conditions[0].Resource.Tenancy.Namespace = strings.Repeat("n", resource.MaxNameLength+1) - }, - errContains: "status.conditions[0].resource.tenancy.namespace invalid", + typ: demo.TypeV2Artist, + modFn: func(req *pbresource.WriteStatusRequest) { req.Status.Conditions[0].Resource.Name = "" }, }, "updated at provided": { - typ: demo.TypeV2Artist, - modFn: func(req *pbresource.WriteStatusRequest) { req.Status.UpdatedAt = timestamppb.Now() }, - errContains: "status.updated_at is automatically set and cannot be provided", + typ: demo.TypeV2Artist, + modFn: func(req *pbresource.WriteStatusRequest) { req.Status.UpdatedAt = timestamppb.Now() }, }, "partition scoped type provides namespace in tenancy": { - typ: demo.TypeV1RecordLabel, - modFn: func(req *pbresource.WriteStatusRequest) { req.Id.Tenancy.Namespace = "bad" }, - errContains: "cannot have a namespace", + typ: demo.TypeV1RecordLabel, + modFn: func(req *pbresource.WriteStatusRequest) { req.Id.Tenancy.Namespace = "bad" }, }, } for desc, tc := range testCases { @@ -233,7 +142,7 @@ func TestWriteStatus_InputValidation(t *testing.T) { case resource.EqualType(demo.TypeV2Artist, tc.typ): res, err = demo.GenerateV2Artist() case resource.EqualType(demo.TypeV1RecordLabel, tc.typ): - res, err = demo.GenerateV1RecordLabel("looney-tunes") + res, err = demo.GenerateV1RecordLabel("Looney Tunes") default: t.Fatal("unsupported type", tc.typ) } @@ -248,7 +157,6 @@ func TestWriteStatus_InputValidation(t *testing.T) { _, err = client.WriteStatus(testContext(t), req) require.Error(t, err) require.Equal(t, codes.InvalidArgument.String(), status.Code(err).String()) - require.ErrorContains(t, err, tc.errContains) }) } } @@ -302,6 +210,13 @@ func TestWriteStatus_Tenancy_Defaults(t *testing.T) { scope: resource.ScopeNamespace, modFn: func(req *pbresource.WriteStatusRequest) {}, }, + "namespaced resource provides uppercase partition and namespace": { + scope: resource.ScopeNamespace, + modFn: func(req *pbresource.WriteStatusRequest) { + req.Id.Tenancy.Partition = strings.ToUpper(req.Id.Tenancy.Partition) + req.Id.Tenancy.Namespace = strings.ToUpper(req.Id.Tenancy.Namespace) + }, + }, "namespaced resource inherits tokens partition when empty": { scope: resource.ScopeNamespace, modFn: func(req *pbresource.WriteStatusRequest) { req.Id.Tenancy.Partition = "" }, @@ -325,6 +240,12 @@ func TestWriteStatus_Tenancy_Defaults(t *testing.T) { scope: resource.ScopePartition, modFn: func(req *pbresource.WriteStatusRequest) {}, }, + "partitioned resource provides uppercase partition": { + scope: resource.ScopePartition, + modFn: func(req *pbresource.WriteStatusRequest) { + req.Id.Tenancy.Partition = strings.ToUpper(req.Id.Tenancy.Partition) + }, + }, "partitioned resource inherits tokens partition when empty": { scope: resource.ScopePartition, modFn: func(req *pbresource.WriteStatusRequest) { req.Id.Tenancy.Partition = "" }, @@ -342,7 +263,7 @@ func TestWriteStatus_Tenancy_Defaults(t *testing.T) { case resource.ScopeNamespace: res, err = demo.GenerateV2Artist() case resource.ScopePartition: - res, err = demo.GenerateV1RecordLabel("looney-tunes") + res, err = demo.GenerateV1RecordLabel("Looney Tunes") } require.NoError(t, err) @@ -359,7 +280,7 @@ func TestWriteStatus_Tenancy_Defaults(t *testing.T) { require.NoError(t, err) res = rsp.Resource - // Re-read resource and verify status successfully written (not nil) + // Re-read resoruce and verify status successfully written (not nil) _, err = client.Read(testContext(t), &pbresource.ReadRequest{Id: res.Id}) require.NoError(t, err) res = rsp.Resource @@ -406,7 +327,7 @@ func TestWriteStatus_Tenancy_NotFound(t *testing.T) { case resource.ScopeNamespace: res, err = demo.GenerateV2Artist() case resource.ScopePartition: - res, err = demo.GenerateV1RecordLabel("looney-tunes") + res, err = demo.GenerateV1RecordLabel("Looney Tunes") } require.NoError(t, err) diff --git a/agent/grpc-external/services/resource/write_test.go b/agent/grpc-external/services/resource/write_test.go index 81392b8543488..3828ff9753f2d 100644 --- a/agent/grpc-external/services/resource/write_test.go +++ b/agent/grpc-external/services/resource/write_test.go @@ -8,7 +8,6 @@ import ( "strings" "sync/atomic" "testing" - "time" "github.com/oklog/ulid/v2" "github.com/stretchr/testify/mock" @@ -20,10 +19,8 @@ import ( "github.com/hashicorp/consul/acl/resolver" "github.com/hashicorp/consul/internal/resource" "github.com/hashicorp/consul/internal/resource/demo" - rtest "github.com/hashicorp/consul/internal/resource/resourcetest" "github.com/hashicorp/consul/internal/storage" "github.com/hashicorp/consul/proto-public/pbresource" - pbdemo "github.com/hashicorp/consul/proto/private/pbdemo/v1" pbdemov1 "github.com/hashicorp/consul/proto/private/pbdemo/v1" pbdemov2 "github.com/hashicorp/consul/proto/private/pbdemo/v2" "github.com/hashicorp/consul/proto/private/prototest" @@ -32,123 +29,54 @@ import ( func TestWrite_InputValidation(t *testing.T) { server := testServer(t) client := testClient(t, server) - demo.RegisterTypes(server.Registry) - type testCase struct { - modFn func(artist, recordLabel *pbresource.Resource) *pbresource.Resource - errContains string - } + demo.RegisterTypes(server.Registry) - testCases := map[string]testCase{ - "no resource": { - modFn: func(_, _ *pbresource.Resource) *pbresource.Resource { - return nil - }, - errContains: "resource is required", + testCases := map[string]func(artist, recordLabel *pbresource.Resource) *pbresource.Resource{ + "no resource": func(artist, recordLabel *pbresource.Resource) *pbresource.Resource { return nil }, + "no id": func(artist, _ *pbresource.Resource) *pbresource.Resource { + artist.Id = nil + return artist }, - "no id": { - modFn: func(artist, _ *pbresource.Resource) *pbresource.Resource { - artist.Id = nil - return artist - }, - errContains: "resource.id is required", + "no type": func(artist, _ *pbresource.Resource) *pbresource.Resource { + artist.Id.Type = nil + return artist }, - "no type": { - modFn: func(artist, _ *pbresource.Resource) *pbresource.Resource { - artist.Id.Type = nil - return artist - }, - errContains: "resource.id.type is required", - }, - "no name": { - modFn: func(artist, _ *pbresource.Resource) *pbresource.Resource { - artist.Id.Name = "" - return artist - }, - errContains: "resource.id.name invalid", - }, - "name is mixed case": { - modFn: func(artist, _ *pbresource.Resource) *pbresource.Resource { - artist.Id.Name = "MixedCaseNotAllowed" - return artist - }, - errContains: "resource.id.name invalid", + "no name": func(artist, _ *pbresource.Resource) *pbresource.Resource { + artist.Id.Name = "" + return artist }, - "name too long": { - modFn: func(artist, _ *pbresource.Resource) *pbresource.Resource { - artist.Id.Name = strings.Repeat("a", resource.MaxNameLength+1) - return artist - }, - errContains: "resource.id.name invalid", - }, - "wrong data type": { - modFn: func(artist, _ *pbresource.Resource) *pbresource.Resource { - var err error - artist.Data, err = anypb.New(&pbdemov2.Album{}) - require.NoError(t, err) - return artist - }, - errContains: "resource.data is of wrong type", - }, - "partition is mixed case": { - modFn: func(artist, _ *pbresource.Resource) *pbresource.Resource { - artist.Id.Tenancy.Partition = "Default" - return artist - }, - errContains: "resource.id.tenancy.partition invalid", - }, - "partition too long": { - modFn: func(artist, _ *pbresource.Resource) *pbresource.Resource { - artist.Id.Tenancy.Partition = strings.Repeat("p", resource.MaxNameLength+1) - return artist - }, - errContains: "resource.id.tenancy.partition invalid", - }, - "namespace is mixed case": { - modFn: func(artist, _ *pbresource.Resource) *pbresource.Resource { - artist.Id.Tenancy.Namespace = "Default" - return artist - }, - errContains: "resource.id.tenancy.namespace invalid", + "wrong data type": func(artist, _ *pbresource.Resource) *pbresource.Resource { + var err error + artist.Data, err = anypb.New(&pbdemov2.Album{}) + require.NoError(t, err) + return artist }, - "namespace too long": { - modFn: func(artist, _ *pbresource.Resource) *pbresource.Resource { - artist.Id.Tenancy.Namespace = strings.Repeat("n", resource.MaxNameLength+1) - return artist - }, - errContains: "resource.id.tenancy.namespace invalid", + "fail validation hook": func(artist, _ *pbresource.Resource) *pbresource.Resource { + buffer := &pbdemov2.Artist{} + require.NoError(t, artist.Data.UnmarshalTo(buffer)) + buffer.Name = "" // name cannot be empty + require.NoError(t, artist.Data.MarshalFrom(buffer)) + return artist }, - "fail validation hook": { - modFn: func(artist, _ *pbresource.Resource) *pbresource.Resource { - buffer := &pbdemov2.Artist{} - require.NoError(t, artist.Data.UnmarshalTo(buffer)) - buffer.Name = "" // name cannot be empty - require.NoError(t, artist.Data.MarshalFrom(buffer)) - return artist - }, - errContains: "artist.name required", - }, - "partition scope with non-empty namespace": { - modFn: func(_, recordLabel *pbresource.Resource) *pbresource.Resource { - recordLabel.Id.Tenancy.Namespace = "bogus" - return recordLabel - }, - errContains: "cannot have a namespace", + "partition scope with non-empty namespace": func(_, recordLabel *pbresource.Resource) *pbresource.Resource { + recordLabel.Id.Tenancy.Namespace = "bogus" + return recordLabel }, + // TODO(spatel): add cluster scope tests when we have an actual cluster scoped resource (e.g. partition) } - for desc, tc := range testCases { + for desc, modFn := range testCases { t.Run(desc, func(t *testing.T) { artist, err := demo.GenerateV2Artist() require.NoError(t, err) - recordLabel, err := demo.GenerateV1RecordLabel("looney-tunes") + recordLabel, err := demo.GenerateV1RecordLabel("LoonyTunes") require.NoError(t, err) - req := &pbresource.WriteRequest{Resource: tc.modFn(artist, recordLabel)} + req := &pbresource.WriteRequest{Resource: modFn(artist, recordLabel)} _, err = client.Write(testContext(t), req) require.Error(t, err) require.Equal(t, codes.InvalidArgument.String(), status.Code(err).String()) - require.ErrorContains(t, err, tc.errContains) }) } } @@ -156,6 +84,7 @@ func TestWrite_InputValidation(t *testing.T) { func TestWrite_OwnerValidation(t *testing.T) { server := testServer(t) client := testClient(t, server) + demo.RegisterTypes(server.Registry) type testCase struct { @@ -165,49 +94,15 @@ func TestWrite_OwnerValidation(t *testing.T) { testCases := map[string]testCase{ "no owner type": { modReqFn: func(req *pbresource.WriteRequest) { req.Resource.Owner.Type = nil }, - errorContains: "resource.owner.type is required", + errorContains: "resource.owner.type", }, "no owner tenancy": { modReqFn: func(req *pbresource.WriteRequest) { req.Resource.Owner.Tenancy = nil }, - errorContains: "resource.owner does not exist", + errorContains: "resource.owner", }, "no owner name": { modReqFn: func(req *pbresource.WriteRequest) { req.Resource.Owner.Name = "" }, - errorContains: "resource.owner.name invalid", - }, - "mixed case owner name": { - modReqFn: func(req *pbresource.WriteRequest) { req.Resource.Owner.Name = strings.ToUpper(req.Resource.Owner.Name) }, - errorContains: "resource.owner.name invalid", - }, - "owner name too long": { - modReqFn: func(req *pbresource.WriteRequest) { - req.Resource.Owner.Name = strings.Repeat("a", resource.MaxNameLength+1) - }, - errorContains: "resource.owner.name invalid", - }, - "owner partition is mixed case": { - modReqFn: func(req *pbresource.WriteRequest) { - req.Resource.Owner.Tenancy.Partition = "Default" - }, - errorContains: "resource.owner.tenancy.partition invalid", - }, - "owner partition too long": { - modReqFn: func(req *pbresource.WriteRequest) { - req.Resource.Owner.Tenancy.Partition = strings.Repeat("p", resource.MaxNameLength+1) - }, - errorContains: "resource.owner.tenancy.partition invalid", - }, - "owner namespace is mixed case": { - modReqFn: func(req *pbresource.WriteRequest) { - req.Resource.Owner.Tenancy.Namespace = "Default" - }, - errorContains: "resource.owner.tenancy.namespace invalid", - }, - "owner namespace too long": { - modReqFn: func(req *pbresource.WriteRequest) { - req.Resource.Owner.Tenancy.Namespace = strings.Repeat("n", resource.MaxNameLength+1) - }, - errorContains: "resource.owner.tenancy.namespace invalid", + errorContains: "resource.owner.name", }, } for desc, tc := range testCases { @@ -320,6 +215,14 @@ func TestWrite_Create_Success(t *testing.T) { }, expectedTenancy: resource.DefaultNamespacedTenancy(), }, + "namespaced resource provides uppercase partition and namespace": { + modFn: func(artist, _ *pbresource.Resource) *pbresource.Resource { + artist.Id.Tenancy.Partition = strings.ToUpper(artist.Id.Tenancy.Partition) + artist.Id.Tenancy.Namespace = strings.ToUpper(artist.Id.Tenancy.Namespace) + return artist + }, + expectedTenancy: resource.DefaultNamespacedTenancy(), + }, "namespaced resource inherits tokens partition when empty": { modFn: func(artist, _ *pbresource.Resource) *pbresource.Resource { artist.Id.Tenancy.Partition = "" @@ -363,6 +266,13 @@ func TestWrite_Create_Success(t *testing.T) { }, expectedTenancy: resource.DefaultPartitionedTenancy(), }, + "partitioned resource provides uppercase partition": { + modFn: func(_, recordLabel *pbresource.Resource) *pbresource.Resource { + recordLabel.Id.Tenancy.Partition = strings.ToUpper(recordLabel.Id.Tenancy.Partition) + return recordLabel + }, + expectedTenancy: resource.DefaultPartitionedTenancy(), + }, "partitioned resource inherits tokens partition when empty": { modFn: func(_, recordLabel *pbresource.Resource) *pbresource.Resource { recordLabel.Id.Tenancy.Partition = "" @@ -393,7 +303,7 @@ func TestWrite_Create_Success(t *testing.T) { client := testClient(t, server) demo.RegisterTypes(server.Registry) - recordLabel, err := demo.GenerateV1RecordLabel("looney-tunes") + recordLabel, err := demo.GenerateV1RecordLabel("LoonyTunes") require.NoError(t, err) artist, err := demo.GenerateV2Artist() @@ -421,7 +331,7 @@ func TestWrite_Create_Tenancy_NotFound(t *testing.T) { return artist }, errCode: codes.InvalidArgument, - errContains: "partition not found", + errContains: "partition", }, "namespaced resource provides nonexistant namespace": { modFn: func(artist, _ *pbresource.Resource) *pbresource.Resource { @@ -429,7 +339,7 @@ func TestWrite_Create_Tenancy_NotFound(t *testing.T) { return artist }, errCode: codes.InvalidArgument, - errContains: "namespace not found", + errContains: "namespace", }, "partitioned resource provides nonexistant partition": { modFn: func(_, recordLabel *pbresource.Resource) *pbresource.Resource { @@ -437,7 +347,7 @@ func TestWrite_Create_Tenancy_NotFound(t *testing.T) { return recordLabel }, errCode: codes.InvalidArgument, - errContains: "partition not found", + errContains: "partition", }, } for desc, tc := range testCases { @@ -446,7 +356,7 @@ func TestWrite_Create_Tenancy_NotFound(t *testing.T) { client := testClient(t, server) demo.RegisterTypes(server.Registry) - recordLabel, err := demo.GenerateV1RecordLabel("looney-tunes") + recordLabel, err := demo.GenerateV1RecordLabel("LoonyTunes") require.NoError(t, err) artist, err := demo.GenerateV2Artist() @@ -460,24 +370,7 @@ func TestWrite_Create_Tenancy_NotFound(t *testing.T) { } } -func TestWrite_Create_With_DeletionTimestamp_Fails(t *testing.T) { - server := testServer(t) - client := testClient(t, server) - demo.RegisterTypes(server.Registry) - - res := rtest.Resource(demo.TypeV1Artist, "blur"). - WithTenancy(resource.DefaultNamespacedTenancy()). - WithData(t, &pbdemov1.Artist{Name: "Blur"}). - WithMeta(resource.DeletionTimestampKey, time.Now().Format(time.RFC3339)). - Build() - - _, err := client.Write(testContext(t), &pbresource.WriteRequest{Resource: res}) - require.Error(t, err) - require.Equal(t, codes.InvalidArgument.String(), status.Code(err).String()) - require.Contains(t, err.Error(), resource.DeletionTimestampKey) -} - -func TestWrite_Create_With_TenancyMarkedForDeletion_Fails(t *testing.T) { +func TestWrite_Tenancy_MarkedForDeletion(t *testing.T) { // Verify resource write fails when its partition or namespace is marked for deletion. testCases := map[string]struct { modFn func(artist, recordLabel *pbresource.Resource, mockTenancyBridge *MockTenancyBridge) *pbresource.Resource @@ -485,25 +378,25 @@ func TestWrite_Create_With_TenancyMarkedForDeletion_Fails(t *testing.T) { }{ "namespaced resources partition marked for deletion": { modFn: func(artist, _ *pbresource.Resource, mockTenancyBridge *MockTenancyBridge) *pbresource.Resource { - mockTenancyBridge.On("IsPartitionMarkedForDeletion", "ap1").Return(true, nil) + mockTenancyBridge.On("IsPartitionMarkedForDeletion", "part1").Return(true, nil) return artist }, - errContains: "tenancy marked for deletion", + errContains: "partition marked for deletion", }, "namespaced resources namespace marked for deletion": { modFn: func(artist, _ *pbresource.Resource, mockTenancyBridge *MockTenancyBridge) *pbresource.Resource { - mockTenancyBridge.On("IsPartitionMarkedForDeletion", "ap1").Return(false, nil) - mockTenancyBridge.On("IsNamespaceMarkedForDeletion", "ap1", "ns1").Return(true, nil) + mockTenancyBridge.On("IsPartitionMarkedForDeletion", "part1").Return(false, nil) + mockTenancyBridge.On("IsNamespaceMarkedForDeletion", "part1", "ns1").Return(true, nil) return artist }, - errContains: "tenancy marked for deletion", + errContains: "namespace marked for deletion", }, "partitioned resources partition marked for deletion": { modFn: func(_, recordLabel *pbresource.Resource, mockTenancyBridge *MockTenancyBridge) *pbresource.Resource { - mockTenancyBridge.On("IsPartitionMarkedForDeletion", "ap1").Return(true, nil) + mockTenancyBridge.On("IsPartitionMarkedForDeletion", "part1").Return(true, nil) return recordLabel }, - errContains: "tenancy marked for deletion", + errContains: "partition marked for deletion", }, } for desc, tc := range testCases { @@ -511,18 +404,18 @@ func TestWrite_Create_With_TenancyMarkedForDeletion_Fails(t *testing.T) { server := testServer(t) client := testClient(t, server) demo.RegisterTypes(server.Registry) - recordLabel, err := demo.GenerateV1RecordLabel("looney-tunes") + recordLabel, err := demo.GenerateV1RecordLabel("LoonyTunes") require.NoError(t, err) - recordLabel.Id.Tenancy.Partition = "ap1" + recordLabel.Id.Tenancy.Partition = "part1" artist, err := demo.GenerateV2Artist() require.NoError(t, err) - artist.Id.Tenancy.Partition = "ap1" + artist.Id.Tenancy.Partition = "part1" artist.Id.Tenancy.Namespace = "ns1" mockTenancyBridge := &MockTenancyBridge{} - mockTenancyBridge.On("PartitionExists", "ap1").Return(true, nil) - mockTenancyBridge.On("NamespaceExists", "ap1", "ns1").Return(true, nil) + mockTenancyBridge.On("PartitionExists", "part1").Return(true, nil) + mockTenancyBridge.On("NamespaceExists", "part1", "ns1").Return(true, nil) server.TenancyBridge = mockTenancyBridge _, err = client.Write(testContext(t), &pbresource.WriteRequest{Resource: tc.modFn(artist, recordLabel, mockTenancyBridge)}) @@ -923,312 +816,3 @@ func (b *blockOnceBackend) Read(ctx context.Context, consistency storage.ReadCon return res, err } - -func TestEnsureFinalizerRemoved(t *testing.T) { - type testCase struct { - mod func(input, existing *pbresource.Resource) - errContains string - } - - testCases := map[string]testCase{ - "one finalizer removed from input": { - mod: func(input, existing *pbresource.Resource) { - resource.AddFinalizer(existing, "f1") - resource.AddFinalizer(existing, "f2") - resource.AddFinalizer(input, "f1") - }, - }, - "all finalizers removed from input": { - mod: func(input, existing *pbresource.Resource) { - resource.AddFinalizer(existing, "f1") - resource.AddFinalizer(existing, "f2") - resource.AddFinalizer(input, "f1") - resource.RemoveFinalizer(input, "f1") - }, - }, - "all finalizers removed from input and no finalizer key": { - mod: func(input, existing *pbresource.Resource) { - resource.AddFinalizer(existing, "f1") - resource.AddFinalizer(existing, "f2") - }, - }, - "no finalizers removed from input": { - mod: func(input, existing *pbresource.Resource) { - resource.AddFinalizer(existing, "f1") - resource.AddFinalizer(input, "f1") - }, - errContains: "expected at least one finalizer to be removed", - }, - "input finalizers not proper subset of existing": { - mod: func(input, existing *pbresource.Resource) { - resource.AddFinalizer(existing, "f1") - resource.AddFinalizer(existing, "f2") - resource.AddFinalizer(input, "f3") - }, - errContains: "expected at least one finalizer to be removed", - }, - "existing has no finalizers for input to remove": { - mod: func(input, existing *pbresource.Resource) { - resource.AddFinalizer(input, "f3") - }, - errContains: "expected at least one finalizer to be removed", - }, - } - - for desc, tc := range testCases { - t.Run(desc, func(t *testing.T) { - input := rtest.Resource(demo.TypeV1Artist, "artist1"). - WithTenancy(resource.DefaultNamespacedTenancy()). - WithData(t, &pbdemov1.Artist{Name: "artist1"}). - WithMeta(resource.DeletionTimestampKey, "someTimestamp"). - Build() - - existing := rtest.Resource(demo.TypeV1Artist, "artist1"). - WithTenancy(resource.DefaultNamespacedTenancy()). - WithData(t, &pbdemov1.Artist{Name: "artist1"}). - WithMeta(resource.DeletionTimestampKey, "someTimestamp"). - Build() - - tc.mod(input, existing) - - err := ensureFinalizerRemoved(input, existing) - if tc.errContains != "" { - require.Error(t, err) - require.Equal(t, codes.InvalidArgument.String(), status.Code(err).String()) - require.ErrorContains(t, err, tc.errContains) - } else { - require.NoError(t, err) - } - }) - } -} - -func TestWrite_ResourceFrozenAfterMarkedForDeletion(t *testing.T) { - type testCase struct { - modFn func(res *pbresource.Resource) - errContains string - } - testCases := map[string]testCase{ - "no-op write rejected": { - modFn: func(res *pbresource.Resource) {}, - errContains: "cannot no-op write resource marked for deletion", - }, - "remove one finalizer": { - modFn: func(res *pbresource.Resource) { - resource.RemoveFinalizer(res, "finalizer1") - }, - }, - "remove all finalizers": { - modFn: func(res *pbresource.Resource) { - resource.RemoveFinalizer(res, "finalizer1") - resource.RemoveFinalizer(res, "finalizer2") - }, - }, - "adding finalizer fails": { - modFn: func(res *pbresource.Resource) { - resource.AddFinalizer(res, "finalizer3") - }, - errContains: "expected at least one finalizer to be removed", - }, - "remove deletionTimestamp fails": { - modFn: func(res *pbresource.Resource) { - delete(res.Metadata, resource.DeletionTimestampKey) - }, - errContains: "cannot remove deletionTimestamp", - }, - "modify deletionTimestamp fails": { - modFn: func(res *pbresource.Resource) { - res.Metadata[resource.DeletionTimestampKey] = "bad" - }, - errContains: "cannot modify deletionTimestamp", - }, - "modify data fails": { - modFn: func(res *pbresource.Resource) { - var err error - res.Data, err = anypb.New(&pbdemo.Artist{Name: "New Order"}) - require.NoError(t, err) - }, - errContains: "cannot modify data", - }, - } - - for desc, tc := range testCases { - t.Run(desc, func(t *testing.T) { - server, client, ctx := testDeps(t) - demo.RegisterTypes(server.Registry) - - // Create a resource with finalizers - res := rtest.Resource(demo.TypeV1Artist, "joydivision"). - WithTenancy(resource.DefaultNamespacedTenancy()). - WithData(t, &pbdemo.Artist{Name: "Joy Division"}). - WithMeta(resource.FinalizerKey, "finalizer1 finalizer2"). - Write(t, client) - - // Mark for deletion - resource should now be frozen - _, err := client.Delete(ctx, &pbresource.DeleteRequest{Id: res.Id}) - require.NoError(t, err) - - // Verify marked for deletion - rsp, err := client.Read(ctx, &pbresource.ReadRequest{Id: res.Id}) - require.NoError(t, err) - require.True(t, resource.IsMarkedForDeletion(rsp.Resource)) - - // Apply test case mods - tc.modFn(rsp.Resource) - - // Verify write results - _, err = client.Write(ctx, &pbresource.WriteRequest{Resource: rsp.Resource}) - if tc.errContains == "" { - require.NoError(t, err) - } else { - require.Error(t, err) - require.Equal(t, codes.InvalidArgument.String(), status.Code(err).String()) - require.ErrorContains(t, err, tc.errContains) - } - }) - } -} - -func TestWrite_NonCASWritePreservesFinalizers(t *testing.T) { - type testCase struct { - existingMeta map[string]string - inputMeta map[string]string - expectedMeta map[string]string - } - testCases := map[string]testCase{ - "input nil metadata preserves existing finalizers": { - inputMeta: nil, - existingMeta: map[string]string{resource.FinalizerKey: "finalizer1 finalizer2"}, - expectedMeta: map[string]string{resource.FinalizerKey: "finalizer1 finalizer2"}, - }, - "input metadata and no finalizer key preserves existing finalizers": { - inputMeta: map[string]string{}, - existingMeta: map[string]string{resource.FinalizerKey: "finalizer1 finalizer2"}, - expectedMeta: map[string]string{resource.FinalizerKey: "finalizer1 finalizer2"}, - }, - "input metadata and with empty finalizer key overwrites existing finalizers": { - inputMeta: map[string]string{resource.FinalizerKey: ""}, - existingMeta: map[string]string{resource.FinalizerKey: "finalizer1 finalizer2"}, - expectedMeta: map[string]string{resource.FinalizerKey: ""}, - }, - "input metadata with one finalizer key overwrites multiple existing finalizers": { - inputMeta: map[string]string{resource.FinalizerKey: "finalizer2"}, - existingMeta: map[string]string{resource.FinalizerKey: "finalizer1 finalizer2"}, - expectedMeta: map[string]string{resource.FinalizerKey: "finalizer2"}, - }, - } - - for desc, tc := range testCases { - t.Run(desc, func(t *testing.T) { - server, client, ctx := testDeps(t) - demo.RegisterTypes(server.Registry) - - // Create the resource based on tc.existingMetadata - builder := rtest.Resource(demo.TypeV1Artist, "joydivision"). - WithTenancy(resource.DefaultNamespacedTenancy()). - WithData(t, &pbdemo.Artist{Name: "Joy"}) - - if tc.existingMeta != nil { - for k, v := range tc.existingMeta { - builder.WithMeta(k, v) - } - } - res := builder.Write(t, client) - - // Build resource for user write based on tc.inputMetadata - builder = rtest.Resource(demo.TypeV1Artist, res.Id.Name). - WithTenancy(resource.DefaultNamespacedTenancy()). - WithData(t, &pbdemo.Artist{Name: "Joy Division"}) - - if tc.inputMeta != nil { - for k, v := range tc.inputMeta { - builder.WithMeta(k, v) - } - } - userRes := builder.Build() - - // Perform the user write - rsp, err := client.Write(ctx, &pbresource.WriteRequest{Resource: userRes}) - require.NoError(t, err) - - // Verify write result preserved metadata based on testcase.expecteMetadata - for k := range tc.expectedMeta { - require.Equal(t, tc.expectedMeta[k], rsp.Resource.Metadata[k]) - } - require.Equal(t, len(tc.expectedMeta), len(rsp.Resource.Metadata)) - }) - } -} - -func TestWrite_NonCASWritePreservesDeletionTimestamp(t *testing.T) { - type testCase struct { - existingMeta map[string]string - inputMeta map[string]string - expectedMeta map[string]string - } - - // deletionTimestamp has to be generated via Delete() call and can't be embedded in testdata - // even though testcase desc refers to it. - testCases := map[string]testCase{ - "input metadata no deletion timestamp preserves existing deletion timestamp and removes single finalizer": { - inputMeta: map[string]string{resource.FinalizerKey: "finalizer1"}, - existingMeta: map[string]string{resource.FinalizerKey: "finalizer1 finalizer2"}, - expectedMeta: map[string]string{resource.FinalizerKey: "finalizer1"}, - }, - "input metadata no deletion timestamp preserves existing deletion timestamp and removes all finalizers": { - inputMeta: map[string]string{resource.FinalizerKey: ""}, - existingMeta: map[string]string{resource.FinalizerKey: "finalizer1 finalizer2"}, - expectedMeta: map[string]string{resource.FinalizerKey: ""}, - }, - } - - for desc, tc := range testCases { - t.Run(desc, func(t *testing.T) { - server, client, ctx := testDeps(t) - demo.RegisterTypes(server.Registry) - - // Create the resource based on tc.existingMetadata - builder := rtest.Resource(demo.TypeV1Artist, "joydivision"). - WithTenancy(resource.DefaultNamespacedTenancy()). - WithData(t, &pbdemo.Artist{Name: "Joy Division"}) - - if tc.existingMeta != nil { - for k, v := range tc.existingMeta { - builder.WithMeta(k, v) - } - } - res := builder.Write(t, client) - - // Mark for deletion - _, err := client.Delete(ctx, &pbresource.DeleteRequest{Id: res.Id}) - require.NoError(t, err) - - // Re-read the deleted res for future comparison of deletionTimestamp - delRsp, err := client.Read(ctx, &pbresource.ReadRequest{Id: res.Id}) - require.NoError(t, err) - - // Build resource for user write based on tc.inputMetadata - builder = rtest.Resource(demo.TypeV1Artist, res.Id.Name). - WithTenancy(resource.DefaultNamespacedTenancy()). - WithData(t, &pbdemo.Artist{Name: "Joy Division"}) - - if tc.inputMeta != nil { - for k, v := range tc.inputMeta { - builder.WithMeta(k, v) - } - } - userRes := builder.Build() - - // Perform the non-CAS user write - rsp, err := client.Write(ctx, &pbresource.WriteRequest{Resource: userRes}) - require.NoError(t, err) - - // Verify write result preserved metadata based on testcase.expecteMetadata - for k := range tc.expectedMeta { - require.Equal(t, tc.expectedMeta[k], rsp.Resource.Metadata[k]) - } - // Verify deletion timestamp preserved even though it wasn't passed in to the write - require.Equal(t, delRsp.Resource.Metadata[resource.DeletionTimestampKey], rsp.Resource.Metadata[resource.DeletionTimestampKey]) - }) - } -} diff --git a/agent/grpc-middleware/testutil/testservice/simple.pb.go b/agent/grpc-middleware/testutil/testservice/simple.pb.go index b4f664bf1ca73..fcd9fb2fe4a41 100644 --- a/agent/grpc-middleware/testutil/testservice/simple.pb.go +++ b/agent/grpc-middleware/testutil/testservice/simple.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: simple.proto diff --git a/agent/hcp/client/client.go b/agent/hcp/client/client.go index c0526c0e4acf0..597287ca9a69f 100644 --- a/agent/hcp/client/client.go +++ b/agent/hcp/client/client.go @@ -155,6 +155,8 @@ func (c *hcpClient) PushServerStatus(ctx context.Context, s *ServerStatus) error return err } +// ServerStatus is used to collect server status information in order to push +// to HCP. Fields should mirror HashicorpCloudGlobalNetworkManager20220215ServerState type ServerStatus struct { ID string Name string @@ -164,10 +166,15 @@ type ServerStatus struct { RPCPort int Datacenter string - Autopilot ServerAutopilot - Raft ServerRaft - TLS ServerTLSInfo - ACL ServerACLInfo + Autopilot ServerAutopilot + Raft ServerRaft + ACL ServerACLInfo + ServerTLSMetadata ServerTLSMetadata + + // TODO: TLS will be deprecated in favor of ServerTLSInfo in GNM. Handle + // removal in a subsequent PR + // https://hashicorp.atlassian.net/browse/CC-7015 + TLS ServerTLSInfo ScadaStatus string } @@ -191,20 +198,47 @@ type ServerACLInfo struct { Enabled bool } +// ServerTLSInfo mirrors HashicorpCloudGlobalNetworkManager20220215TLSInfo type ServerTLSInfo struct { - Enabled bool - CertExpiry time.Time - CertName string - CertSerial string - VerifyIncoming bool - VerifyOutgoing bool - VerifyServerHostname bool + Enabled bool + CertExpiry time.Time + CertIssuer string + CertName string + CertSerial string + CertificateAuthorities []CertificateMetadata + VerifyIncoming bool + VerifyOutgoing bool + VerifyServerHostname bool +} + +// ServerTLSMetadata mirrors HashicorpCloudGlobalNetworkManager20220215ServerTLSMetadata +type ServerTLSMetadata struct { + InternalRPC ServerTLSInfo +} + +// CertificateMetadata mirrors HashicorpCloudGlobalNetworkManager20220215CertificateMetadata +type CertificateMetadata struct { + CertExpiry time.Time + CertName string + CertSerial string } func serverStatusToHCP(s *ServerStatus) *gnmmod.HashicorpCloudGlobalNetworkManager20220215ServerState { if s == nil { return nil } + + // Convert CA metadata + caCerts := make([]*gnmmod.HashicorpCloudGlobalNetworkManager20220215CertificateMetadata, + len(s.ServerTLSMetadata.InternalRPC.CertificateAuthorities)) + for ix, ca := range s.ServerTLSMetadata.InternalRPC.CertificateAuthorities { + caCerts[ix] = &gnmmod.HashicorpCloudGlobalNetworkManager20220215CertificateMetadata{ + CertExpiry: strfmt.DateTime(ca.CertExpiry), + CertName: ca.CertName, + CertSerial: ca.CertSerial, + } + } + return &gnmmod.HashicorpCloudGlobalNetworkManager20220215ServerState{ Autopilot: &gnmmod.HashicorpCloudGlobalNetworkManager20220215AutoPilotInfo{ FailureTolerance: int32(s.Autopilot.FailureTolerance), @@ -225,6 +259,9 @@ func serverStatusToHCP(s *ServerStatus) *gnmmod.HashicorpCloudGlobalNetworkManag }, RPCPort: int32(s.RPCPort), TLS: &gnmmod.HashicorpCloudGlobalNetworkManager20220215TLSInfo{ + // TODO: remove TLS in preference for ServerTLSMetadata.InternalRPC + // when deprecation path is ready + // https://hashicorp.atlassian.net/browse/CC-7015 CertExpiry: strfmt.DateTime(s.TLS.CertExpiry), CertName: s.TLS.CertName, CertSerial: s.TLS.CertSerial, @@ -233,6 +270,19 @@ func serverStatusToHCP(s *ServerStatus) *gnmmod.HashicorpCloudGlobalNetworkManag VerifyOutgoing: s.TLS.VerifyOutgoing, VerifyServerHostname: s.TLS.VerifyServerHostname, }, + ServerTLS: &gnmmod.HashicorpCloudGlobalNetworkManager20220215ServerTLSMetadata{ + InternalRPC: &gnmmod.HashicorpCloudGlobalNetworkManager20220215TLSInfo{ + CertExpiry: strfmt.DateTime(s.ServerTLSMetadata.InternalRPC.CertExpiry), + CertIssuer: s.ServerTLSMetadata.InternalRPC.CertIssuer, + CertName: s.ServerTLSMetadata.InternalRPC.CertName, + CertSerial: s.ServerTLSMetadata.InternalRPC.CertSerial, + Enabled: s.ServerTLSMetadata.InternalRPC.Enabled, + VerifyIncoming: s.ServerTLSMetadata.InternalRPC.VerifyIncoming, + VerifyOutgoing: s.ServerTLSMetadata.InternalRPC.VerifyOutgoing, + VerifyServerHostname: s.ServerTLSMetadata.InternalRPC.VerifyServerHostname, + CertificateAuthorities: caCerts, + }, + }, Version: s.Version, ScadaStatus: s.ScadaStatus, ACL: &gnmmod.HashicorpCloudGlobalNetworkManager20220215ACLInfo{ diff --git a/agent/hcp/client/mock_CloudConfig.go b/agent/hcp/client/mock_CloudConfig.go index 574f83e55fd59..2dc523f487af4 100644 --- a/agent/hcp/client/mock_CloudConfig.go +++ b/agent/hcp/client/mock_CloudConfig.go @@ -29,6 +29,7 @@ func (m *mockHCPCfg) SCADATLSConfig() *tls.Config { return &tls.Config{} } func (m *mockHCPCfg) APIAddress() string { return "" } func (m *mockHCPCfg) PortalURL() *url.URL { return &url.URL{} } func (m *mockHCPCfg) Profile() *profile.UserProfile { return nil } +func (m *mockHCPCfg) Logout() error { return nil } type MockCloudCfg struct { ConfigErr error diff --git a/agent/hcp/testing.go b/agent/hcp/testing.go index 30f7ba7bcdeb3..1c0f364b0dd34 100644 --- a/agent/hcp/testing.go +++ b/agent/hcp/testing.go @@ -154,7 +154,7 @@ func (s *MockHCPServer) handleStatus(r *http.Request, cluster resource.Resource) req.ServerState.Raft.IsLeader, req.ServerState.Raft.KnownLeader, req.ServerState.Autopilot.Healthy, - time.Until(time.Time(req.ServerState.TLS.CertExpiry)).Hours()/24, + time.Until(time.Time(req.ServerState.ServerTLS.InternalRPC.CertExpiry)).Hours()/24, ) s.servers[req.ServerState.Name] = &gnmmod.HashicorpCloudGlobalNetworkManager20220215Server{ GossipPort: req.ServerState.GossipPort, diff --git a/agent/proxycfg/manager.go b/agent/proxycfg/manager.go index b01787f2c1d12..71b6270fefc41 100644 --- a/agent/proxycfg/manager.go +++ b/agent/proxycfg/manager.go @@ -5,7 +5,6 @@ package proxycfg import ( "errors" - "github.com/hashicorp/consul/lib/channels" "runtime/debug" "sync" @@ -260,15 +259,37 @@ func (m *Manager) notify(snap *ConfigSnapshot) { // it will drain the chan and then re-attempt delivery so that a slow consumer // gets the latest config earlier. This MUST be called from a method where m.mu // is held to be safe since it assumes we are the only goroutine sending on ch. -func (m *Manager) deliverLatest(snap proxysnapshot.ProxySnapshot, ch chan proxysnapshot.ProxySnapshot) { - m.Logger.Trace("delivering latest proxy snapshot to proxy", "proxyID", snap.(*ConfigSnapshot).ProxyID) - err := channels.DeliverLatest(snap, ch) - if err != nil { - m.Logger.Error("failed to deliver proxyState to proxy", - "proxy", snap.(*ConfigSnapshot).ProxyID, - ) +func (m *Manager) deliverLatest(snap *ConfigSnapshot, ch chan proxysnapshot.ProxySnapshot) { + // Send if chan is empty + select { + case ch <- snap: + return + default: + } + + // Not empty, drain the chan of older snapshots and redeliver. For now we only + // use 1-buffered chans but this will still work if we change that later. +OUTER: + for { + select { + case <-ch: + continue + default: + break OUTER + } } + // Now send again + select { + case ch <- snap: + return + default: + // This should not be possible since we should be the only sender, enforced + // by m.mu but error and drop the update rather than panic. + m.Logger.Error("failed to deliver ConfigSnapshot to proxy", + "proxy", snap.ProxyID.String(), + ) + } } // Watch registers a watch on a proxy. It might not exist yet in which case this diff --git a/agent/proxycfg/testing_ingress_gateway.go b/agent/proxycfg/testing_ingress_gateway.go index f178955c18ab4..96918a261bd05 100644 --- a/agent/proxycfg/testing_ingress_gateway.go +++ b/agent/proxycfg/testing_ingress_gateway.go @@ -1364,7 +1364,7 @@ func TestConfigSnapshotIngressGateway_TLSMinVersionListenersGatewayDefaults(t te Port: 8083, Protocol: "http", Services: []structs.IngressService{ - {Name: "s4"}, + {Name: "s3"}, }, TLS: &structs.GatewayTLSConfig{ Enabled: true, diff --git a/agent/structs/acl.go b/agent/structs/acl.go index d856ce0af2eaf..4d76dffa4e8e0 100644 --- a/agent/structs/acl.go +++ b/agent/structs/acl.go @@ -1084,21 +1084,6 @@ const ( // }, // } BindingRuleBindTypeTemplatedPolicy = "templated-policy" - - // BindingRuleBindTypePolicy is the binding rule bind type that only allows - // the binding rule to function if a policy with the given name (BindName) - // exists at login-time. If it does the token that is created is directly - // linked to that policy like: - // - // &ACLToken{ - // ...other fields... - // Policies: *ACLTokenPolicyLink{ - // { Name: "" }, - // } - // } - // - // If it does not exist at login-time the rule is ignored. - BindingRuleBindTypePolicy = "policy" ) type ACLBindingRule struct { @@ -1121,7 +1106,6 @@ type ACLBindingRule struct { // - BindingRuleBindTypeService = "service" // - BindingRuleBindTypeNode = "node" // - BindingRuleBindTypeRole = "role" - // - BindingRuleBindTypePolicy = "policy" // - BindingRuleBindTypeTemplatedPolicy = "templated-policy" BindType string diff --git a/agent/structs/acl_templated_policy.go b/agent/structs/acl_templated_policy.go index 999e0f0d7d10f..04c85515ff1d8 100644 --- a/agent/structs/acl_templated_policy.go +++ b/agent/structs/acl_templated_policy.go @@ -29,6 +29,9 @@ var ACLTemplatedPolicyServiceSchema string //go:embed acltemplatedpolicy/schemas/workload-identity.json var ACLTemplatedPolicyWorkloadIdentitySchema string +//go:embed acltemplatedpolicy/schemas/api-gateway.json +var ACLTemplatedPolicyAPIGatewaySchema string + type ACLTemplatedPolicies []*ACLTemplatedPolicy const ( @@ -37,6 +40,16 @@ const ( ACLTemplatedPolicyDNSID = "00000000-0000-0000-0000-000000000005" ACLTemplatedPolicyNomadServerID = "00000000-0000-0000-0000-000000000006" ACLTemplatedPolicyWorkloadIdentityID = "00000000-0000-0000-0000-000000000007" + ACLTemplatedPolicyAPIGatewayID = "00000000-0000-0000-0000-000000000008" + ACLTemplatedPolicyNomadClientID = "00000000-0000-0000-0000-000000000009" + + ACLTemplatedPolicyServiceDescription = "Gives the token or role permissions to register a service and discover services in the Consul catalog. It also gives the specified service's sidecar proxy the permission to discover and route traffic to other services." + ACLTemplatedPolicyNodeDescription = "Gives the token or role permissions for a register an agent/node into the catalog. A node is typically a consul agent but can also be a physical server, cloud instance or a container." + ACLTemplatedPolicyDNSDescription = "Gives the token or role permissions for the Consul DNS to query services in the network." + ACLTemplatedPolicyNomadServerDescription = "Gives the token or role permissions required for integration with a nomad server." + ACLTemplatedPolicyWorkloadIdentityDescription = "Gives the token or role permissions for a specific workload identity." + ACLTemplatedPolicyAPIGatewayDescription = "Gives the token or role permissions for a Consul api gateway" + ACLTemplatedPolicyNomadClientDescription = "Gives the token or role permissions required for integration with a nomad client." ACLTemplatedPolicyNoRequiredVariablesSchema = "" // catch-all schema for all templated policy that don't require a schema ) @@ -48,6 +61,7 @@ type ACLTemplatedPolicyBase struct { TemplateID string Schema string Template string + Description string } var ( @@ -59,30 +73,49 @@ var ( TemplateName: api.ACLTemplatedPolicyServiceName, Schema: ACLTemplatedPolicyServiceSchema, Template: ACLTemplatedPolicyService, + Description: ACLTemplatedPolicyServiceDescription, }, api.ACLTemplatedPolicyNodeName: { TemplateID: ACLTemplatedPolicyNodeID, TemplateName: api.ACLTemplatedPolicyNodeName, Schema: ACLTemplatedPolicyNodeSchema, Template: ACLTemplatedPolicyNode, + Description: ACLTemplatedPolicyNodeDescription, }, api.ACLTemplatedPolicyDNSName: { TemplateID: ACLTemplatedPolicyDNSID, TemplateName: api.ACLTemplatedPolicyDNSName, Schema: ACLTemplatedPolicyNoRequiredVariablesSchema, Template: ACLTemplatedPolicyDNS, + Description: ACLTemplatedPolicyDNSDescription, }, api.ACLTemplatedPolicyNomadServerName: { TemplateID: ACLTemplatedPolicyNomadServerID, TemplateName: api.ACLTemplatedPolicyNomadServerName, Schema: ACLTemplatedPolicyNoRequiredVariablesSchema, Template: ACLTemplatedPolicyNomadServer, + Description: ACLTemplatedPolicyNomadServerDescription, }, api.ACLTemplatedPolicyWorkloadIdentityName: { TemplateID: ACLTemplatedPolicyWorkloadIdentityID, TemplateName: api.ACLTemplatedPolicyWorkloadIdentityName, Schema: ACLTemplatedPolicyWorkloadIdentitySchema, Template: ACLTemplatedPolicyWorkloadIdentity, + Description: ACLTemplatedPolicyWorkloadIdentityDescription, + }, + api.ACLTemplatedPolicyAPIGatewayName: { + TemplateID: ACLTemplatedPolicyAPIGatewayID, + TemplateName: api.ACLTemplatedPolicyAPIGatewayName, + Schema: ACLTemplatedPolicyAPIGatewaySchema, + Template: ACLTemplatedPolicyAPIGateway, + Description: ACLTemplatedPolicyAPIGatewayDescription, + }, + api.ACLTemplatedPolicyNomadClientName: { + TemplateID: ACLTemplatedPolicyNomadClientID, + TemplateName: api.ACLTemplatedPolicyNomadClientName, + Schema: ACLTemplatedPolicyNoRequiredVariablesSchema, + Template: ACLTemplatedPolicyNomadClient, + Description: ACLTemplatedPolicyNomadClientDescription, }, } ) diff --git a/agent/structs/acl_templated_policy_ce.go b/agent/structs/acl_templated_policy_ce.go index cd9a52248a987..23e656f0fb17e 100644 --- a/agent/structs/acl_templated_policy_ce.go +++ b/agent/structs/acl_templated_policy_ce.go @@ -22,6 +22,12 @@ var ACLTemplatedPolicyNomadServer string //go:embed acltemplatedpolicy/policies/ce/workload-identity.hcl var ACLTemplatedPolicyWorkloadIdentity string +//go:embed acltemplatedpolicy/policies/ce/api-gateway.hcl +var ACLTemplatedPolicyAPIGateway string + +//go:embed acltemplatedpolicy/policies/ce/nomad-client.hcl +var ACLTemplatedPolicyNomadClient string + func (t *ACLToken) TemplatedPolicyList() []*ACLTemplatedPolicy { if len(t.TemplatedPolicies) == 0 { return nil diff --git a/agent/structs/acl_templated_policy_ce_test.go b/agent/structs/acl_templated_policy_ce_test.go index e160a911cb89a..f21292806283a 100644 --- a/agent/structs/acl_templated_policy_ce_test.go +++ b/agent/structs/acl_templated_policy_ce_test.go @@ -95,6 +95,28 @@ query_prefix "" { Description: "synthetic policy generated from templated policy: builtin/workload-identity", Rules: `identity "api" { policy = "write" +}`, + }, + }, + "api-gateway-template": { + templatedPolicy: &ACLTemplatedPolicy{ + TemplateID: ACLTemplatedPolicyAPIGatewayID, + TemplateName: api.ACLTemplatedPolicyAPIGatewayName, + TemplateVariables: &ACLTemplatedPolicyVariables{ + Name: "api-gateway", + }, + }, + expectedPolicy: &ACLPolicy{ + Description: "synthetic policy generated from templated policy: builtin/api-gateway", + Rules: `mesh = "read" +node_prefix "" { + policy = "read" +} +service_prefix "" { + policy = "read" +} +service "api-gateway" { + policy = "write" }`, }, }, diff --git a/agent/structs/acltemplatedpolicy/policies/ce/api-gateway.hcl b/agent/structs/acltemplatedpolicy/policies/ce/api-gateway.hcl new file mode 100644 index 0000000000000..7bb2e49081302 --- /dev/null +++ b/agent/structs/acltemplatedpolicy/policies/ce/api-gateway.hcl @@ -0,0 +1,10 @@ +mesh = "read" +node_prefix "" { + policy = "read" +} +service_prefix "" { + policy = "read" +} +service "{{.Name}}" { + policy = "write" +} \ No newline at end of file diff --git a/agent/structs/acltemplatedpolicy/policies/ce/nomad-client.hcl b/agent/structs/acltemplatedpolicy/policies/ce/nomad-client.hcl new file mode 100644 index 0000000000000..4ea9f1e6df51e --- /dev/null +++ b/agent/structs/acltemplatedpolicy/policies/ce/nomad-client.hcl @@ -0,0 +1,12 @@ +agent_prefix "" { + policy = "read" +} +node_prefix "" { + policy = "read" +} +service_prefix "" { + policy = "write" +} +key_prefix "" { + policy = "read" +} \ No newline at end of file diff --git a/agent/structs/acltemplatedpolicy/schemas/api-gateway.json b/agent/structs/acltemplatedpolicy/schemas/api-gateway.json new file mode 100644 index 0000000000000..8a3d193268217 --- /dev/null +++ b/agent/structs/acltemplatedpolicy/schemas/api-gateway.json @@ -0,0 +1,13 @@ +{ + "type": "object", + "properties": { + "name": { "type": "string", "$ref": "#/definitions/min-length-one" } + }, + "required": ["name"], + "definitions": { + "min-length-one": { + "type": "string", + "minLength": 1 + } + } +} \ No newline at end of file diff --git a/agent/structs/config_entry_gateways.go b/agent/structs/config_entry_gateways.go index 00c2687d1ec96..3c30e24154ae8 100644 --- a/agent/structs/config_entry_gateways.go +++ b/agent/structs/config_entry_gateways.go @@ -4,12 +4,14 @@ package structs import ( + "encoding/json" "fmt" "regexp" "sort" "strings" "github.com/miekg/dns" + "golang.org/x/exp/slices" "github.com/hashicorp/consul/acl" "github.com/hashicorp/consul/lib/stringslice" @@ -928,6 +930,45 @@ func (a *APIGatewayTLSConfiguration) IsEmpty() bool { return len(a.Certificates) == 0 && len(a.MaxVersion) == 0 && len(a.MinVersion) == 0 && len(a.CipherSuites) == 0 } +// ServiceRouteReferences is a map with a key of ServiceName type for a routed to service from a +// bound gateway listener with a value being a slice of resource references of the routes that reference the service +type ServiceRouteReferences map[ServiceName][]ResourceReference + +func (s ServiceRouteReferences) AddService(key ServiceName, routeRef ResourceReference) { + if s[key] == nil { + s[key] = make([]ResourceReference, 0) + } + + if slices.Contains(s[key], routeRef) { + return + } + + s[key] = append(s[key], routeRef) +} + +func (s ServiceRouteReferences) RemoveRouteRef(routeRef ResourceReference) { + for key := range s { + for idx, ref := range s[key] { + if ref.IsSame(&routeRef) { + s[key] = append(s[key][0:idx], s[key][idx+1:]...) + if len(s[key]) == 0 { + delete(s, key) + } + } + } + } +} + +// this is to make the map value serializable for tests that compare the json output of the +// boundAPIGateway +func (s ServiceRouteReferences) MarshalJSON() ([]byte, error) { + m := make(map[string][]ResourceReference, len(s)) + for key, val := range s { + m[key.String()] = val + } + return json.Marshal(m) +} + // BoundAPIGatewayConfigEntry manages the configuration for a bound API // gateway with the given name. This type is never written from the client. // It is only written by the controller in order to represent an API gateway @@ -945,6 +986,9 @@ type BoundAPIGatewayConfigEntry struct { // what certificates and routes have successfully bound to it. Listeners []BoundAPIGatewayListener + // Services are all the services that are routed to from an APIGateway + Services ServiceRouteReferences + Meta map[string]string `json:",omitempty"` acl.EnterpriseMeta `hcl:",squash" mapstructure:",squash"` RaftIndex @@ -975,6 +1019,26 @@ func (e *BoundAPIGatewayConfigEntry) IsSame(other *BoundAPIGatewayConfigEntry) b } } + if len(e.Services) != len(other.Services) { + return false + } + + for key, refs := range e.Services { + if _, ok := other.Services[key]; !ok { + return false + } + + if len(refs) != len(other.Services[key]) { + return false + } + + for idx, ref := range refs { + if !ref.IsSame(&other.Services[key][idx]) { + return false + } + } + } + return true } @@ -1079,6 +1143,18 @@ func (e *BoundAPIGatewayConfigEntry) GetEnterpriseMeta() *acl.EnterpriseMeta { return &e.EnterpriseMeta } +func (e *BoundAPIGatewayConfigEntry) ListRelatedServices() []ServiceID { + if len(e.Services) == 0 { + return nil + } + + ids := make([]ServiceID, 0, len(e.Services)) + for key := range e.Services { + ids = append(ids, key.ToServiceID()) + } + return ids +} + // BoundAPIGatewayListener is an API gateway listener with information // about the routes and certificates that have successfully bound to it. type BoundAPIGatewayListener struct { diff --git a/agent/structs/config_entry_gateways_test.go b/agent/structs/config_entry_gateways_test.go index f05638ec4d2e2..16e8e2cbf50bf 100644 --- a/agent/structs/config_entry_gateways_test.go +++ b/agent/structs/config_entry_gateways_test.go @@ -7,6 +7,8 @@ import ( "testing" "github.com/stretchr/testify/require" + + "github.com/hashicorp/consul/acl" ) func TestIngressGatewayConfigEntry(t *testing.T) { @@ -1566,3 +1568,223 @@ func TestListenerUnbindRoute(t *testing.T) { }) } } + +func Test_ServiceRouteReferences_AddService(t *testing.T) { + t.Parallel() + + key := ServiceName{Name: "service", EnterpriseMeta: acl.EnterpriseMeta{}} + testCases := map[string]struct { + routeRef ResourceReference + subject ServiceRouteReferences + expectedRefs ServiceRouteReferences + }{ + "key does not exist yet": { + routeRef: ResourceReference{ + Kind: "http-route", + Name: "http-route", + }, + subject: make(ServiceRouteReferences), + expectedRefs: ServiceRouteReferences{ + key: []ResourceReference{ + { + Kind: "http-route", + Name: "http-route", + }, + }, + }, + }, + "key exists adding new route": { + routeRef: ResourceReference{ + Kind: "http-route", + Name: "http-route", + }, + subject: ServiceRouteReferences{ + key: []ResourceReference{ + { + Kind: "http-route", + Name: "http-route-other", + }, + }, + }, + + expectedRefs: ServiceRouteReferences{ + key: []ResourceReference{ + { + Kind: "http-route", + Name: "http-route-other", + }, + { + Kind: "http-route", + Name: "http-route", + }, + }, + }, + }, + "key exists adding existing route": { + routeRef: ResourceReference{ + Kind: "http-route", + Name: "http-route", + }, + subject: ServiceRouteReferences{ + key: []ResourceReference{ + { + Kind: "http-route", + Name: "http-route", + }, + }, + }, + + expectedRefs: ServiceRouteReferences{ + key: []ResourceReference{ + { + Kind: "http-route", + Name: "http-route", + }, + }, + }, + }, + } + + for name, tc := range testCases { + t.Run(name, func(t *testing.T) { + tc.subject.AddService(key, tc.routeRef) + + require.Equal(t, tc.subject, tc.expectedRefs) + }) + } +} + +func Test_ServiceRouteReferences_RemoveRouteRef(t *testing.T) { + t.Parallel() + + keySvcOne := ServiceName{Name: "service-one", EnterpriseMeta: acl.EnterpriseMeta{}} + keySvcTwo := ServiceName{Name: "service-two", EnterpriseMeta: acl.EnterpriseMeta{}} + testCases := map[string]struct { + routeRef ResourceReference + subject ServiceRouteReferences + expectedRefs ServiceRouteReferences + }{ + "route ref exists for one service": { + routeRef: ResourceReference{ + Kind: "http-route", + Name: "http-route", + }, + subject: ServiceRouteReferences{ + keySvcOne: []ResourceReference{ + { + Kind: "http-route", + Name: "http-route", + }, + { + Kind: "http-route", + Name: "http-route-other", + }, + }, + keySvcTwo: []ResourceReference{ + { + Kind: "http-route", + Name: "http-route-other", + }, + }, + }, + expectedRefs: ServiceRouteReferences{ + keySvcOne: []ResourceReference{ + { + Kind: "http-route", + Name: "http-route-other", + }, + }, + keySvcTwo: []ResourceReference{ + { + Kind: "http-route", + Name: "http-route-other", + }, + }, + }, + }, + "route ref exists for multiple services": { + routeRef: ResourceReference{ + Kind: "http-route", + Name: "http-route", + }, + + subject: ServiceRouteReferences{ + keySvcOne: []ResourceReference{ + { + Kind: "http-route", + Name: "http-route", + }, + { + Kind: "http-route", + Name: "http-route-other", + }, + }, + keySvcTwo: []ResourceReference{ + { + Kind: "http-route", + Name: "http-route", + }, + { + Kind: "http-route", + Name: "http-route-other", + }, + }, + }, + expectedRefs: ServiceRouteReferences{ + keySvcOne: []ResourceReference{ + { + Kind: "http-route", + Name: "http-route-other", + }, + }, + keySvcTwo: []ResourceReference{ + { + Kind: "http-route", + Name: "http-route-other", + }, + }, + }, + }, + "route exists and is only ref for service--service is removed from refs": { + routeRef: ResourceReference{ + Kind: "http-route", + Name: "http-route", + }, + + subject: ServiceRouteReferences{ + keySvcOne: []ResourceReference{ + { + Kind: "http-route", + Name: "http-route", + }, + }, + keySvcTwo: []ResourceReference{ + { + Kind: "http-route", + Name: "http-route", + }, + { + Kind: "http-route", + Name: "http-route-other", + }, + }, + }, + expectedRefs: ServiceRouteReferences{ + keySvcTwo: []ResourceReference{ + { + Kind: "http-route", + Name: "http-route-other", + }, + }, + }, + }, + } + + for name, tc := range testCases { + t.Run(name, func(t *testing.T) { + tc.subject.RemoveRouteRef(tc.routeRef) + + require.Equal(t, tc.subject, tc.expectedRefs) + }) + } +} diff --git a/agent/structs/structs.deepcopy.go b/agent/structs/structs.deepcopy.go index 017b0c943ca6e..98b118eb21842 100644 --- a/agent/structs/structs.deepcopy.go +++ b/agent/structs/structs.deepcopy.go @@ -1342,6 +1342,17 @@ func (o *BoundAPIGatewayConfigEntry) DeepCopy() *BoundAPIGatewayConfigEntry { } } } + if o.Services != nil { + cp.Services = make(map[ServiceName][]ResourceReference, len(o.Services)) + for k2, v2 := range o.Services { + var cp_Services_v2 []ResourceReference + if v2 != nil { + cp_Services_v2 = make([]ResourceReference, len(v2)) + copy(cp_Services_v2, v2) + } + cp.Services[k2] = cp_Services_v2 + } + } if o.Meta != nil { cp.Meta = make(map[string]string, len(o.Meta)) for k2, v2 := range o.Meta { diff --git a/agent/structs/structs.go b/agent/structs/structs.go index 9b2685946cbeb..5a6fd95118920 100644 --- a/agent/structs/structs.go +++ b/agent/structs/structs.go @@ -10,7 +10,6 @@ import ( "encoding/json" "fmt" "math/rand" - "os" "reflect" "regexp" "sort" @@ -228,9 +227,6 @@ const ( var allowedConsulMetaKeysForMeshGateway = map[string]struct{}{MetaWANFederationKey: {}} -// CEDowngrade indicates if we are in downgrading from ent to ce -var CEDowngrade = os.Getenv("CONSUL_ENTERPRISE_DOWNGRADE_TO_CE") == "true" - var ( NodeMaintCheckID = NewCheckID(NodeMaint, nil) ) diff --git a/agent/ui_endpoint.go b/agent/ui_endpoint.go index d0cc8a5be8329..94c3545647052 100644 --- a/agent/ui_endpoint.go +++ b/agent/ui_endpoint.go @@ -438,7 +438,7 @@ func (s *HTTPHandlers) UIServiceTopology(resp http.ResponseWriter, req *http.Req args.ServiceKind = structs.ServiceKind(kind[0]) switch args.ServiceKind { - case structs.ServiceKindTypical, structs.ServiceKindIngressGateway: + case structs.ServiceKindTypical, structs.ServiceKindIngressGateway, structs.ServiceKindAPIGateway: // allowed default: return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Unsupported service kind %q", args.ServiceKind)} @@ -669,7 +669,7 @@ func prepSummaryOutput(summaries map[structs.PeeredServiceName]*ServiceSummary, sum.ChecksCritical++ } } - if excludeSidecars && sum.Kind != structs.ServiceKindTypical && sum.Kind != structs.ServiceKindIngressGateway { + if excludeSidecars && sum.Kind != structs.ServiceKindTypical && sum.Kind != structs.ServiceKindIngressGateway && sum.Kind != structs.ServiceKindAPIGateway { continue } resp = append(resp, sum) diff --git a/agent/uiserver/dist/assets/chunk.83.85cc25a28afe28f711a3.js b/agent/uiserver/dist/assets/chunk.121.ea70a154d4cf1227b100.js similarity index 99% rename from agent/uiserver/dist/assets/chunk.83.85cc25a28afe28f711a3.js rename to agent/uiserver/dist/assets/chunk.121.ea70a154d4cf1227b100.js index d49ebc2f6d6ff..937fa68879d85 100644 --- a/agent/uiserver/dist/assets/chunk.83.85cc25a28afe28f711a3.js +++ b/agent/uiserver/dist/assets/chunk.121.ea70a154d4cf1227b100.js @@ -1,4 +1,4 @@ -"use strict";(globalThis.webpackChunk_ember_auto_import_=globalThis.webpackChunk_ember_auto_import_||[]).push([[83],{7083:(e,t,o)=>{o.r(t),o.d(t,{default:()=>_}) +"use strict";(globalThis.webpackChunk_ember_auto_import_=globalThis.webpackChunk_ember_auto_import_||[]).push([[121],{4121:(e,t,o)=>{o.r(t),o.d(t,{default:()=>_}) var i=window.CustomEvent function n(e,t){var o="on"+t.type.toLowerCase() return"function"==typeof e[o]&&e[o](t),e.dispatchEvent(t)}function a(e){for(;e;){if("dialog"===e.localName)return e diff --git a/agent/uiserver/dist/assets/chunk.143.30749b40e28f0c692295.css b/agent/uiserver/dist/assets/chunk.143.30749b40e28f0c692295.css new file mode 100644 index 0000000000000..f066b66e7f30d --- /dev/null +++ b/agent/uiserver/dist/assets/chunk.143.30749b40e28f0c692295.css @@ -0,0 +1,3 @@ +.tippy-box[data-placement^=top]>.tippy-svg-arrow{bottom:0}.tippy-box[data-placement^=top]>.tippy-svg-arrow:after,.tippy-box[data-placement^=top]>.tippy-svg-arrow>svg{top:16px;transform:rotate(180deg)}.tippy-box[data-placement^=bottom]>.tippy-svg-arrow{top:0}.tippy-box[data-placement^=bottom]>.tippy-svg-arrow>svg{bottom:16px}.tippy-box[data-placement^=left]>.tippy-svg-arrow{right:0}.tippy-box[data-placement^=left]>.tippy-svg-arrow:after,.tippy-box[data-placement^=left]>.tippy-svg-arrow>svg{transform:rotate(90deg);top:calc(50% - 3px);left:11px}.tippy-box[data-placement^=right]>.tippy-svg-arrow{left:0}.tippy-box[data-placement^=right]>.tippy-svg-arrow:after,.tippy-box[data-placement^=right]>.tippy-svg-arrow>svg{transform:rotate(-90deg);top:calc(50% - 3px);right:11px}.tippy-svg-arrow{width:16px;height:16px;fill:#333;text-align:initial}.tippy-svg-arrow,.tippy-svg-arrow>svg{position:absolute} + +/*# sourceMappingURL=chunk.143.30749b40e28f0c692295.css-68f4950fab34e7ff0e45d48a25a6e5f7.map*/ \ No newline at end of file diff --git a/agent/uiserver/dist/assets/chunk.143.30749b40e28f0c692295.js b/agent/uiserver/dist/assets/chunk.143.30749b40e28f0c692295.js new file mode 100644 index 0000000000000..991d9d511e66c --- /dev/null +++ b/agent/uiserver/dist/assets/chunk.143.30749b40e28f0c692295.js @@ -0,0 +1,52 @@ +var __ember_auto_import__;(()=>{var e,r,t,n={1292:e=>{"use strict" +e.exports=require("@ember/application")},6354:e=>{"use strict" +e.exports=require("@ember/component/helper")},3353:e=>{"use strict" +e.exports=require("@ember/debug")},9341:e=>{"use strict" +e.exports=require("@ember/destroyable")},4927:e=>{"use strict" +e.exports=require("@ember/modifier")},7219:e=>{"use strict" +e.exports=require("@ember/object")},8773:e=>{"use strict" +e.exports=require("@ember/runloop")},8574:e=>{"use strict" +e.exports=require("@ember/service")},1866:e=>{"use strict" +e.exports=require("@ember/utils")},3638:(e,r,t)=>{var n,o +e.exports=(n=_eai_d,o=_eai_r,window.emberAutoImportDynamic=function(e){return 1===arguments.length?o("_eai_dyn_"+e):o("_eai_dynt_"+e)(Array.prototype.slice.call(arguments,1))},window.emberAutoImportSync=function(e){return o("_eai_sync_"+e)(Array.prototype.slice.call(arguments,1))},n("@hashicorp/flight-icons/svg",[],(function(){return t(6604)})),n("@hashicorp/flight-icons/svg-sprite/svg-sprite-module",[],(function(){return t(2654)})),n("@lit/reactive-element",[],(function(){return t(8531)})),n("@xstate/fsm",[],(function(){return t(7440)})),n("a11y-dialog",[],(function(){return t(1413)})),n("base64-js",[],(function(){return t(8294)})),n("clipboard",[],(function(){return t(9079)})),n("d3-array",[],(function(){return t(5447)})),n("d3-scale",[],(function(){return t(5134)})),n("d3-scale-chromatic",[],(function(){return t(2331)})),n("d3-selection",[],(function(){return t(8740)})),n("d3-shape",[],(function(){return t(5043)})),n("dayjs",[],(function(){return t(2350)})),n("dayjs/plugin/calendar",[],(function(){return t(8888)})),n("dayjs/plugin/relativeTime",[],(function(){return t(2543)})),n("deepmerge",[],(function(){return t(3924)})),n("ember-focus-trap/modifiers/focus-trap.js",["@ember/modifier"],(function(){return t(3109)})),n("ember-keyboard/helpers/if-key.js",["@ember/component/helper","@ember/debug","@ember/utils"],(function(){return t(3481)})),n("ember-keyboard/helpers/on-key.js",["@ember/component/helper","@ember/debug","@ember/service"],(function(){return t(6415)})),n("ember-keyboard/modifiers/on-key.js",["@ember/application","@ember/modifier","@ember/destroyable","@ember/service","@ember/object","@ember/debug","@ember/utils"],(function(){return t(4146)})),n("ember-keyboard/services/keyboard.js",["@ember/service","@ember/application","@ember/object","@ember/runloop","@ember/debug","@ember/utils"],(function(){return t(9690)})),n("ember-modifier",["@ember/application","@ember/modifier","@ember/destroyable"],(function(){return t(2509)})),n("fast-memoize",[],(function(){return t(3276)})),n("flat",[],(function(){return t(2349)})),n("intl-messageformat",[],(function(){return t(5861)})),n("intl-messageformat-parser",[],(function(){return t(5011)})),n("mnemonist/multi-map",[],(function(){return t(5709)})),n("mnemonist/set",[],(function(){return t(2519)})),n("ngraph.graph",[],(function(){return t(6001)})),n("parse-duration",[],(function(){return t(89)})),n("pretty-ms",[],(function(){return t(9837)})),n("tippy.js",[],(function(){return t(9640)})),n("tippy.js/dist/svg-arrow.css",[],(function(){return t(2959)})),n("validated-changeset",[],(function(){return t(6885)})),n("wayfarer",[],(function(){return t(7116)})),n("_eai_dyn_dialog-polyfill",[],(function(){return t.e(121).then(t.bind(t,4121))})),void n("_eai_dyn_dialog-polyfill-css",[],(function(){return t.e(744).then(t.bind(t,7744))})))},5428:function(e,r){window._eai_r=require,window._eai_d=define}},o={} +function i(e){var r=o[e] +if(void 0!==r)return r.exports +var t=o[e]={exports:{}} +return n[e].call(t.exports,t,t.exports,i),t.exports}i.m=n,e=[],i.O=(r,t,n,o)=>{if(!t){var u=1/0 +for(l=0;l=o)&&Object.keys(i.O).every((e=>i.O[e](t[s])))?t.splice(s--,1):(a=!1,o0&&e[l-1][2]>o;l--)e[l]=e[l-1] +e[l]=[t,n,o]},i.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e +return i.d(r,{a:r}),r},i.d=(e,r)=>{for(var t in r)i.o(r,t)&&!i.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},i.f={},i.e=e=>Promise.all(Object.keys(i.f).reduce(((r,t)=>(i.f[t](e,r),r)),[])),i.u=e=>"chunk."+e+"."+{121:"ea70a154d4cf1227b100",744:"60c31f269c98ac39ce46"}[e]+".js",i.miniCssF=e=>"chunk."+e+".60c31f269c98ac39ce46.css",i.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),r={},t="__ember_auto_import__:",i.l=(e,n,o,u)=>{if(r[e])r[e].push(n) +else{var a,s +if(void 0!==o)for(var c=document.getElementsByTagName("script"),l=0;l{a.onerror=a.onload=null,clearTimeout(f) +var o=r[e] +if(delete r[e],a.parentNode&&a.parentNode.removeChild(a),o&&o.forEach((e=>e(n))),t)return t(n)},f=setTimeout(m.bind(null,void 0,{type:"timeout",target:a}),12e4) +a.onerror=m.bind(null,a.onerror),a.onload=m.bind(null,a.onload),s&&document.head.appendChild(a)}},i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.p="{{.ContentPath}}assets/",(()=>{if("undefined"!=typeof document){var e={143:0} +i.f.miniCss=(r,t)=>{e[r]?t.push(e[r]):0!==e[r]&&{744:1}[r]&&t.push(e[r]=(e=>new Promise(((r,t)=>{var n=i.miniCssF(e),o=i.p+n +if(((e,r)=>{for(var t=document.getElementsByTagName("link"),n=0;n{var i=document.createElement("link") +i.rel="stylesheet",i.type="text/css",i.onerror=i.onload=t=>{if(i.onerror=i.onload=null,"load"===t.type)n() +else{var u=t&&("load"===t.type?"missing":t.type),a=t&&t.target&&t.target.href||r,s=new Error("Loading CSS chunk "+e+" failed.\n("+a+")") +s.code="CSS_CHUNK_LOAD_FAILED",s.type=u,s.request=a,i.parentNode&&i.parentNode.removeChild(i),o(s)}},i.href=r,document.head.appendChild(i)})(e,o,0,r,t)})))(r).then((()=>{e[r]=0}),(t=>{throw delete e[r],t})))}}})(),(()=>{var e={143:0} +i.f.j=(r,t)=>{var n=i.o(e,r)?e[r]:void 0 +if(0!==n)if(n)t.push(n[2]) +else{var o=new Promise(((t,o)=>n=e[r]=[t,o])) +t.push(n[2]=o) +var u=i.p+i.u(r),a=new Error +i.l(u,(t=>{if(i.o(e,r)&&(0!==(n=e[r])&&(e[r]=void 0),n)){var o=t&&("load"===t.type?"missing":t.type),u=t&&t.target&&t.target.src +a.message="Loading chunk "+r+" failed.\n("+o+": "+u+")",a.name="ChunkLoadError",a.type=o,a.request=u,n[1](a)}}),"chunk-"+r,r)}},i.O.j=r=>0===e[r] +var r=(r,t)=>{var n,o,[u,a,s]=t,c=0 +if(u.some((r=>0!==e[r]))){for(n in a)i.o(a,n)&&(i.m[n]=a[n]) +if(s)var l=s(i)}for(r&&r(t);ci(5428))) +var u=i.O(void 0,[924],(()=>i(3638))) +u=i.O(u),__ember_auto_import__=u})() diff --git a/agent/uiserver/dist/assets/chunk.143.ff39f0b820a97e2c6d5d.js b/agent/uiserver/dist/assets/chunk.143.ff39f0b820a97e2c6d5d.js deleted file mode 100644 index 343ded1152bc2..0000000000000 --- a/agent/uiserver/dist/assets/chunk.143.ff39f0b820a97e2c6d5d.js +++ /dev/null @@ -1,52 +0,0 @@ -var __ember_auto_import__;(()=>{var e,r,t,n,o,i={6466:(e,r,t)=>{var n,o -e.exports=(n=_eai_d,o=_eai_r,window.emberAutoImportDynamic=function(e){return 1===arguments.length?o("_eai_dyn_"+e):o("_eai_dynt_"+e)(Array.prototype.slice.call(arguments,1))},window.emberAutoImportSync=function(e){return o("_eai_sync_"+e)(Array.prototype.slice.call(arguments,1))},n("@hashicorp/flight-icons/svg",[],(function(){return t(218)})),n("@lit/reactive-element",[],(function(){return t(3493)})),n("@xstate/fsm",[],(function(){return t(9454)})),n("a11y-dialog",[],(function(){return t(6313)})),n("base64-js",[],(function(){return t(3305)})),n("clipboard",[],(function(){return t(2309)})),n("d3-array",[],(function(){return t(1286)})),n("d3-scale",[],(function(){return t(113)})),n("d3-scale-chromatic",[],(function(){return t(9677)})),n("d3-selection",[],(function(){return t(1058)})),n("d3-shape",[],(function(){return t(6736)})),n("dayjs",[],(function(){return t(4434)})),n("dayjs/plugin/calendar",[],(function(){return t(9379)})),n("dayjs/plugin/relativeTime",[],(function(){return t(8275)})),n("deepmerge",[],(function(){return t(2999)})),n("ember-focus-trap/modifiers/focus-trap.js",[],(function(){return t(6673)})),n("ember-keyboard/helpers/if-key.js",[],(function(){return t(6866)})),n("ember-keyboard/helpers/on-key.js",[],(function(){return t(9930)})),n("ember-keyboard/modifiers/on-key.js",[],(function(){return t(6222)})),n("ember-keyboard/services/keyboard.js",[],(function(){return t(6918)})),n("fast-deep-equal",[],(function(){return t(7889)})),n("fast-memoize",[],(function(){return t(4564)})),n("flat",[],(function(){return t(8581)})),n("intersection-observer-admin",[],(function(){return t(2914)})),n("intl-messageformat",[],(function(){return t(4143)})),n("intl-messageformat-parser",[],(function(){return t(4857)})),n("mnemonist/multi-map",[],(function(){return t(6196)})),n("mnemonist/set",[],(function(){return t(3333)})),n("ngraph.graph",[],(function(){return t(1832)})),n("parse-duration",[],(function(){return t(1813)})),n("pretty-ms",[],(function(){return t(3385)})),n("raf-pool",[],(function(){return t(7114)})),n("tippy.js",[],(function(){return t(1499)})),n("validated-changeset",[],(function(){return t(6530)})),n("wayfarer",[],(function(){return t(6841)})),n("_eai_dyn_dialog-polyfill",[],(function(){return t.e(83).then(t.bind(t,7083))})),void n("_eai_dyn_dialog-polyfill-css",[],(function(){return t.e(744).then(t.bind(t,7744))})))},6760:function(e,r){window._eai_r=require,window._eai_d=define},1292:e=>{"use strict" -e.exports=require("@ember/application")},8797:e=>{"use strict" -e.exports=require("@ember/component/helper")},3353:e=>{"use strict" -e.exports=require("@ember/debug")},9341:e=>{"use strict" -e.exports=require("@ember/destroyable")},4927:e=>{"use strict" -e.exports=require("@ember/modifier")},7219:e=>{"use strict" -e.exports=require("@ember/object")},8773:e=>{"use strict" -e.exports=require("@ember/runloop")},8574:e=>{"use strict" -e.exports=require("@ember/service")},1866:e=>{"use strict" -e.exports=require("@ember/utils")},5831:e=>{"use strict" -e.exports=require("ember-modifier")}},u={} -function a(e){var r=u[e] -if(void 0!==r)return r.exports -var t=u[e]={exports:{}} -return i[e].call(t.exports,t,t.exports,a),t.exports}a.m=i,e=[],a.O=(r,t,n,o)=>{if(!t){var i=1/0 -for(l=0;l=o)&&Object.keys(a.O).every((e=>a.O[e](t[s])))?t.splice(s--,1):(u=!1,o0&&e[l-1][2]>o;l--)e[l]=e[l-1] -e[l]=[t,n,o]},a.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e -return a.d(r,{a:r}),r},a.d=(e,r)=>{for(var t in r)a.o(r,t)&&!a.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},a.f={},a.e=e=>Promise.all(Object.keys(a.f).reduce(((r,t)=>(a.f[t](e,r),r)),[])),a.u=e=>"chunk."+e+"."+{83:"85cc25a28afe28f711a3",744:"c0eb6726020fc4af8d3f"}[e]+".js",a.miniCssF=e=>"chunk."+e+".c0eb6726020fc4af8d3f.css",a.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),r={},t="__ember_auto_import__:",a.l=(e,n,o,i)=>{if(r[e])r[e].push(n) -else{var u,s -if(void 0!==o)for(var c=document.getElementsByTagName("script"),l=0;l{u.onerror=u.onload=null,clearTimeout(p) -var o=r[e] -if(delete r[e],u.parentNode&&u.parentNode.removeChild(u),o&&o.forEach((e=>e(n))),t)return t(n)},p=setTimeout(d.bind(null,void 0,{type:"timeout",target:u}),12e4) -u.onerror=d.bind(null,u.onerror),u.onload=d.bind(null,u.onload),s&&document.head.appendChild(u)}},a.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.p="{{.ContentPath}}assets/",n=e=>new Promise(((r,t)=>{var n=a.miniCssF(e),o=a.p+n -if(((e,r)=>{for(var t=document.getElementsByTagName("link"),n=0;n{var o=document.createElement("link") -o.rel="stylesheet",o.type="text/css",o.onerror=o.onload=i=>{if(o.onerror=o.onload=null,"load"===i.type)t() -else{var u=i&&("load"===i.type?"missing":i.type),a=i&&i.target&&i.target.href||r,s=new Error("Loading CSS chunk "+e+" failed.\n("+a+")") -s.code="CSS_CHUNK_LOAD_FAILED",s.type=u,s.request=a,o.parentNode.removeChild(o),n(s)}},o.href=r,document.head.appendChild(o)})(e,o,r,t)})),o={143:0},a.f.miniCss=(e,r)=>{o[e]?r.push(o[e]):0!==o[e]&&{744:1}[e]&&r.push(o[e]=n(e).then((()=>{o[e]=0}),(r=>{throw delete o[e],r})))},(()=>{var e={143:0} -a.f.j=(r,t)=>{var n=a.o(e,r)?e[r]:void 0 -if(0!==n)if(n)t.push(n[2]) -else{var o=new Promise(((t,o)=>n=e[r]=[t,o])) -t.push(n[2]=o) -var i=a.p+a.u(r),u=new Error -a.l(i,(t=>{if(a.o(e,r)&&(0!==(n=e[r])&&(e[r]=void 0),n)){var o=t&&("load"===t.type?"missing":t.type),i=t&&t.target&&t.target.src -u.message="Loading chunk "+r+" failed.\n("+o+": "+i+")",u.name="ChunkLoadError",u.type=o,u.request=i,n[1](u)}}),"chunk-"+r,r)}},a.O.j=r=>0===e[r] -var r=(r,t)=>{var n,o,[i,u,s]=t,c=0 -if(i.some((r=>0!==e[r]))){for(n in u)a.o(u,n)&&(a.m[n]=u[n]) -if(s)var l=s(a)}for(r&&r(t);ca(6760))) -var s=a.O(void 0,[412],(()=>a(6466))) -s=a.O(s),__ember_auto_import__=s})() diff --git a/agent/uiserver/dist/assets/chunk.178.00380c6ad3fa678e07b6.js b/agent/uiserver/dist/assets/chunk.178.8bf5466faa2ca779a58d.js similarity index 77% rename from agent/uiserver/dist/assets/chunk.178.00380c6ad3fa678e07b6.js rename to agent/uiserver/dist/assets/chunk.178.8bf5466faa2ca779a58d.js index 884e5a3cb9138..448c2c55bbd5a 100644 --- a/agent/uiserver/dist/assets/chunk.178.00380c6ad3fa678e07b6.js +++ b/agent/uiserver/dist/assets/chunk.178.8bf5466faa2ca779a58d.js @@ -1,5 +1,5 @@ -var __ember_auto_import__;(()=>{var r,e={6760:function(r,e){window._eai_r=require,window._eai_d=define},4593:(r,e,t)=>{var o,n -r.exports=(o=_eai_d,n=_eai_r,window.emberAutoImportDynamic=function(r){return 1===arguments.length?n("_eai_dyn_"+r):n("_eai_dynt_"+r)(Array.prototype.slice.call(arguments,1))},window.emberAutoImportSync=function(r){return n("_eai_sync_"+r)(Array.prototype.slice.call(arguments,1))},o("lodash.castarray",[],(function(){return t(5665)})),o("lodash.last",[],(function(){return t(66)})),o("lodash.omit",[],(function(){return t(9254)})),o("qunit",[],(function(){return t(3409)})),void o("yadda",[],(function(){return t(409)})))},9265:()=>{},3642:()=>{}},t={} +var __ember_auto_import__;(()=>{var r,e={9265:()=>{},3642:()=>{},5428:function(r,e){window._eai_r=require,window._eai_d=define},8783:(r,e,t)=>{var o,n +r.exports=(o=_eai_d,n=_eai_r,window.emberAutoImportDynamic=function(r){return 1===arguments.length?n("_eai_dyn_"+r):n("_eai_dynt_"+r)(Array.prototype.slice.call(arguments,1))},window.emberAutoImportSync=function(r){return n("_eai_sync_"+r)(Array.prototype.slice.call(arguments,1))},o("lodash.castarray",[],(function(){return t(9542)})),o("lodash.last",[],(function(){return t(9644)})),o("lodash.omit",[],(function(){return t(1609)})),o("qunit",[],(function(){return t(2053)})),void o("yadda",[],(function(){return t(2216)})))}},t={} function o(r){var n=t[r] if(void 0!==n)return n.exports var i=t[r]={id:r,loaded:!1,exports:{}} @@ -16,6 +16,6 @@ var e=(e,t)=>{var n,i,[a,u,l]=t,_=0 if(a.some((e=>0!==r[e]))){for(n in u)o.o(u,n)&&(o.m[n]=u[n]) if(l)var c=l(o)}for(e&&e(t);_o(6760))) -var n=o.O(void 0,[336],(()=>o(4593))) +t.forEach(e.bind(null,0)),t.push=e.bind(null,t.push.bind(t))})(),o.O(void 0,[778],(()=>o(5428))) +var n=o.O(void 0,[778],(()=>o(8783))) n=o.O(n),__ember_auto_import__=n})() diff --git a/agent/uiserver/dist/assets/chunk.412.2df22e4bf69d8f15ebdb.js b/agent/uiserver/dist/assets/chunk.412.2df22e4bf69d8f15ebdb.js deleted file mode 100644 index eaf09b0c7c704..0000000000000 --- a/agent/uiserver/dist/assets/chunk.412.2df22e4bf69d8f15ebdb.js +++ /dev/null @@ -1,2276 +0,0 @@ -/*! For license information please see chunk.412.2df22e4bf69d8f15ebdb.js.LICENSE.txt */ -(globalThis.webpackChunk_ember_auto_import_=globalThis.webpackChunk_ember_auto_import_||[]).push([[412],{218:(t,e,n)=>{"use strict" -n.r(e),n.d(e,{iconNames:()=>r}) -const r=["loading","running","apple","apple-color","alibaba","alibaba-color","amazon-ecs","amazon-ecs-color","amazon-eks","amazon-eks-color","auth0","auth0-color","aws","aws-color","aws-cloudwatch","aws-cloudwatch-color","aws-ec2","aws-ec2-color","aws-lambda","aws-lambda-color","aws-s3","aws-s3-color","azure","azure-color","azure-aks","azure-aks-color","azure-blob-storage","azure-blob-storage-color","azure-devops","azure-devops-color","azure-vms","azure-vms-color","bitbucket","bitbucket-color","bridgecrew","bridgecrew-color","cisco","cisco-color","codepen","codepen-color","datadog","datadog-color","digital-ocean","digital-ocean-color","docker","docker-color","f5","f5-color","facebook","facebook-color","figma","figma-color","gcp","gcp-color","gitlab","gitlab-color","github","github-color","google","google-color","grafana","grafana-color","helm","helm-color","infracost","infracost-color","kubernetes","kubernetes-color","lightlytics","lightlytics-color","linkedin","linkedin-color","linode","linode-color","linux","linux-color","loom","loom-color","microsoft","microsoft-color","microsoft-teams","microsoft-teams-color","okta","okta-color","oracle","oracle-color","opa","opa-color","pack","pack-color","saml","saml-color","slack","slack-color","snyk","snyk-color","splunk","splunk-color","twitch","twitch-color","twitter","twitter-color","vantage","vantage-color","vmware","vmware-color","youtube","youtube-color","boundary","boundary-color","consul","consul-color","nomad","nomad-color","packer","packer-color","terraform","terraform-color","vagrant","vagrant-color","vault","vault-color","waypoint","waypoint-color","hashicorp","hashicorp-color","hcp","hcp-color","activity","alert-circle","alert-circle-fill","alert-diamond","alert-diamond-fill","alert-triangle","alert-triangle-fill","alert-octagon","alert-octagon-fill","align-center","align-justify","align-left","align-right","api","archive","arrow-down","arrow-down-circle","arrow-down-left","arrow-down-right","arrow-left","arrow-left-circle","arrow-right","arrow-right-circle","arrow-up","arrow-up-circle","arrow-up-left","arrow-up-right","at-sign","award","auto-apply","bank-vault","bar-chart","bar-chart-alt","battery","battery-charging","beaker","bell","bell-active-fill","bell-active","bell-off","bookmark","bookmark-fill","bookmark-add","bookmark-add-fill","bookmark-remove","bookmark-remove-fill","bottom","box","briefcase","bug","build","bulb","calendar","camera","camera-off","caret","cast","certificate","change","change-circle","change-square","check","check-circle","check-circle-fill","check-diamond","check-diamond-fill","check-hexagon","check-hexagon-fill","check-square","check-square-fill","chevron-down","chevron-left","chevron-right","chevron-up","chevrons-down","chevrons-left","chevrons-right","chevrons-up","circle","circle-dot","circle-fill","circle-half","clipboard","clipboard-checked","clipboard-copy","clock","clock-filled","cloud","closed-caption","cloud-check","cloud-download","cloud-lightning","cloud-lock","cloud-off","cloud-upload","cloud-x","code","collections","command","compass","connection","connection-gateway","corner-down-left","corner-down-right","corner-left-down","corner-left-up","corner-right-down","corner-right-up","corner-up-left","corner-up-right","cpu","credit-card","crop","crosshair","dashboard","database","delay","delete","diamond","diamond-fill","disc","discussion-circle","discussion-square","docs","docs-download","docs-link","dollar-sign","dot","dot-half","download","droplet","duplicate","edit","enterprise","entry-point","exit-point","external-link","event","eye","eye-off","fast-forward","file","file-check","file-change","file-diff","file-minus","file-plus","file-source","file-text","file-x","files","film","filter","filter-circle","filter-fill","fingerprint","flag","folder","folder-fill","folder-minus","folder-minus-fill","folder-plus","folder-plus-fill","folder-star","folder-users","frown","gateway","gift","git-branch","git-commit","git-merge","git-pull-request","git-repo","globe","globe-private","government","grid","grid-alt","guide","guide-link","hammer","handshake","hard-drive","hash","headphones","heart","heart-fill","heart-off","help","hexagon","hexagon-fill","history","home","hourglass","identity-user","identity-service","image","inbox","info","info-fill","jump-link","key","keychain","key-values","labyrinth","layers","layout","learn","learn-link","line-chart","line-chart-up","link","list","load-balancer","lock","lock-fill","lock-off","logs","mail","mail-open","mainframe","map","map-pin","maximize","maximize-alt","meh","menu","mesh","message-circle","message-circle-fill","message-square","message-square-fill","mic","mic-off","migrate","minimize","minimize-alt","minus","minus-circle","minus-square","minus-square-fill","minus-plus","minus-plus-circle","minus-plus-square","module","monitor","moon","more-horizontal","more-vertical","mouse-pointer","move","music","navigation","navigation-alt","network","network-alt","newspaper","node","octagon","org","outline","package","paperclip","path","pause","pause-circle","pen-tool","pencil-tool","phone","phone-call","phone-off","pie-chart","pin","pipeline","play","play-circle","plug","plus","plus-circle","plus-square","power","printer","provider","queue","radio","random","redirect","reload","repeat","replication-direct","replication-perf","rewind","rocket","rotate-cw","rotate-ccw","rss","save","scissors","search","send","server","serverless","server-cluster","settings","service","share","shield","shield-alert","shield-check","shield-off","shield-x","shopping-bag","shopping-cart","shuffle","sidebar","sidebar-hide","sidebar-show","sign-in","sign-out","skip","skip-forward","skip-back","slash","slash-square","sliders","smartphone","smile","socket","sort-asc","sort-desc","speaker","square","square-fill","star","star-circle","star-fill","star-off","step","stop-circle","sun","support","swap-horizontal","swap-vertical","switcher","sync","sync-alert","sync-reverse","tablet","tag","target","terminal","terminal-screen","test","thumbs-up","thumbs-down","toggle-left","toggle-right","token","tools","top","trash","trend-down","trend-up","triangle","triangle-fill","truck","tv","type","unfold-open","unfold-close","unlock","upload","user","user-check","user-circle","user-circle-fill","user-minus","user-plus","user-x","users","verified","video","video-off","volume","volume-down","volume-2","volume-x","wall","wand","watch","webhook","wifi","wifi-off","wrench","x","x-circle","x-circle-fill","x-diamond","x-diamond-fill","x-hexagon","x-hexagon-fill","x-square","x-square-fill","zap","zap-off","zoom-in","zoom-out"]},9454:(t,e,n)=>{"use strict" -function r(t,e){var n="function"==typeof Symbol&&t[Symbol.iterator] -if(!n)return t -var r,i,o=n.call(t),a=[] -try{for(;(void 0===e||e-- >0)&&!(r=o.next()).done;)a.push(r.value)}catch(t){i={error:t}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return a}var i -n.r(e),n.d(e,{InterpreterStatus:()=>i,assign:()=>u,createMachine:()=>d,interpret:()=>y}),function(t){t[t.NotStarted=0]="NotStarted",t[t.Running=1]="Running",t[t.Stopped=2]="Stopped"}(i||(i={})) -var o={type:"xstate.init"} -function a(t){return void 0===t?[]:[].concat(t)}function u(t){return{type:"xstate.assign",assignment:t}}function c(t,e){return"string"==typeof(t="string"==typeof t&&e&&e[t]?e[t]:t)?{type:t}:"function"==typeof t?{type:t.name,exec:t}:t}function s(t){return function(e){return t===e}}function f(t){return"string"==typeof t?{type:t}:t}function l(t,e){return{value:t,context:e,actions:[],changed:!1,matches:s(t)}}function h(t,e,n){var r=e,i=!1 -return[t.filter((function(t){if("xstate.assign"===t.type){i=!0 -var e=Object.assign({},r) -return"function"==typeof t.assignment?e=t.assignment(r,n):Object.keys(t.assignment).forEach((function(i){e[i]="function"==typeof t.assignment[i]?t.assignment[i](r,n):t.assignment[i]})),r=e,!1}return!0})),r,i]}function d(t,e){void 0===e&&(e={}) -var n=r(h(a(t.states[t.initial].entry).map((function(t){return c(t,e.actions)})),t.context,o),2),i=n[0],u=n[1],d={config:t,_options:e,initialState:{value:t.initial,actions:i,context:u,matches:s(t.initial)},transition:function(e,n){var i,o,u="string"==typeof e?{value:e,context:t.context}:e,p=u.value,y=u.context,b=f(n),v=t.states[p] -if(v.on){var g=a(v.on[b.type]) -try{for(var m=function(t){var e="function"==typeof Symbol&&Symbol.iterator,n=e&&t[e],r=0 -if(n)return n.call(t) -if(t&&"number"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}} -throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}(g),_=m.next();!_.done;_=m.next()){var w=_.value -if(void 0===w)return l(p,y) -var x="string"==typeof w?{target:w}:w,A=x.target,E=x.actions,k=void 0===E?[]:E,D=x.cond,C=void 0===A -if((void 0===D?function(){return!0}:D)(y,b)){var O=t.states[null!=A?A:p],S=r(h((C?a(k):[].concat(v.exit,k,O.entry).filter((function(t){return t}))).map((function(t){return c(t,d._options.actions)})),y,b),3),M=S[0],F=S[1],T=S[2],B=null!=A?A:p -return{value:B,context:F,actions:M,changed:A!==p||M.length>0||T,matches:s(B)}}}}catch(t){i={error:t}}finally{try{_&&!_.done&&(o=m.return)&&o.call(m)}finally{if(i)throw i.error}}}return l(p,y)}} -return d}var p=function(t,e){return t.actions.forEach((function(n){var r=n.exec -return r&&r(t.context,e)}))} -function y(t){var e=t.initialState,n=i.NotStarted,r=new Set,a={_machine:t,send:function(o){n===i.Running&&(e=t.transition(e,o),p(e,f(o)),r.forEach((function(t){return t(e)})))},subscribe:function(t){return r.add(t),t(e),{unsubscribe:function(){return r.delete(t)}}},start:function(r){if(r){var u="object"==typeof r?r:{context:t.config.context,value:r} -e={value:u.value,actions:[],context:u.context,matches:s(u.value)}}return n=i.Running,p(e,o),a},stop:function(){return n=i.Stopped,r.clear(),a},get state(){return e},get status(){return n}} -return a}},6313:(t,e,n)=>{"use strict" -n.r(e),n.d(e,{default:()=>f}) -var r=['a[href]:not([tabindex^="-"])','area[href]:not([tabindex^="-"])','input:not([type="hidden"]):not([type="radio"]):not([disabled]):not([tabindex^="-"])','input[type="radio"]:not([disabled]):not([tabindex^="-"]):checked','select:not([disabled]):not([tabindex^="-"])','textarea:not([disabled]):not([tabindex^="-"])','button:not([disabled]):not([tabindex^="-"])','iframe:not([tabindex^="-"])','audio[controls]:not([tabindex^="-"])','video[controls]:not([tabindex^="-"])','[contenteditable]:not([tabindex^="-"])','[tabindex]:not([tabindex^="-"])'] -function i(t,e){this._show=this.show.bind(this),this._hide=this.hide.bind(this),this._maintainFocus=this._maintainFocus.bind(this),this._bindKeypress=this._bindKeypress.bind(this),this._previouslyFocused=null,this.container=t,this.dialog=t.querySelector('dialog, [role="dialog"], [role="alertdialog"]'),this.role=this.dialog.getAttribute("role")||"dialog",this.useDialog="show"in this.dialog,this._listeners={},this.create(e)}function o(t){return Array.prototype.slice.call(t)}function a(t,e){return o((e||document).querySelectorAll(t))}function u(t){var e=c(t),n=t.querySelector("[autofocus]")||e[0] -n&&n.focus()}function c(t){return a(r.join(","),t).filter((function(t){return!!(t.offsetWidth||t.offsetHeight||t.getClientRects().length)}))}function s(){a("[data-a11y-dialog]").forEach((function(t){new i(t,t.getAttribute("data-a11y-dialog")||void 0)}))}i.prototype.create=function(t){var e,n,r -return this._targets=this._targets||(r=t,NodeList.prototype.isPrototypeOf(r)?o(r):Element.prototype.isPrototypeOf(r)?[r]:"string"==typeof r?a(r):void 0)||((n=o((e=this.container).parentNode.childNodes).filter((function(t){return 1===t.nodeType}))).splice(n.indexOf(e),1),n),this.shown=this.dialog.hasAttribute("open"),this.dialog.setAttribute("role",this.role),this.useDialog?(this.container.setAttribute("data-a11y-dialog-native",""),this.container.removeAttribute("aria-hidden")):this.shown?this.container.removeAttribute("aria-hidden"):this.container.setAttribute("aria-hidden",!0),this._openers=a('[data-a11y-dialog-show="'+this.container.id+'"]'),this._openers.forEach(function(t){t.addEventListener("click",this._show)}.bind(this)),this._closers=a("[data-a11y-dialog-hide]",this.container).concat(a('[data-a11y-dialog-hide="'+this.container.id+'"]')),this._closers.forEach(function(t){t.addEventListener("click",this._hide)}.bind(this)),this._fire("create"),this},i.prototype.show=function(t){return this.shown||(this.shown=!0,this._previouslyFocused=document.activeElement,this.useDialog?this.dialog.showModal(t instanceof Event?void 0:t):(this.dialog.setAttribute("open",""),this.container.removeAttribute("aria-hidden"),this._targets.forEach((function(t){t.hasAttribute("aria-hidden")&&t.setAttribute("data-a11y-dialog-original-aria-hidden",t.getAttribute("aria-hidden")),t.setAttribute("aria-hidden","true")}))),u(this.dialog),document.body.addEventListener("focus",this._maintainFocus,!0),document.addEventListener("keydown",this._bindKeypress),this._fire("show",t)),this},i.prototype.hide=function(t){return this.shown?(this.shown=!1,this.useDialog?this.dialog.close(t instanceof Event?void 0:t):(this.dialog.removeAttribute("open"),this.container.setAttribute("aria-hidden","true"),this._targets.forEach((function(t){t.hasAttribute("data-a11y-dialog-original-aria-hidden")?(t.setAttribute("aria-hidden",t.getAttribute("data-a11y-dialog-original-aria-hidden")),t.removeAttribute("data-a11y-dialog-original-aria-hidden")):t.removeAttribute("aria-hidden")}))),this._previouslyFocused&&this._previouslyFocused.focus&&this._previouslyFocused.focus(),document.body.removeEventListener("focus",this._maintainFocus,!0),document.removeEventListener("keydown",this._bindKeypress),this._fire("hide",t),this):this},i.prototype.destroy=function(){return this.hide(),this._openers.forEach(function(t){t.removeEventListener("click",this._show)}.bind(this)),this._closers.forEach(function(t){t.removeEventListener("click",this._hide)}.bind(this)),this._fire("destroy"),this._listeners={},this},i.prototype.on=function(t,e){return void 0===this._listeners[t]&&(this._listeners[t]=[]),this._listeners[t].push(e),this},i.prototype.off=function(t,e){var n=(this._listeners[t]||[]).indexOf(e) -return n>-1&&this._listeners[t].splice(n,1),this},i.prototype._fire=function(t,e){(this._listeners[t]||[]).forEach(function(t){t(this.container,e)}.bind(this))},i.prototype._bindKeypress=function(t){this.dialog.contains(document.activeElement)&&(this.shown&&27===t.which&&"alertdialog"!==this.role&&(t.preventDefault(),this.hide(t)),this.shown&&9===t.which&&function(t,e){var n=c(t),r=n.indexOf(document.activeElement) -e.shiftKey&&0===r?(n[n.length-1].focus(),e.preventDefault()):e.shiftKey||r!==n.length-1||(n[0].focus(),e.preventDefault())}(this.dialog,t))},i.prototype._maintainFocus=function(t){var e=t.target.getAttribute("data-a11y-dialog-show") -this.shown&&!this.container.contains(t.target)&&e===this.container.id&&u(this.container)},"undefined"!=typeof document&&("loading"===document.readyState?document.addEventListener("DOMContentLoaded",s):window.requestAnimationFrame?window.requestAnimationFrame(s):window.setTimeout(s,16)) -const f=i},3305:(t,e)=>{"use strict" -e.byteLength=function(t){var e=c(t),n=e[0],r=e[1] -return 3*(n+r)/4-r},e.toByteArray=function(t){var e,n,o=c(t),a=o[0],u=o[1],s=new i(function(t,e,n){return 3*(e+n)/4-n}(0,a,u)),f=0,l=u>0?a-4:a -for(n=0;n>16&255,s[f++]=e>>8&255,s[f++]=255&e -return 2===u&&(e=r[t.charCodeAt(n)]<<2|r[t.charCodeAt(n+1)]>>4,s[f++]=255&e),1===u&&(e=r[t.charCodeAt(n)]<<10|r[t.charCodeAt(n+1)]<<4|r[t.charCodeAt(n+2)]>>2,s[f++]=e>>8&255,s[f++]=255&e),s},e.fromByteArray=function(t){for(var e,r=t.length,i=r%3,o=[],a=16383,u=0,c=r-i;uc?c:u+a)) -return 1===i?(e=t[r-1],o.push(n[e>>2]+n[e<<4&63]+"==")):2===i&&(e=(t[r-2]<<8)+t[r-1],o.push(n[e>>10]+n[e>>4&63]+n[e<<2&63]+"=")),o.join("")} -for(var n=[],r=[],i="undefined"!=typeof Uint8Array?Uint8Array:Array,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=0,u=o.length;a0)throw new Error("Invalid string. Length must be a multiple of 4") -var n=t.indexOf("=") -return-1===n&&(n=e),[n,n===e?0:4-n%4]}function s(t,e,r){for(var i,o,a=[],u=e;u>18&63]+n[o>>12&63]+n[o>>6&63]+n[63&o]) -return a.join("")}r["-".charCodeAt(0)]=62,r["_".charCodeAt(0)]=63},2309:function(t){var e -e=function(){return function(){var t={134:function(t,e,n){"use strict" -n.d(e,{default:function(){return m}}) -var r=n(279),i=n.n(r),o=n(370),a=n.n(o),u=n(817),c=n.n(u) -function s(t){return s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},s(t)}var f=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.resolveOptions(e),this.initSelection()}var n -return n=[{key:"resolveOptions",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{} -this.action=t.action,this.container=t.container,this.emitter=t.emitter,this.target=t.target,this.text=t.text,this.trigger=t.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"createFakeElement",value:function(){var t="rtl"===document.documentElement.getAttribute("dir") -this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[t?"right":"left"]="-9999px" -var e=window.pageYOffset||document.documentElement.scrollTop -return this.fakeElem.style.top="".concat(e,"px"),this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,this.fakeElem}},{key:"selectFake",value:function(){var t=this,e=this.createFakeElement() -this.fakeHandlerCallback=function(){return t.removeFake()},this.fakeHandler=this.container.addEventListener("click",this.fakeHandlerCallback)||!0,this.container.appendChild(e),this.selectedText=c()(e),this.copyText(),this.removeFake()}},{key:"removeFake",value:function(){this.fakeHandler&&(this.container.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=c()(this.target),this.copyText()}},{key:"copyText",value:function(){var t -try{t=document.execCommand(this.action)}catch(e){t=!1}this.handleResult(t)}},{key:"handleResult",value:function(t){this.emitter.emit(t?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.trigger&&this.trigger.focus(),document.activeElement.blur(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"copy" -if(this._action=t,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(t){if(void 0!==t){if(!t||"object"!==s(t)||1!==t.nodeType)throw new Error('Invalid "target" value, use a valid Element') -if("copy"===this.action&&t.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute') -if("cut"===this.action&&(t.hasAttribute("readonly")||t.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes') -this._target=t}},get:function(){return this._target}}],n&&function(t,e){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{} -this.action="function"==typeof t.action?t.action:this.defaultAction,this.target="function"==typeof t.target?t.target:this.defaultTarget,this.text="function"==typeof t.text?t.text:this.defaultText,this.container="object"===h(t.container)?t.container:document.body}},{key:"listenClick",value:function(t){var e=this -this.listener=a()(t,"click",(function(t){return e.onClick(t)}))}},{key:"onClick",value:function(t){var e=t.delegateTarget||t.currentTarget -this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new l({action:this.action(e),target:this.target(e),text:this.text(e),container:this.container,trigger:e,emitter:this})}},{key:"defaultAction",value:function(t){return v("action",t)}},{key:"defaultTarget",value:function(t){var e=v("target",t) -if(e)return document.querySelector(e)}},{key:"defaultText",value:function(t){return v("text",t)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],r=[{key:"isSupported",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],e="string"==typeof t?[t]:t,n=!!document.queryCommandSupported -return e.forEach((function(t){n=n&&!!document.queryCommandSupported(t)})),n}}],n&&d(e.prototype,n),r&&d(e,r),c}(i()),m=g},828:function(t){if("undefined"!=typeof Element&&!Element.prototype.matches){var e=Element.prototype -e.matches=e.matchesSelector||e.mozMatchesSelector||e.msMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector}t.exports=function(t,e){for(;t&&9!==t.nodeType;){if("function"==typeof t.matches&&t.matches(e))return t -t=t.parentNode}}},438:function(t,e,n){var r=n(828) -function i(t,e,n,r,i){var a=o.apply(this,arguments) -return t.addEventListener(n,a,i),{destroy:function(){t.removeEventListener(n,a,i)}}}function o(t,e,n,i){return function(n){n.delegateTarget=r(n.target,e),n.delegateTarget&&i.call(t,n)}}t.exports=function(t,e,n,r,o){return"function"==typeof t.addEventListener?i.apply(null,arguments):"function"==typeof n?i.bind(null,document).apply(null,arguments):("string"==typeof t&&(t=document.querySelectorAll(t)),Array.prototype.map.call(t,(function(t){return i(t,e,n,r,o)})))}},879:function(t,e){e.node=function(t){return void 0!==t&&t instanceof HTMLElement&&1===t.nodeType},e.nodeList=function(t){var n=Object.prototype.toString.call(t) -return void 0!==t&&("[object NodeList]"===n||"[object HTMLCollection]"===n)&&"length"in t&&(0===t.length||e.node(t[0]))},e.string=function(t){return"string"==typeof t||t instanceof String},e.fn=function(t){return"[object Function]"===Object.prototype.toString.call(t)}},370:function(t,e,n){var r=n(879),i=n(438) -t.exports=function(t,e,n){if(!t&&!e&&!n)throw new Error("Missing required arguments") -if(!r.string(e))throw new TypeError("Second argument must be a String") -if(!r.fn(n))throw new TypeError("Third argument must be a Function") -if(r.node(t))return function(t,e,n){return t.addEventListener(e,n),{destroy:function(){t.removeEventListener(e,n)}}}(t,e,n) -if(r.nodeList(t))return function(t,e,n){return Array.prototype.forEach.call(t,(function(t){t.addEventListener(e,n)})),{destroy:function(){Array.prototype.forEach.call(t,(function(t){t.removeEventListener(e,n)}))}}}(t,e,n) -if(r.string(t))return function(t,e,n){return i(document.body,t,e,n)}(t,e,n) -throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}},817:function(t){t.exports=function(t){var e -if("SELECT"===t.nodeName)t.focus(),e=t.value -else if("INPUT"===t.nodeName||"TEXTAREA"===t.nodeName){var n=t.hasAttribute("readonly") -n||t.setAttribute("readonly",""),t.select(),t.setSelectionRange(0,t.value.length),n||t.removeAttribute("readonly"),e=t.value}else{t.hasAttribute("contenteditable")&&t.focus() -var r=window.getSelection(),i=document.createRange() -i.selectNodeContents(t),r.removeAllRanges(),r.addRange(i),e=r.toString()}return e}},279:function(t){function e(){}e.prototype={on:function(t,e,n){var r=this.e||(this.e={}) -return(r[t]||(r[t]=[])).push({fn:e,ctx:n}),this},once:function(t,e,n){var r=this -function i(){r.off(t,i),e.apply(n,arguments)}return i._=e,this.on(t,i,n)},emit:function(t){for(var e=[].slice.call(arguments,1),n=((this.e||(this.e={}))[t]||[]).slice(),r=0,i=n.length;r{"use strict" -function r(t,e){return te?1:t>=e?0:NaN}n.d(e,{Z:()=>r})},4376:(t,e,n)=>{"use strict" -n.d(e,{Nw:()=>c,ZP:()=>f,ZR:()=>s,ml:()=>u}) -var r=n(7604),i=n(9354),o=n(9750) -const a=(0,i.Z)(r.Z),u=a.right,c=a.left,s=(0,i.Z)(o.Z).center,f=u},9354:(t,e,n)=>{"use strict" -n.d(e,{Z:()=>i}) -var r=n(7604) -function i(t){let e=t,n=t -function i(t,e,r,i){for(null==r&&(r=0),null==i&&(i=t.length);r>>1 -n(t[o],e)<0?r=o+1:i=o}return r}return 1===t.length&&(e=(e,n)=>t(e)-n,n=function(t){return(e,n)=>(0,r.Z)(t(e),n)}(t)),{left:i,center:function(t,n,r,o){null==r&&(r=0),null==o&&(o=t.length) -const a=i(t,n,r,o-1) -return a>r&&e(t[a-1],n)>-e(t[a],n)?a-1:a},right:function(t,e,r,i){for(null==r&&(r=0),null==i&&(i=t.length);r>>1 -n(t[o],e)>0?i=o:r=o+1}return r}}}},1286:(t,e,n)=>{"use strict" -n.r(e),n.d(e,{Adder:()=>v,InternMap:()=>_,InternSet:()=>w,ascending:()=>i.Z,bin:()=>q,bisect:()=>r.ZP,bisectCenter:()=>r.ZR,bisectLeft:()=>r.Nw,bisectRight:()=>r.ml,bisector:()=>o.Z,count:()=>a,cross:()=>l,cumsum:()=>h,descending:()=>d,deviation:()=>y,difference:()=>xt,disjoint:()=>At,every:()=>bt,extent:()=>b,fcumsum:()=>m,filter:()=>gt,fsum:()=>g,greatest:()=>ut,greatestIndex:()=>ct,group:()=>C,groupSort:()=>R,groups:()=>O,histogram:()=>q,index:()=>F,indexes:()=>T,intersection:()=>kt,least:()=>ot,leastIndex:()=>at,map:()=>mt,max:()=>G.Z,maxIndex:()=>K,mean:()=>W,median:()=>X,merge:()=>J,min:()=>Q.Z,minIndex:()=>tt,nice:()=>z,pairs:()=>et,permute:()=>j,quantile:()=>V.Z,quantileSorted:()=>V.s,quickselect:()=>rt.Z,range:()=>it.Z,reduce:()=>_t,reverse:()=>wt,rollup:()=>S,rollups:()=>M,scan:()=>st,shuffle:()=>ft,shuffler:()=>lt,some:()=>vt,sort:()=>N,subset:()=>Ct,sum:()=>ht,superset:()=>Dt,thresholdFreedmanDiaconis:()=>H,thresholdScott:()=>Y,thresholdSturges:()=>Z,tickIncrement:()=>U.G9,tickStep:()=>U.ly,ticks:()=>U.ZP,transpose:()=>dt,union:()=>Ot,variance:()=>p,zip:()=>yt}) -var r=n(4376),i=n(7604),o=n(9354) -function a(t,e){let n=0 -if(void 0===e)for(let r of t)null!=r&&(r=+r)>=r&&++n -else{let r=-1 -for(let i of t)null!=(i=e(i,++r,t))&&(i=+i)>=i&&++n}return n}function u(t){return 0|t.length}function c(t){return!(t>0)}function s(t){return"object"!=typeof t||"length"in t?t:Array.from(t)}function f(t){return e=>t(...e)}function l(){for(var t=arguments.length,e=new Array(t),n=0;ne[n][t]))) -let t=o -for(;++a[t]===i[t];){if(0===t)return r?l.map(r):l -a[t--]=0}}}function h(t,e){var n=0,r=0 -return Float64Array.from(t,void 0===e?t=>n+=+t||0:i=>n+=+e(i,r++,t)||0)}function d(t,e){return et?1:e>=t?0:NaN}function p(t,e){let n,r=0,i=0,o=0 -if(void 0===e)for(let a of t)null!=a&&(a=+a)>=a&&(n=a-i,i+=n/++r,o+=n*(a-i)) -else{let a=-1 -for(let u of t)null!=(u=e(u,++a,t))&&(u=+u)>=u&&(n=u-i,i+=n/++r,o+=n*(u-i))}if(r>1)return o/(r-1)}function y(t,e){const n=p(t,e) -return n?Math.sqrt(n):n}function b(t,e){let n,r -if(void 0===e)for(const i of t)null!=i&&(void 0===n?i>=i&&(n=r=i):(n>i&&(n=i),r=o&&(n=r=o):(n>o&&(n=o),r0){for(o=t[--i];i>0&&(e=o,n=t[--i],o=e+n,r=n-(o-e),!r););i>0&&(r<0&&t[i-1]<0||r>0&&t[i-1]>0)&&(n=2*r,e=o+n,n==e-o&&(o=e))}return o}}function g(t,e){const n=new v -if(void 0===e)for(let r of t)(r=+r)&&n.add(r) -else{let r=-1 -for(let i of t)(i=+e(i,++r,t))&&n.add(i)}return+n}function m(t,e){const n=new v -let r=-1 -return Float64Array.from(t,void 0===e?t=>n.add(+t||0):i=>n.add(+e(i,++r,t)||0))}class _ extends Map{constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:k -if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:e}}),null!=t)for(const[n,r]of t)this.set(n,r)}get(t){return super.get(x(this,t))}has(t){return super.has(x(this,t))}set(t,e){return super.set(A(this,t),e)}delete(t){return super.delete(E(this,t))}}class w extends Set{constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:k -if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:e}}),null!=t)for(const n of t)this.add(n)}has(t){return super.has(x(this,t))}add(t){return super.add(A(this,t))}delete(t){return super.delete(E(this,t))}}function x(t,e){let{_intern:n,_key:r}=t -const i=r(e) -return n.has(i)?n.get(i):e}function A(t,e){let{_intern:n,_key:r}=t -const i=r(e) -return n.has(i)?n.get(i):(n.set(i,e),e)}function E(t,e){let{_intern:n,_key:r}=t -const i=r(e) -return n.has(i)&&(e=n.get(e),n.delete(i)),e}function k(t){return null!==t&&"object"==typeof t?t.valueOf():t}function D(t){return t}function C(t){for(var e=arguments.length,n=new Array(e>1?e-1:0),r=1;r1?e-1:0),r=1;r2?n-2:0),i=2;i2?n-2:0),i=2;i1?e-1:0),r=1;r1?e-1:0),r=1;r=r.length)return n(i) -const a=new _,u=r[o++] -let c=-1 -for(const e of i){const t=u(e,++c,i),n=a.get(t) -n?n.push(e):a.set(t,[e])}for(const[e,n]of a)a.set(e,t(n,o)) -return e(a)}(t,0)}function j(t,e){return Array.from(e,(e=>t[e]))}function N(t){for(var e=arguments.length,n=new Array(e>1?e-1:0),r=1;r1){const e=Uint32Array.from(t,((t,e)=>e)) -return n.length>1?(n=n.map((e=>t.map(e))),e.sort(((t,e)=>{for(const r of n){const n=(0,i.Z)(r[t],r[e]) -if(n)return n}}))):(o=t.map(o),e.sort(((t,e)=>(0,i.Z)(o[t],o[e])))),j(t,e)}return t.sort(o)}function R(t,e,n){return(1===e.length?N(S(t,e,n),((t,e)=>{let[n,r]=t,[o,a]=e -return(0,i.Z)(r,a)||(0,i.Z)(n,o)})):N(C(t,n),((t,n)=>{let[r,o]=t,[a,u]=n -return e(o,u)||(0,i.Z)(r,a)}))).map((t=>{let[e]=t -return e}))}var L=Array.prototype,I=L.slice -function $(t){return function(){return t}}L.map -var U=n(458) -function z(t,e,n){let r -for(;;){const i=(0,U.G9)(t,e,n) -if(i===r||0===i||!isFinite(i))return[t,e] -i>0?(t=Math.floor(t/i)*i,e=Math.ceil(e/i)*i):i<0&&(t=Math.ceil(t*i)/i,e=Math.floor(e*i)/i),r=i}}function Z(t){return Math.ceil(Math.log(a(t))/Math.LN2)+1}function q(){var t=D,e=b,n=Z -function i(i){Array.isArray(i)||(i=Array.from(i)) -var o,a,u=i.length,c=new Array(u) -for(o=0;o=l)if(t>=l&&e===b){const t=(0,U.G9)(f,l,n) -isFinite(t)&&(t>0?l=(Math.floor(l/t)+1)*t:t<0&&(l=(Math.ceil(l*-t)+1)/-t))}else h.pop()}for(var d=h.length;h[0]<=f;)h.shift(),--d -for(;h[d-1]>l;)h.pop(),--d -var p,y=new Array(d+1) -for(o=0;o<=d;++o)(p=y[o]=[]).x0=o>0?h[o-1]:f,p.x1=o=o)&&(n=o,r=i) -else for(let o of t)null!=(o=e(o,++i,t))&&(n=o)&&(n=o,r=i) -return r}function W(t,e){let n=0,r=0 -if(void 0===e)for(let i of t)null!=i&&(i=+i)>=i&&(++n,r+=i) -else{let i=-1 -for(let o of t)null!=(o=e(o,++i,t))&&(o=+o)>=o&&(++n,r+=o)}if(n)return r/n}function X(t,e){return(0,V.Z)(t,.5,e)}function J(t){return Array.from(function*(t){for(const e of t)yield*e}(t))}var Q=n(4007) -function tt(t,e){let n,r=-1,i=-1 -if(void 0===e)for(const o of t)++i,null!=o&&(n>o||void 0===n&&o>=o)&&(n=o,r=i) -else for(let o of t)null!=(o=e(o,++i,t))&&(n>o||void 0===n&&o>=o)&&(n=o,r=i) -return r}function et(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:nt -const n=[] -let r,i=!1 -for(const o of t)i&&n.push(e(r,o)),r=o,i=!0 -return n}function nt(t,e){return[t,e]}var rt=n(3767),it=n(1204) -function ot(t){let e,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:i.Z,r=!1 -if(1===n.length){let o -for(const a of t){const t=n(a);(r?(0,i.Z)(t,o)<0:0===(0,i.Z)(t,t))&&(e=a,o=t,r=!0)}}else for(const i of t)(r?n(i,e)<0:0===n(i,i))&&(e=i,r=!0) -return e}function at(t){let e,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:i.Z -if(1===n.length)return tt(t,n) -let r=-1,o=-1 -for(const i of t)++o,(r<0?0===n(i,i):n(i,e)<0)&&(e=i,r=o) -return r}function ut(t){let e,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:i.Z,r=!1 -if(1===n.length){let o -for(const a of t){const t=n(a);(r?(0,i.Z)(t,o)>0:0===(0,i.Z)(t,t))&&(e=a,o=t,r=!0)}}else for(const i of t)(r?n(i,e)>0:0===n(i,i))&&(e=i,r=!0) -return e}function ct(t){let e,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:i.Z -if(1===n.length)return K(t,n) -let r=-1,o=-1 -for(const i of t)++o,(r<0?0===n(i,i):n(i,e)>0)&&(e=i,r=o) -return r}function st(t,e){const n=at(t,e) -return n<0?void 0:n}const ft=lt(Math.random) -function lt(t){return function(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,i=r-(n=+n) -for(;i;){const r=t()*i--|0,o=e[i+n] -e[i+n]=e[r+n],e[r+n]=o}return e}}function ht(t,e){let n=0 -if(void 0===e)for(let r of t)(r=+r)&&(n+=r) -else{let r=-1 -for(let i of t)(i=+e(i,++r,t))&&(n+=i)}return n}function dt(t){if(!(i=t.length))return[] -for(var e=-1,n=(0,Q.Z)(t,pt),r=new Array(n);++ee(n,r,t)))}function _t(t,e,n){if("function"!=typeof e)throw new TypeError("reducer is not a function") -const r=t[Symbol.iterator]() -let i,o,a=-1 -if(arguments.length<3){if(({done:i,value:n}=r.next()),i)return;++a}for(;({done:i,value:o}=r.next()),!i;)n=e(n,o,++a,t) -return n}function wt(t){if("function"!=typeof t[Symbol.iterator])throw new TypeError("values is not iterable") -return Array.from(t).reverse()}function xt(t){t=new Set(t) -for(var e=arguments.length,n=new Array(e>1?e-1:0),r=1;r1?e-1:0),r=1;r{"use strict" -function r(t,e){let n -if(void 0===e)for(const r of t)null!=r&&(n=r)&&(n=r) -else{let r=-1 -for(let i of t)null!=(i=e(i,++r,t))&&(n=i)&&(n=i)}return n}n.d(e,{Z:()=>r})},4007:(t,e,n)=>{"use strict" -function r(t,e){let n -if(void 0===e)for(const r of t)null!=r&&(n>r||void 0===n&&r>=r)&&(n=r) -else{let r=-1 -for(let i of t)null!=(i=e(i,++r,t))&&(n>i||void 0===n&&i>=i)&&(n=i)}return n}n.d(e,{Z:()=>r})},9750:(t,e,n)=>{"use strict" -function r(t){return null===t?NaN:+t}function*i(t,e){if(void 0===e)for(let n of t)null!=n&&(n=+n)>=n&&(yield n) -else{let n=-1 -for(let r of t)null!=(r=e(r,++n,t))&&(r=+r)>=r&&(yield r)}}n.d(e,{K:()=>i,Z:()=>r})},801:(t,e,n)=>{"use strict" -n.d(e,{Z:()=>u,s:()=>c}) -var r=n(2368),i=n(4007),o=n(3767),a=n(9750) -function u(t,e,n){if(u=(t=Float64Array.from((0,a.K)(t,n))).length){if((e=+e)<=0||u<2)return(0,i.Z)(t) -if(e>=1)return(0,r.Z)(t) -var u,c=(u-1)*e,s=Math.floor(c),f=(0,r.Z)((0,o.Z)(t,s).subarray(0,s+1)) -return f+((0,i.Z)(t.subarray(s+1))-f)*(c-s)}}function c(t,e){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:a.Z -if(r=t.length){if((e=+e)<=0||r<2)return+n(t[0],0,t) -if(e>=1)return+n(t[r-1],r-1,t) -var r,i=(r-1)*e,o=Math.floor(i),u=+n(t[o],o,t),c=+n(t[o+1],o+1,t) -return u+(c-u)*(i-o)}}},3767:(t,e,n)=>{"use strict" -n.d(e,{Z:()=>i}) -var r=n(7604) -function i(t,e){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:t.length-1,u=arguments.length>4&&void 0!==arguments[4]?arguments[4]:r.Z -for(;a>n;){if(a-n>600){const r=a-n+1,o=e-n+1,c=Math.log(r),s=.5*Math.exp(2*c/3),f=.5*Math.sqrt(c*s*(r-s)/r)*(o-r/2<0?-1:1) -i(t,e,Math.max(n,Math.floor(e-o*s/r+f)),Math.min(a,Math.floor(e+(r-o)*s/r+f)),u)}const r=t[e] -let c=n,s=a -for(o(t,n,e),u(t[a],r)>0&&o(t,n,a);c0;)--s}0===u(t[n],r)?o(t,n,s):(++s,o(t,s,a)),s<=e&&(n=s+1),e<=s&&(a=s-1)}return t}function o(t,e,n){const r=t[e] -t[e]=t[n],t[n]=r}},1204:(t,e,n)=>{"use strict" -function r(t,e,n){t=+t,e=+e,n=(i=arguments.length)<2?(e=t,t=0,1):i<3?1:+n -for(var r=-1,i=0|Math.max(0,Math.ceil((e-t)/n)),o=new Array(i);++rr})},458:(t,e,n)=>{"use strict" -n.d(e,{G9:()=>u,ZP:()=>a,ly:()=>c}) -var r=Math.sqrt(50),i=Math.sqrt(10),o=Math.sqrt(2) -function a(t,e,n){var r,i,o,a,c=-1 -if(n=+n,(t=+t)==(e=+e)&&n>0)return[t] -if((r=e0)for(t=Math.ceil(t/a),e=Math.floor(e/a),o=new Array(i=Math.ceil(e-t+1));++c=0?(c>=r?10:c>=i?5:c>=o?2:1)*Math.pow(10,u):-Math.pow(10,-u)/(c>=r?10:c>=i?5:c>=o?2:1)}function c(t,e,n){var a=Math.abs(e-t)/Math.max(0,n),u=Math.pow(10,Math.floor(Math.log(a)/Math.LN10)),c=a/u -return c>=r?u*=10:c>=i?u*=5:c>=o&&(u*=2),e{"use strict" -n.d(e,{B8:()=>E,Il:()=>i,J5:()=>a,SU:()=>A,Ss:()=>k,ZP:()=>_,xV:()=>o}) -var r=n(1572) -function i(){}var o=.7,a=1/o,u="\\s*([+-]?\\d+)\\s*",c="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",s="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",f=/^#([0-9a-f]{3,8})$/,l=new RegExp("^rgb\\("+[u,u,u]+"\\)$"),h=new RegExp("^rgb\\("+[s,s,s]+"\\)$"),d=new RegExp("^rgba\\("+[u,u,u,c]+"\\)$"),p=new RegExp("^rgba\\("+[s,s,s,c]+"\\)$"),y=new RegExp("^hsl\\("+[c,s,s]+"\\)$"),b=new RegExp("^hsla\\("+[c,s,s,c]+"\\)$"),v={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074} -function g(){return this.rgb().formatHex()}function m(){return this.rgb().formatRgb()}function _(t){var e,n -return t=(t+"").trim().toLowerCase(),(e=f.exec(t))?(n=e[1].length,e=parseInt(e[1],16),6===n?w(e):3===n?new k(e>>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===n?x(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===n?x(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=l.exec(t))?new k(e[1],e[2],e[3],1):(e=h.exec(t))?new k(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=d.exec(t))?x(e[1],e[2],e[3],e[4]):(e=p.exec(t))?x(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=y.exec(t))?S(e[1],e[2]/100,e[3]/100,1):(e=b.exec(t))?S(e[1],e[2]/100,e[3]/100,e[4]):v.hasOwnProperty(t)?w(v[t]):"transparent"===t?new k(NaN,NaN,NaN,0):null}function w(t){return new k(t>>16&255,t>>8&255,255&t,1)}function x(t,e,n,r){return r<=0&&(t=e=n=NaN),new k(t,e,n,r)}function A(t){return t instanceof i||(t=_(t)),t?new k((t=t.rgb()).r,t.g,t.b,t.opacity):new k}function E(t,e,n,r){return 1===arguments.length?A(t):new k(t,e,n,null==r?1:r)}function k(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}function D(){return"#"+O(this.r)+O(this.g)+O(this.b)}function C(){var t=this.opacity -return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===t?")":", "+t+")")}function O(t){return((t=Math.max(0,Math.min(255,Math.round(t)||0)))<16?"0":"")+t.toString(16)}function S(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new F(t,e,n,r)}function M(t){if(t instanceof F)return new F(t.h,t.s,t.l,t.opacity) -if(t instanceof i||(t=_(t)),!t)return new F -if(t instanceof F)return t -var e=(t=t.rgb()).r/255,n=t.g/255,r=t.b/255,o=Math.min(e,n,r),a=Math.max(e,n,r),u=NaN,c=a-o,s=(a+o)/2 -return c?(u=e===a?(n-r)/c+6*(n0&&s<1?0:u,new F(u,c,s,t.opacity)}function F(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}function T(t,e,n){return 255*(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)}(0,r.Z)(i,_,{copy:function(t){return Object.assign(new this.constructor,this,t)},displayable:function(){return this.rgb().displayable()},hex:g,formatHex:g,formatHsl:function(){return M(this).formatHsl()},formatRgb:m,toString:m}),(0,r.Z)(k,E,(0,r.l)(i,{brighter:function(t){return t=null==t?a:Math.pow(a,t),new k(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=null==t?o:Math.pow(o,t),new k(this.r*t,this.g*t,this.b*t,this.opacity)},rgb:function(){return this},displayable:function(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:D,formatHex:D,formatRgb:C,toString:C})),(0,r.Z)(F,(function(t,e,n,r){return 1===arguments.length?M(t):new F(t,e,n,null==r?1:r)}),(0,r.l)(i,{brighter:function(t){return t=null==t?a:Math.pow(a,t),new F(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?o:Math.pow(o,t),new F(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*e,i=2*n-r -return new k(T(t>=240?t-240:t+120,i,r),T(t,i,r),T(t<120?t+240:t-120,i,r),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var t=this.opacity -return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"hsl(":"hsla(")+(this.h||0)+", "+100*(this.s||0)+"%, "+100*(this.l||0)+"%"+(1===t?")":", "+t+")")}}))},1572:(t,e,n)=>{"use strict" -function r(t,e,n){t.prototype=e.prototype=n,n.constructor=t}function i(t,e){var n=Object.create(t.prototype) -for(var r in e)n[r]=e[r] -return n}n.d(e,{Z:()=>r,l:()=>i})},901:(t,e,n)=>{"use strict" -n.d(e,{ZP:()=>u,wx:()=>o,yi:()=>a}) -var r=n(6436) -function i(t,e){return function(n){return t+n*e}}function o(t,e){var n=e-t -return n?i(t,n>180||n<-180?n-360*Math.round(n/360):n):(0,r.Z)(isNaN(t)?e:t)}function a(t){return 1==(t=+t)?u:function(e,n){return n-e?function(t,e,n){return t=Math.pow(t,n),e=Math.pow(e,n)-t,n=1/n,function(r){return Math.pow(t+r*e,n)}}(e,n,t):(0,r.Z)(isNaN(e)?n:e)}}function u(t,e){var n=e-t -return n?i(t,n):(0,r.Z)(isNaN(t)?e:t)}},6436:(t,e,n)=>{"use strict" -n.d(e,{Z:()=>r}) -const r=t=>()=>t},9663:(t,e,n)=>{"use strict" -n.d(e,{ZP:()=>a,hD:()=>c}) -var r=n(7128) -function i(t,e,n,r,i){var o=t*t,a=o*t -return((1-3*t+3*o-a)*e+(4-6*o+3*a)*n+(1+3*t+3*o-3*a)*r+a*i)/6}var o=n(901) -const a=function t(e){var n=(0,o.yi)(e) -function i(t,e){var i=n((t=(0,r.B8)(t)).r,(e=(0,r.B8)(e)).r),a=n(t.g,e.g),u=n(t.b,e.b),c=(0,o.ZP)(t.opacity,e.opacity) -return function(e){return t.r=i(e),t.g=a(e),t.b=u(e),t.opacity=c(e),t+""}}return i.gamma=t,i}(1) -function u(t){return function(e){var n,i,o=e.length,a=new Array(o),u=new Array(o),c=new Array(o) -for(n=0;n=1?(n=1,e-1):Math.floor(n*e),o=t[r],a=t[r+1],u=r>0?t[r-1]:2*o-a,c=r{"use strict" -function r(t){for(var e=t.length/6|0,n=new Array(e),r=0;rot,interpolateBrBG:()=>v,interpolateBuGn:()=>j,interpolateBuPu:()=>R,interpolateCividis:()=>bt,interpolateCool:()=>Rt,interpolateCubehelixDefault:()=>jt,interpolateGnBu:()=>I,interpolateGreens:()=>ut,interpolateGreys:()=>st,interpolateInferno:()=>Gt,interpolateMagma:()=>Yt,interpolateOrRd:()=>U,interpolateOranges:()=>yt,interpolatePRGn:()=>m,interpolatePiYG:()=>w,interpolatePlasma:()=>Kt,interpolatePuBu:()=>V,interpolatePuBuGn:()=>Z,interpolatePuOr:()=>A,interpolatePuRd:()=>Y,interpolatePurples:()=>lt,interpolateRainbow:()=>It,interpolateRdBu:()=>k,interpolateRdGy:()=>C,interpolateRdPu:()=>K,interpolateRdYlBu:()=>S,interpolateRdYlGn:()=>F,interpolateReds:()=>dt,interpolateSinebow:()=>Zt,interpolateSpectral:()=>B,interpolateTurbo:()=>qt,interpolateViridis:()=>Ht,interpolateWarm:()=>Nt,interpolateYlGn:()=>Q,interpolateYlGnBu:()=>X,interpolateYlOrBr:()=>et,interpolateYlOrRd:()=>rt,schemeAccent:()=>o,schemeBlues:()=>it,schemeBrBG:()=>b,schemeBuGn:()=>P,schemeBuPu:()=>N,schemeCategory10:()=>i,schemeDark2:()=>a,schemeGnBu:()=>L,schemeGreens:()=>at,schemeGreys:()=>ct,schemeOrRd:()=>$,schemeOranges:()=>pt,schemePRGn:()=>g,schemePaired:()=>u,schemePastel1:()=>c,schemePastel2:()=>s,schemePiYG:()=>_,schemePuBu:()=>q,schemePuBuGn:()=>z,schemePuOr:()=>x,schemePuRd:()=>H,schemePurples:()=>ft,schemeRdBu:()=>E,schemeRdGy:()=>D,schemeRdPu:()=>G,schemeRdYlBu:()=>O,schemeRdYlGn:()=>M,schemeReds:()=>ht,schemeSet1:()=>f,schemeSet2:()=>l,schemeSet3:()=>h,schemeSpectral:()=>T,schemeTableau10:()=>d,schemeYlGn:()=>J,schemeYlGnBu:()=>W,schemeYlOrBr:()=>tt,schemeYlOrRd:()=>nt}) -const i=r("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf"),o=r("7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666"),a=r("1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666"),u=r("a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928"),c=r("fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2"),s=r("b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc"),f=r("e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999"),l=r("66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3"),h=r("8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f"),d=r("4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab") -var p=n(9663) -const y=t=>(0,p.hD)(t[t.length-1]) -var b=new Array(3).concat("d8b365f5f5f55ab4ac","a6611adfc27d80cdc1018571","a6611adfc27df5f5f580cdc1018571","8c510ad8b365f6e8c3c7eae55ab4ac01665e","8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e","8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e","8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e","5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30","5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30").map(r) -const v=y(b) -var g=new Array(3).concat("af8dc3f7f7f77fbf7b","7b3294c2a5cfa6dba0008837","7b3294c2a5cff7f7f7a6dba0008837","762a83af8dc3e7d4e8d9f0d37fbf7b1b7837","762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837","762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837","762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837","40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b","40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b").map(r) -const m=y(g) -var _=new Array(3).concat("e9a3c9f7f7f7a1d76a","d01c8bf1b6dab8e1864dac26","d01c8bf1b6daf7f7f7b8e1864dac26","c51b7de9a3c9fde0efe6f5d0a1d76a4d9221","c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221","c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221","c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221","8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419","8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419").map(r) -const w=y(_) -var x=new Array(3).concat("998ec3f7f7f7f1a340","5e3c99b2abd2fdb863e66101","5e3c99b2abd2f7f7f7fdb863e66101","542788998ec3d8daebfee0b6f1a340b35806","542788998ec3d8daebf7f7f7fee0b6f1a340b35806","5427888073acb2abd2d8daebfee0b6fdb863e08214b35806","5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806","2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08","2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08").map(r) -const A=y(x) -var E=new Array(3).concat("ef8a62f7f7f767a9cf","ca0020f4a58292c5de0571b0","ca0020f4a582f7f7f792c5de0571b0","b2182bef8a62fddbc7d1e5f067a9cf2166ac","b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac","b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac","b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac","67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061","67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061").map(r) -const k=y(E) -var D=new Array(3).concat("ef8a62ffffff999999","ca0020f4a582bababa404040","ca0020f4a582ffffffbababa404040","b2182bef8a62fddbc7e0e0e09999994d4d4d","b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d","b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d","b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d","67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a","67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a").map(r) -const C=y(D) -var O=new Array(3).concat("fc8d59ffffbf91bfdb","d7191cfdae61abd9e92c7bb6","d7191cfdae61ffffbfabd9e92c7bb6","d73027fc8d59fee090e0f3f891bfdb4575b4","d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4","d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4","d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4","a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695","a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695").map(r) -const S=y(O) -var M=new Array(3).concat("fc8d59ffffbf91cf60","d7191cfdae61a6d96a1a9641","d7191cfdae61ffffbfa6d96a1a9641","d73027fc8d59fee08bd9ef8b91cf601a9850","d73027fc8d59fee08bffffbfd9ef8b91cf601a9850","d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850","d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850","a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837","a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837").map(r) -const F=y(M) -var T=new Array(3).concat("fc8d59ffffbf99d594","d7191cfdae61abdda42b83ba","d7191cfdae61ffffbfabdda42b83ba","d53e4ffc8d59fee08be6f59899d5943288bd","d53e4ffc8d59fee08bffffbfe6f59899d5943288bd","d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd","d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd","9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2","9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2").map(r) -const B=y(T) -var P=new Array(3).concat("e5f5f999d8c92ca25f","edf8fbb2e2e266c2a4238b45","edf8fbb2e2e266c2a42ca25f006d2c","edf8fbccece699d8c966c2a42ca25f006d2c","edf8fbccece699d8c966c2a441ae76238b45005824","f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824","f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b").map(r) -const j=y(P) -var N=new Array(3).concat("e0ecf49ebcda8856a7","edf8fbb3cde38c96c688419d","edf8fbb3cde38c96c68856a7810f7c","edf8fbbfd3e69ebcda8c96c68856a7810f7c","edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b","f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b","f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b").map(r) -const R=y(N) -var L=new Array(3).concat("e0f3dba8ddb543a2ca","f0f9e8bae4bc7bccc42b8cbe","f0f9e8bae4bc7bccc443a2ca0868ac","f0f9e8ccebc5a8ddb57bccc443a2ca0868ac","f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e","f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e","f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081").map(r) -const I=y(L) -var $=new Array(3).concat("fee8c8fdbb84e34a33","fef0d9fdcc8afc8d59d7301f","fef0d9fdcc8afc8d59e34a33b30000","fef0d9fdd49efdbb84fc8d59e34a33b30000","fef0d9fdd49efdbb84fc8d59ef6548d7301f990000","fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000","fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000").map(r) -const U=y($) -var z=new Array(3).concat("ece2f0a6bddb1c9099","f6eff7bdc9e167a9cf02818a","f6eff7bdc9e167a9cf1c9099016c59","f6eff7d0d1e6a6bddb67a9cf1c9099016c59","f6eff7d0d1e6a6bddb67a9cf3690c002818a016450","fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450","fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636").map(r) -const Z=y(z) -var q=new Array(3).concat("ece7f2a6bddb2b8cbe","f1eef6bdc9e174a9cf0570b0","f1eef6bdc9e174a9cf2b8cbe045a8d","f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d","f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b","fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b","fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858").map(r) -const V=y(q) -var H=new Array(3).concat("e7e1efc994c7dd1c77","f1eef6d7b5d8df65b0ce1256","f1eef6d7b5d8df65b0dd1c77980043","f1eef6d4b9dac994c7df65b0dd1c77980043","f1eef6d4b9dac994c7df65b0e7298ace125691003f","f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f","f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f").map(r) -const Y=y(H) -var G=new Array(3).concat("fde0ddfa9fb5c51b8a","feebe2fbb4b9f768a1ae017e","feebe2fbb4b9f768a1c51b8a7a0177","feebe2fcc5c0fa9fb5f768a1c51b8a7a0177","feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177","fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177","fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a").map(r) -const K=y(G) -var W=new Array(3).concat("edf8b17fcdbb2c7fb8","ffffcca1dab441b6c4225ea8","ffffcca1dab441b6c42c7fb8253494","ffffccc7e9b47fcdbb41b6c42c7fb8253494","ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84","ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84","ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58").map(r) -const X=y(W) -var J=new Array(3).concat("f7fcb9addd8e31a354","ffffccc2e69978c679238443","ffffccc2e69978c67931a354006837","ffffccd9f0a3addd8e78c67931a354006837","ffffccd9f0a3addd8e78c67941ab5d238443005a32","ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32","ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529").map(r) -const Q=y(J) -var tt=new Array(3).concat("fff7bcfec44fd95f0e","ffffd4fed98efe9929cc4c02","ffffd4fed98efe9929d95f0e993404","ffffd4fee391fec44ffe9929d95f0e993404","ffffd4fee391fec44ffe9929ec7014cc4c028c2d04","ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04","ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506").map(r) -const et=y(tt) -var nt=new Array(3).concat("ffeda0feb24cf03b20","ffffb2fecc5cfd8d3ce31a1c","ffffb2fecc5cfd8d3cf03b20bd0026","ffffb2fed976feb24cfd8d3cf03b20bd0026","ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026","ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026","ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026").map(r) -const rt=y(nt) -var it=new Array(3).concat("deebf79ecae13182bd","eff3ffbdd7e76baed62171b5","eff3ffbdd7e76baed63182bd08519c","eff3ffc6dbef9ecae16baed63182bd08519c","eff3ffc6dbef9ecae16baed64292c62171b5084594","f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594","f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b").map(r) -const ot=y(it) -var at=new Array(3).concat("e5f5e0a1d99b31a354","edf8e9bae4b374c476238b45","edf8e9bae4b374c47631a354006d2c","edf8e9c7e9c0a1d99b74c47631a354006d2c","edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32","f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32","f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b").map(r) -const ut=y(at) -var ct=new Array(3).concat("f0f0f0bdbdbd636363","f7f7f7cccccc969696525252","f7f7f7cccccc969696636363252525","f7f7f7d9d9d9bdbdbd969696636363252525","f7f7f7d9d9d9bdbdbd969696737373525252252525","fffffff0f0f0d9d9d9bdbdbd969696737373525252252525","fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000").map(r) -const st=y(ct) -var ft=new Array(3).concat("efedf5bcbddc756bb1","f2f0f7cbc9e29e9ac86a51a3","f2f0f7cbc9e29e9ac8756bb154278f","f2f0f7dadaebbcbddc9e9ac8756bb154278f","f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486","fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486","fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d").map(r) -const lt=y(ft) -var ht=new Array(3).concat("fee0d2fc9272de2d26","fee5d9fcae91fb6a4acb181d","fee5d9fcae91fb6a4ade2d26a50f15","fee5d9fcbba1fc9272fb6a4ade2d26a50f15","fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d","fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d","fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d").map(r) -const dt=y(ht) -var pt=new Array(3).concat("fee6cefdae6be6550d","feeddefdbe85fd8d3cd94701","feeddefdbe85fd8d3ce6550da63603","feeddefdd0a2fdae6bfd8d3ce6550da63603","feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04","fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04","fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704").map(r) -const yt=y(pt) -function bt(t){return t=Math.max(0,Math.min(1,t)),"rgb("+Math.max(0,Math.min(255,Math.round(-4.54-t*(35.34-t*(2381.73-t*(6402.7-t*(7024.72-2710.57*t)))))))+", "+Math.max(0,Math.min(255,Math.round(32.49+t*(170.73+t*(52.82-t*(131.46-t*(176.58-67.37*t)))))))+", "+Math.max(0,Math.min(255,Math.round(81.24+t*(442.36-t*(2482.43-t*(6167.24-t*(6614.94-2475.67*t)))))))+")"}var vt=n(1572),gt=n(7128) -const mt=Math.PI/180,_t=180/Math.PI -var wt=-.14861,xt=1.78277,At=-.29227,Et=-.90649,kt=1.97294,Dt=kt*Et,Ct=kt*xt,Ot=xt*At-Et*wt -function St(t){if(t instanceof Ft)return new Ft(t.h,t.s,t.l,t.opacity) -t instanceof gt.Ss||(t=(0,gt.SU)(t)) -var e=t.r/255,n=t.g/255,r=t.b/255,i=(Ot*r+Dt*e-Ct*n)/(Ot+Dt-Ct),o=r-i,a=(kt*(n-i)-At*o)/Et,u=Math.sqrt(a*a+o*o)/(kt*i*(1-i)),c=u?Math.atan2(a,o)*_t-120:NaN -return new Ft(c<0?c+360:c,u,i,t.opacity)}function Mt(t,e,n,r){return 1===arguments.length?St(t):new Ft(t,e,n,null==r?1:r)}function Ft(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}(0,vt.Z)(Ft,Mt,(0,vt.l)(gt.Il,{brighter:function(t){return t=null==t?gt.J5:Math.pow(gt.J5,t),new Ft(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?gt.xV:Math.pow(gt.xV,t),new Ft(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=isNaN(this.h)?0:(this.h+120)*mt,e=+this.l,n=isNaN(this.s)?0:this.s*e*(1-e),r=Math.cos(t),i=Math.sin(t) -return new gt.Ss(255*(e+n*(wt*r+xt*i)),255*(e+n*(At*r+Et*i)),255*(e+n*(kt*r)),this.opacity)}})) -var Tt=n(901) -function Bt(t){return function e(n){function r(e,r){var i=t((e=Mt(e)).h,(r=Mt(r)).h),o=(0,Tt.ZP)(e.s,r.s),a=(0,Tt.ZP)(e.l,r.l),u=(0,Tt.ZP)(e.opacity,r.opacity) -return function(t){return e.h=i(t),e.s=o(t),e.l=a(Math.pow(t,n)),e.opacity=u(t),e+""}}return n=+n,r.gamma=e,r}(1)}Bt(Tt.wx) -var Pt=Bt(Tt.ZP) -const jt=Pt(Mt(300,.5,0),Mt(-240,.5,1)) -var Nt=Pt(Mt(-100,.75,.35),Mt(80,1.5,.8)),Rt=Pt(Mt(260,.75,.35),Mt(80,1.5,.8)),Lt=Mt() -function It(t){(t<0||t>1)&&(t-=Math.floor(t)) -var e=Math.abs(t-.5) -return Lt.h=360*t-100,Lt.s=1.5-1.5*e,Lt.l=.8-.9*e,Lt+""}var $t=(0,gt.B8)(),Ut=Math.PI/3,zt=2*Math.PI/3 -function Zt(t){var e -return t=(.5-t)*Math.PI,$t.r=255*(e=Math.sin(t))*e,$t.g=255*(e=Math.sin(t+Ut))*e,$t.b=255*(e=Math.sin(t+zt))*e,$t+""}function qt(t){return t=Math.max(0,Math.min(1,t)),"rgb("+Math.max(0,Math.min(255,Math.round(34.61+t*(1172.33-t*(10793.56-t*(33300.12-t*(38394.49-14825.05*t)))))))+", "+Math.max(0,Math.min(255,Math.round(23.31+t*(557.33+t*(1225.33-t*(3574.96-t*(1073.77+707.56*t)))))))+", "+Math.max(0,Math.min(255,Math.round(27.2+t*(3211.1-t*(15327.97-t*(27814-t*(22569.18-6838.66*t)))))))+")"}function Vt(t){var e=t.length -return function(n){return t[Math.max(0,Math.min(e-1,Math.floor(n*e)))]}}const Ht=Vt(r("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")) -var Yt=Vt(r("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),Gt=Vt(r("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),Kt=Vt(r("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921"))},113:(t,e,n)=>{"use strict" -n.r(e),n.d(e,{scaleBand:()=>c,scaleDiverging:()=>ur,scaleDivergingLog:()=>cr,scaleDivergingPow:()=>fr,scaleDivergingSqrt:()=>lr,scaleDivergingSymlog:()=>sr,scaleIdentity:()=>J,scaleImplicit:()=>a,scaleLinear:()=>X,scaleLog:()=>ut,scaleOrdinal:()=>u,scalePoint:()=>f,scalePow:()=>bt,scaleQuantile:()=>At,scaleQuantize:()=>Et,scaleRadial:()=>_t,scaleSequential:()=>Qn,scaleSequentialLog:()=>tr,scaleSequentialPow:()=>nr,scaleSequentialQuantile:()=>ir,scaleSequentialSqrt:()=>rr,scaleSequentialSymlog:()=>er,scaleSqrt:()=>vt,scaleSymlog:()=>lt,scaleThreshold:()=>kt,scaleTime:()=>Zn,scaleUtc:()=>Wn,tickFormat:()=>K}) -var r=n(1204) -function i(t,e){switch(arguments.length){case 0:break -case 1:this.range(t) -break -default:this.range(e).domain(t)}return this}function o(t,e){switch(arguments.length){case 0:break -case 1:"function"==typeof t?this.interpolator(t):this.range(t) -break -default:this.domain(t),"function"==typeof e?this.interpolator(e):this.range(e)}return this}const a=Symbol("implicit") -function u(){var t=new Map,e=[],n=[],r=a -function o(i){var o=i+"",u=t.get(o) -if(!u){if(r!==a)return r -t.set(o,u=e.push(i))}return n[(u-1)%n.length]}return o.domain=function(n){if(!arguments.length)return e.slice() -e=[],t=new Map -for(const r of n){const n=r+"" -t.has(n)||t.set(n,e.push(r))}return o},o.range=function(t){return arguments.length?(n=Array.from(t),o):n.slice()},o.unknown=function(t){return arguments.length?(r=t,o):r},o.copy=function(){return u(e,n).unknown(r)},i.apply(o,arguments),o}function c(){var t,e,n=u().unknown(void 0),o=n.domain,a=n.range,s=0,f=1,l=!1,h=0,d=0,p=.5 -function y(){var n=o().length,i=fo&&(i=e.slice(o,i),u[a]?u[a]+=i:u[++a]=i),(n=n[0])===(r=r[0])?u[a]?u[a]+=r:u[++a]=r:(u[++a]=null,c.push({i:a,x:v(n,r)})),o=_.lastIndex -return oe&&(n=t,t=e,e=n),s=function(n){return Math.max(t,Math.min(e,n))}),r=c>2?F:M,i=o=null,l}function l(e){return isNaN(e=+e)?n:(i||(i=r(a.map(t),u,c)))(t(s(e)))}return l.invert=function(n){return s(e((o||(o=r(u,a.map(t),v)))(n)))},l.domain=function(t){return arguments.length?(a=Array.from(t,D),f()):a.slice()},l.range=function(t){return arguments.length?(u=Array.from(t),f()):u.slice()},l.rangeRound=function(t){return u=Array.from(t),c=k,f()},l.clamp=function(t){return arguments.length?(s=!!t||O,f()):s!==O},l.interpolate=function(t){return arguments.length?(c=t,f()):c},l.unknown=function(t){return arguments.length?(n=t,l):n},function(n,r){return t=n,e=r,f()}}function P(){return B()(O,O)}var j,N=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i -function R(t){if(!(e=N.exec(t)))throw new Error("invalid format: "+t) -var e -return new L({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function L(t){this.fill=void 0===t.fill?" ":t.fill+"",this.align=void 0===t.align?">":t.align+"",this.sign=void 0===t.sign?"-":t.sign+"",this.symbol=void 0===t.symbol?"":t.symbol+"",this.zero=!!t.zero,this.width=void 0===t.width?void 0:+t.width,this.comma=!!t.comma,this.precision=void 0===t.precision?void 0:+t.precision,this.trim=!!t.trim,this.type=void 0===t.type?"":t.type+""}function I(t,e){if((n=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null -var n,r=t.slice(0,n) -return[r.length>1?r[0]+r.slice(2):r,+t.slice(n+1)]}function $(t){return(t=I(Math.abs(t)))?t[1]:NaN}function U(t,e){var n=I(t,e) -if(!n)return t+"" -var r=n[0],i=n[1] -return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")}R.prototype=L.prototype,L.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type} -const z={"%":(t,e)=>(100*t).toFixed(e),b:t=>Math.round(t).toString(2),c:t=>t+"",d:function(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)},e:(t,e)=>t.toExponential(e),f:(t,e)=>t.toFixed(e),g:(t,e)=>t.toPrecision(e),o:t=>Math.round(t).toString(8),p:(t,e)=>U(100*t,e),r:U,s:function(t,e){var n=I(t,e) -if(!n)return t+"" -var r=n[0],i=n[1],o=i-(j=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,a=r.length -return o===a?r:o>a?r+new Array(o-a+1).join("0"):o>0?r.slice(0,o)+"."+r.slice(o):"0."+new Array(1-o).join("0")+I(t,Math.max(0,e+o-1))[0]},X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)} -function Z(t){return t}var q,V,H,Y=Array.prototype.map,G=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"] -function K(t,e,n,r){var i,o=(0,l.ly)(t,e,n) -switch((r=R(null==r?",f":r)).type){case"s":var a=Math.max(Math.abs(t),Math.abs(e)) -return null!=r.precision||isNaN(i=function(t,e){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor($(e)/3)))-$(Math.abs(t)))}(o,a))||(r.precision=i),H(r,a) -case"":case"e":case"g":case"p":case"r":null!=r.precision||isNaN(i=function(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,$(e)-$(t))+1}(o,Math.max(Math.abs(t),Math.abs(e))))||(r.precision=i-("e"===r.type)) -break -case"f":case"%":null!=r.precision||isNaN(i=function(t){return Math.max(0,-$(Math.abs(t)))}(o))||(r.precision=i-2*("%"===r.type))}return V(r)}function W(t){var e=t.domain -return t.ticks=function(t){var n=e() -return(0,l.ZP)(n[0],n[n.length-1],null==t?10:t)},t.tickFormat=function(t,n){var r=e() -return K(r[0],r[r.length-1],null==t?10:t,n)},t.nice=function(n){null==n&&(n=10) -var r,i,o=e(),a=0,u=o.length-1,c=o[a],s=o[u],f=10 -for(s0;){if((i=(0,l.G9)(c,s,n))===r)return o[a]=c,o[u]=s,e(o) -if(i>0)c=Math.floor(c/i)*i,s=Math.ceil(s/i)*i -else{if(!(i<0))break -c=Math.ceil(c*i)/i,s=Math.floor(s*i)/i}r=i}return t},t}function X(){var t=P() -return t.copy=function(){return T(t,X())},i.apply(t,arguments),W(t)}function J(t){var e -function n(t){return isNaN(t=+t)?e:t}return n.invert=n,n.domain=n.range=function(e){return arguments.length?(t=Array.from(e,D),n):t.slice()},n.unknown=function(t){return arguments.length?(e=t,n):e},n.copy=function(){return J(t).unknown(e)},t=arguments.length?Array.from(t,D):[0,1],W(n)}function Q(t,e){var n,r=0,i=(t=t.slice()).length-1,o=t[r],a=t[i] -return a0){for(;d<=p;++d)for(f=1,s=n(d);fc)break -b.push(h)}}else for(;d<=p;++d)for(f=o-1,s=n(d);f>=1;--f)if(!((h=s*f)c)break -b.push(h)}2*b.length0&&u>0&&(c+u+1>r&&(u=Math.max(1,r-c)),o.push(t.substring(i-=u,i+u)),!((c+=u+1)>r));)u=e[a=(a+1)%e.length] -return o.reverse().join(n)}),i=void 0===t.currency?"":t.currency[0]+"",o=void 0===t.currency?"":t.currency[1]+"",a=void 0===t.decimal?".":t.decimal+"",u=void 0===t.numerals?Z:function(t){return function(e){return e.replace(/[0-9]/g,(function(e){return t[+e]}))}}(Y.call(t.numerals,String)),c=void 0===t.percent?"%":t.percent+"",s=void 0===t.minus?"−":t.minus+"",f=void 0===t.nan?"NaN":t.nan+"" -function l(t){var e=(t=R(t)).fill,n=t.align,l=t.sign,h=t.symbol,d=t.zero,p=t.width,y=t.comma,b=t.precision,v=t.trim,g=t.type -"n"===g?(y=!0,g="g"):z[g]||(void 0===b&&(b=12),v=!0,g="g"),(d||"0"===e&&"="===n)&&(d=!0,e="0",n="=") -var m="$"===h?i:"#"===h&&/[boxX]/.test(g)?"0"+g.toLowerCase():"",_="$"===h?o:/[%p]/.test(g)?c:"",w=z[g],x=/[defgprs%]/.test(g) -function A(t){var i,o,c,h=m,A=_ -if("c"===g)A=w(t)+A,t="" -else{var E=(t=+t)<0||1/t<0 -if(t=isNaN(t)?f:w(Math.abs(t),b),v&&(t=function(t){t:for(var e,n=t.length,r=1,i=-1;r0&&(i=0)}return i>0?t.slice(0,i)+t.slice(e+1):t}(t)),E&&0==+t&&"+"!==l&&(E=!1),h=(E?"("===l?l:s:"-"===l||"("===l?"":l)+h,A=("s"===g?G[8+j/3]:"")+A+(E&&"("===l?")":""),x)for(i=-1,o=t.length;++i(c=t.charCodeAt(i))||c>57){A=(46===c?a+t.slice(i+1):t.slice(i))+A,t=t.slice(0,i) -break}}y&&!d&&(t=r(t,1/0)) -var k=h.length+t.length+A.length,D=k>1)+h+t+A+D.slice(k) -break -default:t=D+h+t+A}return u(t)}return b=void 0===b?6:/[gprs]/.test(g)?Math.max(1,Math.min(21,b)):Math.max(0,Math.min(20,b)),A.toString=function(){return t+""},A}return{format:l,formatPrefix:function(t,e){var n=l(((t=R(t)).type="f",t)),r=3*Math.max(-8,Math.min(8,Math.floor($(e)/3))),i=Math.pow(10,-r),o=G[8+r/3] -return function(t){return n(i*t)+o}}}}({thousands:",",grouping:[3],currency:["$",""]}),V=q.format,H=q.formatPrefix -var wt=n(801),xt=n(7604) -function At(){var t,e=[],n=[],r=[] -function o(){var t=0,i=Math.max(1,n.length) -for(r=new Array(i-1);++t0?r[i-1]:e[0],i=r?[o[r-1],n]:[o[i-1],o[i]]},u.unknown=function(e){return arguments.length?(t=e,u):u},u.thresholds=function(){return o.slice()},u.copy=function(){return Et().domain([e,n]).range(a).unknown(t)},i.apply(W(u),arguments)}function kt(){var t,e=[.5],n=[0,1],r=1 -function o(i){return i<=i?n[(0,h.ZP)(e,i,0,r)]:t}return o.domain=function(t){return arguments.length?(e=Array.from(t),r=Math.min(e.length,n.length-1),o):e.slice()},o.range=function(t){return arguments.length?(n=Array.from(t),r=Math.min(e.length,n.length-1),o):n.slice()},o.invertExtent=function(t){var r=n.indexOf(t) -return[e[r-1],e[r]]},o.unknown=function(e){return arguments.length?(t=e,o):t},o.copy=function(){return kt().domain(e).range(n).unknown(t)},i.apply(o,arguments)}var Dt=n(9354),Ct=new Date,Ot=new Date -function St(t,e,n,r){function i(e){return t(e=0===arguments.length?new Date:new Date(+e)),e}return i.floor=function(e){return t(e=new Date(+e)),e},i.ceil=function(n){return t(n=new Date(n-1)),e(n,1),t(n),n},i.round=function(t){var e=i(t),n=i.ceil(t) -return t-e0))return u -do{u.push(a=new Date(+n)),e(n,o),t(n)}while(a=e)for(;t(e),!n(e);)e.setTime(e-1)}),(function(t,r){if(t>=t)if(r<0)for(;++r<=0;)for(;e(t,-1),!n(t););else for(;--r>=0;)for(;e(t,1),!n(t););}))},n&&(i.count=function(e,r){return Ct.setTime(+e),Ot.setTime(+r),t(Ct),t(Ot),Math.floor(n(Ct,Ot))},i.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?i.filter(r?function(e){return r(e)%t==0}:function(e){return i.count(0,e)%t==0}):i:null}),i}var Mt=St((function(t){t.setMonth(0,1),t.setHours(0,0,0,0)}),(function(t,e){t.setFullYear(t.getFullYear()+e)}),(function(t,e){return e.getFullYear()-t.getFullYear()}),(function(t){return t.getFullYear()})) -Mt.every=function(t){return isFinite(t=Math.floor(t))&&t>0?St((function(e){e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)}),(function(e,n){e.setFullYear(e.getFullYear()+n*t)})):null} -const Ft=Mt -Mt.range -var Tt=St((function(t){t.setDate(1),t.setHours(0,0,0,0)}),(function(t,e){t.setMonth(t.getMonth()+e)}),(function(t,e){return e.getMonth()-t.getMonth()+12*(e.getFullYear()-t.getFullYear())}),(function(t){return t.getMonth()})) -const Bt=Tt -Tt.range -var Pt=1e3,jt=6e4,Nt=36e5,Rt=864e5,Lt=6048e5 -function It(t){return St((function(e){e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)}),(function(t,e){t.setDate(t.getDate()+7*e)}),(function(t,e){return(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*jt)/Lt}))}var $t=It(0),Ut=It(1),zt=It(2),Zt=It(3),qt=It(4),Vt=It(5),Ht=It(6),Yt=($t.range,Ut.range,zt.range,Zt.range,qt.range,Vt.range,Ht.range,St((t=>t.setHours(0,0,0,0)),((t,e)=>t.setDate(t.getDate()+e)),((t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*jt)/Rt),(t=>t.getDate()-1))) -const Gt=Yt -Yt.range -var Kt=St((function(t){t.setTime(t-t.getMilliseconds()-t.getSeconds()*Pt-t.getMinutes()*jt)}),(function(t,e){t.setTime(+t+e*Nt)}),(function(t,e){return(e-t)/Nt}),(function(t){return t.getHours()})) -const Wt=Kt -Kt.range -var Xt=St((function(t){t.setTime(t-t.getMilliseconds()-t.getSeconds()*Pt)}),(function(t,e){t.setTime(+t+e*jt)}),(function(t,e){return(e-t)/jt}),(function(t){return t.getMinutes()})) -const Jt=Xt -Xt.range -var Qt=St((function(t){t.setTime(t-t.getMilliseconds())}),(function(t,e){t.setTime(+t+e*Pt)}),(function(t,e){return(e-t)/Pt}),(function(t){return t.getUTCSeconds()})) -const te=Qt -Qt.range -var ee=St((function(){}),(function(t,e){t.setTime(+t+e)}),(function(t,e){return e-t})) -ee.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?St((function(e){e.setTime(Math.floor(e/t)*t)}),(function(e,n){e.setTime(+e+n*t)}),(function(e,n){return(n-e)/t})):ee:null} -const ne=ee -function re(t){return St((function(e){e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+7*e)}),(function(t,e){return(e-t)/Lt}))}ee.range -var ie=re(0),oe=re(1),ae=re(2),ue=re(3),ce=re(4),se=re(5),fe=re(6),le=(ie.range,oe.range,ae.range,ue.range,ce.range,se.range,fe.range,St((function(t){t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+e)}),(function(t,e){return(e-t)/Rt}),(function(t){return t.getUTCDate()-1}))) -const he=le -le.range -var de=St((function(t){t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCFullYear(t.getUTCFullYear()+e)}),(function(t,e){return e.getUTCFullYear()-t.getUTCFullYear()}),(function(t){return t.getUTCFullYear()})) -de.every=function(t){return isFinite(t=Math.floor(t))&&t>0?St((function(e){e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)}),(function(e,n){e.setUTCFullYear(e.getUTCFullYear()+n*t)})):null} -const pe=de -function ye(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L) -return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function be(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L)) -return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function ve(t,e,n){return{y:t,m:e,d:n,H:0,M:0,S:0,L:0}}de.range -var ge,me,_e,we={"-":"",_:" ",0:"0"},xe=/^\s*\d+/,Ae=/^%/,Ee=/[\\^$*+?|[\]().{}]/g -function ke(t,e,n){var r=t<0?"-":"",i=(r?-t:t)+"",o=i.length -return r+(o[t.toLowerCase(),e])))}function Se(t,e,n){var r=xe.exec(e.slice(n,n+1)) -return r?(t.w=+r[0],n+r[0].length):-1}function Me(t,e,n){var r=xe.exec(e.slice(n,n+1)) -return r?(t.u=+r[0],n+r[0].length):-1}function Fe(t,e,n){var r=xe.exec(e.slice(n,n+2)) -return r?(t.U=+r[0],n+r[0].length):-1}function Te(t,e,n){var r=xe.exec(e.slice(n,n+2)) -return r?(t.V=+r[0],n+r[0].length):-1}function Be(t,e,n){var r=xe.exec(e.slice(n,n+2)) -return r?(t.W=+r[0],n+r[0].length):-1}function Pe(t,e,n){var r=xe.exec(e.slice(n,n+4)) -return r?(t.y=+r[0],n+r[0].length):-1}function je(t,e,n){var r=xe.exec(e.slice(n,n+2)) -return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function Ne(t,e,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6)) -return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function Re(t,e,n){var r=xe.exec(e.slice(n,n+1)) -return r?(t.q=3*r[0]-3,n+r[0].length):-1}function Le(t,e,n){var r=xe.exec(e.slice(n,n+2)) -return r?(t.m=r[0]-1,n+r[0].length):-1}function Ie(t,e,n){var r=xe.exec(e.slice(n,n+2)) -return r?(t.d=+r[0],n+r[0].length):-1}function $e(t,e,n){var r=xe.exec(e.slice(n,n+3)) -return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function Ue(t,e,n){var r=xe.exec(e.slice(n,n+2)) -return r?(t.H=+r[0],n+r[0].length):-1}function ze(t,e,n){var r=xe.exec(e.slice(n,n+2)) -return r?(t.M=+r[0],n+r[0].length):-1}function Ze(t,e,n){var r=xe.exec(e.slice(n,n+2)) -return r?(t.S=+r[0],n+r[0].length):-1}function qe(t,e,n){var r=xe.exec(e.slice(n,n+3)) -return r?(t.L=+r[0],n+r[0].length):-1}function Ve(t,e,n){var r=xe.exec(e.slice(n,n+6)) -return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function He(t,e,n){var r=Ae.exec(e.slice(n,n+1)) -return r?n+r[0].length:-1}function Ye(t,e,n){var r=xe.exec(e.slice(n)) -return r?(t.Q=+r[0],n+r[0].length):-1}function Ge(t,e,n){var r=xe.exec(e.slice(n)) -return r?(t.s=+r[0],n+r[0].length):-1}function Ke(t,e){return ke(t.getDate(),e,2)}function We(t,e){return ke(t.getHours(),e,2)}function Xe(t,e){return ke(t.getHours()%12||12,e,2)}function Je(t,e){return ke(1+Gt.count(Ft(t),t),e,3)}function Qe(t,e){return ke(t.getMilliseconds(),e,3)}function tn(t,e){return Qe(t,e)+"000"}function en(t,e){return ke(t.getMonth()+1,e,2)}function nn(t,e){return ke(t.getMinutes(),e,2)}function rn(t,e){return ke(t.getSeconds(),e,2)}function on(t){var e=t.getDay() -return 0===e?7:e}function an(t,e){return ke($t.count(Ft(t)-1,t),e,2)}function un(t){var e=t.getDay() -return e>=4||0===e?qt(t):qt.ceil(t)}function cn(t,e){return t=un(t),ke(qt.count(Ft(t),t)+(4===Ft(t).getDay()),e,2)}function sn(t){return t.getDay()}function fn(t,e){return ke(Ut.count(Ft(t)-1,t),e,2)}function ln(t,e){return ke(t.getFullYear()%100,e,2)}function hn(t,e){return ke((t=un(t)).getFullYear()%100,e,2)}function dn(t,e){return ke(t.getFullYear()%1e4,e,4)}function pn(t,e){var n=t.getDay() -return ke((t=n>=4||0===n?qt(t):qt.ceil(t)).getFullYear()%1e4,e,4)}function yn(t){var e=t.getTimezoneOffset() -return(e>0?"-":(e*=-1,"+"))+ke(e/60|0,"0",2)+ke(e%60,"0",2)}function bn(t,e){return ke(t.getUTCDate(),e,2)}function vn(t,e){return ke(t.getUTCHours(),e,2)}function gn(t,e){return ke(t.getUTCHours()%12||12,e,2)}function mn(t,e){return ke(1+he.count(pe(t),t),e,3)}function _n(t,e){return ke(t.getUTCMilliseconds(),e,3)}function wn(t,e){return _n(t,e)+"000"}function xn(t,e){return ke(t.getUTCMonth()+1,e,2)}function An(t,e){return ke(t.getUTCMinutes(),e,2)}function En(t,e){return ke(t.getUTCSeconds(),e,2)}function kn(t){var e=t.getUTCDay() -return 0===e?7:e}function Dn(t,e){return ke(ie.count(pe(t)-1,t),e,2)}function Cn(t){var e=t.getUTCDay() -return e>=4||0===e?ce(t):ce.ceil(t)}function On(t,e){return t=Cn(t),ke(ce.count(pe(t),t)+(4===pe(t).getUTCDay()),e,2)}function Sn(t){return t.getUTCDay()}function Mn(t,e){return ke(oe.count(pe(t)-1,t),e,2)}function Fn(t,e){return ke(t.getUTCFullYear()%100,e,2)}function Tn(t,e){return ke((t=Cn(t)).getUTCFullYear()%100,e,2)}function Bn(t,e){return ke(t.getUTCFullYear()%1e4,e,4)}function Pn(t,e){var n=t.getUTCDay() -return ke((t=n>=4||0===n?ce(t):ce.ceil(t)).getUTCFullYear()%1e4,e,4)}function jn(){return"+0000"}function Nn(){return"%"}function Rn(t){return+t}function Ln(t){return Math.floor(+t/1e3)}ge=function(t){var e=t.dateTime,n=t.date,r=t.time,i=t.periods,o=t.days,a=t.shortDays,u=t.months,c=t.shortMonths,s=Ce(i),f=Oe(i),l=Ce(o),h=Oe(o),d=Ce(a),p=Oe(a),y=Ce(u),b=Oe(u),v=Ce(c),g=Oe(c),m={a:function(t){return a[t.getDay()]},A:function(t){return o[t.getDay()]},b:function(t){return c[t.getMonth()]},B:function(t){return u[t.getMonth()]},c:null,d:Ke,e:Ke,f:tn,g:hn,G:pn,H:We,I:Xe,j:Je,L:Qe,m:en,M:nn,p:function(t){return i[+(t.getHours()>=12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:Rn,s:Ln,S:rn,u:on,U:an,V:cn,w:sn,W:fn,x:null,X:null,y:ln,Y:dn,Z:yn,"%":Nn},_={a:function(t){return a[t.getUTCDay()]},A:function(t){return o[t.getUTCDay()]},b:function(t){return c[t.getUTCMonth()]},B:function(t){return u[t.getUTCMonth()]},c:null,d:bn,e:bn,f:wn,g:Tn,G:Pn,H:vn,I:gn,j:mn,L:_n,m:xn,M:An,p:function(t){return i[+(t.getUTCHours()>=12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:Rn,s:Ln,S:En,u:kn,U:Dn,V:On,w:Sn,W:Mn,x:null,X:null,y:Fn,Y:Bn,Z:jn,"%":Nn},w={a:function(t,e,n){var r=d.exec(e.slice(n)) -return r?(t.w=p.get(r[0].toLowerCase()),n+r[0].length):-1},A:function(t,e,n){var r=l.exec(e.slice(n)) -return r?(t.w=h.get(r[0].toLowerCase()),n+r[0].length):-1},b:function(t,e,n){var r=v.exec(e.slice(n)) -return r?(t.m=g.get(r[0].toLowerCase()),n+r[0].length):-1},B:function(t,e,n){var r=y.exec(e.slice(n)) -return r?(t.m=b.get(r[0].toLowerCase()),n+r[0].length):-1},c:function(t,n,r){return E(t,e,n,r)},d:Ie,e:Ie,f:Ve,g:je,G:Pe,H:Ue,I:Ue,j:$e,L:qe,m:Le,M:ze,p:function(t,e,n){var r=s.exec(e.slice(n)) -return r?(t.p=f.get(r[0].toLowerCase()),n+r[0].length):-1},q:Re,Q:Ye,s:Ge,S:Ze,u:Me,U:Fe,V:Te,w:Se,W:Be,x:function(t,e,r){return E(t,n,e,r)},X:function(t,e,n){return E(t,r,e,n)},y:je,Y:Pe,Z:Ne,"%":He} -function x(t,e){return function(n){var r,i,o,a=[],u=-1,c=0,s=t.length -for(n instanceof Date||(n=new Date(+n));++u53)return null -"w"in o||(o.w=1),"Z"in o?(i=(r=be(ve(o.y,0,1))).getUTCDay(),r=i>4||0===i?oe.ceil(r):oe(r),r=he.offset(r,7*(o.V-1)),o.y=r.getUTCFullYear(),o.m=r.getUTCMonth(),o.d=r.getUTCDate()+(o.w+6)%7):(i=(r=ye(ve(o.y,0,1))).getDay(),r=i>4||0===i?Ut.ceil(r):Ut(r),r=Gt.offset(r,7*(o.V-1)),o.y=r.getFullYear(),o.m=r.getMonth(),o.d=r.getDate()+(o.w+6)%7)}else("W"in o||"U"in o)&&("w"in o||(o.w="u"in o?o.u%7:"W"in o?1:0),i="Z"in o?be(ve(o.y,0,1)).getUTCDay():ye(ve(o.y,0,1)).getDay(),o.m=0,o.d="W"in o?(o.w+6)%7+7*o.W-(i+5)%7:o.w+7*o.U-(i+6)%7) -return"Z"in o?(o.H+=o.Z/100|0,o.M+=o.Z%100,be(o)):ye(o)}}function E(t,e,n,r){for(var i,o,a=0,u=e.length,c=n.length;a=c)return-1 -if(37===(i=e.charCodeAt(a++))){if(i=e.charAt(a++),!(o=w[i in we?e.charAt(a++):i])||(r=o(t,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}return m.x=x(n,m),m.X=x(r,m),m.c=x(e,m),_.x=x(n,_),_.X=x(r,_),_.c=x(e,_),{format:function(t){var e=x(t+="",m) -return e.toString=function(){return t},e},parse:function(t){var e=A(t+="",!1) -return e.toString=function(){return t},e},utcFormat:function(t){var e=x(t+="",_) -return e.toString=function(){return t},e},utcParse:function(t){var e=A(t+="",!0) -return e.toString=function(){return t},e}}}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]}),me=ge.format,ge.parse,_e=ge.utcFormat,ge.utcParse -var In=31536e6 -function $n(t){return new Date(t)}function Un(t){return t instanceof Date?+t:+new Date(+t)}function zn(t,e,n,r,i,o,a,u,c){var s=P(),f=s.invert,h=s.domain,d=c(".%L"),p=c(":%S"),y=c("%I:%M"),b=c("%I %p"),v=c("%a %d"),g=c("%b %d"),m=c("%B"),_=c("%Y"),w=[[a,1,1e3],[a,5,5e3],[a,15,15e3],[a,30,3e4],[o,1,6e4],[o,5,3e5],[o,15,9e5],[o,30,18e5],[i,1,36e5],[i,3,108e5],[i,6,216e5],[i,12,432e5],[r,1,864e5],[r,2,1728e5],[n,1,6048e5],[e,1,2592e6],[e,3,7776e6],[t,1,In]] -function x(u){return(a(u)e(r/(t.length-1))))},n.quantiles=function(e){return Array.from({length:e+1},((n,r)=>(0,wt.Z)(t,r/e)))},n.copy=function(){return ir(e).domain(t)},o.apply(n,arguments)}function or(t,e){void 0===e&&(e=t,t=E) -for(var n=0,r=e.length-1,i=e[0],o=new Array(r<0?0:r);n{"use strict" -n.r(e),n.d(e,{create:()=>gt,creator:()=>c,local:()=>_t,matcher:()=>p,namespace:()=>o,namespaces:()=>i,pointer:()=>At,pointers:()=>Et,select:()=>vt,selectAll:()=>kt,selection:()=>bt,selector:()=>f,selectorAll:()=>d,style:()=>R,window:()=>B}) -var r="http://www.w3.org/1999/xhtml" -const i={svg:"http://www.w3.org/2000/svg",xhtml:r,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"} -function o(t){var e=t+="",n=e.indexOf(":") -return n>=0&&"xmlns"!==(e=t.slice(0,n))&&(t=t.slice(n+1)),i.hasOwnProperty(e)?{space:i[e],local:t}:t}function a(t){return function(){var e=this.ownerDocument,n=this.namespaceURI -return n===r&&e.documentElement.namespaceURI===r?e.createElement(t):e.createElementNS(n,t)}}function u(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function c(t){var e=o(t) -return(e.local?u:a)(e)}function s(){}function f(t){return null==t?s:function(){return this.querySelector(t)}}function l(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}function h(){return[]}function d(t){return null==t?h:function(){return this.querySelectorAll(t)}}function p(t){return function(){return this.matches(t)}}function y(t){return function(e){return e.matches(t)}}var b=Array.prototype.find -function v(){return this.firstElementChild}var g=Array.prototype.filter -function m(){return this.children}function _(t){return new Array(t.length)}function w(t,e){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=e}function x(t){return function(){return t}}function A(t,e,n,r,i,o){for(var a,u=0,c=e.length,s=o.length;ue?1:t>=e?0:NaN}function C(t){return function(){this.removeAttribute(t)}}function O(t){return function(){this.removeAttributeNS(t.space,t.local)}}function S(t,e){return function(){this.setAttribute(t,e)}}function M(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function F(t,e){return function(){var n=e.apply(this,arguments) -null==n?this.removeAttribute(t):this.setAttribute(t,n)}}function T(t,e){return function(){var n=e.apply(this,arguments) -null==n?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,n)}}function B(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}function P(t){return function(){this.style.removeProperty(t)}}function j(t,e,n){return function(){this.style.setProperty(t,e,n)}}function N(t,e,n){return function(){var r=e.apply(this,arguments) -null==r?this.style.removeProperty(t):this.style.setProperty(t,r,n)}}function R(t,e){return t.style.getPropertyValue(e)||B(t).getComputedStyle(t,null).getPropertyValue(e)}function L(t){return function(){delete this[t]}}function I(t,e){return function(){this[t]=e}}function $(t,e){return function(){var n=e.apply(this,arguments) -null==n?delete this[t]:this[t]=n}}function U(t){return t.trim().split(/^|\s+/)}function z(t){return t.classList||new Z(t)}function Z(t){this._node=t,this._names=U(t.getAttribute("class")||"")}function q(t,e){for(var n=z(t),r=-1,i=e.length;++r=0&&(e=t.slice(n+1),t=t.slice(0,n)),{type:t,name:e}}))}function ct(t){return function(){var e=this.__on -if(e){for(var n,r=0,i=-1,o=e.length;r=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}} -var dt=[null] -function pt(t,e){this._groups=t,this._parents=e}function yt(){return new pt([[document.documentElement]],dt)}pt.prototype=yt.prototype={constructor:pt,select:function(t){"function"!=typeof t&&(t=f(t)) -for(var e=this._groups,n=e.length,r=new Array(n),i=0;i=D&&(D=w+1);!(_=v[D])&&++D=0;)(r=i[o])&&(a&&4^r.compareDocumentPosition(a)&&a.parentNode.insertBefore(r,a),a=r) -return this},sort:function(t){function e(e,n){return e&&n?t(e.__data__,n.__data__):!e-!n}t||(t=D) -for(var n=this._groups,r=n.length,i=new Array(r),o=0;o1?this.each((null==e?P:"function"==typeof e?N:j)(t,e,null==n?"":n)):R(this.node(),t)},property:function(t,e){return arguments.length>1?this.each((null==e?L:"function"==typeof e?$:I)(t,e)):this.node()[t]},classed:function(t,e){var n=U(t+"") -if(arguments.length<2){for(var r=z(this.node()),i=-1,o=n.length;++iAt(t,e)))}function kt(t){return"string"==typeof t?new pt([document.querySelectorAll(t)],[document.documentElement]):new pt([null==t?[]:l(t)],dt)}wt.prototype=_t.prototype={constructor:wt,get:function(t){for(var e=this._;!(e in t);)if(!(t=t.parentNode))return -return t[e]},set:function(t,e){return t[this._]=e},remove:function(t){return this._ in t&&delete t[this._]},toString:function(){return this._}}},6736:(t,e,n)=>{"use strict" -n.r(e),n.d(e,{arc:()=>F,area:()=>I,areaRadial:()=>G,curveBasis:()=>Ct,curveBasisClosed:()=>St,curveBasisOpen:()=>Ft,curveBumpX:()=>Bt,curveBumpY:()=>Pt,curveBundle:()=>Nt,curveCardinal:()=>It,curveCardinalClosed:()=>Ut,curveCardinalOpen:()=>Zt,curveCatmullRom:()=>Ht,curveCatmullRomClosed:()=>Gt,curveCatmullRomOpen:()=>Wt,curveLinear:()=>j,curveLinearClosed:()=>Jt,curveMonotoneX:()=>ae,curveMonotoneY:()=>ue,curveNatural:()=>fe,curveStep:()=>he,curveStepAfter:()=>pe,curveStepBefore:()=>de,line:()=>L,lineRadial:()=>Y,linkHorizontal:()=>nt,linkRadial:()=>it,linkVertical:()=>rt,pie:()=>z,pointRadial:()=>K,radialArea:()=>G,radialLine:()=>Y,stack:()=>me,stackOffsetDiverging:()=>we,stackOffsetExpand:()=>_e,stackOffsetNone:()=>ye,stackOffsetSilhouette:()=>xe,stackOffsetWiggle:()=>Ae,stackOrderAppearance:()=>Ee,stackOrderAscending:()=>De,stackOrderDescending:()=>Oe,stackOrderInsideOut:()=>Se,stackOrderNone:()=>be,stackOrderReverse:()=>Me,symbol:()=>At,symbolCircle:()=>ot,symbolCross:()=>at,symbolDiamond:()=>st,symbolSquare:()=>pt,symbolStar:()=>dt,symbolTriangle:()=>bt,symbolWye:()=>wt,symbols:()=>xt}) -const r=Math.PI,i=2*r,o=1e-6,a=i-o -function u(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function c(){return new u}u.prototype=c.prototype={constructor:u,moveTo:function(t,e){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)},closePath:function(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function(t,e){this._+="L"+(this._x1=+t)+","+(this._y1=+e)},quadraticCurveTo:function(t,e,n,r){this._+="Q"+ +t+","+ +e+","+(this._x1=+n)+","+(this._y1=+r)},bezierCurveTo:function(t,e,n,r,i,o){this._+="C"+ +t+","+ +e+","+ +n+","+ +r+","+(this._x1=+i)+","+(this._y1=+o)},arcTo:function(t,e,n,i,a){t=+t,e=+e,n=+n,i=+i,a=+a -var u=this._x1,c=this._y1,s=n-t,f=i-e,l=u-t,h=c-e,d=l*l+h*h -if(a<0)throw new Error("negative radius: "+a) -if(null===this._x1)this._+="M"+(this._x1=t)+","+(this._y1=e) -else if(d>o)if(Math.abs(h*s-f*l)>o&&a){var p=n-u,y=i-c,b=s*s+f*f,v=p*p+y*y,g=Math.sqrt(b),m=Math.sqrt(d),_=a*Math.tan((r-Math.acos((b+d-v)/(2*g*m)))/2),w=_/m,x=_/g -Math.abs(w-1)>o&&(this._+="L"+(t+w*l)+","+(e+w*h)),this._+="A"+a+","+a+",0,0,"+ +(h*p>l*y)+","+(this._x1=t+x*s)+","+(this._y1=e+x*f)}else this._+="L"+(this._x1=t)+","+(this._y1=e)},arc:function(t,e,n,u,c,s){t=+t,e=+e,s=!!s -var f=(n=+n)*Math.cos(u),l=n*Math.sin(u),h=t+f,d=e+l,p=1^s,y=s?u-c:c-u -if(n<0)throw new Error("negative radius: "+n) -null===this._x1?this._+="M"+h+","+d:(Math.abs(this._x1-h)>o||Math.abs(this._y1-d)>o)&&(this._+="L"+h+","+d),n&&(y<0&&(y=y%i+i),y>a?this._+="A"+n+","+n+",0,1,"+p+","+(t-f)+","+(e-l)+"A"+n+","+n+",0,1,"+p+","+(this._x1=h)+","+(this._y1=d):y>o&&(this._+="A"+n+","+n+",0,"+ +(y>=r)+","+p+","+(this._x1=t+n*Math.cos(c))+","+(this._y1=e+n*Math.sin(c))))},rect:function(t,e,n,r){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)+"h"+ +n+"v"+ +r+"h"+-n+"Z"},toString:function(){return this._}} -const s=c -function f(t){return function(){return t}}var l=Math.abs,h=Math.atan2,d=Math.cos,p=Math.max,y=Math.min,b=Math.sin,v=Math.sqrt,g=1e-12,m=Math.PI,_=m/2,w=2*m -function x(t){return t>1?0:t<-1?m:Math.acos(t)}function A(t){return t>=1?_:t<=-1?-_:Math.asin(t)}function E(t){return t.innerRadius}function k(t){return t.outerRadius}function D(t){return t.startAngle}function C(t){return t.endAngle}function O(t){return t&&t.padAngle}function S(t,e,n,r,i,o,a,u){var c=n-t,s=r-e,f=a-i,l=u-o,h=l*c-f*s -if(!(h*hT*T+B*B&&(D=O,C=S),{cx:D,cy:C,x01:-f,y01:-l,x11:D*(i/A-1),y11:C*(i/A-1)}}function F(){var t=E,e=k,n=f(0),r=null,i=D,o=C,a=O,u=null -function c(){var c,f,p=+t.apply(this,arguments),E=+e.apply(this,arguments),k=i.apply(this,arguments)-_,D=o.apply(this,arguments)-_,C=l(D-k),O=D>k -if(u||(u=c=s()),Eg)if(C>w-g)u.moveTo(E*d(k),E*b(k)),u.arc(0,0,E,k,D,!O),p>g&&(u.moveTo(p*d(D),p*b(D)),u.arc(0,0,p,D,k,O)) -else{var F,T,B=k,P=D,j=k,N=D,R=C,L=C,I=a.apply(this,arguments)/2,$=I>g&&(r?+r.apply(this,arguments):v(p*p+E*E)),U=y(l(E-p)/2,+n.apply(this,arguments)),z=U,Z=U -if($>g){var q=A($/p*b(I)),V=A($/E*b(I));(R-=2*q)>g?(j+=q*=O?1:-1,N-=q):(R=0,j=N=(k+D)/2),(L-=2*V)>g?(B+=V*=O?1:-1,P-=V):(L=0,B=P=(k+D)/2)}var H=E*d(B),Y=E*b(B),G=p*d(N),K=p*b(N) -if(U>g){var W,X=E*d(P),J=E*b(P),Q=p*d(j),tt=p*b(j) -if(Cg?Z>g?(F=M(Q,tt,H,Y,E,Z,O),T=M(X,J,G,K,E,Z,O),u.moveTo(F.cx+F.x01,F.cy+F.y01),Zg&&R>g?z>g?(F=M(G,K,X,J,p,-z,O),T=M(H,Y,Q,tt,p,-z,O),u.lineTo(F.cx+F.x01,F.cy+F.y01),z=l;--h)u.point(v[h],g[h]) -u.lineEnd(),u.areaEnd()}b&&(v[f]=+t(d,f,c),g[f]=+e(d,f,c),u.point(r?+r(d,f,c):v[f],n?+n(d,f,c):g[f]))}if(p)return u=null,p+""||null}function l(){return L().defined(i).curve(a).context(o)}return t="function"==typeof t?t:void 0===t?N:f(+t),e="function"==typeof e?e:f(void 0===e?0:+e),n="function"==typeof n?n:void 0===n?R:f(+n),c.x=function(e){return arguments.length?(t="function"==typeof e?e:f(+e),r=null,c):t},c.x0=function(e){return arguments.length?(t="function"==typeof e?e:f(+e),c):t},c.x1=function(t){return arguments.length?(r=null==t?null:"function"==typeof t?t:f(+t),c):r},c.y=function(t){return arguments.length?(e="function"==typeof t?t:f(+t),n=null,c):e},c.y0=function(t){return arguments.length?(e="function"==typeof t?t:f(+t),c):e},c.y1=function(t){return arguments.length?(n=null==t?null:"function"==typeof t?t:f(+t),c):n},c.lineX0=c.lineY0=function(){return l().x(t).y(e)},c.lineY1=function(){return l().x(t).y(n)},c.lineX1=function(){return l().x(r).y(e)},c.defined=function(t){return arguments.length?(i="function"==typeof t?t:f(!!t),c):i},c.curve=function(t){return arguments.length?(a=t,null!=o&&(u=a(o)),c):a},c.context=function(t){return arguments.length?(null==t?o=u=null:u=a(o=t),c):o},c}function $(t,e){return et?1:e>=t?0:NaN}function U(t){return t}function z(){var t=U,e=$,n=null,r=f(0),i=f(w),o=f(0) -function a(a){var u,c,s,f,l,h=(a=B(a)).length,d=0,p=new Array(h),y=new Array(h),b=+r.apply(this,arguments),v=Math.min(w,Math.max(-w,i.apply(this,arguments)-b)),g=Math.min(Math.abs(v)/h,o.apply(this,arguments)),m=g*(v<0?-1:1) -for(u=0;u0&&(d+=l) -for(null!=e?p.sort((function(t,n){return e(y[t],y[n])})):null!=n&&p.sort((function(t,e){return n(a[t],a[e])})),u=0,s=d?(v-h*m)/d:0;u0?l*s:0)+m,y[c]={data:a[c],index:u,value:l,startAngle:b,endAngle:f,padAngle:g} -return y}return a.value=function(e){return arguments.length?(t="function"==typeof e?e:f(+e),a):t},a.sortValues=function(t){return arguments.length?(e=t,n=null,a):e},a.sort=function(t){return arguments.length?(n=t,e=null,a):n},a.startAngle=function(t){return arguments.length?(r="function"==typeof t?t:f(+t),a):r},a.endAngle=function(t){return arguments.length?(i="function"==typeof t?t:f(+t),a):i},a.padAngle=function(t){return arguments.length?(o="function"==typeof t?t:f(+t),a):o},a}P.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e) -break -case 1:this._point=2 -default:this._context.lineTo(t,e)}}} -var Z=V(j) -function q(t){this._curve=t}function V(t){function e(e){return new q(t(e))}return e._curve=t,e}function H(t){var e=t.curve -return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t.curve=function(t){return arguments.length?e(V(t)):e()._curve},t}function Y(){return H(L().curve(Z))}function G(){var t=I().curve(Z),e=t.curve,n=t.lineX0,r=t.lineX1,i=t.lineY0,o=t.lineY1 -return t.angle=t.x,delete t.x,t.startAngle=t.x0,delete t.x0,t.endAngle=t.x1,delete t.x1,t.radius=t.y,delete t.y,t.innerRadius=t.y0,delete t.y0,t.outerRadius=t.y1,delete t.y1,t.lineStartAngle=function(){return H(n())},delete t.lineX0,t.lineEndAngle=function(){return H(r())},delete t.lineX1,t.lineInnerRadius=function(){return H(i())},delete t.lineY0,t.lineOuterRadius=function(){return H(o())},delete t.lineY1,t.curve=function(t){return arguments.length?e(V(t)):e()._curve},t}function K(t,e){return[(e=+e)*Math.cos(t-=Math.PI/2),e*Math.sin(t)]}function W(t){return t.source}function X(t){return t.target}function J(t){var e=W,n=X,r=N,i=R,o=null -function a(){var a,u=T.call(arguments),c=e.apply(this,u),f=n.apply(this,u) -if(o||(o=a=s()),t(o,+r.apply(this,(u[0]=c,u)),+i.apply(this,u),+r.apply(this,(u[0]=f,u)),+i.apply(this,u)),a)return o=null,a+""||null}return a.source=function(t){return arguments.length?(e=t,a):e},a.target=function(t){return arguments.length?(n=t,a):n},a.x=function(t){return arguments.length?(r="function"==typeof t?t:f(+t),a):r},a.y=function(t){return arguments.length?(i="function"==typeof t?t:f(+t),a):i},a.context=function(t){return arguments.length?(o=null==t?null:t,a):o},a}function Q(t,e,n,r,i){t.moveTo(e,n),t.bezierCurveTo(e=(e+r)/2,n,e,i,r,i)}function tt(t,e,n,r,i){t.moveTo(e,n),t.bezierCurveTo(e,n=(n+i)/2,r,n,r,i)}function et(t,e,n,r,i){var o=K(e,n),a=K(e,n=(n+i)/2),u=K(r,n),c=K(r,i) -t.moveTo(o[0],o[1]),t.bezierCurveTo(a[0],a[1],u[0],u[1],c[0],c[1])}function nt(){return J(Q)}function rt(){return J(tt)}function it(){var t=J(et) -return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t}q.prototype={areaStart:function(){this._curve.areaStart()},areaEnd:function(){this._curve.areaEnd()},lineStart:function(){this._curve.lineStart()},lineEnd:function(){this._curve.lineEnd()},point:function(t,e){this._curve.point(e*Math.sin(t),e*-Math.cos(t))}} -const ot={draw:function(t,e){var n=Math.sqrt(e/m) -t.moveTo(n,0),t.arc(0,0,n,0,w)}},at={draw:function(t,e){var n=Math.sqrt(e/5)/2 -t.moveTo(-3*n,-n),t.lineTo(-n,-n),t.lineTo(-n,-3*n),t.lineTo(n,-3*n),t.lineTo(n,-n),t.lineTo(3*n,-n),t.lineTo(3*n,n),t.lineTo(n,n),t.lineTo(n,3*n),t.lineTo(-n,3*n),t.lineTo(-n,n),t.lineTo(-3*n,n),t.closePath()}} -var ut=Math.sqrt(1/3),ct=2*ut -const st={draw:function(t,e){var n=Math.sqrt(e/ct),r=n*ut -t.moveTo(0,-n),t.lineTo(r,0),t.lineTo(0,n),t.lineTo(-r,0),t.closePath()}} -var ft=Math.sin(m/10)/Math.sin(7*m/10),lt=Math.sin(w/10)*ft,ht=-Math.cos(w/10)*ft -const dt={draw:function(t,e){var n=Math.sqrt(.8908130915292852*e),r=lt*n,i=ht*n -t.moveTo(0,-n),t.lineTo(r,i) -for(var o=1;o<5;++o){var a=w*o/5,u=Math.cos(a),c=Math.sin(a) -t.lineTo(c*n,-u*n),t.lineTo(u*r-c*i,c*r+u*i)}t.closePath()}},pt={draw:function(t,e){var n=Math.sqrt(e),r=-n/2 -t.rect(r,r,n,n)}} -var yt=Math.sqrt(3) -const bt={draw:function(t,e){var n=-Math.sqrt(e/(3*yt)) -t.moveTo(0,2*n),t.lineTo(-yt*n,-n),t.lineTo(yt*n,-n),t.closePath()}} -var vt=-.5,gt=Math.sqrt(3)/2,mt=1/Math.sqrt(12),_t=3*(mt/2+1) -const wt={draw:function(t,e){var n=Math.sqrt(e/_t),r=n/2,i=n*mt,o=r,a=n*mt+n,u=-o,c=a -t.moveTo(r,i),t.lineTo(o,a),t.lineTo(u,c),t.lineTo(vt*r-gt*i,gt*r+vt*i),t.lineTo(vt*o-gt*a,gt*o+vt*a),t.lineTo(vt*u-gt*c,gt*u+vt*c),t.lineTo(vt*r+gt*i,vt*i-gt*r),t.lineTo(vt*o+gt*a,vt*a-gt*o),t.lineTo(vt*u+gt*c,vt*c-gt*u),t.closePath()}} -var xt=[ot,at,st,pt,dt,bt,wt] -function At(t,e){var n=null -function r(){var r -if(n||(n=r=s()),t.apply(this,arguments).draw(n,+e.apply(this,arguments)),r)return n=null,r+""||null}return t="function"==typeof t?t:f(t||ot),e="function"==typeof e?e:f(void 0===e?64:+e),r.type=function(e){return arguments.length?(t="function"==typeof e?e:f(e),r):t},r.size=function(t){return arguments.length?(e="function"==typeof t?t:f(+t),r):e},r.context=function(t){return arguments.length?(n=null==t?null:t,r):n},r}function Et(){}function kt(t,e,n){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+n)/6)}function Dt(t){this._context=t}function Ct(t){return new Dt(t)}function Ot(t){this._context=t}function St(t){return new Ot(t)}function Mt(t){this._context=t}function Ft(t){return new Mt(t)}Dt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:kt(this,this._x1,this._y1) -case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e) -break -case 1:this._point=2 -break -case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6) -default:kt(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},Ot.prototype={areaStart:Et,areaEnd:Et,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath() -break -case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath() -break -case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e -break -case 1:this._point=2,this._x3=t,this._y3=e -break -case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6) -break -default:kt(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},Mt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1 -break -case 1:this._point=2 -break -case 2:this._point=3 -var n=(this._x0+4*this._x1+t)/6,r=(this._y0+4*this._y1+e)/6 -this._line?this._context.lineTo(n,r):this._context.moveTo(n,r) -break -case 3:this._point=4 -default:kt(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}} -class Tt{constructor(t,e){this._context=t,this._x=e}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line}point(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e) -break -case 1:this._point=2 -default:this._x?this._context.bezierCurveTo(this._x0=(this._x0+t)/2,this._y0,this._x0,e,t,e):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+e)/2,t,this._y0,t,e)}this._x0=t,this._y0=e}}function Bt(t){return new Tt(t,!0)}function Pt(t){return new Tt(t,!1)}function jt(t,e){this._basis=new Dt(t),this._beta=e}jt.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,e=this._y,n=t.length-1 -if(n>0)for(var r,i=t[0],o=e[0],a=t[n]-i,u=e[n]-o,c=-1;++c<=n;)r=c/n,this._basis.point(this._beta*t[c]+(1-this._beta)*(i+r*a),this._beta*e[c]+(1-this._beta)*(o+r*u)) -this._x=this._y=null,this._basis.lineEnd()},point:function(t,e){this._x.push(+t),this._y.push(+e)}} -const Nt=function t(e){function n(t){return 1===e?new Dt(t):new jt(t,e)}return n.beta=function(e){return t(+e)},n}(.85) -function Rt(t,e,n){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-n),t._x2,t._y2)}function Lt(t,e){this._context=t,this._k=(1-e)/6}Lt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2) -break -case 3:Rt(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e) -break -case 1:this._point=2,this._x1=t,this._y1=e -break -case 2:this._point=3 -default:Rt(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}} -const It=function t(e){function n(t){return new Lt(t,e)}return n.tension=function(e){return t(+e)},n}(0) -function $t(t,e){this._context=t,this._k=(1-e)/6}$t.prototype={areaStart:Et,areaEnd:Et,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath() -break -case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath() -break -case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x3=t,this._y3=e -break -case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e) -break -case 2:this._point=3,this._x5=t,this._y5=e -break -default:Rt(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}} -const Ut=function t(e){function n(t){return new $t(t,e)}return n.tension=function(e){return t(+e)},n}(0) -function zt(t,e){this._context=t,this._k=(1-e)/6}zt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1 -break -case 1:this._point=2 -break -case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2) -break -case 3:this._point=4 -default:Rt(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}} -const Zt=function t(e){function n(t){return new zt(t,e)}return n.tension=function(e){return t(+e)},n}(0) -function qt(t,e,n){var r=t._x1,i=t._y1,o=t._x2,a=t._y2 -if(t._l01_a>g){var u=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,c=3*t._l01_a*(t._l01_a+t._l12_a) -r=(r*u-t._x0*t._l12_2a+t._x2*t._l01_2a)/c,i=(i*u-t._y0*t._l12_2a+t._y2*t._l01_2a)/c}if(t._l23_a>g){var s=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,f=3*t._l23_a*(t._l23_a+t._l12_a) -o=(o*s+t._x1*t._l23_2a-e*t._l12_2a)/f,a=(a*s+t._y1*t._l23_2a-n*t._l12_2a)/f}t._context.bezierCurveTo(r,i,o,a,t._x2,t._y2)}function Vt(t,e){this._context=t,this._alpha=e}Vt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2) -break -case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e -this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e) -break -case 1:this._point=2 -break -case 2:this._point=3 -default:qt(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}} -const Ht=function t(e){function n(t){return e?new Vt(t,e):new Lt(t,0)}return n.alpha=function(e){return t(+e)},n}(.5) -function Yt(t,e){this._context=t,this._alpha=e}Yt.prototype={areaStart:Et,areaEnd:Et,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath() -break -case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath() -break -case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e -this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=e -break -case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e) -break -case 2:this._point=3,this._x5=t,this._y5=e -break -default:qt(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}} -const Gt=function t(e){function n(t){return e?new Yt(t,e):new $t(t,0)}return n.alpha=function(e){return t(+e)},n}(.5) -function Kt(t,e){this._context=t,this._alpha=e}Kt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e -this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1 -break -case 1:this._point=2 -break -case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2) -break -case 3:this._point=4 -default:qt(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}} -const Wt=function t(e){function n(t){return e?new Kt(t,e):new zt(t,0)}return n.alpha=function(e){return t(+e)},n}(.5) -function Xt(t){this._context=t}function Jt(t){return new Xt(t)}function Qt(t){return t<0?-1:1}function te(t,e,n){var r=t._x1-t._x0,i=e-t._x1,o=(t._y1-t._y0)/(r||i<0&&-0),a=(n-t._y1)/(i||r<0&&-0),u=(o*i+a*r)/(r+i) -return(Qt(o)+Qt(a))*Math.min(Math.abs(o),Math.abs(a),.5*Math.abs(u))||0}function ee(t,e){var n=t._x1-t._x0 -return n?(3*(t._y1-t._y0)/n-e)/2:e}function ne(t,e,n){var r=t._x0,i=t._y0,o=t._x1,a=t._y1,u=(o-r)/3 -t._context.bezierCurveTo(r+u,i+u*e,o-u,a-u*n,o,a)}function re(t){this._context=t}function ie(t){this._context=new oe(t)}function oe(t){this._context=t}function ae(t){return new re(t)}function ue(t){return new ie(t)}function ce(t){this._context=t}function se(t){var e,n,r=t.length-1,i=new Array(r),o=new Array(r),a=new Array(r) -for(i[0]=0,o[0]=2,a[0]=t[0]+2*t[1],e=1;e=0;--e)i[e]=(a[e]-i[e+1])/o[e] -for(o[r-1]=(t[r]+i[r-1])/2,e=0;e1)for(var n,r,i,o=1,a=t[e[0]],u=a.length;o=0;)n[e]=e -return n}function ve(t,e){return t[e]}function ge(t){const e=[] -return e.key=t,e}function me(){var t=f([]),e=be,n=ye,r=ve -function i(i){var o,a,u=Array.from(t.apply(this,arguments),ge),c=u.length,s=-1 -for(const t of i)for(o=0,++s;o0){for(var n,r,i,o=0,a=t[0].length;o0)for(var n,r,i,o,a,u,c=0,s=t[e[0]].length;c0?(r[0]=o,r[1]=o+=i):i<0?(r[1]=a,r[0]=a+=i):(r[0]=0,r[1]=i)}function xe(t,e){if((n=t.length)>0){for(var n,r=0,i=t[e[0]],o=i.length;r0&&(r=(n=t[e[0]]).length)>0){for(var n,r,i,o=0,a=1;ao&&(o=e,r=n) -return r}function De(t){var e=t.map(Ce) -return be(t).sort((function(t,n){return e[t]-e[n]}))}function Ce(t){for(var e,n=0,r=-1,i=t.length;++r=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e) -break -case 1:this._point=2 -default:if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e) -else{var n=this._x*(1-this._t)+t*this._t -this._context.lineTo(n,this._y),this._context.lineTo(n,e)}}this._x=t,this._y=e}}},4434:function(t){t.exports=function(){"use strict" -var t="millisecond",e="second",n="minute",r="hour",i="day",o="week",a="month",u="quarter",c="year",s="date",f=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[^0-9]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,l=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,h={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_")},d=function(t,e,n){var r=String(t) -return!r||r.length>=e?t:""+Array(e+1-r.length).join(n)+t},p={s:d,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60 -return(e<=0?"+":"-")+d(r,2,"0")+":"+d(i,2,"0")},m:function t(e,n){if(e.date()0,b<=y.r||!y.r){b<=1&&p>0&&(y=h[p-1]) -var v=l[y.l] -u&&(b=u(""+b)),s="string"==typeof v?v.replace("%d",b):v(b,r,y.l,f) -break}}if(r)return s -var g=f?l.future:l.past -return"function"==typeof g?g(s):g.replace("%s",s)},r.to=function(t,e){return o(t,e,this,!0)},r.from=function(t,e){return o(t,e,this)} -var a=function(t){return t.$u?n.utc():n()} -r.toNow=function(t){return this.to(a(this),t)},r.fromNow=function(t){return this.from(a(this),t)}}}()},2999:t=>{"use strict" -var e=function(t){return function(t){return!!t&&"object"==typeof t}(t)&&!function(t){var e=Object.prototype.toString.call(t) -return"[object RegExp]"===e||"[object Date]"===e||function(t){return t.$$typeof===n}(t)}(t)},n="function"==typeof Symbol&&Symbol.for?Symbol.for("react.element"):60103 -function r(t,e){return!1!==e.clone&&e.isMergeableObject(t)?u((n=t,Array.isArray(n)?[]:{}),t,e):t -var n}function i(t,e,n){return t.concat(e).map((function(t){return r(t,n)}))}function o(t){return Object.keys(t).concat(function(t){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(t).filter((function(e){return t.propertyIsEnumerable(e)})):[]}(t))}function a(t,e){try{return e in t}catch(t){return!1}}function u(t,n,c){(c=c||{}).arrayMerge=c.arrayMerge||i,c.isMergeableObject=c.isMergeableObject||e,c.cloneUnlessOtherwiseSpecified=r -var s=Array.isArray(n) -return s===Array.isArray(t)?s?c.arrayMerge(t,n,c):function(t,e,n){var i={} -return n.isMergeableObject(t)&&o(t).forEach((function(e){i[e]=r(t[e],n)})),o(e).forEach((function(o){(function(t,e){return a(t,e)&&!(Object.hasOwnProperty.call(t,e)&&Object.propertyIsEnumerable.call(t,e))})(t,o)||(a(t,o)&&n.isMergeableObject(e[o])?i[o]=function(t,e){if(!e.customMerge)return u -var n=e.customMerge(t) -return"function"==typeof n?n:u}(o,n)(t[o],e[o],n):i[o]=r(e[o],n))})),i}(t,n,c):r(n,c)}u.all=function(t,e){if(!Array.isArray(t))throw new Error("first argument should be an array") -return t.reduce((function(t,n){return u(t,n,e)}),{})} -var c=u -t.exports=c},6673:(t,e,n)=>{"use strict" -n.r(e),n.d(e,{default:()=>P}) -var r=n(4927),i=["input","select","textarea","a[href]","button","[tabindex]:not(slot)","audio[controls]","video[controls]",'[contenteditable]:not([contenteditable="false"])',"details>summary:first-of-type","details"],o=i.join(","),a="undefined"==typeof Element,u=a?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,c=!a&&Element.prototype.getRootNode?function(t){return t.getRootNode()}:function(t){return t.ownerDocument},s=function(t,e,n){var r=Array.prototype.slice.apply(t.querySelectorAll(o)) -return e&&u.call(t,o)&&r.unshift(t),r.filter(n)},f=function t(e,n,r){for(var i=[],a=Array.from(e);a.length;){var c=a.shift() -if("SLOT"===c.tagName){var s=c.assignedElements(),f=t(s.length?s:c.children,!0,r) -r.flatten?i.push.apply(i,f):i.push({scope:c,candidates:f})}else{u.call(c,o)&&r.filter(c)&&(n||!e.includes(c))&&i.push(c) -var l=c.shadowRoot||"function"==typeof r.getShadowRoot&&r.getShadowRoot(c),h=!r.shadowRootFilter||r.shadowRootFilter(c) -if(l&&h){var d=t(!0===l?c.children:l.children,!0,r) -r.flatten?i.push.apply(i,d):i.push({scope:c,candidates:d})}else a.unshift.apply(a,c.children)}}return i},l=function(t,e){return t.tabIndex<0&&(e||/^(AUDIO|VIDEO|DETAILS)$/.test(t.tagName)||t.isContentEditable)&&isNaN(parseInt(t.getAttribute("tabindex"),10))?0:t.tabIndex},h=function(t,e){return t.tabIndex===e.tabIndex?t.documentOrder-e.documentOrder:t.tabIndex-e.tabIndex},d=function(t){return"INPUT"===t.tagName},p=function(t){var e=t.getBoundingClientRect(),n=e.width,r=e.height -return 0===n&&0===r},y=function(t,e){return!(e.disabled||function(t){return d(t)&&"hidden"===t.type}(e)||function(t,e){var n=e.displayCheck,r=e.getShadowRoot -if("hidden"===getComputedStyle(t).visibility)return!0 -var i=u.call(t,"details>summary:first-of-type")?t.parentElement:t -if(u.call(i,"details:not([open]) *"))return!0 -var o=c(t).host,a=(null==o?void 0:o.ownerDocument.contains(o))||t.ownerDocument.contains(t) -if(n&&"full"!==n){if("non-zero-area"===n)return p(t)}else{if("function"==typeof r){for(var s=t;t;){var f=t.parentElement,l=c(t) -if(f&&!f.shadowRoot&&!0===r(f))return p(t) -t=t.assignedSlot?t.assignedSlot:f||l===t.ownerDocument?f:l.host}t=s}if(a)return!t.getClientRects().length}return!1}(e,t)||function(t){return"DETAILS"===t.tagName&&Array.prototype.slice.apply(t.children).some((function(t){return"SUMMARY"===t.tagName}))}(e)||function(t){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(t.tagName))for(var e=t.parentElement;e;){if("FIELDSET"===e.tagName&&e.disabled){for(var n=0;n=0)},g=function t(e){var n=[],r=[] -return e.forEach((function(e,i){var o=!!e.scope,a=o?e.scope:e,u=l(a,o),c=o?t(e.candidates):a -0===u?o?n.push.apply(n,c):n.push(a):r.push({documentOrder:i,tabIndex:u,item:e,isScope:o,content:c})})),r.sort(h).reduce((function(t,e){return e.isScope?t.push.apply(t,e.content):t.push(e.content),t}),[]).concat(n)},m=function(t,e){var n -return n=(e=e||{}).getShadowRoot?f([t],e.includeContainer,{filter:b.bind(null,e),flatten:!1,getShadowRoot:e.getShadowRoot,shadowRootFilter:v}):s(t,e.includeContainer,b.bind(null,e)),g(n)},_=function(t,e){if(e=e||{},!t)throw new Error("No node provided") -return!1!==u.call(t,o)&&b(e,t)},w=i.concat("iframe").join(","),x=function(t,e){if(e=e||{},!t)throw new Error("No node provided") -return!1!==u.call(t,w)&&y(e,t)} -function A(t,e){var n=Object.keys(t) -if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t) -e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function E(t){for(var e=1;e0){var e=D[D.length-1] -e!==t&&e.pause()}var n=D.indexOf(t);-1===n||D.splice(n,1),D.push(t)},deactivateTrap:function(t){var e=D.indexOf(t);-1!==e&&D.splice(e,1),D.length>0&&D[D.length-1].unpause()}}),O=function(t){return setTimeout(t,0)},S=function(t,e){var n=-1 -return t.every((function(t,r){return!e(t)||(n=r,!1)})),n},M=function(t){for(var e=arguments.length,n=new Array(e>1?e-1:0),r=1;r1?n-1:0),a=1;a=0)t=r.activeElement -else{var e=o.tabbableGroups[0] -t=e&&e.firstTabbableNode||c("fallbackFocus")}if(!t)throw new Error("Your focus-trap needs to have at least one focusable element") -return t},h=function(){if(o.containerGroups=o.containers.map((function(t){var e,n,r=m(t,i.tabbableOptions),o=(e=t,(n=(n=i.tabbableOptions)||{}).getShadowRoot?f([e],n.includeContainer,{filter:y.bind(null,n),flatten:!0,getShadowRoot:n.getShadowRoot}):s(e,n.includeContainer,y.bind(null,n))) -return{container:t,tabbableNodes:r,focusableNodes:o,firstTabbableNode:r.length>0?r[0]:null,lastTabbableNode:r.length>0?r[r.length-1]:null,nextTabbableNode:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=o.findIndex((function(e){return e===t})) -if(!(n<0))return e?o.slice(n+1).find((function(t){return _(t,i.tabbableOptions)})):o.slice(0,n).reverse().find((function(t){return _(t,i.tabbableOptions)}))}}})),o.tabbableGroups=o.containerGroups.filter((function(t){return t.tabbableNodes.length>0})),o.tabbableGroups.length<=0&&!c("fallbackFocus"))throw new Error("Your focus-trap must have at least one container with at least one tabbable node in it at all times")},d=function t(e){!1!==e&&e!==r.activeElement&&(e&&e.focus?(e.focus({preventScroll:!!i.preventScroll}),o.mostRecentlyFocusedNode=e,function(t){return t.tagName&&"input"===t.tagName.toLowerCase()&&"function"==typeof t.select}(e)&&e.select()):t(l()))},p=function(t){var e=c("setReturnFocus",t) -return e||!1!==e&&t},b=function(t){var e=F(t) -u(e)>=0||(M(i.clickOutsideDeactivates,t)?n.deactivate({returnFocus:i.returnFocusOnDeactivate&&!x(e,i.tabbableOptions)}):M(i.allowOutsideClick,t)||t.preventDefault())},v=function(t){var e=F(t),n=u(e)>=0 -n||e instanceof Document?n&&(o.mostRecentlyFocusedNode=e):(t.stopImmediatePropagation(),d(o.mostRecentlyFocusedNode||l()))},g=function(t){if(function(t){return"Escape"===t.key||"Esc"===t.key||27===t.keyCode}(t)&&!1!==M(i.escapeDeactivates,t))return t.preventDefault(),void n.deactivate();(function(t){return"Tab"===t.key||9===t.keyCode})(t)&&function(t){var e=F(t) -h() -var n=null -if(o.tabbableGroups.length>0){var r=u(e),a=r>=0?o.containerGroups[r]:void 0 -if(r<0)n=t.shiftKey?o.tabbableGroups[o.tabbableGroups.length-1].lastTabbableNode:o.tabbableGroups[0].firstTabbableNode -else if(t.shiftKey){var s=S(o.tabbableGroups,(function(t){var n=t.firstTabbableNode -return e===n})) -if(s<0&&(a.container===e||x(e,i.tabbableOptions)&&!_(e,i.tabbableOptions)&&!a.nextTabbableNode(e,!1))&&(s=r),s>=0){var f=0===s?o.tabbableGroups.length-1:s-1 -n=o.tabbableGroups[f].lastTabbableNode}}else{var l=S(o.tabbableGroups,(function(t){var n=t.lastTabbableNode -return e===n})) -if(l<0&&(a.container===e||x(e,i.tabbableOptions)&&!_(e,i.tabbableOptions)&&!a.nextTabbableNode(e))&&(l=r),l>=0){var p=l===o.tabbableGroups.length-1?0:l+1 -n=o.tabbableGroups[p].firstTabbableNode}}}else n=c("fallbackFocus") -n&&(t.preventDefault(),d(n))}(t)},w=function(t){var e=F(t) -u(e)>=0||M(i.clickOutsideDeactivates,t)||M(i.allowOutsideClick,t)||(t.preventDefault(),t.stopImmediatePropagation())},A=function(){if(o.active)return C.activateTrap(n),o.delayInitialFocusTimer=i.delayInitialFocus?O((function(){d(l())})):d(l()),r.addEventListener("focusin",v,!0),r.addEventListener("mousedown",b,{capture:!0,passive:!1}),r.addEventListener("touchstart",b,{capture:!0,passive:!1}),r.addEventListener("click",w,{capture:!0,passive:!1}),r.addEventListener("keydown",g,{capture:!0,passive:!1}),n},k=function(){if(o.active)return r.removeEventListener("focusin",v,!0),r.removeEventListener("mousedown",b,!0),r.removeEventListener("touchstart",b,!0),r.removeEventListener("click",w,!0),r.removeEventListener("keydown",g,!0),n} -return(n={get active(){return o.active},get paused(){return o.paused},activate:function(t){if(o.active)return this -var e=a(t,"onActivate"),n=a(t,"onPostActivate"),i=a(t,"checkCanFocusTrap") -i||h(),o.active=!0,o.paused=!1,o.nodeFocusedBeforeActivation=r.activeElement,e&&e() -var u=function(){i&&h(),A(),n&&n()} -return i?(i(o.containers.concat()).then(u,u),this):(u(),this)},deactivate:function(t){if(!o.active)return this -var e=E({onDeactivate:i.onDeactivate,onPostDeactivate:i.onPostDeactivate,checkCanReturnFocus:i.checkCanReturnFocus},t) -clearTimeout(o.delayInitialFocusTimer),o.delayInitialFocusTimer=void 0,k(),o.active=!1,o.paused=!1,C.deactivateTrap(n) -var r=a(e,"onDeactivate"),u=a(e,"onPostDeactivate"),c=a(e,"checkCanReturnFocus"),s=a(e,"returnFocus","returnFocusOnDeactivate") -r&&r() -var f=function(){O((function(){s&&d(p(o.nodeFocusedBeforeActivation)),u&&u()}))} -return s&&c?(c(p(o.nodeFocusedBeforeActivation)).then(f,f),this):(f(),this)},pause:function(){return o.paused||!o.active||(o.paused=!0,k()),this},unpause:function(){return o.paused&&o.active?(o.paused=!1,h(),A(),this):this},updateContainerElements:function(t){var e=[].concat(t).filter(Boolean) -return o.containers=e.map((function(t){return"string"==typeof t?r.querySelector(t):t})),o.active&&h(),this}}).updateContainerElements(t),n} -let B -try{B=(0,r.capabilities)("3.22")}catch{B=(0,r.capabilities)("3.13")}var P=(0,r.setModifierManager)((()=>({capabilities:B,createModifier:()=>({focusTrapOptions:void 0,isActive:!0,isPaused:!1,shouldSelfFocus:!1,focusTrap:void 0}),installModifier(t,e,n){let{named:{isActive:r,isPaused:i,shouldSelfFocus:o,focusTrapOptions:a,_createFocusTrap:u}}=n -t.focusTrapOptions={...a}||{},void 0!==r&&(t.isActive=r),void 0!==i&&(t.isPaused=i),t.focusTrapOptions&&void 0===t.focusTrapOptions.initialFocus&&o&&(t.focusTrapOptions.initialFocus=e) -let c=T -u&&(c=u),!1!==t.focusTrapOptions.returnFocusOnDeactivate&&(t.focusTrapOptions.returnFocusOnDeactivate=!0),t.focusTrap=c(e,t.focusTrapOptions),t.isActive&&t.focusTrap.activate(),t.isPaused&&t.focusTrap.pause()},updateModifier(t,e){let{named:n}=e -const r=n.focusTrapOptions||{} -if(t.isActive&&!n.isActive){const{returnFocusOnDeactivate:e}=r,n=void 0===e -t.focusTrap.deactivate({returnFocus:n})}else!t.isActive&&n.isActive&&t.focusTrap.activate() -t.isPaused&&!n.isPaused?t.focusTrap.unpause():!t.isPaused&&n.isPaused&&t.focusTrap.pause(),t.focusTrapOptions=r,void 0!==n.isActive&&(t.isActive=n.isActive),void 0!==n.isPaused&&(t.isPaused=n.isPaused)},destroyModifier(t){let{focusTrap:e}=t -e.deactivate()}})),class{})},7889:t=>{"use strict" -var e=Array.isArray,n=Object.keys,r=Object.prototype.hasOwnProperty -t.exports=function t(i,o){if(i===o)return!0 -if(i&&o&&"object"==typeof i&&"object"==typeof o){var a,u,c,s=e(i),f=e(o) -if(s&&f){if((u=i.length)!=o.length)return!1 -for(a=u;0!=a--;)if(!t(i[a],o[a]))return!1 -return!0}if(s!=f)return!1 -var l=i instanceof Date,h=o instanceof Date -if(l!=h)return!1 -if(l&&h)return i.getTime()==o.getTime() -var d=i instanceof RegExp,p=o instanceof RegExp -if(d!=p)return!1 -if(d&&p)return i.toString()==o.toString() -var y=n(i) -if((u=y.length)!==n(o).length)return!1 -for(a=u;0!=a--;)if(!r.call(o,y[a]))return!1 -for(a=u;0!=a--;)if(!t(i[c=y[a]],o[c]))return!1 -return!0}return i!=i&&o!=o}},9763:(t,e,n)=>{"use strict" -function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function i(t,e,n,r){n&&Object.defineProperty(t,e,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function o(t,e,n,r,i){var o={} -return Object.keys(r).forEach((function(t){o[t]=r[t]})),o.enumerable=!!o.enumerable,o.configurable=!!o.configurable,("value"in o||o.initializer)&&(o.writable=!0),o=n.slice().reverse().reduce((function(n,r){return r(t,e,n)||n}),o),i&&void 0!==o.initializer&&(o.value=o.initializer?o.initializer.call(i):void 0,o.initializer=void 0),void 0===o.initializer&&(Object.defineProperty(t,e,o),o=null),o}n.d(e,{_:()=>r,a:()=>o,b:()=>i})},5989:(t,e,n)=>{"use strict" -n.d(e,{Bq:()=>i,sd:()=>o,zA:()=>r}) -const r={A:"a",B:"b",C:"c",D:"d",E:"e",F:"f",G:"g",H:"h",I:"i",J:"j",K:"k",L:"l",M:"m",N:"n",O:"o",P:"p",Q:"q",R:"r",S:"s",T:"t",U:"u",V:"v",W:"w",X:"x",Y:"y",Z:"z","!":"1","@":"2","#":"3",$:"4","%":"5","^":"6","&":"7","*":"8","(":"9",")":"0",_:"-","+":"=","<":",",">":".","?":"/",":":";",'"':"'","~":"`","{":"[","}":"]","|":"\\"},i={"å":"a",b:"b","ç":"c","∂":"d","ƒ":"f","©":"g","˙":"h","∆":"j","˚":"k","¬":"l","µ":"m","ø":"o","π":"p","œ":"q","®":"r","ß":"s","†":"t","√":"v","∑":"w","≈":"x","¥":"y","Ω":"z","¡":"1","™":"2","£":"3","¢":"4","∞":"5","§":"6","¶":"7","•":"8","ª":"9","º":"0","–":"-","≠":"=","≤":",","≥":".","÷":"/","…":";","æ":"'","“":"[","‘":"]","«":"\\"},o={"Å":"a","ı":"b","Î":"d","Ï":"f","˝":"g","Ó":"h","ˆ":"i","Ô":"j","":"k","Ò":"l","Â":"m","˜":"n","Ø":"o","Œ":"q","‰":"r","Í":"s","ˇ":"t","¨":"u","◊":"v","„":"w","˛":"x","Á":"y","¸":"z","⁄":"1","€":"2","‹":"3","›":"4","fi":"5","fl":"6","‡":"7","°":"8","·":"9","‚":"0","—":"-","±":"=","¯":",","˘":".","¿":"/","Ú":";","Æ":"'","`":"`","”":"[","’":"]","»":"\\"}},6866:(t,e,n)=>{"use strict" -n.r(e),n.d(e,{default:()=>u}) -var r=n(8797),i=n(3353),o=n(4784),a=n(1377),u=(n(5780),n(2001),n(5989),n(2995),n(1866),(0,r.helper)((function(t){let[e,n]=t -return function(t){(0,i.assert)("ember-keyboard: You must pass a function as the second argument to the `if-key` helper","function"==typeof n),(0,i.assert)("ember-keyboard: The `if-key` helper expects to be invoked with a KeyboardEvent",t instanceof KeyboardEvent),(0,o.Z)((0,a.Z)(t.type,e),t)&&n(t)}})))},9930:(t,e,n)=>{"use strict" -n.r(e),n.d(e,{default:()=>l}) -var r,i,o=n(9763),a=n(8797),u=n.n(a),c=n(3353),s=n(8574),f=n(1377) -let l=(r=class extends(u()){constructor(){super(...arguments),(0,o.b)(this,"keyboard",i,this),(0,o._)(this,"keyCombo",void 0),(0,o._)(this,"callback",void 0),(0,o._)(this,"keyboardActivated",!0),(0,o._)(this,"keyboardPriority",0),(0,o._)(this,"eventName","keydown"),(0,o._)(this,"keyboardHandlers",void 0)}compute(t,e){let[n,r]=t,{event:i="keydown",activated:o=!0,priority:a=0}=e;(0,c.assert)("ember-keyboard: You must pass a function as the second argument to the `on-key` helper","function"==typeof r),this.keyCombo=n,this.callback=r,this.eventName=i,this.keyboardActivated=o,this.keyboardPriority=a,this.keyboardHandlers={},this.keyboardHandlers[(0,f.Z)(i,n)]=r,this.keyboard.register(this)}willDestroy(){this.keyboard.unregister(this),super.willDestroy(...arguments)}},i=(0,o.a)(r.prototype,"keyboard",[s.inject],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),r)},6222:(t,e,n)=>{"use strict" -n.r(e),n.d(e,{default:()=>y}) -var r=n(9763),i=n(5831),o=n.n(i),a=n(8574),u=n(7219),c=n(9341),s=n(1377),f=n(4784) -n(5780),n(2001),n(3353),n(5989),n(2995),n(1866) -const l=["input","select","textarea"] -let h -var d,p -d=class extends(o()){constructor(t,e){super(t,e),(0,r.b)(this,"keyboard",p,this),(0,r._)(this,"element",void 0),(0,r._)(this,"keyboardPriority",0),(0,r._)(this,"activatedParamValue",!0),(0,r._)(this,"eventName","keydown"),(0,r._)(this,"onlyWhenFocused",!0),(0,r._)(this,"listenerName",void 0),(0,r._)(this,"removeEventListeners",(()=>{this.onlyWhenFocused&&(this.element.removeEventListener("click",this.onFocus,!0),this.element.removeEventListener("focus",this.onFocus,!0),this.element.removeEventListener("focusout",this.onFocusOut,!0))})),this.keyboard.register(this),(0,c.registerDestructor)(this,(()=>{this.removeEventListeners(),this.keyboard.unregister(this)}))}modify(t,e,n){this.element=t,this.removeEventListeners(),this.setupProperties(e,n),this.onlyWhenFocused&&this.addEventListeners()}setupProperties(t,e){let[n,r]=t,{activated:i,event:o,priority:a,onlyWhenFocused:u}=e -this.keyCombo=n,this.callback=r,this.eventName=o||"keydown",this.activatedParamValue="activated"in e?!!i:void 0,this.keyboardPriority=a?parseInt(a,10):0,this.listenerName=(0,s.Z)(this.eventName,this.keyCombo),this.onlyWhenFocused=void 0!==u?u:l.includes(this.element.tagName.toLowerCase())}addEventListeners(){this.element.addEventListener("click",this.onFocus,!0),this.element.addEventListener("focus",this.onFocus,!0),this.element.addEventListener("focusout",this.onFocusOut,!0)}onFocus(){this.isFocused=!0}onFocusOut(){this.isFocused=!1}get keyboardActivated(){return!1!==this.activatedParamValue&&(!this.onlyWhenFocused||this.isFocused)}get keyboardFirstResponder(){return!!this.onlyWhenFocused&&this.isFocused}canHandleKeyboardEvent(t){return(0,f.Z)(this.listenerName,t)}handleKeyboardEvent(t,e){(0,f.Z)(this.listenerName,t)&&(this.callback?this.callback(t,e):this.element.click())}},p=(0,r.a)(d.prototype,"keyboard",[a.inject],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),(0,r.a)(d.prototype,"onFocus",[u.action],Object.getOwnPropertyDescriptor(d.prototype,"onFocus"),d.prototype),(0,r.a)(d.prototype,"onFocusOut",[u.action],Object.getOwnPropertyDescriptor(d.prototype,"onFocusOut"),d.prototype),h=d -var y=h},6918:(t,e,n)=>{"use strict" -n.r(e),n.d(e,{default:()=>p}) -var r,i=n(9763),o=n(8574),a=n.n(o),u=n(1292),c=n(7219),s=n(8773),f=n(1377),l=n(4784) -function h(t,e){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null -if(t.handleKeyboardEvent){if(t.canHandleKeyboardEvent&&!t.canHandleKeyboardEvent(e))return -t.handleKeyboardEvent(e,n)}else{if(!t.keyboardHandlers)throw new Error("A responder registered with the ember-keyboard service must implement either `keyboardHandlers` (property returning a dictionary of listenerNames to handler functions), or `handleKeyboardEvent(event)`)") -Object.keys(t.keyboardHandlers).forEach((r=>{(0,l.Z)(r,e)&&(n?t.keyboardHandlers[r](e,n):t.keyboardHandlers[r](e))}))}}function d(t,e,n,r){return function(t,e){let n=t-e -return(n>0)-(n<0)}(r?r((0,c.get)(t,n)):(0,c.get)(t,n),r?r((0,c.get)(e,n)):(0,c.get)(e,n))}n(5780),n(2001),n(3353),n(5989),n(2995),n(1866) -let p=(r=class extends(a()){get activeResponders(){let{registeredResponders:t}=this -return Array.from(t).filter((t=>t.keyboardActivated))}get sortedResponders(){return this.activeResponders.sort(((t,e)=>function(t,e,n){return d(e,t,n,arguments.length>3&&void 0!==arguments[3]?arguments[3]:null)}(t,e,"keyboardPriority")))}get firstResponders(){return this.sortedResponders.filter((t=>t.keyboardFirstResponder))}get normalResponders(){return this.sortedResponders.filter((t=>!t.keyboardFirstResponder))}constructor(){if(super(...arguments),(0,i._)(this,"registeredResponders",new Set),"undefined"!=typeof FastBoot)return -let t=((0,u.getOwner)(this).resolveRegistration("config:environment")||{}).emberKeyboard||{} -t.disableOnInputFields&&(this._disableOnInput=!0),this._listeners=t.listeners||["keyUp","keyDown","keyPress"],this._listeners=this._listeners.map((t=>t.toLowerCase())),this._listeners.forEach((t=>{document.addEventListener(t,this._respond)}))}willDestroy(){super.willDestroy(...arguments),"undefined"==typeof FastBoot&&this._listeners.forEach((t=>{document.removeEventListener(t,this._respond)}))}_respond(t){if(this._disableOnInput&&t.target){var e -const n=null!==(e=t.composedPath()[0])&&void 0!==e?e:t.target,r=n.tagName -if(n.getAttribute&&null!=n.getAttribute("contenteditable")||"TEXTAREA"===r||"INPUT"===r)return}(0,s.run)((()=>{let{firstResponders:e,normalResponders:n}=this -!function(t,e){let{firstResponders:n,normalResponders:r}=e,i=!1,o=!1 -const a={stopImmediatePropagation(){i=!0},stopPropagation(){o=!0}} -for(const c of n)if(h(c,t,a),i)break -if(o)return -i=!1 -let u=Number.POSITIVE_INFINITY -for(const c of r){const e=Number(c.keyboardPriority) -if(!i||e!==u){if(e{"use strict" -n.d(e,{Z:()=>i}) -var r=n(1866) -function i(t){if(!(0,r.isNone)(t))switch(t){case 0:return"left" -case 1:return"middle" -case 2:return"right"}}},4784:(t,e,n)=>{"use strict" -n.d(e,{Z:()=>c}) -var r=n(5780),i=n(2001),o=n(5989),a=n(2995) -n(3353),n(1866) -const u="_all" -function c(t,e){let n,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:(0,i.Z)() -if(t instanceof r.Z)n=t -else{if("string"!=typeof t)throw new Error("Expected a `string` or `KeyCombo` as `keyComboOrKeyComboString` argument to `isKey`") -n=r.Z.parse(t,o)}return n.type===e.type&&(!!s(n)||!(!f(n,e)||!l(n,e)&&!h(n,e))||d(n,e,o))}function s(t){return t.keyOrCode===u&&!1===t.altKey&&!1===t.ctrlKey&&!1===t.metaKey&&!1===t.shiftKey}function f(t,e){return t.type===e.type&&t.altKey===e.altKey&&t.ctrlKey===e.ctrlKey&&t.metaKey===e.metaKey&&t.shiftKey===e.shiftKey}function l(t,e){return e instanceof KeyboardEvent&&(t.keyOrCode===u||t.keyOrCode===e.code||t.keyOrCode===e.key)}function h(t,e){return e instanceof MouseEvent&&(t.keyOrCode===u||t.keyOrCode===(0,a.Z)(e.button))}function d(t,e,n){return y([],t)&&y(["shift"],e)?e.key===t.keyOrCode:y(["shift"],t)&&y(["shift"],e)?(r=e.key,(o.zA[r]||r)===t.keyOrCode):"Macintosh"===n&&y(["alt"],t)&&y(["alt"],e)?function(t){return o.Bq[t]||t}(e.key)===t.keyOrCode:!("Macintosh"!==n||!y(["shift","alt"],t)||!y(["shift","alt"],e))&&function(t){return o.sd[t]||t}(e.key)===t.keyOrCode -var r}const p=["alt","ctrl","meta","shift","cmd"].filter((t=>"cmd"!=t)) -function y(t,e){for(let n of p){if(t.includes(n)&&!e[`${n}Key`])return!1 -if(!t.includes(n)&&e[`${n}Key`])return!1}return!0}},5780:(t,e,n)=>{"use strict" -n.d(e,{Z:()=>f}) -var r=n(9763),i=n(2001) -n(3353) -const o=/^alt$/i,a=/^shift$/i,u=/^ctrl$/i,c=/^meta$/i,s=/^cmd$/i -class f{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:(0,i.Z)();(0,r._)(this,"type",void 0),(0,r._)(this,"altKey",!1),(0,r._)(this,"ctrlKey",!1),(0,r._)(this,"shiftKey",!1),(0,r._)(this,"metaKey",!1),(0,r._)(this,"keyOrCode",void 0),(0,r._)(this,"platform",void 0),this.platform=t}static parse(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:(0,i.Z)(),n=new f(e),[r,l]=t.split(":") -return n.type=r,"+"===l?(n.keyOrCode=l,n):(l.split("+").forEach((t=>{o.test(t)?n.altKey=!0:u.test(t)?n.ctrlKey=!0:c.test(t)?n.metaKey=!0:a.test(t)?n.shiftKey=!0:s.test(t)?e.indexOf("Mac")>-1?n.metaKey=!0:n.ctrlKey=!0:n.keyOrCode=t})),n)}createMatchingKeyboardEvent(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{} -return new KeyboardEvent(this.type,Object.assign({key:this.keyOrCode,code:this.keyOrCode,altKey:this.altKey,ctrlKey:this.ctrlKey,metaKey:this.metaKey,shiftKey:this.shiftKey},t))}}},1377:(t,e,n)=>{"use strict" -function r(t){if("undefined"==typeof FastBoot)return void 0===t&&(t=navigator.platform),t.indexOf("Mac")>-1?"meta":"ctrl"}function i(t){return t.sort().join("+")}function o(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=e -"string"==typeof e&&(n=e.split("+")),n.indexOf("cmd")>-1&&(n[n.indexOf("cmd")]=r()) -let o=i(n||[]) -return""===o&&(o="_all"),`${t}:${o}`}n.d(e,{Z:()=>o})},2001:(t,e,n)=>{"use strict" -n.d(e,{Z:()=>o}) -var r=n(3353) -let i -function o(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:navigator.userAgent -if((0,r.runInDebug)((()=>{i=null})),!i){let e="Unknown OS";-1!=t.indexOf("Win")&&(e="Windows"),-1!=t.indexOf("Mac")&&(e="Macintosh"),-1!=t.indexOf("Linux")&&(e="Linux"),-1!=t.indexOf("Android")&&(e="Android"),-1!=t.indexOf("like Mac")&&(e="iOS"),i=e}return i}},4564:t=>{function e(t,e,n,r){var i,o=null==(i=r)||"number"==typeof i||"boolean"==typeof i?r:n(r),a=e.get(o) -return void 0===a&&(a=t.call(this,r),e.set(o,a)),a}function n(t,e,n){var r=Array.prototype.slice.call(arguments,3),i=n(r),o=e.get(i) -return void 0===o&&(o=t.apply(this,r),e.set(i,o)),o}function r(t,e,n,r,i){return n.bind(e,t,r,i)}function i(t,i){return r(t,this,1===t.length?e:n,i.cache.create(),i.serializer)}function o(){return JSON.stringify(arguments)}function a(){this.cache=Object.create(null)}a.prototype.has=function(t){return t in this.cache},a.prototype.get=function(t){return this.cache[t]},a.prototype.set=function(t,e){this.cache[t]=e} -var u={create:function(){return new a}} -t.exports=function(t,e){var n=e&&e.cache?e.cache:u,r=e&&e.serializer?e.serializer:o -return(e&&e.strategy?e.strategy:i)(t,{cache:n,serializer:r})},t.exports.strategies={variadic:function(t,e){return r(t,this,n,e.cache.create(),e.serializer)},monadic:function(t,n){return r(t,this,e,n.cache.create(),n.serializer)}}},8581:t=>{function e(t){return t&&t.constructor&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}function n(t){return t}function r(t,r){const i=(r=r||{}).delimiter||".",o=r.maxDepth,a=r.transformKey||n,u={} -return function t(n,c,s){s=s||1,Object.keys(n).forEach((function(f){const l=n[f],h=r.safe&&Array.isArray(l),d=Object.prototype.toString.call(l),p=e(l),y="[object Object]"===d||"[object Array]"===d,b=c?c+i+a(f):a(f) -if(!h&&!p&&y&&Object.keys(l).length&&(!r.maxDepth||s0&&(r=f(n.shift()),l=f(n[0]))}h[r]=t(i[e],o)})),s}},2914:(t,e,n)=>{"use strict" -n.r(e),n.d(e,{default:()=>s}) -var r,i=function(){function t(){this.registry=new WeakMap}return t.prototype.elementExists=function(t){return this.registry.has(t)},t.prototype.getElement=function(t){return this.registry.get(t)},t.prototype.addElement=function(t,e){t&&this.registry.set(t,e||{})},t.prototype.removeElement=function(t){this.registry.delete(t)},t.prototype.destroyRegistry=function(){this.registry=new WeakMap},t}(),o=function(){} -!function(t){t.enter="enter",t.exit="exit"}(r||(r={})) -var a,u=function(){function t(){this.registry=new i}return t.prototype.addCallback=function(t,e,n){var i,o,a -t===r.enter?((i={})[r.enter]=n,a=i):((o={})[r.exit]=n,a=o),this.registry.addElement(e,Object.assign({},this.registry.getElement(e),a))},t.prototype.dispatchCallback=function(t,e,n){if(t===r.enter){var i=this.registry.getElement(e).enter;(void 0===i?o:i)(n)}else{var a=this.registry.getElement(e).exit;(void 0===a?o:a)(n)}},t}(),c=(a=function(t,e){return a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])},a(t,e)},function(t,e){function n(){this.constructor=t}a(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}) -const s=function(t){function e(){var e=t.call(this)||this -return e.elementRegistry=new i,e}return c(e,t),e.prototype.observe=function(t,e){void 0===e&&(e={}),t&&(this.elementRegistry.addElement(t,e),this.setupObserver(t,e))},e.prototype.unobserve=function(t,e){var n=this.findMatchingRootEntry(e) -n&&n.intersectionObserver.unobserve(t)},e.prototype.addEnterCallback=function(t,e){this.addCallback(r.enter,t,e)},e.prototype.addExitCallback=function(t,e){this.addCallback(r.exit,t,e)},e.prototype.dispatchEnterCallback=function(t,e){this.dispatchCallback(r.enter,t,e)},e.prototype.dispatchExitCallback=function(t,e){this.dispatchCallback(r.exit,t,e)},e.prototype.destroy=function(){this.elementRegistry.destroyRegistry()},e.prototype.setupOnIntersection=function(t){var e=this -return function(n){return e.onIntersection(t,n)}},e.prototype.setupObserver=function(t,e){var n,r,i=e.root,o=void 0===i?window:i,a=this.findRootFromRegistry(o) -if(a&&(r=this.determineMatchingElements(e,a)),r){var u=r.elements,c=r.intersectionObserver -u.push(t),c&&c.observe(t)}else{var s={elements:[t],intersectionObserver:c=this.newObserver(t,e),options:e},f=this.stringifyOptions(e) -a?a[f]=s:this.elementRegistry.addElement(o,((n={})[f]=s,n))}},e.prototype.newObserver=function(t,e){var n=e.root,r=e.rootMargin,i=e.threshold,o=new IntersectionObserver(this.setupOnIntersection(e).bind(this),{root:n,rootMargin:r,threshold:i}) -return o.observe(t),o},e.prototype.onIntersection=function(t,e){var n=this -e.forEach((function(e){var r=e.isIntersecting,i=e.intersectionRatio,o=t.threshold||0 -Array.isArray(o)&&(o=o[o.length-1]) -var a=n.findMatchingRootEntry(t) -r||i>o?a&&a.elements.some((function(t){return!(!t||t!==e.target||(n.dispatchEnterCallback(t,e),0))})):a&&a.elements.some((function(t){return!(!t||t!==e.target||(n.dispatchExitCallback(t,e),0))}))}))},e.prototype.findRootFromRegistry=function(t){if(this.elementRegistry)return this.elementRegistry.getElement(t)},e.prototype.findMatchingRootEntry=function(t){var e=t.root,n=void 0===e?window:e,r=this.findRootFromRegistry(n) -if(r)return r[this.stringifyOptions(t)]},e.prototype.determineMatchingElements=function(t,e){var n=this,r=Object.keys(e).filter((function(r){var i=e[r].options -return n.areOptionsSame(t,i)}))[0] -return e[r]},e.prototype.areOptionsSame=function(t,e){if(t===e)return!0 -var n=Object.prototype.toString.call(t),r=Object.prototype.toString.call(e) -if(n!==r)return!1 -if("[object Object]"!==n&&"[object Object]"!==r)return t===e -if(t&&e&&"object"==typeof t&&"object"==typeof e)for(var i in t)if(Object.prototype.hasOwnProperty.call(t,i)&&!1===this.areOptionsSame(t[i],e[i]))return!1 -return!0},e.prototype.stringifyOptions=function(t){var e=t.root -return JSON.stringify(t,(function(t,n){if("root"===t&&e){var r=Array.prototype.slice.call(e.classList).reduce((function(t,e){return t+e}),"") -return e.id+"-"+r}return n}))},e}(u)},4857:(t,e,n)=>{"use strict" -n.r(e),n.d(e,{SKELETON_TYPE:()=>i.aV,SyntaxError:()=>y,TYPE:()=>i.wD,createLiteralElement:()=>i.mD,createNumberElement:()=>i.qx,isArgumentElement:()=>i.VG,isDateElement:()=>i.rp,isDateTimeSkeleton:()=>i.Ii,isLiteralElement:()=>i.O4,isNumberElement:()=>i.uf,isNumberSkeleton:()=>i.Wh,isPluralElement:()=>i.Jo,isPoundElement:()=>i.yx,isSelectElement:()=>i.Wi,isTagElement:()=>i.HI,isTimeElement:()=>i.pe,parse:()=>m,pegParse:()=>b}) -var r=n(2247),i=n(8131),o=/(?:[Eec]{1,6}|G{1,5}|[Qq]{1,5}|(?:[yYur]+|U{1,5})|[ML]{1,5}|d{1,2}|D{1,3}|F{1}|[abB]{1,5}|[hkHK]{1,2}|w{1,2}|W{1}|m{1,2}|s{1,2}|[zZOvVxX]{1,4})(?=([^']*'[^']*')*[^']*$)/g,a=/^\.(?:(0+)(\*)?|(#+)|(0+)(#+))$/g,u=/^(@+)?(\+|#+)?$/g,c=/(\*)(0+)|(#+)(0+)|(0+)/g,s=/^(0+)$/ -function f(t){var e={} -return t.replace(u,(function(t,n,r){return"string"!=typeof r?(e.minimumSignificantDigits=n.length,e.maximumSignificantDigits=n.length):"+"===r?e.minimumSignificantDigits=n.length:"#"===n[0]?e.maximumSignificantDigits=n.length:(e.minimumSignificantDigits=n.length,e.maximumSignificantDigits=n.length+("string"==typeof r?r.length:0)),""})),e}function l(t){switch(t){case"sign-auto":return{signDisplay:"auto"} -case"sign-accounting":case"()":return{currencySign:"accounting"} -case"sign-always":case"+!":return{signDisplay:"always"} -case"sign-accounting-always":case"()!":return{signDisplay:"always",currencySign:"accounting"} -case"sign-except-zero":case"+?":return{signDisplay:"exceptZero"} -case"sign-accounting-except-zero":case"()?":return{signDisplay:"exceptZero",currencySign:"accounting"} -case"sign-never":case"+_":return{signDisplay:"never"}}}function h(t){var e -if("E"===t[0]&&"E"===t[1]?(e={notation:"engineering"},t=t.slice(2)):"E"===t[0]&&(e={notation:"scientific"},t=t.slice(1)),e){var n=t.slice(0,2) -if("+!"===n?(e.signDisplay="always",t=t.slice(2)):"+?"===n&&(e.signDisplay="exceptZero",t=t.slice(2)),!s.test(t))throw new Error("Malformed concise eng/scientific notation") -e.minimumIntegerDigits=t.length}return e}function d(t){return l(t)||{}}function p(t){for(var e={},n=0,i=t;n1)throw new RangeError("integer-width stems only accept a single optional option") -o.options[0].replace(c,(function(t,n,r,i,o,a){if(n)e.minimumIntegerDigits=r.length -else{if(i&&o)throw new Error("We currently do not support maximum integer digits") -if(a)throw new Error("We currently do not support exact integer digits")}return""})) -continue}if(s.test(o.stem))e.minimumIntegerDigits=o.stem.length -else if(a.test(o.stem)){if(o.options.length>1)throw new RangeError("Fraction-precision stems only accept a single optional option") -o.stem.replace(a,(function(t,n,r,i,o,a){return"*"===r?e.minimumFractionDigits=n.length:i&&"#"===i[0]?e.maximumFractionDigits=i.length:o&&a?(e.minimumFractionDigits=o.length,e.maximumFractionDigits=o.length+a.length):(e.minimumFractionDigits=n.length,e.maximumFractionDigits=n.length),""})),o.options.length&&(e=(0,r.pi)((0,r.pi)({},e),f(o.options[0])))}else if(u.test(o.stem))e=(0,r.pi)((0,r.pi)({},e),f(o.stem)) -else{var p=l(o.stem) -p&&(e=(0,r.pi)((0,r.pi)({},e),p)) -var y=h(o.stem) -y&&(e=(0,r.pi)((0,r.pi)({},e),y))}}return e}var y=function(t){function e(n,r,i,o){var a=t.call(this)||this -return a.message=n,a.expected=r,a.found=i,a.location=o,a.name="SyntaxError","function"==typeof Error.captureStackTrace&&Error.captureStackTrace(a,e),a}return(0,r.ZT)(e,t),e.buildMessage=function(t,e){function n(t){return t.charCodeAt(0).toString(16).toUpperCase()}function r(t){return t.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,(function(t){return"\\x0"+n(t)})).replace(/[\x10-\x1F\x7F-\x9F]/g,(function(t){return"\\x"+n(t)}))}function i(t){return t.replace(/\\/g,"\\\\").replace(/\]/g,"\\]").replace(/\^/g,"\\^").replace(/-/g,"\\-").replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,(function(t){return"\\x0"+n(t)})).replace(/[\x10-\x1F\x7F-\x9F]/g,(function(t){return"\\x"+n(t)}))}function o(t){switch(t.type){case"literal":return'"'+r(t.text)+'"' -case"class":var e=t.parts.map((function(t){return Array.isArray(t)?i(t[0])+"-"+i(t[1]):i(t)})) -return"["+(t.inverted?"^":"")+e+"]" -case"any":return"any character" -case"end":return"end of input" -case"other":return t.description}}return"Expected "+function(t){var e,n,r=t.map(o) -if(r.sort(),r.length>0){for(e=1,n=1;e",!1),v=Lt(">",!1),g=Lt("Tt&&(Tt=St,Bt=[]),Bt.push(t))}function qt(){return Vt()}function Vt(){var t,e -for(t=[],e=Ht();e!==a;)t.push(e),e=Ht() -return t}function Ht(){var e,n -return e=St,Mt=St,(xe?a:void 0)!==a?(n=function(){var t,e,n,o,u,c,s -return Pt++,(t=Kt())===a&&(t=St,(e=Wt())!==a&&(n=Vt())!==a&&(o=Xt())!==a?(Mt=t,c=n,(u=e)!==(s=o)&&Rt('Mismatch tag "'+u+'" !== "'+s+'"',Nt()),t=e=(0,r.pi)({type:i.wD.tag,value:u,children:c},ge())):(St=t,t=a)),Pt--,t===a&&(e=a,0===Pt&&Zt(d)),t}(),n!==a?(Mt=e,e=n):(St=e,e=a)):(St=e,e=a),e===a&&(e=function(){var t,e,n -return t=St,(e=Yt())!==a&&(Mt=t,n=e,e=(0,r.pi)({type:i.wD.literal,value:n},ge())),e}())===a&&(e=function(){var e,n,o,u,c -return Pt++,e=St,123===t.charCodeAt(St)?(n=_,St++):(n=a,0===Pt&&Zt(w)),n!==a&&ue()!==a&&(o=he())!==a&&ue()!==a?(125===t.charCodeAt(St)?(u=x,St++):(u=a,0===Pt&&Zt(A)),u!==a?(Mt=e,c=o,e=n=(0,r.pi)({type:i.wD.argument,value:c},ge())):(St=e,e=a)):(St=e,e=a),Pt--,e===a&&(n=a,0===Pt&&Zt(m)),e}())===a&&(e=function(){var e -return e=function(){var e,n,o,u,c,s,f,l,h -return e=St,123===t.charCodeAt(St)?(n=_,St++):(n=a,0===Pt&&Zt(w)),n!==a&&ue()!==a&&(o=he())!==a&&ue()!==a?(44===t.charCodeAt(St)?(u=P,St++):(u=a,0===Pt&&Zt(j)),u!==a&&ue()!==a?(t.substr(St,6)===N?(c=N,St+=6):(c=a,0===Pt&&Zt(R)),c!==a&&ue()!==a?(s=St,44===t.charCodeAt(St)?(f=P,St++):(f=a,0===Pt&&Zt(j)),f!==a&&(l=ue())!==a?(h=function(){var e,n,o -return e=St,t.substr(St,2)===F?(n=F,St+=2):(n=a,0===Pt&&Zt(T)),n!==a?(o=function(){var t,e,n,o -if(t=St,e=[],(n=te())!==a)for(;n!==a;)e.push(n),n=te() -else e=a -return e!==a&&(Mt=t,o=e,e=(0,r.pi)({type:i.aV.number,tokens:o,parsedOptions:Ae?p(o):{}},ge())),e}(),o!==a?(Mt=e,e=n=o):(St=e,e=a)):(St=e,e=a),e===a&&(e=St,Mt=St,be.push("numberArgStyle"),(n=(n=!0)?void 0:a)!==a&&(o=Yt())!==a?(Mt=e,e=n=B(o)):(St=e,e=a)),e}(),h!==a?s=f=[f,l,h]:(St=s,s=a)):(St=s,s=a),s===a&&(s=null),s!==a&&(f=ue())!==a?(125===t.charCodeAt(St)?(l=x,St++):(l=a,0===Pt&&Zt(A)),l!==a?(Mt=e,e=n=L(o,c,s)):(St=e,e=a)):(St=e,e=a)):(St=e,e=a)):(St=e,e=a)):(St=e,e=a),e}(),e===a&&(e=function(){var e,n,u,c,s,f,l,h,d -return e=St,123===t.charCodeAt(St)?(n=_,St++):(n=a,0===Pt&&Zt(w)),n!==a&&ue()!==a&&(u=he())!==a&&ue()!==a?(44===t.charCodeAt(St)?(c=P,St++):(c=a,0===Pt&&Zt(j)),c!==a&&ue()!==a?(t.substr(St,4)===Y?(s=Y,St+=4):(s=a,0===Pt&&Zt(G)),s===a&&(t.substr(St,4)===K?(s=K,St+=4):(s=a,0===Pt&&Zt(W))),s!==a&&ue()!==a?(f=St,44===t.charCodeAt(St)?(l=P,St++):(l=a,0===Pt&&Zt(j)),l!==a&&(h=ue())!==a?(d=function(){var e,n,u -return e=St,t.substr(St,2)===F?(n=F,St+=2):(n=a,0===Pt&&Zt(T)),n!==a?(u=function(){var e,n,u,c,s,f,l -if(e=St,n=St,u=[],(c=ee())===a&&(c=ne()),c!==a)for(;c!==a;)u.push(c),(c=ee())===a&&(c=ne()) -else u=a -return(n=u!==a?t.substring(n,St):u)!==a&&(Mt=e,s=n,n=(0,r.pi)({type:i.aV.dateTime,pattern:s,parsedOptions:Ae?(f=s,l={},f.replace(o,(function(t){var e=t.length -switch(t[0]){case"G":l.era=4===e?"long":5===e?"narrow":"short" -break -case"y":l.year=2===e?"2-digit":"numeric" -break -case"Y":case"u":case"U":case"r":throw new RangeError("`Y/u/U/r` (year) patterns are not supported, use `y` instead") -case"q":case"Q":throw new RangeError("`q/Q` (quarter) patterns are not supported") -case"M":case"L":l.month=["numeric","2-digit","short","long","narrow"][e-1] -break -case"w":case"W":throw new RangeError("`w/W` (week) patterns are not supported") -case"d":l.day=["numeric","2-digit"][e-1] -break -case"D":case"F":case"g":throw new RangeError("`D/F/g` (day) patterns are not supported, use `d` instead") -case"E":l.weekday=4===e?"short":5===e?"narrow":"short" -break -case"e":if(e<4)throw new RangeError("`e..eee` (weekday) patterns are not supported") -l.weekday=["short","long","narrow","short"][e-4] -break -case"c":if(e<4)throw new RangeError("`c..ccc` (weekday) patterns are not supported") -l.weekday=["short","long","narrow","short"][e-4] -break -case"a":l.hour12=!0 -break -case"b":case"B":throw new RangeError("`b/B` (period) patterns are not supported, use `a` instead") -case"h":l.hourCycle="h12",l.hour=["numeric","2-digit"][e-1] -break -case"H":l.hourCycle="h23",l.hour=["numeric","2-digit"][e-1] -break -case"K":l.hourCycle="h11",l.hour=["numeric","2-digit"][e-1] -break -case"k":l.hourCycle="h24",l.hour=["numeric","2-digit"][e-1] -break -case"j":case"J":case"C":throw new RangeError("`j/J/C` (hour) patterns are not supported, use `h/H/K/k` instead") -case"m":l.minute=["numeric","2-digit"][e-1] -break -case"s":l.second=["numeric","2-digit"][e-1] -break -case"S":case"A":throw new RangeError("`S/A` (second) patterns are not supported, use `s` instead") -case"z":l.timeZoneName=e<4?"short":"long" -break -case"Z":case"O":case"v":case"V":case"X":case"x":throw new RangeError("`Z/O/v/V/X/x` (timeZone) patterns are not supported, use `z` instead")}return""})),l):{}},ge())),n}(),u!==a?(Mt=e,e=n=u):(St=e,e=a)):(St=e,e=a),e===a&&(e=St,Mt=St,be.push("dateOrTimeArgStyle"),(n=(n=!0)?void 0:a)!==a&&(u=Yt())!==a?(Mt=e,e=n=B(u)):(St=e,e=a)),e}(),d!==a?f=l=[l,h,d]:(St=f,f=a)):(St=f,f=a),f===a&&(f=null),f!==a&&(l=ue())!==a?(125===t.charCodeAt(St)?(h=x,St++):(h=a,0===Pt&&Zt(A)),h!==a?(Mt=e,e=n=L(u,s,f)):(St=e,e=a)):(St=e,e=a)):(St=e,e=a)):(St=e,e=a)):(St=e,e=a),e}()),e}(),e===a&&(e=function(){var e,n,o,u,c,s,f,l,h,d,p -if(e=St,123===t.charCodeAt(St)?(n=_,St++):(n=a,0===Pt&&Zt(w)),n!==a)if(ue()!==a)if((o=he())!==a)if(ue()!==a)if(44===t.charCodeAt(St)?(u=P,St++):(u=a,0===Pt&&Zt(j)),u!==a)if(ue()!==a)if(t.substr(St,6)===X?(c=X,St+=6):(c=a,0===Pt&&Zt(J)),c===a&&(t.substr(St,13)===Q?(c=Q,St+=13):(c=a,0===Pt&&Zt(tt))),c!==a)if(ue()!==a)if(44===t.charCodeAt(St)?(s=P,St++):(s=a,0===Pt&&Zt(j)),s!==a)if(ue()!==a)if(f=St,t.substr(St,7)===et?(l=et,St+=7):(l=a,0===Pt&&Zt(nt)),l!==a&&(h=ue())!==a&&(d=ce())!==a?f=l=[l,h,d]:(St=f,f=a),f===a&&(f=null),f!==a)if((l=ue())!==a){if(h=[],(d=ie())!==a)for(;d!==a;)h.push(d),d=ie() -else h=a -h!==a&&(d=ue())!==a?(125===t.charCodeAt(St)?(p=x,St++):(p=a,0===Pt&&Zt(A)),p!==a?(Mt=e,n=function(t,e,n,o){return(0,r.pi)({type:i.wD.plural,pluralType:"plural"===e?"cardinal":"ordinal",value:t,offset:n?n[2]:0,options:o.reduce((function(t,e){var n=e.id,r=e.value,i=e.location -return n in t&&Rt('Duplicate option "'+n+'" in plural element: "'+jt()+'"',Nt()),t[n]={value:r,location:i},t}),{})},ge())}(o,c,f,h),e=n):(St=e,e=a)):(St=e,e=a)}else St=e,e=a -else St=e,e=a -else St=e,e=a -else St=e,e=a -else St=e,e=a -else St=e,e=a -else St=e,e=a -else St=e,e=a -else St=e,e=a -else St=e,e=a -else St=e,e=a -else St=e,e=a -return e}(),e===a&&(e=function(){var e,n,o,u,c,s,f,l,h -if(e=St,123===t.charCodeAt(St)?(n=_,St++):(n=a,0===Pt&&Zt(w)),n!==a)if(ue()!==a)if((o=he())!==a)if(ue()!==a)if(44===t.charCodeAt(St)?(u=P,St++):(u=a,0===Pt&&Zt(j)),u!==a)if(ue()!==a)if(t.substr(St,6)===rt?(c=rt,St+=6):(c=a,0===Pt&&Zt(it)),c!==a)if(ue()!==a)if(44===t.charCodeAt(St)?(s=P,St++):(s=a,0===Pt&&Zt(j)),s!==a)if(ue()!==a){if(f=[],(l=re())!==a)for(;l!==a;)f.push(l),l=re() -else f=a -f!==a&&(l=ue())!==a?(125===t.charCodeAt(St)?(h=x,St++):(h=a,0===Pt&&Zt(A)),h!==a?(Mt=e,n=function(t,e){return(0,r.pi)({type:i.wD.select,value:t,options:e.reduce((function(t,e){var n=e.id,r=e.value,i=e.location -return n in t&&Rt('Duplicate option "'+n+'" in select element: "'+jt()+'"',Nt()),t[n]={value:r,location:i},t}),{})},ge())}(o,f),e=n):(St=e,e=a)):(St=e,e=a)}else St=e,e=a -else St=e,e=a -else St=e,e=a -else St=e,e=a -else St=e,e=a -else St=e,e=a -else St=e,e=a -else St=e,e=a -else St=e,e=a -else St=e,e=a -return e}(),e===a&&(e=function(){var e,n -return e=St,35===t.charCodeAt(St)?(n="#",St++):(n=a,0===Pt&&Zt(h)),n!==a&&(Mt=e,n=(0,r.pi)({type:i.wD.pound},ge())),n}())))),e}function Yt(){var e,n,r,i -if(e=St,Mt=St,(n=(n=xe)?void 0:a)!==a){if(r=[],(i=se())===a&&(i=fe())===a&&(i=le())===a&&(60===t.charCodeAt(St)?(i=s,St++):(i=a,0===Pt&&Zt(f))),i!==a)for(;i!==a;)r.push(i),(i=se())===a&&(i=fe())===a&&(i=le())===a&&(60===t.charCodeAt(St)?(i=s,St++):(i=a,0===Pt&&Zt(f))) -else r=a -r!==a?(Mt=e,e=n=l(r)):(St=e,e=a)}else St=e,e=a -if(e===a){if(e=St,n=[],(r=se())===a&&(r=fe())===a&&(r=le())===a&&(r=Gt()),r!==a)for(;r!==a;)n.push(r),(r=se())===a&&(r=fe())===a&&(r=le())===a&&(r=Gt()) -else n=a -n!==a&&(Mt=e,n=l(n)),e=n}return e}function Gt(){var e,n,r -return e=St,n=St,Pt++,(r=Wt())===a&&(r=Xt())===a&&(r=Kt()),Pt--,r===a?n=void 0:(St=n,n=a),n!==a?(60===t.charCodeAt(St)?(r=s,St++):(r=a,0===Pt&&Zt(f)),r!==a?(Mt=e,e=n="<"):(St=e,e=a)):(St=e,e=a),e}function Kt(){var e,n,o,u,c,l,h -return e=St,n=St,60===t.charCodeAt(St)?(o=s,St++):(o=a,0===Pt&&Zt(f)),o!==a&&(u=de())!==a&&(c=ue())!==a?("/>"===t.substr(St,2)?(l="/>",St+=2):(l=a,0===Pt&&Zt(b)),l!==a?n=o=[o,u,c,l]:(St=n,n=a)):(St=n,n=a),n!==a&&(Mt=e,h=n,n=(0,r.pi)({type:i.wD.literal,value:h.join("")},ge())),n}function Wt(){var e,n,r,i -return e=St,60===t.charCodeAt(St)?(n=s,St++):(n=a,0===Pt&&Zt(f)),n!==a&&(r=de())!==a?(62===t.charCodeAt(St)?(i=">",St++):(i=a,0===Pt&&Zt(v)),i!==a?(Mt=e,e=n=r):(St=e,e=a)):(St=e,e=a),e}function Xt(){var e,n,r,i -return e=St,"",St++):(i=a,0===Pt&&Zt(v)),i!==a?(Mt=e,e=n=r):(St=e,e=a)):(St=e,e=a),e}function Jt(){var e,n,r,i,o -if(Pt++,e=St,n=[],r=St,i=St,Pt++,(o=oe())===a&&(k.test(t.charAt(St))?(o=t.charAt(St),St++):(o=a,0===Pt&&Zt(D))),Pt--,o===a?i=void 0:(St=i,i=a),i!==a?(t.length>St?(o=t.charAt(St),St++):(o=a,0===Pt&&Zt(C)),o!==a?r=i=[i,o]:(St=r,r=a)):(St=r,r=a),r!==a)for(;r!==a;)n.push(r),r=St,i=St,Pt++,(o=oe())===a&&(k.test(t.charAt(St))?(o=t.charAt(St),St++):(o=a,0===Pt&&Zt(D))),Pt--,o===a?i=void 0:(St=i,i=a),i!==a?(t.length>St?(o=t.charAt(St),St++):(o=a,0===Pt&&Zt(C)),o!==a?r=i=[i,o]:(St=r,r=a)):(St=r,r=a) -else n=a -return e=n!==a?t.substring(e,St):n,Pt--,e===a&&(n=a,0===Pt&&Zt(E)),e}function Qt(){var e,n,r -return Pt++,e=St,47===t.charCodeAt(St)?(n="/",St++):(n=a,0===Pt&&Zt(S)),n!==a&&(r=Jt())!==a?(Mt=e,e=n=r):(St=e,e=a),Pt--,e===a&&(n=a,0===Pt&&Zt(O)),e}function te(){var t,e,n,r,i -if(Pt++,t=St,(e=ue())!==a)if((n=Jt())!==a){for(r=[],i=Qt();i!==a;)r.push(i),i=Qt() -r!==a?(Mt=t,e=function(t,e){return{stem:t,options:e}}(n,r),t=e):(St=t,t=a)}else St=t,t=a -else St=t,t=a -return Pt--,t===a&&(e=a,0===Pt&&Zt(M)),t}function ee(){var e,n,r,i -if(e=St,39===t.charCodeAt(St)?(n=I,St++):(n=a,0===Pt&&Zt($)),n!==a){if(r=[],(i=se())===a&&(U.test(t.charAt(St))?(i=t.charAt(St),St++):(i=a,0===Pt&&Zt(z))),i!==a)for(;i!==a;)r.push(i),(i=se())===a&&(U.test(t.charAt(St))?(i=t.charAt(St),St++):(i=a,0===Pt&&Zt(z))) -else r=a -r!==a?(39===t.charCodeAt(St)?(i=I,St++):(i=a,0===Pt&&Zt($)),i!==a?e=n=[n,r,i]:(St=e,e=a)):(St=e,e=a)}else St=e,e=a -if(e===a)if(e=[],(n=se())===a&&(Z.test(t.charAt(St))?(n=t.charAt(St),St++):(n=a,0===Pt&&Zt(q))),n!==a)for(;n!==a;)e.push(n),(n=se())===a&&(Z.test(t.charAt(St))?(n=t.charAt(St),St++):(n=a,0===Pt&&Zt(q))) -else e=a -return e}function ne(){var e,n -if(e=[],V.test(t.charAt(St))?(n=t.charAt(St),St++):(n=a,0===Pt&&Zt(H)),n!==a)for(;n!==a;)e.push(n),V.test(t.charAt(St))?(n=t.charAt(St),St++):(n=a,0===Pt&&Zt(H)) -else e=a -return e}function re(){var e,n,i,o,u,c,s -return e=St,ue()!==a&&(n=ye())!==a&&ue()!==a?(123===t.charCodeAt(St)?(i=_,St++):(i=a,0===Pt&&Zt(w)),i!==a?(Mt=St,be.push("select"),void 0!==a&&(o=Vt())!==a?(125===t.charCodeAt(St)?(u=x,St++):(u=a,0===Pt&&Zt(A)),u!==a?(Mt=e,c=n,s=o,be.pop(),e=(0,r.pi)({id:c,value:s},ge())):(St=e,e=a)):(St=e,e=a)):(St=e,e=a)):(St=e,e=a),e}function ie(){var e,n,i,o,u,c,s -return e=St,ue()!==a?(n=function(){var e,n,r,i -return e=St,n=St,61===t.charCodeAt(St)?(r="=",St++):(r=a,0===Pt&&Zt(ot)),r!==a&&(i=ce())!==a?n=r=[r,i]:(St=n,n=a),(e=n!==a?t.substring(e,St):n)===a&&(e=ye()),e}(),n!==a&&ue()!==a?(123===t.charCodeAt(St)?(i=_,St++):(i=a,0===Pt&&Zt(w)),i!==a?(Mt=St,be.push("plural"),void 0!==a&&(o=Vt())!==a?(125===t.charCodeAt(St)?(u=x,St++):(u=a,0===Pt&&Zt(A)),u!==a?(Mt=e,c=n,s=o,be.pop(),e=(0,r.pi)({id:c,value:s},ge())):(St=e,e=a)):(St=e,e=a)):(St=e,e=a)):(St=e,e=a)):(St=e,e=a),e}function oe(){var e -return Pt++,ut.test(t.charAt(St))?(e=t.charAt(St),St++):(e=a,0===Pt&&Zt(ct)),Pt--,e===a&&0===Pt&&Zt(at),e}function ae(){var e -return Pt++,ft.test(t.charAt(St))?(e=t.charAt(St),St++):(e=a,0===Pt&&Zt(lt)),Pt--,e===a&&0===Pt&&Zt(st),e}function ue(){var e,n,r -for(Pt++,e=St,n=[],r=oe();r!==a;)n.push(r),r=oe() -return e=n!==a?t.substring(e,St):n,Pt--,e===a&&(n=a,0===Pt&&Zt(ht)),e}function ce(){var e,n,r,i -return Pt++,e=St,45===t.charCodeAt(St)?(n="-",St++):(n=a,0===Pt&&Zt(pt)),n===a&&(n=null),n!==a&&(r=pe())!==a?(Mt=e,e=n=(i=r)?n?-i:i:0):(St=e,e=a),Pt--,e===a&&(n=a,0===Pt&&Zt(dt)),e}function se(){var e,n -return Pt++,e=St,t.substr(St,2)===bt?(n=bt,St+=2):(n=a,0===Pt&&Zt(vt)),n!==a&&(Mt=e,n="'"),Pt--,(e=n)===a&&(n=a,0===Pt&&Zt(yt)),e}function fe(){var e,n,r,i,o,u -if(e=St,39===t.charCodeAt(St)?(n=I,St++):(n=a,0===Pt&&Zt($)),n!==a)if(r=function(){var e,n,r,i,o -return e=St,n=St,t.length>St?(r=t.charAt(St),St++):(r=a,0===Pt&&Zt(C)),r!==a?(Mt=St,(i=(i="<"===(o=r)||">"===o||"{"===o||"}"===o||ve()&&"#"===o)?void 0:a)!==a?n=r=[r,i]:(St=n,n=a)):(St=n,n=a),n!==a?t.substring(e,St):n}(),r!==a){for(i=St,o=[],t.substr(St,2)===bt?(u=bt,St+=2):(u=a,0===Pt&&Zt(vt)),u===a&&(U.test(t.charAt(St))?(u=t.charAt(St),St++):(u=a,0===Pt&&Zt(z)));u!==a;)o.push(u),t.substr(St,2)===bt?(u=bt,St+=2):(u=a,0===Pt&&Zt(vt)),u===a&&(U.test(t.charAt(St))?(u=t.charAt(St),St++):(u=a,0===Pt&&Zt(z)));(i=o!==a?t.substring(i,St):o)!==a?(39===t.charCodeAt(St)?(o=I,St++):(o=a,0===Pt&&Zt($)),o===a&&(o=null),o!==a?(Mt=e,e=n=r+i.replace("''","'")):(St=e,e=a)):(St=e,e=a)}else St=e,e=a -else St=e,e=a -return e}function le(){var e,n,r,i,o -return e=St,n=St,t.length>St?(r=t.charAt(St),St++):(r=a,0===Pt&&Zt(C)),r!==a?(Mt=St,(i=(i=!("<"===(o=r)||"{"===o||ve()&&"#"===o||be.length>1&&"}"===o))?void 0:a)!==a?n=r=[r,i]:(St=n,n=a)):(St=n,n=a),n===a&&(10===t.charCodeAt(St)?(n="\n",St++):(n=a,0===Pt&&Zt(gt))),n!==a?t.substring(e,St):n}function he(){var e,n -return Pt++,e=St,(n=pe())===a&&(n=ye()),e=n!==a?t.substring(e,St):n,Pt--,e===a&&(n=a,0===Pt&&Zt(mt)),e}function de(){var e,n -return Pt++,e=St,(n=pe())===a&&(n=function(){var e,n,r,i,o -if(Pt++,e=St,n=[],45===t.charCodeAt(St)?(r="-",St++):(r=a,0===Pt&&Zt(pt)),r===a&&(r=St,i=St,Pt++,(o=oe())===a&&(o=ae()),Pt--,o===a?i=void 0:(St=i,i=a),i!==a?(t.length>St?(o=t.charAt(St),St++):(o=a,0===Pt&&Zt(C)),o!==a?r=i=[i,o]:(St=r,r=a)):(St=r,r=a)),r!==a)for(;r!==a;)n.push(r),45===t.charCodeAt(St)?(r="-",St++):(r=a,0===Pt&&Zt(pt)),r===a&&(r=St,i=St,Pt++,(o=oe())===a&&(o=ae()),Pt--,o===a?i=void 0:(St=i,i=a),i!==a?(t.length>St?(o=t.charAt(St),St++):(o=a,0===Pt&&Zt(C)),o!==a?r=i=[i,o]:(St=r,r=a)):(St=r,r=a)) -else n=a -return e=n!==a?t.substring(e,St):n,Pt--,e===a&&(n=a,0===Pt&&Zt(Ot)),e}()),e=n!==a?t.substring(e,St):n,Pt--,e===a&&(n=a,0===Pt&&Zt(_t)),e}function pe(){var e,n,r,i,o -if(Pt++,e=St,48===t.charCodeAt(St)?(n="0",St++):(n=a,0===Pt&&Zt(xt)),n!==a&&(Mt=e,n=0),(e=n)===a){if(e=St,n=St,At.test(t.charAt(St))?(r=t.charAt(St),St++):(r=a,0===Pt&&Zt(Et)),r!==a){for(i=[],kt.test(t.charAt(St))?(o=t.charAt(St),St++):(o=a,0===Pt&&Zt(Dt));o!==a;)i.push(o),kt.test(t.charAt(St))?(o=t.charAt(St),St++):(o=a,0===Pt&&Zt(Dt)) -i!==a?n=r=[r,i]:(St=n,n=a)}else St=n,n=a -n!==a&&(Mt=e,n=parseInt(n.join(""),10)),e=n}return Pt--,e===a&&(n=a,0===Pt&&Zt(wt)),e}function ye(){var e,n,r,i,o -if(Pt++,e=St,n=[],r=St,i=St,Pt++,(o=oe())===a&&(o=ae()),Pt--,o===a?i=void 0:(St=i,i=a),i!==a?(t.length>St?(o=t.charAt(St),St++):(o=a,0===Pt&&Zt(C)),o!==a?r=i=[i,o]:(St=r,r=a)):(St=r,r=a),r!==a)for(;r!==a;)n.push(r),r=St,i=St,Pt++,(o=oe())===a&&(o=ae()),Pt--,o===a?i=void 0:(St=i,i=a),i!==a?(t.length>St?(o=t.charAt(St),St++):(o=a,0===Pt&&Zt(C)),o!==a?r=i=[i,o]:(St=r,r=a)):(St=r,r=a) -else n=a -return e=n!==a?t.substring(e,St):n,Pt--,e===a&&(n=a,0===Pt&&Zt(Ct)),e}var be=["root"] -function ve(){return"plural"===be[be.length-1]}function ge(){return e&&e.captureLocation?{location:Nt()}:{}}var me,_e,we,xe=e&&e.ignoreTag,Ae=e&&e.shouldParseSkeleton -if((n=c())!==a&&St===t.length)return n -throw n!==a&&St{"use strict" -var r,i -function o(t){return t.type===r.literal}function a(t){return t.type===r.argument}function u(t){return t.type===r.number}function c(t){return t.type===r.date}function s(t){return t.type===r.time}function f(t){return t.type===r.select}function l(t){return t.type===r.plural}function h(t){return t.type===r.pound}function d(t){return t.type===r.tag}function p(t){return!(!t||"object"!=typeof t||t.type!==i.number)}function y(t){return!(!t||"object"!=typeof t||t.type!==i.dateTime)}function b(t){return{type:r.literal,value:t}}function v(t,e){return{type:r.number,value:t,style:e}}n.d(e,{HI:()=>d,Ii:()=>y,Jo:()=>l,O4:()=>o,VG:()=>a,Wh:()=>p,Wi:()=>f,aV:()=>i,mD:()=>b,pe:()=>s,qx:()=>v,rp:()=>c,uf:()=>u,wD:()=>r,yx:()=>h}),function(t){t[t.literal=0]="literal",t[t.argument=1]="argument",t[t.number=2]="number",t[t.date=3]="date",t[t.time=4]="time",t[t.select=5]="select",t[t.plural=6]="plural",t[t.pound=7]="pound",t[t.tag=8]="tag"}(r||(r={})),function(t){t[t.number=0]="number",t[t.dateTime=1]="dateTime"}(i||(i={}))},4143:(t,e,n)=>{"use strict" -n.r(e),n.d(e,{ErrorCode:()=>r,FormatError:()=>f,IntlMessageFormat:()=>g,InvalidValueError:()=>l,InvalidValueTypeError:()=>h,MissingValueError:()=>d,PART_TYPE:()=>s,default:()=>m,formatToParts:()=>y,isFormatXMLElementFn:()=>p}) -var r,i=n(2247),o=n(4857),a=n(4564),u=n.n(a),c=n(8131) -!function(t){t.MISSING_VALUE="MISSING_VALUE",t.INVALID_VALUE="INVALID_VALUE",t.MISSING_INTL_API="MISSING_INTL_API"}(r||(r={})) -var s,f=function(t){function e(e,n,r){var i=t.call(this,e)||this -return i.code=n,i.originalMessage=r,i}return(0,i.ZT)(e,t),e.prototype.toString=function(){return"[formatjs Error: "+this.code+"] "+this.message},e}(Error),l=function(t){function e(e,n,i,o){return t.call(this,'Invalid values for "'+e+'": "'+n+'". Options are "'+Object.keys(i).join('", "')+'"',r.INVALID_VALUE,o)||this}return(0,i.ZT)(e,t),e}(f),h=function(t){function e(e,n,i){return t.call(this,'Value for "'+e+'" must be of type '+n,r.INVALID_VALUE,i)||this}return(0,i.ZT)(e,t),e}(f),d=function(t){function e(e,n){return t.call(this,'The intl string context variable "'+e+'" was not provided to the string "'+n+'"',r.MISSING_VALUE,n)||this}return(0,i.ZT)(e,t),e}(f) -function p(t){return"function"==typeof t}function y(t,e,n,i,o,a,u){if(1===t.length&&(0,c.O4)(t[0]))return[{type:s.literal,value:t[0].value}] -for(var b=[],v=0,g=t;v{var r=n(1219),i=n(2251) -function o(t){this.Container=t||Array,this.items=new Map,this.clear(),Object.defineProperty(this.items,"constructor",{value:o,enumerable:!1})}o.prototype.clear=function(){this.size=0,this.dimension=0,this.items.clear()},o.prototype.set=function(t,e){var n,r=this.items.get(t) -return r||(this.dimension++,r=new this.Container,this.items.set(t,r)),this.Container===Set?(n=r.size,r.add(e),n1?e:this,this.items.forEach((function(t,e){n=e,t.forEach(r)}))},o.prototype.forEachAssociation=function(t,e){e=arguments.length>1?e:this,this.items.forEach(t,e)},o.prototype.keys=function(){return this.items.keys()},o.prototype.values=function(){var t,e,n,i,o=this.items.values(),a=!1 -return this.Container===Set?new r((function n(){if(!a){if((e=o.next()).done)return{done:!0} -a=!0,t=e.value.values()}return(e=t.next()).done?(a=!1,n()):{done:!1,value:e.value}})):new r((function r(){if(!a){if((e=o.next()).done)return{done:!0} -a=!0,t=e.value,n=0,i=t.length}return n>=i?(a=!1,r()):{done:!1,value:t[n++]}}))},o.prototype.entries=function(){var t,e,n,i,o,a=this.items.entries(),u=!1 -return this.Container===Set?new r((function r(){if(!u){if((e=a.next()).done)return{done:!0} -u=!0,n=e.value[0],t=e.value[1].values()}return(e=t.next()).done?(u=!1,r()):{done:!1,value:[n,e.value]}})):new r((function r(){if(!u){if((e=a.next()).done)return{done:!0} -u=!0,n=e.value[0],t=e.value[1],i=0,o=t.length}return i>=o?(u=!1,r()):{done:!1,value:[n,t[i++]]}}))},o.prototype.containers=function(){return this.items.values()},o.prototype.associations=function(){return this.items.entries()},"undefined"!=typeof Symbol&&(o.prototype[Symbol.iterator]=o.prototype.entries),o.prototype.inspect=function(){return this.items},"undefined"!=typeof Symbol&&(o.prototype[Symbol.for("nodejs.util.inspect.custom")]=o.prototype.inspect),o.prototype.toJSON=function(){return this.items},o.from=function(t,e){var n=new o(e) -return i(t,(function(t,e){n.set(e,t)})),n},t.exports=o},3333:(t,e)=>{e.intersection=function(){if(arguments.length<2)throw new Error("mnemonist/Set.intersection: needs at least two arguments.") -var t,e,n=new Set,r=1/0,i=null,o=arguments.length -for(e=0;ee.size)return!1 -for(;!(n=r.next()).done;)if(!e.has(n.value))return!1 -return!0},e.isSuperset=function(t,n){return e.isSubset(n,t)},e.add=function(t,e){for(var n,r=e.values();!(n=r.next()).done;)t.add(n.value)},e.subtract=function(t,e){for(var n,r=e.values();!(n=r.next()).done;)t.delete(n.value)},e.intersect=function(t,e){for(var n,r=t.values();!(n=r.next()).done;)e.has(n.value)||t.delete(n.value)},e.disjunct=function(t,e){for(var n,r=t.values(),i=[];!(n=r.next()).done;)e.has(n.value)&&i.push(n.value) -for(r=e.values();!(n=r.next()).done;)t.has(n.value)||t.add(n.value) -for(var o=0,a=i.length;oe.size&&(n=t,t=e,e=n),0===t.size)return 0 -if(t===e)return t.size -for(var r,i=t.values(),o=0;!(r=i.next()).done;)e.has(r.value)&&o++ -return o},e.unionSize=function(t,n){var r=e.intersectionSize(t,n) -return t.size+n.size-r},e.jaccard=function(t,n){var r=e.intersectionSize(t,n) -return 0===r?0:r/(t.size+n.size-r)},e.overlap=function(t,n){var r=e.intersectionSize(t,n) -return 0===r?0:r/Math.min(t.size,n.size)}},260:t=>{function e(t,e){if(!t)throw new Error(e||"AssertionError")}e.notEqual=function(t,n,r){e(t!=n,r)},e.notOk=function(t,n){e(!t,n)},e.equal=function(t,n,r){e(t==n,r)},e.ok=e,t.exports=e},4662:t=>{t.exports=function(t){!function(t){if(!t)throw new Error("Eventify cannot use falsy object as events subject") -for(var e=["on","fire","off"],n=0;n1&&(r=Array.prototype.splice.call(arguments,1)) -for(var o=0;o{t.exports=function(t){if("uniqueLinkId"in(t=t||{})&&(console.warn("ngraph.graph: Starting from version 0.14 `uniqueLinkId` is deprecated.\nUse `multigraph` option instead\n","\n","Note: there is also change in default behavior: From now on each graph\nis considered to be not a multigraph by default (each edge is unique)."),t.multigraph=t.uniqueLinkId),void 0===t.multigraph&&(t.multigraph=!1),"function"!=typeof Map)throw new Error("ngraph.graph requires `Map` to be defined. Please polyfill it before using ngraph") -var e,n=new Map,s=[],f={},l=0,h=t.multigraph?function(t,e,n){var r=c(t,e),i=f.hasOwnProperty(r) -if(i||C(t,e)){i||(f[r]=0) -var o="@"+ ++f[r] -r=c(t+o,e+o)}return new u(t,e,n,r)}:function(t,e,n){return new u(t,e,n,c(t,e))},d=[],p=O,y=O,b=O,v=O,g={addNode:w,addLink:function(t,e,n){b() -var r=x(t)||w(t),i=x(e)||w(e),o=h(t,e,n) -return s.push(o),a(r,o),t!==e&&a(i,o),p(o,"add"),v(),o},removeLink:D,removeNode:A,getNode:x,getNodeCount:E,getLinkCount:k,getLinksCount:k,getNodesCount:E,getLinks:function(t){var e=x(t) -return e?e.links:null},forEachNode:F,forEachLinkedNode:function(t,e,r){var i=x(t) -if(i&&i.links&&"function"==typeof e)return r?function(t,e,r){for(var i=0;i=0&&n.links.splice(e,1),r&&(e=i(t,r.links))>=0&&r.links.splice(e,1),p(t,"remove"),v(),!0}function C(t,e){var n,r=x(t) -if(!r||!r.links)return null -for(n=0;n0&&(g.fire("changed",d),d.length=0)}function F(t){if("function"!=typeof t)throw new Error("Function is expected to iterate over graph nodes. You passed "+t) -for(var e=n.values(),r=e.next();!r.done;){if(t(r.value))return!0 -r=e.next()}}} -var r=n(4662) -function i(t,e){if(!e)return-1 -if(e.indexOf)return e.indexOf(t) -var n,r=e.length -for(n=0;n{var e="undefined"!=typeof ArrayBuffer,n="undefined"!=typeof Symbol -function r(t,r){var i,o,a,u,c -if(!t)throw new Error("obliterator/forEach: invalid iterable.") -if("function"!=typeof r)throw new Error("obliterator/forEach: expecting a callback.") -if(Array.isArray(t)||e&&ArrayBuffer.isView(t)||"string"==typeof t||"[object Arguments]"===t.toString())for(a=0,u=t.length;a{function e(t){Object.defineProperty(this,"_next",{writable:!1,enumerable:!1,value:t}),this.done=!1}e.prototype.next=function(){if(this.done)return{done:!0} -var t=this._next() -return t.done&&(this.done=!0),t},"undefined"!=typeof Symbol&&(e.prototype[Symbol.iterator]=function(){return this}),e.of=function(){var t=arguments,n=t.length,r=0 -return new e((function(){return r>=n?{done:!0}:{done:!1,value:t[r++]}}))},e.empty=function(){var t=new e(null) -return t.done=!0,t},e.is=function(t){return t instanceof e||"object"==typeof t&&null!==t&&"function"==typeof t.next},t.exports=e},1813:t=>{"use strict" -var e=/(\x2D?(?:\d+\.?\d*|\d*\.?\d+)(?:e[-+]?\d+)?)\s*([A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC\u{10000}-\u{1000B}\u{1000D}-\u{10026}\u{10028}-\u{1003A}\u{1003C}\u{1003D}\u{1003F}-\u{1004D}\u{10050}-\u{1005D}\u{10080}-\u{100FA}\u{10280}-\u{1029C}\u{102A0}-\u{102D0}\u{10300}-\u{1031F}\u{1032D}-\u{10340}\u{10342}-\u{10349}\u{10350}-\u{10375}\u{10380}-\u{1039D}\u{103A0}-\u{103C3}\u{103C8}-\u{103CF}\u{10400}-\u{1049D}\u{104B0}-\u{104D3}\u{104D8}-\u{104FB}\u{10500}-\u{10527}\u{10530}-\u{10563}\u{10570}-\u{1057A}\u{1057C}-\u{1058A}\u{1058C}-\u{10592}\u{10594}\u{10595}\u{10597}-\u{105A1}\u{105A3}-\u{105B1}\u{105B3}-\u{105B9}\u{105BB}\u{105BC}\u{10600}-\u{10736}\u{10740}-\u{10755}\u{10760}-\u{10767}\u{10780}-\u{10785}\u{10787}-\u{107B0}\u{107B2}-\u{107BA}\u{10800}-\u{10805}\u{10808}\u{1080A}-\u{10835}\u{10837}\u{10838}\u{1083C}\u{1083F}-\u{10855}\u{10860}-\u{10876}\u{10880}-\u{1089E}\u{108E0}-\u{108F2}\u{108F4}\u{108F5}\u{10900}-\u{10915}\u{10920}-\u{10939}\u{10980}-\u{109B7}\u{109BE}\u{109BF}\u{10A00}\u{10A10}-\u{10A13}\u{10A15}-\u{10A17}\u{10A19}-\u{10A35}\u{10A60}-\u{10A7C}\u{10A80}-\u{10A9C}\u{10AC0}-\u{10AC7}\u{10AC9}-\u{10AE4}\u{10B00}-\u{10B35}\u{10B40}-\u{10B55}\u{10B60}-\u{10B72}\u{10B80}-\u{10B91}\u{10C00}-\u{10C48}\u{10C80}-\u{10CB2}\u{10CC0}-\u{10CF2}\u{10D00}-\u{10D23}\u{10E80}-\u{10EA9}\u{10EB0}\u{10EB1}\u{10F00}-\u{10F1C}\u{10F27}\u{10F30}-\u{10F45}\u{10F70}-\u{10F81}\u{10FB0}-\u{10FC4}\u{10FE0}-\u{10FF6}\u{11003}-\u{11037}\u{11071}\u{11072}\u{11075}\u{11083}-\u{110AF}\u{110D0}-\u{110E8}\u{11103}-\u{11126}\u{11144}\u{11147}\u{11150}-\u{11172}\u{11176}\u{11183}-\u{111B2}\u{111C1}-\u{111C4}\u{111DA}\u{111DC}\u{11200}-\u{11211}\u{11213}-\u{1122B}\u{11280}-\u{11286}\u{11288}\u{1128A}-\u{1128D}\u{1128F}-\u{1129D}\u{1129F}-\u{112A8}\u{112B0}-\u{112DE}\u{11305}-\u{1130C}\u{1130F}\u{11310}\u{11313}-\u{11328}\u{1132A}-\u{11330}\u{11332}\u{11333}\u{11335}-\u{11339}\u{1133D}\u{11350}\u{1135D}-\u{11361}\u{11400}-\u{11434}\u{11447}-\u{1144A}\u{1145F}-\u{11461}\u{11480}-\u{114AF}\u{114C4}\u{114C5}\u{114C7}\u{11580}-\u{115AE}\u{115D8}-\u{115DB}\u{11600}-\u{1162F}\u{11644}\u{11680}-\u{116AA}\u{116B8}\u{11700}-\u{1171A}\u{11740}-\u{11746}\u{11800}-\u{1182B}\u{118A0}-\u{118DF}\u{118FF}-\u{11906}\u{11909}\u{1190C}-\u{11913}\u{11915}\u{11916}\u{11918}-\u{1192F}\u{1193F}\u{11941}\u{119A0}-\u{119A7}\u{119AA}-\u{119D0}\u{119E1}\u{119E3}\u{11A00}\u{11A0B}-\u{11A32}\u{11A3A}\u{11A50}\u{11A5C}-\u{11A89}\u{11A9D}\u{11AB0}-\u{11AF8}\u{11C00}-\u{11C08}\u{11C0A}-\u{11C2E}\u{11C40}\u{11C72}-\u{11C8F}\u{11D00}-\u{11D06}\u{11D08}\u{11D09}\u{11D0B}-\u{11D30}\u{11D46}\u{11D60}-\u{11D65}\u{11D67}\u{11D68}\u{11D6A}-\u{11D89}\u{11D98}\u{11EE0}-\u{11EF2}\u{11FB0}\u{12000}-\u{12399}\u{12480}-\u{12543}\u{12F90}-\u{12FF0}\u{13000}-\u{1342E}\u{14400}-\u{14646}\u{16800}-\u{16A38}\u{16A40}-\u{16A5E}\u{16A70}-\u{16ABE}\u{16AD0}-\u{16AED}\u{16B00}-\u{16B2F}\u{16B40}-\u{16B43}\u{16B63}-\u{16B77}\u{16B7D}-\u{16B8F}\u{16E40}-\u{16E7F}\u{16F00}-\u{16F4A}\u{16F50}\u{16F93}-\u{16F9F}\u{16FE0}\u{16FE1}\u{16FE3}\u{17000}-\u{187F7}\u{18800}-\u{18CD5}\u{18D00}-\u{18D08}\u{1AFF0}-\u{1AFF3}\u{1AFF5}-\u{1AFFB}\u{1AFFD}\u{1AFFE}\u{1B000}-\u{1B122}\u{1B150}-\u{1B152}\u{1B164}-\u{1B167}\u{1B170}-\u{1B2FB}\u{1BC00}-\u{1BC6A}\u{1BC70}-\u{1BC7C}\u{1BC80}-\u{1BC88}\u{1BC90}-\u{1BC99}\u{1D400}-\u{1D454}\u{1D456}-\u{1D49C}\u{1D49E}\u{1D49F}\u{1D4A2}\u{1D4A5}\u{1D4A6}\u{1D4A9}-\u{1D4AC}\u{1D4AE}-\u{1D4B9}\u{1D4BB}\u{1D4BD}-\u{1D4C3}\u{1D4C5}-\u{1D505}\u{1D507}-\u{1D50A}\u{1D50D}-\u{1D514}\u{1D516}-\u{1D51C}\u{1D51E}-\u{1D539}\u{1D53B}-\u{1D53E}\u{1D540}-\u{1D544}\u{1D546}\u{1D54A}-\u{1D550}\u{1D552}-\u{1D6A5}\u{1D6A8}-\u{1D6C0}\u{1D6C2}-\u{1D6DA}\u{1D6DC}-\u{1D6FA}\u{1D6FC}-\u{1D714}\u{1D716}-\u{1D734}\u{1D736}-\u{1D74E}\u{1D750}-\u{1D76E}\u{1D770}-\u{1D788}\u{1D78A}-\u{1D7A8}\u{1D7AA}-\u{1D7C2}\u{1D7C4}-\u{1D7CB}\u{1DF00}-\u{1DF1E}\u{1E100}-\u{1E12C}\u{1E137}-\u{1E13D}\u{1E14E}\u{1E290}-\u{1E2AD}\u{1E2C0}-\u{1E2EB}\u{1E7E0}-\u{1E7E6}\u{1E7E8}-\u{1E7EB}\u{1E7ED}\u{1E7EE}\u{1E7F0}-\u{1E7FE}\u{1E800}-\u{1E8C4}\u{1E900}-\u{1E943}\u{1E94B}\u{1EE00}-\u{1EE03}\u{1EE05}-\u{1EE1F}\u{1EE21}\u{1EE22}\u{1EE24}\u{1EE27}\u{1EE29}-\u{1EE32}\u{1EE34}-\u{1EE37}\u{1EE39}\u{1EE3B}\u{1EE42}\u{1EE47}\u{1EE49}\u{1EE4B}\u{1EE4D}-\u{1EE4F}\u{1EE51}\u{1EE52}\u{1EE54}\u{1EE57}\u{1EE59}\u{1EE5B}\u{1EE5D}\u{1EE5F}\u{1EE61}\u{1EE62}\u{1EE64}\u{1EE67}-\u{1EE6A}\u{1EE6C}-\u{1EE72}\u{1EE74}-\u{1EE77}\u{1EE79}-\u{1EE7C}\u{1EE7E}\u{1EE80}-\u{1EE89}\u{1EE8B}-\u{1EE9B}\u{1EEA1}-\u{1EEA3}\u{1EEA5}-\u{1EEA9}\u{1EEAB}-\u{1EEBB}\u{20000}-\u{2A6DF}\u{2A700}-\u{2B738}\u{2B740}-\u{2B81D}\u{2B820}-\u{2CEA1}\u{2CEB0}-\u{2EBE0}\u{2F800}-\u{2FA1D}\u{30000}-\u{3134A}]*)/giu -function n(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"ms" -var i=null -return t=(t+"").replace(/(\d)[,_](\d)/g,"$1$2"),t.replace(e,(function(t,e,n){(n=r(n))&&(i=(i||0)+parseFloat(e,10)*n)})),i&&i/(r(n)||1)}function r(t){return n[t]||n[t.toLowerCase().replace(/s$/,"")]}t.exports=n,t.exports.default=n,n.nanosecond=n.ns=1e-6,n["µs"]=n["μs"]=n.us=n.microsecond=.001,n.millisecond=n.ms=n[""]=1,n.second=n.sec=n.s=1e3*n.ms,n.minute=n.min=n.m=60*n.s,n.hour=n.hr=n.h=60*n.m,n.day=n.d=24*n.h,n.week=n.wk=n.w=7*n.d,n.month=n.b=30.4375*n.d,n.year=n.yr=n.y=365.25*n.d},2610:t=>{"use strict" -t.exports=t=>{if("number"!=typeof t)throw new TypeError("Expected a number") -const e=t>0?Math.floor:Math.ceil -return{days:e(t/864e5),hours:e(t/36e5)%24,minutes:e(t/6e4)%60,seconds:e(t/1e3)%60,milliseconds:e(t)%1e3,microseconds:e(1e3*t)%1e3,nanoseconds:e(1e6*t)%1e3}}},3385:(t,e,n)=>{"use strict" -const r=n(2610),i=(t,e)=>1===e?t:`${t}s` -t.exports=function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} -if(!Number.isFinite(t))throw new TypeError("Expected a finite number") -e.colonNotation&&(e.compact=!1,e.formatSubMilliseconds=!1,e.separateMilliseconds=!1,e.verbose=!1),e.compact&&(e.secondsDecimalDigits=0,e.millisecondsDecimalDigits=0) -const n=[],o=(t,e)=>{const n=Math.floor(t*10**e+1e-7) -return(Math.round(n)/10**e).toFixed(e)},a=(t,r,o,a)=>{if(!(0!==n.length&&e.colonNotation||0!==t||e.colonNotation&&"m"===o))return -let u,c -if(a=(a||t||"0").toString(),e.colonNotation){u=n.length>0?":":"",c="" -const t=a.includes(".")?a.split(".")[0].length:a.length,e=n.length>0?2:1 -a="0".repeat(Math.max(0,e-t))+a}else u="",c=e.verbose?" "+i(r,t):o -n.push(u+a+c)},u=r(t) -if(a(Math.trunc(u.days/365),"year","y"),a(u.days%365,"day","d"),a(u.hours,"hour","h"),a(u.minutes,"minute","m"),e.separateMilliseconds||e.formatSubMilliseconds||!e.colonNotation&&t<1e3)if(a(u.seconds,"second","s"),e.formatSubMilliseconds)a(u.milliseconds,"millisecond","ms"),a(u.microseconds,"microsecond","µs"),a(u.nanoseconds,"nanosecond","ns") -else{const t=u.milliseconds+u.microseconds/1e3+u.nanoseconds/1e6,n="number"==typeof e.millisecondsDecimalDigits?e.millisecondsDecimalDigits:0,r=t>=1?Math.round(t):Math.ceil(t),i=n?t.toFixed(n):r -a(Number.parseFloat(i,10),"millisecond","ms",i)}else{const n=o(t/1e3%60,"number"==typeof e.secondsDecimalDigits?e.secondsDecimalDigits:1),r=e.keepDecimalsOnWholeSeconds?n:n.replace(/\.0+$/,"") -a(Number.parseFloat(r,10),"second","s",r)}if(0===n.length)return"0"+(e.verbose?" milliseconds":"ms") -if(e.compact)return n[0] -if("number"==typeof e.unitCount){const t=e.colonNotation?"":" " -return n.slice(0,Math.max(e.unitCount,1)).join(t)}return e.colonNotation?n.join(""):n.join(" ")}},7114:(t,e,n)=>{"use strict" -var r -n.r(e),n.d(e,{default:()=>i}) -const i=function(){function t(){this.pool=[],this.flush()}return t.prototype.flush=function(){var t=this -r=window.requestAnimationFrame((function(){var e=t.pool -t.reset(),e.forEach((function(t){t[Object.keys(t)[0]]()})),t.flush()}))},t.prototype.add=function(t,e){var n -return this.pool.push(((n={})[t]=e,n)),e},t.prototype.remove=function(t){this.pool=this.pool.filter((function(e){return!e[t]}))},t.prototype.reset=function(){this.pool=[]},t.prototype.stop=function(){window.cancelAnimationFrame(r)},t}()},1499:(t,e,n)=>{"use strict" -function r(t){var e=t.getBoundingClientRect() -return{width:e.width,height:e.height,top:e.top,right:e.right,bottom:e.bottom,left:e.left,x:e.left,y:e.top}}function i(t){if(null==t)return window -if("[object Window]"!==t.toString()){var e=t.ownerDocument -return e&&e.defaultView||window}return t}function o(t){var e=i(t) -return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function a(t){return t instanceof i(t).Element||t instanceof Element}function u(t){return t instanceof i(t).HTMLElement||t instanceof HTMLElement}function c(t){return"undefined"!=typeof ShadowRoot&&(t instanceof i(t).ShadowRoot||t instanceof ShadowRoot)}function s(t){return t?(t.nodeName||"").toLowerCase():null}function f(t){return((a(t)?t.ownerDocument:t.document)||window.document).documentElement}function l(t){return r(f(t)).left+o(t).scrollLeft}function h(t){return i(t).getComputedStyle(t)}function d(t){var e=h(t),n=e.overflow,r=e.overflowX,i=e.overflowY -return/auto|scroll|overlay|hidden/.test(n+i+r)}function p(t,e,n){void 0===n&&(n=!1) -var a,c,h=f(e),p=r(t),y=u(e),b={scrollLeft:0,scrollTop:0},v={x:0,y:0} -return(y||!y&&!n)&&(("body"!==s(e)||d(h))&&(b=(a=e)!==i(a)&&u(a)?{scrollLeft:(c=a).scrollLeft,scrollTop:c.scrollTop}:o(a)),u(e)?((v=r(e)).x+=e.clientLeft,v.y+=e.clientTop):h&&(v.x=l(h))),{x:p.left+b.scrollLeft-v.x,y:p.top+b.scrollTop-v.y,width:p.width,height:p.height}}function y(t){var e=r(t),n=t.offsetWidth,i=t.offsetHeight -return Math.abs(e.width-n)<=1&&(n=e.width),Math.abs(e.height-i)<=1&&(i=e.height),{x:t.offsetLeft,y:t.offsetTop,width:n,height:i}}function b(t){return"html"===s(t)?t:t.assignedSlot||t.parentNode||(c(t)?t.host:null)||f(t)}function v(t){return["html","body","#document"].indexOf(s(t))>=0?t.ownerDocument.body:u(t)&&d(t)?t:v(b(t))}function g(t,e){var n -void 0===e&&(e=[]) -var r=v(t),o=r===(null==(n=t.ownerDocument)?void 0:n.body),a=i(r),u=o?[a].concat(a.visualViewport||[],d(r)?r:[]):r,c=e.concat(u) -return o?c:c.concat(g(b(u)))}function m(t){return["table","td","th"].indexOf(s(t))>=0}function _(t){return u(t)&&"fixed"!==h(t).position?t.offsetParent:null}function w(t){for(var e=i(t),n=_(t);n&&m(n)&&"static"===h(n).position;)n=_(n) -return n&&("html"===s(n)||"body"===s(n)&&"static"===h(n).position)?e:n||function(t){for(var e=-1!==navigator.userAgent.toLowerCase().indexOf("firefox"),n=b(t);u(n)&&["html","body"].indexOf(s(n))<0;){var r=h(n) -if("none"!==r.transform||"none"!==r.perspective||"paint"===r.contain||-1!==["transform","perspective"].indexOf(r.willChange)||e&&"filter"===r.willChange||e&&r.filter&&"none"!==r.filter)return n -n=n.parentNode}return null}(t)||e}n.r(e),n.d(e,{animateFill:()=>oe,createSingleton:()=>ne,default:()=>de,delegate:()=>ie,followCursor:()=>se,hideAll:()=>te,inlinePositioning:()=>fe,roundArrow:()=>lt,sticky:()=>le}) -var x="top",A="bottom",E="right",k="left",D="auto",C=[x,A,E,k],O="start",S="end",M="viewport",F="popper",T=C.reduce((function(t,e){return t.concat([e+"-"+O,e+"-"+S])}),[]),B=[].concat(C,[D]).reduce((function(t,e){return t.concat([e,e+"-"+O,e+"-"+S])}),[]),P=["beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite"] -function j(t){var e=new Map,n=new Set,r=[] -function i(t){n.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!n.has(t)){var r=e.get(t) -r&&i(r)}})),r.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){n.has(t.name)||i(t)})),r}var N={placement:"bottom",modifiers:[],strategy:"absolute"} -function R(){for(var t=arguments.length,e=new Array(t),n=0;n=0?"x":"y"}function Z(t){var e,n=t.reference,r=t.element,i=t.placement,o=i?$(i):null,a=i?U(i):null,u=n.x+n.width/2-r.width/2,c=n.y+n.height/2-r.height/2 -switch(o){case x:e={x:u,y:n.y-r.height} -break -case A:e={x:u,y:n.y+n.height} -break -case E:e={x:n.x+n.width,y:c} -break -case k:e={x:n.x-r.width,y:c} -break -default:e={x:n.x,y:n.y}}var s=o?z(o):null -if(null!=s){var f="y"===s?"height":"width" -switch(a){case O:e[s]=e[s]-(n[f]/2-r[f]/2) -break -case S:e[s]=e[s]+(n[f]/2-r[f]/2)}}return e}const q={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,n=t.name -e.modifiersData[n]=Z({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}} -var V=Math.max,H=Math.min,Y=Math.round,G={top:"auto",right:"auto",bottom:"auto",left:"auto"} -function K(t){var e,n=t.popper,r=t.popperRect,o=t.placement,a=t.offsets,u=t.position,c=t.gpuAcceleration,s=t.adaptive,l=t.roundOffsets,d=!0===l?function(t){var e=t.x,n=t.y,r=window.devicePixelRatio||1 -return{x:Y(Y(e*r)/r)||0,y:Y(Y(n*r)/r)||0}}(a):"function"==typeof l?l(a):a,p=d.x,y=void 0===p?0:p,b=d.y,v=void 0===b?0:b,g=a.hasOwnProperty("x"),m=a.hasOwnProperty("y"),_=k,D=x,C=window -if(s){var O=w(n),S="clientHeight",M="clientWidth" -O===i(n)&&"static"!==h(O=f(n)).position&&(S="scrollHeight",M="scrollWidth"),o===x&&(D=A,v-=O[S]-r.height,v*=c?1:-1),o===k&&(_=E,y-=O[M]-r.width,y*=c?1:-1)}var F,T=Object.assign({position:u},s&&G) -return c?Object.assign({},T,((F={})[D]=m?"0":"",F[_]=g?"0":"",F.transform=(C.devicePixelRatio||1)<2?"translate("+y+"px, "+v+"px)":"translate3d("+y+"px, "+v+"px, 0)",F)):Object.assign({},T,((e={})[D]=m?v+"px":"",e[_]=g?y+"px":"",e.transform="",e))}const W={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state -Object.keys(e.elements).forEach((function(t){var n=e.styles[t]||{},r=e.attributes[t]||{},i=e.elements[t] -u(i)&&s(i)&&(Object.assign(i.style,n),Object.keys(r).forEach((function(t){var e=r[t] -!1===e?i.removeAttribute(t):i.setAttribute(t,!0===e?"":e)})))}))},effect:function(t){var e=t.state,n={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}} -return Object.assign(e.elements.popper.style,n.popper),e.styles=n,e.elements.arrow&&Object.assign(e.elements.arrow.style,n.arrow),function(){Object.keys(e.elements).forEach((function(t){var r=e.elements[t],i=e.attributes[t]||{},o=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:n[t]).reduce((function(t,e){return t[e]="",t}),{}) -u(r)&&s(r)&&(Object.assign(r.style,o),Object.keys(i).forEach((function(t){r.removeAttribute(t)})))}))}},requires:["computeStyles"]} -var X={left:"right",right:"left",bottom:"top",top:"bottom"} -function J(t){return t.replace(/left|right|bottom|top/g,(function(t){return X[t]}))}var Q={start:"end",end:"start"} -function tt(t){return t.replace(/start|end/g,(function(t){return Q[t]}))}function et(t,e){var n=e.getRootNode&&e.getRootNode() -if(t.contains(e))return!0 -if(n&&c(n)){var r=e -do{if(r&&t.isSameNode(r))return!0 -r=r.parentNode||r.host}while(r)}return!1}function nt(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function rt(t,e){return e===M?nt(function(t){var e=i(t),n=f(t),r=e.visualViewport,o=n.clientWidth,a=n.clientHeight,u=0,c=0 -return r&&(o=r.width,a=r.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(u=r.offsetLeft,c=r.offsetTop)),{width:o,height:a,x:u+l(t),y:c}}(t)):u(e)?function(t){var e=r(t) -return e.top=e.top+t.clientTop,e.left=e.left+t.clientLeft,e.bottom=e.top+t.clientHeight,e.right=e.left+t.clientWidth,e.width=t.clientWidth,e.height=t.clientHeight,e.x=e.left,e.y=e.top,e}(e):nt(function(t){var e,n=f(t),r=o(t),i=null==(e=t.ownerDocument)?void 0:e.body,a=V(n.scrollWidth,n.clientWidth,i?i.scrollWidth:0,i?i.clientWidth:0),u=V(n.scrollHeight,n.clientHeight,i?i.scrollHeight:0,i?i.clientHeight:0),c=-r.scrollLeft+l(t),s=-r.scrollTop -return"rtl"===h(i||n).direction&&(c+=V(n.clientWidth,i?i.clientWidth:0)-a),{width:a,height:u,x:c,y:s}}(f(t)))}function it(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function ot(t,e){return e.reduce((function(e,n){return e[n]=t,e}),{})}function at(t,e){void 0===e&&(e={}) -var n=e,i=n.placement,o=void 0===i?t.placement:i,c=n.boundary,l=void 0===c?"clippingParents":c,d=n.rootBoundary,p=void 0===d?M:d,y=n.elementContext,v=void 0===y?F:y,m=n.altBoundary,_=void 0!==m&&m,k=n.padding,D=void 0===k?0:k,O=it("number"!=typeof D?D:ot(D,C)),S=v===F?"reference":F,T=t.elements.reference,B=t.rects.popper,P=t.elements[_?S:v],j=function(t,e,n){var r="clippingParents"===e?function(t){var e=g(b(t)),n=["absolute","fixed"].indexOf(h(t).position)>=0&&u(t)?w(t):t -return a(n)?e.filter((function(t){return a(t)&&et(t,n)&&"body"!==s(t)})):[]}(t):[].concat(e),i=[].concat(r,[n]),o=i[0],c=i.reduce((function(e,n){var r=rt(t,n) -return e.top=V(r.top,e.top),e.right=H(r.right,e.right),e.bottom=H(r.bottom,e.bottom),e.left=V(r.left,e.left),e}),rt(t,o)) -return c.width=c.right-c.left,c.height=c.bottom-c.top,c.x=c.left,c.y=c.top,c}(a(P)?P:P.contextElement||f(t.elements.popper),l,p),N=r(T),R=Z({reference:N,element:B,strategy:"absolute",placement:o}),L=nt(Object.assign({},B,R)),I=v===F?L:N,$={top:j.top-I.top+O.top,bottom:I.bottom-j.bottom+O.bottom,left:j.left-I.left+O.left,right:I.right-j.right+O.right},U=t.modifiersData.offset -if(v===F&&U){var z=U[o] -Object.keys($).forEach((function(t){var e=[E,A].indexOf(t)>=0?1:-1,n=[x,A].indexOf(t)>=0?"y":"x" -$[t]+=z[n]*e}))}return $}function ut(t,e,n){return V(t,H(e,n))}function ct(t,e,n){return void 0===n&&(n={x:0,y:0}),{top:t.top-e.height-n.y,right:t.right-e.width+n.x,bottom:t.bottom-e.height+n.y,left:t.left-e.width-n.x}}function st(t){return[x,E,A,k].some((function(e){return t[e]>=0}))}var ft=function(t){void 0===t&&(t={}) -var e=t,n=e.defaultModifiers,r=void 0===n?[]:n,i=e.defaultOptions,o=void 0===i?N:i -return function(t,e,n){void 0===n&&(n=o) -var i,u,c={placement:"bottom",orderedModifiers:[],options:Object.assign({},N,o),modifiersData:{},elements:{reference:t,popper:e},attributes:{},styles:{}},s=[],f=!1,l={state:c,setOptions:function(n){h(),c.options=Object.assign({},o,c.options,n),c.scrollParents={reference:a(t)?g(t):t.contextElement?g(t.contextElement):[],popper:g(e)} -var i,u,f=function(t){var e=j(t) -return P.reduce((function(t,n){return t.concat(e.filter((function(t){return t.phase===n})))}),[])}((i=[].concat(r,c.options.modifiers),u=i.reduce((function(t,e){var n=t[e.name] -return t[e.name]=n?Object.assign({},n,e,{options:Object.assign({},n.options,e.options),data:Object.assign({},n.data,e.data)}):e,t}),{}),Object.keys(u).map((function(t){return u[t]})))) -return c.orderedModifiers=f.filter((function(t){return t.enabled})),c.orderedModifiers.forEach((function(t){var e=t.name,n=t.options,r=void 0===n?{}:n,i=t.effect -if("function"==typeof i){var o=i({state:c,name:e,instance:l,options:r}) -s.push(o||function(){})}})),l.update()},forceUpdate:function(){if(!f){var t=c.elements,e=t.reference,n=t.popper -if(R(e,n)){c.rects={reference:p(e,w(n),"fixed"===c.options.strategy),popper:y(n)},c.reset=!1,c.placement=c.options.placement,c.orderedModifiers.forEach((function(t){return c.modifiersData[t.name]=Object.assign({},t.data)})) -for(var r=0;r=0?-1:1,o="function"==typeof n?n(Object.assign({},e,{placement:t})):n,a=o[0],u=o[1] -return a=a||0,u=(u||0)*i,[k,E].indexOf(r)>=0?{x:u,y:a}:{x:a,y:u}}(n,e.rects,o),t}),{}),u=a[e.placement],c=u.x,s=u.y -null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=c,e.modifiersData.popperOffsets.y+=s),e.modifiersData[r]=a}},{name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,n=t.options,r=t.name -if(!e.modifiersData[r]._skip){for(var i=n.mainAxis,o=void 0===i||i,a=n.altAxis,u=void 0===a||a,c=n.fallbackPlacements,s=n.padding,f=n.boundary,l=n.rootBoundary,h=n.altBoundary,d=n.flipVariations,p=void 0===d||d,y=n.allowedAutoPlacements,b=e.options.placement,v=$(b),g=c||(v!==b&&p?function(t){if($(t)===D)return[] -var e=J(t) -return[tt(t),e,tt(e)]}(b):[J(b)]),m=[b].concat(g).reduce((function(t,n){return t.concat($(n)===D?function(t,e){void 0===e&&(e={}) -var n=e,r=n.placement,i=n.boundary,o=n.rootBoundary,a=n.padding,u=n.flipVariations,c=n.allowedAutoPlacements,s=void 0===c?B:c,f=U(r),l=f?u?T:T.filter((function(t){return U(t)===f})):C,h=l.filter((function(t){return s.indexOf(t)>=0})) -0===h.length&&(h=l) -var d=h.reduce((function(e,n){return e[n]=at(t,{placement:n,boundary:i,rootBoundary:o,padding:a})[$(n)],e}),{}) -return Object.keys(d).sort((function(t,e){return d[t]-d[e]}))}(e,{placement:n,boundary:f,rootBoundary:l,padding:s,flipVariations:p,allowedAutoPlacements:y}):n)}),[]),_=e.rects.reference,w=e.rects.popper,S=new Map,M=!0,F=m[0],P=0;P=0,I=L?"width":"height",z=at(e,{placement:j,boundary:f,rootBoundary:l,altBoundary:h,padding:s}),Z=L?R?E:k:R?A:x -_[I]>w[I]&&(Z=J(Z)) -var q=J(Z),V=[] -if(o&&V.push(z[N]<=0),u&&V.push(z[Z]<=0,z[q]<=0),V.every((function(t){return t}))){F=j,M=!1 -break}S.set(j,V)}if(M)for(var H=function(t){var e=m.find((function(e){var n=S.get(e) -if(n)return n.slice(0,t).every((function(t){return t}))})) -if(e)return F=e,"break"},Y=p?3:1;Y>0&&"break"!==H(Y);Y--);e.placement!==F&&(e.modifiersData[r]._skip=!0,e.placement=F,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}},{name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,n=t.options,r=t.name,i=n.mainAxis,o=void 0===i||i,a=n.altAxis,u=void 0!==a&&a,c=n.boundary,s=n.rootBoundary,f=n.altBoundary,l=n.padding,h=n.tether,d=void 0===h||h,p=n.tetherOffset,b=void 0===p?0:p,v=at(e,{boundary:c,rootBoundary:s,padding:l,altBoundary:f}),g=$(e.placement),m=U(e.placement),_=!m,D=z(g),C="x"===D?"y":"x",S=e.modifiersData.popperOffsets,M=e.rects.reference,F=e.rects.popper,T="function"==typeof b?b(Object.assign({},e.rects,{placement:e.placement})):b,B={x:0,y:0} -if(S){if(o||u){var P="y"===D?x:k,j="y"===D?A:E,N="y"===D?"height":"width",R=S[D],L=S[D]+v[P],I=S[D]-v[j],Z=d?-F[N]/2:0,q=m===O?M[N]:F[N],Y=m===O?-F[N]:-M[N],G=e.elements.arrow,K=d&&G?y(G):{width:0,height:0},W=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},X=W[P],J=W[j],Q=ut(0,M[N],K[N]),tt=_?M[N]/2-Z-Q-X-T:q-Q-X-T,et=_?-M[N]/2+Z+Q+J+T:Y+Q+J+T,nt=e.elements.arrow&&w(e.elements.arrow),rt=nt?"y"===D?nt.clientTop||0:nt.clientLeft||0:0,it=e.modifiersData.offset?e.modifiersData.offset[e.placement][D]:0,ot=S[D]+tt-it-rt,ct=S[D]+et-it -if(o){var st=ut(d?H(L,ot):L,R,d?V(I,ct):I) -S[D]=st,B[D]=st-R}if(u){var ft="x"===D?x:k,lt="x"===D?A:E,ht=S[C],dt=ht+v[ft],pt=ht-v[lt],yt=ut(d?H(dt,ot):dt,ht,d?V(pt,ct):pt) -S[C]=yt,B[C]=yt-ht}}e.modifiersData[r]=B}},requiresIfExists:["offset"]},{name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,n=t.state,r=t.name,i=t.options,o=n.elements.arrow,a=n.modifiersData.popperOffsets,u=$(n.placement),c=z(u),s=[k,E].indexOf(u)>=0?"height":"width" -if(o&&a){var f=function(t,e){return it("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:ot(t,C))}(i.padding,n),l=y(o),h="y"===c?x:k,d="y"===c?A:E,p=n.rects.reference[s]+n.rects.reference[c]-a[c]-n.rects.popper[s],b=a[c]-n.rects.reference[c],v=w(o),g=v?"y"===c?v.clientHeight||0:v.clientWidth||0:0,m=p/2-b/2,_=f[h],D=g-l[s]-f[d],O=g/2-l[s]/2+m,S=ut(_,O,D),M=c -n.modifiersData[r]=((e={})[M]=S,e.centerOffset=S-O,e)}},effect:function(t){var e=t.state,n=t.options.element,r=void 0===n?"[data-popper-arrow]":n -null!=r&&("string"!=typeof r||(r=e.elements.popper.querySelector(r)))&&et(e.elements.popper,r)&&(e.elements.arrow=r)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]},{name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,n=t.name,r=e.rects.reference,i=e.rects.popper,o=e.modifiersData.preventOverflow,a=at(e,{elementContext:"reference"}),u=at(e,{altBoundary:!0}),c=ct(a,r),s=ct(u,i,o),f=st(c),l=st(s) -e.modifiersData[n]={referenceClippingOffsets:c,popperEscapeOffsets:s,isReferenceHidden:f,hasPopperEscaped:l},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":f,"data-popper-escaped":l})}}]}),lt='',ht="tippy-content",dt="tippy-backdrop",pt="tippy-arrow",yt="tippy-svg-arrow",bt={passive:!0,capture:!0} -function vt(t,e,n){if(Array.isArray(t)){var r=t[e] -return null==r?Array.isArray(n)?n[e]:n:r}return t}function gt(t,e){var n={}.toString.call(t) -return 0===n.indexOf("[object")&&n.indexOf(e+"]")>-1}function mt(t,e){return"function"==typeof t?t.apply(void 0,e):t}function _t(t,e){return 0===e?t:function(r){clearTimeout(n),n=setTimeout((function(){t(r)}),e)} -var n}function wt(t,e){var n=Object.assign({},t) -return e.forEach((function(t){delete n[t]})),n}function xt(t){return[].concat(t)}function At(t,e){-1===t.indexOf(e)&&t.push(e)}function Et(t){return t.split("-")[0]}function kt(t){return[].slice.call(t)}function Dt(){return document.createElement("div")}function Ct(t){return["Element","Fragment"].some((function(e){return gt(t,e)}))}function Ot(t){return gt(t,"MouseEvent")}function St(t){return!(!t||!t._tippy||t._tippy.reference!==t)}function Mt(t,e){t.forEach((function(t){t&&(t.style.transitionDuration=e+"ms")}))}function Ft(t,e){t.forEach((function(t){t&&t.setAttribute("data-state",e)}))}function Tt(t){var e,n=xt(t)[0] -return(null==n||null==(e=n.ownerDocument)?void 0:e.body)?n.ownerDocument:document}function Bt(t,e,n){var r=e+"EventListener";["transitionend","webkitTransitionEnd"].forEach((function(e){t[r](e,n)}))}var Pt={isTouch:!1},jt=0 -function Nt(){Pt.isTouch||(Pt.isTouch=!0,window.performance&&document.addEventListener("mousemove",Rt))}function Rt(){var t=performance.now() -t-jt<20&&(Pt.isTouch=!1,document.removeEventListener("mousemove",Rt)),jt=t}function Lt(){var t=document.activeElement -if(St(t)){var e=t._tippy -t.blur&&!e.state.isVisible&&t.blur()}}var It="undefined"!=typeof window&&"undefined"!=typeof document?navigator.userAgent:"",$t=/MSIE |Trident\//.test(It),Ut=Object.assign({appendTo:function(){return document.body},aria:{content:"auto",expanded:"auto"},delay:0,duration:[300,250],getReferenceClientRect:null,hideOnClick:!0,ignoreAttributes:!1,interactive:!1,interactiveBorder:2,interactiveDebounce:0,moveTransition:"",offset:[0,10],onAfterUpdate:function(){},onBeforeUpdate:function(){},onCreate:function(){},onDestroy:function(){},onHidden:function(){},onHide:function(){},onMount:function(){},onShow:function(){},onShown:function(){},onTrigger:function(){},onUntrigger:function(){},onClickOutside:function(){},placement:"top",plugins:[],popperOptions:{},render:null,showOnCreate:!1,touch:!0,trigger:"mouseenter focus",triggerTarget:null},{animateFill:!1,followCursor:!1,inlinePositioning:!1,sticky:!1},{},{allowHTML:!1,animation:"fade",arrow:!0,content:"",inertia:!1,maxWidth:350,role:"tooltip",theme:"",zIndex:9999}),zt=Object.keys(Ut) -function Zt(t){var e=(t.plugins||[]).reduce((function(e,n){var r=n.name,i=n.defaultValue -return r&&(e[r]=void 0!==t[r]?t[r]:i),e}),{}) -return Object.assign({},t,{},e)}function qt(t,e){var n=Object.assign({},e,{content:mt(e.content,[t])},e.ignoreAttributes?{}:function(t,e){return(e?Object.keys(Zt(Object.assign({},Ut,{plugins:e}))):zt).reduce((function(e,n){var r=(t.getAttribute("data-tippy-"+n)||"").trim() -if(!r)return e -if("content"===n)e[n]=r -else try{e[n]=JSON.parse(r)}catch(t){e[n]=r}return e}),{})}(t,e.plugins)) -return n.aria=Object.assign({},Ut.aria,{},n.aria),n.aria={expanded:"auto"===n.aria.expanded?e.interactive:n.aria.expanded,content:"auto"===n.aria.content?e.interactive?null:"describedby":n.aria.content},n}function Vt(t,e){t.innerHTML=e}function Ht(t){var e=Dt() -return!0===t?e.className=pt:(e.className=yt,Ct(t)?e.appendChild(t):Vt(e,t)),e}function Yt(t,e){Ct(e.content)?(Vt(t,""),t.appendChild(e.content)):"function"!=typeof e.content&&(e.allowHTML?Vt(t,e.content):t.textContent=e.content)}function Gt(t){var e=t.firstElementChild,n=kt(e.children) -return{box:e,content:n.find((function(t){return t.classList.contains(ht)})),arrow:n.find((function(t){return t.classList.contains(pt)||t.classList.contains(yt)})),backdrop:n.find((function(t){return t.classList.contains(dt)}))}}function Kt(t){var e=Dt(),n=Dt() -n.className="tippy-box",n.setAttribute("data-state","hidden"),n.setAttribute("tabindex","-1") -var r=Dt() -function i(n,r){var i=Gt(e),o=i.box,a=i.content,u=i.arrow -r.theme?o.setAttribute("data-theme",r.theme):o.removeAttribute("data-theme"),"string"==typeof r.animation?o.setAttribute("data-animation",r.animation):o.removeAttribute("data-animation"),r.inertia?o.setAttribute("data-inertia",""):o.removeAttribute("data-inertia"),o.style.maxWidth="number"==typeof r.maxWidth?r.maxWidth+"px":r.maxWidth,r.role?o.setAttribute("role",r.role):o.removeAttribute("role"),n.content===r.content&&n.allowHTML===r.allowHTML||Yt(a,t.props),r.arrow?u?n.arrow!==r.arrow&&(o.removeChild(u),o.appendChild(Ht(r.arrow))):o.appendChild(Ht(r.arrow)):u&&o.removeChild(u)}return r.className=ht,r.setAttribute("data-state","hidden"),Yt(r,t.props),e.appendChild(n),n.appendChild(r),i(t.props,t.props),{popper:e,onUpdate:i}}Kt.$$tippy=!0 -var Wt=1,Xt=[],Jt=[] -function Qt(t,e){void 0===e&&(e={}) -var n=Ut.plugins.concat(e.plugins||[]) -document.addEventListener("touchstart",Nt,bt),window.addEventListener("blur",Lt) -var r,i=Object.assign({},e,{plugins:n}),o=(r=t,Ct(r)?[r]:function(t){return gt(t,"NodeList")}(r)?kt(r):Array.isArray(r)?r:kt(document.querySelectorAll(r))).reduce((function(t,e){var n=e&&function(t,e){var n,r,i,o,a,u,c,s,f,l=qt(t,Object.assign({},Ut,{},Zt((n=e,Object.keys(n).reduce((function(t,e){return void 0!==n[e]&&(t[e]=n[e]),t}),{}))))),h=!1,d=!1,p=!1,y=!1,b=[],v=_t(G,l.interactiveDebounce),g=Wt++,m=(f=l.plugins).filter((function(t,e){return f.indexOf(t)===e})),_={id:g,reference:t,popper:Dt(),popperInstance:null,props:l,state:{isEnabled:!0,isVisible:!1,isDestroyed:!1,isMounted:!1,isShown:!1},plugins:m,clearDelayTimeouts:function(){clearTimeout(r),clearTimeout(i),cancelAnimationFrame(o)},setProps:function(e){if(!_.state.isDestroyed){P("onBeforeUpdate",[_,e]),H() -var n=_.props,r=qt(t,Object.assign({},_.props,{},e,{ignoreAttributes:!0})) -_.props=r,V(),n.interactiveDebounce!==r.interactiveDebounce&&(R(),v=_t(G,r.interactiveDebounce)),n.triggerTarget&&!r.triggerTarget?xt(n.triggerTarget).forEach((function(t){t.removeAttribute("aria-expanded")})):r.triggerTarget&&t.removeAttribute("aria-expanded"),N(),B(),A&&A(n,r),_.popperInstance&&(J(),tt().forEach((function(t){requestAnimationFrame(t._tippy.popperInstance.forceUpdate)}))),P("onAfterUpdate",[_,e])}},setContent:function(t){_.setProps({content:t})},show:function(){var t=_.state.isVisible,e=_.state.isDestroyed,n=!_.state.isEnabled,r=Pt.isTouch&&!_.props.touch,i=vt(_.props.duration,0,Ut.duration) -if(!(t||e||n||r||S().hasAttribute("disabled")||(P("onShow",[_],!1),!1===_.props.onShow(_)))){if(_.state.isVisible=!0,O()&&(x.style.visibility="visible"),B(),U(),_.state.isMounted||(x.style.transition="none"),O()){var o=F() -Mt([o.box,o.content],0)}var a,u,s -c=function(){var t -if(_.state.isVisible&&!y){if(y=!0,x.offsetHeight,x.style.transition=_.props.moveTransition,O()&&_.props.animation){var e=F(),n=e.box,r=e.content -Mt([n,r],i),Ft([n,r],"visible")}j(),N(),At(Jt,_),null==(t=_.popperInstance)||t.forceUpdate(),_.state.isMounted=!0,P("onMount",[_]),_.props.animation&&O()&&function(t,e){Z(t,(function(){_.state.isShown=!0,P("onShown",[_])}))}(i)}},u=_.props.appendTo,s=S(),(a=_.props.interactive&&u===Ut.appendTo||"parent"===u?s.parentNode:mt(u,[s])).contains(x)||a.appendChild(x),J()}},hide:function(){var t=!_.state.isVisible,e=_.state.isDestroyed,n=!_.state.isEnabled,r=vt(_.props.duration,1,Ut.duration) -if(!(t||e||n)&&(P("onHide",[_],!1),!1!==_.props.onHide(_))){if(_.state.isVisible=!1,_.state.isShown=!1,y=!1,h=!1,O()&&(x.style.visibility="hidden"),R(),z(),B(),O()){var i=F(),o=i.box,a=i.content -_.props.animation&&(Mt([o,a],r),Ft([o,a],"hidden"))}j(),N(),_.props.animation?O()&&function(t,e){Z(t,(function(){!_.state.isVisible&&x.parentNode&&x.parentNode.contains(x)&&e()}))}(r,_.unmount):_.unmount()}},hideWithInteractivity:function(t){M().addEventListener("mousemove",v),At(Xt,v),v(t)},enable:function(){_.state.isEnabled=!0},disable:function(){_.hide(),_.state.isEnabled=!1},unmount:function(){_.state.isVisible&&_.hide(),_.state.isMounted&&(Q(),tt().forEach((function(t){t._tippy.unmount()})),x.parentNode&&x.parentNode.removeChild(x),Jt=Jt.filter((function(t){return t!==_})),_.state.isMounted=!1,P("onHidden",[_]))},destroy:function(){_.state.isDestroyed||(_.clearDelayTimeouts(),_.unmount(),H(),delete t._tippy,_.state.isDestroyed=!0,P("onDestroy",[_]))}} -if(!l.render)return _ -var w=l.render(_),x=w.popper,A=w.onUpdate -x.setAttribute("data-tippy-root",""),x.id="tippy-"+_.id,_.popper=x,t._tippy=_,x._tippy=_ -var E=m.map((function(t){return t.fn(_)})),k=t.hasAttribute("aria-expanded") -return V(),N(),B(),P("onCreate",[_]),l.showOnCreate&&et(),x.addEventListener("mouseenter",(function(){_.props.interactive&&_.state.isVisible&&_.clearDelayTimeouts()})),x.addEventListener("mouseleave",(function(t){_.props.interactive&&_.props.trigger.indexOf("mouseenter")>=0&&(M().addEventListener("mousemove",v),v(t))})),_ -function D(){var t=_.props.touch -return Array.isArray(t)?t:[t,0]}function C(){return"hold"===D()[0]}function O(){var t -return!!(null==(t=_.props.render)?void 0:t.$$tippy)}function S(){return s||t}function M(){var t=S().parentNode -return t?Tt(t):document}function F(){return Gt(x)}function T(t){return _.state.isMounted&&!_.state.isVisible||Pt.isTouch||a&&"focus"===a.type?0:vt(_.props.delay,t?0:1,Ut.delay)}function B(){x.style.pointerEvents=_.props.interactive&&_.state.isVisible?"":"none",x.style.zIndex=""+_.props.zIndex}function P(t,e,n){var r -void 0===n&&(n=!0),E.forEach((function(n){n[t]&&n[t].apply(void 0,e)})),n&&(r=_.props)[t].apply(r,e)}function j(){var e=_.props.aria -if(e.content){var n="aria-"+e.content,r=x.id -xt(_.props.triggerTarget||t).forEach((function(t){var e=t.getAttribute(n) -if(_.state.isVisible)t.setAttribute(n,e?e+" "+r:r) -else{var i=e&&e.replace(r,"").trim() -i?t.setAttribute(n,i):t.removeAttribute(n)}}))}}function N(){!k&&_.props.aria.expanded&&xt(_.props.triggerTarget||t).forEach((function(t){_.props.interactive?t.setAttribute("aria-expanded",_.state.isVisible&&t===S()?"true":"false"):t.removeAttribute("aria-expanded")}))}function R(){M().removeEventListener("mousemove",v),Xt=Xt.filter((function(t){return t!==v}))}function L(t){if(!(Pt.isTouch&&(p||"mousedown"===t.type)||_.props.interactive&&x.contains(t.target))){if(S().contains(t.target)){if(Pt.isTouch)return -if(_.state.isVisible&&_.props.trigger.indexOf("click")>=0)return}else P("onClickOutside",[_,t]) -!0===_.props.hideOnClick&&(_.clearDelayTimeouts(),_.hide(),d=!0,setTimeout((function(){d=!1})),_.state.isMounted||z())}}function I(){p=!0}function $(){p=!1}function U(){var t=M() -t.addEventListener("mousedown",L,!0),t.addEventListener("touchend",L,bt),t.addEventListener("touchstart",$,bt),t.addEventListener("touchmove",I,bt)}function z(){var t=M() -t.removeEventListener("mousedown",L,!0),t.removeEventListener("touchend",L,bt),t.removeEventListener("touchstart",$,bt),t.removeEventListener("touchmove",I,bt)}function Z(t,e){var n=F().box -function r(t){t.target===n&&(Bt(n,"remove",r),e())}if(0===t)return e() -Bt(n,"remove",u),Bt(n,"add",r),u=r}function q(e,n,r){void 0===r&&(r=!1),xt(_.props.triggerTarget||t).forEach((function(t){t.addEventListener(e,n,r),b.push({node:t,eventType:e,handler:n,options:r})}))}function V(){var t -C()&&(q("touchstart",Y,{passive:!0}),q("touchend",K,{passive:!0})),(t=_.props.trigger,t.split(/\s+/).filter(Boolean)).forEach((function(t){if("manual"!==t)switch(q(t,Y),t){case"mouseenter":q("mouseleave",K) -break -case"focus":q($t?"focusout":"blur",W) -break -case"focusin":q("focusout",W)}}))}function H(){b.forEach((function(t){var e=t.node,n=t.eventType,r=t.handler,i=t.options -e.removeEventListener(n,r,i)})),b=[]}function Y(t){var e,n=!1 -if(_.state.isEnabled&&!X(t)&&!d){var r="focus"===(null==(e=a)?void 0:e.type) -a=t,s=t.currentTarget,N(),!_.state.isVisible&&Ot(t)&&Xt.forEach((function(e){return e(t)})),"click"===t.type&&(_.props.trigger.indexOf("mouseenter")<0||h)&&!1!==_.props.hideOnClick&&_.state.isVisible?n=!0:et(t),"click"===t.type&&(h=!n),n&&!r&&nt(t)}}function G(t){var e=t.target,n=S().contains(e)||x.contains(e) -if("mousemove"!==t.type||!n){var r=tt().concat(x).map((function(t){var e,n=null==(e=t._tippy.popperInstance)?void 0:e.state -return n?{popperRect:t.getBoundingClientRect(),popperState:n,props:l}:null})).filter(Boolean);(function(t,e){var n=e.clientX,r=e.clientY -return t.every((function(t){var e=t.popperRect,i=t.popperState,o=t.props.interactiveBorder,a=Et(i.placement),u=i.modifiersData.offset -if(!u)return!0 -var c="bottom"===a?u.top.y:0,s="top"===a?u.bottom.y:0,f="right"===a?u.left.x:0,l="left"===a?u.right.x:0,h=e.top-r+c>o,d=r-e.bottom-s>o,p=e.left-n+f>o,y=n-e.right-l>o -return h||d||p||y}))})(r,t)&&(R(),nt(t))}}function K(t){X(t)||_.props.trigger.indexOf("click")>=0&&h||(_.props.interactive?_.hideWithInteractivity(t):nt(t))}function W(t){_.props.trigger.indexOf("focusin")<0&&t.target!==S()||_.props.interactive&&t.relatedTarget&&x.contains(t.relatedTarget)||nt(t)}function X(t){return!!Pt.isTouch&&C()!==t.type.indexOf("touch")>=0}function J(){Q() -var e=_.props,n=e.popperOptions,r=e.placement,i=e.offset,o=e.getReferenceClientRect,a=e.moveTransition,u=O()?Gt(x).arrow:null,s=o?{getBoundingClientRect:o,contextElement:o.contextElement||S()}:t,f=[{name:"offset",options:{offset:i}},{name:"preventOverflow",options:{padding:{top:2,bottom:2,left:5,right:5}}},{name:"flip",options:{padding:5}},{name:"computeStyles",options:{adaptive:!a}},{name:"$$tippy",enabled:!0,phase:"beforeWrite",requires:["computeStyles"],fn:function(t){var e=t.state -if(O()){var n=F().box;["placement","reference-hidden","escaped"].forEach((function(t){"placement"===t?n.setAttribute("data-placement",e.placement):e.attributes.popper["data-popper-"+t]?n.setAttribute("data-"+t,""):n.removeAttribute("data-"+t)})),e.attributes.popper={}}}}] -O()&&u&&f.push({name:"arrow",options:{element:u,padding:3}}),f.push.apply(f,(null==n?void 0:n.modifiers)||[]),_.popperInstance=ft(s,x,Object.assign({},n,{placement:r,onFirstUpdate:c,modifiers:f}))}function Q(){_.popperInstance&&(_.popperInstance.destroy(),_.popperInstance=null)}function tt(){return kt(x.querySelectorAll("[data-tippy-root]"))}function et(t){_.clearDelayTimeouts(),t&&P("onTrigger",[_,t]),U() -var e=T(!0),n=D(),i=n[0],o=n[1] -Pt.isTouch&&"hold"===i&&o&&(e=o),e?r=setTimeout((function(){_.show()}),e):_.show()}function nt(t){if(_.clearDelayTimeouts(),P("onUntrigger",[_,t]),_.state.isVisible){if(!(_.props.trigger.indexOf("mouseenter")>=0&&_.props.trigger.indexOf("click")>=0&&["mouseleave","mousemove"].indexOf(t.type)>=0&&h)){var e=T(!1) -e?i=setTimeout((function(){_.state.isVisible&&_.hide()}),e):o=requestAnimationFrame((function(){_.hide()}))}}else z()}}(e,i) -return n&&t.push(n),t}),[]) -return Ct(t)?o[0]:o}Qt.defaultProps=Ut,Qt.setDefaultProps=function(t){Object.keys(t).forEach((function(e){Ut[e]=t[e]}))},Qt.currentInput=Pt -var te=function(t){var e=void 0===t?{}:t,n=e.exclude,r=e.duration -Jt.forEach((function(t){var e=!1 -if(n&&(e=St(n)?t.reference===n:t.popper===n.popper),!e){var i=t.props.duration -t.setProps({duration:r}),t.hide(),t.state.isDestroyed||t.setProps({duration:i})}}))},ee=Object.assign({},W,{effect:function(t){var e=t.state,n={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}} -Object.assign(e.elements.popper.style,n.popper),e.styles=n,e.elements.arrow&&Object.assign(e.elements.arrow.style,n.arrow)}}),ne=function(t,e){var n -void 0===e&&(e={}) -var r,i=t,o=[],a=e.overrides,u=[],c=!1 -function s(){o=i.map((function(t){return t.reference}))}function f(t){i.forEach((function(e){t?e.enable():e.disable()}))}function l(t){return i.map((function(e){var n=e.setProps -return e.setProps=function(i){n(i),e.reference===r&&t.setProps(i)},function(){e.setProps=n}}))}function h(t,e){var n=o.indexOf(e) -if(e!==r){r=e -var u=(a||[]).concat("content").reduce((function(t,e){return t[e]=i[n].props[e],t}),{}) -t.setProps(Object.assign({},u,{getReferenceClientRect:"function"==typeof u.getReferenceClientRect?u.getReferenceClientRect:function(){return e.getBoundingClientRect()}}))}}f(!1),s() -var d={fn:function(){return{onDestroy:function(){f(!0)},onHidden:function(){r=null},onClickOutside:function(t){t.props.showOnCreate&&!c&&(c=!0,r=null)},onShow:function(t){t.props.showOnCreate&&!c&&(c=!0,h(t,o[0]))},onTrigger:function(t,e){h(t,e.currentTarget)}}}},p=Qt(Dt(),Object.assign({},wt(e,["overrides"]),{plugins:[d].concat(e.plugins||[]),triggerTarget:o,popperOptions:Object.assign({},e.popperOptions,{modifiers:[].concat((null==(n=e.popperOptions)?void 0:n.modifiers)||[],[ee])})})),y=p.show -p.show=function(t){if(y(),!r&&null==t)return h(p,o[0]) -if(!r||null!=t){if("number"==typeof t)return o[t]&&h(p,o[t]) -if(i.includes(t)){var e=t.reference -return h(p,e)}return o.includes(t)?h(p,t):void 0}},p.showNext=function(){var t=o[0] -if(!r)return p.show(0) -var e=o.indexOf(r) -p.show(o[e+1]||t)},p.showPrevious=function(){var t=o[o.length-1] -if(!r)return p.show(t) -var e=o.indexOf(r),n=o[e-1]||t -p.show(n)} -var b=p.setProps -return p.setProps=function(t){a=t.overrides||a,b(t)},p.setInstances=function(t){f(!0),u.forEach((function(t){return t()})),i=t,f(!1),s(),l(p),p.setProps({triggerTarget:o})},u=l(p),p},re={mouseover:"mouseenter",focusin:"focus",click:"click"} -function ie(t,e){var n=[],r=[],i=!1,o=e.target,a=wt(e,["target"]),u=Object.assign({},a,{trigger:"manual",touch:!1}),c=Object.assign({},a,{showOnCreate:!0}),s=Qt(t,u) -function f(t){if(t.target&&!i){var n=t.target.closest(o) -if(n){var a=n.getAttribute("data-tippy-trigger")||e.trigger||Ut.trigger -if(!n._tippy&&!("touchstart"===t.type&&"boolean"==typeof c.touch||"touchstart"!==t.type&&a.indexOf(re[t.type])<0)){var u=Qt(n,c) -u&&(r=r.concat(u))}}}}function l(t,e,r,i){void 0===i&&(i=!1),t.addEventListener(e,r,i),n.push({node:t,eventType:e,handler:r,options:i})}return xt(s).forEach((function(t){var e=t.destroy,o=t.enable,a=t.disable -t.destroy=function(t){void 0===t&&(t=!0),t&&r.forEach((function(t){t.destroy()})),r=[],n.forEach((function(t){var e=t.node,n=t.eventType,r=t.handler,i=t.options -e.removeEventListener(n,r,i)})),n=[],e()},t.enable=function(){o(),r.forEach((function(t){return t.enable()})),i=!1},t.disable=function(){a(),r.forEach((function(t){return t.disable()})),i=!0},function(t){var e=t.reference -l(e,"touchstart",f,bt),l(e,"mouseover",f),l(e,"focusin",f),l(e,"click",f)}(t)})),s}var oe={name:"animateFill",defaultValue:!1,fn:function(t){var e -if(!(null==(e=t.props.render)?void 0:e.$$tippy))return{} -var n=Gt(t.popper),r=n.box,i=n.content,o=t.props.animateFill?function(){var t=Dt() -return t.className=dt,Ft([t],"hidden"),t}():null -return{onCreate:function(){o&&(r.insertBefore(o,r.firstElementChild),r.setAttribute("data-animatefill",""),r.style.overflow="hidden",t.setProps({arrow:!1,animation:"shift-away"}))},onMount:function(){if(o){var t=r.style.transitionDuration,e=Number(t.replace("ms","")) -i.style.transitionDelay=Math.round(e/10)+"ms",o.style.transitionDuration=t,Ft([o],"visible")}},onShow:function(){o&&(o.style.transitionDuration="0ms")},onHide:function(){o&&Ft([o],"hidden")}}}},ae={clientX:0,clientY:0},ue=[] -function ce(t){var e=t.clientX,n=t.clientY -ae={clientX:e,clientY:n}}var se={name:"followCursor",defaultValue:!1,fn:function(t){var e=t.reference,n=Tt(t.props.triggerTarget||e),r=!1,i=!1,o=!0,a=t.props -function u(){return"initial"===t.props.followCursor&&t.state.isVisible}function c(){n.addEventListener("mousemove",l)}function s(){n.removeEventListener("mousemove",l)}function f(){r=!0,t.setProps({getReferenceClientRect:null}),r=!1}function l(n){var r=!n.target||e.contains(n.target),i=t.props.followCursor,o=n.clientX,a=n.clientY,u=e.getBoundingClientRect(),c=o-u.left,s=a-u.top -!r&&t.props.interactive||t.setProps({getReferenceClientRect:function(){var t=e.getBoundingClientRect(),n=o,r=a -"initial"===i&&(n=t.left+c,r=t.top+s) -var u="horizontal"===i?t.top:r,f="vertical"===i?t.right:n,l="horizontal"===i?t.bottom:r,h="vertical"===i?t.left:n -return{width:f-h,height:l-u,top:u,right:f,bottom:l,left:h}}})}function h(){t.props.followCursor&&(ue.push({instance:t,doc:n}),function(t){t.addEventListener("mousemove",ce)}(n))}function d(){0===(ue=ue.filter((function(e){return e.instance!==t}))).filter((function(t){return t.doc===n})).length&&function(t){t.removeEventListener("mousemove",ce)}(n)}return{onCreate:h,onDestroy:d,onBeforeUpdate:function(){a=t.props},onAfterUpdate:function(e,n){var o=n.followCursor -r||void 0!==o&&a.followCursor!==o&&(d(),o?(h(),!t.state.isMounted||i||u()||c()):(s(),f()))},onMount:function(){t.props.followCursor&&!i&&(o&&(l(ae),o=!1),u()||c())},onTrigger:function(t,e){Ot(e)&&(ae={clientX:e.clientX,clientY:e.clientY}),i="focus"===e.type},onHidden:function(){t.props.followCursor&&(f(),s(),o=!0)}}}},fe={name:"inlinePositioning",defaultValue:!1,fn:function(t){var e,n=t.reference,r=-1,i=!1,o={name:"tippyInlinePositioning",enabled:!0,phase:"afterWrite",fn:function(i){var o=i.state -t.props.inlinePositioning&&(e!==o.placement&&t.setProps({getReferenceClientRect:function(){return function(t){return function(t,e,n,r){if(n.length<2||null===t)return e -if(2===n.length&&r>=0&&n[0].left>n[1].right)return n[r]||e -switch(t){case"top":case"bottom":var i=n[0],o=n[n.length-1],a="top"===t,u=i.top,c=o.bottom,s=a?i.left:o.left,f=a?i.right:o.right -return{top:u,bottom:c,left:s,right:f,width:f-s,height:c-u} -case"left":case"right":var l=Math.min.apply(Math,n.map((function(t){return t.left}))),h=Math.max.apply(Math,n.map((function(t){return t.right}))),d=n.filter((function(e){return"left"===t?e.left===l:e.right===h})),p=d[0].top,y=d[d.length-1].bottom -return{top:p,bottom:y,left:l,right:h,width:h-l,height:y-p} -default:return e}}(Et(t),n.getBoundingClientRect(),kt(n.getClientRects()),r)}(o.placement)}}),e=o.placement)}} -function a(){var e -i||(e=function(t,e){var n -return{popperOptions:Object.assign({},t.popperOptions,{modifiers:[].concat(((null==(n=t.popperOptions)?void 0:n.modifiers)||[]).filter((function(t){return t.name!==e.name})),[e])})}}(t.props,o),i=!0,t.setProps(e),i=!1)}return{onCreate:a,onAfterUpdate:a,onTrigger:function(e,n){if(Ot(n)){var i=kt(t.reference.getClientRects()),o=i.find((function(t){return t.left-2<=n.clientX&&t.right+2>=n.clientX&&t.top-2<=n.clientY&&t.bottom+2>=n.clientY})) -r=i.indexOf(o)}},onUntrigger:function(){r=-1}}}},le={name:"sticky",defaultValue:!1,fn:function(t){var e=t.reference,n=t.popper -function r(e){return!0===t.props.sticky||t.props.sticky===e}var i=null,o=null -function a(){var u=r("reference")?(t.popperInstance?t.popperInstance.state.elements.reference:e).getBoundingClientRect():null,c=r("popper")?n.getBoundingClientRect():null;(u&&he(i,u)||c&&he(o,c))&&t.popperInstance&&t.popperInstance.update(),i=u,o=c,t.state.isMounted&&requestAnimationFrame(a)}return{onMount:function(){t.props.sticky&&a()}}}} -function he(t,e){return!t||!e||t.top!==e.top||t.right!==e.right||t.bottom!==e.bottom||t.left!==e.left}Qt.setDefaultProps({render:Kt}) -const de=Qt},2247:(t,e,n)=>{"use strict" -n.d(e,{ZT:()=>i,ev:()=>a,pi:()=>o}) -var r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},r(t,e)} -function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null") -function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}var o=function(){return o=Object.assign||function(t){for(var e,n=1,r=arguments.length;n{"use strict" -function r(t){return null!==t&&"object"==typeof t&&!(t instanceof Date||t instanceof RegExp)&&!Array.isArray(t)}n.r(e),n.d(e,{BufferedChangeset:()=>vt,CHANGESET:()=>F,Change:()=>o,Changeset:()=>_t,Err:()=>c,ValidatedChangeset:()=>mt,buildOldValues:()=>q,changeset:()=>gt,getChangeValue:()=>u,getDeep:()=>y,getKeyValues:()=>l,isChange:()=>a,isChangeset:()=>T,isObject:()=>r,isPromise:()=>d,keyInObject:()=>B,lookupValidator:()=>b,mergeDeep:()=>J,mergeNested:()=>Z,normalizeObject:()=>E,objectWithout:()=>rt,propertyIsUnsafe:()=>K,pureAssign:()=>D,setDeep:()=>U,take:()=>it}) -var i=Symbol("__value__"),o=function(t){this[i]=t},a=function(t){return r(t)&&i in t} -function u(t){if(a(t))return t[i]}var c=function(t,e){this.value=t,this.validation=e},s=function(t,e){var n="function"==typeof Symbol&&t[Symbol.iterator] -if(!n)return t -var r,i,o=n.call(t),a=[] -try{for(;(void 0===e||e-- >0)&&!(r=o.next()).done;)a.push(r.value)}catch(t){i={error:t}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return a},f=function(){for(var t=[],e=0;e0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0 -continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0)&&!(r=o.next()).done;)a.push(r.value)}catch(t){i={error:t}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return a},g=function(){for(var t=[],e=0;e=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}} -throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},A=function(){return A=Object.assign||function(t){for(var e,n=1,r=arguments.length;n0)&&!(r=o.next()).done;)a.push(r.value)}catch(t){i={error:t}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return a},O=function(){for(var t=[],e=0;e=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}} -throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}(n),c=u.next();!c.done;c=u.next()){var s=c.value,f=t[s] -"function"==typeof f.validate?e[s]=f:r(f)?S(f,e,Object.keys(f),O(i,[s])):("function"==typeof f||Array.isArray(f)&&f.every((function(t){return"function"==typeof t||"function"==typeof t.validate})))&&(e[O(i,[s]).join(".")]=f)}}catch(t){o={error:t}}finally{try{c&&!c.done&&(a=u.return)&&a.call(u)}finally{if(o)throw o.error}}return e}function M(t){return t?S(t,{},Object.keys(t)):{}}var F="__CHANGESET__" -function T(t){return t&&t.__changeset__===F}function B(t,e){var n=function(t,e){var n="function"==typeof Symbol&&t[Symbol.iterator] -if(!n)return t -var r,i,o=n.call(t),a=[] -try{for(;(void 0===e||e-- >0)&&!(r=o.next()).done;)a.push(r.value)}catch(t){i={error:t}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return a}(e.split(".")),r=n[0],i=n.slice(1) -if(!r||!(r in t))return!1 -if(!i.length)return r in t -var o=t[r] -return null!==o&&"object"==typeof o&&B(t[r],i.join("."))}var P=function(t,e){var n="function"==typeof Symbol&&t[Symbol.iterator] -if(!n)return t -var r,i,o=n.call(t),a=[] -try{for(;(void 0===e||e-- >0)&&!(r=o.next()).done;)a.push(r.value)}catch(t){i={error:t}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return a} -function j(t){return!!t&&Object.keys(t).every((function(t){return Number.isInteger(parseInt(t,10))}))}function N(t){return t.reduce((function(t,e,n){return t[n]=e,t}),{})}function R(t){var e,n,r=[] -try{for(var i=function(t){var e="function"==typeof Symbol&&Symbol.iterator,n=e&&t[e],r=0 -if(n)return n.call(t) -if(t&&"number"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}} -throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}(Object.entries(t)),o=i.next();!o.done;o=i.next()){var a=P(o.value,2),u=a[0],c=a[1] -r[parseInt(u,10)]=c}}catch(t){e={error:t}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(e)throw e.error}}return r}var L=function(){return L=Object.assign||function(t){for(var e,n=1,r=arguments.length;n0)&&!(r=o.next()).done;)a.push(r.value)}catch(t){i={error:t}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return a}(e.slice(-1),1)[0],r=Object.keys(t).filter((function(t){return t!==n})).reduce((function(e,n){return e[n]=t[n],e}),Object.create(null)) -return L({},r)}function $(t){return"__proto__"!==t&&"constructor"!==t&&"prototype"!==t}function U(t,e,n,i){void 0===i&&(i={safeSet:void 0,safeGet:void 0}) -var c=function(t){return t.split(".")}(e).filter($),s=t -if(i.safeSet=i.safeSet||function(t,e,n){return t[e]=n},i.safeGet=i.safeGet||function(t,e){return t?t[e]:t},1===c.length)return i.safeSet(t,e,n),t -for(var f=0;f=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}} -throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}(e),u=a.next();!u.done;u=a.next()){var c=u.value -o[c.key]=n(t,c.key)}}catch(t){r={error:t}}finally{try{u&&!u.done&&(i=a.return)&&i.call(a)}finally{if(r)throw r.error}}return o}var V=function(t,e){var n="function"==typeof Symbol&&t[Symbol.iterator] -if(!n)return t -var r,i,o=n.call(t),a=[] -try{for(;(void 0===e||e-- >0)&&!(r=o.next()).done;)a.push(r.value)}catch(t){i={error:t}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return a},H=function(){for(var t=[],e=0;e0)for(r in i){var o=i[r] -n.safeSet(t,r,o)}}}else{if(!G(t,r)||!function(t){return!!t&&"object"==typeof t}(s=e[r])||function(t){var e=Object.prototype.toString.call(t) -return"[object RegExp]"===e||"[object Date]"===e}(s)||a(e[r])){var c=e[r] -return c&&a(c)?n.safeSet(t,r,u(c)):n.safeSet(t,r,E(c))}n.safeSet(t,r,J(n.safeGet(t,r),n.safeGet(e,r),n))}var s})),t}function J(t,e,n){void 0===n&&(n={safeGet:void 0,safeSet:void 0,propertyIsUnsafe:void 0,getKeys:void 0}),n.getKeys=n.getKeys||Y,n.propertyIsUnsafe=n.propertyIsUnsafe||K,n.safeGet=n.safeGet||function(t,e){return t[e]},n.safeSet=n.safeSet||function(t,e,n){return t[e]=n} -var r=Array.isArray(e),i=Array.isArray(t) -if(r===i)return r||null==t?e:X(t,e,n) -var o=j(e) -return i&&o?R(X(N(t),e,n)):e}var Q=function(){return Q=Object.assign||function(t){for(var e,n=1,r=arguments.length;n0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0 -continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0)&&!(r=o.next()).done;)a.push(r.value)}catch(t){i={error:t}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return a},st=function(){for(var t=[],e=0;e0)||r.find((function(e){return t.match(e)}))){var i=this._content,o=this.safeGet(i,t) -if(n.skipValidate)return this._setProperty({key:t,value:e,oldValue:o}),void this._handleValidation(!0,{key:t,value:e}) -this._setProperty({key:t,value:e,oldValue:o}),this._validateKey(t,e)}},Object.defineProperty(t.prototype,Symbol.toStringTag,{get:function(){return"changeset:"+D(this._content,{}).toString()},enumerable:!1,configurable:!0}),t.prototype.toString=function(){return"changeset:"+D(this._content,{}).toString()},t.prototype.prepare=function(t){var e=t(this._bareChanges) -if(this.isObject(e),this.isObject(e)){var n=ft(e).reduce((function(t,n){return t[n]=new o(e[n]),t}),{}) -this._changes=n}return this},t.prototype.execute=function(){var t -if(this.isValid&&this.isDirty){var e=this._content,n=this._changes -t=q(e,this.changes,this.getDeep),this._content=this.mergeDeep(e,n)}return this.trigger("execute"),this._changes={},this._previousContent=t,this},t.prototype.unexecute=function(){return this._previousContent&&(this._content=this.mergeDeep(this._content,this._previousContent,{safeGet:this.safeGet,safeSet:this.safeSet})),this},t.prototype.save=function(t){return at(this,void 0,void 0,(function(){var e,n,r,i -return ut(this,(function(o){switch(o.label){case 0:e=this._content,n=Promise.resolve(this),this.execute(),"function"==typeof e.save?n=e.save(t):"function"==typeof this.safeGet(e,"save")&&(r=this.maybeUnwrapProxy(e).save())&&(n=r),o.label=1 -case 1:return o.trys.push([1,3,,4]),[4,n] -case 2:return i=o.sent(),this.rollback(),[2,i] -case 3:throw o.sent() -case 4:return[2]}}))}))},t.prototype.merge=function(t){var e=this._content -if(T(t),t._content,this.isPristine&&t.isPristine)return this -var n=this._changes,r=t._changes,i=this._errors,o=t._errors,a=new mt(e,this._validator),u=rt(ft(r),i),c=rt(ft(o),n),s=Z(u,o),f=Z(c,r) -return a._errors=s,a._changes=f,a._notifyVirtualProperties(),a},t.prototype.rollback=function(){var t=this._rollbackKeys() -return this._changes={},this._errors={},this._errorsCache={},this._notifyVirtualProperties(t),this.trigger("afterRollback"),this},t.prototype.rollbackInvalid=function(t){var e=this,n=ft(this._errors) -return t?(this._notifyVirtualProperties([t]),this._errors=this._deleteKey(ht,t),this._errorsCache=this._errors,n.indexOf(t)>-1&&(this._changes=this._deleteKey(lt,t))):(this._notifyVirtualProperties(),this._errors={},this._errorsCache=this._errors,n.forEach((function(t){e._changes=e._deleteKey(lt,t)}))),this},t.prototype.rollbackProperty=function(t){return this._changes=this._deleteKey(lt,t),this._errors=this._deleteKey(ht,t),this._errorsCache=this._errors,this},t.prototype.validate=function(){for(var t=[],e=0;e0?t:ft(M(this.validationMap)),e=t.map((function(t){var e=n[t],r=e instanceof nt?e.unwrap():e -return n._validateKey(t,r)})),[2,Promise.all(e)]):[2,Promise.resolve(null)]}))}))},t.prototype.addError=function(t,e){var n,r=this -if(function(t){return r.isObject(t)&&!Array.isArray(t)}(e))e.hasOwnProperty("value")||e.value,e.hasOwnProperty("validation"),n=new c(e.value,e.validation) -else{var i=this[t] -n=new c(i,e)}var o=this._errors -return this._errors=this.setDeep(o,t,n,{safeSet:this.safeSet}),this._errorsCache=this._errors,e},t.prototype.pushErrors=function(t){for(var e=[],n=1;n0},t.prototype._validateKey=function(t,e){var n=this,r=this._content,i=this.getDeep(r,t),o=this._validate(t,e,i) -if(this.trigger("beforeValidation",t),d(o)){this._setIsValidating(t,o) -var a=this._runningValidations,u=Object.entries(a) -return Promise.all(u).then((function(){return o.then((function(r){return delete a[t],n._handleValidation(r,{key:t,value:e})})).then((function(e){return n.trigger(dt,t),e}))}))}var c=this._handleValidation(o,{key:t,value:e}) -return this.trigger(dt,t),c},t.prototype._handleValidation=function(t,e){var n=e.key,r=e.value,i=!0===t||Array.isArray(t)&&1===t.length&&!0===t[0] -return this._errors=this._deleteKey("_errorsCache",n),i?r:this.addError(n,{value:r,validation:t})},t.prototype._validate=function(t,e,n){var r=this._validator,i=this._content -if("function"==typeof r){var o=r({key:t,newValue:e,oldValue:n,changes:this.change,content:i}) -return void 0===o||o}return!0},t.prototype._setProperty=function(t){var e,n,r=t.key,i=t.value,a=t.oldValue,u=this._changes -if(n=a,((e=i)instanceof Date&&n instanceof Date?e.getTime()===n.getTime():e===n)&&void 0!==a)B(u,r)&&(this._changes=this._deleteKey(lt,r)) -else{var c=this.setDeep(u,r,new o(i),{safeSet:this.safeSet}) -this._changes=c}},t.prototype._setIsValidating=function(t,e){var n=this._runningValidations -this.setDeep(n,t,e)},t.prototype._notifyVirtualProperties=function(t){return t||(t=this._rollbackKeys()),t},t.prototype._rollbackKeys=function(){var t=this._changes,e=this._errors -return st(new Set(st(ft(t),ft(e))))},t.prototype._deleteKey=function(t,e){void 0===e&&(e="") -var n=this[t],r=e.split(".") -if(1===r.length&&n.hasOwnProperty(e))delete n[e] -else if(n[r[0]])for(var i=ct(r),o=i[0],u=i.slice(1),c=n,s=n[o],f=o;this.isObject(s)&&f;){var l=s;(a(l)||void 0!==l.value||l.validation)&&delete c[f],c=s,(f=u.shift())&&(s=s[f])}return n},t.prototype.get=function(t){var e=ct(t.split(".")),n=e[0],i=e.slice(1),o=this._changes,c=this._content -if(Object.prototype.hasOwnProperty.call(o,n)){var s=this.getDeep(o,t) -if(!this.isObject(s)&&void 0!==s)return s}if(Object.prototype.hasOwnProperty.call(o,n)&&k(o)){var f=o[n],l=E(f) -if(this.isObject(l)){var h=this.maybeUnwrapProxy(this.getDeep(l,i.join("."))) -if(void 0===h&&function(t,e,n){var r,i -if(a(t))return!1 -var o=e.split("."),u=t -try{for(var c=x(o),s=c.next();!s.done;s=c.next()){var f=s.value -if(!u)return!1 -if(o[o.length-1]!==f&&a(n(u,f)))return!0 -u=n(u,f)}}catch(t){r={error:t}}finally{try{s&&!s.done&&(i=c.return)&&i.call(c)}finally{if(r)throw r.error}}return!1}(o,t,this.safeGet)&&!function(t,e,n){var r,i,o=e.split("."),c=t -try{for(var s=x(o),f=s.next();!f.done;f=s.next()){var l=f.value -if(!c||!Object.prototype.hasOwnProperty.call(c,l))return!1 -c=n(c,l),a(c)&&(c=u(c))}}catch(t){r={error:t}}finally{try{f&&!f.done&&(i=s.return)&&i.call(s)}finally{if(r)throw r.error}}return!0}(o,t,this.safeGet)&&this.getDeep(c,t))return -if(this.isObject(h)){if(a(h))return u(h) -var d=this.safeGet(c,n)||{},p=this.getDeep(d,i.join(".")),y=function(t,e){var n=t -if(-1===e.indexOf("."))return n[e] -for(var r="string"==typeof e?e.split("."):e,i=0;i{var r=n(260),i=n(8806) -t.exports=function t(e){if(!(this instanceof t))return new t(e) -var n=(e||"").replace(/^\//,""),o=i() -return a._trie=o,a.on=function(t,e){if(r.equal(typeof t,"string"),r.equal(typeof e,"function"),t=t||"/",e._wayfarer&&e._trie)o.mount(t,e._trie.trie) -else{var n=o.create(t) -n.cb=e,n.route=t}return a},a.emit=a,a.match=u,a._wayfarer=!0,a -function a(t){var e=u(t),n=new Array(arguments.length) -n[0]=e.params -for(var r=1;r{var r=n(260) -function i(){if(!(this instanceof i))return new i -this.trie={nodes:{}}}function o(t,e){return Object.prototype.hasOwnProperty.call(t,e)}t.exports=i,i.prototype.create=function(t){r.equal(typeof t,"string","route should be a string") -var e=t.replace(/^\//,"").split("/") -return function t(n,r){var i=o(e,n)&&e[n] -if(!1===i)return r -var a=null -return/^:|^\*/.test(i)?(o(r.nodes,"$$")?a=r.nodes.$$:(a={nodes:{}},r.nodes.$$=a),"*"===i[0]&&(r.wildcard=!0),r.name=i.replace(/^:|^\*/,"")):o(r.nodes,i)?a=r.nodes[i]:(a={nodes:{}},r.nodes[i]=a),t(n+1,a)}(0,this.trie)},i.prototype.match=function(t){r.equal(typeof t,"string","route should be a string") -var e=t.replace(/^\//,"").split("/"),n={},i=function t(r,i){if(void 0!==i){var a=e[r] -if(void 0===a)return i -if(o(i.nodes,a))return t(r+1,i.nodes[a]) -if(i.name){try{n[i.name]=decodeURIComponent(a)}catch(e){return t(r,void 0)}return t(r+1,i.nodes.$$)}if(i.wildcard){try{n.wildcard=decodeURIComponent(e.slice(r).join("/"))}catch(e){return t(r,void 0)}return i.nodes.$$}return t(r+1)}}(0,this.trie) -if(i)return(i=Object.assign({},i)).params=n,i},i.prototype.mount=function(t,e){r.equal(typeof t,"string","route should be a string"),r.equal(typeof e,"object","trie should be a object") -var n=t.replace(/^\//,"").split("/"),i=null,o=null -if(1===n.length)o=n[0],i=this.create(o) -else{var a=n.join("/") -o=n[0],i=this.create(a)}Object.assign(i.nodes,e.nodes),e.name&&(i.name=e.name),i.nodes[""]&&(Object.keys(i.nodes[""]).forEach((function(t){"nodes"!==t&&(i[t]=i.nodes[""][t])})),Object.assign(i.nodes,i.nodes[""].nodes),delete i.nodes[""].nodes)}},3493:(t,e,n)=>{"use strict" -n.r(e),n.d(e,{CSSResult:()=>a,ReactiveElement:()=>g,adoptStyles:()=>s,css:()=>c,defaultConverter:()=>y,getCompatibleStyle:()=>f,notEqual:()=>b,supportsAdoptingStyleSheets:()=>r,unsafeCSS:()=>u}) -const r=window.ShadowRoot&&(void 0===window.ShadyCSS||window.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,i=Symbol(),o=new Map -class a{constructor(t,e){if(this._$cssResult$=!0,e!==i)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.") -this.cssText=t}get styleSheet(){let t=o.get(this.cssText) -return r&&void 0===t&&(o.set(this.cssText,t=new CSSStyleSheet),t.replaceSync(this.cssText)),t}toString(){return this.cssText}}const u=t=>new a("string"==typeof t?t:t+"",i),c=function(t){for(var e=arguments.length,n=new Array(e>1?e-1:0),r=1;re+(t=>{if(!0===t._$cssResult$)return t.cssText -if("number"==typeof t)return t -throw Error("Value passed to 'css' function must be a 'css' function result: "+t+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(n)+t[r+1]),t[0]) -return new a(o,i)},s=(t,e)=>{r?t.adoptedStyleSheets=e.map((t=>t instanceof CSSStyleSheet?t:t.styleSheet)):e.forEach((e=>{const n=document.createElement("style"),r=window.litNonce -void 0!==r&&n.setAttribute("nonce",r),n.textContent=e.cssText,t.appendChild(n)}))},f=r?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e="" -for(const n of t.cssRules)e+=n.cssText -return u(e)})(t):t -var l -const h=window.trustedTypes,d=h?h.emptyScript:"",p=window.reactiveElementPolyfillSupport,y={toAttribute(t,e){switch(e){case Boolean:t=t?d:null -break -case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,e){let n=t -switch(e){case Boolean:n=null!==t -break -case Number:n=null===t?null:Number(t) -break -case Object:case Array:try{n=JSON.parse(t)}catch(t){n=null}}return n}},b=(t,e)=>e!==t&&(e==e||t==t),v={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:b} -class g extends HTMLElement{constructor(){super(),this._$Et=new Map,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Ei=null,this.o()}static addInitializer(t){var e -null!==(e=this.l)&&void 0!==e||(this.l=[]),this.l.push(t)}static get observedAttributes(){this.finalize() -const t=[] -return this.elementProperties.forEach(((e,n)=>{const r=this._$Eh(n,e) -void 0!==r&&(this._$Eu.set(r,n),t.push(r))})),t}static createProperty(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:v -if(e.state&&(e.attribute=!1),this.finalize(),this.elementProperties.set(t,e),!e.noAccessor&&!this.prototype.hasOwnProperty(t)){const n="symbol"==typeof t?Symbol():"__"+t,r=this.getPropertyDescriptor(t,n,e) -void 0!==r&&Object.defineProperty(this.prototype,t,r)}}static getPropertyDescriptor(t,e,n){return{get(){return this[e]},set(r){const i=this[t] -this[e]=r,this.requestUpdate(t,i,n)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)||v}static finalize(){if(this.hasOwnProperty("finalized"))return!1 -this.finalized=!0 -const t=Object.getPrototypeOf(this) -if(t.finalize(),this.elementProperties=new Map(t.elementProperties),this._$Eu=new Map,this.hasOwnProperty("properties")){const t=this.properties,e=[...Object.getOwnPropertyNames(t),...Object.getOwnPropertySymbols(t)] -for(const n of e)this.createProperty(n,t[n])}return this.elementStyles=this.finalizeStyles(this.styles),!0}static finalizeStyles(t){const e=[] -if(Array.isArray(t)){const n=new Set(t.flat(1/0).reverse()) -for(const t of n)e.unshift(f(t))}else void 0!==t&&e.push(f(t)) -return e}static _$Eh(t,e){const n=e.attribute -return!1===n?void 0:"string"==typeof n?n:"string"==typeof t?t.toLowerCase():void 0}o(){var t -this._$Ep=new Promise((t=>this.enableUpdating=t)),this._$AL=new Map,this._$Em(),this.requestUpdate(),null===(t=this.constructor.l)||void 0===t||t.forEach((t=>t(this)))}addController(t){var e,n;(null!==(e=this._$Eg)&&void 0!==e?e:this._$Eg=[]).push(t),void 0!==this.renderRoot&&this.isConnected&&(null===(n=t.hostConnected)||void 0===n||n.call(t))}removeController(t){var e -null===(e=this._$Eg)||void 0===e||e.splice(this._$Eg.indexOf(t)>>>0,1)}_$Em(){this.constructor.elementProperties.forEach(((t,e)=>{this.hasOwnProperty(e)&&(this._$Et.set(e,this[e]),delete this[e])}))}createRenderRoot(){var t -const e=null!==(t=this.shadowRoot)&&void 0!==t?t:this.attachShadow(this.constructor.shadowRootOptions) -return s(e,this.constructor.elementStyles),e}connectedCallback(){var t -void 0===this.renderRoot&&(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),null===(t=this._$Eg)||void 0===t||t.forEach((t=>{var e -return null===(e=t.hostConnected)||void 0===e?void 0:e.call(t)}))}enableUpdating(t){}disconnectedCallback(){var t -null===(t=this._$Eg)||void 0===t||t.forEach((t=>{var e -return null===(e=t.hostDisconnected)||void 0===e?void 0:e.call(t)}))}attributeChangedCallback(t,e,n){this._$AK(t,n)}_$ES(t,e){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:v -var r,i -const o=this.constructor._$Eh(t,n) -if(void 0!==o&&!0===n.reflect){const a=(null!==(i=null===(r=n.converter)||void 0===r?void 0:r.toAttribute)&&void 0!==i?i:y.toAttribute)(e,n.type) -this._$Ei=t,null==a?this.removeAttribute(o):this.setAttribute(o,a),this._$Ei=null}}_$AK(t,e){var n,r,i -const o=this.constructor,a=o._$Eu.get(t) -if(void 0!==a&&this._$Ei!==a){const t=o.getPropertyOptions(a),u=t.converter,c=null!==(i=null!==(r=null===(n=u)||void 0===n?void 0:n.fromAttribute)&&void 0!==r?r:"function"==typeof u?u:null)&&void 0!==i?i:y.fromAttribute -this._$Ei=a,this[a]=c(e,t.type),this._$Ei=null}}requestUpdate(t,e,n){let r=!0 -void 0!==t&&(((n=n||this.constructor.getPropertyOptions(t)).hasChanged||b)(this[t],e)?(this._$AL.has(t)||this._$AL.set(t,e),!0===n.reflect&&this._$Ei!==t&&(void 0===this._$E_&&(this._$E_=new Map),this._$E_.set(t,n))):r=!1),!this.isUpdatePending&&r&&(this._$Ep=this._$EC())}async _$EC(){this.isUpdatePending=!0 -try{await this._$Ep}catch(t){Promise.reject(t)}const t=this.scheduleUpdate() -return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){var t -if(!this.isUpdatePending)return -this.hasUpdated,this._$Et&&(this._$Et.forEach(((t,e)=>this[e]=t)),this._$Et=void 0) -let e=!1 -const n=this._$AL -try{e=this.shouldUpdate(n),e?(this.willUpdate(n),null===(t=this._$Eg)||void 0===t||t.forEach((t=>{var e -return null===(e=t.hostUpdate)||void 0===e?void 0:e.call(t)})),this.update(n)):this._$EU()}catch(t){throw e=!1,this._$EU(),t}e&&this._$AE(n)}willUpdate(t){}_$AE(t){var e -null===(e=this._$Eg)||void 0===e||e.forEach((t=>{var e -return null===(e=t.hostUpdated)||void 0===e?void 0:e.call(t)})),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EU(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$Ep}shouldUpdate(t){return!0}update(t){void 0!==this._$E_&&(this._$E_.forEach(((t,e)=>this._$ES(e,this[e],t))),this._$E_=void 0),this._$EU()}updated(t){}firstUpdated(t){}}g.finalized=!0,g.elementProperties=new Map,g.elementStyles=[],g.shadowRootOptions={mode:"open"},null==p||p({ReactiveElement:g}),(null!==(l=globalThis.reactiveElementVersions)&&void 0!==l?l:globalThis.reactiveElementVersions=[]).push("1.2.1")}}]) diff --git a/agent/uiserver/dist/assets/chunk.744.c0eb6726020fc4af8d3f.css b/agent/uiserver/dist/assets/chunk.744.60c31f269c98ac39ce46.css similarity index 87% rename from agent/uiserver/dist/assets/chunk.744.c0eb6726020fc4af8d3f.css rename to agent/uiserver/dist/assets/chunk.744.60c31f269c98ac39ce46.css index cf28e28e68b55..cd2d6bfc876d3 100644 --- a/agent/uiserver/dist/assets/chunk.744.c0eb6726020fc4af8d3f.css +++ b/agent/uiserver/dist/assets/chunk.744.60c31f269c98ac39ce46.css @@ -36,4 +36,4 @@ dialog.fixed { transform: translate(0, -50%); } -/*# sourceMappingURL=chunk.744.c0eb6726020fc4af8d3f.css-e0c9c028789323db3f70d794b7d8bdc8.map*/ \ No newline at end of file +/*# sourceMappingURL=chunk.744.60c31f269c98ac39ce46.css-a42bd71a0a3384cc22270ac338164b86.map*/ \ No newline at end of file diff --git a/agent/uiserver/dist/assets/chunk.744.c0eb6726020fc4af8d3f.js b/agent/uiserver/dist/assets/chunk.744.60c31f269c98ac39ce46.js similarity index 100% rename from agent/uiserver/dist/assets/chunk.744.c0eb6726020fc4af8d3f.js rename to agent/uiserver/dist/assets/chunk.744.60c31f269c98ac39ce46.js diff --git a/agent/uiserver/dist/assets/chunk.336.f5cb05e551aa08eb7125.js b/agent/uiserver/dist/assets/chunk.778.b0fb1162d11e4184d9d0.js similarity index 65% rename from agent/uiserver/dist/assets/chunk.336.f5cb05e551aa08eb7125.js rename to agent/uiserver/dist/assets/chunk.778.b0fb1162d11e4184d9d0.js index b4ef3eadadc13..21cb32de79526 100644 --- a/agent/uiserver/dist/assets/chunk.336.f5cb05e551aa08eb7125.js +++ b/agent/uiserver/dist/assets/chunk.778.b0fb1162d11e4184d9d0.js @@ -1,5 +1,67 @@ -/*! For license information please see chunk.336.f5cb05e551aa08eb7125.js.LICENSE.txt */ -(globalThis.webpackChunk_ember_auto_import_=globalThis.webpackChunk_ember_auto_import_||[]).push([[336],{3409:(e,t,n)=>{var r +/*! For license information please see chunk.778.b0fb1162d11e4184d9d0.js.LICENSE.txt */ +(globalThis.webpackChunk_ember_auto_import_=globalThis.webpackChunk_ember_auto_import_||[]).push([[778],{9542:e=>{var t=Array.isArray +e.exports=function(){if(!arguments.length)return[] +var e=arguments[0] +return t(e)?e:[e]}},9644:e=>{e.exports=function(e){var t=e?e.length:0 +return t?e[t-1]:void 0}},1609:(e,t,n)=>{var r="__lodash_hash_undefined__",i=1/0,o=9007199254740991,s="[object Arguments]",a="[object Function]",u="[object GeneratorFunction]",c="[object Symbol]",l=/^\[object .+?Constructor\]$/,f=/^(?:0|[1-9]\d*)$/,h="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,d="object"==typeof self&&self&&self.Object===Object&&self,p=h||d||Function("return this")() +function g(e,t){return!(!e||!e.length)&&function(e,t,n){if(t!=t)return function(e,t,n,r){for(var i=e.length,o=-1;++o-1}function v(e,t){for(var n=-1,r=t.length,i=e.length;++n0&&n(a)?t>1?$(a,t-1,n,r,i):v(i,a):r||(i[i.length]=a)}return i}function Q(e,t){var n,r,i=e.__data__ +return("string"==(r=typeof(n=t))||"number"==r||"symbol"==r||"boolean"==r?"__proto__"!==n:null===n)?i["string"==typeof t?"string":"hash"]:i.map}function G(e,t){var n=function(e,t){return null==e?void 0:e[t]}(e,t) +return function(e){if(!ne(e)||S&&S in e)return!1 +var t=te(e)||function(e){var t=!1 +if(null!=e&&"function"!=typeof e.toString)try{t=!!(e+"")}catch(e){}return t}(e)?N:l +return t.test(function(e){if(null!=e){try{return C.call(e)}catch(e){}try{return e+""}catch(e){}}return""}(e))}(n)?n:void 0}L.prototype.clear=function(){this.__data__=D?D(null):{}},L.prototype.delete=function(e){return this.has(e)&&delete this.__data__[e]},L.prototype.get=function(e){var t=this.__data__ +if(D){var n=t[e] +return n===r?void 0:n}return T.call(t,e)?t[e]:void 0},L.prototype.has=function(e){var t=this.__data__ +return D?void 0!==t[e]:T.call(t,e)},L.prototype.set=function(e,t){return this.__data__[e]=D&&void 0===t?r:t,this},B.prototype.clear=function(){this.__data__=[]},B.prototype.delete=function(e){var t=this.__data__,n=z(t,e) +return!(n<0||(n==t.length-1?t.pop():A.call(t,n,1),0))},B.prototype.get=function(e){var t=this.__data__,n=z(t,e) +return n<0?void 0:t[n][1]},B.prototype.has=function(e){return z(this.__data__,e)>-1},B.prototype.set=function(e,t){var n=this.__data__,r=z(n,e) +return r<0?n.push([e,t]):n[r][1]=t,this},U.prototype.clear=function(){this.__data__={hash:new L,map:new(P||B),string:new L}},U.prototype.delete=function(e){return Q(this,e).delete(e)},U.prototype.get=function(e){return Q(this,e).get(e)},U.prototype.has=function(e){return Q(this,e).has(e)},U.prototype.set=function(e,t){return Q(this,e).set(e,t),this},H.prototype.add=H.prototype.push=function(e){return this.__data__.set(e,r),this},H.prototype.has=function(e){return this.__data__.has(e)} +var Y=I?b(I,Object):ue,W=I?function(e){for(var t=[];e;)v(t,Y(e)),e=O(e) +return t}:ue +function V(e){return K(e)||Z(e)||!!(R&&e&&e[R])}function J(e,t){return!!(t=null==t?o:t)&&("number"==typeof e||f.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=o}(e.length)&&!te(e)}function te(e){var t=ne(e)?j.call(e):"" +return t==a||t==u}function ne(e){var t=typeof e +return!!e&&("object"==t||"function"==t)}function re(e){return!!e&&"object"==typeof e}function ie(e){return ee(e)?function(e,t){var n=K(e)||Z(e)?function(e,t){for(var n=-1,r=Array(e);++n=200&&(o=y,s=!1,t=new H(t)) +e:for(;++i{var r e=n.nmd(e),function(){"use strict" function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){for(var n=0;n1&&void 0!==arguments[1])||arguments[1],n=t&&q("array",e)?[]:{} -for(var r in e)if(E.call(e,r)){var i=e[r] -n[r]=i===Object(i)?j(i,t):i}return n}function N(e,t){if(e!==Object(e))return e +this.has=function(e){return r.call(n,e)},this.get=function(e){return n[e]},this.set=function(e,t){return r.call(n,e)||this.size++,n[e]=t,this},this.delete=function(e){r.call(n,e)&&(delete n[e],this.size--)},this.forEach=function(e){for(var t in n)e(n[t],t)},this.keys=function(){return Object.keys(n)},this.clear=function(){n=Object.create(null),this.size=0},this.size=0,e&&e.forEach((function(e,n){t.set(n,e)}))},x="function"==typeof h.Set&&"function"==typeof h.Set.prototype.values?h.Set:function(e){var t=Object.create(null) +return Array.isArray(e)&&e.forEach((function(e){t[e]=!0})),{add:function(e){t[e]=!0},has:function(e){return e in t},get size(){return Object.keys(t).length}}},k={warn:p?Function.prototype.bind.call(p.warn||p.log,p):function(){}},E=Object.prototype.toString,_=Object.prototype.hasOwnProperty,S=d&&void 0!==d.performance&&"function"==typeof d.performance.mark&&"function"==typeof d.performance.measure?d.performance:void 0,C={now:S?S.now.bind(S):Date.now,measure:S?function(e,t,n){try{S.measure(e,t,n)}catch(e){k.warn("performance.measure could not be executed because of ",e.message)}}:function(){},mark:S?S.mark.bind(S):function(){}} +function T(e,t){return e.filter((function(e){return-1===t.indexOf(e)}))}function j(e,t){return-1!==t.indexOf(e)}function N(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=t&&A("array",e)?[]:{} +for(var r in e)if(_.call(e,r)){var i=e[r] +n[r]=i===Object(i)?N(i,t):i}return n}function M(e,t){if(e!==Object(e))return e var n={} -for(var r in t)E.call(t,r)&&E.call(e,r)&&(n[r]=N(e[r],t[r])) -return n}function M(e,t,n){for(var r in t)E.call(t,r)&&(void 0===t[r]?delete e[r]:n&&void 0!==e[r]||(e[r]=t[r])) -return e}function O(e){if(void 0===e)return"undefined" +for(var r in t)_.call(t,r)&&_.call(e,r)&&(n[r]=M(e[r],t[r])) +return n}function O(e,t,n){for(var r in t)_.call(t,r)&&(void 0===t[r]?delete e[r]:n&&void 0!==e[r]||(e[r]=t[r])) +return e}function q(e){if(void 0===e)return"undefined" if(null===e)return"null" -var t=k.call(e).match(/^\[object\s(.*)\]$/),n=t&&t[1] +var t=E.call(e).match(/^\[object\s(.*)\]$/),n=t&&t[1] switch(n){case"Number":return isNaN(e)?"nan":"number" case"String":case"Boolean":case"Array":case"Set":case"Map":case"Date":case"RegExp":case"Function":case"Symbol":return n.toLowerCase() -default:return i(e)}}function q(e,t){return O(t)===e}function A(e,t){for(var n=e+""+t,r=0,i=0;i0;){if(!Q(arguments[n-1],arguments[n]))return!1 +n--}return!0}var Y={altertitle:!0,collapse:!0,failOnZeroTests:!0,filter:void 0,maxDepth:5,module:void 0,moduleId:void 0,reorder:!0,requireExpects:!1,scrolltop:!0,storage:b,testId:void 0,urlConfig:[],currentModule:{name:"",tests:[],childModules:[],testsRun:0,testsIgnored:0,hooks:{before:[],beforeEach:[],afterEach:[],after:[]}},globalHooks:{},blocking:!0,callbacks:{},modules:[],queue:[],stats:{all:0,bad:0,testCount:0}},W=h&&h.QUnit&&!h.QUnit.version&&h.QUnit.config +W&&O(Y,W),Y.modules.push(Y.currentModule) +var V=function(){function e(e){return'"'+e.toString().replace(/\\/g,"\\\\").replace(/"/g,'\\"')+'"'}function t(e){return e+""}function n(e,t,n){var r=s.separator(),i=s.indent(1) return t.join&&(t=t.join(","+r+i)),t?[e,i+t,s.indent()+n].join(r):e+n}function r(e,t){if(s.maxDepth&&s.depth>s.maxDepth)return"[object Array]" this.up() for(var r=e.length,i=new Array(r);r--;)i[r]=this.parse(e[r],void 0,t) @@ -66,9 +131,9 @@ var o=this.parsers[t],s=i(o) if("function"===s){n.push(e) var a=o.call(this,e,n) return n.pop(),a}return"string"===s?o:"[ERROR: Missing QUnit.dump formatter for type "+t+"]"},typeOf:function(e){var t -return t=null===e?"null":void 0===e?"undefined":q("regexp",e)?"regexp":q("date",e)?"date":q("function",e)?"function":void 0!==e.setInterval&&void 0!==e.document&&void 0===e.nodeType?"window":9===e.nodeType?"document":e.nodeType?"node":function(e){return"[object Array]"===k.call(e)||"number"==typeof e.length&&void 0!==e.item&&(e.length?e.item(0)===e[0]:null===e.item(0)&&void 0===e[0])}(e)?"array":e.constructor===Error.prototype.constructor?"error":i(e),t},separator:function(){return this.multiline?this.HTML?"
":"\n":this.HTML?" ":" "},indent:function(e){if(!this.multiline)return"" +return t=null===e?"null":void 0===e?"undefined":A("regexp",e)?"regexp":A("date",e)?"date":A("function",e)?"function":void 0!==e.setInterval&&void 0!==e.document&&void 0===e.nodeType?"window":9===e.nodeType?"document":e.nodeType?"node":function(e){return"[object Array]"===E.call(e)||"number"==typeof e.length&&void 0!==e.item&&(e.length?e.item(0)===e[0]:null===e.item(0)&&void 0===e[0])}(e)?"array":e.constructor===Error.prototype.constructor?"error":i(e),t},separator:function(){return this.multiline?this.HTML?"
":"\n":this.HTML?" ":" "},indent:function(e){if(!this.multiline)return"" var t=this.indentChar -return this.HTML&&(t=t.replace(/\t/g," ").replace(/ /g," ")),new Array(this.depth+(e||0)).join(t)},up:function(e){this.depth+=e||1},down:function(e){this.depth-=e||1},setParser:function(e,t){this.parsers[e]=t},quote:e,literal:t,join:n,depth:1,maxDepth:F.maxDepth,parsers:{window:"[Window]",document:"[Document]",error:function(e){return'Error("'+e.message+'")'},unknown:"[Unknown]",null:"null",undefined:"undefined",function:function(e){var t="function",r="name"in e?e.name:(o.exec(e)||[])[1] +return this.HTML&&(t=t.replace(/\t/g," ").replace(/ /g," ")),new Array(this.depth+(e||0)).join(t)},up:function(e){this.depth+=e||1},down:function(e){this.depth-=e||1},setParser:function(e,t){this.parsers[e]=t},quote:e,literal:t,join:n,depth:1,maxDepth:Y.maxDepth,parsers:{window:"[Window]",document:"[Document]",error:function(e){return'Error("'+e.message+'")'},unknown:"[Unknown]",null:"null",undefined:"undefined",function:function(e){var t="function",r="name"in e?e.name:(o.exec(e)||[])[1] return r&&(t+=" "+r),n(t=[t+="(",s.parse(e,"functionArgs"),"){"].join(""),s.parse(e,"functionCode"),"}")},array:r,nodelist:r,arguments:r,object:function(e,t){var r=[] if(s.maxDepth&&s.depth>s.maxDepth)return"[object Object]" s.up() @@ -76,7 +141,7 @@ var i=[] for(var o in e)i.push(o) var a=["message","name"] for(var u in a){var c=a[u] -c in e&&!T(c,i)&&i.push(c)}i.sort() +c in e&&!j(c,i)&&i.push(c)}i.sort() for(var l=0;l",r=e.nodeName.toLowerCase(),i=t+r,o=e.attributes if(o)for(var a=0;a0&&void 0!==arguments[0]?arguments[0]:{passed:0,failed:0,skipped:0,todo:0,total:0} +C.mark("qunit_suite_".concat(t,"_end")),C.measure(0===t?"QUnit Test Run":"QUnit Test Suite: ".concat(n),"qunit_suite_".concat(t,"_start"),"qunit_suite_".concat(t,"_end"))}return{name:this.name,fullName:this.fullName.slice(),tests:this.tests.map((function(e){return e.end()})),childSuites:this.childSuites.map((function(e){return e.end()})),testCounts:this.getTestCounts(),runtime:this.getRuntime(),status:this.getStatus()}}},{key:"pushChildSuite",value:function(e){this.childSuites.push(e)}},{key:"pushTest",value:function(e){this.tests.push(e)}},{key:"getRuntime",value:function(){return Math.round(this._endTime-this._startTime)}},{key:"getTestCounts",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{passed:0,failed:0,skipped:0,todo:0,total:0} return e.failed+=this.globalFailureCount,e.total+=this.globalFailureCount,e=this.tests.reduce((function(e,t){return t.valid&&(e[t.getStatus()]++,e.total++),e}),e),this.childSuites.reduce((function(e,t){return t.getTestCounts(e)}),e)}},{key:"getStatus",value:function(){var e=this.getTestCounts(),t=e.total,n=e.failed,r=e.skipped,i=e.todo -return n?"failed":r===t?"skipped":i===t?"todo":"passed"}}]),e}(),B=[],U=new L -function H(e,t,n){var r=B.length?B.slice(-1)[0]:null,i=null!==r?[r.name,e].join(" > "):e,o=r?r.suiteReport:U,s=null!==r&&r.skip||n.skip,a=null!==r&&r.todo||n.todo,u={} -r&&M(u,r.testEnvironment),M(u,t) -var c={name:i,parentModule:r,hooks:{before:[],beforeEach:[],afterEach:[],after:[]},testEnvironment:u,tests:[],moduleId:A(i),testsRun:0,testsIgnored:0,childModules:[],suiteReport:new L(e,o),stats:null,skip:s,todo:!s&&a,ignored:n.ignored||!1} -return r&&r.childModules.push(c),F.modules.push(c),c}function z(e,t,n){var r=t[n] -"function"==typeof r&&e[n].push(r),delete t[n]}function $(e,t){return function(n){F.currentModule!==e&&x.warn("The `"+t+"` hook was called inside the wrong module (`"+F.currentModule.name+"`). Instead, use hooks provided by the callback to the containing module (`"+e.name+"`). This will become an error in QUnit 3.0."),e.hooks[t].push(n)}}function Q(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{} -"function"==typeof t&&(n=t,t=void 0) -var i=H(e,t,r),o=i.testEnvironment,s=i.hooks -z(s,o,"before"),z(s,o,"beforeEach"),z(s,o,"afterEach"),z(s,o,"after") -var a={before:$(i,"before"),beforeEach:$(i,"beforeEach"),afterEach:$(i,"afterEach"),after:$(i,"after")},u=F.currentModule -if(F.currentModule=i,"function"==typeof n){B.push(i) -try{var c=n.call(i.testEnvironment,a) -c&&"function"==typeof c.then&&x.warn("Returning a promise from a module callback is not supported. Instead, use hooks for async behavior. This will become an error in QUnit 3.0.")}finally{B.pop(),F.currentModule=i.parentModule||u}}}var G=!1 -function W(e,t,n){var r,i=G&&(r=F.modules.filter((function(e){return!e.ignored})).map((function(e){return e.moduleId})),!B.some((function(e){return r.includes(e.moduleId)}))) -Q(e,t,n,{ignored:i})}W.only=function(){G||(F.modules.length=0,F.queue.length=0,F.currentModule.ignored=!0),G=!0,Q.apply(void 0,arguments)},W.skip=function(e,t,n){G||Q(e,t,n,{skip:!0})},W.todo=function(e,t,n){G||Q(e,t,n,{todo:!0})} -var Y=(J(0)||"").replace(/(:\d+)+\)?/,"").replace(/.+[/\\]/,"") -function V(e,t){if(t=void 0===t?4:t,e&&e.stack){var n=e.stack.split("\n") -if(/^error$/i.test(n[0])&&n.shift(),Y){for(var r=[],i=t;i0&&this.test.internalResetTimeout(this.test.timeout))}},{key:"step",value:function(e){var t=e,n=!!e +return n?"failed":r===t?"skipped":i===t?"todo":"passed"}}]),e}(),X=[],Z=new J +function K(e,t,n){var r=t[n] +"function"==typeof r&&e[n].push(r),delete t[n]}function ee(e,t){return function(n){Y.currentModule!==e&&k.warn("The `"+t+"` hook was called inside the wrong module (`"+Y.currentModule.name+"`). Instead, use hooks provided by the callback to the containing module (`"+e.name+"`). This will become an error in QUnit 3.0."),e.hooks[t].push(n)}}function te(e,t,n){"function"==typeof t&&(n=t,t=void 0) +var r=function(e,t,n){var r=X.length?X.slice(-1)[0]:null,i=null!==r?[r.name,e].join(" > "):e,o=r?r.suiteReport:Z,s=null!==r&&r.skip||n.skip,a=null!==r&&r.todo||n.todo,u={} +r&&O(u,r.testEnvironment),O(u,t) +var c={name:i,parentModule:r,hooks:{before:[],beforeEach:[],afterEach:[],after:[]},testEnvironment:u,tests:[],moduleId:R(i),testsRun:0,testsIgnored:0,childModules:[],suiteReport:new J(e,o),stats:null,skip:s,todo:!s&&a,ignored:n.ignored||!1} +return r&&r.childModules.push(c),Y.modules.push(c),c}(e,t,arguments.length>3&&void 0!==arguments[3]?arguments[3]:{}),i=r.testEnvironment,o=r.hooks +K(o,i,"before"),K(o,i,"beforeEach"),K(o,i,"afterEach"),K(o,i,"after") +var s={before:ee(r,"before"),beforeEach:ee(r,"beforeEach"),afterEach:ee(r,"afterEach"),after:ee(r,"after")},a=Y.currentModule +if(Y.currentModule=r,"function"==typeof n){X.push(r) +try{var u=n.call(r.testEnvironment,s) +u&&"function"==typeof u.then&&k.warn("Returning a promise from a module callback is not supported. Instead, use hooks for async behavior. This will become an error in QUnit 3.0.")}finally{X.pop(),Y.currentModule=r.parentModule||a}}}var ne=!1 +function re(e,t,n){var r,i=ne&&(r=Y.modules.filter((function(e){return!e.ignored})).map((function(e){return e.moduleId})),!X.some((function(e){return r.includes(e.moduleId)}))) +te(e,t,n,{ignored:i})}re.only=function(){ne||(Y.modules.length=0,Y.queue.length=0,Y.currentModule.ignored=!0),ne=!0,te.apply(void 0,arguments)},re.skip=function(e,t,n){ne||te(e,t,n,{skip:!0})},re.todo=function(e,t,n){ne||te(e,t,n,{todo:!0})} +var ie=(se(0)||"").replace(/(:\d+)+\)?/,"").replace(/.+[/\\]/,"") +function oe(e,t){if(t=void 0===t?4:t,e&&e.stack){var n=e.stack.split("\n") +if(/^error$/i.test(n[0])&&n.shift(),ie){for(var r=[],i=t;i0&&this.test.internalResetTimeout(this.test.timeout))}},{key:"step",value:function(e){var t=e,n=!!e this.test.steps.push(e),void 0===e||""===e?t="You must provide a message to assert.step":"string"!=typeof e&&(t="You must provide a string value to assert.step",n=!1),this.pushResult({result:n,message:t})}},{key:"verifySteps",value:function(e,t){var n=this.test.steps.slice() this.deepEqual(n,e,t),this.test.steps.length=0}},{key:"expect",value:function(e){if(1!==arguments.length)return this.test.expected this.test.expected=e}},{key:"async",value:function(e){var t=void 0===e?1:e -return this.test.internalStop(t)}},{key:"push",value:function(t,n,r,i,o){return x.warn("assert.push is deprecated and will be removed in QUnit 3.0. Please use assert.pushResult instead (https://api.qunitjs.com/assert/pushResult)."),(this instanceof e?this:F.current.assert).pushResult({result:t,actual:n,expected:r,message:i,negative:o})}},{key:"pushResult",value:function(t){var n=this,r=n instanceof e&&n.test||F.current -if(!r)throw new Error("assertion outside test context, in "+J(2)) -return n instanceof e||(n=r.assert),n.test.pushResult(t)}},{key:"ok",value:function(e,t){t||(t=e?"okay":"failed, expected argument to be truthy, was: ".concat(D.parse(e))),this.pushResult({result:!!e,actual:e,expected:!0,message:t})}},{key:"notOk",value:function(e,t){t||(t=e?"failed, expected argument to be falsy, was: ".concat(D.parse(e)):"okay"),this.pushResult({result:!e,actual:e,expected:!1,message:t})}},{key:"true",value:function(e,t){this.pushResult({result:!0===e,actual:e,expected:!0,message:t})}},{key:"false",value:function(e,t){this.pushResult({result:!1===e,actual:e,expected:!1,message:t})}},{key:"equal",value:function(e,t,n){var r=t==e -this.pushResult({result:r,actual:e,expected:t,message:n})}},{key:"notEqual",value:function(e,t,n){var r=t!=e -this.pushResult({result:r,actual:e,expected:t,message:n,negative:!0})}},{key:"propEqual",value:function(e,t,n){e=j(e),t=j(t),this.pushResult({result:I(e,t),actual:e,expected:t,message:n})}},{key:"notPropEqual",value:function(e,t,n){e=j(e),t=j(t),this.pushResult({result:!I(e,t),actual:e,expected:t,message:n,negative:!0})}},{key:"propContains",value:function(e,t,n){e=N(e,t),t=j(t,!1),this.pushResult({result:I(e,t),actual:e,expected:t,message:n})}},{key:"notPropContains",value:function(e,t,n){e=N(e,t),t=j(t),this.pushResult({result:!I(e,t),actual:e,expected:t,message:n,negative:!0})}},{key:"deepEqual",value:function(e,t,n){this.pushResult({result:I(e,t),actual:e,expected:t,message:n})}},{key:"notDeepEqual",value:function(e,t,n){this.pushResult({result:!I(e,t),actual:e,expected:t,message:n,negative:!0})}},{key:"strictEqual",value:function(e,t,n){this.pushResult({result:t===e,actual:e,expected:t,message:n})}},{key:"notStrictEqual",value:function(e,t,n){this.pushResult({result:t!==e,actual:e,expected:t,message:n,negative:!0})}},{key:"throws",value:function(t,n,r){var i=u(Z(n,r,"throws"),2) +return this.test.internalStop(t)}},{key:"push",value:function(t,n,r,i,o){return k.warn("assert.push is deprecated and will be removed in QUnit 3.0. Please use assert.pushResult instead (https://api.qunitjs.com/assert/pushResult)."),(this instanceof e?this:Y.current.assert).pushResult({result:t,actual:n,expected:r,message:i,negative:o})}},{key:"pushResult",value:function(t){var n=this,r=n instanceof e&&n.test||Y.current +if(!r)throw new Error("assertion outside test context, in "+se(2)) +return n instanceof e||(n=r.assert),n.test.pushResult(t)}},{key:"ok",value:function(e,t){t||(t=e?"okay":"failed, expected argument to be truthy, was: ".concat(V.parse(e))),this.pushResult({result:!!e,actual:e,expected:!0,message:t})}},{key:"notOk",value:function(e,t){t||(t=e?"failed, expected argument to be falsy, was: ".concat(V.parse(e)):"okay"),this.pushResult({result:!e,actual:e,expected:!1,message:t})}},{key:"true",value:function(e,t){this.pushResult({result:!0===e,actual:e,expected:!0,message:t})}},{key:"false",value:function(e,t){this.pushResult({result:!1===e,actual:e,expected:!1,message:t})}},{key:"equal",value:function(e,t,n){this.pushResult({result:t==e,actual:e,expected:t,message:n})}},{key:"notEqual",value:function(e,t,n){this.pushResult({result:t!=e,actual:e,expected:t,message:n,negative:!0})}},{key:"propEqual",value:function(e,t,n){e=N(e),t=N(t),this.pushResult({result:G(e,t),actual:e,expected:t,message:n})}},{key:"notPropEqual",value:function(e,t,n){e=N(e),t=N(t),this.pushResult({result:!G(e,t),actual:e,expected:t,message:n,negative:!0})}},{key:"propContains",value:function(e,t,n){e=M(e,t),t=N(t,!1),this.pushResult({result:G(e,t),actual:e,expected:t,message:n})}},{key:"notPropContains",value:function(e,t,n){e=M(e,t),t=N(t),this.pushResult({result:!G(e,t),actual:e,expected:t,message:n,negative:!0})}},{key:"deepEqual",value:function(e,t,n){this.pushResult({result:G(e,t),actual:e,expected:t,message:n})}},{key:"notDeepEqual",value:function(e,t,n){this.pushResult({result:!G(e,t),actual:e,expected:t,message:n,negative:!0})}},{key:"strictEqual",value:function(e,t,n){this.pushResult({result:t===e,actual:e,expected:t,message:n})}},{key:"notStrictEqual",value:function(e,t,n){this.pushResult({result:t!==e,actual:e,expected:t,message:n,negative:!0})}},{key:"throws",value:function(t,n,r){var i=u(ue(n,r,"throws"),2) n=i[0],r=i[1] -var o=this instanceof e&&this.test||F.current +var o=this instanceof e&&this.test||Y.current if("function"==typeof t){var s,a=!1 o.ignoreGlobalErrors=!0 -try{t.call(o.testEnvironment)}catch(e){s=e}if(o.ignoreGlobalErrors=!1,s){var c=u(K(s,n,r),3) -a=c[0],n=c[1],r=c[2]}o.assert.pushResult({result:a,actual:s&&R(s),expected:n,message:r})}else{var l='The value provided to `assert.throws` in "'+o.testName+'" was not a function.' -o.assert.pushResult({result:!1,actual:t,message:l})}}},{key:"rejects",value:function(t,n,r){var i=u(Z(n,r,"rejects"),2) +try{t.call(o.testEnvironment)}catch(e){s=e}if(o.ignoreGlobalErrors=!1,s){var c=u(ce(s,n,r),3) +a=c[0],n=c[1],r=c[2]}o.assert.pushResult({result:a,actual:s&&I(s),expected:n,message:r})}else o.assert.pushResult({result:!1,actual:t,message:'The value provided to `assert.throws` in "'+o.testName+'" was not a function.'})}},{key:"rejects",value:function(t,n,r){var i=u(ue(n,r,"rejects"),2) n=i[0],r=i[1] -var o=this instanceof e&&this.test||F.current,s=t&&t.then +var o=this instanceof e&&this.test||Y.current,s=t&&t.then if("function"==typeof s){var a=this.async() -return s.call(t,(function(){var e='The promise returned by the `assert.rejects` callback in "'+o.testName+'" did not reject.' -o.assert.pushResult({result:!1,message:e,actual:t}),a()}),(function(e){var t,i=u(K(e,n,r),3) -t=i[0],n=i[1],r=i[2],o.assert.pushResult({result:t,actual:e&&R(e),expected:n,message:r}),a()}))}var c='The value provided to `assert.rejects` in "'+o.testName+'" was not a promise.' -o.assert.pushResult({result:!1,message:c,actual:t})}}]),e}() -function Z(e,t,n){var r=O(e) +return s.call(t,(function(){o.assert.pushResult({result:!1,message:'The promise returned by the `assert.rejects` callback in "'+o.testName+'" did not reject.',actual:t}),a()}),(function(e){var t,i=u(ce(e,n,r),3) +t=i[0],n=i[1],r=i[2],o.assert.pushResult({result:t,actual:e&&I(e),expected:n,message:r}),a()}))}o.assert.pushResult({result:!1,message:'The value provided to `assert.rejects` in "'+o.testName+'" was not a promise.',actual:t})}}]),e}() +function ue(e,t,n){var r=q(e) if("string"===r){if(void 0===t)return t=e,[e=void 0,t] throw new Error("assert."+n+" does not accept a string value for the expected argument.\nUse a non-string object value (e.g. RegExp or validator function) instead if necessary.")}if(e&&"regexp"!==r&&"function"!==r&&"object"!==r)throw new Error("Invalid expected value type ("+r+") provided to assert."+n+".") -return[e,t]}function K(e,t,n){var r=!1,i=O(t) -if(t){if("regexp"===i)r=t.test(R(e)),t=String(t) +return[e,t]}function ce(e,t,n){var r=!1,i=q(t) +if(t){if("regexp"===i)r=t.test(I(e)),t=String(t) else if("function"===i&&void 0!==t.prototype&&e instanceof t)r=!0 -else if("object"===i)r=e instanceof t.constructor&&e.name===t.name&&e.message===t.message,t=R(t) -else if("function"===i)try{r=!0===t.call({},e),t=null}catch(e){t=R(e)}}else r=!0 -return[r,t,n]}X.prototype.raises=X.prototype.throws -var ee=Object.create(null),te=["error","runStart","suiteStart","testStart","assertion","testEnd","suiteEnd","runEnd"] -function ne(e,t){if("string"!=typeof e)throw new TypeError("eventName must be a string when emitting an event") -for(var n=ee[e],r=n?c(n):[],i=0;i0&&ue--,le()):function(){var e -if(0===F.stats.testCount&&!0===F.failOnZeroTests)return e=F.filter&&F.filter.length?new Error('No tests matched the filter "'.concat(F.filter,'".')):F.module&&F.module.length?new Error('No tests matched the module "'.concat(F.module,'".')):F.moduleId&&F.moduleId.length?new Error('No tests matched the moduleId "'.concat(F.moduleId,'".')):F.testId&&F.testId.length?new Error('No tests matched the testId "'.concat(F.testId,'".')):new Error("No tests were run."),we("global failure",M((function(t){t.pushResult({result:!1,message:e.message,source:e.stack})}),{validTest:!0})),void le() -var t=F.storage,n=Math.round(S.now()-F.started),r=F.stats.all-F.stats.bad -he.finished=!0,ne("runEnd",U.end(!0)),se("done",{passed:r,failed:F.stats.bad,total:F.stats.all,runtime:n}).then((function(){if(t&&0===F.stats.bad)for(var e=t.length-1;e>=0;e--){var n=t.key(e) -0===n.indexOf("qunit-test-")&&t.removeItem(n)}}))}())}function fe(e){if(ce.length&&!F.blocking){var t=S.now()-e -if(!g||F.updateRate<=0||t0&&be--,xe()):function(){var e +if(0===Y.stats.testCount&&!0===Y.failOnZeroTests)return e=Y.filter&&Y.filter.length?new Error('No tests matched the filter "'.concat(Y.filter,'".')):Y.module&&Y.module.length?new Error('No tests matched the module "'.concat(Y.module,'".')):Y.moduleId&&Y.moduleId.length?new Error('No tests matched the moduleId "'.concat(Y.moduleId,'".')):Y.testId&&Y.testId.length?new Error('No tests matched the testId "'.concat(Y.testId,'".')):new Error("No tests were run."),Oe("global failure",O((function(t){t.pushResult({result:!1,message:e.message,source:e.stack})}),{validTest:!0})),void xe() +var t=Y.storage,n=Math.round(C.now()-Y.started),r=Y.stats.all-Y.stats.bad +Ee.finished=!0,he("runEnd",Z.end(!0)),me("done",{passed:r,failed:Y.stats.bad,total:Y.stats.all,runtime:n}).then((function(){if(t&&0===Y.stats.bad)for(var e=t.length-1;e>=0;e--){var n=t.key(e) +0===n.indexOf("qunit-test-")&&t.removeItem(n)}}))}())}function ke(e){if(we.length&&!Y.blocking){var t=C.now()-e +if(!g||Y.updateRate<=0||t>>17,(t^=t<<5)<0&&(t+=4294967296),t/4294967296}}(n)) -var r=Math.floor(ae()*(F.queue.length-ue+1)) -F.queue.splice(ue+r,0,e)}else F.queue.push(e)},advance:le,taskCount:function(){return ce.length}},de=function(){function e(t,n,r){o(this,e),this.name=t,this.suiteName=n.name,this.fullName=n.fullName.concat(t),this.runtime=0,this.assertions=[],this.skipped=!!r.skip,this.todo=!!r.todo,this.valid=r.valid,this._startTime=0,this._endTime=0,n.pushTest(this)}return a(e,[{key:"start",value:function(e){return e&&(this._startTime=S.now(),S.mark("qunit_test_start")),{name:this.name,suiteName:this.suiteName,fullName:this.fullName.slice()}}},{key:"end",value:function(e){if(e&&(this._endTime=S.now(),S)){S.mark("qunit_test_end") +var r=Math.floor(ye()*(Y.queue.length-be+1)) +Y.queue.splice(be+r,0,e)}else Y.queue.push(e)},advance:xe,taskCount:function(){return we.length}},_e=function(){function e(t,n,r){o(this,e),this.name=t,this.suiteName=n.name,this.fullName=n.fullName.concat(t),this.runtime=0,this.assertions=[],this.skipped=!!r.skip,this.todo=!!r.todo,this.valid=r.valid,this._startTime=0,this._endTime=0,n.pushTest(this)}return a(e,[{key:"start",value:function(e){return e&&(this._startTime=C.now(),C.mark("qunit_test_start")),{name:this.name,suiteName:this.suiteName,fullName:this.fullName.slice()}}},{key:"end",value:function(e){if(e&&(this._endTime=C.now(),C)){C.mark("qunit_test_end") var t=this.fullName.join(" – ") -S.measure("QUnit Test: ".concat(t),"qunit_test_start","qunit_test_end")}return M(this.start(),{runtime:this.getRuntime(),status:this.getStatus(),errors:this.getFailedAssertions(),assertions:this.getAssertions()})}},{key:"pushAssertion",value:function(e){this.assertions.push(e)}},{key:"getRuntime",value:function(){return Math.round(this._endTime-this._startTime)}},{key:"getStatus",value:function(){return this.skipped?"skipped":(this.getFailedAssertions().length>0?this.todo:!this.todo)?this.todo?"todo":"passed":"failed"}},{key:"getFailedAssertions",value:function(){return this.assertions.filter((function(e){return!e.passed}))}},{key:"getAssertions",value:function(){return this.assertions.slice()}},{key:"slimAssertions",value:function(){this.assertions=this.assertions.map((function(e){return delete e.actual,delete e.expected,e}))}}]),e}() -function pe(e){if(this.expected=null,this.assertions=[],this.module=F.currentModule,this.steps=[],this.timeout=void 0,this.data=void 0,this.withData=!1,this.pauses=new w,this.nextPauseId=1,this.stackOffset=3,M(this,e),this.module.skip?(this.skip=!0,this.todo=!1):this.module.todo&&!this.skip&&(this.todo=!0),he.finished)x.warn("Unexpected test after runEnd. This is unstable and will fail in QUnit 3.0.") +C.measure("QUnit Test: ".concat(t),"qunit_test_start","qunit_test_end")}return O(this.start(),{runtime:this.getRuntime(),status:this.getStatus(),errors:this.getFailedAssertions(),assertions:this.getAssertions()})}},{key:"pushAssertion",value:function(e){this.assertions.push(e)}},{key:"getRuntime",value:function(){return Math.round(this._endTime-this._startTime)}},{key:"getStatus",value:function(){return this.skipped?"skipped":(this.getFailedAssertions().length>0?this.todo:!this.todo)?this.todo?"todo":"passed":"failed"}},{key:"getFailedAssertions",value:function(){return this.assertions.filter((function(e){return!e.passed}))}},{key:"getAssertions",value:function(){return this.assertions.slice()}},{key:"slimAssertions",value:function(){this.assertions=this.assertions.map((function(e){return delete e.actual,delete e.expected,e}))}}]),e}() +function Se(e){if(this.expected=null,this.assertions=[],this.module=Y.currentModule,this.steps=[],this.timeout=void 0,this.data=void 0,this.withData=!1,this.pauses=new w,this.nextPauseId=1,this.stackOffset=3,O(this,e),this.module.skip?(this.skip=!0,this.todo=!1):this.module.todo&&!this.skip&&(this.todo=!0),Ee.finished)k.warn("Unexpected test after runEnd. This is unstable and will fail in QUnit 3.0.") else{if(!this.skip&&"function"!=typeof this.callback){var t=this.todo?"QUnit.todo":"QUnit.test" -throw new TypeError("You must provide a callback to ".concat(t,'("').concat(this.testName,'")'))}++pe.count,this.errorForStack=new Error,this.callback&&this.callback.validTest&&(this.errorForStack.stack=void 0),this.testReport=new de(this.testName,this.module.suiteReport,{todo:this.todo,skip:this.skip,valid:this.valid()}) -for(var n=0,r=this.module.tests;n0&&ge("Test did not finish synchronously even though assert.timeout( 0 ) was used.",J(2))}},after:function(){!function(){var e=F.pollution -ve() -var t=C(F.pollution,e) -t.length>0&&ge("Introduced global variable(s): "+t.join(", ")) -var n=C(e,F.pollution) -n.length>0&&ge("Deleted global variable(s): "+n.join(", "))}()},queueGlobalHook:function(e,t){var n=this +throw new TypeError("You must provide a callback to ".concat(t,'("').concat(this.testName,'")'))}for(var n=0,r=this.module.tests;n0&&Ce("Test did not finish synchronously even though assert.timeout( 0 ) was used.",se(2))}},after:function(){!function(){var e=Y.pollution +Te() +var t=T(Y.pollution,e) +t.length>0&&Ce("Introduced global variable(s): "+t.join(", ")) +var n=T(e,Y.pollution) +n.length>0&&Ce("Deleted global variable(s): "+n.join(", "))}()},queueGlobalHook:function(e,t){var n=this return function(){var r -if(F.current=n,F.notrycatch)r=e.call(n.testEnvironment,n.assert) -else try{r=e.call(n.testEnvironment,n.assert)}catch(e){return void n.pushFailure("Global "+t+" failed on "+n.testName+": "+R(e),V(e,0))}n.resolvePromise(r,t)}},queueHook:function(e,t,n){var r=this,i=function(){var n=e.call(r.testEnvironment,r.assert) +if(Y.current=n,Y.notrycatch)r=e.call(n.testEnvironment,n.assert) +else try{r=e.call(n.testEnvironment,n.assert)}catch(e){return void n.pushFailure("Global "+t+" failed on "+n.testName+": "+I(e),oe(e,0))}n.resolvePromise(r,t)}},queueHook:function(e,t,n){var r=this,i=function(){var n=e.call(r.testEnvironment,r.assert) r.resolvePromise(n,t)} return function(){if("before"===t){if(0!==n.testsRun)return -r.preserveEnvironment=!0}if("after"!==t||function(e){return e.testsRun===Se(e).filter((function(e){return!e.skip})).length-1}(n)||!(F.queue.length>0||he.taskCount()>2))if(F.current=r,F.notrycatch)i() -else try{i()}catch(e){r.pushFailure(t+" failed on "+r.testName+": "+(e.message||e),V(e,0))}}},hooks:function(e){var t=[] -return this.skip||(function(n){if(("beforeEach"===e||"afterEach"===e)&&F.globalHooks[e])for(var r=0;r0||Ee.taskCount()>2))if(Y.current=r,Y.notrycatch)i() +else try{i()}catch(e){r.pushFailure(t+" failed on "+r.testName+": "+(e.message||e),oe(e,0))}}},hooks:function(e){var t=[] +return this.skip||(function(n){if(("beforeEach"===e||"afterEach"===e)&&Y.globalHooks[e])for(var r=0;r Test: "+n+"\n> Message: "+t+"\n")}var r={module:this.module.name,name:this.testName,result:e.result,message:e.message,actual:e.actual,testId:this.testId,negative:e.negative||!1,runtime:Math.round(S.now()-this.started),todo:!!this.todo} -if(E.call(e,"expected")&&(r.expected=e.expected),!e.result){var i=e.source||J() -i&&(r.source=i)}this.logAssertion(r),this.assertions.push({result:!!e.result,message:e.message})},pushFailure:function(e,t,n){if(!(this instanceof pe))throw new Error("pushFailure() assertion outside test context, was "+J(2)) -this.pushResult({result:!1,message:e||"error",actual:n||null,source:t})},logAssertion:function(e){se("log",e) +n.hooks={},t.push.apply(t,c(n.childModules))}return he("suiteEnd",e.suiteReport.end(!0)),me("moduleDone",{name:e.name,tests:e.tests,failed:e.stats.bad,passed:e.stats.all-e.stats.bad,total:e.stats.all,runtime:Math.round(C.now()-e.stats.started)})}(e)}))})),r}})).then((function(){Y.current=void 0}))},preserveTestEnvironment:function(){this.preserveEnvironment&&(this.module.testEnvironment=this.testEnvironment,this.testEnvironment=O({},this.module.testEnvironment))},queue:function(){var e=this +if(this.valid()){var t=Y.storage&&+Y.storage.getItem("qunit-test-"+this.module.name+"-"+this.testName),n=Y.reorder&&!!t +this.previousFailure=!!t,Ee.add((function(){return[function(){return e.before()}].concat(c(e.hooks("before")),[function(){e.preserveTestEnvironment()}],c(e.hooks("beforeEach")),[function(){e.run()}],c(e.hooks("afterEach").reverse()),c(e.hooks("after").reverse()),[function(){e.after()},function(){return e.finish()}])}),n,Y.seed)}else De(this.module)},pushResult:function(e){if(this!==Y.current){var t=e&&e.message||"",n=this&&this.testName||"" +throw new Error("Assertion occurred after test finished.\n> Test: "+n+"\n> Message: "+t+"\n")}var r={module:this.module.name,name:this.testName,result:e.result,message:e.message,actual:e.actual,testId:this.testId,negative:e.negative||!1,runtime:Math.round(C.now()-this.started),todo:!!this.todo} +if(_.call(e,"expected")&&(r.expected=e.expected),!e.result){var i=e.source||se() +i&&(r.source=i)}this.logAssertion(r),this.assertions.push({result:!!e.result,message:e.message})},pushFailure:function(e,t,n){if(!(this instanceof Se))throw new Error("pushFailure() assertion outside test context, was "+se(2)) +this.pushResult({result:!1,message:e||"error",actual:n||null,source:t})},logAssertion:function(e){me("log",e) var t={passed:e.result,actual:e.actual,expected:e.expected,message:e.message,stack:e.source,todo:e.todo} -this.testReport.pushAssertion(t),ne("assertion",t)},internalResetTimeout:function(e){v(F.timeout),F.timeout=g(F.timeoutHandler(e),e)},internalStop:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1 -F.blocking=!0 +this.testReport.pushAssertion(t),he("assertion",t)},internalResetTimeout:function(e){v(Y.timeout),Y.timeout=g(Y.timeoutHandler(e),e)},internalStop:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1 +Y.blocking=!0 var t,n=this,r=this.nextPauseId++,i={cancelled:!1,remaining:e} -function o(){if(!i.cancelled){if(void 0===F.current)throw new Error("Unexpected release of async pause after tests finished.\n"+"> Test: ".concat(n.testName," [async #").concat(r,"]")) -if(F.current!==n)throw new Error("Unexpected release of async pause during a different test.\n"+"> Test: ".concat(n.testName," [async #").concat(r,"]")) +return n.pauses.set(r,i),g&&("number"==typeof n.timeout?t=n.timeout:"number"==typeof Y.testTimeout&&(t=Y.testTimeout),"number"==typeof t&&t>0&&(Y.timeoutHandler=function(e){return function(){Y.timeout=null,i.cancelled=!0,n.pauses.delete(r),n.pushFailure("Test took longer than ".concat(e,"ms; test timed out."),se(2)),Ie(n)}},v(Y.timeout),Y.timeout=g(Y.timeoutHandler(t),t))),function(){if(!i.cancelled){if(void 0===Y.current)throw new Error("Unexpected release of async pause after tests finished.\n"+"> Test: ".concat(n.testName," [async #").concat(r,"]")) +if(Y.current!==n)throw new Error("Unexpected release of async pause during a different test.\n"+"> Test: ".concat(n.testName," [async #").concat(r,"]")) if(i.remaining<=0)throw new Error("Tried to release async pause that was already released.\n"+"> Test: ".concat(n.testName," [async #").concat(r,"]")) -i.remaining--,0===i.remaining&&n.pauses.delete(r),_e(n)}}return n.pauses.set(r,i),g&&("number"==typeof n.timeout?t=n.timeout:"number"==typeof F.testTimeout&&(t=F.testTimeout),"number"==typeof t&&t>0&&(F.timeoutHandler=function(e){return function(){F.timeout=null,i.cancelled=!0,n.pauses.delete(r),n.pushFailure("Test took longer than ".concat(e,"ms; test timed out."),J(2)),_e(n)}},v(F.timeout),F.timeout=g(F.timeoutHandler(t),t))),o},resolvePromise:function(e,t){if(null!=e){var n=this,r=e.then +i.remaining--,0===i.remaining&&n.pauses.delete(r),Ie(n)}}},resolvePromise:function(e,t){if(null!=e){var n=this,r=e.then if("function"==typeof r){var i=n.internalStop(),o=function(){i()} -F.notrycatch?r.call(e,o):r.call(e,o,(function(e){var r="Promise rejected "+(t?t.replace(/Each$/,""):"during")+' "'+n.testName+'": '+(e&&e.message||e) -n.pushFailure(r,V(e,0)),ve(),Ee(n)}))}}},valid:function(){if(this.callback&&this.callback.validTest)return!0 -if(!function e(t,n){return!n||!n.length||T(t.moduleId,n)||t.parentModule&&e(t.parentModule,n)}(this.module,F.moduleId))return!1 -if(F.testId&&F.testId.length&&!T(this.testId,F.testId))return!1 -var e=F.module&&F.module.toLowerCase() +Y.notrycatch?r.call(e,o):r.call(e,o,(function(e){var r="Promise rejected "+(t?t.replace(/Each$/,""):"during")+' "'+n.testName+'": '+(e&&e.message||e) +n.pushFailure(r,oe(e,0)),Te(),Re(n)}))}}},valid:function(){if(this.callback&&this.callback.validTest)return!0 +if(!function e(t,n){return!n||!n.length||j(t.moduleId,n)||t.parentModule&&e(t.parentModule,n)}(this.module,Y.moduleId))return!1 +if(Y.testId&&Y.testId.length&&!j(this.testId,Y.testId))return!1 +var e=Y.module&&Y.module.toLowerCase() if(!function e(t,n){return!n||(t.name?t.name.toLowerCase():null)===n||!!t.parentModule&&e(t.parentModule,n)}(this.module,e))return!1 -var t=F.filter +var t=Y.filter if(!t)return!0 var n=/^(!?)\/([\w\W]*)\/(i?$)/.exec(t),r=this.module.name+": "+this.testName return n?this.regexFilter(!!n[1],n[2],n[3],r):this.stringFilter(t,r)},regexFilter:function(e,t,n,r){return new RegExp(t,n).test(r)!==e},stringFilter:function(e,t){e=e.toLowerCase(),t=t.toLowerCase() var n="!"!==e.charAt(0) return n||(e=e.slice(1)),-1!==t.indexOf(e)?n:!n}} -var me=!1 -function ye(e){me||F.currentModule.ignored||new pe(e).queue()}function be(e){F.currentModule.ignored||(me||(F.queue.length=0,me=!0),new pe(e).queue())}function we(e,t){ye({testName:e,callback:t})}function xe(e,t){return"".concat(e," [").concat(t,"]")}function ke(e,t){if(Array.isArray(e))for(var n=0;n0||(g?(v(F.timeout),F.timeout=g((function(){e.pauses.size>0||(v(F.timeout),F.timeout=null,F.blocking=!1,he.advance())}))):(F.blocking=!1,he.advance()))}function Se(e){for(var t=[].concat(e.tests),n=c(e.childModules);n.length;){var r=n.shift() -t.push.apply(t,r.tests),n.push.apply(n,c(r.childModules))}return t}function Ce(e){return e.testsRun+e.testsIgnored===Se(e).length}function Te(e){for(e.testsIgnored++;e=e.parentModule;)e.testsIgnored++}M(we,{todo:function(e,t){ye({testName:e,callback:t,todo:!0})},skip:function(e){ye({testName:e,skip:!0})},only:function(e,t){be({testName:e,callback:t})},each:function(e,t,n){ke(t,(function(t,r){ye({testName:xe(e,r),callback:n,withData:!0,stackOffset:5,data:t})}))}}),we.todo.each=function(e,t,n){ke(t,(function(t,r){ye({testName:xe(e,r),callback:n,todo:!0,withData:!0,stackOffset:5,data:t})}))},we.skip.each=function(e,t){ke(t,(function(t,n){ye({testName:xe(e,n),stackOffset:5,skip:!0})}))},we.only.each=function(e,t,n){ke(t,(function(t,r){be({testName:xe(e,r),callback:n,withData:!0,stackOffset:5,data:t})}))} -var je,Ne,Me,Oe,qe=function(){function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} -o(this,e),this.log=n.log||Function.prototype.bind.call(p.log,p),t.on("error",this.onError.bind(this)),t.on("runStart",this.onRunStart.bind(this)),t.on("testStart",this.onTestStart.bind(this)),t.on("testEnd",this.onTestEnd.bind(this)),t.on("runEnd",this.onRunEnd.bind(this))}return a(e,[{key:"onError",value:function(e){this.log("error",e)}},{key:"onRunStart",value:function(e){this.log("runStart",e)}},{key:"onTestStart",value:function(e){this.log("testStart",e)}},{key:"onTestEnd",value:function(e){this.log("testEnd",e)}},{key:"onRunEnd",value:function(e){this.log("runEnd",e)}}],[{key:"init",value:function(t,n){return new e(t,n)}}]),e}(),Ae=!0 -if("undefined"!=typeof process){var Re=process.env -je=Re.FORCE_COLOR,Ne=Re.NODE_DISABLE_COLORS,Me=Re.NO_COLOR,Oe=Re.TERM,Ae=process.stdout&&process.stdout.isTTY}var Ie={enabled:!Ne&&null==Me&&"dumb"!==Oe&&(null!=je&&"0"!==je||Ae),reset:Pe(0,0),bold:Pe(1,22),dim:Pe(2,22),italic:Pe(3,23),underline:Pe(4,24),inverse:Pe(7,27),hidden:Pe(8,28),strikethrough:Pe(9,29),black:Pe(30,39),red:Pe(31,39),green:Pe(32,39),yellow:Pe(33,39),blue:Pe(34,39),magenta:Pe(35,39),cyan:Pe(36,39),white:Pe(37,39),gray:Pe(90,39),grey:Pe(90,39),bgBlack:Pe(40,49),bgRed:Pe(41,49),bgGreen:Pe(42,49),bgYellow:Pe(43,49),bgBlue:Pe(44,49),bgMagenta:Pe(45,49),bgCyan:Pe(46,49),bgWhite:Pe(47,49)} -function Fe(e,t){for(var n,r=0,i="",o="";r1&&void 0!==arguments[1]?arguments[1]:4 +for(var r in e)t(e[r],r)}}function Re(e){e.pauses.forEach((function(e){e.cancelled=!0})),e.pauses.clear(),Ie(e)}function Ie(e){e.pauses.size>0||(g?(v(Y.timeout),Y.timeout=g((function(){e.pauses.size>0||(v(Y.timeout),Y.timeout=null,Y.blocking=!1,Ee.advance())}))):(Y.blocking=!1,Ee.advance()))}function Fe(e){for(var t=[].concat(e.tests),n=c(e.childModules);n.length;){var r=n.shift() +t.push.apply(t,r.tests),n.push.apply(n,c(r.childModules))}return t}function Pe(e){return e.testsRun+e.testsIgnored===Fe(e).length}function De(e){for(e.testsIgnored++;e=e.parentModule;)e.testsIgnored++}O(Oe,{todo:function(e,t){Ne({testName:e,callback:t,todo:!0})},skip:function(e){Ne({testName:e,skip:!0})},only:function(e,t){Me({testName:e,callback:t})},each:function(e,t,n){Ae(t,(function(t,r){Ne({testName:qe(e,r),callback:n,withData:!0,stackOffset:5,data:t})}))}}),Oe.todo.each=function(e,t,n){Ae(t,(function(t,r){Ne({testName:qe(e,r),callback:n,todo:!0,withData:!0,stackOffset:5,data:t})}))},Oe.skip.each=function(e,t){Ae(t,(function(t,n){Ne({testName:qe(e,n),stackOffset:5,skip:!0})}))},Oe.only.each=function(e,t,n){Ae(t,(function(t,r){Me({testName:qe(e,r),callback:n,withData:!0,stackOffset:5,data:t})}))} +var Le,Be,Ue,He,ze=function(){function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} +o(this,e),this.log=n.log||Function.prototype.bind.call(p.log,p),t.on("error",this.onError.bind(this)),t.on("runStart",this.onRunStart.bind(this)),t.on("testStart",this.onTestStart.bind(this)),t.on("testEnd",this.onTestEnd.bind(this)),t.on("runEnd",this.onRunEnd.bind(this))}return a(e,[{key:"onError",value:function(e){this.log("error",e)}},{key:"onRunStart",value:function(e){this.log("runStart",e)}},{key:"onTestStart",value:function(e){this.log("testStart",e)}},{key:"onTestEnd",value:function(e){this.log("testEnd",e)}},{key:"onRunEnd",value:function(e){this.log("runEnd",e)}}],[{key:"init",value:function(t,n){return new e(t,n)}}]),e}(),$e=!0 +if("undefined"!=typeof process){var Qe=process.env||{} +Le=Qe.FORCE_COLOR,Be=Qe.NODE_DISABLE_COLORS,Ue=Qe.NO_COLOR,He=Qe.TERM,$e=process.stdout&&process.stdout.isTTY}var Ge={enabled:!Be&&null==Ue&&"dumb"!==He&&(null!=Le&&"0"!==Le||$e),reset:We(0,0),bold:We(1,22),dim:We(2,22),italic:We(3,23),underline:We(4,24),inverse:We(7,27),hidden:We(8,28),strikethrough:We(9,29),black:We(30,39),red:We(31,39),green:We(32,39),yellow:We(33,39),blue:We(34,39),magenta:We(35,39),cyan:We(36,39),white:We(37,39),gray:We(90,39),grey:We(90,39),bgBlack:We(40,49),bgRed:We(41,49),bgGreen:We(42,49),bgYellow:We(43,49),bgBlue:We(44,49),bgMagenta:We(45,49),bgCyan:We(46,49),bgWhite:We(47,49)} +function Ye(e,t){for(var n,r=0,i="",o="";r1&&void 0!==arguments[1]?arguments[1]:4 if(void 0===e&&(e=String(e)),"number"!=typeof e||isFinite(e)||(e=String(e)),"number"==typeof e)return JSON.stringify(e) -if("string"==typeof e){var n=/['"\\/[{}\]\r\n]/,r=/[-?:,[\]{}#&*!|=>'"%@`]/,i=/(^\s|\s$)/,o=/^[\d._-]+$/,s=/^(true|false|y|n|yes|no|on|off)$/i -if(""===e||n.test(e)||r.test(e[0])||i.test(e)||o.test(e)||s.test(e)){if(!/\n/.test(e))return JSON.stringify(e) -var a=new Array(t+1).join(" "),u=e.match(/\n+$/),c=u?u[0].length:0 -if(1===c){var l=e.replace(/\n$/,"").split("\n").map((function(e){return a+e})) -return"|\n"+l.join("\n")}var f=e.split("\n").map((function(e){return a+e})) -return"|+\n"+f.join("\n")}return e}return JSON.stringify(Be(e),null,2)}function Be(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[] -if(-1!==t.indexOf(e))return"[Circular]" -var n,r=Object.prototype.toString.call(e).replace(/^\[.+\s(.+?)]$/,"$1").toLowerCase() -switch(r){case"array":t.push(e),n=e.map((function(e){return Be(e,t)})),t.pop() +if("string"==typeof e){if(""===e||/['"\\/[{}\]\r\n]/.test(e)||/[-?:,[\]{}#&*!|=>'"%@`]/.test(e[0])||/(^\s|\s$)/.test(e)||/^[\d._-]+$/.test(e)||/^(true|false|y|n|yes|no|on|off)$/i.test(e)){if(!/\n/.test(e))return JSON.stringify(e) +var n=new Array(t+1).join(" "),r=e.match(/\n+$/) +return 1===(r?r[0].length:0)?"|\n"+e.replace(/\n$/,"").split("\n").map((function(e){return n+e})).join("\n"):"|+\n"+e.split("\n").map((function(e){return n+e})).join("\n")}return e}return JSON.stringify(Xe(e),null,2)}function Xe(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[] +if(-1!==n.indexOf(e))return"[Circular]" +switch(Object.prototype.toString.call(e).replace(/^\[.+\s(.+?)]$/,"$1").toLowerCase()){case"array":n.push(e),t=e.map((function(e){return Xe(e,n)})),n.pop() break -case"object":t.push(e),n={},Object.keys(e).forEach((function(r){n[r]=Be(e[r],t)})),t.pop() +case"object":n.push(e),t={},Object.keys(e).forEach((function(r){t[r]=Xe(e[r],n)})),n.pop() break -default:n=e}return n}var Ue=function(){function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} -o(this,e),this.log=n.log||Function.prototype.bind.call(p.log,p),this.testCount=0,this.ended=!1,this.bailed=!1,t.on("error",this.onError.bind(this)),t.on("runStart",this.onRunStart.bind(this)),t.on("testEnd",this.onTestEnd.bind(this)),t.on("runEnd",this.onRunEnd.bind(this))}return a(e,[{key:"onRunStart",value:function(e){this.log("TAP version 13")}},{key:"onError",value:function(e){this.bailed||(this.bailed=!0,this.ended||(this.testCount=this.testCount+1,this.log(Ie.red("not ok ".concat(this.testCount," global failure"))),this.logError(e)),this.log("Bail out! "+R(e).split("\n")[0]),this.ended&&this.logError(e))}},{key:"onTestEnd",value:function(e){var t=this -this.testCount=this.testCount+1,"passed"===e.status?this.log("ok ".concat(this.testCount," ").concat(e.fullName.join(" > "))):"skipped"===e.status?this.log(Ie.yellow("ok ".concat(this.testCount," # SKIP ").concat(e.fullName.join(" > ")))):"todo"===e.status?(this.log(Ie.cyan("not ok ".concat(this.testCount," # TODO ").concat(e.fullName.join(" > ")))),e.errors.forEach((function(e){return t.logAssertion(e,"todo")}))):(this.log(Ie.red("not ok ".concat(this.testCount," ").concat(e.fullName.join(" > ")))),e.errors.forEach((function(e){return t.logAssertion(e)})))}},{key:"onRunEnd",value:function(e){this.ended=!0,this.log("1..".concat(e.testCounts.total)),this.log("# pass ".concat(e.testCounts.passed)),this.log(Ie.yellow("# skip ".concat(e.testCounts.skipped))),this.log(Ie.cyan("# todo ".concat(e.testCounts.todo))),this.log(Ie.red("# fail ".concat(e.testCounts.failed)))}},{key:"logAssertion",value:function(e,t){var n=" ---" -n+="\n message: ".concat(Le(e.message||"failed")),n+="\n severity: ".concat(Le(t||"failed")),De.call(e,"actual")&&(n+="\n actual : ".concat(Le(e.actual))),De.call(e,"expected")&&(n+="\n expected: ".concat(Le(e.expected))),e.stack&&(n+="\n stack: ".concat(Le(e.stack+"\n"))),n+="\n ...",this.log(n)}},{key:"logError",value:function(e){var t=" ---" -t+="\n message: ".concat(Le(R(e))),t+="\n severity: ".concat(Le("failed")),e&&e.stack&&(t+="\n stack: ".concat(Le(e.stack+"\n"))),t+="\n ...",this.log(t)}}],[{key:"init",value:function(t,n){return new e(t,n)}}]),e}(),He={console:qe,tap:Ue} -function ze(e){return function(t){F.globalHooks[e]||(F.globalHooks[e]=[]),F.globalHooks[e].push(t)}}var $e={beforeEach:ze("beforeEach"),afterEach:ze("afterEach")} -function Qe(e){F.current?F.current.assert.pushResult({result:!1,message:"global failure: ".concat(R(e)),source:e&&e.stack||J(2)}):(U.globalFailureCount++,F.stats.bad++,F.stats.all++,ne("error",e))}var Ge={} -F.currentModule.suiteReport=U -var We=!1,Ye=!1 -function Ve(){Ye=!0,g?g((function(){Xe()})):Xe()}function Je(){F.blocking=!1,he.advance()}function Xe(){if(F.started)Je() -else{F.started=S.now(),""===F.modules[0].name&&0===F.modules[0].tests.length&&F.modules.shift() -for(var e=[],t=0;t1&&void 0!==arguments[1]?arguments[1]:{} +o(this,e),this.log=n.log||Function.prototype.bind.call(p.log,p),this.testCount=0,this.ended=!1,this.bailed=!1,t.on("error",this.onError.bind(this)),t.on("runStart",this.onRunStart.bind(this)),t.on("testEnd",this.onTestEnd.bind(this)),t.on("runEnd",this.onRunEnd.bind(this))}return a(e,[{key:"onRunStart",value:function(e){this.log("TAP version 13")}},{key:"onError",value:function(e){this.bailed||(this.bailed=!0,this.ended||(this.testCount=this.testCount+1,this.log(Ge.red("not ok ".concat(this.testCount," global failure"))),this.logError(e)),this.log("Bail out! "+I(e).split("\n")[0]),this.ended&&this.logError(e))}},{key:"onTestEnd",value:function(e){var t=this +this.testCount=this.testCount+1,"passed"===e.status?this.log("ok ".concat(this.testCount," ").concat(e.fullName.join(" > "))):"skipped"===e.status?this.log(Ge.yellow("ok ".concat(this.testCount," # SKIP ").concat(e.fullName.join(" > ")))):"todo"===e.status?(this.log(Ge.cyan("not ok ".concat(this.testCount," # TODO ").concat(e.fullName.join(" > ")))),e.errors.forEach((function(e){return t.logAssertion(e,"todo")}))):(this.log(Ge.red("not ok ".concat(this.testCount," ").concat(e.fullName.join(" > ")))),e.errors.forEach((function(e){return t.logAssertion(e)})))}},{key:"onRunEnd",value:function(e){this.ended=!0,this.log("1..".concat(e.testCounts.total)),this.log("# pass ".concat(e.testCounts.passed)),this.log(Ge.yellow("# skip ".concat(e.testCounts.skipped))),this.log(Ge.cyan("# todo ".concat(e.testCounts.todo))),this.log(Ge.red("# fail ".concat(e.testCounts.failed)))}},{key:"logAssertion",value:function(e,t){var n=" ---" +n+="\n message: ".concat(Je(e.message||"failed")),n+="\n severity: ".concat(Je(t||"failed")),Ve.call(e,"actual")&&(n+="\n actual : ".concat(Je(e.actual))),Ve.call(e,"expected")&&(n+="\n expected: ".concat(Je(e.expected))),e.stack&&(n+="\n stack: ".concat(Je(e.stack+"\n"))),n+="\n ...",this.log(n)}},{key:"logError",value:function(e){var t=" ---" +t+="\n message: ".concat(Je(I(e))),t+="\n severity: ".concat(Je("failed")),e&&e.stack&&(t+="\n stack: ".concat(Je(e.stack+"\n"))),t+="\n ...",this.log(t)}}],[{key:"init",value:function(t,n){return new e(t,n)}}]),e}(),Ke={console:ze,tap:Ze} +function et(e){return function(t){Y.globalHooks[e]||(Y.globalHooks[e]=[]),Y.globalHooks[e].push(t)}}var tt={beforeEach:et("beforeEach"),afterEach:et("afterEach")} +function nt(e){Y.current?Y.current.assert.pushResult({result:!1,message:"global failure: ".concat(I(e)),source:e&&e.stack||se(2)}):(Z.globalFailureCount++,Y.stats.bad++,Y.stats.all++,he("error",e))}var rt={} +Y.currentModule.suiteReport=Z +var it=!1,ot=!1 +function st(){ot=!0,g?g((function(){ut()})):ut()}function at(){Y.blocking=!1,Ee.advance()}function ut(){if(Y.started)at() +else{Y.started=C.now(),""===Y.modules[0].name&&0===Y.modules[0].tests.length&&Y.modules.shift() +for(var e=[],t=0;t1)throw new Error("Called start() outside of a test context too many times") -if(F.autostart)throw new Error("Called start() outside of a test context when QUnit.config.autostart was true") -if(!F.pageLoaded)return F.autostart=!0,void(m||Ge.load()) -Ve()},onUnhandledRejection:function(e){x.warn("QUnit.onUnhandledRejection is deprecated and will be removed in QUnit 3.0. Please use QUnit.onUncaughtException instead."),Qe(e)},extend:function(){x.warn("QUnit.extend is deprecated and will be removed in QUnit 3.0. Please use Object.assign instead.") +if(Y.autostart)throw new Error("Called start() outside of a test context when QUnit.config.autostart was true") +if(!Y.pageLoaded)return Y.autostart=!0,void(m||rt.load()) +st()},onUnhandledRejection:function(e){k.warn("QUnit.onUnhandledRejection is deprecated and will be removed in QUnit 3.0. Please use QUnit.onUncaughtException instead."),nt(e)},extend:function(){k.warn("QUnit.extend is deprecated and will be removed in QUnit 3.0. Please use Object.assign instead.") for(var e=arguments.length,t=new Array(e),n=0;n=65&&a<=90,c=u||a>=97&&a<=122||a>=48&&a<=57,l=u&&!i||!o||!c i=u,o=c,l&&(n[r++]=s)}return n},prepareNextBeginningIndexes:function(e){for(var t=e.length,n=p.prepareBeginningIndexes(e),r=[],i=n[0],o=0,s=0;ss?r[s]=i:(i=n[++o],r[s]=void 0===i?t:i) return r},cleanup:u,new:t} -return p}()},e.exports?e.exports=n():t.fuzzysort=n()}(Ze) -var Ke=Ze.exports,et={failedTests:[],defined:0,completed:0} -function tt(e){return e?(""+e).replace(/['"<>&]/g,(function(e){switch(e){case"'":return"'" +return p}()},e.exports?e.exports=n():t.fuzzysort=n()}(ct) +var lt=ct.exports,ft={failedTests:[],defined:0,completed:0} +function ht(e){return e?(""+e).replace(/['"<>&]/g,(function(e){switch(e){case"'":return"'" case'"':return""" case"<":return"<" case">":return">" -case"&":return"&"}})):""}!function(){if(d&&m){var e=Ge.config,t=[],n=!1,r=Object.prototype.hasOwnProperty,i=j({filter:void 0,module:void 0,moduleId:void 0,testId:void 0}),o=null -Ge.on("runStart",(function(e){et.defined=e.testCounts.total})),Ge.begin((function(t){!function(t){var n,s,a,u,l,f,p,b,E=_("qunit") -E&&(E.setAttribute("role","main"),E.innerHTML="

"+tt(m.title)+"

"+(!(n=Ge.config.testId)||n.length<=0?"":"
Rerunning selected tests: "+tt(n.join(", "))+" Run all tests
")+"

    "),(s=_("qunit-header"))&&(s.innerHTML=""+s.innerHTML+" "),(a=_("qunit-banner"))&&(a.className=""),p=_("qunit-tests"),(b=_("qunit-testresult"))&&b.parentNode.removeChild(b),p&&(p.innerHTML="",(b=m.createElement("p")).id="qunit-testresult",b.className="result",p.parentNode.insertBefore(b,p),b.innerHTML='
    Running...
     
    ',l=_("qunit-testresult-controls")),l&&l.appendChild(((f=m.createElement("button")).id="qunit-abort-tests-button",f.innerHTML="Abort",h(f,"click",S),f)),(u=_("qunit-userAgent"))&&(u.innerHTML="",u.appendChild(m.createTextNode("QUnit "+Ge.version+"; "+y.userAgent))),function(t){var n,i,s,a,u,l=_("qunit-testrunner-toolbar") +case"&":return"&"}})):""}!function(){if(d&&m){var e=rt.config,t=[],n=!1,r=Object.prototype.hasOwnProperty,i=j({filter:void 0,module:void 0,moduleId:void 0,testId:void 0}),o=null +rt.on("runStart",(function(e){ft.defined=e.testCounts.total})),rt.begin((function(t){!function(t){var n,s,a,u,l,f,p,b,E=_("qunit") +E&&(E.setAttribute("role","main"),E.innerHTML="

    "+ht(m.title)+"

    "+(!(n=rt.config.testId)||n.length<=0?"":"
    Rerunning selected tests: "+ht(n.join(", "))+" Run all tests
    ")+"

      "),(s=_("qunit-header"))&&(s.innerHTML=""+s.innerHTML+" "),(a=_("qunit-banner"))&&(a.className=""),p=_("qunit-tests"),(b=_("qunit-testresult"))&&b.parentNode.removeChild(b),p&&(p.innerHTML="",(b=m.createElement("p")).id="qunit-testresult",b.className="result",p.parentNode.insertBefore(b,p),b.innerHTML='
      Running...
       
      ',l=_("qunit-testresult-controls")),l&&l.appendChild(((f=m.createElement("button")).id="qunit-abort-tests-button",f.innerHTML="Abort",h(f,"click",S),f)),(u=_("qunit-userAgent"))&&(u.innerHTML="",u.appendChild(m.createTextNode("QUnit "+rt.version+"; "+y.userAgent))),function(t){var n,i,s,a,u,l=_("qunit-testrunner-toolbar") if(l){l.appendChild(((u=m.createElement("span")).innerHTML=function(){for(var t=!1,n=e.urlConfig,i="",o=0;o"+s.label+": "}else i+=""}return i}(),x(u,"qunit-url-config"),v(u.getElementsByTagName("input"),"change",T),v(u.getElementsByTagName("select"),"change",T),u)) +var a=ht(s.id),u=ht(s.tooltip) +if(s.value&&"string"!=typeof s.value){if(i+=""}else i+=""}return i}(),x(u,"qunit-url-config"),v(u.getElementsByTagName("input"),"change",T),v(u.getElementsByTagName("select"),"change",T),u)) var f=m.createElement("span") f.id="qunit-toolbar-filters",f.appendChild((n=m.createElement("form"),i=m.createElement("label"),s=m.createElement("input"),a=m.createElement("button"),x(n,"qunit-filter"),i.innerHTML="Filter: ",s.type="text",s.value=e.filter||"",s.name="filter",s.id="qunit-filter-input",a.innerHTML="Go",i.appendChild(s),n.appendChild(i),n.appendChild(m.createTextNode(" ")),n.appendChild(a),h(n,"submit",C),n)),f.appendChild(function(t){var n=null if(o={options:t.modules.slice(),selectedMap:new w,isDirty:function(){return c(o.selectedMap.keys()).sort().join(",")!==c(n.keys()).sort().join(",")}},e.moduleId.length)for(var r=0;r","",u," assertions of ",e.stats.all," passed, ",e.stats.bad," failed.",A(et.failedTests)].join("") +p.className="clearfix",l.appendChild(f),l.appendChild(p)}}(t)}(t)})),rt.on("runEnd",(function(t){var n,r,i,o=_("qunit-banner"),s=_("qunit-tests"),a=_("qunit-abort-tests-button"),u=e.stats.all-e.stats.bad,c=[t.testCounts.total," tests completed in ",t.runtime," milliseconds, with ",t.testCounts.failed," failed, ",t.testCounts.skipped," skipped, and ",t.testCounts.todo," todo.
      ","",u," assertions of ",e.stats.all," passed, ",e.stats.bad," failed.",A(ft.failedTests)].join("") if(a&&a.disabled){c="Tests aborted after "+t.runtime+" milliseconds." -for(var l=0;l":"Running: ",I(e.name,e.module),A(et.failedTests)].join(""))})),Ge.log((function(e){var t=_("qunit-test-output-"+e.testId) -if(t){var n,i,o,s=tt(e.message)||(e.result?"okay":"failed") +for(var l=0;l":"Running: ",R(e.name,e.module),A(ft.failedTests)].join(""))})),rt.log((function(e){var t=_("qunit-test-output-"+e.testId) +if(t){var n,i,o,s=ht(e.message)||(e.result?"okay":"failed") s=""+s+"",s+="@ "+e.runtime+" ms" var a=!1 -!e.result&&r.call(e,"expected")?(n=e.negative?"NOT "+Ge.dump.parse(e.expected):Ge.dump.parse(e.expected),i=Ge.dump.parse(e.actual),s+="",i!==n?(s+="","number"==typeof e.actual&&"number"==typeof e.expected?isNaN(e.actual)||isNaN(e.expected)||(a=!0,o=((o=e.actual-e.expected)>0?"+":"")+o):"boolean"!=typeof e.actual&&"boolean"!=typeof e.expected&&(a=P(o=Ge.diff(n,i)).length!==P(n).length+P(i).length),a&&(s+="")):-1!==n.indexOf("[object Array]")||-1!==n.indexOf("[object Object]")?s+="":s+="",e.source&&(s+=""),s+="
      Expected:
      "+tt(n)+"
      Result:
      "+tt(i)+"
      Diff:
      "+o+"
      Message: Diff suppressed as the depth of object is more than current max depth ("+Ge.config.maxDepth+").

      Hint: Use QUnit.dump.maxDepth to run with a higher max depth or Rerun without max depth.

      Message: Diff suppressed as the expected and actual results have an equivalent serialization
      Source:
      "+tt(e.source)+"
      "):!e.result&&e.source&&(s+="
      Source:
      "+tt(e.source)+"
      ") +!e.result&&r.call(e,"expected")?(n=e.negative?"NOT "+rt.dump.parse(e.expected):rt.dump.parse(e.expected),i=rt.dump.parse(e.actual),s+="",i!==n?(s+="","number"==typeof e.actual&&"number"==typeof e.expected?isNaN(e.actual)||isNaN(e.expected)||(a=!0,o=((o=e.actual-e.expected)>0?"+":"")+o):"boolean"!=typeof e.actual&&"boolean"!=typeof e.expected&&(a=P(o=rt.diff(n,i)).length!==P(n).length+P(i).length),a&&(s+="")):-1!==n.indexOf("[object Array]")||-1!==n.indexOf("[object Object]")?s+="":s+="",e.source&&(s+=""),s+="
      Expected:
      "+ht(n)+"
      Result:
      "+ht(i)+"
      Diff:
      "+o+"
      Message: Diff suppressed as the depth of object is more than current max depth ("+rt.config.maxDepth+").

      Hint: Use QUnit.dump.maxDepth to run with a higher max depth or Rerun without max depth.

      Message: Diff suppressed as the expected and actual results have an equivalent serialization
      Source:
      "+ht(e.source)+"
      "):!e.result&&e.source&&(s+="
      Source:
      "+ht(e.source)+"
      ") var u=t.getElementsByTagName("ol")[0],c=m.createElement("li") -c.className=e.result?"pass":"fail",c.innerHTML=s,u.appendChild(c)}})),Ge.testDone((function(r){var i=_("qunit-tests"),o=_("qunit-test-output-"+r.testId) +c.className=e.result?"pass":"fail",c.innerHTML=s,u.appendChild(c)}})),rt.testDone((function(r){var i=_("qunit-tests"),o=_("qunit-test-output-"+r.testId) if(i&&o){var s E(o,"running"),s=r.failed>0?"failed":r.todo?"todo":r.skipped?"skipped":"passed" var a=o.getElementsByTagName("ol")[0],u=r.passed,c=r.failed,l=r.failed>0?r.todo:!r.todo -l?x(a,"qunit-collapsed"):(et.failedTests.push(r.testId),e.collapse&&(n?x(a,"qunit-collapsed"):n=!0)) +l?x(a,"qunit-collapsed"):(ft.failedTests.push(r.testId),e.collapse&&(n?x(a,"qunit-collapsed"):n=!0)) var f=o.firstChild,d=c?""+c+", "+u+", ":"" -if(f.innerHTML+=" ("+d+r.assertions.length+")",et.completed++,r.skipped){o.className="skipped" +if(f.innerHTML+=" ("+d+r.assertions.length+")",ft.completed++,r.skipped){o.className="skipped" var p=m.createElement("em") p.className="qunit-skipped-label",p.innerHTML="skipped",o.insertBefore(p,f)}else{if(h(f,"click",(function(){k(a,"qunit-collapsed")})),o.className=l?"pass":"fail",r.todo){var g=m.createElement("em") g.className="qunit-todo-label",g.innerHTML="todo",o.className+=" todo",o.insertBefore(g,f)}var v=m.createElement("span") v.className="runtime",v.innerHTML=r.runtime+" ms",o.insertBefore(v,a)}if(r.source){var y=m.createElement("p") -y.innerHTML="Source: "+tt(r.source),x(y,"qunit-source"),l&&x(y,"qunit-collapsed"),h(f,"click",(function(){k(y,"qunit-collapsed")})),o.appendChild(y)}e.hidepassed&&("passed"===s||r.skipped)&&(t.push(o),i.removeChild(o))}})),Ge.on("error",(function(e){var t=q("global failure") -if(t){var n=tt(R(e)) -n=""+n+"",e&&e.stack&&(n+="
      Source:
      "+tt(e.stack)+"
      ") +y.innerHTML="Source: "+ht(r.source),x(y,"qunit-source"),l&&x(y,"qunit-collapsed"),h(f,"click",(function(){k(y,"qunit-collapsed")})),o.appendChild(y)}e.hidepassed&&("passed"===s||r.skipped)&&(t.push(o),i.removeChild(o))}})),rt.on("error",(function(e){var t=q("global failure") +if(t){var n=ht(I(e)) +n=""+n+"",e&&e.stack&&(n+="
      Source:
      "+ht(e.stack)+"
      ") var r=t.getElementsByTagName("ol")[0],i=m.createElement("li") i.className="fail",i.innerHTML=n,r.appendChild(i),t.className="fail"}})) var s,a=(s=d.phantom)&&s.version&&s.version.major>0 -a&&p.warn("Support for PhantomJS is deprecated and will be removed in QUnit 3.0."),a||"complete"!==m.readyState?h(d,"load",Ge.load):Ge.load() +a&&p.warn("Support for PhantomJS is deprecated and will be removed in QUnit 3.0."),a||"complete"!==m.readyState?h(d,"load",rt.load):rt.load() var u=d.onerror d.onerror=function(t,n,r,i,o){var s=!1 if(u){for(var a=arguments.length,c=new Array(a>5?a-5:0),l=5;l=0}function x(e,t){b(e,t)||(e.className+=(e.className?" ":"")+t)}function k(e,t,n){n||void 0===n&&!b(e,t)?x(e,t):E(e,t)}function E(e,t){for(var n=" "+e.className+" ";n.indexOf(" "+t+" ")>=0;)n=n.replace(" "+t+" "," ") +!f.stack&&n&&r&&(f.stack="".concat(n,":").concat(r)),rt.onUncaughtException(f)}return s},d.addEventListener("unhandledrejection",(function(e){rt.onUncaughtException(e.reason)}))}function f(e){return"function"==typeof e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}function h(e,t,n){e.addEventListener(t,n,!1)}function g(e,t,n){e.removeEventListener(t,n,!1)}function v(e,t,n){for(var r=e.length;r--;)h(e[r],t,n)}function b(e,t){return(" "+e.className+" ").indexOf(" "+t+" ")>=0}function x(e,t){b(e,t)||(e.className+=(e.className?" ":"")+t)}function k(e,t,n){n||void 0===n&&!b(e,t)?x(e,t):E(e,t)}function E(e,t){for(var n=" "+e.className+" ";n.indexOf(" "+t+" ")>=0;)n=n.replace(" "+t+" "," ") e.className=f(n)}function _(e){return m.getElementById&&m.getElementById(e)}function S(){var e=_("qunit-abort-tests-button") -return e&&(e.disabled=!0,e.innerHTML="Aborting..."),Ge.config.queue.length=0,!1}function C(e){var t=_("qunit-filter-input") +return e&&(e.disabled=!0,e.innerHTML="Aborting..."),rt.config.queue.length=0,!1}function C(e){var t=_("qunit-filter-input") return t.value=f(t.value),N(),e&&e.preventDefault&&e.preventDefault(),!1}function T(){var n,r=this,i={} n="selectedIndex"in r?r.options[r.selectedIndex].value||void 0:r.checked?r.defaultValue||!0:void 0,i[r.name]=n var o=j(i) -if("hidepassed"===r.name&&"replaceState"in d.history){Ge.urlParams[r.name]=n,e[r.name]=n||!1 +if("hidepassed"===r.name&&"replaceState"in d.history){rt.urlParams[r.name]=n,e[r.name]=n||!1 var s=_("qunit-tests") if(s){var a=s.children.length,u=s.children if(r.checked){for(var c=0;c-1,g=h.indexOf("skipped")>-1;(p||g)&&t.push(f)}var v,m=function(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"] @@ -508,26 +563,33 @@ return{s:function(){n=n.call(e)},n:function(){var e=n.next() return s=e.done,e},e:function(e){a=!0,o=e},f:function(){try{s||null==n.return||n.return()}finally{if(a)throw o}}}}(t) try{for(m.s();!(v=m.n()).done;){var y=v.value s.removeChild(y)}}catch(e){m.e(e)}finally{m.f()}}else for(var b;null!=(b=t.pop());)s.appendChild(b)}d.history.replaceState(null,"",o)}else d.location=o}function j(e){var t="?",n=d.location -for(var i in e=M(M({},Ge.urlParams),e))if(r.call(e,i)&&void 0!==e[i])for(var o=[].concat(e[i]),s=0;s"}function q(e,t,n){var r=_("qunit-tests") +d.location=j({filter:""===e?void 0:e,moduleId:c(o.selectedMap.keys()),module:void 0,testId:void 0})}function M(e,t,n){return'
    1. "}function q(e,t,n){var r=_("qunit-tests") if(r){var i=m.createElement("strong") -i.innerHTML=I(e,n) +i.innerHTML=R(e,n) var o=m.createElement("li") if(o.appendChild(i),void 0!==t){var s=m.createElement("a") s.innerHTML="Rerun",s.href=j({testId:t}),o.id="qunit-test-output-"+t,o.appendChild(s)}var a=m.createElement("ol") -return a.className="qunit-assert-list",o.appendChild(a),r.appendChild(o),o}}function A(e){return 0===e.length?"":["
      ",1===e.length?"Rerun 1 failed test":"Rerun "+e.length+" failed tests",""].join("")}function I(e,t){var n="" -return t&&(n=""+tt(t)+": "),n+""+tt(e)+""}function F(e){return[e.completed," / ",e.defined," tests completed.
      "].join("")}function P(e){return e.replace(/<\/?[^>]+(>|$)/g,"").replace(/"/g,"").replace(/\s+/g,"")}}(),Ge.diff=function(){function e(){}var t=-1,n=Object.prototype.hasOwnProperty -return e.prototype.DiffMain=function(e,t,n){var r,i,o,s,a,u -if(r=(new Date).getTime()+1e3,null===e||null===t)throw new Error("Null input. (DiffMain)") -return e===t?e?[[0,e]]:[]:(void 0===n&&(n=!0),i=n,o=this.diffCommonPrefix(e,t),s=e.substring(0,o),e=e.substring(o),t=t.substring(o),o=this.diffCommonSuffix(e,t),a=e.substring(e.length-o),e=e.substring(0,e.length-o),t=t.substring(0,t.length-o),u=this.diffCompute(e,t,i,r),s&&u.unshift([0,s]),a&&u.push([0,a]),this.diffCleanupMerge(u),u)},e.prototype.diffCleanupEfficiency=function(e){var n,r,i,o,s,a,u,c,l +return a.className="qunit-assert-list",o.appendChild(a),r.appendChild(o),o}}function A(e){return 0===e.length?"":["
      ",1===e.length?"Rerun 1 failed test":"Rerun "+e.length+" failed tests",""].join("")}function R(e,t){var n="" +return t&&(n=""+ht(t)+": "),n+""+ht(e)+""}function F(e){return[e.completed," / ",e.defined," tests completed.
      "].join("")}function P(e){return e.replace(/<\/?[^>]+(>|$)/g,"").replace(/"/g,"").replace(/\s+/g,"")}}(),rt.diff=function(){function e(){}var t=-1,n=Object.prototype.hasOwnProperty +return e.prototype.DiffMain=function(e,t,n){var r=Date.now()+1e3 +if(null===e||null===t)throw new Error("Cannot diff null input.") +if(e===t)return e?[[0,e]]:[] +void 0===n&&(n=!0) +var i=this.diffCommonPrefix(e,t),o=e.substring(0,i) +e=e.substring(i),t=t.substring(i),i=this.diffCommonSuffix(e,t) +var s=e.substring(e.length-i) +e=e.substring(0,e.length-i),t=t.substring(0,t.length-i) +var a=this.diffCompute(e,t,n,r) +return o&&a.unshift([0,o]),s&&a.push([0,s]),this.diffCleanupMerge(a),a},e.prototype.diffCleanupEfficiency=function(e){var n,r,i,o,s,a,u,c,l for(n=!1,r=[],i=0,o=null,s=0,a=!1,u=!1,c=!1,l=!1;s0?r[i-1]:-1,c=l=!1),n=!0)),s++ n&&this.diffCleanupMerge(e)},e.prototype.diffPrettyHtml=function(e){for(var n=[],r=0;r" +switch(i){case 1:n[r]=""+ht(o)+"" break -case t:n[r]=""+tt(o)+"" +case t:n[r]=""+ht(o)+"" break -case 0:n[r]=""+tt(o)+""}}return n.join("")},e.prototype.diffCommonPrefix=function(e,t){var n,r,i,o +case 0:n[r]=""+ht(o)+""}}return n.join("")},e.prototype.diffCommonPrefix=function(e,t){var n,r,i,o if(!e||!t||e.charAt(0)!==t.charAt(0))return 0 for(i=0,n=r=Math.min(e.length,t.length),o=0;i=1&&u>=1){for(o.splice(a-c-u,c+u),a=a-c-u,h=(i=this.DiffMain(f,l,!1,r)).length-1;h>=0;h--)o.splice(a,0,i[h]) a+=i.length}u=0,c=0,f="",l=""}a++}return o.pop(),o},e.prototype.diffBisect=function(e,n,r){var i,o,s,a,u,c,l,f,h,d,p,g,v,m,y,b,w,x,k,E,_,S,C for(i=e.length,o=n.length,a=s=Math.ceil((i+o)/2),u=2*s,c=new Array(u),l=new Array(u),f=0;fr);_++){for(S=-_+p;S<=_-g;S+=2){for(b=a+S,k=(w=S===-_||S!==_&&c[b-1]r);_++){for(S=-_+p;S<=_-g;S+=2){for(b=a+S,k=(w=S===-_||S!==_&&c[b-1]i)g+=2 else if(k>o)p+=2 else if(d&&(y=a+h-S)>=0&&y=(x=i-l[y]))return this.diffBisectSplit(e,n,w,k,r)}for(C=-_+v;C<=_-m;C+=2){for(y=a+C,E=(x=C===-_||C!==_&&l[y-1]i)m+=2 else if(E>o)v+=2 else if(!d&&(b=a+h-C)>=0&&b=(x=i-x)))return this.diffBisectSplit(e,n,w,k,r)}}return[[t,e],[1,n]]},e.prototype.diffBisectSplit=function(e,t,n,r,i){var o,s,a,u,c,l -return o=e.substring(0,n),a=t.substring(0,r),s=e.substring(n),u=t.substring(r),c=this.DiffMain(o,a,!1,i),l=this.DiffMain(s,u,!1,i),c.concat(l)},e.prototype.diffCleanupSemantic=function(e){var n,r,i,o,s,a,u,c,l,f,h,d,p -for(n=!1,r=[],i=0,o=null,s=0,c=0,l=0,a=0,u=0;s0?r[i-1]:-1,c=0,l=0,a=0,u=0,o=null,n=!0)),s++ -for(n&&this.diffCleanupMerge(e),s=1;s=(p=this.diffCommonOverlap(h,f))?(d>=f.length/2||d>=h.length/2)&&(e.splice(s,0,[0,h.substring(0,d)]),e[s-1][1]=f.substring(0,f.length-d),e[s+1][1]=h.substring(d),s++):(p>=f.length/2||p>=h.length/2)&&(e.splice(s,0,[0,f.substring(0,p)]),e[s-1][0]=1,e[s-1][1]=h.substring(0,h.length-p),e[s+1][0]=t,e[s+1][1]=f.substring(p),s++),s++),s++},e.prototype.diffCommonOverlap=function(e,t){var n,r,i,o,s,a,u -if(n=e.length,r=t.length,0===n||0===r)return 0 -if(n>r?e=e.substring(n-r):n0?a[u-1]:-1,f=0,h=0,d=0,p=0,c=null,s=!0)),l++ +for(s&&this.diffCleanupMerge(e),l=1;l=(o=this.diffCommonOverlap(r,n))?(i>=n.length/2||i>=r.length/2)&&(e.splice(l,0,[0,r.substring(0,i)]),e[l-1][1]=n.substring(0,n.length-i),e[l+1][1]=r.substring(i),l++):(o>=n.length/2||o>=r.length/2)&&(e.splice(l,0,[0,n.substring(0,o)]),e[l-1][0]=1,e[l-1][1]=r.substring(0,r.length-o),e[l+1][0]=t,e[l+1][1]=n.substring(o),l++),l++),l++},e.prototype.diffCommonOverlap=function(e,t){var n=e.length,r=t.length +if(0===n||0===r)return 0 +n>r?e=e.substring(n-r):n1?(0!==r&&0!==i&&(0!==(a=this.diffCommonPrefix(o,s))&&(n-r-i>0&&0===e[n-r-i-1][0]?e[n-r-i-1][1]+=o.substring(0,a):(e.splice(0,0,[0,o.substring(0,a)]),n++),o=o.substring(a),s=s.substring(a)),0!==(a=this.diffCommonSuffix(o,s))&&(e[n][1]=o.substring(o.length-a)+e[n][1],o=o.substring(0,o.length-a),s=s.substring(0,s.length-a))),0===r?e.splice(n-i,r+i,[1,o]):0===i?e.splice(n-r,r+i,[t,s]):e.splice(n-r-i,r+i,[t,s],[1,o]),n=n-r-i+(r?1:0)+(i?1:0)+1):0!==n&&0===e[n-1][0]?(e[n-1][1]+=e[n][1],e.splice(n,1)):n++,i=0,r=0,s="",o=""}for(""===e[e.length-1][1]&&e.pop(),u=!1,n=1;n{var t=Array.isArray -e.exports=function(){if(!arguments.length)return[] -var e=arguments[0] -return t(e)?e:[e]}},66:e=>{e.exports=function(e){var t=e?e.length:0 -return t?e[t-1]:void 0}},9254:(e,t,n)=>{var r="__lodash_hash_undefined__",i=9007199254740991,o=/^\[object .+?Constructor\]$/,s=/^(?:0|[1-9]\d*)$/,a="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,u="object"==typeof self&&self&&self.Object===Object&&self,c=a||u||Function("return this")() -function l(e,t,n){switch(n.length){case 0:return e.call(t) -case 1:return e.call(t,n[0]) -case 2:return e.call(t,n[0],n[1]) -case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}function f(e,t){return!(!e||!e.length)&&function(e,t,n){if(t!=t)return function(e,t,n,r){for(var i=e.length,o=-1;++o-1}function h(e,t){for(var n=-1,r=t.length,i=e.length;++n0&&n(a)?t>1?B(a,t-1,n,r,i):h(i,a):r||(i[i.length]=a)}return i}function U(e,t){var n,r,i=e.__data__ -return("string"==(r=typeof(n=t))||"number"==r||"symbol"==r||"boolean"==r?"__proto__"!==n:null===n)?i["string"==typeof t?"string":"hash"]:i.map}function H(e,t){var n=function(e,t){return null==e?void 0:e[t]}(e,t) -return function(e){if(!Z(e)||x&&x in e)return!1 -var t=X(e)||function(e){var t=!1 -if(null!=e&&"function"!=typeof e.toString)try{t=!!(e+"")}catch(e){}return t}(e)?S:o -return t.test(function(e){if(null!=e){try{return k.call(e)}catch(e){}try{return e+""}catch(e){}}return""}(e))}(n)?n:void 0}I.prototype.clear=function(){this.__data__=R?R(null):{}},I.prototype.delete=function(e){return this.has(e)&&delete this.__data__[e]},I.prototype.get=function(e){var t=this.__data__ -if(R){var n=t[e] -return n===r?void 0:n}return E.call(t,e)?t[e]:void 0},I.prototype.has=function(e){var t=this.__data__ -return R?void 0!==t[e]:E.call(t,e)},I.prototype.set=function(e,t){return this.__data__[e]=R&&void 0===t?r:t,this},F.prototype.clear=function(){this.__data__=[]},F.prototype.delete=function(e){var t=this.__data__,n=L(t,e) -return!(n<0||(n==t.length-1?t.pop():N.call(t,n,1),0))},F.prototype.get=function(e){var t=this.__data__,n=L(t,e) -return n<0?void 0:t[n][1]},F.prototype.has=function(e){return L(this.__data__,e)>-1},F.prototype.set=function(e,t){var n=this.__data__,r=L(n,e) -return r<0?n.push([e,t]):n[r][1]=t,this},P.prototype.clear=function(){this.__data__={hash:new I,map:new(A||F),string:new I}},P.prototype.delete=function(e){return U(this,e).delete(e)},P.prototype.get=function(e){return U(this,e).get(e)},P.prototype.has=function(e){return U(this,e).has(e)},P.prototype.set=function(e,t){return U(this,e).set(e,t),this},D.prototype.add=D.prototype.push=function(e){return this.__data__.set(e,r),this},D.prototype.has=function(e){return this.__data__.has(e)} -var z=O?g(O,Object):ie,$=O?function(e){for(var t=[];e;)h(t,z(e)),e=T(e) -return t}:ie -function Q(e){return V(e)||Y(e)||!!(M&&e&&e[M])}function G(e,t){return!!(t=null==t?i:t)&&("number"==typeof e||s.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=i}(e.length)&&!X(e)}function X(e){var t=Z(e)?_.call(e):"" -return"[object Function]"==t||"[object GeneratorFunction]"==t}function Z(e){var t=typeof e -return!!e&&("object"==t||"function"==t)}function K(e){return!!e&&"object"==typeof e}function ee(e){return J(e)?function(e,t){var n=V(e)||Y(e)?function(e,t){for(var n=-1,r=Array(e);++n=200&&(o=p,s=!1,t=new D(t)) -e:for(;++i{"use strict" -var r=n(526) +case 0:if(r+i>1){if(0!==r&&0!==i){var a=this.diffCommonPrefix(s,o) +0!==a&&(n-r-i>0&&0===e[n-r-i-1][0]?e[n-r-i-1][1]+=s.substring(0,a):(e.splice(0,0,[0,s.substring(0,a)]),n++),s=s.substring(a),o=o.substring(a)),0!==(a=this.diffCommonSuffix(s,o))&&(e[n][1]=s.substring(s.length-a)+e[n][1],s=s.substring(0,s.length-a),o=o.substring(0,o.length-a))}0===r?e.splice(n-i,r+i,[1,s]):0===i?e.splice(n-r,r+i,[t,o]):e.splice(n-r-i,r+i,[t,o],[1,s]),n=n-r-i+(r?1:0)+(i?1:0)+1}else 0!==n&&0===e[n-1][0]?(e[n-1][1]+=e[n][1],e.splice(n,1)):n++ +i=0,r=0,o="",s=""}""===e[e.length-1][1]&&e.pop() +var u=!1 +for(n=1;n{"use strict" +var r=n(1996) e.exports=function(e){function t(e){var t=e?[].concat(e):[] return t.in_array=r.curry(t,n,t),t.each=r.curry(t,o,t),t.each_async=r.curry(t,s,t),t.collect=r.curry(t,a,t),t.collect_async=r.curry(t,u,t),t.flatten=r.curry(t,i,t),t.inject=r.curry(t,c,t),t.push_all=r.curry(t,l,t),t.fill=r.curry(t,f,t),t.find_all=r.curry(t,h,t),t.find=r.curry(t,d,t),t.last=r.curry(t,p,t),t.naked=r.curry(t,g,t),t}function n(e,t){for(var n=0;n{"use strict" -var r=n(4633),i=n(5901),o=n(6882),s=n(3143) +break}return n}function p(e){return e[e.length-1]}function g(e){return[].concat(e)}return t(e)}},2880:(e,t,n)=>{"use strict" +var r=n(7131),i=n(2062),o=n(8090),s=n(1627) e.exports=function(e,t,n){var a=[] function u(){return 0===a.length}function c(){return a.length>1&&a[0].score.equals(a[1].score)}function l(){return a.find_all(h).collect(d).join(", ")}function f(e,t){return t.score.compare(e.score)}function h(e){return e.score.equals(a[0].score)}function d(e){return e.macro.toString()}this.validate=function(){return u()?{step:e,valid:!1,reason:"Undefined Step"}:c()?{step:e,valid:!1,reason:"Ambiguous Step (Patterns ["+l()+"] are all equally good candidates)"}:{step:e,valid:!0,winner:this.winner()}},this.clear_winner=function(){if(u())throw new Error("Undefined Step: ["+e+"]") if(c())throw new Error("Ambiguous Step: ["+e+"]. Patterns ["+l()+"] match equally well.") -return this.winner()},this.winner=function(){return a[0].macro},function(e,t){a=t.collect((function(t){return{macro:t,score:new o([new r(e,t.levenshtein_signature()),new i(t,n)])}})).sort(f)}(e,s(t))}},9174:e=>{"use strict" +return this.winner()},this.winner=function(){return a[0].macro},function(e,t){a=t.collect((function(t){return{macro:t,score:new o([new r(e,t.levenshtein_signature()),new i(t,n)])}})).sort(f)}(e,s(t))}},891:e=>{"use strict" var t=function(e){this.pTFUHht733hM6wfnruGLgAu6Uqvy7MVp=!0,this.properties={},this.merge=function(e){return e&&e.pTFUHht733hM6wfnruGLgAu6Uqvy7MVp?this.merge(e.properties):new t(this.properties)._merge(e)},this._merge=function(e){for(var t in e)this.properties[t]=e[t] return this},this._merge(e)} -e.exports=t},3591:(e,t,n)=>{"use strict" -var r=n(3143),i=n(6690),o=n(9076),s=function(e){e=e||"$" +e.exports=t},6754:(e,t,n)=>{"use strict" +var r=n(1627),i=n(7191),o=n(1234),s=function(e){e=e||"$" var t={},n=new i(new RegExp("(?:^|[^\\\\])\\"+e+"(\\w+)","g")),a=new RegExp("(\\"+e+"\\w+)"),u=this function c(t,n){return l(t).each((function(r){if(n.in_array(r))throw new Error("Circular Definition: ["+n.join(", ")+"]") var i=f(r,n) @@ -672,17 +677,17 @@ if(i&&!function(e,t){return function(e){return r(e).inject(0,(function(e,t){retu return p(n)||i||(i=v(n)),t[e]={pattern:h(n),converters:r(i)},this},this.merge=function(t){if(t._prefix()!==this._prefix())throw new Error("Cannot merge dictionaries with different prefixes") return new s(e)._merge(this)._merge(t)},this._merge=function(e){return e.each((function(e,t){u.define(e,t.pattern)})),this},this._prefix=function(){return e},this.each=function(e){for(var n in t)e(n,t[n])},this.expand=function(e,t){var n=h(e) return p(n)?{pattern:c(n,r(t)),converters:g(n)}:{pattern:n,converters:g(n)}}} -e.exports=s},7453:(e,t,n)=>{"use strict" -var r=n(3143),i=n(526),o=new function(){var e=r() +e.exports=s},1235:(e,t,n)=>{"use strict" +var r=n(1627),i=n(1996),o=new function(){var e=r() this.send=function(e,n,r){return 1===arguments.length?this.send(e,{}):2===arguments.length&&i.is_function(n)?this.send(e,{},n):(t(e,n),r&&r(),this)},this.on=function(t,n){return e.push({pattern:t,callback:n}),this} var t=function(e,t){n(e).each((function(n){n({name:e,data:t})}))},n=function(t){return e.find_all((function(e){return new RegExp(e.pattern).test(t)})).collect((function(e){return e.callback}))}} -e.exports={instance:function(){return o},ON_SCENARIO:"__ON_SCENARIO__",ON_STEP:"__ON_STEP__",ON_EXECUTE:"__ON_EXECUTE__",ON_DEFINE:"__ON_DEFINE__"}},8392:(e,t,n)=>{"use strict" -var r=n(3527),i=function(e){this.constructor(e,/.*\.(?:feature|spec|specification)$/)} -i.prototype=new r,e.exports=i},3527:(e,t,n)=>{"use strict" -var r=n(9782),i=r.path,o=r.fs,s=n(3143) +e.exports={instance:function(){return o},ON_SCENARIO:"__ON_SCENARIO__",ON_STEP:"__ON_STEP__",ON_EXECUTE:"__ON_EXECUTE__",ON_DEFINE:"__ON_DEFINE__"}},5748:(e,t,n)=>{"use strict" +var r=n(29),i=function(e){this.constructor(e,/.*\.(?:feature|spec|specification)$/)} +i.prototype=new r,e.exports=i},29:(e,t,n)=>{"use strict" +var r=n(4061),i=r.path,o=r.fs,s=n(1627) e.exports=function(e,t){t=t||/.*/,this.each=function(e){this.list().forEach(e)},this.list=function(){return s(e).inject(s(),(function(e,t){return e.concat(n(t).find_all(f))}))} -var n=function(e){return s(r(e).concat(a(e)))},r=function(e){return u(e).find_all(c)},a=function(e){return u(e).find_all(l).inject(s(),(function(e,t){return e.concat(n(t))}))},u=function(e){return o.existsSync(e)?s(o.readdirSync(e)).collect((function(t){return i.join(e,t)})):s()},c=function(e){return!l(e)},l=function(e){return o.statSync(e).isDirectory()},f=function(e){return s(t).find((function(t){return new RegExp(t).test(e)}))}}},4404:(e,t,n)=>{"use strict" -var r=n(8071),i=n(9174),o=n(7453),s=n(3143),a=n(526) +var n=function(e){return s(r(e).concat(a(e)))},r=function(e){return u(e).find_all(c)},a=function(e){return u(e).find_all(l).inject(s(),(function(e,t){return e.concat(n(t))}))},u=function(e){return o.existsSync(e)?s(o.readdirSync(e)).collect((function(t){return i.join(e,t)})):s()},c=function(e){return!l(e)},l=function(e){return o.statSync(e).isDirectory()},f=function(e){return s(t).find((function(t){return new RegExp(t).test(e)}))}}},7774:(e,t,n)=>{"use strict" +var r=n(2880),i=n(891),o=n(1235),s=n(1627),a=n(1996) e.exports=function(e){e=s(e) var t,n=o.instance(),u=this function c(e){return!e.valid}function l(e){return e.step+(e.valid?"":" <-- "+e.reason)}this.requires=function(t){return e.push_all(t),this},this.validate=function(e){var n=s(e).collect((function(e){var n=u.rank_macros(e).validate() @@ -696,15 +701,15 @@ this.interpret_step=function(e,r,s){var a=(new i).merge(r) n.send(o.ON_STEP,{step:e,ctx:a.properties}) var u=this.rank_macros(e).clear_winner() t=u,u.interpret(e,a||{},s)},this.rank_macros=function(e){return new r(e,h(e),t)} -var h=function(t){return e.inject([],(function(e,n){return e.concat(n.find_compatible_macros(t))}))}}},6877:(e,t,n)=>{"use strict" -var r=n(386),i=n(3591),o=n(3143) +var h=function(t){return e.inject([],(function(e,n){return e.concat(n.find_compatible_macros(t))}))}}},5798:(e,t,n)=>{"use strict" +var r=n(1483),i=n(6754),o=n(1627) e.exports=function(e){e=e||new i var t=o(),n=this this.define=function(e,t,n,r){return o(e).each((function(e){s(e,t,n,r)})),this} var s=function(i,o,s,a){if(n.get_macro(i))throw new Error("Duplicate macro: ["+i+"]") t.push(new r(i,e.expand(i),o,s,n,a))} -this.get_macro=function(e){return t.find((function(t){return t.is_identified_by(e)}))},this.find_compatible_macros=function(e){return t.find_all((function(t){return t.can_interpret(e)}))}}},386:(e,t,n)=>{"use strict" -var r=n(526),i=n(3143),o=n(9174),s=n(6690),a=n(7453) +this.get_macro=function(e){return t.find((function(t){return t.is_identified_by(e)}))},this.find_compatible_macros=function(e){return t.find_all((function(t){return t.can_interpret(e)}))}}},1483:(e,t,n)=>{"use strict" +var r=n(1996),i=n(1627),o=n(891),s=n(7191),a=n(1235) e.exports=function(e,t,n,u,c,l){e=p(e) var f=new s(t.pattern),h=(n=n||r.async_noop,a.instance()) function d(e){return l.mode?"sync"===l.mode:n!==r.async_noop&&n.length!==e.length+1}function p(e){return new RegExp(e).toString()}l=l||{},this.library=c,this.is_identified_by=function(t){return e===p(t)},this.can_interpret=function(e){return f.test(e)},this.interpret=function(e,s,c){var p=new o({step:e}).merge(u).merge(s) @@ -713,28 +718,28 @@ i(t.converters).collect((function(t){return function(n){t.apply(null,e.slice(r,r var o h.send(a.ON_EXECUTE,{step:e,ctx:p.properties,pattern:f.toString(),args:i}) try{o=r.invoke(n,p.properties,d(i)?i:i.concat(c))}catch(t){if(c)return c(t) -throw t}return function(e){return l.mode?"promise"===l.mode:e&&e.then}(o)?o.then(r.noargs(c)).catch(c):d(i)?c&&c():void 0}))},this.is_sibling=function(e){return e&&e.defined_in(c)},this.defined_in=function(e){return c===e},this.levenshtein_signature=function(){return f.without_expressions()},this.toString=function(){return e},h.send(a.ON_DEFINE,{signature:e,pattern:f.toString()})}},886:(e,t,n)=>{"use strict" -e.exports=function(){function e(){return"undefined"!=typeof process&&void 0!==n.g&&!0}function t(){return"undefined"!=typeof window}function r(){return"undefined"!=typeof phantom}return{get_container:function(){return t()?window:r()?phantom:e()?n.g:void 0},is_node:e,is_browser:t,is_phantom:r,is_karma:function(){return"undefined"!=typeof window&&void 0!==window.__karma__}}}},6690:(e,t,n)=>{"use strict" -var r=n(3143) +throw t}return function(e){return l.mode?"promise"===l.mode:e&&e.then}(o)?o.then(r.noargs(c)).catch(c):d(i)?c&&c():void 0}))},this.is_sibling=function(e){return e&&e.defined_in(c)},this.defined_in=function(e){return c===e},this.levenshtein_signature=function(){return f.without_expressions()},this.toString=function(){return e},h.send(a.ON_DEFINE,{signature:e,pattern:f.toString()})}},6947:(e,t,n)=>{"use strict" +e.exports=function(){function e(){return"undefined"!=typeof process&&void 0!==n.g&&!0}function t(){return"undefined"!=typeof window}function r(){return"undefined"!=typeof phantom}return{get_container:function(){return t()?window:r()?phantom:e()?n.g:void 0},is_node:e,is_browser:t,is_phantom:r,is_karma:function(){return"undefined"!=typeof window&&void 0!==window.__karma__}}}},7191:(e,t,n)=>{"use strict" +var r=n(1627) e.exports=function(e){var t=/(^|[^\\\\])\(.*?\)/g,n=/(^|[^\\\\])\[.*?\]/g,i=/(^|[^\\\\])\{.*?\}/g,o=/(^|[^\\\\])\\./g,s=/[^\w\s]/g,a=new RegExp(e) this.test=function(e){var t=a.test(e) return this.reset(),t},this.groups=function(e){for(var t=r(),n=a.exec(e);n;){var i=n.slice(1,n.length) -t.push(i),n=a.global&&a.exec(e)}return this.reset(),t.flatten()},this.reset=function(){return a.lastIndex=0,this},this.without_expressions=function(){return a.source.replace(t,"$1").replace(n,"$1").replace(i,"$1").replace(o,"$1").replace(s,"")},this.equals=function(e){return this.toString()===e.toString()},this.toString=function(){return"/"+a.source+"/"}}},6007:e=>{"use strict" +t.push(i),n=a.global&&a.exec(e)}return this.reset(),t.flatten()},this.reset=function(){return a.lastIndex=0,this},this.without_expressions=function(){return a.source.replace(t,"$1").replace(n,"$1").replace(i,"$1").replace(o,"$1").replace(s,"")},this.equals=function(e){return this.toString()===e.toString()},this.toString=function(){return"/"+a.source+"/"}}},3575:e=>{"use strict" e.exports={trim:function(e){return e.replace(/^\s+|\s+$/g,"")},rtrim:function(e){return e.replace(/\s+$/g,"")},isBlank:function(e){return/^\s*$/g.test(e)},isNotBlank:function(e){return!this.isBlank(e)},indentation:function(e){var t=/^(\s*)/.exec(e) -return t&&t[0].length||0}}},5682:(e,t,n)=>{"use strict" -var r=n(4404),i=n(9174),o=n(526),s=function(e,t){if(!(this instanceof s))return new s(e,t) -this.interpreter=new r(e),this.requires=function(e){return this.interpreter.requires(e),this},this.yadda=function(e,n,r){return 0===arguments.length?this:2===arguments.length&&o.is_function(n)?this.yadda(e,{},n):(this.interpreter.validate(e),void this.interpreter.interpret(e,(new i).merge(t).merge(n),r))},this.run=this.yadda,this.toString=function(){return"Yadda 2.1.0 Copyright 2010 Stephen Cresswell / Energized Work Ltd"}} -e.exports=s},7182:e=>{"use strict" +return t&&t[0].length||0}}},1481:(e,t,n)=>{"use strict" +var r=n(7774),i=n(891),o=n(1996),s=function(e,t){if(!(this instanceof s))return new s(e,t) +this.interpreter=new r(e),this.requires=function(e){return this.interpreter.requires(e),this},this.yadda=function(e,n,r){return 0===arguments.length?this:2===arguments.length&&o.is_function(n)?this.yadda(e,{},n):(this.interpreter.validate(e),void this.interpreter.interpret(e,(new i).merge(t).merge(n),r))},this.run=this.yadda,this.toString=function(){return"Yadda 2.2.0 Copyright 2010 Stephen Cresswell"}} +e.exports=s},4636:e=>{"use strict" e.exports=function(e,t){var n=Date.parse(e) -return isNaN(n)?t(new Error("Cannot convert ["+e+"] to a date")):t(null,new Date(n))}},3986:e=>{"use strict" +return isNaN(n)?t(new Error("Cannot convert ["+e+"] to a date")):t(null,new Date(n))}},2066:e=>{"use strict" e.exports=function(e,t){var n=parseFloat(e) -return isNaN(n)?t(new Error("Cannot convert ["+e+"] to a float")):t(null,n)}},2453:(e,t,n)=>{"use strict" -e.exports={date:n(7182),integer:n(7444),float:n(3986),list:n(3488),table:n(3337),pass_through:n(9076)}},7444:e=>{"use strict" +return isNaN(n)?t(new Error("Cannot convert ["+e+"] to a float")):t(null,n)}},9627:(e,t,n)=>{"use strict" +e.exports={date:n(4636),integer:n(9858),float:n(2066),list:n(9999),table:n(4084),pass_through:n(1234)}},9858:e=>{"use strict" e.exports=function(e,t){var n=parseInt(e) -return isNaN(n)?t(new Error("Cannot convert ["+e+"] to an integer")):t(null,n)}},3488:e=>{"use strict" -e.exports=function(e,t){return t(null,e.split(/\n/))}},9076:e=>{"use strict" -e.exports=function(e,t){return t(null,e)}},3337:(e,t,n)=>{"use strict" -var r=n(3143),i=n(6007),o=/[\|\u2506]/,s=/^[\|\u2506]|[\|\u2506]$/g,a=/^[\\|\u2506]?-{3,}/ +return isNaN(n)?t(new Error("Cannot convert ["+e+"] to an integer")):t(null,n)}},9999:e=>{"use strict" +e.exports=function(e,t){return t(null,e.split(/\n/))}},1234:e=>{"use strict" +e.exports=function(e,t){return t(null,e)}},4084:(e,t,n)=>{"use strict" +var r=n(1627),i=n(3575),o=/[\|\u2506]/,s=/^[\|\u2506]|[\|\u2506]$/g,a=/^[\\|\u2506]?-{3,}/ e.exports=function(e,t){var n,u=e.split(/\n/),c=(n=u.shift(),r(n.replace(s,"").split(o)).collect((function(e){return{text:i.trim(e),indentation:i.indentation(e)}})).naked()),l=h(u[0])?function(e){if(h(e))return d() p(e)}:function(e){if(h(e))throw new Error("Dashes are unexpected at this time") d(),p(e)},f=r() @@ -743,49 +748,49 @@ for(var n in e)t[n]=e[n].join("\n") return t})).naked()}(f))}catch(e){t(e)}function h(e){return a.test(e)}function d(){f.push({})}function p(e){var t=f.last() r(e.replace(s,"").split(o)).each((function(e,n){var r=c[n].text,o=c[n].indentation,s=i.rtrim(e.substr(o)) if(i.isNotBlank(e)&&i.indentation(e){"use strict" +t[r]=(t[r]||[]).concat(s)}))}}},1996:e=>{"use strict" e.exports=function(){var e=Array.prototype.slice function t(){}function n(t,n){return function(){var r=e.call(arguments,arguments.length-1)[0],i=e.call(arguments,0,arguments.length-2) n.apply(t,i),r&&r()}}return{noop:t,noargs:function(e){return function(){return e()}},async_noop:n(null,t),asynchronize:n,is_function:function(e){return e&&"[object Function]"==={}.toString.call(e)},curry:function(t,n){var r=e.call(arguments,2) -return function(){return n.apply(t,r.concat(e.call(arguments)))}},invoke:function(e,t,n){return e.apply(t,n)}}}()},409:(e,t,n)=>{"use strict" -var r={Yadda:n(5682),EventBus:n(7453),Interpreter:n(4404),Context:n(9174),Library:n(6877),Dictionary:n(3591),FeatureFileSearch:n(8392),FileSearch:n(3527),Platform:n(886),localisation:n(5534),converters:n(2453),parsers:n(3574),plugins:n(918),shims:n(9782),createInstance:function(){return r.Yadda.apply(null,Array.prototype.slice.call(arguments,0))}} -e.exports=r},2889:(e,t,n)=>{"use strict" -var r=n(8271) -e.exports=new r("Chinese",{feature:"[Ff]eature|功能",scenario:"(?:[Ss]cenario|[Ss]cenario [Oo]utline|场景|剧本|(?:场景|剧本)?大纲)",examples:"(?:[Ee]xamples|[Ww]here|例子|示例|举例|样例)",pending:"(?:[Pp]ending|[Tt]odo|待定|待做|待办|暂停|暂缓)",only:"(?:[Oo]nly|仅仅?)",background:"[Bb]ackground|背景|前提",given:"(?:[Gg]iven|[Ww]ith|[Aa]nd|[Bb]ut|[Ee]xcept|假如|假设|假定|并且|而且|同时|但是)",when:"(?:[Ww]hen|[Ii]f|[Aa]nd|[Bb]ut|当|如果|并且|而且|同时|但是)",then:"(?:[Tt]hen|[Ee]xpect|[Aa]nd|[Bb]ut|那么|期望|并且|而且|同时|但是)",_steps:["given","when","then"]})},8555:(e,t,n)=>{"use strict" -var r=n(8271) -e.exports=new r("Dutch",{feature:"(?:[Ff]eature|[Ff]unctionaliteit|[Ee]igenschap)",scenario:"(?:[Ss]cenario|[Gg|eval)",examples:"(?:[Vv]oorbeelden?)",pending:"(?:[Tt]odo|[Mm]oet nog)",only:"(?:[Aa]lleen)",background:"(?:[Aa]chtergrond)",given:"(?:[Ss]tel|[Gg]egeven(?:\\sdat)?|[Ee]n|[Mm]aar)",when:"(?:[Aa]ls|[Ww]anneer|[Ee]n|[Mm]aar)",then:"(?:[Dd]an|[Vv]ervolgens|[Ee]n|[Mm]aar)",_steps:["given","when","then"]})},9307:(e,t,n)=>{"use strict" -var r=n(8271) -e.exports=new r("English",{feature:"[Ff]eature",scenario:"(?:[Ss]cenario|[Ss]cenario [Oo]utline)",examples:"(?:[Ee]xamples|[Ww]here)",pending:"(?:[Pp]ending|[Tt]odo)",only:"(?:[Oo]nly)",background:"[Bb]ackground",given:"(?:[Gg]iven|[Ww]ith|[Aa]nd|[Bb]ut|[Ee]xcept)",when:"(?:[Ww]hen|[Ii]f|[Aa]nd|[Bb]ut)",then:"(?:[Tt]hen|[Ee]xpect|[Aa]nd|[Bb]ut)",_steps:["given","when","then"]})},298:(e,t,n)=>{"use strict" -var r=n(8271) -e.exports=new r("French",{feature:"(?:[Ff]onctionnalité)",scenario:"(?:[Ss]cénario|[Pp]lan [Dd]u [Ss]cénario)",examples:"(?:[Ee]xemples|[Ee]xemple|[Oo][uù])",pending:"(?:[Ee]n attente|[Ee]n cours|[Tt]odo)",only:"(?:[Ss]eulement])",background:"(?:[Cc]ontexte)",given:"(?:[Ss]oit|[ÉéEe]tant données|[ÉéEe]tant donnée|[ÉéEe]tant donnés|[ÉéEe]tant donné|[Aa]vec|[Ee]t|[Mm]ais|[Aa]ttendre)",when:"(?:[Qq]uand|[Ll]orsqu'|[Ll]orsque|[Ss]i|[Ee]t|[Mm]ais)",then:"(?:[Aa]lors|[Aa]ttendre|[Ee]t|[Mm]ais)",_steps:["given","when","then","soit","etantdonnees","etantdonnee","etantdonne","quand","lorsque","alors"],get soit(){return this.given},get etantdonnees(){return this.given},get etantdonnee(){return this.given},get etantdonne(){return this.given},get quand(){return this.when},get lorsque(){return this.when},get alors(){return this.then}})},4430:(e,t,n)=>{"use strict" -var r=n(8271) -e.exports=new r("German",{feature:"(?:[Ff]unktionalität|[Ff]eature|[Aa]spekt|[Uu]secase|[Aa]nwendungsfall)",scenario:"(?:[Ss]zenario|[Ss]zenario( g|G)rundriss|[Gg]eschehnis)",examples:"(?:[Bb]eispiele?)",pending:"(?:[Tt]odo|[Oo]ffen)",only:"(?:[Nn]ur|[Ee]inzig)",background:"(?:[Gg]rundlage|[Hh]intergrund|[Ss]etup|[Vv]orausgesetzt)",given:"(?:[Aa]ngenommen|[Gg]egeben( sei(en)?)?|[Mm]it|[Uu]nd|[Aa]ber|[Aa]ußer)",when:"(?:[Ww]enn|[Ff]alls|[Uu]nd|[Aa]ber)",then:"(?:[Dd]ann|[Ff]olglich|[Aa]ußer|[Uu]nd|[Aa]ber)",_steps:["given","when","then"]})},8271:(e,t,n)=>{"use strict" -var r=n(6877),i=n(3143) +return function(){return n.apply(t,r.concat(e.call(arguments)))}},invoke:function(e,t,n){return e.apply(t,n)}}}()},2216:(e,t,n)=>{"use strict" +var r={Yadda:n(1481),EventBus:n(1235),Interpreter:n(7774),Context:n(891),Library:n(5798),Dictionary:n(6754),FeatureFileSearch:n(5748),FileSearch:n(29),Platform:n(6947),localisation:n(7679),converters:n(9627),parsers:n(1979),plugins:n(6827),shims:n(4061),createInstance:function(){return r.Yadda.apply(null,Array.prototype.slice.call(arguments,0))}} +e.exports=r},6404:(e,t,n)=>{"use strict" +var r=n(6767) +e.exports=new r("Chinese",{feature:"[Ff]eature|功能",scenario:"(?:[Ss]cenario|[Ss]cenario [Oo]utline|场景|剧本|(?:场景|剧本)?大纲)",examples:"(?:[Ee]xamples|[Ww]here|例子|示例|举例|样例)",pending:"(?:[Pp]ending|[Tt]odo|待定|待做|待办|暂停|暂缓)",only:"(?:[Oo]nly|仅仅?)",background:"[Bb]ackground|背景|前提",given:"(?:[Gg]iven|[Ww]ith|[Aa]nd|[Bb]ut|[Ee]xcept|假如|假设|假定|并且|而且|同时|但是)",when:"(?:[Ww]hen|[Ii]f|[Aa]nd|[Bb]ut|当|如果|并且|而且|同时|但是)",then:"(?:[Tt]hen|[Ee]xpect|[Aa]nd|[Bb]ut|那么|期望|并且|而且|同时|但是)",_steps:["given","when","then"]})},3399:(e,t,n)=>{"use strict" +var r=n(6767) +e.exports=new r("Dutch",{feature:"(?:[Ff]eature|[Ff]unctionaliteit|[Ee]igenschap)",scenario:"(?:[Ss]cenario|[Gg|eval)",examples:"(?:[Vv]oorbeelden?)",pending:"(?:[Tt]odo|[Mm]oet nog)",only:"(?:[Aa]lleen)",background:"(?:[Aa]chtergrond)",given:"(?:[Ss]tel|[Gg]egeven(?:\\sdat)?|[Ee]n|[Mm]aar)",when:"(?:[Aa]ls|[Ww]anneer|[Ee]n|[Mm]aar)",then:"(?:[Dd]an|[Vv]ervolgens|[Ee]n|[Mm]aar)",_steps:["given","when","then"]})},1447:(e,t,n)=>{"use strict" +var r=n(6767) +e.exports=new r("English",{feature:"[Ff]eature",scenario:"(?:[Ss]cenario|[Ss]cenario [Oo]utline)",examples:"(?:[Ee]xamples|[Ww]here)",pending:"(?:[Pp]ending|[Tt]odo)",only:"(?:[Oo]nly)",background:"[Bb]ackground",given:"(?:[Gg]iven|[Ww]ith|[Aa]nd|[Bb]ut|[Ee]xcept)",when:"(?:[Ww]hen|[Ii]f|[Aa]nd|[Bb]ut)",then:"(?:[Tt]hen|[Ee]xpect|[Aa]nd|[Bb]ut)",_steps:["given","when","then"]})},7226:(e,t,n)=>{"use strict" +var r=n(6767) +e.exports=new r("French",{feature:"(?:[Ff]onctionnalité)",scenario:"(?:[Ss]cénario|[Pp]lan [Dd]u [Ss]cénario)",examples:"(?:[Ee]xemples|[Ee]xemple|[Oo][uù])",pending:"(?:[Ee]n attente|[Ee]n cours|[Tt]odo)",only:"(?:[Ss]eulement])",background:"(?:[Cc]ontexte)",given:"(?:[Ss]oit|[ÉéEe]tant données|[ÉéEe]tant donnée|[ÉéEe]tant donnés|[ÉéEe]tant donné|[Aa]vec|[Ee]t|[Mm]ais|[Aa]ttendre)",when:"(?:[Qq]uand|[Ll]orsqu'|[Ll]orsque|[Ss]i|[Ee]t|[Mm]ais)",then:"(?:[Aa]lors|[Aa]ttendre|[Ee]t|[Mm]ais)",_steps:["given","when","then","soit","etantdonnees","etantdonnee","etantdonne","quand","lorsque","alors"],get soit(){return this.given},get etantdonnees(){return this.given},get etantdonnee(){return this.given},get etantdonne(){return this.given},get quand(){return this.when},get lorsque(){return this.when},get alors(){return this.then}})},5805:(e,t,n)=>{"use strict" +var r=n(6767) +e.exports=new r("German",{feature:"(?:[Ff]unktionalität|[Ff]eature|[Aa]spekt|[Uu]secase|[Aa]nwendungsfall)",scenario:"(?:[Ss]zenario|[Ss]zenario( g|G)rundriss|[Gg]eschehnis)",examples:"(?:[Bb]eispiele?)",pending:"(?:[Tt]odo|[Oo]ffen)",only:"(?:[Nn]ur|[Ee]inzig)",background:"(?:[Gg]rundlage|[Hh]intergrund|[Ss]etup|[Vv]orausgesetzt)",given:"(?:[Aa]ngenommen|[Gg]egeben( sei(en)?)?|[Mm]it|[Uu]nd|[Aa]ber|[Aa]ußer)",when:"(?:[Ww]enn|[Ff]alls|[Uu]nd|[Aa]ber)",then:"(?:[Dd]ann|[Ff]olglich|[Aa]ußer|[Uu]nd|[Aa]ber)",_steps:["given","when","then"]})},6767:(e,t,n)=>{"use strict" +var r=n(5798),i=n(1627) e.exports=function(e,t){var n=this this.is_language=!0,this.library=function(e){return n.localise_library(new r(e))},this.localise_library=function(e){return i(t._steps).each((function(t){e[t]=function(r,s,a,u){return i(r).each((function(r){return r=o(n.localise(t),r),e.define(r,s,a,u)}))}})),e} var o=function(e,t){var n=new RegExp("^/|/$","g"),r=new RegExp(/^(?:\^)?/) return t.toString().replace(n,"").replace(r,"^(?:\\s)*"+e+"\\s+")} this.localise=function(n){if(void 0===t[n])throw new Error('Keyword "'+n+'" has not been translated into '+e+".") -return t[n]}}},5821:(e,t,n)=>{"use strict" -var r=n(8271) -e.exports=new r("Norwegian",{feature:"[Ee]genskap",scenario:"[Ss]cenario",examples:"[Ee]ksempler",pending:"[Aa]vventer",only:"[Bb]are",background:"[Bb]akgrunn",given:"(?:[Gg]itt|[Mm]ed|[Oo]g|[Mm]en|[Uu]nntatt)",when:"(?:[Nn]år|[Oo]g|[Mm]en)",then:"(?:[Ss]å|[Ff]forvent|[Oo]g|[Mm]en)",_steps:["given","when","then","gitt","når","så"],get gitt(){return this.given},get"når"(){return this.when},get"så"(){return this.then}})},3040:(e,t,n)=>{"use strict" -var r=n(8271) -e.exports=new r("Pirate",{feature:"(?:[Tt]ale|[Yy]arn)",scenario:"(?:[Aa]dventure|[Ss]ortie)",examples:"[Ww]herest",pending:"[Bb]rig",only:"[Bb]lack [Ss]pot",background:"[Aa]ftground",given:"(?:[Gg]iveth|[Ww]ith|[Aa]nd|[Bb]ut|[Ee]xcept)",when:"(?:[Ww]hence|[Ii]f|[Aa]nd|[Bb]ut)",then:"(?:[Tt]hence|[Ee]xpect|[Aa]nd|[Bb]ut)",_steps:["given","when","then","giveth","whence","thence"],get giveth(){return this.given},get whence(){return this.when},get thence(){return this.then}})},5991:(e,t,n)=>{"use strict" -var r=n(8271) -e.exports=new r("Polish",{feature:"(?:[Ww]łaściwość|[Ff]unkcja|[Aa]spekt|[Pp]otrzeba [Bb]iznesowa)",scenario:"(?:[Ss]cenariusz|[Ss]zablon [Ss]cenariusza)",examples:"[Pp]rzykłady",pending:"(?:[Oo]czekujący|[Nn]iezweryfikowany|[Tt]odo)",only:"[Tt]ylko",background:"[Zz]ałożenia",given:"(?:[Zz]akładając|[Mm]ając|[Oo]raz|[Ii]|[Aa]le)",when:"(?:[Jj]eżeli|[Jj]eśli|[Gg]dy|[Kk]iedy|[Oo]raz|[Ii]|[Aa]le)",then:"(?:[Ww]tedy|[Oo]raz|[Ii]|[Aa]le)",_steps:["given","when","then","zakladajac","majac","jezeli","jesli","gdy","kiedy","wtedy"],get zakladajac(){return this.given},get majac(){return this.given},get jezeli(){return this.when},get jesli(){return this.when},get gdy(){return this.when},get kiedy(){return this.when},get wtedy(){return this.then}})},2482:(e,t,n)=>{"use strict" -var r=n(8271) -e.exports=new r("Portuguese",{feature:"(?:[Ff]uncionalidade|[Cc]aracter[íi]stica)",scenario:"(?:[Cc]en[aá]rio|[Cc]aso)",examples:"(?:[Ee]xemplos|[Ee]xemplo)",pending:"[Pp]endente",only:"[S][óo]",background:"[Ff]undo",given:"(?:[Ss]eja|[Ss]ejam|[Dd]ado|[Dd]ada|[Dd]ados|[Dd]adas|[Ee]|[Mm]as)",when:"(?:[Qq]uando|[Ss]e|[Qq]ue|[Ee]|[Mm]as)",then:"(?:[Ee]nt[aã]o|[Ee]|[Mm]as)",_steps:["given","when","then","seja","sejam","dado","dada","dados","dadas","quando","se","entao"],get seja(){return this.given},get sejam(){return this.given},get dado(){return this.given},get dada(){return this.given},get dados(){return this.given},get dadas(){return this.given},get quando(){return this.when},get se(){return this.when},get entao(){return this.then}})},9494:(e,t,n)=>{"use strict" -var r=n(8271) -e.exports=new r("Russian",{feature:"(?:[Фф]ункция|[Фф]ункционал|[Сс]войство)",scenario:"Сценарий",examples:"Примеры?",pending:"(?:[Ww]ip|[Tt]odo)",only:"Только",background:"(?:[Пп]редыстория|[Кк]онтекст)",given:"(?:[Дд]опустим|[Дд]ано|[Пп]усть|[Ии]|[Н]о)(?:\\s[Яя])?",when:"(?:[Ее]сли|[Кк]огда|[Ии]|[Н]о)(?:\\s[Яя])?",then:"(?:[Тт]о|[Тт]огда|[Ии]|[Н]о)(?:\\s[Яя])?",_steps:["given","when","then"]})},4029:(e,t,n)=>{"use strict" -var r=n(8271) -e.exports=new r("Spanish",{feature:"(?:[Ff]uncionalidad|[Cc]aracterística)",scenario:"(?:[Ee]scenario|[Cc]aso)",examples:"(?:[Ee]jemplos|[Ee]jemplo)",pending:"[Pp]endiente",only:"[S]ólo",background:"[Ff]ondo",given:"(?:[Ss]ea|[Ss]ean|[Dd]ado|[Dd]ada|[Dd]ados|[Dd]adas)",when:"(?:[Cc]uando|[Ss]i|[Qq]ue)",then:"(?:[Ee]ntonces)",_steps:["given","when","then","sea","sean","dado","dada","dados","dadas","cuando","si","entonces"],get sea(){return this.given},get sean(){return this.given},get dado(){return this.given},get dada(){return this.given},get dados(){return this.given},get dadas(){return this.given},get cuando(){return this.when},get si(){return this.when},get entonces(){return this.then}})},6076:(e,t,n)=>{"use strict" -var r=n(8271) -e.exports=new r("Ukrainian",{feature:"(?:[Фф]ункція|[Фф]ункціонал|[Пп]отреба|[Аа]спект|[Оо]собливість|[Вв]ластивість)",scenario:"(?:[Сс]ценарій|[Шш]аблон)",examples:"[Пп]риклади",pending:"(?:[Нн]еперевірений|[Чч]екаючий|[Pp]ending|[Tt]odo)",only:"[Тт]ільки",background:"[Кк]онтекст",given:"(?:[Дд]ано|[Пп]ри|[Нн]ехай|[Іі]|[Тт]а|[Аа]ле)",when:"(?:[Яя]кщо|[Дд]е|[Кк]оли|[Іі]|[Тт]а|[Аа]ле)",then:"(?:[Тт]оді|[Іі]|[Тт]а|[Аа]ле)",_steps:["given","when","then"]})},5534:(e,t,n)=>{"use strict" -e.exports={Chinese:n(2889),English:n(9307),French:n(298),German:n(4430),Dutch:n(8555),Norwegian:n(5821),Pirate:n(3040),Ukrainian:n(6076),Polish:n(5991),Spanish:n(4029),Russian:n(9494),Portuguese:n(2482),default:n(9307),Language:n(8271)}},5070:(e,t,n)=>{"use strict" -e.exports=function(e){var t=n(9782).fs,r=new(n(3610))(e) +return t[n]}}},683:(e,t,n)=>{"use strict" +var r=n(6767) +e.exports=new r("Norwegian",{feature:"[Ee]genskap",scenario:"[Ss]cenario",examples:"[Ee]ksempler",pending:"[Aa]vventer",only:"[Bb]are",background:"[Bb]akgrunn",given:"(?:[Gg]itt|[Mm]ed|[Oo]g|[Mm]en|[Uu]nntatt)",when:"(?:[Nn]år|[Oo]g|[Mm]en)",then:"(?:[Ss]å|[Ff]forvent|[Oo]g|[Mm]en)",_steps:["given","when","then","gitt","når","så"],get gitt(){return this.given},get"når"(){return this.when},get"så"(){return this.then}})},3411:(e,t,n)=>{"use strict" +var r=n(6767) +e.exports=new r("Pirate",{feature:"(?:[Tt]ale|[Yy]arn)",scenario:"(?:[Aa]dventure|[Ss]ortie)",examples:"[Ww]herest",pending:"[Bb]rig",only:"[Bb]lack [Ss]pot",background:"[Aa]ftground",given:"(?:[Gg]iveth|[Ww]ith|[Aa]nd|[Bb]ut|[Ee]xcept)",when:"(?:[Ww]hence|[Ii]f|[Aa]nd|[Bb]ut)",then:"(?:[Tt]hence|[Ee]xpect|[Aa]nd|[Bb]ut)",_steps:["given","when","then","giveth","whence","thence"],get giveth(){return this.given},get whence(){return this.when},get thence(){return this.then}})},8617:(e,t,n)=>{"use strict" +var r=n(6767) +e.exports=new r("Polish",{feature:"(?:[Ww]łaściwość|[Ff]unkcja|[Aa]spekt|[Pp]otrzeba [Bb]iznesowa)",scenario:"(?:[Ss]cenariusz|[Ss]zablon [Ss]cenariusza)",examples:"[Pp]rzykłady",pending:"(?:[Oo]czekujący|[Nn]iezweryfikowany|[Tt]odo)",only:"[Tt]ylko",background:"[Zz]ałożenia",given:"(?:[Zz]akładając|[Mm]ając|[Oo]raz|[Ii]|[Aa]le)",when:"(?:[Jj]eżeli|[Jj]eśli|[Gg]dy|[Kk]iedy|[Oo]raz|[Ii]|[Aa]le)",then:"(?:[Ww]tedy|[Oo]raz|[Ii]|[Aa]le)",_steps:["given","when","then","zakladajac","majac","jezeli","jesli","gdy","kiedy","wtedy"],get zakladajac(){return this.given},get majac(){return this.given},get jezeli(){return this.when},get jesli(){return this.when},get gdy(){return this.when},get kiedy(){return this.when},get wtedy(){return this.then}})},7291:(e,t,n)=>{"use strict" +var r=n(6767) +e.exports=new r("Portuguese",{feature:"(?:[Ff]uncionalidade|[Cc]aracter[íi]stica)",scenario:"(?:[Cc]en[aá]rio|[Cc]aso)",examples:"(?:[Ee]xemplos|[Ee]xemplo)",pending:"[Pp]endente",only:"[S][óo]",background:"[Ff]undo",given:"(?:[Ss]eja|[Ss]ejam|[Dd]ado|[Dd]ada|[Dd]ados|[Dd]adas|[Ee]|[Mm]as)",when:"(?:[Qq]uando|[Ss]e|[Qq]ue|[Ee]|[Mm]as)",then:"(?:[Ee]nt[aã]o|[Ee]|[Mm]as)",_steps:["given","when","then","seja","sejam","dado","dada","dados","dadas","quando","se","entao"],get seja(){return this.given},get sejam(){return this.given},get dado(){return this.given},get dada(){return this.given},get dados(){return this.given},get dadas(){return this.given},get quando(){return this.when},get se(){return this.when},get entao(){return this.then}})},342:(e,t,n)=>{"use strict" +var r=n(6767) +e.exports=new r("Russian",{feature:"(?:[Фф]ункция|[Фф]ункционал|[Сс]войство)",scenario:"Сценарий",examples:"Примеры?",pending:"(?:[Ww]ip|[Tt]odo)",only:"Только",background:"(?:[Пп]редыстория|[Кк]онтекст)",given:"(?:[Дд]опустим|[Дд]ано|[Пп]усть|[Ии]|[Н]о)(?:\\s[Яя])?",when:"(?:[Ее]сли|[Кк]огда|[Ии]|[Н]о)(?:\\s[Яя])?",then:"(?:[Тт]о|[Тт]огда|[Ии]|[Н]о)(?:\\s[Яя])?",_steps:["given","when","then"]})},7202:(e,t,n)=>{"use strict" +var r=n(6767) +e.exports=new r("Spanish",{feature:"(?:[Ff]uncionalidad|[Cc]aracterística)",scenario:"(?:[Ee]scenario|[Cc]aso)",examples:"(?:[Ee]jemplos|[Ee]jemplo)",pending:"[Pp]endiente",only:"[S]ólo",background:"[Ff]ondo",given:"(?:[Ss]ea|[Ss]ean|[Dd]ado|[Dd]ada|[Dd]ados|[Dd]adas)",when:"(?:[Cc]uando|[Ss]i|[Qq]ue)",then:"(?:[Ee]ntonces)",_steps:["given","when","then","sea","sean","dado","dada","dados","dadas","cuando","si","entonces"],get sea(){return this.given},get sean(){return this.given},get dado(){return this.given},get dada(){return this.given},get dados(){return this.given},get dadas(){return this.given},get cuando(){return this.when},get si(){return this.when},get entonces(){return this.then}})},3845:(e,t,n)=>{"use strict" +var r=n(6767) +e.exports=new r("Ukrainian",{feature:"(?:[Фф]ункція|[Фф]ункціонал|[Пп]отреба|[Аа]спект|[Оо]собливість|[Вв]ластивість)",scenario:"(?:[Сс]ценарій|[Шш]аблон)",examples:"[Пп]риклади",pending:"(?:[Нн]еперевірений|[Чч]екаючий|[Pp]ending|[Tt]odo)",only:"[Тт]ільки",background:"[Кк]онтекст",given:"(?:[Дд]ано|[Пп]ри|[Нн]ехай|[Іі]|[Тт]а|[Аа]ле)",when:"(?:[Яя]кщо|[Дд]е|[Кк]оли|[Іі]|[Тт]а|[Аа]ле)",then:"(?:[Тт]оді|[Іі]|[Тт]а|[Аа]ле)",_steps:["given","when","then"]})},7679:(e,t,n)=>{"use strict" +e.exports={Chinese:n(6404),English:n(1447),French:n(7226),German:n(5805),Dutch:n(3399),Norwegian:n(683),Pirate:n(3411),Ukrainian:n(3845),Polish:n(8617),Spanish:n(7202),Russian:n(342),Portuguese:n(7291),default:n(1447),Language:n(6767)}},691:(e,t,n)=>{"use strict" +e.exports=function(e){var t=n(4061).fs,r=new(n(5968))(e) this.parse=function(e,n){var i=t.readFileSync(e,"utf8"),o=r.parse(i) -return n&&n(o)||o}}},3610:(e,t,n)=>{"use strict" -var r=n(3143),i=n(526),o=n(6007),s=n(5534) +return n&&n(o)||o}}},5968:(e,t,n)=>{"use strict" +var r=n(1627),i=n(1996),o=n(3575),s=n(7679) e.exports=function(e){var t,n,a={language:s.default,leftPlaceholderChar:"[",rightPlaceholderChar:"]"},u=(e=e&&e.is_language?{language:e}:e||a).language||a.language,c=e.leftPlaceholderChar||a.leftPlaceholderChar,l=e.rightPlaceholderChar||a.rightPlaceholderChar,f=new RegExp("^\\s*"+u.localise("feature")+":\\s*(.*)","i"),h=new RegExp("^\\s*"+u.localise("scenario")+":\\s*(.*)","i"),d=new RegExp("^\\s*"+u.localise("background")+":\\s*(.*)","i"),p=new RegExp("^\\s*"+u.localise("examples")+":","i"),g=new RegExp("^(.*)$","i"),v=new RegExp("^\\s*#"),m=new RegExp("^\\s*#{3,}"),y=new RegExp("^(\\s*)$"),b=new RegExp("(^\\s*[\\|┆]?-{3,})"),w=new RegExp("^\\s*@([^=]*)$"),x=new RegExp("^\\s*@([^=]*)=(.*)$") function k(e,r){var i,s=r+1 try{if(i=m.test(e))return n=!n @@ -827,35 +832,35 @@ if(void 0!==t&&t!==i.length)throw new Error("Incorrect number of fields in examp return i}function w(t,n,r){return x(),e.on(t,n,r)}function x(){if(0===t.length)throw new Error("Examples table requires one or more headings") if(0===n.length)throw new Error("Examples table requires one or more rows")}function k(){var e={} return r(Array.prototype.slice.call(arguments)).each((function(t){for(var n in t)e[n]=t[n]})),e}function _(e,t){return r(t).collect((function(t){return C(e,t)})).naked()}function C(e,t){for(var n in e)t=t.replace(new RegExp("\\"+c+"\\s*"+n+"\\s*\\"+l,"g"),o.rtrim(e[n].join("\n"))) -return t}this.on=function(e,t,n){return a.find(e).handle(e,t,n)||this},this.expand=function(e){return x(),n.collect((function(t){return{title:C(t.fields,e.title),annotations:k(t.annotations.export(),e.annotations),description:_(t,e.description),steps:_(t.fields,e.steps)}})).naked()}}}},7724:(e,t,n)=>{"use strict" -var r=n(3143) +return t}this.on=function(e,t,n){return a.find(e).handle(e,t,n)||this},this.expand=function(e){return x(),n.collect((function(t){return{title:C(t.fields,e.title),annotations:k(t.annotations.export(),e.annotations),description:_(t,e.description),steps:_(t.fields,e.steps)}})).naked()}}}},4245:(e,t,n)=>{"use strict" +var r=n(1627) e.exports=function(){var e=/[^\s]/ this.parse=function(e,r){var i=t(e).find_all(n) return r&&r(i)||i} -var t=function(e){return r(e.split(/\n/))},n=function(t){return t&&e.test(t)}}},3574:(e,t,n)=>{"use strict" -e.exports={StepParser:n(7724),FeatureParser:n(3610),FeatureFileParser:n(5070)}},8418:(e,t,n)=>{"use strict" -if(!(e=n.nmd(e)).client){var r=n(9782).fs -n.g.process=n.g.process||{cwd:function(){return r.workingDirectory}}}e.exports=function(e,t){var r=n(409).EventBus +var t=function(e){return r(e.split(/\n/))},n=function(t){return t&&e.test(t)}}},1979:(e,t,n)=>{"use strict" +e.exports={StepParser:n(4245),FeatureParser:n(5968),FeatureFileParser:n(691)}},5807:(e,t,n)=>{"use strict" +if(!(e=n.nmd(e)).client){var r=n(4061).fs +n.g.process=n.g.process||{cwd:function(){return r.workingDirectory}}}e.exports=function(e,t){var r=n(2216).EventBus e.interpreter.interpret_step=function(e,n,i){var o=this t.then((function(){t.test.info(e),r.instance().send(r.ON_STEP,{step:e,ctx:n}),o.rank_macros(e).clear_winner().interpret(e,n,i)}))},t.yadda=function(t,n){if(void 0===t)return this -e.run(t,n)}}},918:(e,t,n)=>{"use strict" -e.exports={casper:n(8418),mocha:{ScenarioLevelPlugin:n(616),StepLevelPlugin:n(2271)},get jasmine(){return this.mocha}}},749:(e,t,n)=>{"use strict" -var r=n(5534),i=n(886),o=n(5070),s=n(3143) -e.exports.create=function(e){var t=new i,n=e.language||r.default,a=e.parser||new o(n),u=e.container||t.get_container() +e.run(t,n)}}},6827:(e,t,n)=>{"use strict" +e.exports={casper:n(5807),mocha:{ScenarioLevelPlugin:n(1908),StepLevelPlugin:n(809)},get jasmine(){return this.mocha}}},1034:(e,t,n)=>{"use strict" +var r=n(7679),i=n(6947),o=n(691),s=n(1627) +e.exports.create=function(e){var t=new i,n=e.language||r.default,a=e.parser||new o(e),u=e.container||t.get_container() function c(e,t){s(e).each((function(e){l(e.title,e,t)}))}function l(e,t,n){var r;(h(r=t.annotations,"pending")?u.xdescribe:h(r,"only")?u.describe.only||u.fdescribe||u.ddescribe:u.describe)(e,(function(){n(t)}))}function f(e,t){return h(e,"pending")?u.xit:h(e,"only")?u.it.only||u.fit||u.iit:u.it}function h(e,t){var r=new RegExp("^"+n.localise(t)+"$","i") -for(var i in e)if(r.test(i))return!0}return{featureFiles:function(e,t){s(e).each((function(e){c(a.parse(e),t)}))},features:c,describe:l,it_async:function(e,t,n){f(t.annotations)(e,(function(e){n(this,t,e)}))},it_sync:function(e,t,n){f(t.annotations)(e,(function(){n(this,t)}))}}}},616:(e,t,n)=>{"use strict" -var r=n(3143),i=n(886),o=n(749) +for(var i in e)if(r.test(i))return!0}return{featureFiles:function(e,t){s(e).each((function(e){c(a.parse(e),t)}))},features:c,describe:l,it_async:function(e,t,n){f(t.annotations)(e,(function(e){n(this,t,e)}))},it_sync:function(e,t,n){f(t.annotations)(e,(function(){n(this,t)}))}}}},1908:(e,t,n)=>{"use strict" +var r=n(1627),i=n(6947),o=n(1034) e.exports.init=function(e){e=e||{} var t=new i,n=e.container||t.get_container(),s=o.create(e) -n.featureFiles=n.featureFile=s.featureFiles,n.features=n.feature=s.features,n.scenarios=n.scenario=function(e,t){r(e).each((function(e){(1===t.length?s.it_sync:s.it_async)(e.title,e,(function(e,n,r){t(n,r)}))}))}}},2271:(e,t,n)=>{"use strict" -var r=n(3143),i=n(886),o=n(749) +n.featureFiles=n.featureFile=s.featureFiles,n.features=n.feature=s.features,n.scenarios=n.scenario=function(e,t){r(e).each((function(e){(1===t.length?s.it_sync:s.it_async)(e.title,e,(function(e,n,r){t(n,r)}))}))}}},809:(e,t,n)=>{"use strict" +var r=n(1627),i=n(6947),o=n(1034) e.exports.init=function(e){e=e||{} var t=new i,n=e.container||t.get_container(),s=o.create(e) n.featureFiles=n.featureFile=s.featureFiles,n.features=n.feature=s.features,n.scenarios=n.scenario=function(e,t){r(e).each((function(e){s.describe(e.title,e,t)}))},n.steps=function(e,t){var n=!1 function i(e,t){s.it_async(e,e,(function(e,r,i){if(n)return e.skip?e.skip():i() n=!0,t.bind(e)(r,(function(e){if(e)return(i.fail||i)(e) n=!1,i()}))}))}function o(e,t){s.it_sync(e,e,(function(e,r){if(n)return e.skip&&e.skip() -n=!0,t.bind(e)(r),n=!1}))}r(e).each((function(e){(1===t.length?o:i)(e,t)}))}}},4633:e=>{"use strict" +n=!0,t.bind(e)(r),n=!1}))}r(e).each((function(e){(1===t.length?o:i)(e,t)}))}}},7131:e=>{"use strict" e.exports=function(e,t){var n this.value,this.type="LevenshteinDistanceScore" var r=this @@ -867,14 +872,14 @@ for(o=0;o<=r;o++)n[o][0]=o for(s=0;s<=i;s++)n[0][s]=s}(),function(){if(e===t)return r.value=0 for(var i=0;i{"use strict" -var r=n(3143) +n[o+1][i+1]=Math.min(u,s,a)}r.value=n[e.length][t.length]}()}},8090:(e,t,n)=>{"use strict" +var r=n(1627) e.exports=function(e){this.scores=r(e),this.type="MultiScore",this.compare=function(e){for(var t=0;t{"use strict" -e.exports=function(e,t){this.value=e.is_sibling(t)?1:0,this.type="SameLibraryScore",this.compare=function(e){return this.value-e.value},this.equals=function(e){return!!e&&this.type===e.type&&this.value===e.value}}},9782:(e,t,n)=>{"use strict" -var r,i,o,s,a=n(886) -e.exports=(i=function(){return{fs:n(9265),path:n(3642),process:process}},o=function(){return{fs:n(4044),path:n(4152),process:n(5284)}},s=function(){return{fs:n(2459),path:n(8281),process:n(7804)}},(r=new a).is_phantom()?o():r.is_browser()&&r.is_karma()?s():r.is_node()?i():{})},2459:(e,t,n)=>{e.exports=function(){"use strict" -var e=n(8281) +if(n)return n}return 0},this.equals=function(e){return!!e&&this.type===e.type&&0===this.compare(e)}}},2062:e=>{"use strict" +e.exports=function(e,t){this.value=e.is_sibling(t)?1:0,this.type="SameLibraryScore",this.compare=function(e){return this.value-e.value},this.equals=function(e){return!!e&&this.type===e.type&&this.value===e.value}}},4061:(e,t,n)=>{"use strict" +var r,i,o=n(6947) +e.exports=(i={node:function(){return{fs:n(9265),path:n(3642),process:process}},phantom:function(){return{fs:n(8091),path:n(6656),process:n(4661)}},karma:function(){return{fs:n(1702),path:n(8104),process:n(5917)}}},(r=new o).is_phantom()?i.phantom():r.is_browser()&&r.is_karma()?i.karma():r.is_node()?i.node():{})},1702:(e,t,n)=>{e.exports=function(){"use strict" +var e=n(8104) function t(t){return e.resolve(e.normalize(t.split("\\").join("/")))}var r=function(){this.registry=new i,this.converter=new o("/base/","/"),this.reader=new s(this.converter) var e=Object.keys(window.__karma__.files) this.converter.parseUris(e).forEach(this.registry.addFile,this.registry)} @@ -894,15 +899,15 @@ return new RegExp(n,t)},parseUris:function(e){return e.filter((function(e){retur return e.replace(this.workingDirectoryPattern,this.baseUri)}} var s=function(e){this.converter=e} return s.prototype={constructor:s,readFile:function(e){var t=this.converter.buildUri(e),n=new XMLHttpRequest -return n.open("get",t,!1),n.send(),n.responseText}},new r}()},8281:(e,t,n)=>{e.exports=function(){"use strict" +return n.open("get",t,!1),n.send(),n.responseText}},new r}()},8104:(e,t,n)=>{e.exports=function(){"use strict" var e={} try{e=n(3642)}catch(e){throw new Error("The environment does not support the path module, it's probably not using browserify.")}if("function"!=typeof e.normalize||"function"!=typeof e.dirname)throw new Error("The path module emulation does not contain implementations of required functions.") -return e}()},7804:(e,t,n)=>{e.exports=function(){"use strict" -var e=n(2459) -return{cwd:function(){return e.workingDirectory}}}()},4044:(e,t,n)=>{"use strict";(e=n.nmd(e)).exports=function(){if(e.client)return{} +return e}()},5917:(e,t,n)=>{e.exports=function(){"use strict" +var e=n(1702) +return{cwd:function(){return e.workingDirectory}}}()},8091:(e,t,n)=>{"use strict";(e=n.nmd(e)).exports=function(){if(e.client)return{} var t=n(9265) -return t.existsSync=t.existsSync||t.exists,t.readdirSync=t.readdirSync||function(e){return t.list(e).filter((function(e){return"."!==e&&".."!==e}))},t.statSync=t.statSync||function(e){return{isDirectory:function(){return t.isDirectory(e)}}},t}()},4152:(e,t,n)=>{"use strict";(e=n.nmd(e)).exports=function(){if(e.client)return{} +return t.existsSync=t.existsSync||t.exists,t.readdirSync=t.readdirSync||function(e){return t.list(e).filter((function(e){return"."!==e&&".."!==e}))},t.statSync=t.statSync||function(e){return{isDirectory:function(){return t.isDirectory(e)}}},t}()},6656:(e,t,n)=>{"use strict";(e=n.nmd(e)).exports=function(){if(e.client)return{} var t=n(9265),r={} -try{r=n(3642)}catch(e){}return r.join=r.join||function(){return Array.prototype.join.call(arguments,t.separator)},r.relative=r.relative||function(e,n){return e+t.separator+n},r}()},5284:(e,t,n)=>{"use strict";(e=n.nmd(e)).exports=function(){if(e.client)return{} +try{r=n(3642)}catch(e){}return r.join=r.join||function(){return Array.prototype.join.call(arguments,t.separator)},r.relative=r.relative||function(e,n){return e+t.separator+n},r}()},4661:(e,t,n)=>{"use strict";(e=n.nmd(e)).exports=function(){if(e.client)return{} var t=n(9265),r=void 0!==r?r:{} return r.cwd=function(){return t.workingDirectory},r}()}}]) diff --git a/agent/uiserver/dist/assets/chunk.336.f5cb05e551aa08eb7125.js.LICENSE.txt b/agent/uiserver/dist/assets/chunk.778.b0fb1162d11e4184d9d0.js.LICENSE.txt similarity index 90% rename from agent/uiserver/dist/assets/chunk.336.f5cb05e551aa08eb7125.js.LICENSE.txt rename to agent/uiserver/dist/assets/chunk.778.b0fb1162d11e4184d9d0.js.LICENSE.txt index 54e228a74b610..3ff66ab722d4b 100644 --- a/agent/uiserver/dist/assets/chunk.336.f5cb05e551aa08eb7125.js.LICENSE.txt +++ b/agent/uiserver/dist/assets/chunk.778.b0fb1162d11e4184d9d0.js.LICENSE.txt @@ -1,5 +1,5 @@ /*! - * QUnit 2.19.1 + * QUnit 2.19.4 * https://qunitjs.com/ * * Copyright OpenJS Foundation and other contributors diff --git a/agent/uiserver/dist/assets/chunk.924.719761ac5e77d019056f.js b/agent/uiserver/dist/assets/chunk.924.719761ac5e77d019056f.js new file mode 100644 index 0000000000000..051c778463d6d --- /dev/null +++ b/agent/uiserver/dist/assets/chunk.924.719761ac5e77d019056f.js @@ -0,0 +1,2523 @@ +/*! For license information please see chunk.924.719761ac5e77d019056f.js.LICENSE.txt */ +(globalThis.webpackChunk_ember_auto_import_=globalThis.webpackChunk_ember_auto_import_||[]).push([[924],{2654:e=>{e.exports=''},6604:(e,t,a)=>{"use strict" +a.r(t),a.d(t,{iconNames:()=>l}) +const l=["loading","loading-static","running","running-static","apple","apple-color","alibaba","alibaba-color","amazon-ecs","amazon-ecs-color","amazon-eks","amazon-eks-color","auth0","auth0-color","aws","aws-color","aws-cdk","aws-cdk-color","aws-cloudwatch","aws-cloudwatch-color","aws-ec2","aws-ec2-color","aws-lambda","aws-lambda-color","aws-s3","aws-s3-color","azure","azure-color","azure-aks","azure-aks-color","azure-blob-storage","azure-blob-storage-color","azure-devops","azure-devops-color","azure-vms","azure-vms-color","bitbucket","bitbucket-color","bridgecrew","bridgecrew-color","cisco","cisco-color","codepen","codepen-color","datadog","datadog-color","digital-ocean","digital-ocean-color","docker","docker-color","elastic-observability","elastic-observability-color","f5","f5-color","facebook","facebook-color","figma","figma-color","gcp","gcp-color","gitlab","gitlab-color","github","github-color","google","google-color","google-docs","google-docs-color","google-drive","google-drive-color","google-forms","google-forms-color","google-sheets","google-sheets-color","google-slides","google-slides-color","grafana","grafana-color","helm","helm-color","infracost","infracost-color","jfrog","jfrog-color","jira","jira-color","kubernetes","kubernetes-color","lightlytics","lightlytics-color","linkedin","linkedin-color","linode","linode-color","linux","linux-color","loom","loom-color","microsoft","microsoft-color","microsoft-teams","microsoft-teams-color","new-relic","new-relic-color","okta","okta-color","oracle","oracle-color","opa","opa-color","pack","pack-color","saml","saml-color","slack","slack-color","snyk","snyk-color","splunk","splunk-color","twitch","twitch-color","twitter","twitter-color","twitter-x","twitter-x-color","vantage","vantage-color","venafi","venafi-color","vercel","vercel-color","vmware","vmware-color","youtube","youtube-color","boundary","boundary-color","consul","consul-color","nomad","nomad-color","packer","packer-color","terraform","terraform-color","vagrant","vagrant-color","vault","vault-color","vault-secrets","vault-secrets-color","waypoint","waypoint-color","hashicorp","hashicorp-color","hcp","hcp-color","activity","alert-circle","alert-circle-fill","alert-diamond","alert-diamond-fill","alert-triangle","alert-triangle-fill","alert-octagon","alert-octagon-fill","align-center","align-justify","align-left","align-right","ampersand","api","archive","arrow-down","arrow-down-circle","arrow-down-left","arrow-down-right","arrow-left","arrow-left-circle","arrow-right","arrow-right-circle","arrow-up","arrow-up-circle","arrow-up-left","arrow-up-right","at-sign","award","auto-apply","bank-vault","bar-chart","bar-chart-alt","battery","battery-charging","beaker","bell","bell-active-fill","bell-active","bell-off","bookmark","bookmark-fill","bookmark-add","bookmark-add-fill","bookmark-remove","bookmark-remove-fill","bottom","box","briefcase","bug","build","bulb","calendar","camera","camera-off","caret","cast","certificate","change","change-circle","change-square","check","check-circle","check-circle-fill","check-diamond","check-diamond-fill","check-hexagon","check-hexagon-fill","check-square","check-square-fill","chevron-down","chevron-left","chevron-right","chevron-up","chevrons-down","chevrons-left","chevrons-right","chevrons-up","circle","circle-dot","circle-fill","circle-half","clipboard","clipboard-checked","clipboard-copy","clipboard-x","clock","clock-filled","cloud","closed-caption","cloud-check","cloud-download","cloud-lightning","cloud-lock","cloud-off","cloud-upload","cloud-x","code","collections","command","compass","connection","connection-gateway","corner-down-left","corner-down-right","corner-left-down","corner-left-up","corner-right-down","corner-right-up","corner-up-left","corner-up-right","cpu","credit-card","crop","crosshair","dashboard","database","delay","delete","diamond","diamond-fill","disc","discussion-circle","discussion-square","docs","docs-download","docs-link","dollar-sign","dot","dot-half","download","droplet","duplicate","edit","enterprise","entry-point","exit-point","external-link","event","eye","eye-off","fast-forward","file","file-check","file-change","file-diff","file-minus","file-plus","file-source","file-text","file-x","files","film","filter","filter-circle","filter-fill","fingerprint","flag","folder","folder-fill","folder-minus","folder-minus-fill","folder-plus","folder-plus-fill","folder-star","folder-users","frown","gateway","gift","git-branch","git-commit","git-merge","git-pull-request","git-repo","globe","globe-private","government","grid","grid-alt","guide","guide-link","hammer","handshake","hard-drive","hash","headphones","heart","heart-fill","heart-off","help","hexagon","hexagon-fill","history","home","hourglass","identity-user","identity-service","image","inbox","info","info-fill","jump-link","key","keychain","key-values","labyrinth","layers","layout","learn","learn-link","line-chart","line-chart-up","link","list","load-balancer","lock","lock-fill","lock-off","logs","mail","mail-open","mainframe","map","map-pin","maximize","maximize-alt","meh","menu","mesh","message-circle","message-circle-fill","message-square","message-square-fill","mic","mic-off","migrate","minimize","minimize-alt","minus","minus-circle","minus-square","minus-square-fill","minus-plus","minus-plus-circle","minus-plus-square","module","monitor","moon","more-horizontal","more-vertical","mouse-pointer","move","music","navigation","navigation-alt","network","network-alt","newspaper","node","octagon","org","outline","package","paperclip","path","pause","pause-circle","pen-tool","pencil-tool","phone","phone-call","phone-off","pie-chart","pin","pipeline","play","play-circle","plug","plus","plus-circle","plus-square","power","printer","provider","queue","radio","random","redirect","reload","repeat","replication-direct","replication-perf","rewind","robot","rocket","rotate-cw","rotate-ccw","rss","save","scissors","search","send","server","serverless","server-cluster","settings","service","share","shield","shield-alert","shield-check","shield-off","shield-x","shopping-bag","shopping-cart","shuffle","sidebar","sidebar-hide","sidebar-show","sign-in","sign-out","skip","skip-forward","skip-back","slash","slash-square","sliders","smartphone","smile","socket","sort-asc","sort-desc","speaker","square","square-fill","star","star-circle","star-fill","star-off","step","stop-circle","sun","support","swap-horizontal","swap-vertical","switcher","sync","sync-alert","sync-reverse","tablet","tag","target","terminal","terminal-screen","test","thumbs-up","thumbs-down","toggle-left","toggle-right","token","tools","top","trash","trend-down","trend-up","triangle","triangle-fill","truck","tv","type","unfold-open","unfold-close","unlock","upload","user","user-check","user-circle","user-circle-fill","user-minus","user-plus","user-x","users","verified","video","video-off","volume","volume-down","volume-2","volume-x","wall","wand","watch","webhook","wifi","wifi-off","wrench","x","x-circle","x-circle-fill","x-diamond","x-diamond-fill","x-hexagon","x-hexagon-fill","x-square","x-square-fill","zap","zap-off","zoom-in","zoom-out"]},7440:(e,t,a)=>{"use strict" +function l(e,t){var a="function"==typeof Symbol&&e[Symbol.iterator] +if(!a)return e +var l,i,o=a.call(e),n=[] +try{for(;(void 0===t||t-- >0)&&!(l=o.next()).done;)n.push(l.value)}catch(e){i={error:e}}finally{try{l&&!l.done&&(a=o.return)&&a.call(o)}finally{if(i)throw i.error}}return n}var i +a.r(t),a.d(t,{InterpreterStatus:()=>i,assign:()=>r,createMachine:()=>f,interpret:()=>p}),function(e){e[e.NotStarted=0]="NotStarted",e[e.Running=1]="Running",e[e.Stopped=2]="Stopped"}(i||(i={})) +var o={type:"xstate.init"} +function n(e){return void 0===e?[]:[].concat(e)}function r(e){return{type:"xstate.assign",assignment:e}}function c(e,t){return"string"==typeof(e="string"==typeof e&&t&&t[e]?t[e]:e)?{type:e}:"function"==typeof e?{type:e.name,exec:e}:e}function h(e){return function(t){return e===t}}function s(e){return"string"==typeof e?{type:e}:e}function d(e,t){return{value:e,context:t,actions:[],changed:!1,matches:h(e)}}function u(e,t,a){var l=t,i=!1 +return[e.filter((function(e){if("xstate.assign"===e.type){i=!0 +var t=Object.assign({},l) +return"function"==typeof e.assignment?t=e.assignment(l,a):Object.keys(e.assignment).forEach((function(i){t[i]="function"==typeof e.assignment[i]?e.assignment[i](l,a):e.assignment[i]})),l=t,!1}return!0})),l,i]}function f(e,t){void 0===t&&(t={}) +var a=l(u(n(e.states[e.initial].entry).map((function(e){return c(e,t.actions)})),e.context,o),2),i=a[0],r=a[1],f={config:e,_options:t,initialState:{value:e.initial,actions:i,context:r,matches:h(e.initial)},transition:function(t,a){var i,o,r="string"==typeof t?{value:t,context:e.context}:t,v=r.value,p=r.context,m=s(a),y=e.states[v] +if(y.on){var g=n(y.on[m.type]) +try{for(var b=function(e){var t="function"==typeof Symbol&&Symbol.iterator,a=t&&e[t],l=0 +if(a)return a.call(e) +if(e&&"number"==typeof e.length)return{next:function(){return e&&l>=e.length&&(e=void 0),{value:e&&e[l++],done:!e}}} +throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}(g),z=b.next();!z.done;z=b.next()){var M=z.value +if(void 0===M)return d(v,p) +var A="string"==typeof M?{target:M}:M,w=A.target,x=A.actions,H=void 0===x?[]:x,V=A.cond,_=void 0===V?function(){return!0}:V,B=void 0===w,L=null!=w?w:v,C=e.states[L] +if(_(p,m)){var E=l(u((B?n(H):[].concat(y.exit,H,C.entry).filter((function(e){return e}))).map((function(e){return c(e,f._options.actions)})),p,m),3),k=E[0],D=E[1],S=E[2],F=null!=w?w:v +return{value:F,context:D,actions:k,changed:w!==v||k.length>0||S,matches:h(F)}}}}catch(e){i={error:e}}finally{try{z&&!z.done&&(o=b.return)&&o.call(b)}finally{if(i)throw i.error}}}return d(v,p)}} +return f}var v=function(e,t){return e.actions.forEach((function(a){var l=a.exec +return l&&l(e.context,t)}))} +function p(e){var t=e.initialState,a=i.NotStarted,l=new Set,n={_machine:e,send:function(o){a===i.Running&&(t=e.transition(t,o),v(t,s(o)),l.forEach((function(e){return e(t)})))},subscribe:function(e){return l.add(e),e(t),{unsubscribe:function(){return l.delete(e)}}},start:function(l){if(l){var r="object"==typeof l?l:{context:e.config.context,value:l} +t={value:r.value,actions:[],context:r.context,matches:h(r.value)}}return a=i.Running,v(t,o),n},stop:function(){return a=i.Stopped,l.clear(),n},get state(){return t},get status(){return a}} +return n}},1413:(e,t,a)=>{"use strict" +a.r(t),a.d(t,{default:()=>s}) +var l=['a[href]:not([tabindex^="-"])','area[href]:not([tabindex^="-"])','input:not([type="hidden"]):not([type="radio"]):not([disabled]):not([tabindex^="-"])','input[type="radio"]:not([disabled]):not([tabindex^="-"]):checked','select:not([disabled]):not([tabindex^="-"])','textarea:not([disabled]):not([tabindex^="-"])','button:not([disabled]):not([tabindex^="-"])','iframe:not([tabindex^="-"])','audio[controls]:not([tabindex^="-"])','video[controls]:not([tabindex^="-"])','[contenteditable]:not([tabindex^="-"])','[tabindex]:not([tabindex^="-"])'] +function i(e,t){this._show=this.show.bind(this),this._hide=this.hide.bind(this),this._maintainFocus=this._maintainFocus.bind(this),this._bindKeypress=this._bindKeypress.bind(this),this._previouslyFocused=null,this.container=e,this.dialog=e.querySelector('dialog, [role="dialog"], [role="alertdialog"]'),this.role=this.dialog.getAttribute("role")||"dialog",this.useDialog="show"in this.dialog,this._listeners={},this.create(t)}function o(e){return Array.prototype.slice.call(e)}function n(e,t){return o((t||document).querySelectorAll(e))}function r(e){var t=c(e),a=e.querySelector("[autofocus]")||t[0] +a&&a.focus()}function c(e){return n(l.join(","),e).filter((function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)}))}function h(){n("[data-a11y-dialog]").forEach((function(e){new i(e,e.getAttribute("data-a11y-dialog")||void 0)}))}i.prototype.create=function(e){var t,a,l +return this._targets=this._targets||(l=e,NodeList.prototype.isPrototypeOf(l)?o(l):Element.prototype.isPrototypeOf(l)?[l]:"string"==typeof l?n(l):void 0)||((a=o((t=this.container).parentNode.childNodes).filter((function(e){return 1===e.nodeType}))).splice(a.indexOf(t),1),a),this.shown=this.dialog.hasAttribute("open"),this.dialog.setAttribute("role",this.role),this.useDialog?(this.container.setAttribute("data-a11y-dialog-native",""),this.container.removeAttribute("aria-hidden")):this.shown?this.container.removeAttribute("aria-hidden"):this.container.setAttribute("aria-hidden",!0),this._openers=n('[data-a11y-dialog-show="'+this.container.id+'"]'),this._openers.forEach(function(e){e.addEventListener("click",this._show)}.bind(this)),this._closers=n("[data-a11y-dialog-hide]",this.container).concat(n('[data-a11y-dialog-hide="'+this.container.id+'"]')),this._closers.forEach(function(e){e.addEventListener("click",this._hide)}.bind(this)),this._fire("create"),this},i.prototype.show=function(e){return this.shown||(this.shown=!0,this._previouslyFocused=document.activeElement,this.useDialog?this.dialog.showModal(e instanceof Event?void 0:e):(this.dialog.setAttribute("open",""),this.container.removeAttribute("aria-hidden"),this._targets.forEach((function(e){e.hasAttribute("aria-hidden")&&e.setAttribute("data-a11y-dialog-original-aria-hidden",e.getAttribute("aria-hidden")),e.setAttribute("aria-hidden","true")}))),r(this.dialog),document.body.addEventListener("focus",this._maintainFocus,!0),document.addEventListener("keydown",this._bindKeypress),this._fire("show",e)),this},i.prototype.hide=function(e){return this.shown?(this.shown=!1,this.useDialog?this.dialog.close(e instanceof Event?void 0:e):(this.dialog.removeAttribute("open"),this.container.setAttribute("aria-hidden","true"),this._targets.forEach((function(e){e.hasAttribute("data-a11y-dialog-original-aria-hidden")?(e.setAttribute("aria-hidden",e.getAttribute("data-a11y-dialog-original-aria-hidden")),e.removeAttribute("data-a11y-dialog-original-aria-hidden")):e.removeAttribute("aria-hidden")}))),this._previouslyFocused&&this._previouslyFocused.focus&&this._previouslyFocused.focus(),document.body.removeEventListener("focus",this._maintainFocus,!0),document.removeEventListener("keydown",this._bindKeypress),this._fire("hide",e),this):this},i.prototype.destroy=function(){return this.hide(),this._openers.forEach(function(e){e.removeEventListener("click",this._show)}.bind(this)),this._closers.forEach(function(e){e.removeEventListener("click",this._hide)}.bind(this)),this._fire("destroy"),this._listeners={},this},i.prototype.on=function(e,t){return void 0===this._listeners[e]&&(this._listeners[e]=[]),this._listeners[e].push(t),this},i.prototype.off=function(e,t){var a=(this._listeners[e]||[]).indexOf(t) +return a>-1&&this._listeners[e].splice(a,1),this},i.prototype._fire=function(e,t){(this._listeners[e]||[]).forEach(function(e){e(this.container,t)}.bind(this))},i.prototype._bindKeypress=function(e){this.dialog.contains(document.activeElement)&&(this.shown&&27===e.which&&"alertdialog"!==this.role&&(e.preventDefault(),this.hide(e)),this.shown&&9===e.which&&function(e,t){var a=c(e),l=a.indexOf(document.activeElement) +t.shiftKey&&0===l?(a[a.length-1].focus(),t.preventDefault()):t.shiftKey||l!==a.length-1||(a[0].focus(),t.preventDefault())}(this.dialog,e))},i.prototype._maintainFocus=function(e){this.shown&&!e.target.closest('dialog, [role="dialog"], [role="alertdialog"]')&&r(this.container)},"undefined"!=typeof document&&("loading"===document.readyState?document.addEventListener("DOMContentLoaded",h):window.requestAnimationFrame?window.requestAnimationFrame(h):window.setTimeout(h,16)) +const s=i},8294:(e,t)=>{"use strict" +t.byteLength=function(e){var t=c(e),a=t[0],l=t[1] +return 3*(a+l)/4-l},t.toByteArray=function(e){var t,a,o=c(e),n=o[0],r=o[1],h=new i(function(e,t,a){return 3*(t+a)/4-a}(0,n,r)),s=0,d=r>0?n-4:n +for(a=0;a>16&255,h[s++]=t>>8&255,h[s++]=255&t +return 2===r&&(t=l[e.charCodeAt(a)]<<2|l[e.charCodeAt(a+1)]>>4,h[s++]=255&t),1===r&&(t=l[e.charCodeAt(a)]<<10|l[e.charCodeAt(a+1)]<<4|l[e.charCodeAt(a+2)]>>2,h[s++]=t>>8&255,h[s++]=255&t),h},t.fromByteArray=function(e){for(var t,l=e.length,i=l%3,o=[],n=16383,r=0,c=l-i;rc?c:r+n)) +return 1===i?(t=e[l-1],o.push(a[t>>2]+a[t<<4&63]+"==")):2===i&&(t=(e[l-2]<<8)+e[l-1],o.push(a[t>>10]+a[t>>4&63]+a[t<<2&63]+"=")),o.join("")} +for(var a=[],l=[],i="undefined"!=typeof Uint8Array?Uint8Array:Array,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",n=0,r=o.length;n0)throw new Error("Invalid string. Length must be a multiple of 4") +var a=e.indexOf("=") +return-1===a&&(a=t),[a,a===t?0:4-a%4]}function h(e,t,l){for(var i,o,n=[],r=t;r>18&63]+a[o>>12&63]+a[o>>6&63]+a[63&o]) +return n.join("")}l["-".charCodeAt(0)]=62,l["_".charCodeAt(0)]=63},9079:function(e){var t +t=function(){return function(){var e={686:function(e,t,a){"use strict" +a.d(t,{default:function(){return z}}) +var l=a(279),i=a.n(l),o=a(370),n=a.n(o),r=a(817),c=a.n(r) +function h(e){try{return document.execCommand(e)}catch(e){return!1}}var s=function(e){var t=c()(e) +return h("cut"),t},d=function(e,t){var a=function(e){var t="rtl"===document.documentElement.getAttribute("dir"),a=document.createElement("textarea") +a.style.fontSize="12pt",a.style.border="0",a.style.padding="0",a.style.margin="0",a.style.position="absolute",a.style[t?"right":"left"]="-9999px" +var l=window.pageYOffset||document.documentElement.scrollTop +return a.style.top="".concat(l,"px"),a.setAttribute("readonly",""),a.value=e,a}(e) +t.container.appendChild(a) +var l=c()(a) +return h("copy"),a.remove(),l},u=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{container:document.body},a="" +return"string"==typeof e?a=d(e,t):e instanceof HTMLInputElement&&!["text","search","url","tel","password"].includes(null==e?void 0:e.type)?a=d(e.value,t):(a=c()(e),h("copy")),a} +function f(e){return f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},f(e)}function v(e){return v="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},v(e)}function p(e,t){for(var a=0;a0&&void 0!==arguments[0]?arguments[0]:{} +this.action="function"==typeof e.action?e.action:this.defaultAction,this.target="function"==typeof e.target?e.target:this.defaultTarget,this.text="function"==typeof e.text?e.text:this.defaultText,this.container="object"===v(e.container)?e.container:document.body}},{key:"listenClick",value:function(e){var t=this +this.listener=n()(e,"click",(function(e){return t.onClick(e)}))}},{key:"onClick",value:function(e){var t=e.delegateTarget||e.currentTarget,a=this.action(t)||"copy",l=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.action,a=void 0===t?"copy":t,l=e.container,i=e.target,o=e.text +if("copy"!==a&&"cut"!==a)throw new Error('Invalid "action" value, use either "copy" or "cut"') +if(void 0!==i){if(!i||"object"!==f(i)||1!==i.nodeType)throw new Error('Invalid "target" value, use a valid Element') +if("copy"===a&&i.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute') +if("cut"===a&&(i.hasAttribute("readonly")||i.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes')}return o?u(o,{container:l}):i?"cut"===a?s(i):u(i,{container:l}):void 0}({action:a,container:this.container,target:this.target(t),text:this.text(t)}) +this.emit(l?"success":"error",{action:a,text:l,trigger:t,clearSelection:function(){t&&t.focus(),window.getSelection().removeAllRanges()}})}},{key:"defaultAction",value:function(e){return g("action",e)}},{key:"defaultTarget",value:function(e){var t=g("target",e) +if(t)return document.querySelector(t)}},{key:"defaultText",value:function(e){return g("text",e)}},{key:"destroy",value:function(){this.listener.destroy()}}],l=[{key:"copy",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{container:document.body} +return u(e,t)}},{key:"cut",value:function(e){return s(e)}},{key:"isSupported",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],t="string"==typeof e?[e]:e,a=!!document.queryCommandSupported +return t.forEach((function(e){a=a&&!!document.queryCommandSupported(e)})),a}}],a&&p(t.prototype,a),l&&p(t,l),c}(i()),z=b},828:function(e){if("undefined"!=typeof Element&&!Element.prototype.matches){var t=Element.prototype +t.matches=t.matchesSelector||t.mozMatchesSelector||t.msMatchesSelector||t.oMatchesSelector||t.webkitMatchesSelector}e.exports=function(e,t){for(;e&&9!==e.nodeType;){if("function"==typeof e.matches&&e.matches(t))return e +e=e.parentNode}}},438:function(e,t,a){var l=a(828) +function i(e,t,a,l,i){var n=o.apply(this,arguments) +return e.addEventListener(a,n,i),{destroy:function(){e.removeEventListener(a,n,i)}}}function o(e,t,a,i){return function(a){a.delegateTarget=l(a.target,t),a.delegateTarget&&i.call(e,a)}}e.exports=function(e,t,a,l,o){return"function"==typeof e.addEventListener?i.apply(null,arguments):"function"==typeof a?i.bind(null,document).apply(null,arguments):("string"==typeof e&&(e=document.querySelectorAll(e)),Array.prototype.map.call(e,(function(e){return i(e,t,a,l,o)})))}},879:function(e,t){t.node=function(e){return void 0!==e&&e instanceof HTMLElement&&1===e.nodeType},t.nodeList=function(e){var a=Object.prototype.toString.call(e) +return void 0!==e&&("[object NodeList]"===a||"[object HTMLCollection]"===a)&&"length"in e&&(0===e.length||t.node(e[0]))},t.string=function(e){return"string"==typeof e||e instanceof String},t.fn=function(e){return"[object Function]"===Object.prototype.toString.call(e)}},370:function(e,t,a){var l=a(879),i=a(438) +e.exports=function(e,t,a){if(!e&&!t&&!a)throw new Error("Missing required arguments") +if(!l.string(t))throw new TypeError("Second argument must be a String") +if(!l.fn(a))throw new TypeError("Third argument must be a Function") +if(l.node(e))return function(e,t,a){return e.addEventListener(t,a),{destroy:function(){e.removeEventListener(t,a)}}}(e,t,a) +if(l.nodeList(e))return function(e,t,a){return Array.prototype.forEach.call(e,(function(e){e.addEventListener(t,a)})),{destroy:function(){Array.prototype.forEach.call(e,(function(e){e.removeEventListener(t,a)}))}}}(e,t,a) +if(l.string(e))return function(e,t,a){return i(document.body,e,t,a)}(e,t,a) +throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}},817:function(e){e.exports=function(e){var t +if("SELECT"===e.nodeName)e.focus(),t=e.value +else if("INPUT"===e.nodeName||"TEXTAREA"===e.nodeName){var a=e.hasAttribute("readonly") +a||e.setAttribute("readonly",""),e.select(),e.setSelectionRange(0,e.value.length),a||e.removeAttribute("readonly"),t=e.value}else{e.hasAttribute("contenteditable")&&e.focus() +var l=window.getSelection(),i=document.createRange() +i.selectNodeContents(e),l.removeAllRanges(),l.addRange(i),t=l.toString()}return t}},279:function(e){function t(){}t.prototype={on:function(e,t,a){var l=this.e||(this.e={}) +return(l[e]||(l[e]=[])).push({fn:t,ctx:a}),this},once:function(e,t,a){var l=this +function i(){l.off(e,i),t.apply(a,arguments)}return i._=t,this.on(e,i,a)},emit:function(e){for(var t=[].slice.call(arguments,1),a=((this.e||(this.e={}))[e]||[]).slice(),l=0,i=a.length;l{"use strict" +function l(e,t){return et?1:e>=t?0:NaN}a.d(t,{Z:()=>l})},8734:(e,t,a)=>{"use strict" +a.d(t,{Nw:()=>c,ZP:()=>s,ZR:()=>h,ml:()=>r}) +var l=a(9731),i=a(7870),o=a(3342) +const n=(0,i.Z)(l.Z),r=n.right,c=n.left,h=(0,i.Z)(o.Z).center,s=r},7870:(e,t,a)=>{"use strict" +a.d(t,{Z:()=>i}) +var l=a(9731) +function i(e){let t=e,a=e +function i(e,t,l,i){for(null==l&&(l=0),null==i&&(i=e.length);l>>1 +a(e[o],t)<0?l=o+1:i=o}return l}return 1===e.length&&(t=(t,a)=>e(t)-a,a=function(e){return(t,a)=>(0,l.Z)(e(t),a)}(e)),{left:i,center:function(e,a,l,o){null==l&&(l=0),null==o&&(o=e.length) +const n=i(e,a,l,o-1) +return n>l&&t(e[n-1],a)>-t(e[n],a)?n-1:n},right:function(e,t,l,i){for(null==l&&(l=0),null==i&&(i=e.length);l>>1 +a(e[o],t)>0?i=o:l=o+1}return l}}}},5447:(e,t,a)=>{"use strict" +a.r(t),a.d(t,{Adder:()=>m,InternMap:()=>b,InternSet:()=>z,ascending:()=>i.Z,bin:()=>I,bisect:()=>l.ZP,bisectCenter:()=>l.ZR,bisectLeft:()=>l.Nw,bisectRight:()=>l.ml,bisector:()=>o.Z,count:()=>n,cross:()=>s,cumsum:()=>d,descending:()=>u,deviation:()=>v,difference:()=>Me,disjoint:()=>Ae,every:()=>pe,extent:()=>p,fcumsum:()=>g,filter:()=>ye,fsum:()=>y,greatest:()=>ne,greatestIndex:()=>re,group:()=>V,groupSort:()=>O,groups:()=>_,histogram:()=>I,index:()=>C,indexes:()=>E,intersection:()=>xe,least:()=>ie,leastIndex:()=>oe,map:()=>ge,max:()=>Z.Z,maxIndex:()=>Y,mean:()=>K,median:()=>W,merge:()=>X,min:()=>J.Z,minIndex:()=>Q,nice:()=>R,pairs:()=>ee,permute:()=>S,quantile:()=>G.Z,quantileSorted:()=>G.s,quickselect:()=>ae.Z,range:()=>le.Z,reduce:()=>be,reverse:()=>ze,rollup:()=>B,rollups:()=>L,scan:()=>ce,shuffle:()=>he,shuffler:()=>se,some:()=>me,sort:()=>F,subset:()=>Ve,sum:()=>de,superset:()=>He,thresholdFreedmanDiaconis:()=>$,thresholdScott:()=>q,thresholdSturges:()=>j,tickIncrement:()=>U.G9,tickStep:()=>U.ly,ticks:()=>U.ZP,transpose:()=>ue,union:()=>_e,variance:()=>f,zip:()=>ve}) +var l=a(8734),i=a(9731),o=a(7870) +function n(e,t){let a=0 +if(void 0===t)for(let l of e)null!=l&&(l=+l)>=l&&++a +else{let l=-1 +for(let i of e)null!=(i=t(i,++l,e))&&(i=+i)>=i&&++a}return a}function r(e){return 0|e.length}function c(e){return!(e>0)}function h(e){return"object"!=typeof e||"length"in e?e:Array.from(e)}function s(){for(var e=arguments.length,t=new Array(e),a=0;ae(...t)}(t.pop()),i=(t=t.map(h)).map(r),o=t.length-1,n=new Array(o+1).fill(0),s=[] +if(o<0||i.some(c))return s +for(;;){s.push(n.map(((e,a)=>t[a][e]))) +let e=o +for(;++n[e]===i[e];){if(0===e)return l?s.map(l):s +n[e--]=0}}}function d(e,t){var a=0,l=0 +return Float64Array.from(e,void 0===t?e=>a+=+e||0:i=>a+=+t(i,l++,e)||0)}function u(e,t){return te?1:t>=e?0:NaN}function f(e,t){let a,l=0,i=0,o=0 +if(void 0===t)for(let n of e)null!=n&&(n=+n)>=n&&(a=n-i,i+=a/++l,o+=a*(n-i)) +else{let n=-1 +for(let r of e)null!=(r=t(r,++n,e))&&(r=+r)>=r&&(a=r-i,i+=a/++l,o+=a*(r-i))}if(l>1)return o/(l-1)}function v(e,t){const a=f(e,t) +return a?Math.sqrt(a):a}function p(e,t){let a,l +if(void 0===t)for(const i of e)null!=i&&(void 0===a?i>=i&&(a=l=i):(a>i&&(a=i),l=o&&(a=l=o):(a>o&&(a=o),l0){for(o=e[--i];i>0&&(t=o,a=e[--i],o=t+a,l=a-(o-t),!l););i>0&&(l<0&&e[i-1]<0||l>0&&e[i-1]>0)&&(a=2*l,t=o+a,a==t-o&&(o=t))}return o}}function y(e,t){const a=new m +if(void 0===t)for(let l of e)(l=+l)&&a.add(l) +else{let l=-1 +for(let i of e)(i=+t(i,++l,e))&&a.add(i)}return+a}function g(e,t){const a=new m +let l=-1 +return Float64Array.from(e,void 0===t?e=>a.add(+e||0):i=>a.add(+t(i,++l,e)||0))}class b extends Map{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:x +if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:t}}),null!=e)for(const[a,l]of e)this.set(a,l)}get(e){return super.get(M(this,e))}has(e){return super.has(M(this,e))}set(e,t){return super.set(A(this,e),t)}delete(e){return super.delete(w(this,e))}}class z extends Set{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:x +if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:t}}),null!=e)for(const a of e)this.add(a)}has(e){return super.has(M(this,e))}add(e){return super.add(A(this,e))}delete(e){return super.delete(w(this,e))}}function M(e,t){let{_intern:a,_key:l}=e +const i=l(t) +return a.has(i)?a.get(i):t}function A(e,t){let{_intern:a,_key:l}=e +const i=l(t) +return a.has(i)?a.get(i):(a.set(i,t),t)}function w(e,t){let{_intern:a,_key:l}=e +const i=l(t) +return a.has(i)&&(t=a.get(t),a.delete(i)),t}function x(e){return null!==e&&"object"==typeof e?e.valueOf():e}function H(e){return e}function V(e){for(var t=arguments.length,a=new Array(t>1?t-1:0),l=1;l1?t-1:0),l=1;l2?a-2:0),i=2;i2?a-2:0),i=2;i1?t-1:0),l=1;l1?t-1:0),l=1;l=l.length)return a(i) +const n=new b,r=l[o++] +let c=-1 +for(const t of i){const e=r(t,++c,i),a=n.get(e) +a?a.push(t):n.set(e,[t])}for(const[t,a]of n)n.set(t,e(a,o)) +return t(n)}(e,0)}function S(e,t){return Array.from(t,(t=>e[t]))}function F(e){for(var t=arguments.length,a=new Array(t>1?t-1:0),l=1;l1){const t=Uint32Array.from(e,((e,t)=>t)) +return a.length>1?(a=a.map((t=>e.map(t))),t.sort(((e,t)=>{for(const l of a){const a=(0,i.Z)(l[e],l[t]) +if(a)return a}}))):(o=e.map(o),t.sort(((e,t)=>(0,i.Z)(o[e],o[t])))),S(e,t)}return e.sort(o)}function O(e,t,a){return(1===t.length?F(B(e,t,a),((e,t)=>{let[a,l]=e,[o,n]=t +return(0,i.Z)(l,n)||(0,i.Z)(a,o)})):F(V(e,a),((e,a)=>{let[l,o]=e,[n,r]=a +return t(o,r)||(0,i.Z)(l,n)}))).map((e=>{let[t]=e +return t}))}var T=Array.prototype,P=T.slice +function N(e){return function(){return e}}T.map +var U=a(7666) +function R(e,t,a){let l +for(;;){const i=(0,U.G9)(e,t,a) +if(i===l||0===i||!isFinite(i))return[e,t] +i>0?(e=Math.floor(e/i)*i,t=Math.ceil(t/i)*i):i<0&&(e=Math.ceil(e*i)/i,t=Math.floor(t*i)/i),l=i}}function j(e){return Math.ceil(Math.log(n(e))/Math.LN2)+1}function I(){var e=H,t=p,a=j +function i(i){Array.isArray(i)||(i=Array.from(i)) +var o,n,r=i.length,c=new Array(r) +for(o=0;o=d)if(e>=d&&t===p){const e=(0,U.G9)(s,d,a) +isFinite(e)&&(e>0?d=(Math.floor(d/e)+1)*e:e<0&&(d=(Math.ceil(d*-e)+1)/-e))}else u.pop()}for(var f=u.length;u[0]<=s;)u.shift(),--f +for(;u[f-1]>d;)u.pop(),--f +var v,m=new Array(f+1) +for(o=0;o<=f;++o)(v=m[o]=[]).x0=o>0?u[o-1]:s,v.x1=o=o)&&(a=o,l=i) +else for(let o of e)null!=(o=t(o,++i,e))&&(a=o)&&(a=o,l=i) +return l}function K(e,t){let a=0,l=0 +if(void 0===t)for(let i of e)null!=i&&(i=+i)>=i&&(++a,l+=i) +else{let i=-1 +for(let o of e)null!=(o=t(o,++i,e))&&(o=+o)>=o&&(++a,l+=o)}if(a)return l/a}function W(e,t){return(0,G.Z)(e,.5,t)}function X(e){return Array.from(function*(e){for(const t of e)yield*t}(e))}var J=a(3631) +function Q(e,t){let a,l=-1,i=-1 +if(void 0===t)for(const o of e)++i,null!=o&&(a>o||void 0===a&&o>=o)&&(a=o,l=i) +else for(let o of e)null!=(o=t(o,++i,e))&&(a>o||void 0===a&&o>=o)&&(a=o,l=i) +return l}function ee(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:te +const a=[] +let l,i=!1 +for(const o of e)i&&a.push(t(l,o)),l=o,i=!0 +return a}function te(e,t){return[e,t]}var ae=a(8608),le=a(5232) +function ie(e){let t,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:i.Z,l=!1 +if(1===a.length){let o +for(const n of e){const e=a(n);(l?(0,i.Z)(e,o)<0:0===(0,i.Z)(e,e))&&(t=n,o=e,l=!0)}}else for(const i of e)(l?a(i,t)<0:0===a(i,i))&&(t=i,l=!0) +return t}function oe(e){let t,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:i.Z +if(1===a.length)return Q(e,a) +let l=-1,o=-1 +for(const i of e)++o,(l<0?0===a(i,i):a(i,t)<0)&&(t=i,l=o) +return l}function ne(e){let t,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:i.Z,l=!1 +if(1===a.length){let o +for(const n of e){const e=a(n);(l?(0,i.Z)(e,o)>0:0===(0,i.Z)(e,e))&&(t=n,o=e,l=!0)}}else for(const i of e)(l?a(i,t)>0:0===a(i,i))&&(t=i,l=!0) +return t}function re(e){let t,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:i.Z +if(1===a.length)return Y(e,a) +let l=-1,o=-1 +for(const i of e)++o,(l<0?0===a(i,i):a(i,t)>0)&&(t=i,l=o) +return l}function ce(e,t){const a=oe(e,t) +return a<0?void 0:a}const he=se(Math.random) +function se(e){return function(t){let a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,l=(arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.length)-(a=+a) +for(;l;){const i=e()*l--|0,o=t[l+a] +t[l+a]=t[i+a],t[i+a]=o}return t}}function de(e,t){let a=0 +if(void 0===t)for(let l of e)(l=+l)&&(a+=l) +else{let l=-1 +for(let i of e)(i=+t(i,++l,e))&&(a+=i)}return a}function ue(e){if(!(i=e.length))return[] +for(var t=-1,a=(0,J.Z)(e,fe),l=new Array(a);++tt(a,l,e)))}function be(e,t,a){if("function"!=typeof t)throw new TypeError("reducer is not a function") +const l=e[Symbol.iterator]() +let i,o,n=-1 +if(arguments.length<3){if(({done:i,value:a}=l.next()),i)return;++n}for(;({done:i,value:o}=l.next()),!i;)a=t(a,o,++n,e) +return a}function ze(e){if("function"!=typeof e[Symbol.iterator])throw new TypeError("values is not iterable") +return Array.from(e).reverse()}function Me(e){e=new Set(e) +for(var t=arguments.length,a=new Array(t>1?t-1:0),l=1;l1?t-1:0),l=1;l{"use strict" +function l(e,t){let a +if(void 0===t)for(const l of e)null!=l&&(a=l)&&(a=l) +else{let l=-1 +for(let i of e)null!=(i=t(i,++l,e))&&(a=i)&&(a=i)}return a}a.d(t,{Z:()=>l})},3631:(e,t,a)=>{"use strict" +function l(e,t){let a +if(void 0===t)for(const l of e)null!=l&&(a>l||void 0===a&&l>=l)&&(a=l) +else{let l=-1 +for(let i of e)null!=(i=t(i,++l,e))&&(a>i||void 0===a&&i>=i)&&(a=i)}return a}a.d(t,{Z:()=>l})},3342:(e,t,a)=>{"use strict" +function l(e){return null===e?NaN:+e}function*i(e,t){if(void 0===t)for(let a of e)null!=a&&(a=+a)>=a&&(yield a) +else{let a=-1 +for(let l of e)null!=(l=t(l,++a,e))&&(l=+l)>=l&&(yield l)}}a.d(t,{K:()=>i,Z:()=>l})},1657:(e,t,a)=>{"use strict" +a.d(t,{Z:()=>r,s:()=>c}) +var l=a(6780),i=a(3631),o=a(8608),n=a(3342) +function r(e,t,a){if(r=(e=Float64Array.from((0,n.K)(e,a))).length){if((t=+t)<=0||r<2)return(0,i.Z)(e) +if(t>=1)return(0,l.Z)(e) +var r,c=(r-1)*t,h=Math.floor(c),s=(0,l.Z)((0,o.Z)(e,h).subarray(0,h+1)) +return s+((0,i.Z)(e.subarray(h+1))-s)*(c-h)}}function c(e,t){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:n.Z +if(l=e.length){if((t=+t)<=0||l<2)return+a(e[0],0,e) +if(t>=1)return+a(e[l-1],l-1,e) +var l,i=(l-1)*t,o=Math.floor(i),r=+a(e[o],o,e) +return r+(+a(e[o+1],o+1,e)-r)*(i-o)}}},8608:(e,t,a)=>{"use strict" +a.d(t,{Z:()=>i}) +var l=a(9731) +function i(e,t){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:e.length-1,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:l.Z +for(;n>a;){if(n-a>600){const l=n-a+1,o=t-a+1,c=Math.log(l),h=.5*Math.exp(2*c/3),s=.5*Math.sqrt(c*h*(l-h)/l)*(o-l/2<0?-1:1) +i(e,t,Math.max(a,Math.floor(t-o*h/l+s)),Math.min(n,Math.floor(t+(l-o)*h/l+s)),r)}const l=e[t] +let c=a,h=n +for(o(e,a,t),r(e[n],l)>0&&o(e,a,n);c0;)--h}0===r(e[a],l)?o(e,a,h):(++h,o(e,h,n)),h<=t&&(a=h+1),t<=h&&(n=h-1)}return e}function o(e,t,a){const l=e[t] +e[t]=e[a],e[a]=l}},5232:(e,t,a)=>{"use strict" +function l(e,t,a){e=+e,t=+t,a=(i=arguments.length)<2?(t=e,e=0,1):i<3?1:+a +for(var l=-1,i=0|Math.max(0,Math.ceil((t-e)/a)),o=new Array(i);++ll})},7666:(e,t,a)=>{"use strict" +a.d(t,{G9:()=>r,ZP:()=>n,ly:()=>c}) +var l=Math.sqrt(50),i=Math.sqrt(10),o=Math.sqrt(2) +function n(e,t,a){var l,i,o,n,c=-1 +if(a=+a,(e=+e)==(t=+t)&&a>0)return[e] +if((l=t0){let a=Math.round(e/n),l=Math.round(t/n) +for(a*nt&&--l,o=new Array(i=l-a+1);++ct&&--l,o=new Array(i=l-a+1);++c=0?(c>=l?10:c>=i?5:c>=o?2:1)*Math.pow(10,r):-Math.pow(10,-r)/(c>=l?10:c>=i?5:c>=o?2:1)}function c(e,t,a){var n=Math.abs(t-e)/Math.max(0,a),r=Math.pow(10,Math.floor(Math.log(n)/Math.LN10)),c=n/r +return c>=l?r*=10:c>=i?r*=5:c>=o&&(r*=2),t{"use strict" +a.d(t,{B8:()=>x,Il:()=>i,J5:()=>n,SU:()=>w,Ss:()=>H,ZP:()=>z,xV:()=>o}) +var l=a(8797) +function i(){}var o=.7,n=1/o,r="\\s*([+-]?\\d+)\\s*",c="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",h="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",s=/^#([0-9a-f]{3,8})$/,d=new RegExp("^rgb\\("+[r,r,r]+"\\)$"),u=new RegExp("^rgb\\("+[h,h,h]+"\\)$"),f=new RegExp("^rgba\\("+[r,r,r,c]+"\\)$"),v=new RegExp("^rgba\\("+[h,h,h,c]+"\\)$"),p=new RegExp("^hsl\\("+[c,h,h]+"\\)$"),m=new RegExp("^hsla\\("+[c,h,h,c]+"\\)$"),y={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074} +function g(){return this.rgb().formatHex()}function b(){return this.rgb().formatRgb()}function z(e){var t,a +return e=(e+"").trim().toLowerCase(),(t=s.exec(e))?(a=t[1].length,t=parseInt(t[1],16),6===a?M(t):3===a?new H(t>>8&15|t>>4&240,t>>4&15|240&t,(15&t)<<4|15&t,1):8===a?A(t>>24&255,t>>16&255,t>>8&255,(255&t)/255):4===a?A(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|240&t,((15&t)<<4|15&t)/255):null):(t=d.exec(e))?new H(t[1],t[2],t[3],1):(t=u.exec(e))?new H(255*t[1]/100,255*t[2]/100,255*t[3]/100,1):(t=f.exec(e))?A(t[1],t[2],t[3],t[4]):(t=v.exec(e))?A(255*t[1]/100,255*t[2]/100,255*t[3]/100,t[4]):(t=p.exec(e))?L(t[1],t[2]/100,t[3]/100,1):(t=m.exec(e))?L(t[1],t[2]/100,t[3]/100,t[4]):y.hasOwnProperty(e)?M(y[e]):"transparent"===e?new H(NaN,NaN,NaN,0):null}function M(e){return new H(e>>16&255,e>>8&255,255&e,1)}function A(e,t,a,l){return l<=0&&(e=t=a=NaN),new H(e,t,a,l)}function w(e){return e instanceof i||(e=z(e)),e?new H((e=e.rgb()).r,e.g,e.b,e.opacity):new H}function x(e,t,a,l){return 1===arguments.length?w(e):new H(e,t,a,null==l?1:l)}function H(e,t,a,l){this.r=+e,this.g=+t,this.b=+a,this.opacity=+l}function V(){return"#"+B(this.r)+B(this.g)+B(this.b)}function _(){var e=this.opacity +return(1===(e=isNaN(e)?1:Math.max(0,Math.min(1,e)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===e?")":", "+e+")")}function B(e){return((e=Math.max(0,Math.min(255,Math.round(e)||0)))<16?"0":"")+e.toString(16)}function L(e,t,a,l){return l<=0?e=t=a=NaN:a<=0||a>=1?e=t=NaN:t<=0&&(e=NaN),new E(e,t,a,l)}function C(e){if(e instanceof E)return new E(e.h,e.s,e.l,e.opacity) +if(e instanceof i||(e=z(e)),!e)return new E +if(e instanceof E)return e +var t=(e=e.rgb()).r/255,a=e.g/255,l=e.b/255,o=Math.min(t,a,l),n=Math.max(t,a,l),r=NaN,c=n-o,h=(n+o)/2 +return c?(r=t===n?(a-l)/c+6*(a0&&h<1?0:r,new E(r,c,h,e.opacity)}function E(e,t,a,l){this.h=+e,this.s=+t,this.l=+a,this.opacity=+l}function k(e,t,a){return 255*(e<60?t+(a-t)*e/60:e<180?a:e<240?t+(a-t)*(240-e)/60:t)}(0,l.Z)(i,z,{copy:function(e){return Object.assign(new this.constructor,this,e)},displayable:function(){return this.rgb().displayable()},hex:g,formatHex:g,formatHsl:function(){return C(this).formatHsl()},formatRgb:b,toString:b}),(0,l.Z)(H,x,(0,l.l)(i,{brighter:function(e){return e=null==e?n:Math.pow(n,e),new H(this.r*e,this.g*e,this.b*e,this.opacity)},darker:function(e){return e=null==e?o:Math.pow(o,e),new H(this.r*e,this.g*e,this.b*e,this.opacity)},rgb:function(){return this},displayable:function(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:V,formatHex:V,formatRgb:_,toString:_})),(0,l.Z)(E,(function(e,t,a,l){return 1===arguments.length?C(e):new E(e,t,a,null==l?1:l)}),(0,l.l)(i,{brighter:function(e){return e=null==e?n:Math.pow(n,e),new E(this.h,this.s,this.l*e,this.opacity)},darker:function(e){return e=null==e?o:Math.pow(o,e),new E(this.h,this.s,this.l*e,this.opacity)},rgb:function(){var e=this.h%360+360*(this.h<0),t=isNaN(e)||isNaN(this.s)?0:this.s,a=this.l,l=a+(a<.5?a:1-a)*t,i=2*a-l +return new H(k(e>=240?e-240:e+120,i,l),k(e,i,l),k(e<120?e+240:e-120,i,l),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var e=this.opacity +return(1===(e=isNaN(e)?1:Math.max(0,Math.min(1,e)))?"hsl(":"hsla(")+(this.h||0)+", "+100*(this.s||0)+"%, "+100*(this.l||0)+"%"+(1===e?")":", "+e+")")}}))},8797:(e,t,a)=>{"use strict" +function l(e,t,a){e.prototype=t.prototype=a,a.constructor=e}function i(e,t){var a=Object.create(e.prototype) +for(var l in t)a[l]=t[l] +return a}a.d(t,{Z:()=>l,l:()=>i})},3068:(e,t,a)=>{"use strict" +a.d(t,{ZP:()=>r,wx:()=>o,yi:()=>n}) +var l=a(4472) +function i(e,t){return function(a){return e+a*t}}function o(e,t){var a=t-e +return a?i(e,a>180||a<-180?a-360*Math.round(a/360):a):(0,l.Z)(isNaN(e)?t:e)}function n(e){return 1==(e=+e)?r:function(t,a){return a-t?function(e,t,a){return e=Math.pow(e,a),t=Math.pow(t,a)-e,a=1/a,function(l){return Math.pow(e+l*t,a)}}(t,a,e):(0,l.Z)(isNaN(t)?a:t)}}function r(e,t){var a=t-e +return a?i(e,a):(0,l.Z)(isNaN(e)?t:e)}},4472:(e,t,a)=>{"use strict" +a.d(t,{Z:()=>l}) +const l=e=>()=>e},6016:(e,t,a)=>{"use strict" +a.d(t,{ZP:()=>n,hD:()=>c}) +var l=a(2622) +function i(e,t,a,l,i){var o=e*e,n=o*e +return((1-3*e+3*o-n)*t+(4-6*o+3*n)*a+(1+3*e+3*o-3*n)*l+n*i)/6}var o=a(3068) +const n=function e(t){var a=(0,o.yi)(t) +function i(e,t){var i=a((e=(0,l.B8)(e)).r,(t=(0,l.B8)(t)).r),n=a(e.g,t.g),r=a(e.b,t.b),c=(0,o.ZP)(e.opacity,t.opacity) +return function(t){return e.r=i(t),e.g=n(t),e.b=r(t),e.opacity=c(t),e+""}}return i.gamma=e,i}(1) +function r(e){return function(t){var a,i,o=t.length,n=new Array(o),r=new Array(o),c=new Array(o) +for(a=0;a=1?(a=1,t-1):Math.floor(a*t),o=e[l],n=e[l+1],r=l>0?e[l-1]:2*o-n,c=l{"use strict" +function l(e){for(var t=e.length/6|0,a=new Array(t),l=0;loe,interpolateBrBG:()=>y,interpolateBuGn:()=>F,interpolateBuPu:()=>T,interpolateCividis:()=>me,interpolateCool:()=>Oe,interpolateCubehelixDefault:()=>Se,interpolateGnBu:()=>N,interpolateGreens:()=>re,interpolateGreys:()=>he,interpolateInferno:()=>Ze,interpolateMagma:()=>qe,interpolateOrRd:()=>R,interpolateOranges:()=>pe,interpolatePRGn:()=>b,interpolatePiYG:()=>M,interpolatePlasma:()=>Ye,interpolatePuBu:()=>$,interpolatePuBuGn:()=>I,interpolatePuOr:()=>w,interpolatePuRd:()=>Z,interpolatePurples:()=>de,interpolateRainbow:()=>Pe,interpolateRdBu:()=>H,interpolateRdGy:()=>_,interpolateRdPu:()=>K,interpolateRdYlBu:()=>L,interpolateRdYlGn:()=>E,interpolateReds:()=>fe,interpolateSinebow:()=>je,interpolateSpectral:()=>D,interpolateTurbo:()=>Ie,interpolateViridis:()=>$e,interpolateWarm:()=>Fe,interpolateYlGn:()=>Q,interpolateYlGnBu:()=>X,interpolateYlOrBr:()=>te,interpolateYlOrRd:()=>le,schemeAccent:()=>o,schemeBlues:()=>ie,schemeBrBG:()=>m,schemeBuGn:()=>S,schemeBuPu:()=>O,schemeCategory10:()=>i,schemeDark2:()=>n,schemeGnBu:()=>P,schemeGreens:()=>ne,schemeGreys:()=>ce,schemeOrRd:()=>U,schemeOranges:()=>ve,schemePRGn:()=>g,schemePaired:()=>r,schemePastel1:()=>c,schemePastel2:()=>h,schemePiYG:()=>z,schemePuBu:()=>G,schemePuBuGn:()=>j,schemePuOr:()=>A,schemePuRd:()=>q,schemePurples:()=>se,schemeRdBu:()=>x,schemeRdGy:()=>V,schemeRdPu:()=>Y,schemeRdYlBu:()=>B,schemeRdYlGn:()=>C,schemeReds:()=>ue,schemeSet1:()=>s,schemeSet2:()=>d,schemeSet3:()=>u,schemeSpectral:()=>k,schemeTableau10:()=>f,schemeYlGn:()=>J,schemeYlGnBu:()=>W,schemeYlOrBr:()=>ee,schemeYlOrRd:()=>ae}) +const i=l("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf"),o=l("7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666"),n=l("1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666"),r=l("a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928"),c=l("fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2"),h=l("b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc"),s=l("e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999"),d=l("66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3"),u=l("8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f"),f=l("4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab") +var v=a(6016) +const p=e=>(0,v.hD)(e[e.length-1]) +var m=new Array(3).concat("d8b365f5f5f55ab4ac","a6611adfc27d80cdc1018571","a6611adfc27df5f5f580cdc1018571","8c510ad8b365f6e8c3c7eae55ab4ac01665e","8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e","8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e","8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e","5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30","5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30").map(l) +const y=p(m) +var g=new Array(3).concat("af8dc3f7f7f77fbf7b","7b3294c2a5cfa6dba0008837","7b3294c2a5cff7f7f7a6dba0008837","762a83af8dc3e7d4e8d9f0d37fbf7b1b7837","762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837","762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837","762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837","40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b","40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b").map(l) +const b=p(g) +var z=new Array(3).concat("e9a3c9f7f7f7a1d76a","d01c8bf1b6dab8e1864dac26","d01c8bf1b6daf7f7f7b8e1864dac26","c51b7de9a3c9fde0efe6f5d0a1d76a4d9221","c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221","c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221","c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221","8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419","8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419").map(l) +const M=p(z) +var A=new Array(3).concat("998ec3f7f7f7f1a340","5e3c99b2abd2fdb863e66101","5e3c99b2abd2f7f7f7fdb863e66101","542788998ec3d8daebfee0b6f1a340b35806","542788998ec3d8daebf7f7f7fee0b6f1a340b35806","5427888073acb2abd2d8daebfee0b6fdb863e08214b35806","5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806","2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08","2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08").map(l) +const w=p(A) +var x=new Array(3).concat("ef8a62f7f7f767a9cf","ca0020f4a58292c5de0571b0","ca0020f4a582f7f7f792c5de0571b0","b2182bef8a62fddbc7d1e5f067a9cf2166ac","b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac","b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac","b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac","67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061","67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061").map(l) +const H=p(x) +var V=new Array(3).concat("ef8a62ffffff999999","ca0020f4a582bababa404040","ca0020f4a582ffffffbababa404040","b2182bef8a62fddbc7e0e0e09999994d4d4d","b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d","b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d","b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d","67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a","67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a").map(l) +const _=p(V) +var B=new Array(3).concat("fc8d59ffffbf91bfdb","d7191cfdae61abd9e92c7bb6","d7191cfdae61ffffbfabd9e92c7bb6","d73027fc8d59fee090e0f3f891bfdb4575b4","d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4","d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4","d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4","a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695","a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695").map(l) +const L=p(B) +var C=new Array(3).concat("fc8d59ffffbf91cf60","d7191cfdae61a6d96a1a9641","d7191cfdae61ffffbfa6d96a1a9641","d73027fc8d59fee08bd9ef8b91cf601a9850","d73027fc8d59fee08bffffbfd9ef8b91cf601a9850","d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850","d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850","a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837","a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837").map(l) +const E=p(C) +var k=new Array(3).concat("fc8d59ffffbf99d594","d7191cfdae61abdda42b83ba","d7191cfdae61ffffbfabdda42b83ba","d53e4ffc8d59fee08be6f59899d5943288bd","d53e4ffc8d59fee08bffffbfe6f59899d5943288bd","d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd","d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd","9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2","9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2").map(l) +const D=p(k) +var S=new Array(3).concat("e5f5f999d8c92ca25f","edf8fbb2e2e266c2a4238b45","edf8fbb2e2e266c2a42ca25f006d2c","edf8fbccece699d8c966c2a42ca25f006d2c","edf8fbccece699d8c966c2a441ae76238b45005824","f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824","f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b").map(l) +const F=p(S) +var O=new Array(3).concat("e0ecf49ebcda8856a7","edf8fbb3cde38c96c688419d","edf8fbb3cde38c96c68856a7810f7c","edf8fbbfd3e69ebcda8c96c68856a7810f7c","edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b","f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b","f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b").map(l) +const T=p(O) +var P=new Array(3).concat("e0f3dba8ddb543a2ca","f0f9e8bae4bc7bccc42b8cbe","f0f9e8bae4bc7bccc443a2ca0868ac","f0f9e8ccebc5a8ddb57bccc443a2ca0868ac","f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e","f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e","f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081").map(l) +const N=p(P) +var U=new Array(3).concat("fee8c8fdbb84e34a33","fef0d9fdcc8afc8d59d7301f","fef0d9fdcc8afc8d59e34a33b30000","fef0d9fdd49efdbb84fc8d59e34a33b30000","fef0d9fdd49efdbb84fc8d59ef6548d7301f990000","fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000","fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000").map(l) +const R=p(U) +var j=new Array(3).concat("ece2f0a6bddb1c9099","f6eff7bdc9e167a9cf02818a","f6eff7bdc9e167a9cf1c9099016c59","f6eff7d0d1e6a6bddb67a9cf1c9099016c59","f6eff7d0d1e6a6bddb67a9cf3690c002818a016450","fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450","fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636").map(l) +const I=p(j) +var G=new Array(3).concat("ece7f2a6bddb2b8cbe","f1eef6bdc9e174a9cf0570b0","f1eef6bdc9e174a9cf2b8cbe045a8d","f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d","f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b","fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b","fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858").map(l) +const $=p(G) +var q=new Array(3).concat("e7e1efc994c7dd1c77","f1eef6d7b5d8df65b0ce1256","f1eef6d7b5d8df65b0dd1c77980043","f1eef6d4b9dac994c7df65b0dd1c77980043","f1eef6d4b9dac994c7df65b0e7298ace125691003f","f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f","f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f").map(l) +const Z=p(q) +var Y=new Array(3).concat("fde0ddfa9fb5c51b8a","feebe2fbb4b9f768a1ae017e","feebe2fbb4b9f768a1c51b8a7a0177","feebe2fcc5c0fa9fb5f768a1c51b8a7a0177","feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177","fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177","fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a").map(l) +const K=p(Y) +var W=new Array(3).concat("edf8b17fcdbb2c7fb8","ffffcca1dab441b6c4225ea8","ffffcca1dab441b6c42c7fb8253494","ffffccc7e9b47fcdbb41b6c42c7fb8253494","ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84","ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84","ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58").map(l) +const X=p(W) +var J=new Array(3).concat("f7fcb9addd8e31a354","ffffccc2e69978c679238443","ffffccc2e69978c67931a354006837","ffffccd9f0a3addd8e78c67931a354006837","ffffccd9f0a3addd8e78c67941ab5d238443005a32","ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32","ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529").map(l) +const Q=p(J) +var ee=new Array(3).concat("fff7bcfec44fd95f0e","ffffd4fed98efe9929cc4c02","ffffd4fed98efe9929d95f0e993404","ffffd4fee391fec44ffe9929d95f0e993404","ffffd4fee391fec44ffe9929ec7014cc4c028c2d04","ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04","ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506").map(l) +const te=p(ee) +var ae=new Array(3).concat("ffeda0feb24cf03b20","ffffb2fecc5cfd8d3ce31a1c","ffffb2fecc5cfd8d3cf03b20bd0026","ffffb2fed976feb24cfd8d3cf03b20bd0026","ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026","ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026","ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026").map(l) +const le=p(ae) +var ie=new Array(3).concat("deebf79ecae13182bd","eff3ffbdd7e76baed62171b5","eff3ffbdd7e76baed63182bd08519c","eff3ffc6dbef9ecae16baed63182bd08519c","eff3ffc6dbef9ecae16baed64292c62171b5084594","f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594","f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b").map(l) +const oe=p(ie) +var ne=new Array(3).concat("e5f5e0a1d99b31a354","edf8e9bae4b374c476238b45","edf8e9bae4b374c47631a354006d2c","edf8e9c7e9c0a1d99b74c47631a354006d2c","edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32","f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32","f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b").map(l) +const re=p(ne) +var ce=new Array(3).concat("f0f0f0bdbdbd636363","f7f7f7cccccc969696525252","f7f7f7cccccc969696636363252525","f7f7f7d9d9d9bdbdbd969696636363252525","f7f7f7d9d9d9bdbdbd969696737373525252252525","fffffff0f0f0d9d9d9bdbdbd969696737373525252252525","fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000").map(l) +const he=p(ce) +var se=new Array(3).concat("efedf5bcbddc756bb1","f2f0f7cbc9e29e9ac86a51a3","f2f0f7cbc9e29e9ac8756bb154278f","f2f0f7dadaebbcbddc9e9ac8756bb154278f","f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486","fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486","fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d").map(l) +const de=p(se) +var ue=new Array(3).concat("fee0d2fc9272de2d26","fee5d9fcae91fb6a4acb181d","fee5d9fcae91fb6a4ade2d26a50f15","fee5d9fcbba1fc9272fb6a4ade2d26a50f15","fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d","fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d","fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d").map(l) +const fe=p(ue) +var ve=new Array(3).concat("fee6cefdae6be6550d","feeddefdbe85fd8d3cd94701","feeddefdbe85fd8d3ce6550da63603","feeddefdd0a2fdae6bfd8d3ce6550da63603","feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04","fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04","fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704").map(l) +const pe=p(ve) +function me(e){return e=Math.max(0,Math.min(1,e)),"rgb("+Math.max(0,Math.min(255,Math.round(-4.54-e*(35.34-e*(2381.73-e*(6402.7-e*(7024.72-2710.57*e)))))))+", "+Math.max(0,Math.min(255,Math.round(32.49+e*(170.73+e*(52.82-e*(131.46-e*(176.58-67.37*e)))))))+", "+Math.max(0,Math.min(255,Math.round(81.24+e*(442.36-e*(2482.43-e*(6167.24-e*(6614.94-2475.67*e)))))))+")"}var ye=a(8797),ge=a(2622) +const be=Math.PI/180,ze=180/Math.PI +var Me=-.14861,Ae=1.78277,we=-.29227,xe=-.90649,He=1.97294,Ve=He*xe,_e=He*Ae,Be=Ae*we-xe*Me +function Le(e,t,a,l){return 1===arguments.length?function(e){if(e instanceof Ce)return new Ce(e.h,e.s,e.l,e.opacity) +e instanceof ge.Ss||(e=(0,ge.SU)(e)) +var t=e.r/255,a=e.g/255,l=e.b/255,i=(Be*l+Ve*t-_e*a)/(Be+Ve-_e),o=l-i,n=(He*(a-i)-we*o)/xe,r=Math.sqrt(n*n+o*o)/(He*i*(1-i)),c=r?Math.atan2(n,o)*ze-120:NaN +return new Ce(c<0?c+360:c,r,i,e.opacity)}(e):new Ce(e,t,a,null==l?1:l)}function Ce(e,t,a,l){this.h=+e,this.s=+t,this.l=+a,this.opacity=+l}(0,ye.Z)(Ce,Le,(0,ye.l)(ge.Il,{brighter:function(e){return e=null==e?ge.J5:Math.pow(ge.J5,e),new Ce(this.h,this.s,this.l*e,this.opacity)},darker:function(e){return e=null==e?ge.xV:Math.pow(ge.xV,e),new Ce(this.h,this.s,this.l*e,this.opacity)},rgb:function(){var e=isNaN(this.h)?0:(this.h+120)*be,t=+this.l,a=isNaN(this.s)?0:this.s*t*(1-t),l=Math.cos(e),i=Math.sin(e) +return new ge.Ss(255*(t+a*(Me*l+Ae*i)),255*(t+a*(we*l+xe*i)),255*(t+a*(He*l)),this.opacity)}})) +var Ee=a(3068) +function ke(e){return function t(a){function l(t,l){var i=e((t=Le(t)).h,(l=Le(l)).h),o=(0,Ee.ZP)(t.s,l.s),n=(0,Ee.ZP)(t.l,l.l),r=(0,Ee.ZP)(t.opacity,l.opacity) +return function(e){return t.h=i(e),t.s=o(e),t.l=n(Math.pow(e,a)),t.opacity=r(e),t+""}}return a=+a,l.gamma=t,l}(1)}ke(Ee.wx) +var De=ke(Ee.ZP) +const Se=De(Le(300,.5,0),Le(-240,.5,1)) +var Fe=De(Le(-100,.75,.35),Le(80,1.5,.8)),Oe=De(Le(260,.75,.35),Le(80,1.5,.8)),Te=Le() +function Pe(e){(e<0||e>1)&&(e-=Math.floor(e)) +var t=Math.abs(e-.5) +return Te.h=360*e-100,Te.s=1.5-1.5*t,Te.l=.8-.9*t,Te+""}var Ne=(0,ge.B8)(),Ue=Math.PI/3,Re=2*Math.PI/3 +function je(e){var t +return e=(.5-e)*Math.PI,Ne.r=255*(t=Math.sin(e))*t,Ne.g=255*(t=Math.sin(e+Ue))*t,Ne.b=255*(t=Math.sin(e+Re))*t,Ne+""}function Ie(e){return e=Math.max(0,Math.min(1,e)),"rgb("+Math.max(0,Math.min(255,Math.round(34.61+e*(1172.33-e*(10793.56-e*(33300.12-e*(38394.49-14825.05*e)))))))+", "+Math.max(0,Math.min(255,Math.round(23.31+e*(557.33+e*(1225.33-e*(3574.96-e*(1073.77+707.56*e)))))))+", "+Math.max(0,Math.min(255,Math.round(27.2+e*(3211.1-e*(15327.97-e*(27814-e*(22569.18-6838.66*e)))))))+")"}function Ge(e){var t=e.length +return function(a){return e[Math.max(0,Math.min(t-1,Math.floor(a*t)))]}}const $e=Ge(l("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")) +var qe=Ge(l("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),Ze=Ge(l("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),Ye=Ge(l("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921"))},5134:(e,t,a)=>{"use strict" +a.r(t),a.d(t,{scaleBand:()=>c,scaleDiverging:()=>sl,scaleDivergingLog:()=>dl,scaleDivergingPow:()=>fl,scaleDivergingSqrt:()=>vl,scaleDivergingSymlog:()=>ul,scaleIdentity:()=>J,scaleImplicit:()=>n,scaleLinear:()=>X,scaleLog:()=>re,scaleOrdinal:()=>r,scalePoint:()=>s,scalePow:()=>me,scaleQuantile:()=>Ae,scaleQuantize:()=>we,scaleRadial:()=>be,scaleSequential:()=>ll,scaleSequentialLog:()=>il,scaleSequentialPow:()=>nl,scaleSequentialQuantile:()=>cl,scaleSequentialSqrt:()=>rl,scaleSequentialSymlog:()=>ol,scaleSqrt:()=>ye,scaleSymlog:()=>de,scaleThreshold:()=>xe,scaleTime:()=>Qa,scaleUtc:()=>el,tickFormat:()=>K}) +var l=a(5232) +function i(e,t){switch(arguments.length){case 0:break +case 1:this.range(e) +break +default:this.range(t).domain(e)}return this}function o(e,t){switch(arguments.length){case 0:break +case 1:"function"==typeof e?this.interpolator(e):this.range(e) +break +default:this.domain(e),"function"==typeof t?this.interpolator(t):this.range(t)}return this}const n=Symbol("implicit") +function r(){var e=new Map,t=[],a=[],l=n +function o(i){var o=i+"",r=e.get(o) +if(!r){if(l!==n)return l +e.set(o,r=t.push(i))}return a[(r-1)%a.length]}return o.domain=function(a){if(!arguments.length)return t.slice() +t=[],e=new Map +for(const l of a){const a=l+"" +e.has(a)||e.set(a,t.push(l))}return o},o.range=function(e){return arguments.length?(a=Array.from(e),o):a.slice()},o.unknown=function(e){return arguments.length?(l=e,o):l},o.copy=function(){return r(t,a).unknown(l)},i.apply(o,arguments),o}function c(){var e,t,a=r().unknown(void 0),o=a.domain,n=a.range,h=0,s=1,d=!1,u=0,f=0,v=.5 +function p(){var a=o().length,i=so&&(i=t.slice(o,i),r[n]?r[n]+=i:r[++n]=i),(a=a[0])===(l=l[0])?r[n]?r[n]+=l:r[++n]=l:(r[++n]=null,c.push({i:n,x:y(a,l)})),o=z.lastIndex +return ot&&(a=e,e=t,t=a),h=function(a){return Math.max(e,Math.min(t,a))}),l=c>2?E:C,i=o=null,d}function d(t){return null==t||isNaN(t=+t)?a:(i||(i=l(n.map(e),r,c)))(e(h(t)))}return d.invert=function(a){return h(t((o||(o=l(r,n.map(e),y)))(a)))},d.domain=function(e){return arguments.length?(n=Array.from(e,V),s()):n.slice()},d.range=function(e){return arguments.length?(r=Array.from(e),s()):r.slice()},d.rangeRound=function(e){return r=Array.from(e),c=H,s()},d.clamp=function(e){return arguments.length?(h=!!e||B,s()):h!==B},d.interpolate=function(e){return arguments.length?(c=e,s()):c},d.unknown=function(e){return arguments.length?(a=e,d):a},function(a,l){return e=a,t=l,s()}}function S(){return D()(B,B)}var F,O=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i +function T(e){if(!(t=O.exec(e)))throw new Error("invalid format: "+e) +var t +return new P({fill:t[1],align:t[2],sign:t[3],symbol:t[4],zero:t[5],width:t[6],comma:t[7],precision:t[8]&&t[8].slice(1),trim:t[9],type:t[10]})}function P(e){this.fill=void 0===e.fill?" ":e.fill+"",this.align=void 0===e.align?">":e.align+"",this.sign=void 0===e.sign?"-":e.sign+"",this.symbol=void 0===e.symbol?"":e.symbol+"",this.zero=!!e.zero,this.width=void 0===e.width?void 0:+e.width,this.comma=!!e.comma,this.precision=void 0===e.precision?void 0:+e.precision,this.trim=!!e.trim,this.type=void 0===e.type?"":e.type+""}function N(e,t){if((a=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"))<0)return null +var a,l=e.slice(0,a) +return[l.length>1?l[0]+l.slice(2):l,+e.slice(a+1)]}function U(e){return(e=N(Math.abs(e)))?e[1]:NaN}function R(e,t){var a=N(e,t) +if(!a)return e+"" +var l=a[0],i=a[1] +return i<0?"0."+new Array(-i).join("0")+l:l.length>i+1?l.slice(0,i+1)+"."+l.slice(i+1):l+new Array(i-l.length+2).join("0")}T.prototype=P.prototype,P.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type} +const j={"%":(e,t)=>(100*e).toFixed(t),b:e=>Math.round(e).toString(2),c:e=>e+"",d:function(e){return Math.abs(e=Math.round(e))>=1e21?e.toLocaleString("en").replace(/,/g,""):e.toString(10)},e:(e,t)=>e.toExponential(t),f:(e,t)=>e.toFixed(t),g:(e,t)=>e.toPrecision(t),o:e=>Math.round(e).toString(8),p:(e,t)=>R(100*e,t),r:R,s:function(e,t){var a=N(e,t) +if(!a)return e+"" +var l=a[0],i=a[1],o=i-(F=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,n=l.length +return o===n?l:o>n?l+new Array(o-n+1).join("0"):o>0?l.slice(0,o)+"."+l.slice(o):"0."+new Array(1-o).join("0")+N(e,Math.max(0,t+o-1))[0]},X:e=>Math.round(e).toString(16).toUpperCase(),x:e=>Math.round(e).toString(16)} +function I(e){return e}var G,$,q,Z=Array.prototype.map,Y=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"] +function K(e,t,a,l){var i,o=(0,d.ly)(e,t,a) +switch((l=T(null==l?",f":l)).type){case"s":var n=Math.max(Math.abs(e),Math.abs(t)) +return null!=l.precision||isNaN(i=function(e,t){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(U(t)/3)))-U(Math.abs(e)))}(o,n))||(l.precision=i),q(l,n) +case"":case"e":case"g":case"p":case"r":null!=l.precision||isNaN(i=function(e,t){return e=Math.abs(e),t=Math.abs(t)-e,Math.max(0,U(t)-U(e))+1}(o,Math.max(Math.abs(e),Math.abs(t))))||(l.precision=i-("e"===l.type)) +break +case"f":case"%":null!=l.precision||isNaN(i=function(e){return Math.max(0,-U(Math.abs(e)))}(o))||(l.precision=i-2*("%"===l.type))}return $(l)}function W(e){var t=e.domain +return e.ticks=function(e){var a=t() +return(0,d.ZP)(a[0],a[a.length-1],null==e?10:e)},e.tickFormat=function(e,a){var l=t() +return K(l[0],l[l.length-1],null==e?10:e,a)},e.nice=function(a){null==a&&(a=10) +var l,i,o=t(),n=0,r=o.length-1,c=o[n],h=o[r],s=10 +for(h0;){if((i=(0,d.G9)(c,h,a))===l)return o[n]=c,o[r]=h,t(o) +if(i>0)c=Math.floor(c/i)*i,h=Math.ceil(h/i)*i +else{if(!(i<0))break +c=Math.ceil(c*i)/i,h=Math.floor(h*i)/i}l=i}return e},e}function X(){var e=S() +return e.copy=function(){return k(e,X())},i.apply(e,arguments),W(e)}function J(e){var t +function a(e){return null==e||isNaN(e=+e)?t:e}return a.invert=a,a.domain=a.range=function(t){return arguments.length?(e=Array.from(t,V),a):e.slice()},a.unknown=function(e){return arguments.length?(t=e,a):t},a.copy=function(){return J(e).unknown(t)},e=arguments.length?Array.from(e,V):[0,1],W(a)}function Q(e,t){var a,l=0,i=(e=e.slice()).length-1,o=e[l],n=e[i] +return n0){for(;f<=v;++f)for(s=1,h=a(f);sc)break +m.push(u)}}else for(;f<=v;++f)for(s=o-1,h=a(f);s>=1;--s)if(!((u=h*s)c)break +m.push(u)}2*m.length0&&r>0&&(c+r+1>l&&(r=Math.max(1,l-c)),o.push(e.substring(i-=r,i+r)),!((c+=r+1)>l));)r=t[n=(n+1)%t.length] +return o.reverse().join(a)}),i=void 0===e.currency?"":e.currency[0]+"",o=void 0===e.currency?"":e.currency[1]+"",n=void 0===e.decimal?".":e.decimal+"",r=void 0===e.numerals?I:function(e){return function(t){return t.replace(/[0-9]/g,(function(t){return e[+t]}))}}(Z.call(e.numerals,String)),c=void 0===e.percent?"%":e.percent+"",h=void 0===e.minus?"−":e.minus+"",s=void 0===e.nan?"NaN":e.nan+"" +function d(e){var t=(e=T(e)).fill,a=e.align,d=e.sign,u=e.symbol,f=e.zero,v=e.width,p=e.comma,m=e.precision,y=e.trim,g=e.type +"n"===g?(p=!0,g="g"):j[g]||(void 0===m&&(m=12),y=!0,g="g"),(f||"0"===t&&"="===a)&&(f=!0,t="0",a="=") +var b="$"===u?i:"#"===u&&/[boxX]/.test(g)?"0"+g.toLowerCase():"",z="$"===u?o:/[%p]/.test(g)?c:"",M=j[g],A=/[defgprs%]/.test(g) +function w(e){var i,o,c,u=b,w=z +if("c"===g)w=M(e)+w,e="" +else{var x=(e=+e)<0||1/e<0 +if(e=isNaN(e)?s:M(Math.abs(e),m),y&&(e=function(e){e:for(var t,a=e.length,l=1,i=-1;l0&&(i=0)}return i>0?e.slice(0,i)+e.slice(t+1):e}(e)),x&&0==+e&&"+"!==d&&(x=!1),u=(x?"("===d?d:h:"-"===d||"("===d?"":d)+u,w=("s"===g?Y[8+F/3]:"")+w+(x&&"("===d?")":""),A)for(i=-1,o=e.length;++i(c=e.charCodeAt(i))||c>57){w=(46===c?n+e.slice(i+1):e.slice(i))+w,e=e.slice(0,i) +break}}p&&!f&&(e=l(e,1/0)) +var H=u.length+e.length+w.length,V=H>1)+u+e+w+V.slice(H) +break +default:e=V+u+e+w}return r(e)}return m=void 0===m?6:/[gprs]/.test(g)?Math.max(1,Math.min(21,m)):Math.max(0,Math.min(20,m)),w.toString=function(){return e+""},w}return{format:d,formatPrefix:function(e,t){var a=d(((e=T(e)).type="f",e)),l=3*Math.max(-8,Math.min(8,Math.floor(U(t)/3))),i=Math.pow(10,-l),o=Y[8+l/3] +return function(e){return a(i*e)+o}}}}({thousands:",",grouping:[3],currency:["$",""]}),$=G.format,q=G.formatPrefix +var ze=a(1657),Me=a(9731) +function Ae(){var e,t=[],a=[],l=[] +function o(){var e=0,i=Math.max(1,a.length) +for(l=new Array(i-1);++e0?l[i-1]:t[0],i=l?[o[l-1],a]:[o[i-1],o[i]]},r.unknown=function(t){return arguments.length?(e=t,r):r},r.thresholds=function(){return o.slice()},r.copy=function(){return we().domain([t,a]).range(n).unknown(e)},i.apply(W(r),arguments)}function xe(){var e,t=[.5],a=[0,1],l=1 +function o(i){return null!=i&&i<=i?a[(0,u.ZP)(t,i,0,l)]:e}return o.domain=function(e){return arguments.length?(t=Array.from(e),l=Math.min(t.length,a.length-1),o):t.slice()},o.range=function(e){return arguments.length?(a=Array.from(e),l=Math.min(t.length,a.length-1),o):a.slice()},o.invertExtent=function(e){var l=a.indexOf(e) +return[t[l-1],t[l]]},o.unknown=function(t){return arguments.length?(e=t,o):e},o.copy=function(){return xe().domain(t).range(a).unknown(e)},i.apply(o,arguments)}var He=a(7870) +const Ve=1e3,_e=60*Ve,Be=60*_e,Le=24*Be,Ce=7*Le,Ee=30*Le,ke=365*Le +var De=new Date,Se=new Date +function Fe(e,t,a,l){function i(t){return e(t=0===arguments.length?new Date:new Date(+t)),t}return i.floor=function(t){return e(t=new Date(+t)),t},i.ceil=function(a){return e(a=new Date(a-1)),t(a,1),e(a),a},i.round=function(e){var t=i(e),a=i.ceil(e) +return e-t0))return r +do{r.push(n=new Date(+a)),t(a,o),e(a)}while(n=t)for(;e(t),!a(t);)t.setTime(t-1)}),(function(e,l){if(e>=e)if(l<0)for(;++l<=0;)for(;t(e,-1),!a(e););else for(;--l>=0;)for(;t(e,1),!a(e););}))},a&&(i.count=function(t,l){return De.setTime(+t),Se.setTime(+l),e(De),e(Se),Math.floor(a(De,Se))},i.every=function(e){return e=Math.floor(e),isFinite(e)&&e>0?e>1?i.filter(l?function(t){return l(t)%e==0}:function(t){return i.count(0,t)%e==0}):i:null}),i}var Oe=Fe((function(){}),(function(e,t){e.setTime(+e+t)}),(function(e,t){return t-e})) +Oe.every=function(e){return e=Math.floor(e),isFinite(e)&&e>0?e>1?Fe((function(t){t.setTime(Math.floor(t/e)*e)}),(function(t,a){t.setTime(+t+a*e)}),(function(t,a){return(a-t)/e})):Oe:null} +const Te=Oe +Oe.range +var Pe=Fe((function(e){e.setTime(e-e.getMilliseconds())}),(function(e,t){e.setTime(+e+t*Ve)}),(function(e,t){return(t-e)/Ve}),(function(e){return e.getUTCSeconds()})) +const Ne=Pe +Pe.range +var Ue=Fe((function(e){e.setTime(e-e.getMilliseconds()-e.getSeconds()*Ve)}),(function(e,t){e.setTime(+e+t*_e)}),(function(e,t){return(t-e)/_e}),(function(e){return e.getMinutes()})) +const Re=Ue +Ue.range +var je=Fe((function(e){e.setTime(e-e.getMilliseconds()-e.getSeconds()*Ve-e.getMinutes()*_e)}),(function(e,t){e.setTime(+e+t*Be)}),(function(e,t){return(t-e)/Be}),(function(e){return e.getHours()})) +const Ie=je +je.range +var Ge=Fe((e=>e.setHours(0,0,0,0)),((e,t)=>e.setDate(e.getDate()+t)),((e,t)=>(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*_e)/Le),(e=>e.getDate()-1)) +const $e=Ge +function qe(e){return Fe((function(t){t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)}),(function(e,t){e.setDate(e.getDate()+7*t)}),(function(e,t){return(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*_e)/Ce}))}Ge.range +var Ze=qe(0),Ye=qe(1),Ke=qe(2),We=qe(3),Xe=qe(4),Je=qe(5),Qe=qe(6),et=(Ze.range,Ye.range,Ke.range,We.range,Xe.range,Je.range,Qe.range,Fe((function(e){e.setDate(1),e.setHours(0,0,0,0)}),(function(e,t){e.setMonth(e.getMonth()+t)}),(function(e,t){return t.getMonth()-e.getMonth()+12*(t.getFullYear()-e.getFullYear())}),(function(e){return e.getMonth()}))) +const tt=et +et.range +var at=Fe((function(e){e.setMonth(0,1),e.setHours(0,0,0,0)}),(function(e,t){e.setFullYear(e.getFullYear()+t)}),(function(e,t){return t.getFullYear()-e.getFullYear()}),(function(e){return e.getFullYear()})) +at.every=function(e){return isFinite(e=Math.floor(e))&&e>0?Fe((function(t){t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)}),(function(t,a){t.setFullYear(t.getFullYear()+a*e)})):null} +const lt=at +at.range +var it=Fe((function(e){e.setUTCSeconds(0,0)}),(function(e,t){e.setTime(+e+t*_e)}),(function(e,t){return(t-e)/_e}),(function(e){return e.getUTCMinutes()})) +const ot=it +it.range +var nt=Fe((function(e){e.setUTCMinutes(0,0,0)}),(function(e,t){e.setTime(+e+t*Be)}),(function(e,t){return(t-e)/Be}),(function(e){return e.getUTCHours()})) +const rt=nt +nt.range +var ct=Fe((function(e){e.setUTCHours(0,0,0,0)}),(function(e,t){e.setUTCDate(e.getUTCDate()+t)}),(function(e,t){return(t-e)/Le}),(function(e){return e.getUTCDate()-1})) +const ht=ct +function st(e){return Fe((function(t){t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)}),(function(e,t){e.setUTCDate(e.getUTCDate()+7*t)}),(function(e,t){return(t-e)/Ce}))}ct.range +var dt=st(0),ut=st(1),ft=st(2),vt=st(3),pt=st(4),mt=st(5),yt=st(6),gt=(dt.range,ut.range,ft.range,vt.range,pt.range,mt.range,yt.range,Fe((function(e){e.setUTCDate(1),e.setUTCHours(0,0,0,0)}),(function(e,t){e.setUTCMonth(e.getUTCMonth()+t)}),(function(e,t){return t.getUTCMonth()-e.getUTCMonth()+12*(t.getUTCFullYear()-e.getUTCFullYear())}),(function(e){return e.getUTCMonth()}))) +const bt=gt +gt.range +var zt=Fe((function(e){e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)}),(function(e,t){e.setUTCFullYear(e.getUTCFullYear()+t)}),(function(e,t){return t.getUTCFullYear()-e.getUTCFullYear()}),(function(e){return e.getUTCFullYear()})) +zt.every=function(e){return isFinite(e=Math.floor(e))&&e>0?Fe((function(t){t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)}),(function(t,a){t.setUTCFullYear(t.getUTCFullYear()+a*e)})):null} +const Mt=zt +function At(e,t,a,l,i,o){const n=[[Ne,1,Ve],[Ne,5,5*Ve],[Ne,15,15*Ve],[Ne,30,30*Ve],[o,1,_e],[o,5,5*_e],[o,15,15*_e],[o,30,30*_e],[i,1,Be],[i,3,3*Be],[i,6,6*Be],[i,12,12*Be],[l,1,Le],[l,2,2*Le],[a,1,Ce],[t,1,Ee],[t,3,3*Ee],[e,1,ke]] +function r(t,a,l){const i=Math.abs(a-t)/l,o=(0,He.Z)((e=>{let[,,t]=e +return t})).right(n,i) +if(o===n.length)return e.every((0,d.ly)(t/ke,a/ke,l)) +if(0===o)return Te.every(Math.max((0,d.ly)(t,a,l),1)) +const[r,c]=n[i/n[o-1][2][e.toLowerCase(),t])))}function Rt(e,t,a){var l=St.exec(t.slice(a,a+1)) +return l?(e.w=+l[0],a+l[0].length):-1}function jt(e,t,a){var l=St.exec(t.slice(a,a+1)) +return l?(e.u=+l[0],a+l[0].length):-1}function It(e,t,a){var l=St.exec(t.slice(a,a+2)) +return l?(e.U=+l[0],a+l[0].length):-1}function Gt(e,t,a){var l=St.exec(t.slice(a,a+2)) +return l?(e.V=+l[0],a+l[0].length):-1}function $t(e,t,a){var l=St.exec(t.slice(a,a+2)) +return l?(e.W=+l[0],a+l[0].length):-1}function qt(e,t,a){var l=St.exec(t.slice(a,a+4)) +return l?(e.y=+l[0],a+l[0].length):-1}function Zt(e,t,a){var l=St.exec(t.slice(a,a+2)) +return l?(e.y=+l[0]+(+l[0]>68?1900:2e3),a+l[0].length):-1}function Yt(e,t,a){var l=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(a,a+6)) +return l?(e.Z=l[1]?0:-(l[2]+(l[3]||"00")),a+l[0].length):-1}function Kt(e,t,a){var l=St.exec(t.slice(a,a+1)) +return l?(e.q=3*l[0]-3,a+l[0].length):-1}function Wt(e,t,a){var l=St.exec(t.slice(a,a+2)) +return l?(e.m=l[0]-1,a+l[0].length):-1}function Xt(e,t,a){var l=St.exec(t.slice(a,a+2)) +return l?(e.d=+l[0],a+l[0].length):-1}function Jt(e,t,a){var l=St.exec(t.slice(a,a+3)) +return l?(e.m=0,e.d=+l[0],a+l[0].length):-1}function Qt(e,t,a){var l=St.exec(t.slice(a,a+2)) +return l?(e.H=+l[0],a+l[0].length):-1}function ea(e,t,a){var l=St.exec(t.slice(a,a+2)) +return l?(e.M=+l[0],a+l[0].length):-1}function ta(e,t,a){var l=St.exec(t.slice(a,a+2)) +return l?(e.S=+l[0],a+l[0].length):-1}function aa(e,t,a){var l=St.exec(t.slice(a,a+3)) +return l?(e.L=+l[0],a+l[0].length):-1}function la(e,t,a){var l=St.exec(t.slice(a,a+6)) +return l?(e.L=Math.floor(l[0]/1e3),a+l[0].length):-1}function ia(e,t,a){var l=Ft.exec(t.slice(a,a+1)) +return l?a+l[0].length:-1}function oa(e,t,a){var l=St.exec(t.slice(a)) +return l?(e.Q=+l[0],a+l[0].length):-1}function na(e,t,a){var l=St.exec(t.slice(a)) +return l?(e.s=+l[0],a+l[0].length):-1}function ra(e,t){return Tt(e.getDate(),t,2)}function ca(e,t){return Tt(e.getHours(),t,2)}function ha(e,t){return Tt(e.getHours()%12||12,t,2)}function sa(e,t){return Tt(1+$e.count(lt(e),e),t,3)}function da(e,t){return Tt(e.getMilliseconds(),t,3)}function ua(e,t){return da(e,t)+"000"}function fa(e,t){return Tt(e.getMonth()+1,t,2)}function va(e,t){return Tt(e.getMinutes(),t,2)}function pa(e,t){return Tt(e.getSeconds(),t,2)}function ma(e){var t=e.getDay() +return 0===t?7:t}function ya(e,t){return Tt(Ze.count(lt(e)-1,e),t,2)}function ga(e){var t=e.getDay() +return t>=4||0===t?Xe(e):Xe.ceil(e)}function ba(e,t){return e=ga(e),Tt(Xe.count(lt(e),e)+(4===lt(e).getDay()),t,2)}function za(e){return e.getDay()}function Ma(e,t){return Tt(Ye.count(lt(e)-1,e),t,2)}function Aa(e,t){return Tt(e.getFullYear()%100,t,2)}function wa(e,t){return Tt((e=ga(e)).getFullYear()%100,t,2)}function xa(e,t){return Tt(e.getFullYear()%1e4,t,4)}function Ha(e,t){var a=e.getDay() +return Tt((e=a>=4||0===a?Xe(e):Xe.ceil(e)).getFullYear()%1e4,t,4)}function Va(e){var t=e.getTimezoneOffset() +return(t>0?"-":(t*=-1,"+"))+Tt(t/60|0,"0",2)+Tt(t%60,"0",2)}function _a(e,t){return Tt(e.getUTCDate(),t,2)}function Ba(e,t){return Tt(e.getUTCHours(),t,2)}function La(e,t){return Tt(e.getUTCHours()%12||12,t,2)}function Ca(e,t){return Tt(1+ht.count(Mt(e),e),t,3)}function Ea(e,t){return Tt(e.getUTCMilliseconds(),t,3)}function ka(e,t){return Ea(e,t)+"000"}function Da(e,t){return Tt(e.getUTCMonth()+1,t,2)}function Sa(e,t){return Tt(e.getUTCMinutes(),t,2)}function Fa(e,t){return Tt(e.getUTCSeconds(),t,2)}function Oa(e){var t=e.getUTCDay() +return 0===t?7:t}function Ta(e,t){return Tt(dt.count(Mt(e)-1,e),t,2)}function Pa(e){var t=e.getUTCDay() +return t>=4||0===t?pt(e):pt.ceil(e)}function Na(e,t){return e=Pa(e),Tt(pt.count(Mt(e),e)+(4===Mt(e).getUTCDay()),t,2)}function Ua(e){return e.getUTCDay()}function Ra(e,t){return Tt(ut.count(Mt(e)-1,e),t,2)}function ja(e,t){return Tt(e.getUTCFullYear()%100,t,2)}function Ia(e,t){return Tt((e=Pa(e)).getUTCFullYear()%100,t,2)}function Ga(e,t){return Tt(e.getUTCFullYear()%1e4,t,4)}function $a(e,t){var a=e.getUTCDay() +return Tt((e=a>=4||0===a?pt(e):pt.ceil(e)).getUTCFullYear()%1e4,t,4)}function qa(){return"+0000"}function Za(){return"%"}function Ya(e){return+e}function Ka(e){return Math.floor(+e/1e3)}function Wa(e){return new Date(e)}function Xa(e){return e instanceof Date?+e:+new Date(+e)}function Ja(e,t,a,l,i,o,n,r,c,h){var s=S(),d=s.invert,u=s.domain,f=h(".%L"),v=h(":%S"),p=h("%I:%M"),m=h("%I %p"),y=h("%a %d"),g=h("%b %d"),b=h("%B"),z=h("%Y") +function M(e){return(c(e)t(l/(e.length-1))))},a.quantiles=function(t){return Array.from({length:t+1},((a,l)=>(0,ze.Z)(e,l/t)))},a.copy=function(){return cl(t).domain(e)},o.apply(a,arguments)}function hl(){var e,t,a,l,i,o,n,r=0,c=.5,h=1,s=1,d=B,u=!1 +function f(e){return isNaN(e=+e)?n:(e=.5+((e=+o(e))-t)*(s*e=12)]},q:function(e){return 1+~~(e.getMonth()/3)},Q:Ya,s:Ka,S:pa,u:ma,U:ya,V:ba,w:za,W:Ma,x:null,X:null,y:Aa,Y:xa,Z:Va,"%":Za},z={a:function(e){return n[e.getUTCDay()]},A:function(e){return o[e.getUTCDay()]},b:function(e){return c[e.getUTCMonth()]},B:function(e){return r[e.getUTCMonth()]},c:null,d:_a,e:_a,f:ka,g:Ia,G:$a,H:Ba,I:La,j:Ca,L:Ea,m:Da,M:Sa,p:function(e){return i[+(e.getUTCHours()>=12)]},q:function(e){return 1+~~(e.getUTCMonth()/3)},Q:Ya,s:Ka,S:Fa,u:Oa,U:Ta,V:Na,w:Ua,W:Ra,x:null,X:null,y:ja,Y:Ga,Z:qa,"%":Za},M={a:function(e,t,a){var l=f.exec(t.slice(a)) +return l?(e.w=v.get(l[0].toLowerCase()),a+l[0].length):-1},A:function(e,t,a){var l=d.exec(t.slice(a)) +return l?(e.w=u.get(l[0].toLowerCase()),a+l[0].length):-1},b:function(e,t,a){var l=y.exec(t.slice(a)) +return l?(e.m=g.get(l[0].toLowerCase()),a+l[0].length):-1},B:function(e,t,a){var l=p.exec(t.slice(a)) +return l?(e.m=m.get(l[0].toLowerCase()),a+l[0].length):-1},c:function(e,a,l){return x(e,t,a,l)},d:Xt,e:Xt,f:la,g:Zt,G:qt,H:Qt,I:Qt,j:Jt,L:aa,m:Wt,M:ea,p:function(e,t,a){var l=h.exec(t.slice(a)) +return l?(e.p=s.get(l[0].toLowerCase()),a+l[0].length):-1},q:Kt,Q:oa,s:na,S:ta,u:jt,U:It,V:Gt,w:Rt,W:$t,x:function(e,t,l){return x(e,a,t,l)},X:function(e,t,a){return x(e,l,t,a)},y:Zt,Y:qt,Z:Yt,"%":ia} +function A(e,t){return function(a){var l,i,o,n=[],r=-1,c=0,h=e.length +for(a instanceof Date||(a=new Date(+a));++r53)return null +"w"in o||(o.w=1),"Z"in o?(i=(l=Bt(Lt(o.y,0,1))).getUTCDay(),l=i>4||0===i?ut.ceil(l):ut(l),l=ht.offset(l,7*(o.V-1)),o.y=l.getUTCFullYear(),o.m=l.getUTCMonth(),o.d=l.getUTCDate()+(o.w+6)%7):(i=(l=_t(Lt(o.y,0,1))).getDay(),l=i>4||0===i?Ye.ceil(l):Ye(l),l=$e.offset(l,7*(o.V-1)),o.y=l.getFullYear(),o.m=l.getMonth(),o.d=l.getDate()+(o.w+6)%7)}else("W"in o||"U"in o)&&("w"in o||(o.w="u"in o?o.u%7:"W"in o?1:0),i="Z"in o?Bt(Lt(o.y,0,1)).getUTCDay():_t(Lt(o.y,0,1)).getDay(),o.m=0,o.d="W"in o?(o.w+6)%7+7*o.W-(i+5)%7:o.w+7*o.U-(i+6)%7) +return"Z"in o?(o.H+=o.Z/100|0,o.M+=o.Z%100,Bt(o)):_t(o)}}function x(e,t,a,l){for(var i,o,n=0,r=t.length,c=a.length;n=c)return-1 +if(37===(i=t.charCodeAt(n++))){if(i=t.charAt(n++),!(o=M[i in Dt?t.charAt(n++):i])||(l=o(e,a,l))<0)return-1}else if(i!=a.charCodeAt(l++))return-1}return l}return b.x=A(a,b),b.X=A(l,b),b.c=A(t,b),z.x=A(a,z),z.X=A(l,z),z.c=A(t,z),{format:function(e){var t=A(e+="",b) +return t.toString=function(){return e},t},parse:function(e){var t=w(e+="",!1) +return t.toString=function(){return e},t},utcFormat:function(e){var t=A(e+="",z) +return t.toString=function(){return e},t},utcParse:function(e){var t=w(e+="",!0) +return t.toString=function(){return e},t}}}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]}),Et=Ct.format,Ct.parse,kt=Ct.utcFormat,Ct.utcParse},8740:(e,t,a)=>{"use strict" +a.r(t),a.d(t,{create:()=>me,creator:()=>c,local:()=>ge,matcher:()=>v,namespace:()=>o,namespaces:()=>i,pointer:()=>Me,pointers:()=>Ae,select:()=>pe,selectAll:()=>we,selection:()=>ve,selector:()=>s,selectorAll:()=>f,style:()=>O,window:()=>k}) +var l="http://www.w3.org/1999/xhtml" +const i={svg:"http://www.w3.org/2000/svg",xhtml:l,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"} +function o(e){var t=e+="",a=t.indexOf(":") +return a>=0&&"xmlns"!==(t=e.slice(0,a))&&(e=e.slice(a+1)),i.hasOwnProperty(t)?{space:i[t],local:e}:e}function n(e){return function(){var t=this.ownerDocument,a=this.namespaceURI +return a===l&&t.documentElement.namespaceURI===l?t.createElement(e):t.createElementNS(a,e)}}function r(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}function c(e){var t=o(e) +return(t.local?r:n)(t)}function h(){}function s(e){return null==e?h:function(){return this.querySelector(e)}}function d(e){return"object"==typeof e&&"length"in e?e:Array.from(e)}function u(){return[]}function f(e){return null==e?u:function(){return this.querySelectorAll(e)}}function v(e){return function(){return this.matches(e)}}function p(e){return function(t){return t.matches(e)}}var m=Array.prototype.find +function y(){return this.firstElementChild}var g=Array.prototype.filter +function b(){return this.children}function z(e){return new Array(e.length)}function M(e,t){this.ownerDocument=e.ownerDocument,this.namespaceURI=e.namespaceURI,this._next=null,this._parent=e,this.__data__=t}function A(e,t,a,l,i,o){for(var n,r=0,c=t.length,h=o.length;rt?1:e>=t?0:NaN}function V(e){return function(){this.removeAttribute(e)}}function _(e){return function(){this.removeAttributeNS(e.space,e.local)}}function B(e,t){return function(){this.setAttribute(e,t)}}function L(e,t){return function(){this.setAttributeNS(e.space,e.local,t)}}function C(e,t){return function(){var a=t.apply(this,arguments) +null==a?this.removeAttribute(e):this.setAttribute(e,a)}}function E(e,t){return function(){var a=t.apply(this,arguments) +null==a?this.removeAttributeNS(e.space,e.local):this.setAttributeNS(e.space,e.local,a)}}function k(e){return e.ownerDocument&&e.ownerDocument.defaultView||e.document&&e||e.defaultView}function D(e){return function(){this.style.removeProperty(e)}}function S(e,t,a){return function(){this.style.setProperty(e,t,a)}}function F(e,t,a){return function(){var l=t.apply(this,arguments) +null==l?this.style.removeProperty(e):this.style.setProperty(e,l,a)}}function O(e,t){return e.style.getPropertyValue(t)||k(e).getComputedStyle(e,null).getPropertyValue(t)}function T(e){return function(){delete this[e]}}function P(e,t){return function(){this[e]=t}}function N(e,t){return function(){var a=t.apply(this,arguments) +null==a?delete this[e]:this[e]=a}}function U(e){return e.trim().split(/^|\s+/)}function R(e){return e.classList||new j(e)}function j(e){this._node=e,this._names=U(e.getAttribute("class")||"")}function I(e,t){for(var a=R(e),l=-1,i=t.length;++l=0&&(this._names.splice(t,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(e){return this._names.indexOf(e)>=0}} +var de=[null] +function ue(e,t){this._groups=e,this._parents=t}function fe(){return new ue([[document.documentElement]],de)}ue.prototype=fe.prototype={constructor:ue,select:function(e){"function"!=typeof e&&(e=s(e)) +for(var t=this._groups,a=t.length,l=new Array(a),i=0;i=H&&(H=M+1);!(z=g[H])&&++H=0;)(l=i[o])&&(n&&4^l.compareDocumentPosition(n)&&n.parentNode.insertBefore(l,n),n=l) +return this},sort:function(e){function t(t,a){return t&&a?e(t.__data__,a.__data__):!t-!a}e||(e=H) +for(var a=this._groups,l=a.length,i=new Array(l),o=0;o1?this.each((null==t?D:"function"==typeof t?F:S)(e,t,null==a?"":a)):O(this.node(),e)},property:function(e,t){return arguments.length>1?this.each((null==t?T:"function"==typeof t?N:P)(e,t)):this.node()[e]},classed:function(e,t){var a=U(e+"") +if(arguments.length<2){for(var l=R(this.node()),i=-1,o=a.length;++i=0&&(t=e.slice(a+1),e=e.slice(0,a)),{type:e,name:t}}))}(e+""),n=o.length +if(!(arguments.length<2)){for(r=t?re:ne,l=0;lMe(e,t)))}function we(e){return"string"==typeof e?new ue([document.querySelectorAll(e)],[document.documentElement]):new ue([null==e?[]:d(e)],de)}be.prototype=ge.prototype={constructor:be,get:function(e){for(var t=this._;!(t in e);)if(!(e=e.parentNode))return +return e[t]},set:function(e,t){return e[this._]=t},remove:function(e){return this._ in e&&delete e[this._]},toString:function(){return this._}}},5043:(e,t,a)=>{"use strict" +a.r(t),a.d(t,{arc:()=>L,area:()=>T,areaRadial:()=>q,curveBasis:()=>He,curveBasisClosed:()=>_e,curveBasisOpen:()=>Le,curveBumpX:()=>Ee,curveBumpY:()=>ke,curveBundle:()=>Se,curveCardinal:()=>Te,curveCardinalClosed:()=>Ne,curveCardinalOpen:()=>Re,curveCatmullRom:()=>Ge,curveCatmullRomClosed:()=>qe,curveCatmullRomOpen:()=>Ye,curveLinear:()=>D,curveLinearClosed:()=>We,curveMonotoneX:()=>it,curveMonotoneY:()=>ot,curveNatural:()=>ct,curveStep:()=>st,curveStepAfter:()=>ut,curveStepBefore:()=>dt,line:()=>O,lineRadial:()=>$,linkHorizontal:()=>ee,linkRadial:()=>ae,linkVertical:()=>te,pie:()=>U,pointRadial:()=>Z,radialArea:()=>q,radialLine:()=>$,stack:()=>yt,stackOffsetDiverging:()=>bt,stackOffsetExpand:()=>gt,stackOffsetNone:()=>ft,stackOffsetSilhouette:()=>zt,stackOffsetWiggle:()=>Mt,stackOrderAppearance:()=>At,stackOrderAscending:()=>xt,stackOrderDescending:()=>Vt,stackOrderInsideOut:()=>_t,stackOrderNone:()=>vt,stackOrderReverse:()=>Bt,symbol:()=>Me,symbolCircle:()=>le,symbolCross:()=>ie,symbolDiamond:()=>re,symbolSquare:()=>ue,symbolStar:()=>de,symbolTriangle:()=>ve,symbolWye:()=>be,symbols:()=>ze}) +const l=Math.PI,i=2*l,o=1e-6,n=i-o +function r(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function c(){return new r}r.prototype=c.prototype={constructor:r,moveTo:function(e,t){this._+="M"+(this._x0=this._x1=+e)+","+(this._y0=this._y1=+t)},closePath:function(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function(e,t){this._+="L"+(this._x1=+e)+","+(this._y1=+t)},quadraticCurveTo:function(e,t,a,l){this._+="Q"+ +e+","+ +t+","+(this._x1=+a)+","+(this._y1=+l)},bezierCurveTo:function(e,t,a,l,i,o){this._+="C"+ +e+","+ +t+","+ +a+","+ +l+","+(this._x1=+i)+","+(this._y1=+o)},arcTo:function(e,t,a,i,n){e=+e,t=+t,a=+a,i=+i,n=+n +var r=this._x1,c=this._y1,h=a-e,s=i-t,d=r-e,u=c-t,f=d*d+u*u +if(n<0)throw new Error("negative radius: "+n) +if(null===this._x1)this._+="M"+(this._x1=e)+","+(this._y1=t) +else if(f>o)if(Math.abs(u*h-s*d)>o&&n){var v=a-r,p=i-c,m=h*h+s*s,y=v*v+p*p,g=Math.sqrt(m),b=Math.sqrt(f),z=n*Math.tan((l-Math.acos((m+f-y)/(2*g*b)))/2),M=z/b,A=z/g +Math.abs(M-1)>o&&(this._+="L"+(e+M*d)+","+(t+M*u)),this._+="A"+n+","+n+",0,0,"+ +(u*v>d*p)+","+(this._x1=e+A*h)+","+(this._y1=t+A*s)}else this._+="L"+(this._x1=e)+","+(this._y1=t)},arc:function(e,t,a,r,c,h){e=+e,t=+t,h=!!h +var s=(a=+a)*Math.cos(r),d=a*Math.sin(r),u=e+s,f=t+d,v=1^h,p=h?r-c:c-r +if(a<0)throw new Error("negative radius: "+a) +null===this._x1?this._+="M"+u+","+f:(Math.abs(this._x1-u)>o||Math.abs(this._y1-f)>o)&&(this._+="L"+u+","+f),a&&(p<0&&(p=p%i+i),p>n?this._+="A"+a+","+a+",0,1,"+v+","+(e-s)+","+(t-d)+"A"+a+","+a+",0,1,"+v+","+(this._x1=u)+","+(this._y1=f):p>o&&(this._+="A"+a+","+a+",0,"+ +(p>=l)+","+v+","+(this._x1=e+a*Math.cos(c))+","+(this._y1=t+a*Math.sin(c))))},rect:function(e,t,a,l){this._+="M"+(this._x0=this._x1=+e)+","+(this._y0=this._y1=+t)+"h"+ +a+"v"+ +l+"h"+-a+"Z"},toString:function(){return this._}} +const h=c +function s(e){return function(){return e}}var d=Math.abs,u=Math.atan2,f=Math.cos,v=Math.max,p=Math.min,m=Math.sin,y=Math.sqrt,g=1e-12,b=Math.PI,z=b/2,M=2*b +function A(e){return e>=1?z:e<=-1?-z:Math.asin(e)}function w(e){return e.innerRadius}function x(e){return e.outerRadius}function H(e){return e.startAngle}function V(e){return e.endAngle}function _(e){return e&&e.padAngle}function B(e,t,a,l,i,o,n){var r=e-a,c=t-l,h=(n?o:-o)/y(r*r+c*c),s=h*c,d=-h*r,u=e+s,f=t+d,p=a+s,m=l+d,g=(u+p)/2,b=(f+m)/2,z=p-u,M=m-f,A=z*z+M*M,w=i-o,x=u*m-p*f,H=(M<0?-1:1)*y(v(0,w*w*A-x*x)),V=(x*M-z*H)/A,_=(-x*z-M*H)/A,B=(x*M+z*H)/A,L=(-x*z+M*H)/A,C=V-g,E=_-b,k=B-g,D=L-b +return C*C+E*E>k*k+D*D&&(V=B,_=L),{cx:V,cy:_,x01:-s,y01:-d,x11:V*(i/w-1),y11:_*(i/w-1)}}function L(){var e=w,t=x,a=s(0),l=null,i=H,o=V,n=_,r=null +function c(){var c,s,v,w=+e.apply(this,arguments),x=+t.apply(this,arguments),H=i.apply(this,arguments)-z,V=o.apply(this,arguments)-z,_=d(V-H),L=V>H +if(r||(r=c=h()),xg)if(_>M-g)r.moveTo(x*f(H),x*m(H)),r.arc(0,0,x,H,V,!L),w>g&&(r.moveTo(w*f(V),w*m(V)),r.arc(0,0,w,V,H,L)) +else{var C,E,k=H,D=V,S=H,F=V,O=_,T=_,P=n.apply(this,arguments)/2,N=P>g&&(l?+l.apply(this,arguments):y(w*w+x*x)),U=p(d(x-w)/2,+a.apply(this,arguments)),R=U,j=U +if(N>g){var I=A(N/w*m(P)),G=A(N/x*m(P));(O-=2*I)>g?(S+=I*=L?1:-1,F-=I):(O=0,S=F=(H+V)/2),(T-=2*G)>g?(k+=G*=L?1:-1,D-=G):(T=0,k=D=(H+V)/2)}var $=x*f(k),q=x*m(k),Z=w*f(F),Y=w*m(F) +if(U>g){var K,W=x*f(D),X=x*m(D),J=w*f(S),Q=w*m(S) +if(_1?0:v<-1?b:Math.acos(v))/2),oe=y(K[0]*K[0]+K[1]*K[1]) +R=p(U,(w-oe)/(ie-1)),j=p(U,(x-oe)/(ie+1))}}T>g?j>g?(C=B(J,Q,$,q,x,j,L),E=B(W,X,Z,Y,x,j,L),r.moveTo(C.cx+C.x01,C.cy+C.y01),jg&&O>g?R>g?(C=B(Z,Y,W,X,w,-R,L),E=B($,q,J,Q,w,-R,L),r.lineTo(C.cx+C.x01,C.cy+C.y01),R=d;--u)r.point(y[u],g[u]) +r.lineEnd(),r.areaEnd()}m&&(y[s]=+e(f,s,c),g[s]=+t(f,s,c),r.point(l?+l(f,s,c):y[s],a?+a(f,s,c):g[s]))}if(v)return r=null,v+""||null}function d(){return O().defined(i).curve(n).context(o)}return e="function"==typeof e?e:void 0===e?S:s(+e),t="function"==typeof t?t:s(void 0===t?0:+t),a="function"==typeof a?a:void 0===a?F:s(+a),c.x=function(t){return arguments.length?(e="function"==typeof t?t:s(+t),l=null,c):e},c.x0=function(t){return arguments.length?(e="function"==typeof t?t:s(+t),c):e},c.x1=function(e){return arguments.length?(l=null==e?null:"function"==typeof e?e:s(+e),c):l},c.y=function(e){return arguments.length?(t="function"==typeof e?e:s(+e),a=null,c):t},c.y0=function(e){return arguments.length?(t="function"==typeof e?e:s(+e),c):t},c.y1=function(e){return arguments.length?(a=null==e?null:"function"==typeof e?e:s(+e),c):a},c.lineX0=c.lineY0=function(){return d().x(e).y(t)},c.lineY1=function(){return d().x(e).y(a)},c.lineX1=function(){return d().x(l).y(t)},c.defined=function(e){return arguments.length?(i="function"==typeof e?e:s(!!e),c):i},c.curve=function(e){return arguments.length?(n=e,null!=o&&(r=n(o)),c):n},c.context=function(e){return arguments.length?(null==e?o=r=null:r=n(o=e),c):o},c}function P(e,t){return te?1:t>=e?0:NaN}function N(e){return e}function U(){var e=N,t=P,a=null,l=s(0),i=s(M),o=s(0) +function n(n){var r,c,h,s,d,u=(n=E(n)).length,f=0,v=new Array(u),p=new Array(u),m=+l.apply(this,arguments),y=Math.min(M,Math.max(-M,i.apply(this,arguments)-m)),g=Math.min(Math.abs(y)/u,o.apply(this,arguments)),b=g*(y<0?-1:1) +for(r=0;r0&&(f+=d) +for(null!=t?v.sort((function(e,a){return t(p[e],p[a])})):null!=a&&v.sort((function(e,t){return a(n[e],n[t])})),r=0,h=f?(y-u*b)/f:0;r0?d*h:0)+b,p[c]={data:n[c],index:r,value:d,startAngle:m,endAngle:s,padAngle:g} +return p}return n.value=function(t){return arguments.length?(e="function"==typeof t?t:s(+t),n):e},n.sortValues=function(e){return arguments.length?(t=e,a=null,n):t},n.sort=function(e){return arguments.length?(a=e,t=null,n):a},n.startAngle=function(e){return arguments.length?(l="function"==typeof e?e:s(+e),n):l},n.endAngle=function(e){return arguments.length?(i="function"==typeof e?e:s(+e),n):i},n.padAngle=function(e){return arguments.length?(o="function"==typeof e?e:s(+e),n):o},n}k.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t) +break +case 1:this._point=2 +default:this._context.lineTo(e,t)}}} +var R=I(D) +function j(e){this._curve=e}function I(e){function t(t){return new j(e(t))}return t._curve=e,t}function G(e){var t=e.curve +return e.angle=e.x,delete e.x,e.radius=e.y,delete e.y,e.curve=function(e){return arguments.length?t(I(e)):t()._curve},e}function $(){return G(O().curve(R))}function q(){var e=T().curve(R),t=e.curve,a=e.lineX0,l=e.lineX1,i=e.lineY0,o=e.lineY1 +return e.angle=e.x,delete e.x,e.startAngle=e.x0,delete e.x0,e.endAngle=e.x1,delete e.x1,e.radius=e.y,delete e.y,e.innerRadius=e.y0,delete e.y0,e.outerRadius=e.y1,delete e.y1,e.lineStartAngle=function(){return G(a())},delete e.lineX0,e.lineEndAngle=function(){return G(l())},delete e.lineX1,e.lineInnerRadius=function(){return G(i())},delete e.lineY0,e.lineOuterRadius=function(){return G(o())},delete e.lineY1,e.curve=function(e){return arguments.length?t(I(e)):t()._curve},e}function Z(e,t){return[(t=+t)*Math.cos(e-=Math.PI/2),t*Math.sin(e)]}function Y(e){return e.source}function K(e){return e.target}function W(e){var t=Y,a=K,l=S,i=F,o=null +function n(){var n,r=C.call(arguments),c=t.apply(this,r),s=a.apply(this,r) +if(o||(o=n=h()),e(o,+l.apply(this,(r[0]=c,r)),+i.apply(this,r),+l.apply(this,(r[0]=s,r)),+i.apply(this,r)),n)return o=null,n+""||null}return n.source=function(e){return arguments.length?(t=e,n):t},n.target=function(e){return arguments.length?(a=e,n):a},n.x=function(e){return arguments.length?(l="function"==typeof e?e:s(+e),n):l},n.y=function(e){return arguments.length?(i="function"==typeof e?e:s(+e),n):i},n.context=function(e){return arguments.length?(o=null==e?null:e,n):o},n}function X(e,t,a,l,i){e.moveTo(t,a),e.bezierCurveTo(t=(t+l)/2,a,t,i,l,i)}function J(e,t,a,l,i){e.moveTo(t,a),e.bezierCurveTo(t,a=(a+i)/2,l,a,l,i)}function Q(e,t,a,l,i){var o=Z(t,a),n=Z(t,a=(a+i)/2),r=Z(l,a),c=Z(l,i) +e.moveTo(o[0],o[1]),e.bezierCurveTo(n[0],n[1],r[0],r[1],c[0],c[1])}function ee(){return W(X)}function te(){return W(J)}function ae(){var e=W(Q) +return e.angle=e.x,delete e.x,e.radius=e.y,delete e.y,e}j.prototype={areaStart:function(){this._curve.areaStart()},areaEnd:function(){this._curve.areaEnd()},lineStart:function(){this._curve.lineStart()},lineEnd:function(){this._curve.lineEnd()},point:function(e,t){this._curve.point(t*Math.sin(e),t*-Math.cos(e))}} +const le={draw:function(e,t){var a=Math.sqrt(t/b) +e.moveTo(a,0),e.arc(0,0,a,0,M)}},ie={draw:function(e,t){var a=Math.sqrt(t/5)/2 +e.moveTo(-3*a,-a),e.lineTo(-a,-a),e.lineTo(-a,-3*a),e.lineTo(a,-3*a),e.lineTo(a,-a),e.lineTo(3*a,-a),e.lineTo(3*a,a),e.lineTo(a,a),e.lineTo(a,3*a),e.lineTo(-a,3*a),e.lineTo(-a,a),e.lineTo(-3*a,a),e.closePath()}} +var oe=Math.sqrt(1/3),ne=2*oe +const re={draw:function(e,t){var a=Math.sqrt(t/ne),l=a*oe +e.moveTo(0,-a),e.lineTo(l,0),e.lineTo(0,a),e.lineTo(-l,0),e.closePath()}} +var ce=Math.sin(b/10)/Math.sin(7*b/10),he=Math.sin(M/10)*ce,se=-Math.cos(M/10)*ce +const de={draw:function(e,t){var a=Math.sqrt(.8908130915292852*t),l=he*a,i=se*a +e.moveTo(0,-a),e.lineTo(l,i) +for(var o=1;o<5;++o){var n=M*o/5,r=Math.cos(n),c=Math.sin(n) +e.lineTo(c*a,-r*a),e.lineTo(r*l-c*i,c*l+r*i)}e.closePath()}},ue={draw:function(e,t){var a=Math.sqrt(t),l=-a/2 +e.rect(l,l,a,a)}} +var fe=Math.sqrt(3) +const ve={draw:function(e,t){var a=-Math.sqrt(t/(3*fe)) +e.moveTo(0,2*a),e.lineTo(-fe*a,-a),e.lineTo(fe*a,-a),e.closePath()}} +var pe=-.5,me=Math.sqrt(3)/2,ye=1/Math.sqrt(12),ge=3*(ye/2+1) +const be={draw:function(e,t){var a=Math.sqrt(t/ge),l=a/2,i=a*ye,o=l,n=a*ye+a,r=-o,c=n +e.moveTo(l,i),e.lineTo(o,n),e.lineTo(r,c),e.lineTo(pe*l-me*i,me*l+pe*i),e.lineTo(pe*o-me*n,me*o+pe*n),e.lineTo(pe*r-me*c,me*r+pe*c),e.lineTo(pe*l+me*i,pe*i-me*l),e.lineTo(pe*o+me*n,pe*n-me*o),e.lineTo(pe*r+me*c,pe*c-me*r),e.closePath()}} +var ze=[le,ie,re,ue,de,ve,be] +function Me(e,t){var a=null +function l(){var l +if(a||(a=l=h()),e.apply(this,arguments).draw(a,+t.apply(this,arguments)),l)return a=null,l+""||null}return e="function"==typeof e?e:s(e||le),t="function"==typeof t?t:s(void 0===t?64:+t),l.type=function(t){return arguments.length?(e="function"==typeof t?t:s(t),l):e},l.size=function(e){return arguments.length?(t="function"==typeof e?e:s(+e),l):t},l.context=function(e){return arguments.length?(a=null==e?null:e,l):a},l}function Ae(){}function we(e,t,a){e._context.bezierCurveTo((2*e._x0+e._x1)/3,(2*e._y0+e._y1)/3,(e._x0+2*e._x1)/3,(e._y0+2*e._y1)/3,(e._x0+4*e._x1+t)/6,(e._y0+4*e._y1+a)/6)}function xe(e){this._context=e}function He(e){return new xe(e)}function Ve(e){this._context=e}function _e(e){return new Ve(e)}function Be(e){this._context=e}function Le(e){return new Be(e)}xe.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:we(this,this._x1,this._y1) +case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t) +break +case 1:this._point=2 +break +case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6) +default:we(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}},Ve.prototype={areaStart:Ae,areaEnd:Ae,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath() +break +case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath() +break +case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x2=e,this._y2=t +break +case 1:this._point=2,this._x3=e,this._y3=t +break +case 2:this._point=3,this._x4=e,this._y4=t,this._context.moveTo((this._x0+4*this._x1+e)/6,(this._y0+4*this._y1+t)/6) +break +default:we(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}},Be.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1 +break +case 1:this._point=2 +break +case 2:this._point=3 +var a=(this._x0+4*this._x1+e)/6,l=(this._y0+4*this._y1+t)/6 +this._line?this._context.lineTo(a,l):this._context.moveTo(a,l) +break +case 3:this._point=4 +default:we(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}} +class Ce{constructor(e,t){this._context=e,this._x=t}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line}point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t) +break +case 1:this._point=2 +default:this._x?this._context.bezierCurveTo(this._x0=(this._x0+e)/2,this._y0,this._x0,t,e,t):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+t)/2,e,this._y0,e,t)}this._x0=e,this._y0=t}}function Ee(e){return new Ce(e,!0)}function ke(e){return new Ce(e,!1)}function De(e,t){this._basis=new xe(e),this._beta=t}De.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var e=this._x,t=this._y,a=e.length-1 +if(a>0)for(var l,i=e[0],o=t[0],n=e[a]-i,r=t[a]-o,c=-1;++c<=a;)l=c/a,this._basis.point(this._beta*e[c]+(1-this._beta)*(i+l*n),this._beta*t[c]+(1-this._beta)*(o+l*r)) +this._x=this._y=null,this._basis.lineEnd()},point:function(e,t){this._x.push(+e),this._y.push(+t)}} +const Se=function e(t){function a(e){return 1===t?new xe(e):new De(e,t)}return a.beta=function(t){return e(+t)},a}(.85) +function Fe(e,t,a){e._context.bezierCurveTo(e._x1+e._k*(e._x2-e._x0),e._y1+e._k*(e._y2-e._y0),e._x2+e._k*(e._x1-t),e._y2+e._k*(e._y1-a),e._x2,e._y2)}function Oe(e,t){this._context=e,this._k=(1-t)/6}Oe.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2) +break +case 3:Fe(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t) +break +case 1:this._point=2,this._x1=e,this._y1=t +break +case 2:this._point=3 +default:Fe(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}} +const Te=function e(t){function a(e){return new Oe(e,t)}return a.tension=function(t){return e(+t)},a}(0) +function Pe(e,t){this._context=e,this._k=(1-t)/6}Pe.prototype={areaStart:Ae,areaEnd:Ae,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath() +break +case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath() +break +case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x3=e,this._y3=t +break +case 1:this._point=2,this._context.moveTo(this._x4=e,this._y4=t) +break +case 2:this._point=3,this._x5=e,this._y5=t +break +default:Fe(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}} +const Ne=function e(t){function a(e){return new Pe(e,t)}return a.tension=function(t){return e(+t)},a}(0) +function Ue(e,t){this._context=e,this._k=(1-t)/6}Ue.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1 +break +case 1:this._point=2 +break +case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2) +break +case 3:this._point=4 +default:Fe(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}} +const Re=function e(t){function a(e){return new Ue(e,t)}return a.tension=function(t){return e(+t)},a}(0) +function je(e,t,a){var l=e._x1,i=e._y1,o=e._x2,n=e._y2 +if(e._l01_a>g){var r=2*e._l01_2a+3*e._l01_a*e._l12_a+e._l12_2a,c=3*e._l01_a*(e._l01_a+e._l12_a) +l=(l*r-e._x0*e._l12_2a+e._x2*e._l01_2a)/c,i=(i*r-e._y0*e._l12_2a+e._y2*e._l01_2a)/c}if(e._l23_a>g){var h=2*e._l23_2a+3*e._l23_a*e._l12_a+e._l12_2a,s=3*e._l23_a*(e._l23_a+e._l12_a) +o=(o*h+e._x1*e._l23_2a-t*e._l12_2a)/s,n=(n*h+e._y1*e._l23_2a-a*e._l12_2a)/s}e._context.bezierCurveTo(l,i,o,n,e._x2,e._y2)}function Ie(e,t){this._context=e,this._alpha=t}Ie.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2) +break +case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){if(e=+e,t=+t,this._point){var a=this._x2-e,l=this._y2-t +this._l23_a=Math.sqrt(this._l23_2a=Math.pow(a*a+l*l,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t) +break +case 1:this._point=2 +break +case 2:this._point=3 +default:je(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}} +const Ge=function e(t){function a(e){return t?new Ie(e,t):new Oe(e,0)}return a.alpha=function(t){return e(+t)},a}(.5) +function $e(e,t){this._context=e,this._alpha=t}$e.prototype={areaStart:Ae,areaEnd:Ae,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath() +break +case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath() +break +case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(e,t){if(e=+e,t=+t,this._point){var a=this._x2-e,l=this._y2-t +this._l23_a=Math.sqrt(this._l23_2a=Math.pow(a*a+l*l,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=e,this._y3=t +break +case 1:this._point=2,this._context.moveTo(this._x4=e,this._y4=t) +break +case 2:this._point=3,this._x5=e,this._y5=t +break +default:je(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}} +const qe=function e(t){function a(e){return t?new $e(e,t):new Pe(e,0)}return a.alpha=function(t){return e(+t)},a}(.5) +function Ze(e,t){this._context=e,this._alpha=t}Ze.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){if(e=+e,t=+t,this._point){var a=this._x2-e,l=this._y2-t +this._l23_a=Math.sqrt(this._l23_2a=Math.pow(a*a+l*l,this._alpha))}switch(this._point){case 0:this._point=1 +break +case 1:this._point=2 +break +case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2) +break +case 3:this._point=4 +default:je(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}} +const Ye=function e(t){function a(e){return t?new Ze(e,t):new Ue(e,0)}return a.alpha=function(t){return e(+t)},a}(.5) +function Ke(e){this._context=e}function We(e){return new Ke(e)}function Xe(e){return e<0?-1:1}function Je(e,t,a){var l=e._x1-e._x0,i=t-e._x1,o=(e._y1-e._y0)/(l||i<0&&-0),n=(a-e._y1)/(i||l<0&&-0),r=(o*i+n*l)/(l+i) +return(Xe(o)+Xe(n))*Math.min(Math.abs(o),Math.abs(n),.5*Math.abs(r))||0}function Qe(e,t){var a=e._x1-e._x0 +return a?(3*(e._y1-e._y0)/a-t)/2:t}function et(e,t,a){var l=e._x0,i=e._y0,o=e._x1,n=e._y1,r=(o-l)/3 +e._context.bezierCurveTo(l+r,i+r*t,o-r,n-r*a,o,n)}function tt(e){this._context=e}function at(e){this._context=new lt(e)}function lt(e){this._context=e}function it(e){return new tt(e)}function ot(e){return new at(e)}function nt(e){this._context=e}function rt(e){var t,a,l=e.length-1,i=new Array(l),o=new Array(l),n=new Array(l) +for(i[0]=0,o[0]=2,n[0]=e[0]+2*e[1],t=1;t=0;--t)i[t]=(n[t]-i[t+1])/o[t] +for(o[l-1]=(e[l]+i[l-1])/2,t=0;t1)for(var a,l,i,o=1,n=e[t[0]],r=n.length;o=0;)a[t]=t +return a}function pt(e,t){return e[t]}function mt(e){const t=[] +return t.key=e,t}function yt(){var e=s([]),t=vt,a=ft,l=pt +function i(i){var o,n,r=Array.from(e.apply(this,arguments),mt),c=r.length,h=-1 +for(const e of i)for(o=0,++h;o0){for(var a,l,i,o=0,n=e[0].length;o0)for(var a,l,i,o,n,r,c=0,h=e[t[0]].length;c0?(l[0]=o,l[1]=o+=i):i<0?(l[1]=n,l[0]=n+=i):(l[0]=0,l[1]=i)}function zt(e,t){if((a=e.length)>0){for(var a,l=0,i=e[t[0]],o=i.length;l0&&(l=(a=e[t[0]]).length)>0){for(var a,l,i,o=0,n=1;no&&(o=t,l=a) +return l}function xt(e){var t=e.map(Ht) +return vt(e).sort((function(e,a){return t[e]-t[a]}))}function Ht(e){for(var t,a=0,l=-1,i=e.length;++l=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t) +break +case 1:this._point=2 +default:if(this._t<=0)this._context.lineTo(this._x,t),this._context.lineTo(e,t) +else{var a=this._x*(1-this._t)+e*this._t +this._context.lineTo(a,this._y),this._context.lineTo(a,t)}}this._x=e,this._y=t}}},2350:function(e){e.exports=function(){"use strict" +var e=6e4,t=36e5,a="millisecond",l="second",i="minute",o="hour",n="day",r="week",c="month",h="quarter",s="year",d="date",u="Invalid Date",f=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,v=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,p={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(e){var t=["th","st","nd","rd"],a=e%100 +return"["+e+(t[(a-20)%10]||t[a]||t[0])+"]"}},m=function(e,t,a){var l=String(e) +return!l||l.length>=t?e:""+Array(t+1-l.length).join(a)+e},y={s:m,z:function(e){var t=-e.utcOffset(),a=Math.abs(t),l=Math.floor(a/60),i=a%60 +return(t<=0?"+":"-")+m(l,2,"0")+":"+m(i,2,"0")},m:function e(t,a){if(t.date()1)return e(n[0])}else{var r=t.name +b[r]=t,i=r}return!l&&i&&(g=i),i||!l&&g},A=function(e,t){if(z(e))return e.clone() +var a="object"==typeof t?t:{} +return a.date=e,a.args=arguments,new x(a)},w=y +w.l=M,w.i=z,w.w=function(e,t){return A(e,{locale:t.$L,utc:t.$u,x:t.$x,$offset:t.$offset})} +var x=function(){function p(e){this.$L=M(e.locale,null,!0),this.parse(e)}var m=p.prototype +return m.parse=function(e){this.$d=function(e){var t=e.date,a=e.utc +if(null===t)return new Date(NaN) +if(w.u(t))return new Date +if(t instanceof Date)return new Date(t) +if("string"==typeof t&&!/Z$/i.test(t)){var l=t.match(f) +if(l){var i=l[2]-1||0,o=(l[7]||"0").substring(0,3) +return a?new Date(Date.UTC(l[1],i,l[3]||1,l[4]||0,l[5]||0,l[6]||0,o)):new Date(l[1],i,l[3]||1,l[4]||0,l[5]||0,l[6]||0,o)}}return new Date(t)}(e),this.$x=e.x||{},this.init()},m.init=function(){var e=this.$d +this.$y=e.getFullYear(),this.$M=e.getMonth(),this.$D=e.getDate(),this.$W=e.getDay(),this.$H=e.getHours(),this.$m=e.getMinutes(),this.$s=e.getSeconds(),this.$ms=e.getMilliseconds()},m.$utils=function(){return w},m.isValid=function(){return!(this.$d.toString()===u)},m.isSame=function(e,t){var a=A(e) +return this.startOf(t)<=a&&a<=this.endOf(t)},m.isAfter=function(e,t){return A(e)0,m<=p.r||!p.r){m<=1&&v>0&&(p=u[v-1]) +var y=d[p.l] +r&&(m=r(""+m)),h="string"==typeof y?y.replace("%d",m):y(m,l,p.l,s) +break}}if(l)return h +var g=s?d.future:d.past +return"function"==typeof g?g(h):g.replace("%s",h)},l.to=function(e,t){return o(e,t,this,!0)},l.from=function(e,t){return o(e,t,this)} +var n=function(e){return e.$u?a.utc():a()} +l.toNow=function(e){return this.to(n(this),e)},l.fromNow=function(e){return this.from(n(this),e)}}}()},3924:e=>{"use strict" +var t=function(e){return function(e){return!!e&&"object"==typeof e}(e)&&!function(e){var t=Object.prototype.toString.call(e) +return"[object RegExp]"===t||"[object Date]"===t||function(e){return e.$$typeof===a}(e)}(e)},a="function"==typeof Symbol&&Symbol.for?Symbol.for("react.element"):60103 +function l(e,t){return!1!==t.clone&&t.isMergeableObject(e)?r((a=e,Array.isArray(a)?[]:{}),e,t):e +var a}function i(e,t,a){return e.concat(t).map((function(e){return l(e,a)}))}function o(e){return Object.keys(e).concat(function(e){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(e).filter((function(t){return Object.propertyIsEnumerable.call(e,t)})):[]}(e))}function n(e,t){try{return t in e}catch(e){return!1}}function r(e,a,c){(c=c||{}).arrayMerge=c.arrayMerge||i,c.isMergeableObject=c.isMergeableObject||t,c.cloneUnlessOtherwiseSpecified=l +var h=Array.isArray(a) +return h===Array.isArray(e)?h?c.arrayMerge(e,a,c):function(e,t,a){var i={} +return a.isMergeableObject(e)&&o(e).forEach((function(t){i[t]=l(e[t],a)})),o(t).forEach((function(o){(function(e,t){return n(e,t)&&!(Object.hasOwnProperty.call(e,t)&&Object.propertyIsEnumerable.call(e,t))})(e,o)||(n(e,o)&&a.isMergeableObject(t[o])?i[o]=function(e,t){if(!t.customMerge)return r +var a=t.customMerge(e) +return"function"==typeof a?a:r}(o,a)(e[o],t[o],a):i[o]=l(t[o],a))})),i}(e,a,c):l(a,c)}r.all=function(e,t){if(!Array.isArray(e))throw new Error("first argument should be an array") +return e.reduce((function(e,a){return r(e,a,t)}),{})} +var c=r +e.exports=c},3109:(e,t,a)=>{"use strict" +a.r(t),a.d(t,{default:()=>S}) +var l=a(4927),i=["input","select","textarea","a[href]","button","[tabindex]:not(slot)","audio[controls]","video[controls]",'[contenteditable]:not([contenteditable="false"])',"details>summary:first-of-type","details"],o=i.join(","),n="undefined"==typeof Element,r=n?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,c=!n&&Element.prototype.getRootNode?function(e){return e.getRootNode()}:function(e){return e.ownerDocument},h=function(e,t,a){var l=Array.prototype.slice.apply(e.querySelectorAll(o)) +return t&&r.call(e,o)&&l.unshift(e),l.filter(a)},s=function e(t,a,l){for(var i=[],n=Array.from(t);n.length;){var c=n.shift() +if("SLOT"===c.tagName){var h=c.assignedElements(),s=e(h.length?h:c.children,!0,l) +l.flatten?i.push.apply(i,s):i.push({scope:c,candidates:s})}else{r.call(c,o)&&l.filter(c)&&(a||!t.includes(c))&&i.push(c) +var d=c.shadowRoot||"function"==typeof l.getShadowRoot&&l.getShadowRoot(c),u=!l.shadowRootFilter||l.shadowRootFilter(c) +if(d&&u){var f=e(!0===d?c.children:d.children,!0,l) +l.flatten?i.push.apply(i,f):i.push({scope:c,candidates:f})}else n.unshift.apply(n,c.children)}}return i},d=function(e,t){return e.tabIndex<0&&(t||/^(AUDIO|VIDEO|DETAILS)$/.test(e.tagName)||e.isContentEditable)&&isNaN(parseInt(e.getAttribute("tabindex"),10))?0:e.tabIndex},u=function(e,t){return e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex},f=function(e){return"INPUT"===e.tagName},v=function(e){var t=e.getBoundingClientRect(),a=t.width,l=t.height +return 0===a&&0===l},p=function(e,t){return!(t.disabled||function(e){return f(e)&&"hidden"===e.type}(t)||function(e,t){var a=t.displayCheck,l=t.getShadowRoot +if("hidden"===getComputedStyle(e).visibility)return!0 +var i=r.call(e,"details>summary:first-of-type")?e.parentElement:e +if(r.call(i,"details:not([open]) *"))return!0 +var o=c(e).host,n=(null==o?void 0:o.ownerDocument.contains(o))||e.ownerDocument.contains(e) +if(a&&"full"!==a){if("non-zero-area"===a)return v(e)}else{if("function"==typeof l){for(var h=e;e;){var s=e.parentElement,d=c(e) +if(s&&!s.shadowRoot&&!0===l(s))return v(e) +e=e.assignedSlot?e.assignedSlot:s||d===e.ownerDocument?s:d.host}e=h}if(n)return!e.getClientRects().length}return!1}(t,e)||function(e){return"DETAILS"===e.tagName&&Array.prototype.slice.apply(e.children).some((function(e){return"SUMMARY"===e.tagName}))}(t)||function(e){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(e.tagName))for(var t=e.parentElement;t;){if("FIELDSET"===t.tagName&&t.disabled){for(var a=0;a=0)},g=function e(t){var a=[],l=[] +return t.forEach((function(t,i){var o=!!t.scope,n=o?t.scope:t,r=d(n,o),c=o?e(t.candidates):n +0===r?o?a.push.apply(a,c):a.push(n):l.push({documentOrder:i,tabIndex:r,item:t,isScope:o,content:c})})),l.sort(u).reduce((function(e,t){return t.isScope?e.push.apply(e,t.content):e.push(t.content),e}),[]).concat(a)},b=function(e,t){var a +return a=(t=t||{}).getShadowRoot?s([e],t.includeContainer,{filter:m.bind(null,t),flatten:!1,getShadowRoot:t.getShadowRoot,shadowRootFilter:y}):h(e,t.includeContainer,m.bind(null,t)),g(a)},z=function(e,t){if(t=t||{},!e)throw new Error("No node provided") +return!1!==r.call(e,o)&&m(t,e)},M=i.concat("iframe").join(","),A=function(e,t){if(t=t||{},!e)throw new Error("No node provided") +return!1!==r.call(e,M)&&p(t,e)} +function w(e,t){var a=Object.keys(e) +if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) +t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,l)}return a}function x(e){for(var t=1;t0){var t=V[V.length-1] +t!==e&&t.pause()}var a=V.indexOf(e);-1===a||V.splice(a,1),V.push(e)},deactivateTrap:function(e){var t=V.indexOf(e);-1!==t&&V.splice(t,1),V.length>0&&V[V.length-1].unpause()}}),B=function(e){return setTimeout(e,0)},L=function(e,t){var a=-1 +return e.every((function(e,l){return!t(e)||(a=l,!1)})),a},C=function(e){for(var t=arguments.length,a=new Array(t>1?t-1:0),l=1;l1?a-1:0),n=1;n=0)e=l.activeElement +else{var t=o.tabbableGroups[0] +e=t&&t.firstTabbableNode||c("fallbackFocus")}if(!e)throw new Error("Your focus-trap needs to have at least one focusable element") +return e},u=function(){if(o.containerGroups=o.containers.map((function(e){var t,a,l=b(e,i.tabbableOptions),o=(t=e,(a=(a=i.tabbableOptions)||{}).getShadowRoot?s([t],a.includeContainer,{filter:p.bind(null,a),flatten:!0,getShadowRoot:a.getShadowRoot}):h(t,a.includeContainer,p.bind(null,a))) +return{container:e,tabbableNodes:l,focusableNodes:o,firstTabbableNode:l.length>0?l[0]:null,lastTabbableNode:l.length>0?l[l.length-1]:null,nextTabbableNode:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],a=o.findIndex((function(t){return t===e})) +if(!(a<0))return t?o.slice(a+1).find((function(e){return z(e,i.tabbableOptions)})):o.slice(0,a).reverse().find((function(e){return z(e,i.tabbableOptions)}))}}})),o.tabbableGroups=o.containerGroups.filter((function(e){return e.tabbableNodes.length>0})),o.tabbableGroups.length<=0&&!c("fallbackFocus"))throw new Error("Your focus-trap must have at least one container with at least one tabbable node in it at all times")},f=function e(t){!1!==t&&t!==l.activeElement&&(t&&t.focus?(t.focus({preventScroll:!!i.preventScroll}),o.mostRecentlyFocusedNode=t,function(e){return e.tagName&&"input"===e.tagName.toLowerCase()&&"function"==typeof e.select}(t)&&t.select()):e(d()))},v=function(e){var t=c("setReturnFocus",e) +return t||!1!==t&&e},m=function(e){var t=E(e) +r(t)>=0||(C(i.clickOutsideDeactivates,e)?a.deactivate({returnFocus:i.returnFocusOnDeactivate&&!A(t,i.tabbableOptions)}):C(i.allowOutsideClick,e)||e.preventDefault())},y=function(e){var t=E(e),a=r(t)>=0 +a||t instanceof Document?a&&(o.mostRecentlyFocusedNode=t):(e.stopImmediatePropagation(),f(o.mostRecentlyFocusedNode||d()))},g=function(e){if(function(e){return"Escape"===e.key||"Esc"===e.key||27===e.keyCode}(e)&&!1!==C(i.escapeDeactivates,e))return e.preventDefault(),void a.deactivate();(function(e){return"Tab"===e.key||9===e.keyCode})(e)&&function(e){var t=E(e) +u() +var a=null +if(o.tabbableGroups.length>0){var l=r(t),n=l>=0?o.containerGroups[l]:void 0 +if(l<0)a=e.shiftKey?o.tabbableGroups[o.tabbableGroups.length-1].lastTabbableNode:o.tabbableGroups[0].firstTabbableNode +else if(e.shiftKey){var h=L(o.tabbableGroups,(function(e){var a=e.firstTabbableNode +return t===a})) +if(h<0&&(n.container===t||A(t,i.tabbableOptions)&&!z(t,i.tabbableOptions)&&!n.nextTabbableNode(t,!1))&&(h=l),h>=0){var s=0===h?o.tabbableGroups.length-1:h-1 +a=o.tabbableGroups[s].lastTabbableNode}}else{var d=L(o.tabbableGroups,(function(e){var a=e.lastTabbableNode +return t===a})) +if(d<0&&(n.container===t||A(t,i.tabbableOptions)&&!z(t,i.tabbableOptions)&&!n.nextTabbableNode(t))&&(d=l),d>=0){var v=d===o.tabbableGroups.length-1?0:d+1 +a=o.tabbableGroups[v].firstTabbableNode}}}else a=c("fallbackFocus") +a&&(e.preventDefault(),f(a))}(e)},M=function(e){var t=E(e) +r(t)>=0||C(i.clickOutsideDeactivates,e)||C(i.allowOutsideClick,e)||(e.preventDefault(),e.stopImmediatePropagation())},w=function(){if(o.active)return _.activateTrap(a),o.delayInitialFocusTimer=i.delayInitialFocus?B((function(){f(d())})):f(d()),l.addEventListener("focusin",y,!0),l.addEventListener("mousedown",m,{capture:!0,passive:!1}),l.addEventListener("touchstart",m,{capture:!0,passive:!1}),l.addEventListener("click",M,{capture:!0,passive:!1}),l.addEventListener("keydown",g,{capture:!0,passive:!1}),a},H=function(){if(o.active)return l.removeEventListener("focusin",y,!0),l.removeEventListener("mousedown",m,!0),l.removeEventListener("touchstart",m,!0),l.removeEventListener("click",M,!0),l.removeEventListener("keydown",g,!0),a} +return(a={get active(){return o.active},get paused(){return o.paused},activate:function(e){if(o.active)return this +var t=n(e,"onActivate"),a=n(e,"onPostActivate"),i=n(e,"checkCanFocusTrap") +i||u(),o.active=!0,o.paused=!1,o.nodeFocusedBeforeActivation=l.activeElement,t&&t() +var r=function(){i&&u(),w(),a&&a()} +return i?(i(o.containers.concat()).then(r,r),this):(r(),this)},deactivate:function(e){if(!o.active)return this +var t=x({onDeactivate:i.onDeactivate,onPostDeactivate:i.onPostDeactivate,checkCanReturnFocus:i.checkCanReturnFocus},e) +clearTimeout(o.delayInitialFocusTimer),o.delayInitialFocusTimer=void 0,H(),o.active=!1,o.paused=!1,_.deactivateTrap(a) +var l=n(t,"onDeactivate"),r=n(t,"onPostDeactivate"),c=n(t,"checkCanReturnFocus"),h=n(t,"returnFocus","returnFocusOnDeactivate") +l&&l() +var s=function(){B((function(){h&&f(v(o.nodeFocusedBeforeActivation)),r&&r()}))} +return h&&c?(c(v(o.nodeFocusedBeforeActivation)).then(s,s),this):(s(),this)},pause:function(){return o.paused||!o.active||(o.paused=!0,H()),this},unpause:function(){return o.paused&&o.active?(o.paused=!1,u(),w(),this):this},updateContainerElements:function(e){var t=[].concat(e).filter(Boolean) +return o.containers=t.map((function(e){return"string"==typeof e?l.querySelector(e):e})),o.active&&u(),this}}).updateContainerElements(e),a} +let D +try{D=(0,l.capabilities)("3.22")}catch{D=(0,l.capabilities)("3.13")}var S=(0,l.setModifierManager)((()=>({capabilities:D,createModifier:()=>({focusTrapOptions:void 0,isActive:!0,isPaused:!1,shouldSelfFocus:!1,focusTrap:void 0}),installModifier(e,t,a){let{named:{isActive:l,isPaused:i,shouldSelfFocus:o,focusTrapOptions:n,additionalElements:r,_createFocusTrap:c}}=a +e.focusTrapOptions={...n}||{},void 0!==l&&(e.isActive=l),void 0!==i&&(e.isPaused=i),e.focusTrapOptions&&void 0===e.focusTrapOptions.initialFocus&&o&&(e.focusTrapOptions.initialFocus=t) +let h=k +c&&(h=c),!1!==e.focusTrapOptions.returnFocusOnDeactivate&&(e.focusTrapOptions.returnFocusOnDeactivate=!0),e.focusTrap=h(void 0!==r?[t,...r]:t,e.focusTrapOptions),e.isActive&&e.focusTrap.activate(),e.isPaused&&e.focusTrap.pause()},updateModifier(e,t){let{named:a}=t +const l=a.focusTrapOptions||{} +if(e.isActive&&!a.isActive){const{returnFocusOnDeactivate:t}=l,a=void 0===t +e.focusTrap.deactivate({returnFocus:a})}else!e.isActive&&a.isActive&&e.focusTrap.activate() +e.isPaused&&!a.isPaused?e.focusTrap.unpause():!e.isPaused&&a.isPaused&&e.focusTrap.pause(),e.focusTrapOptions=l,void 0!==a.isActive&&(e.isActive=a.isActive),void 0!==a.isPaused&&(e.isPaused=a.isPaused)},destroyModifier(e){let{focusTrap:t}=e +t.deactivate()}})),class{})},3720:(e,t,a)=>{"use strict" +function l(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t,a,l){a&&Object.defineProperty(e,t,{enumerable:a.enumerable,configurable:a.configurable,writable:a.writable,value:a.initializer?a.initializer.call(l):void 0})}function o(e,t,a,l,i){var o={} +return Object.keys(l).forEach((function(e){o[e]=l[e]})),o.enumerable=!!o.enumerable,o.configurable=!!o.configurable,("value"in o||o.initializer)&&(o.writable=!0),o=a.slice().reverse().reduce((function(a,l){return l(e,t,a)||a}),o),i&&void 0!==o.initializer&&(o.value=o.initializer?o.initializer.call(i):void 0,o.initializer=void 0),void 0===o.initializer&&(Object.defineProperty(e,t,o),o=null),o}a.d(t,{_:()=>l,a:()=>o,b:()=>i})},5487:(e,t,a)=>{"use strict" +a.d(t,{Bq:()=>i,sd:()=>o,zA:()=>l}) +const l={A:"a",B:"b",C:"c",D:"d",E:"e",F:"f",G:"g",H:"h",I:"i",J:"j",K:"k",L:"l",M:"m",N:"n",O:"o",P:"p",Q:"q",R:"r",S:"s",T:"t",U:"u",V:"v",W:"w",X:"x",Y:"y",Z:"z","!":"1","@":"2","#":"3",$:"4","%":"5","^":"6","&":"7","*":"8","(":"9",")":"0",_:"-","+":"=","<":",",">":".","?":"/",":":";",'"':"'","~":"`","{":"[","}":"]","|":"\\"},i={"å":"a",b:"b","ç":"c","∂":"d","ƒ":"f","©":"g","˙":"h","∆":"j","˚":"k","¬":"l","µ":"m","ø":"o","π":"p","œ":"q","®":"r","ß":"s","†":"t","√":"v","∑":"w","≈":"x","¥":"y","Ω":"z","¡":"1","™":"2","£":"3","¢":"4","∞":"5","§":"6","¶":"7","•":"8","ª":"9","º":"0","–":"-","≠":"=","≤":",","≥":".","÷":"/","…":";","æ":"'","“":"[","‘":"]","«":"\\"},o={"Å":"a","ı":"b","Î":"d","Ï":"f","˝":"g","Ó":"h","ˆ":"i","Ô":"j","":"k","Ò":"l","Â":"m","˜":"n","Ø":"o","Œ":"q","‰":"r","Í":"s","ˇ":"t","¨":"u","◊":"v","„":"w","˛":"x","Á":"y","¸":"z","⁄":"1","€":"2","‹":"3","›":"4","fi":"5","fl":"6","‡":"7","°":"8","·":"9","‚":"0","—":"-","±":"=","¯":",","˘":".","¿":"/","Ú":";","Æ":"'","`":"`","”":"[","’":"]","»":"\\"}},3481:(e,t,a)=>{"use strict" +a.r(t),a.d(t,{default:()=>r}) +var l=a(6354),i=a(3353),o=a(4005),n=a(9026),r=(a(3800),a(2956),a(5487),a(6826),a(1866),(0,l.helper)((function(e){let[t,a]=e +return function(e){(0,i.assert)("ember-keyboard: You must pass a function as the second argument to the `if-key` helper","function"==typeof a),(0,i.assert)("ember-keyboard: The `if-key` helper expects to be invoked with a KeyboardEvent",e instanceof KeyboardEvent),(0,o.Z)((0,n.Z)(e.type,t),e)&&a(e)}})))},6415:(e,t,a)=>{"use strict" +a.r(t),a.d(t,{default:()=>d}) +var l,i,o=a(3720),n=a(6354),r=a.n(n),c=a(3353),h=a(8574),s=a(9026) +let d=(l=class extends(r()){constructor(){super(...arguments),(0,o.b)(this,"keyboard",i,this),(0,o._)(this,"keyCombo",void 0),(0,o._)(this,"callback",void 0),(0,o._)(this,"keyboardActivated",!0),(0,o._)(this,"keyboardPriority",0),(0,o._)(this,"eventName","keydown"),(0,o._)(this,"keyboardHandlers",void 0)}compute(e,t){let[a,l]=e,{event:i="keydown",activated:o=!0,priority:n=0}=t;(0,c.assert)("ember-keyboard: You must pass a function as the second argument to the `on-key` helper","function"==typeof l),this.keyCombo=a,this.callback=l,this.eventName=i,this.keyboardActivated=o,this.keyboardPriority=n,this.keyboardHandlers={},this.keyboardHandlers[(0,s.Z)(i,a)]=l,this.keyboard.register(this)}willDestroy(){this.keyboard.unregister(this),super.willDestroy(...arguments)}},i=(0,o.a)(l.prototype,"keyboard",[h.inject],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),l)},4146:(e,t,a)=>{"use strict" +a.r(t),a.d(t,{default:()=>v}) +var l=a(3720),i=a(2509),o=a(8574),n=a(7219),r=a(9341),c=a(9026),h=a(4005) +a(3800),a(2956),a(3353),a(5487),a(6826),a(1866) +const s=["input","select","textarea"] +let d +var u,f +u=class extends i.default{constructor(e,t){super(e,t),(0,l.b)(this,"keyboard",f,this),(0,l._)(this,"element",void 0),(0,l._)(this,"keyboardPriority",0),(0,l._)(this,"activatedParamValue",!0),(0,l._)(this,"eventName","keydown"),(0,l._)(this,"onlyWhenFocused",!0),(0,l._)(this,"listenerName",void 0),(0,l._)(this,"removeEventListeners",(()=>{this.onlyWhenFocused&&(this.element.removeEventListener("click",this.onFocus,!0),this.element.removeEventListener("focus",this.onFocus,!0),this.element.removeEventListener("focusout",this.onFocusOut,!0))})),this.keyboard.register(this),(0,r.registerDestructor)(this,(()=>{this.removeEventListeners(),this.keyboard.unregister(this)}))}modify(e,t,a){this.element=e,this.removeEventListeners(),this.setupProperties(t,a),this.onlyWhenFocused&&this.addEventListeners()}setupProperties(e,t){let[a,l]=e,{activated:i,event:o,priority:n,onlyWhenFocused:r}=t +this.keyCombo=a,this.callback=l,this.eventName=o||"keydown",this.activatedParamValue="activated"in t?!!i:void 0,this.keyboardPriority=n?parseInt(n,10):0,this.listenerName=(0,c.Z)(this.eventName,this.keyCombo),this.onlyWhenFocused=void 0!==r?r:s.includes(this.element.tagName.toLowerCase())}addEventListeners(){this.element.addEventListener("click",this.onFocus,!0),this.element.addEventListener("focus",this.onFocus,!0),this.element.addEventListener("focusout",this.onFocusOut,!0)}onFocus(){this.isFocused=!0}onFocusOut(){this.isFocused=!1}get keyboardActivated(){return!1!==this.activatedParamValue&&(!this.onlyWhenFocused||this.isFocused)}get keyboardFirstResponder(){return!!this.onlyWhenFocused&&this.isFocused}canHandleKeyboardEvent(e){return(0,h.Z)(this.listenerName,e)}handleKeyboardEvent(e,t){(0,h.Z)(this.listenerName,e)&&(this.callback?this.callback(e,t):this.element.click())}},f=(0,l.a)(u.prototype,"keyboard",[o.inject],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),(0,l.a)(u.prototype,"onFocus",[n.action],Object.getOwnPropertyDescriptor(u.prototype,"onFocus"),u.prototype),(0,l.a)(u.prototype,"onFocusOut",[n.action],Object.getOwnPropertyDescriptor(u.prototype,"onFocusOut"),u.prototype),d=u +var v=d},9690:(e,t,a)=>{"use strict" +a.r(t),a.d(t,{default:()=>f}) +var l,i=a(3720),o=a(8574),n=a.n(o),r=a(1292),c=a(7219),h=a(8773),s=a(9026),d=a(4005) +function u(e,t){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null +if(e.handleKeyboardEvent){if(e.canHandleKeyboardEvent&&!e.canHandleKeyboardEvent(t))return +e.handleKeyboardEvent(t,a)}else{if(!e.keyboardHandlers)throw new Error("A responder registered with the ember-keyboard service must implement either `keyboardHandlers` (property returning a dictionary of listenerNames to handler functions), or `handleKeyboardEvent(event)`)") +Object.keys(e.keyboardHandlers).forEach((l=>{(0,d.Z)(l,t)&&(a?e.keyboardHandlers[l](t,a):e.keyboardHandlers[l](t))}))}}a(3800),a(2956),a(3353),a(5487),a(6826),a(1866) +let f=(l=class extends(n()){get activeResponders(){let{registeredResponders:e}=this +return Array.from(e).filter((e=>e.keyboardActivated))}get sortedResponders(){return this.activeResponders.sort(((e,t)=>function(e,t,a){return function(e,t,a,l){return function(e,t){let a=e-t +return(a>0)-(a<0)}(l?l((0,c.get)(e,a)):(0,c.get)(e,a),l?l((0,c.get)(t,a)):(0,c.get)(t,a))}(t,e,a,arguments.length>3&&void 0!==arguments[3]?arguments[3]:null)}(e,t,"keyboardPriority")))}get firstResponders(){return this.sortedResponders.filter((e=>e.keyboardFirstResponder))}get normalResponders(){return this.sortedResponders.filter((e=>!e.keyboardFirstResponder))}constructor(){if(super(...arguments),(0,i._)(this,"registeredResponders",new Set),"undefined"!=typeof FastBoot)return +let e=((0,r.getOwner)(this).resolveRegistration("config:environment")||{}).emberKeyboard||{} +e.disableOnInputFields&&(this._disableOnInput=!0),this._listeners=e.listeners||["keyUp","keyDown","keyPress"],this._listeners=this._listeners.map((e=>e.toLowerCase())),this._listeners.forEach((e=>{document.addEventListener(e,this._respond)}))}willDestroy(){super.willDestroy(...arguments),"undefined"==typeof FastBoot&&this._listeners.forEach((e=>{document.removeEventListener(e,this._respond)}))}_respond(e){if(this._disableOnInput&&e.target){var t +const a=null!==(t=e.composedPath()[0])&&void 0!==t?t:e.target,l=a.tagName +if(a.getAttribute&&null!=a.getAttribute("contenteditable")||"TEXTAREA"===l||"INPUT"===l)return}(0,h.run)((()=>{let{firstResponders:t,normalResponders:a}=this +!function(e,t){let{firstResponders:a,normalResponders:l}=t,i=!1,o=!1 +const n={stopImmediatePropagation(){i=!0},stopPropagation(){o=!0}} +for(const c of a)if(u(c,e,n),i)break +if(o)return +i=!1 +let r=Number.POSITIVE_INFINITY +for(const c of l){const t=Number(c.keyboardPriority) +if(!i||t!==r){if(t{"use strict" +a.d(t,{Z:()=>i}) +var l=a(1866) +function i(e){if(!(0,l.isNone)(e))switch(e){case 0:return"left" +case 1:return"middle" +case 2:return"right"}}},4005:(e,t,a)=>{"use strict" +a.d(t,{Z:()=>c}) +var l=a(3800),i=a(2956),o=a(5487),n=a(6826) +a(3353),a(1866) +const r="_all" +function c(e,t){let a,c=arguments.length>2&&void 0!==arguments[2]?arguments[2]:(0,i.Z)() +if(e instanceof l.Z)a=e +else{if("string"!=typeof e)throw new Error("Expected a `string` or `KeyCombo` as `keyComboOrKeyComboString` argument to `isKey`") +a=l.Z.parse(e,c)}return a.type===t.type&&(!!function(e){return e.keyOrCode===r&&!1===e.altKey&&!1===e.ctrlKey&&!1===e.metaKey&&!1===e.shiftKey}(a)||!(!function(e,t){return e.type===t.type&&e.altKey===t.altKey&&e.ctrlKey===t.ctrlKey&&e.metaKey===t.metaKey&&e.shiftKey===t.shiftKey}(a,t)||!function(e,t){return t instanceof KeyboardEvent&&(e.keyOrCode===r||e.keyOrCode===t.code||e.keyOrCode===t.key)}(a,t)&&!function(e,t){return t instanceof MouseEvent&&(e.keyOrCode===r||e.keyOrCode===(0,n.Z)(t.button))}(a,t))||function(e,t,a){return s([],e)&&s(["shift"],t)?t.key===e.keyOrCode:s(["shift"],e)&&s(["shift"],t)?(l=t.key,(o.zA[l]||l)===e.keyOrCode):"Macintosh"===a&&s(["alt"],e)&&s(["alt"],t)?function(e){return o.Bq[e]||e}(t.key)===e.keyOrCode:!("Macintosh"!==a||!s(["shift","alt"],e)||!s(["shift","alt"],t))&&function(e){return o.sd[e]||e}(t.key)===e.keyOrCode +var l}(a,t,c))}const h=["alt","ctrl","meta","shift","cmd"].filter((e=>"cmd"!=e)) +function s(e,t){for(let a of h){if(e.includes(a)&&!t[`${a}Key`])return!1 +if(!e.includes(a)&&t[`${a}Key`])return!1}return!0}},3800:(e,t,a)=>{"use strict" +a.d(t,{Z:()=>s}) +var l=a(3720),i=a(2956) +a(3353) +const o=/^alt$/i,n=/^shift$/i,r=/^ctrl$/i,c=/^meta$/i,h=/^cmd$/i +class s{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:(0,i.Z)();(0,l._)(this,"type",void 0),(0,l._)(this,"altKey",!1),(0,l._)(this,"ctrlKey",!1),(0,l._)(this,"shiftKey",!1),(0,l._)(this,"metaKey",!1),(0,l._)(this,"keyOrCode",void 0),(0,l._)(this,"platform",void 0),this.platform=e}static parse(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:(0,i.Z)(),a=new s(t),[l,...d]=e.split(":") +return d=d.join(":"),a.type=l,"+"===d?(a.keyOrCode=d,a):(d.split("+").forEach((e=>{o.test(e)?a.altKey=!0:r.test(e)?a.ctrlKey=!0:c.test(e)?a.metaKey=!0:n.test(e)?a.shiftKey=!0:h.test(e)?t.indexOf("Mac")>-1?a.metaKey=!0:a.ctrlKey=!0:a.keyOrCode=e})),a)}createMatchingKeyboardEvent(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{} +return new KeyboardEvent(this.type,Object.assign({key:this.keyOrCode,code:this.keyOrCode,altKey:this.altKey,ctrlKey:this.ctrlKey,metaKey:this.metaKey,shiftKey:this.shiftKey},e))}}},9026:(e,t,a)=>{"use strict" +function l(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],a=t +"string"==typeof t&&(a=t.split("+")),a.indexOf("cmd")>-1&&(a[a.indexOf("cmd")]=function(e){if("undefined"==typeof FastBoot)return void 0===e&&(e=navigator.platform),e.indexOf("Mac")>-1?"meta":"ctrl"}()) +let l=function(e){return e.sort().join("+")}(a||[]) +return""===l&&(l="_all"),`${e}:${l}`}a.d(t,{Z:()=>l})},2956:(e,t,a)=>{"use strict" +a.d(t,{Z:()=>o}) +var l=a(3353) +let i +function o(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:navigator.userAgent +if((0,l.runInDebug)((()=>{i=null})),!i){let t="Unknown OS";-1!=e.indexOf("Win")&&(t="Windows"),-1!=e.indexOf("Mac")&&(t="Macintosh"),-1!=e.indexOf("Linux")&&(t="Linux"),-1!=e.indexOf("Android")&&(t="Android"),-1!=e.indexOf("like Mac")&&(t="iOS"),i=t}return i}},2509:(e,t,a)=>{"use strict" +a.r(t),a.d(t,{default:()=>c,modifier:()=>s}) +var l=a(1292),i=a(4927),o=a(9341) +function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class r{constructor(e){this.owner=e,n(this,"capabilities",(0,i.capabilities)("3.22"))}createModifier(e,t){return{instance:new e(this.owner,t),element:null}}installModifier(e,t,a){const l=function(e,t){const a=e +return a.element=t,a}(e,t) +l.instance.modify(t,a.positional,a.named)}updateModifier(e,t){e.instance.modify(e.element,t.positional,t.named)}destroyModifier(e){let{instance:t}=e;(0,o.destroy)(t)}}class c{constructor(e,t){(0,l.setOwner)(this,e)}modify(e,t,a){}}(0,i.setModifierManager)((e=>new r(e)),c) +const h=new class{constructor(){n(this,"capabilities",(0,i.capabilities)("3.22"))}createModifier(e){return{element:null,instance:e}}installModifier(e,t,a){const l=function(e,t){const a=e +return a.element=t,a}(e,t),{positional:i,named:o}=a,n=e.instance(t,i,o) +"function"==typeof n&&(l.teardown=n)}updateModifier(e,t){"function"==typeof e.teardown&&e.teardown() +const a=e.instance(e.element,t.positional,t.named) +"function"==typeof a&&(e.teardown=a)}destroyModifier(e){"function"==typeof e.teardown&&e.teardown()}} +function s(e){return(0,i.setModifierManager)((()=>h),e)}},3276:e=>{function t(e,t,a,l){var i,o=null==(i=l)||"number"==typeof i||"boolean"==typeof i?l:a(l),n=t.get(o) +return void 0===n&&(n=e.call(this,l),t.set(o,n)),n}function a(e,t,a){var l=Array.prototype.slice.call(arguments,3),i=a(l),o=t.get(i) +return void 0===o&&(o=e.apply(this,l),t.set(i,o)),o}function l(e,t,a,l,i){return a.bind(t,e,l,i)}function i(e,i){return l(e,this,1===e.length?t:a,i.cache.create(),i.serializer)}function o(){return JSON.stringify(arguments)}function n(){this.cache=Object.create(null)}n.prototype.has=function(e){return e in this.cache},n.prototype.get=function(e){return this.cache[e]},n.prototype.set=function(e,t){this.cache[e]=t} +var r={create:function(){return new n}} +e.exports=function(e,t){var a=t&&t.cache?t.cache:r,l=t&&t.serializer?t.serializer:o +return(t&&t.strategy?t.strategy:i)(e,{cache:a,serializer:l})},e.exports.strategies={variadic:function(e,t){return l(e,this,a,t.cache.create(),t.serializer)},monadic:function(e,a){return l(e,this,t,a.cache.create(),a.serializer)}}},2349:e=>{function t(e){return e&&e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}function a(e){return e}function l(e,l){const i=(l=l||{}).delimiter||".",o=l.maxDepth,n=l.transformKey||a,r={} +return function e(a,c,h){h=h||1,Object.keys(a).forEach((function(s){const d=a[s],u=l.safe&&Array.isArray(d),f=Object.prototype.toString.call(d),v=t(d),p="[object Object]"===f||"[object Array]"===f,m=c?c+i+n(s):n(s) +if(!u&&!v&&p&&Object.keys(d).length&&(!l.maxDepth||h0&&(l=s(a.shift()),d=s(a[0]))}u[l]=e(i[t],o)})),h}},5011:(e,t,a)=>{"use strict" +a.r(t),a.d(t,{SKELETON_TYPE:()=>i,SyntaxError:()=>L,TYPE:()=>l,createLiteralElement:()=>y,createNumberElement:()=>g,isArgumentElement:()=>r,isDateElement:()=>h,isDateTimeSkeleton:()=>m,isLiteralElement:()=>n,isNumberElement:()=>c,isNumberSkeleton:()=>p,isPluralElement:()=>u,isPoundElement:()=>f,isSelectElement:()=>d,isTagElement:()=>v,isTimeElement:()=>s,parse:()=>D,pegParse:()=>C}) +var l,i,o=a(2985) +function n(e){return e.type===l.literal}function r(e){return e.type===l.argument}function c(e){return e.type===l.number}function h(e){return e.type===l.date}function s(e){return e.type===l.time}function d(e){return e.type===l.select}function u(e){return e.type===l.plural}function f(e){return e.type===l.pound}function v(e){return e.type===l.tag}function p(e){return!(!e||"object"!=typeof e||e.type!==i.number)}function m(e){return!(!e||"object"!=typeof e||e.type!==i.dateTime)}function y(e){return{type:l.literal,value:e}}function g(e,t){return{type:l.number,value:e,style:t}}!function(e){e[e.literal=0]="literal",e[e.argument=1]="argument",e[e.number=2]="number",e[e.date=3]="date",e[e.time=4]="time",e[e.select=5]="select",e[e.plural=6]="plural",e[e.pound=7]="pound",e[e.tag=8]="tag"}(l||(l={})),function(e){e[e.number=0]="number",e[e.dateTime=1]="dateTime"}(i||(i={})) +var b=/(?:[Eec]{1,6}|G{1,5}|[Qq]{1,5}|(?:[yYur]+|U{1,5})|[ML]{1,5}|d{1,2}|D{1,3}|F{1}|[abB]{1,5}|[hkHK]{1,2}|w{1,2}|W{1}|m{1,2}|s{1,2}|[zZOvVxX]{1,4})(?=([^']*'[^']*')*[^']*$)/g,z=/^\.(?:(0+)(\*)?|(#+)|(0+)(#+))$/g,M=/^(@+)?(\+|#+)?$/g,A=/(\*)(0+)|(#+)(0+)|(0+)/g,w=/^(0+)$/ +function x(e){var t={} +return e.replace(M,(function(e,a,l){return"string"!=typeof l?(t.minimumSignificantDigits=a.length,t.maximumSignificantDigits=a.length):"+"===l?t.minimumSignificantDigits=a.length:"#"===a[0]?t.maximumSignificantDigits=a.length:(t.minimumSignificantDigits=a.length,t.maximumSignificantDigits=a.length+("string"==typeof l?l.length:0)),""})),t}function H(e){switch(e){case"sign-auto":return{signDisplay:"auto"} +case"sign-accounting":case"()":return{currencySign:"accounting"} +case"sign-always":case"+!":return{signDisplay:"always"} +case"sign-accounting-always":case"()!":return{signDisplay:"always",currencySign:"accounting"} +case"sign-except-zero":case"+?":return{signDisplay:"exceptZero"} +case"sign-accounting-except-zero":case"()?":return{signDisplay:"exceptZero",currencySign:"accounting"} +case"sign-never":case"+_":return{signDisplay:"never"}}}function V(e){var t +if("E"===e[0]&&"E"===e[1]?(t={notation:"engineering"},e=e.slice(2)):"E"===e[0]&&(t={notation:"scientific"},e=e.slice(1)),t){var a=e.slice(0,2) +if("+!"===a?(t.signDisplay="always",e=e.slice(2)):"+?"===a&&(t.signDisplay="exceptZero",e=e.slice(2)),!w.test(e))throw new Error("Malformed concise eng/scientific notation") +t.minimumIntegerDigits=e.length}return t}function _(e){return H(e)||{}}function B(e){for(var t={},a=0,l=e;a1)throw new RangeError("integer-width stems only accept a single optional option") +i.options[0].replace(A,(function(e,a,l,i,o,n){if(a)t.minimumIntegerDigits=l.length +else{if(i&&o)throw new Error("We currently do not support maximum integer digits") +if(n)throw new Error("We currently do not support exact integer digits")}return""})) +continue}if(w.test(i.stem))t.minimumIntegerDigits=i.stem.length +else if(z.test(i.stem)){if(i.options.length>1)throw new RangeError("Fraction-precision stems only accept a single optional option") +i.stem.replace(z,(function(e,a,l,i,o,n){return"*"===l?t.minimumFractionDigits=a.length:i&&"#"===i[0]?t.maximumFractionDigits=i.length:o&&n?(t.minimumFractionDigits=o.length,t.maximumFractionDigits=o.length+n.length):(t.minimumFractionDigits=a.length,t.maximumFractionDigits=a.length),""})),i.options.length&&(t=(0,o.pi)((0,o.pi)({},t),x(i.options[0])))}else if(M.test(i.stem))t=(0,o.pi)((0,o.pi)({},t),x(i.stem)) +else{var n=H(i.stem) +n&&(t=(0,o.pi)((0,o.pi)({},t),n)) +var r=V(i.stem) +r&&(t=(0,o.pi)((0,o.pi)({},t),r))}}return t}var L=function(e){function t(a,l,i,o){var n=e.call(this)||this +return n.message=a,n.expected=l,n.found=i,n.location=o,n.name="SyntaxError","function"==typeof Error.captureStackTrace&&Error.captureStackTrace(n,t),n}return(0,o.ZT)(t,e),t.buildMessage=function(e,t){function a(e){return e.charCodeAt(0).toString(16).toUpperCase()}function l(e){return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,(function(e){return"\\x0"+a(e)})).replace(/[\x10-\x1F\x7F-\x9F]/g,(function(e){return"\\x"+a(e)}))}function i(e){return e.replace(/\\/g,"\\\\").replace(/\]/g,"\\]").replace(/\^/g,"\\^").replace(/-/g,"\\-").replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,(function(e){return"\\x0"+a(e)})).replace(/[\x10-\x1F\x7F-\x9F]/g,(function(e){return"\\x"+a(e)}))}function o(e){switch(e.type){case"literal":return'"'+l(e.text)+'"' +case"class":var t=e.parts.map((function(e){return Array.isArray(e)?i(e[0])+"-"+i(e[1]):i(e)})) +return"["+(e.inverted?"^":"")+t+"]" +case"any":return"any character" +case"end":return"end of input" +case"other":return e.description}}return"Expected "+function(e){var t,a,l=e.map(o) +if(l.sort(),l.length>0){for(t=1,a=1;t",!1),H=function(e){return(0,o.pi)({type:l.literal,value:e.join("")},ia())},V=">",_=xt(">",!1),C=function(e){return e},E="1&&"}"===e)},Qe="\n",et=xt("\n",!1),tt=function(e){return"<"===e||">"===e||"{"===e||"}"===e||la()&&"#"===e},at=Vt("argNameOrNumber"),lt=Vt("validTag"),it=Vt("argNumber"),ot="0",nt=xt("0",!1),rt=function(){return 0},ct=/^[1-9]/,ht=Ht([["1","9"]],!1,!1),st=/^[0-9]/,dt=Ht([["0","9"]],!1,!1),ut=function(e){return parseInt(e.join(""),10)},ft=Vt("argName"),vt=Vt("tagName"),pt=0,mt=0,yt=[{line:1,column:1}],gt=0,bt=[],zt=0 +if(void 0!==t.startRule){if(!(t.startRule in r))throw new Error("Can't start parsing from rule \""+t.startRule+'".') +c=r[t.startRule]}function Mt(){return e.substring(mt,pt)}function At(){return Bt(mt,pt)}function wt(e,t){throw function(e,t){return new L(e,[],"",t)}(e,t=void 0!==t?t:Bt(mt,pt))}function xt(e,t){return{type:"literal",text:e,ignoreCase:t}}function Ht(e,t,a){return{type:"class",parts:e,inverted:t,ignoreCase:a}}function Vt(e){return{type:"other",description:e}}function _t(t){var a,l=yt[t] +if(l)return l +for(a=t-1;!yt[a];)a-- +for(l={line:(l=yt[a]).line,column:l.column};agt&&(gt=pt,bt=[]),bt.push(e))}function Ct(){return Et()}function Et(){var e,t +for(e=[],t=kt();t!==n;)e.push(t),t=kt() +return e}function kt(){var t,a +return t=pt,mt=pt,(h()?void 0:n)!==n?(a=function(){var e,t,a,l +return zt++,(e=Ft())===n&&(e=pt,(t=Ot())!==n&&(a=Et())!==n&&(l=Tt())!==n?(mt=e,e=t=A(t,a,l)):(pt=e,e=n)),zt--,e===n&&(t=n,0===zt&&Lt(M)),e}(),a!==n?(mt=t,t=s(a)):(pt=t,t=n)):(pt=t,t=n),t===n&&(t=function(){var e,t +return e=pt,(t=Dt())!==n&&(mt=e,t=m(t)),t}())===n&&(t=function(){var t,a,l,i +return zt++,t=pt,123===e.charCodeAt(pt)?(a=S,pt++):(a=n,0===zt&&Lt(F)),a!==n&&Zt()!==n&&(l=Jt())!==n&&Zt()!==n?(125===e.charCodeAt(pt)?(i=O,pt++):(i=n,0===zt&&Lt(T)),i!==n?(mt=t,t=a=P(l)):(pt=t,t=n)):(pt=t,t=n),zt--,t===n&&(a=n,0===zt&&Lt(D)),t}())===n&&(t=function(){var t +return t=function(){var t,a,l,i,o,r,c,h,s +return t=pt,123===e.charCodeAt(pt)?(a=S,pt++):(a=n,0===zt&&Lt(F)),a!==n&&Zt()!==n&&(l=Jt())!==n&&Zt()!==n?(44===e.charCodeAt(pt)?(i=te,pt++):(i=n,0===zt&&Lt(ae)),i!==n&&Zt()!==n?(e.substr(pt,6)===le?(o=le,pt+=6):(o=n,0===zt&&Lt(ie)),o!==n&&Zt()!==n?(r=pt,44===e.charCodeAt(pt)?(c=te,pt++):(c=n,0===zt&&Lt(ae)),c!==n&&(h=Zt())!==n?(s=function(){var t,a,l +return t=pt,e.substr(pt,2)===W?(a=W,pt+=2):(a=n,0===zt&&Lt(X)),a!==n?(l=function(){var e,t,a +if(e=pt,t=[],(a=Ut())!==n)for(;a!==n;)t.push(a),a=Ut() +else t=n +return t!==n&&(mt=e,t=K(t)),t}(),l!==n?(mt=t,t=a=J(l)):(pt=t,t=n)):(pt=t,t=n),t===n&&(t=pt,mt=pt,(a=(a=Q())?void 0:n)!==n&&(l=Dt())!==n?(mt=t,t=a=ee(l)):(pt=t,t=n)),t}(),s!==n?r=c=[c,h,s]:(pt=r,r=n)):(pt=r,r=n),r===n&&(r=null),r!==n&&(c=Zt())!==n?(125===e.charCodeAt(pt)?(h=O,pt++):(h=n,0===zt&&Lt(T)),h!==n?(mt=t,t=a=oe(l,o,r)):(pt=t,t=n)):(pt=t,t=n)):(pt=t,t=n)):(pt=t,t=n)):(pt=t,t=n),t}(),t===n&&(t=function(){var t,a,l,i,o,r,c,h,s +return t=pt,123===e.charCodeAt(pt)?(a=S,pt++):(a=n,0===zt&&Lt(F)),a!==n&&Zt()!==n&&(l=Jt())!==n&&Zt()!==n?(44===e.charCodeAt(pt)?(i=te,pt++):(i=n,0===zt&&Lt(ae)),i!==n&&Zt()!==n?(e.substr(pt,4)===me?(o=me,pt+=4):(o=n,0===zt&&Lt(ye)),o===n&&(e.substr(pt,4)===ge?(o=ge,pt+=4):(o=n,0===zt&&Lt(be))),o!==n&&Zt()!==n?(r=pt,44===e.charCodeAt(pt)?(c=te,pt++):(c=n,0===zt&&Lt(ae)),c!==n&&(h=Zt())!==n?(s=function(){var t,a,l +return t=pt,e.substr(pt,2)===W?(a=W,pt+=2):(a=n,0===zt&&Lt(X)),a!==n?(l=function(){var t,a,l,i +if(t=pt,a=pt,l=[],(i=Rt())===n&&(i=jt()),i!==n)for(;i!==n;)l.push(i),(i=Rt())===n&&(i=jt()) +else l=n +return(a=l!==n?e.substring(a,pt):l)!==n&&(mt=t,a=ve(a)),a}(),l!==n?(mt=t,t=a=J(l)):(pt=t,t=n)):(pt=t,t=n),t===n&&(t=pt,mt=pt,(a=(a=pe())?void 0:n)!==n&&(l=Dt())!==n?(mt=t,t=a=ee(l)):(pt=t,t=n)),t}(),s!==n?r=c=[c,h,s]:(pt=r,r=n)):(pt=r,r=n),r===n&&(r=null),r!==n&&(c=Zt())!==n?(125===e.charCodeAt(pt)?(h=O,pt++):(h=n,0===zt&&Lt(T)),h!==n?(mt=t,t=a=oe(l,o,r)):(pt=t,t=n)):(pt=t,t=n)):(pt=t,t=n)):(pt=t,t=n)):(pt=t,t=n),t}()),t}(),t===n&&(t=function(){var t,a,l,i,o,r,c,h,s,d,u +if(t=pt,123===e.charCodeAt(pt)?(a=S,pt++):(a=n,0===zt&&Lt(F)),a!==n)if(Zt()!==n)if((l=Jt())!==n)if(Zt()!==n)if(44===e.charCodeAt(pt)?(i=te,pt++):(i=n,0===zt&&Lt(ae)),i!==n)if(Zt()!==n)if(e.substr(pt,6)===ze?(o=ze,pt+=6):(o=n,0===zt&&Lt(Me)),o===n&&(e.substr(pt,13)===Ae?(o=Ae,pt+=13):(o=n,0===zt&&Lt(we))),o!==n)if(Zt()!==n)if(44===e.charCodeAt(pt)?(r=te,pt++):(r=n,0===zt&&Lt(ae)),r!==n)if(Zt()!==n)if(c=pt,e.substr(pt,7)===xe?(h=xe,pt+=7):(h=n,0===zt&&Lt(He)),h!==n&&(s=Zt())!==n&&(d=Yt())!==n?c=h=[h,s,d]:(pt=c,c=n),c===n&&(c=null),c!==n)if((h=Zt())!==n){if(s=[],(d=Gt())!==n)for(;d!==n;)s.push(d),d=Gt() +else s=n +s!==n&&(d=Zt())!==n?(125===e.charCodeAt(pt)?(u=O,pt++):(u=n,0===zt&&Lt(T)),u!==n?(mt=t,t=a=Ve(l,o,c,s)):(pt=t,t=n)):(pt=t,t=n)}else pt=t,t=n +else pt=t,t=n +else pt=t,t=n +else pt=t,t=n +else pt=t,t=n +else pt=t,t=n +else pt=t,t=n +else pt=t,t=n +else pt=t,t=n +else pt=t,t=n +else pt=t,t=n +else pt=t,t=n +return t}())===n&&(t=function(){var t,a,l,i,o,r,c,h,s +if(t=pt,123===e.charCodeAt(pt)?(a=S,pt++):(a=n,0===zt&&Lt(F)),a!==n)if(Zt()!==n)if((l=Jt())!==n)if(Zt()!==n)if(44===e.charCodeAt(pt)?(i=te,pt++):(i=n,0===zt&&Lt(ae)),i!==n)if(Zt()!==n)if(e.substr(pt,6)===_e?(o=_e,pt+=6):(o=n,0===zt&&Lt(Be)),o!==n)if(Zt()!==n)if(44===e.charCodeAt(pt)?(r=te,pt++):(r=n,0===zt&&Lt(ae)),r!==n)if(Zt()!==n){if(c=[],(h=It())!==n)for(;h!==n;)c.push(h),h=It() +else c=n +c!==n&&(h=Zt())!==n?(125===e.charCodeAt(pt)?(s=O,pt++):(s=n,0===zt&&Lt(T)),s!==n?(mt=t,t=a=Le(l,c)):(pt=t,t=n)):(pt=t,t=n)}else pt=t,t=n +else pt=t,t=n +else pt=t,t=n +else pt=t,t=n +else pt=t,t=n +else pt=t,t=n +else pt=t,t=n +else pt=t,t=n +else pt=t,t=n +else pt=t,t=n +return t}())===n&&(t=function(){var t,a +return t=pt,35===e.charCodeAt(pt)?(a=y,pt++):(a=n,0===zt&&Lt(g)),a!==n&&(mt=t,a=z()),a}())),t}function Dt(){var t,a,l,i +if(t=pt,mt=pt,(a=(a=d())?void 0:n)!==n){if(l=[],(i=Kt())===n&&(i=Wt())===n&&(i=Xt())===n&&(60===e.charCodeAt(pt)?(i=u,pt++):(i=n,0===zt&&Lt(f))),i!==n)for(;i!==n;)l.push(i),(i=Kt())===n&&(i=Wt())===n&&(i=Xt())===n&&(60===e.charCodeAt(pt)?(i=u,pt++):(i=n,0===zt&&Lt(f))) +else l=n +l!==n?(mt=t,t=a=v(l)):(pt=t,t=n)}else pt=t,t=n +if(t===n){if(t=pt,a=[],(l=Kt())===n&&(l=Wt())===n&&(l=Xt())===n&&(l=St()),l!==n)for(;l!==n;)a.push(l),(l=Kt())===n&&(l=Wt())===n&&(l=Xt())===n&&(l=St()) +else a=n +a!==n&&(mt=t,a=v(a)),t=a}return t}function St(){var t,a,l +return t=pt,a=pt,zt++,(l=Ot())===n&&(l=Tt())===n&&(l=Ft()),zt--,l===n?a=void 0:(pt=a,a=n),a!==n?(60===e.charCodeAt(pt)?(l=u,pt++):(l=n,0===zt&&Lt(f)),l!==n?(mt=t,t=a=p()):(pt=t,t=n)):(pt=t,t=n),t}function Ft(){var t,a,l,i,o,r +return t=pt,a=pt,60===e.charCodeAt(pt)?(l=u,pt++):(l=n,0===zt&&Lt(f)),l!==n&&(i=Qt())!==n&&(o=Zt())!==n?(e.substr(pt,2)===w?(r=w,pt+=2):(r=n,0===zt&&Lt(x)),r!==n?a=l=[l,i,o,r]:(pt=a,a=n)):(pt=a,a=n),a!==n&&(mt=t,a=H(a)),a}function Ot(){var t,a,l,i +return t=pt,60===e.charCodeAt(pt)?(a=u,pt++):(a=n,0===zt&&Lt(f)),a!==n&&(l=Qt())!==n?(62===e.charCodeAt(pt)?(i=V,pt++):(i=n,0===zt&&Lt(_)),i!==n?(mt=t,t=a=C(l)):(pt=t,t=n)):(pt=t,t=n),t}function Tt(){var t,a,l,i +return t=pt,e.substr(pt,2)===E?(a=E,pt+=2):(a=n,0===zt&&Lt(k)),a!==n&&(l=Qt())!==n?(62===e.charCodeAt(pt)?(i=V,pt++):(i=n,0===zt&&Lt(_)),i!==n?(mt=t,t=a=C(l)):(pt=t,t=n)):(pt=t,t=n),t}function Pt(){var t,a,l,i,o +if(zt++,t=pt,a=[],l=pt,i=pt,zt++,(o=$t())===n&&(U.test(e.charAt(pt))?(o=e.charAt(pt),pt++):(o=n,0===zt&&Lt(R))),zt--,o===n?i=void 0:(pt=i,i=n),i!==n?(e.length>pt?(o=e.charAt(pt),pt++):(o=n,0===zt&&Lt(j)),o!==n?l=i=[i,o]:(pt=l,l=n)):(pt=l,l=n),l!==n)for(;l!==n;)a.push(l),l=pt,i=pt,zt++,(o=$t())===n&&(U.test(e.charAt(pt))?(o=e.charAt(pt),pt++):(o=n,0===zt&&Lt(R))),zt--,o===n?i=void 0:(pt=i,i=n),i!==n?(e.length>pt?(o=e.charAt(pt),pt++):(o=n,0===zt&&Lt(j)),o!==n?l=i=[i,o]:(pt=l,l=n)):(pt=l,l=n) +else a=n +return t=a!==n?e.substring(t,pt):a,zt--,t===n&&(a=n,0===zt&&Lt(N)),t}function Nt(){var t,a,l +return zt++,t=pt,47===e.charCodeAt(pt)?(a=G,pt++):(a=n,0===zt&&Lt($)),a!==n&&(l=Pt())!==n?(mt=t,t=a=q(l)):(pt=t,t=n),zt--,t===n&&(a=n,0===zt&&Lt(I)),t}function Ut(){var e,t,a,l +if(zt++,e=pt,Zt()!==n)if((t=Pt())!==n){for(a=[],l=Nt();l!==n;)a.push(l),l=Nt() +a!==n?(mt=e,e=Y(t,a)):(pt=e,e=n)}else pt=e,e=n +else pt=e,e=n +return zt--,e===n&&0===zt&&Lt(Z),e}function Rt(){var t,a,l,i +if(t=pt,39===e.charCodeAt(pt)?(a=ne,pt++):(a=n,0===zt&&Lt(re)),a!==n){if(l=[],(i=Kt())===n&&(ce.test(e.charAt(pt))?(i=e.charAt(pt),pt++):(i=n,0===zt&&Lt(he))),i!==n)for(;i!==n;)l.push(i),(i=Kt())===n&&(ce.test(e.charAt(pt))?(i=e.charAt(pt),pt++):(i=n,0===zt&&Lt(he))) +else l=n +l!==n?(39===e.charCodeAt(pt)?(i=ne,pt++):(i=n,0===zt&&Lt(re)),i!==n?t=a=[a,l,i]:(pt=t,t=n)):(pt=t,t=n)}else pt=t,t=n +if(t===n)if(t=[],(a=Kt())===n&&(se.test(e.charAt(pt))?(a=e.charAt(pt),pt++):(a=n,0===zt&&Lt(de))),a!==n)for(;a!==n;)t.push(a),(a=Kt())===n&&(se.test(e.charAt(pt))?(a=e.charAt(pt),pt++):(a=n,0===zt&&Lt(de))) +else t=n +return t}function jt(){var t,a +if(t=[],ue.test(e.charAt(pt))?(a=e.charAt(pt),pt++):(a=n,0===zt&&Lt(fe)),a!==n)for(;a!==n;)t.push(a),ue.test(e.charAt(pt))?(a=e.charAt(pt),pt++):(a=n,0===zt&&Lt(fe)) +else t=n +return t}function It(){var t,a,l,i,o +return t=pt,Zt()!==n&&(a=ta())!==n&&Zt()!==n?(123===e.charCodeAt(pt)?(l=S,pt++):(l=n,0===zt&&Lt(F)),l!==n?(mt=pt,(ke(a)?void 0:n)!==n&&(i=Et())!==n?(125===e.charCodeAt(pt)?(o=O,pt++):(o=n,0===zt&&Lt(T)),o!==n?(mt=t,t=De(a,i)):(pt=t,t=n)):(pt=t,t=n)):(pt=t,t=n)):(pt=t,t=n),t}function Gt(){var t,a,l,i,o +return t=pt,Zt()!==n?(a=function(){var t,a,l,i +return t=pt,a=pt,61===e.charCodeAt(pt)?(l=Ce,pt++):(l=n,0===zt&&Lt(Ee)),l!==n&&(i=Yt())!==n?a=l=[l,i]:(pt=a,a=n),(t=a!==n?e.substring(t,pt):a)===n&&(t=ta()),t}(),a!==n&&Zt()!==n?(123===e.charCodeAt(pt)?(l=S,pt++):(l=n,0===zt&&Lt(F)),l!==n?(mt=pt,(Se(a)?void 0:n)!==n&&(i=Et())!==n?(125===e.charCodeAt(pt)?(o=O,pt++):(o=n,0===zt&&Lt(T)),o!==n?(mt=t,t=Fe(a,i)):(pt=t,t=n)):(pt=t,t=n)):(pt=t,t=n)):(pt=t,t=n)):(pt=t,t=n),t}function $t(){var t +return zt++,Te.test(e.charAt(pt))?(t=e.charAt(pt),pt++):(t=n,0===zt&&Lt(Pe)),zt--,t===n&&0===zt&&Lt(Oe),t}function qt(){var t +return zt++,Ue.test(e.charAt(pt))?(t=e.charAt(pt),pt++):(t=n,0===zt&&Lt(Re)),zt--,t===n&&0===zt&&Lt(Ne),t}function Zt(){var t,a,l +for(zt++,t=pt,a=[],l=$t();l!==n;)a.push(l),l=$t() +return t=a!==n?e.substring(t,pt):a,zt--,t===n&&(a=n,0===zt&&Lt(je)),t}function Yt(){var t,a,l +return zt++,t=pt,45===e.charCodeAt(pt)?(a=Ge,pt++):(a=n,0===zt&&Lt($e)),a===n&&(a=null),a!==n&&(l=ea())!==n?(mt=t,t=a=qe(a,l)):(pt=t,t=n),zt--,t===n&&(a=n,0===zt&&Lt(Ie)),t}function Kt(){var t,a +return zt++,t=pt,e.substr(pt,2)===Ye?(a=Ye,pt+=2):(a=n,0===zt&&Lt(Ke)),a!==n&&(mt=t,a=We()),zt--,(t=a)===n&&(a=n,0===zt&&Lt(Ze)),t}function Wt(){var t,a,l,i,o,r +if(t=pt,39===e.charCodeAt(pt)?(a=ne,pt++):(a=n,0===zt&&Lt(re)),a!==n)if(l=function(){var t,a,l,i +return t=pt,a=pt,e.length>pt?(l=e.charAt(pt),pt++):(l=n,0===zt&&Lt(j)),l!==n?(mt=pt,(i=(i=tt(l))?void 0:n)!==n?a=l=[l,i]:(pt=a,a=n)):(pt=a,a=n),a!==n?e.substring(t,pt):a}(),l!==n){for(i=pt,o=[],e.substr(pt,2)===Ye?(r=Ye,pt+=2):(r=n,0===zt&&Lt(Ke)),r===n&&(ce.test(e.charAt(pt))?(r=e.charAt(pt),pt++):(r=n,0===zt&&Lt(he)));r!==n;)o.push(r),e.substr(pt,2)===Ye?(r=Ye,pt+=2):(r=n,0===zt&&Lt(Ke)),r===n&&(ce.test(e.charAt(pt))?(r=e.charAt(pt),pt++):(r=n,0===zt&&Lt(he)));(i=o!==n?e.substring(i,pt):o)!==n?(39===e.charCodeAt(pt)?(o=ne,pt++):(o=n,0===zt&&Lt(re)),o===n&&(o=null),o!==n?(mt=t,t=a=Xe(l,i)):(pt=t,t=n)):(pt=t,t=n)}else pt=t,t=n +else pt=t,t=n +return t}function Xt(){var t,a,l,i +return t=pt,a=pt,e.length>pt?(l=e.charAt(pt),pt++):(l=n,0===zt&&Lt(j)),l!==n?(mt=pt,(i=(i=Je(l))?void 0:n)!==n?a=l=[l,i]:(pt=a,a=n)):(pt=a,a=n),a===n&&(10===e.charCodeAt(pt)?(a=Qe,pt++):(a=n,0===zt&&Lt(et))),a!==n?e.substring(t,pt):a}function Jt(){var t,a +return zt++,t=pt,(a=ea())===n&&(a=ta()),t=a!==n?e.substring(t,pt):a,zt--,t===n&&(a=n,0===zt&&Lt(at)),t}function Qt(){var t,a +return zt++,t=pt,(a=ea())===n&&(a=function(){var t,a,l,i,o +if(zt++,t=pt,a=[],45===e.charCodeAt(pt)?(l=Ge,pt++):(l=n,0===zt&&Lt($e)),l===n&&(l=pt,i=pt,zt++,(o=$t())===n&&(o=qt()),zt--,o===n?i=void 0:(pt=i,i=n),i!==n?(e.length>pt?(o=e.charAt(pt),pt++):(o=n,0===zt&&Lt(j)),o!==n?l=i=[i,o]:(pt=l,l=n)):(pt=l,l=n)),l!==n)for(;l!==n;)a.push(l),45===e.charCodeAt(pt)?(l=Ge,pt++):(l=n,0===zt&&Lt($e)),l===n&&(l=pt,i=pt,zt++,(o=$t())===n&&(o=qt()),zt--,o===n?i=void 0:(pt=i,i=n),i!==n?(e.length>pt?(o=e.charAt(pt),pt++):(o=n,0===zt&&Lt(j)),o!==n?l=i=[i,o]:(pt=l,l=n)):(pt=l,l=n)) +else a=n +return t=a!==n?e.substring(t,pt):a,zt--,t===n&&(a=n,0===zt&&Lt(vt)),t}()),t=a!==n?e.substring(t,pt):a,zt--,t===n&&(a=n,0===zt&&Lt(lt)),t}function ea(){var t,a,l,i,o +if(zt++,t=pt,48===e.charCodeAt(pt)?(a=ot,pt++):(a=n,0===zt&&Lt(nt)),a!==n&&(mt=t,a=rt()),(t=a)===n){if(t=pt,a=pt,ct.test(e.charAt(pt))?(l=e.charAt(pt),pt++):(l=n,0===zt&&Lt(ht)),l!==n){for(i=[],st.test(e.charAt(pt))?(o=e.charAt(pt),pt++):(o=n,0===zt&&Lt(dt));o!==n;)i.push(o),st.test(e.charAt(pt))?(o=e.charAt(pt),pt++):(o=n,0===zt&&Lt(dt)) +i!==n?a=l=[l,i]:(pt=a,a=n)}else pt=a,a=n +a!==n&&(mt=t,a=ut(a)),t=a}return zt--,t===n&&(a=n,0===zt&&Lt(it)),t}function ta(){var t,a,l,i,o +if(zt++,t=pt,a=[],l=pt,i=pt,zt++,(o=$t())===n&&(o=qt()),zt--,o===n?i=void 0:(pt=i,i=n),i!==n?(e.length>pt?(o=e.charAt(pt),pt++):(o=n,0===zt&&Lt(j)),o!==n?l=i=[i,o]:(pt=l,l=n)):(pt=l,l=n),l!==n)for(;l!==n;)a.push(l),l=pt,i=pt,zt++,(o=$t())===n&&(o=qt()),zt--,o===n?i=void 0:(pt=i,i=n),i!==n?(e.length>pt?(o=e.charAt(pt),pt++):(o=n,0===zt&&Lt(j)),o!==n?l=i=[i,o]:(pt=l,l=n)):(pt=l,l=n) +else a=n +return t=a!==n?e.substring(t,pt):a,zt--,t===n&&(a=n,0===zt&&Lt(ft)),t}var aa=["root"] +function la(){return"plural"===aa[aa.length-1]}function ia(){return t&&t.captureLocation?{location:At()}:{}}var oa,na,ra,ca=t&&t.ignoreTag,ha=t&&t.shouldParseSkeleton +if((a=c())!==n&&pt===e.length)return a +throw a!==n&&pt{"use strict" +a.r(t),a.d(t,{ErrorCode:()=>fe,FormatError:()=>ye,IntlMessageFormat:()=>xe,InvalidValueError:()=>ge,InvalidValueTypeError:()=>be,MissingValueError:()=>ze,PART_TYPE:()=>me,default:()=>He,formatToParts:()=>Ae,isFormatXMLElementFn:()=>Me}) +var l,i,o,n=a(2985) +function r(e){return e.type===i.literal}function c(e){return e.type===i.argument}function h(e){return e.type===i.number}function s(e){return e.type===i.date}function d(e){return e.type===i.time}function u(e){return e.type===i.select}function f(e){return e.type===i.plural}function v(e){return e.type===i.pound}function p(e){return e.type===i.tag}function m(e){return!(!e||"object"!=typeof e||e.type!==o.number)}function y(e){return!(!e||"object"!=typeof e||e.type!==o.dateTime)}!function(e){e[e.EXPECT_ARGUMENT_CLOSING_BRACE=1]="EXPECT_ARGUMENT_CLOSING_BRACE",e[e.EMPTY_ARGUMENT=2]="EMPTY_ARGUMENT",e[e.MALFORMED_ARGUMENT=3]="MALFORMED_ARGUMENT",e[e.EXPECT_ARGUMENT_TYPE=4]="EXPECT_ARGUMENT_TYPE",e[e.INVALID_ARGUMENT_TYPE=5]="INVALID_ARGUMENT_TYPE",e[e.EXPECT_ARGUMENT_STYLE=6]="EXPECT_ARGUMENT_STYLE",e[e.INVALID_NUMBER_SKELETON=7]="INVALID_NUMBER_SKELETON",e[e.INVALID_DATE_TIME_SKELETON=8]="INVALID_DATE_TIME_SKELETON",e[e.EXPECT_NUMBER_SKELETON=9]="EXPECT_NUMBER_SKELETON",e[e.EXPECT_DATE_TIME_SKELETON=10]="EXPECT_DATE_TIME_SKELETON",e[e.UNCLOSED_QUOTE_IN_ARGUMENT_STYLE=11]="UNCLOSED_QUOTE_IN_ARGUMENT_STYLE",e[e.EXPECT_SELECT_ARGUMENT_OPTIONS=12]="EXPECT_SELECT_ARGUMENT_OPTIONS",e[e.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE=13]="EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE",e[e.INVALID_PLURAL_ARGUMENT_OFFSET_VALUE=14]="INVALID_PLURAL_ARGUMENT_OFFSET_VALUE",e[e.EXPECT_SELECT_ARGUMENT_SELECTOR=15]="EXPECT_SELECT_ARGUMENT_SELECTOR",e[e.EXPECT_PLURAL_ARGUMENT_SELECTOR=16]="EXPECT_PLURAL_ARGUMENT_SELECTOR",e[e.EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT=17]="EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT",e[e.EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT=18]="EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT",e[e.INVALID_PLURAL_ARGUMENT_SELECTOR=19]="INVALID_PLURAL_ARGUMENT_SELECTOR",e[e.DUPLICATE_PLURAL_ARGUMENT_SELECTOR=20]="DUPLICATE_PLURAL_ARGUMENT_SELECTOR",e[e.DUPLICATE_SELECT_ARGUMENT_SELECTOR=21]="DUPLICATE_SELECT_ARGUMENT_SELECTOR",e[e.MISSING_OTHER_CLAUSE=22]="MISSING_OTHER_CLAUSE",e[e.INVALID_TAG=23]="INVALID_TAG",e[e.INVALID_TAG_NAME=25]="INVALID_TAG_NAME",e[e.UNMATCHED_CLOSING_TAG=26]="UNMATCHED_CLOSING_TAG",e[e.UNCLOSED_TAG=27]="UNCLOSED_TAG"}(l||(l={})),function(e){e[e.literal=0]="literal",e[e.argument=1]="argument",e[e.number=2]="number",e[e.date=3]="date",e[e.time=4]="time",e[e.select=5]="select",e[e.plural=6]="plural",e[e.pound=7]="pound",e[e.tag=8]="tag"}(i||(i={})),function(e){e[e.number=0]="number",e[e.dateTime=1]="dateTime"}(o||(o={})) +var g=/[ \xA0\u1680\u2000-\u200A\u202F\u205F\u3000]/,b=/(?:[Eec]{1,6}|G{1,5}|[Qq]{1,5}|(?:[yYur]+|U{1,5})|[ML]{1,5}|d{1,2}|D{1,3}|F{1}|[abB]{1,5}|[hkHK]{1,2}|w{1,2}|W{1}|m{1,2}|s{1,2}|[zZOvVxX]{1,4})(?=([^']*'[^']*')*[^']*$)/g +function z(e){var t={} +return e.replace(b,(function(e){var a=e.length +switch(e[0]){case"G":t.era=4===a?"long":5===a?"narrow":"short" +break +case"y":t.year=2===a?"2-digit":"numeric" +break +case"Y":case"u":case"U":case"r":throw new RangeError("`Y/u/U/r` (year) patterns are not supported, use `y` instead") +case"q":case"Q":throw new RangeError("`q/Q` (quarter) patterns are not supported") +case"M":case"L":t.month=["numeric","2-digit","short","long","narrow"][a-1] +break +case"w":case"W":throw new RangeError("`w/W` (week) patterns are not supported") +case"d":t.day=["numeric","2-digit"][a-1] +break +case"D":case"F":case"g":throw new RangeError("`D/F/g` (day) patterns are not supported, use `d` instead") +case"E":t.weekday=4===a?"short":5===a?"narrow":"short" +break +case"e":if(a<4)throw new RangeError("`e..eee` (weekday) patterns are not supported") +t.weekday=["short","long","narrow","short"][a-4] +break +case"c":if(a<4)throw new RangeError("`c..ccc` (weekday) patterns are not supported") +t.weekday=["short","long","narrow","short"][a-4] +break +case"a":t.hour12=!0 +break +case"b":case"B":throw new RangeError("`b/B` (period) patterns are not supported, use `a` instead") +case"h":t.hourCycle="h12",t.hour=["numeric","2-digit"][a-1] +break +case"H":t.hourCycle="h23",t.hour=["numeric","2-digit"][a-1] +break +case"K":t.hourCycle="h11",t.hour=["numeric","2-digit"][a-1] +break +case"k":t.hourCycle="h24",t.hour=["numeric","2-digit"][a-1] +break +case"j":case"J":case"C":throw new RangeError("`j/J/C` (hour) patterns are not supported, use `h/H/K/k` instead") +case"m":t.minute=["numeric","2-digit"][a-1] +break +case"s":t.second=["numeric","2-digit"][a-1] +break +case"S":case"A":throw new RangeError("`S/A` (second) patterns are not supported, use `s` instead") +case"z":t.timeZoneName=a<4?"short":"long" +break +case"Z":case"O":case"v":case"V":case"X":case"x":throw new RangeError("`Z/O/v/V/X/x` (timeZone) patterns are not supported, use `z` instead")}return""})),t}var M=/[\t-\r \x85\u200E\u200F\u2028\u2029]/i,A=/^\.(?:(0+)(\*)?|(#+)|(0+)(#+))$/g,w=/^(@+)?(\+|#+)?[rs]?$/g,x=/(\*)(0+)|(#+)(0+)|(0+)/g,H=/^(0+)$/ +function V(e){var t={} +return"r"===e[e.length-1]?t.roundingPriority="morePrecision":"s"===e[e.length-1]&&(t.roundingPriority="lessPrecision"),e.replace(w,(function(e,a,l){return"string"!=typeof l?(t.minimumSignificantDigits=a.length,t.maximumSignificantDigits=a.length):"+"===l?t.minimumSignificantDigits=a.length:"#"===a[0]?t.maximumSignificantDigits=a.length:(t.minimumSignificantDigits=a.length,t.maximumSignificantDigits=a.length+("string"==typeof l?l.length:0)),""})),t}function _(e){switch(e){case"sign-auto":return{signDisplay:"auto"} +case"sign-accounting":case"()":return{currencySign:"accounting"} +case"sign-always":case"+!":return{signDisplay:"always"} +case"sign-accounting-always":case"()!":return{signDisplay:"always",currencySign:"accounting"} +case"sign-except-zero":case"+?":return{signDisplay:"exceptZero"} +case"sign-accounting-except-zero":case"()?":return{signDisplay:"exceptZero",currencySign:"accounting"} +case"sign-never":case"+_":return{signDisplay:"never"}}}function B(e){var t +if("E"===e[0]&&"E"===e[1]?(t={notation:"engineering"},e=e.slice(2)):"E"===e[0]&&(t={notation:"scientific"},e=e.slice(1)),t){var a=e.slice(0,2) +if("+!"===a?(t.signDisplay="always",e=e.slice(2)):"+?"===a&&(t.signDisplay="exceptZero",e=e.slice(2)),!H.test(e))throw new Error("Malformed concise eng/scientific notation") +t.minimumIntegerDigits=e.length}return t}function L(e){return _(e)||{}}function C(e){for(var t={},a=0,l=e;a1)throw new RangeError("integer-width stems only accept a single optional option") +i.options[0].replace(x,(function(e,a,l,i,o,n){if(a)t.minimumIntegerDigits=l.length +else{if(i&&o)throw new Error("We currently do not support maximum integer digits") +if(n)throw new Error("We currently do not support exact integer digits")}return""})) +continue}if(H.test(i.stem))t.minimumIntegerDigits=i.stem.length +else if(A.test(i.stem)){if(i.options.length>1)throw new RangeError("Fraction-precision stems only accept a single optional option") +i.stem.replace(A,(function(e,a,l,i,o,n){return"*"===l?t.minimumFractionDigits=a.length:i&&"#"===i[0]?t.maximumFractionDigits=i.length:o&&n?(t.minimumFractionDigits=o.length,t.maximumFractionDigits=o.length+n.length):(t.minimumFractionDigits=a.length,t.maximumFractionDigits=a.length),""})) +var o=i.options[0] +"w"===o?t=(0,n.pi)((0,n.pi)({},t),{trailingZeroDisplay:"stripIfInteger"}):o&&(t=(0,n.pi)((0,n.pi)({},t),V(o)))}else if(w.test(i.stem))t=(0,n.pi)((0,n.pi)({},t),V(i.stem)) +else{var r=_(i.stem) +r&&(t=(0,n.pi)((0,n.pi)({},t),r)) +var c=B(i.stem) +c&&(t=(0,n.pi)((0,n.pi)({},t),c))}}return t}var E,k={AX:["H"],BQ:["H"],CP:["H"],CZ:["H"],DK:["H"],FI:["H"],ID:["H"],IS:["H"],ML:["H"],NE:["H"],RU:["H"],SE:["H"],SJ:["H"],SK:["H"],AS:["h","H"],BT:["h","H"],DJ:["h","H"],ER:["h","H"],GH:["h","H"],IN:["h","H"],LS:["h","H"],PG:["h","H"],PW:["h","H"],SO:["h","H"],TO:["h","H"],VU:["h","H"],WS:["h","H"],"001":["H","h"],AL:["h","H","hB"],TD:["h","H","hB"],"ca-ES":["H","h","hB"],CF:["H","h","hB"],CM:["H","h","hB"],"fr-CA":["H","h","hB"],"gl-ES":["H","h","hB"],"it-CH":["H","h","hB"],"it-IT":["H","h","hB"],LU:["H","h","hB"],NP:["H","h","hB"],PF:["H","h","hB"],SC:["H","h","hB"],SM:["H","h","hB"],SN:["H","h","hB"],TF:["H","h","hB"],VA:["H","h","hB"],CY:["h","H","hb","hB"],GR:["h","H","hb","hB"],CO:["h","H","hB","hb"],DO:["h","H","hB","hb"],KP:["h","H","hB","hb"],KR:["h","H","hB","hb"],NA:["h","H","hB","hb"],PA:["h","H","hB","hb"],PR:["h","H","hB","hb"],VE:["h","H","hB","hb"],AC:["H","h","hb","hB"],AI:["H","h","hb","hB"],BW:["H","h","hb","hB"],BZ:["H","h","hb","hB"],CC:["H","h","hb","hB"],CK:["H","h","hb","hB"],CX:["H","h","hb","hB"],DG:["H","h","hb","hB"],FK:["H","h","hb","hB"],GB:["H","h","hb","hB"],GG:["H","h","hb","hB"],GI:["H","h","hb","hB"],IE:["H","h","hb","hB"],IM:["H","h","hb","hB"],IO:["H","h","hb","hB"],JE:["H","h","hb","hB"],LT:["H","h","hb","hB"],MK:["H","h","hb","hB"],MN:["H","h","hb","hB"],MS:["H","h","hb","hB"],NF:["H","h","hb","hB"],NG:["H","h","hb","hB"],NR:["H","h","hb","hB"],NU:["H","h","hb","hB"],PN:["H","h","hb","hB"],SH:["H","h","hb","hB"],SX:["H","h","hb","hB"],TA:["H","h","hb","hB"],ZA:["H","h","hb","hB"],"af-ZA":["H","h","hB","hb"],AR:["H","h","hB","hb"],CL:["H","h","hB","hb"],CR:["H","h","hB","hb"],CU:["H","h","hB","hb"],EA:["H","h","hB","hb"],"es-BO":["H","h","hB","hb"],"es-BR":["H","h","hB","hb"],"es-EC":["H","h","hB","hb"],"es-ES":["H","h","hB","hb"],"es-GQ":["H","h","hB","hb"],"es-PE":["H","h","hB","hb"],GT:["H","h","hB","hb"],HN:["H","h","hB","hb"],IC:["H","h","hB","hb"],KG:["H","h","hB","hb"],KM:["H","h","hB","hb"],LK:["H","h","hB","hb"],MA:["H","h","hB","hb"],MX:["H","h","hB","hb"],NI:["H","h","hB","hb"],PY:["H","h","hB","hb"],SV:["H","h","hB","hb"],UY:["H","h","hB","hb"],JP:["H","h","K"],AD:["H","hB"],AM:["H","hB"],AO:["H","hB"],AT:["H","hB"],AW:["H","hB"],BE:["H","hB"],BF:["H","hB"],BJ:["H","hB"],BL:["H","hB"],BR:["H","hB"],CG:["H","hB"],CI:["H","hB"],CV:["H","hB"],DE:["H","hB"],EE:["H","hB"],FR:["H","hB"],GA:["H","hB"],GF:["H","hB"],GN:["H","hB"],GP:["H","hB"],GW:["H","hB"],HR:["H","hB"],IL:["H","hB"],IT:["H","hB"],KZ:["H","hB"],MC:["H","hB"],MD:["H","hB"],MF:["H","hB"],MQ:["H","hB"],MZ:["H","hB"],NC:["H","hB"],NL:["H","hB"],PM:["H","hB"],PT:["H","hB"],RE:["H","hB"],RO:["H","hB"],SI:["H","hB"],SR:["H","hB"],ST:["H","hB"],TG:["H","hB"],TR:["H","hB"],WF:["H","hB"],YT:["H","hB"],BD:["h","hB","H"],PK:["h","hB","H"],AZ:["H","hB","h"],BA:["H","hB","h"],BG:["H","hB","h"],CH:["H","hB","h"],GE:["H","hB","h"],LI:["H","hB","h"],ME:["H","hB","h"],RS:["H","hB","h"],UA:["H","hB","h"],UZ:["H","hB","h"],XK:["H","hB","h"],AG:["h","hb","H","hB"],AU:["h","hb","H","hB"],BB:["h","hb","H","hB"],BM:["h","hb","H","hB"],BS:["h","hb","H","hB"],CA:["h","hb","H","hB"],DM:["h","hb","H","hB"],"en-001":["h","hb","H","hB"],FJ:["h","hb","H","hB"],FM:["h","hb","H","hB"],GD:["h","hb","H","hB"],GM:["h","hb","H","hB"],GU:["h","hb","H","hB"],GY:["h","hb","H","hB"],JM:["h","hb","H","hB"],KI:["h","hb","H","hB"],KN:["h","hb","H","hB"],KY:["h","hb","H","hB"],LC:["h","hb","H","hB"],LR:["h","hb","H","hB"],MH:["h","hb","H","hB"],MP:["h","hb","H","hB"],MW:["h","hb","H","hB"],NZ:["h","hb","H","hB"],SB:["h","hb","H","hB"],SG:["h","hb","H","hB"],SL:["h","hb","H","hB"],SS:["h","hb","H","hB"],SZ:["h","hb","H","hB"],TC:["h","hb","H","hB"],TT:["h","hb","H","hB"],UM:["h","hb","H","hB"],US:["h","hb","H","hB"],VC:["h","hb","H","hB"],VG:["h","hb","H","hB"],VI:["h","hb","H","hB"],ZM:["h","hb","H","hB"],BO:["H","hB","h","hb"],EC:["H","hB","h","hb"],ES:["H","hB","h","hb"],GQ:["H","hB","h","hb"],PE:["H","hB","h","hb"],AE:["h","hB","hb","H"],"ar-001":["h","hB","hb","H"],BH:["h","hB","hb","H"],DZ:["h","hB","hb","H"],EG:["h","hB","hb","H"],EH:["h","hB","hb","H"],HK:["h","hB","hb","H"],IQ:["h","hB","hb","H"],JO:["h","hB","hb","H"],KW:["h","hB","hb","H"],LB:["h","hB","hb","H"],LY:["h","hB","hb","H"],MO:["h","hB","hb","H"],MR:["h","hB","hb","H"],OM:["h","hB","hb","H"],PH:["h","hB","hb","H"],PS:["h","hB","hb","H"],QA:["h","hB","hb","H"],SA:["h","hB","hb","H"],SD:["h","hB","hb","H"],SY:["h","hB","hb","H"],TN:["h","hB","hb","H"],YE:["h","hB","hb","H"],AF:["H","hb","hB","h"],LA:["H","hb","hB","h"],CN:["H","hB","hb","h"],LV:["H","hB","hb","h"],TL:["H","hB","hb","h"],"zu-ZA":["H","hB","hb","h"],CD:["hB","H"],IR:["hB","H"],"hi-IN":["hB","h","H"],"kn-IN":["hB","h","H"],"ml-IN":["hB","h","H"],"te-IN":["hB","h","H"],KH:["hB","h","H","hb"],"ta-IN":["hB","h","hb","H"],BN:["hb","hB","h","H"],MY:["hb","hB","h","H"],ET:["hB","hb","h","H"],"gu-IN":["hB","hb","h","H"],"mr-IN":["hB","hb","h","H"],"pa-IN":["hB","hb","h","H"],TW:["hB","hb","h","H"],KE:["hB","hb","H","h"],MM:["hB","hb","H","h"],TZ:["hB","hb","H","h"],UG:["hB","hb","H","h"]} +function D(e){var t=e.hourCycle +if(void 0===t&&e.hourCycles&&e.hourCycles.length&&(t=e.hourCycles[0]),t)switch(t){case"h24":return"k" +case"h23":return"H" +case"h12":return"h" +case"h11":return"K" +default:throw new Error("Invalid hourCycle")}var a,l=e.language +return"root"!==l&&(a=e.maximize().region),(k[a||""]||k[l||""]||k["".concat(l,"-001")]||k["001"])[0]}var S=new RegExp("^".concat(g.source,"*")),F=new RegExp("".concat(g.source,"*$")) +function O(e,t){return{start:e,end:t}}var T=!!String.prototype.startsWith,P=!!String.fromCodePoint,N=!!Object.fromEntries,U=!!String.prototype.codePointAt,R=!!String.prototype.trimStart,j=!!String.prototype.trimEnd,I=Number.isSafeInteger?Number.isSafeInteger:function(e){return"number"==typeof e&&isFinite(e)&&Math.floor(e)===e&&Math.abs(e)<=9007199254740991},G=!0 +try{G="a"===(null===(E=J("([^\\p{White_Space}\\p{Pattern_Syntax}]*)","yu").exec("a"))||void 0===E?void 0:E[0])}catch(e){G=!1}var $,q=T?function(e,t,a){return e.startsWith(t,a)}:function(e,t,a){return e.slice(a,a+t.length)===t},Z=P?String.fromCodePoint:function(){for(var e=[],t=0;to;){if((a=e[o++])>1114111)throw RangeError(a+" is not a valid code point") +l+=a<65536?String.fromCharCode(a):String.fromCharCode(55296+((a-=65536)>>10),a%1024+56320)}return l},Y=N?Object.fromEntries:function(e){for(var t={},a=0,l=e;a=a)){var l,i=e.charCodeAt(t) +return i<55296||i>56319||t+1===a||(l=e.charCodeAt(t+1))<56320||l>57343?i:l-56320+(i-55296<<10)+65536}},W=R?function(e){return e.trimStart()}:function(e){return e.replace(S,"")},X=j?function(e){return e.trimEnd()}:function(e){return e.replace(F,"")} +function J(e,t){return new RegExp(e,t)}if(G){var Q=J("([^\\p{White_Space}\\p{Pattern_Syntax}]*)","yu") +$=function(e,t){var a +return Q.lastIndex=t,null!==(a=Q.exec(e)[1])&&void 0!==a?a:""}}else $=function(e,t){for(var a=[];;){var l=K(e,t) +if(void 0===l||ae(l)||le(l))break +a.push(l),t+=l>=65536?2:1}return Z.apply(void 0,a)} +var ee=function(){function e(e,t){void 0===t&&(t={}),this.message=e,this.position={offset:0,line:1,column:1},this.ignoreTag=!!t.ignoreTag,this.locale=t.locale,this.requiresOtherClause=!!t.requiresOtherClause,this.shouldParseSkeletons=!!t.shouldParseSkeletons}return e.prototype.parse=function(){if(0!==this.offset())throw Error("parser can only be used once") +return this.parseMessage(0,"",!1)},e.prototype.parseMessage=function(e,t,a){for(var o=[];!this.isEOF();){var n=this.char() +if(123===n){if((r=this.parseArgument(e,a)).err)return r +o.push(r.val)}else{if(125===n&&e>0)break +if(35!==n||"plural"!==t&&"selectordinal"!==t){if(60===n&&!this.ignoreTag&&47===this.peek()){if(a)break +return this.error(l.UNMATCHED_CLOSING_TAG,O(this.clonePosition(),this.clonePosition()))}if(60===n&&!this.ignoreTag&&te(this.peek()||0)){if((r=this.parseTag(e,t)).err)return r +o.push(r.val)}else{var r +if((r=this.parseLiteral(e,t)).err)return r +o.push(r.val)}}else{var c=this.clonePosition() +this.bump(),o.push({type:i.pound,location:O(c,this.clonePosition())})}}}return{val:o,err:null}},e.prototype.parseTag=function(e,t){var a=this.clonePosition() +this.bump() +var o=this.parseTagName() +if(this.bumpSpace(),this.bumpIf("/>"))return{val:{type:i.literal,value:"<".concat(o,"/>"),location:O(a,this.clonePosition())},err:null} +if(this.bumpIf(">")){var n=this.parseMessage(e+1,t,!0) +if(n.err)return n +var r=n.val,c=this.clonePosition() +if(this.bumpIf("")?{val:{type:i.tag,value:o,children:r,location:O(a,this.clonePosition())},err:null}:this.error(l.INVALID_TAG,O(c,this.clonePosition())))}return this.error(l.UNCLOSED_TAG,O(a,this.clonePosition()))}return this.error(l.INVALID_TAG,O(a,this.clonePosition()))},e.prototype.parseTagName=function(){var e,t=this.offset() +for(this.bump();!this.isEOF()&&(45===(e=this.char())||46===e||e>=48&&e<=57||95===e||e>=97&&e<=122||e>=65&&e<=90||183==e||e>=192&&e<=214||e>=216&&e<=246||e>=248&&e<=893||e>=895&&e<=8191||e>=8204&&e<=8205||e>=8255&&e<=8256||e>=8304&&e<=8591||e>=11264&&e<=12271||e>=12289&&e<=55295||e>=63744&&e<=64975||e>=65008&&e<=65533||e>=65536&&e<=983039);)this.bump() +return this.message.slice(t,this.offset())},e.prototype.parseLiteral=function(e,t){for(var a=this.clonePosition(),l="";;){var o=this.tryParseQuote(t) +if(o)l+=o +else{var n=this.tryParseUnquoted(e,t) +if(n)l+=n +else{var r=this.tryParseLeftAngleBracket() +if(!r)break +l+=r}}}var c=O(a,this.clonePosition()) +return{val:{type:i.literal,value:l,location:c},err:null}},e.prototype.tryParseLeftAngleBracket=function(){return this.isEOF()||60!==this.char()||!this.ignoreTag&&(te(e=this.peek()||0)||47===e)?null:(this.bump(),"<") +var e},e.prototype.tryParseQuote=function(e){if(this.isEOF()||39!==this.char())return null +switch(this.peek()){case 39:return this.bump(),this.bump(),"'" +case 123:case 60:case 62:case 125:break +case 35:if("plural"===e||"selectordinal"===e)break +return null +default:return null}this.bump() +var t=[this.char()] +for(this.bump();!this.isEOF();){var a=this.char() +if(39===a){if(39!==this.peek()){this.bump() +break}t.push(39),this.bump()}else t.push(a) +this.bump()}return Z.apply(void 0,t)},e.prototype.tryParseUnquoted=function(e,t){if(this.isEOF())return null +var a=this.char() +return 60===a||123===a||35===a&&("plural"===t||"selectordinal"===t)||125===a&&e>0?null:(this.bump(),Z(a))},e.prototype.parseArgument=function(e,t){var a=this.clonePosition() +if(this.bump(),this.bumpSpace(),this.isEOF())return this.error(l.EXPECT_ARGUMENT_CLOSING_BRACE,O(a,this.clonePosition())) +if(125===this.char())return this.bump(),this.error(l.EMPTY_ARGUMENT,O(a,this.clonePosition())) +var o=this.parseIdentifierIfPossible().value +if(!o)return this.error(l.MALFORMED_ARGUMENT,O(a,this.clonePosition())) +if(this.bumpSpace(),this.isEOF())return this.error(l.EXPECT_ARGUMENT_CLOSING_BRACE,O(a,this.clonePosition())) +switch(this.char()){case 125:return this.bump(),{val:{type:i.argument,value:o,location:O(a,this.clonePosition())},err:null} +case 44:return this.bump(),this.bumpSpace(),this.isEOF()?this.error(l.EXPECT_ARGUMENT_CLOSING_BRACE,O(a,this.clonePosition())):this.parseArgumentOptions(e,t,o,a) +default:return this.error(l.MALFORMED_ARGUMENT,O(a,this.clonePosition()))}},e.prototype.parseIdentifierIfPossible=function(){var e=this.clonePosition(),t=this.offset(),a=$(this.message,t),l=t+a.length +return this.bumpTo(l),{value:a,location:O(e,this.clonePosition())}},e.prototype.parseArgumentOptions=function(e,t,a,r){var c,h=this.clonePosition(),s=this.parseIdentifierIfPossible().value,d=this.clonePosition() +switch(s){case"":return this.error(l.EXPECT_ARGUMENT_TYPE,O(h,d)) +case"number":case"date":case"time":this.bumpSpace() +var u=null +if(this.bumpIf(",")){this.bumpSpace() +var f=this.clonePosition() +if((A=this.parseSimpleArgStyleIfPossible()).err)return A +if(0===(y=X(A.val)).length)return this.error(l.EXPECT_ARGUMENT_STYLE,O(this.clonePosition(),this.clonePosition())) +u={style:y,styleLocation:O(f,this.clonePosition())}}if((w=this.tryParseArgumentClose(r)).err)return w +var v=O(r,this.clonePosition()) +if(u&&q(null==u?void 0:u.style,"::",0)){var p=W(u.style.slice(2)) +if("number"===s)return(A=this.parseNumberSkeletonFromString(p,u.styleLocation)).err?A:{val:{type:i.number,value:a,location:v,style:A.val},err:null} +if(0===p.length)return this.error(l.EXPECT_DATE_TIME_SKELETON,v) +var m=p +this.locale&&(m=function(e,t){for(var a="",l=0;l>1),c=D(t) +for("H"!=c&&"k"!=c||(r=0);r-- >0;)a+="a" +for(;n-- >0;)a=c+a}else a+="J"===i?"H":i}return a}(p,this.locale)) +var y={type:o.dateTime,pattern:m,location:u.styleLocation,parsedOptions:this.shouldParseSkeletons?z(m):{}} +return{val:{type:"date"===s?i.date:i.time,value:a,location:v,style:y},err:null}}return{val:{type:"number"===s?i.number:"date"===s?i.date:i.time,value:a,location:v,style:null!==(c=null==u?void 0:u.style)&&void 0!==c?c:null},err:null} +case"plural":case"selectordinal":case"select":var g=this.clonePosition() +if(this.bumpSpace(),!this.bumpIf(","))return this.error(l.EXPECT_SELECT_ARGUMENT_OPTIONS,O(g,(0,n.pi)({},g))) +this.bumpSpace() +var b=this.parseIdentifierIfPossible(),M=0 +if("select"!==s&&"offset"===b.value){if(!this.bumpIf(":"))return this.error(l.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE,O(this.clonePosition(),this.clonePosition())) +var A +if(this.bumpSpace(),(A=this.tryParseDecimalInteger(l.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE,l.INVALID_PLURAL_ARGUMENT_OFFSET_VALUE)).err)return A +this.bumpSpace(),b=this.parseIdentifierIfPossible(),M=A.val}var w,x=this.tryParsePluralOrSelectOptions(e,s,t,b) +if(x.err)return x +if((w=this.tryParseArgumentClose(r)).err)return w +var H=O(r,this.clonePosition()) +return"select"===s?{val:{type:i.select,value:a,options:Y(x.val),location:H},err:null}:{val:{type:i.plural,value:a,options:Y(x.val),offset:M,pluralType:"plural"===s?"cardinal":"ordinal",location:H},err:null} +default:return this.error(l.INVALID_ARGUMENT_TYPE,O(h,d))}},e.prototype.tryParseArgumentClose=function(e){return this.isEOF()||125!==this.char()?this.error(l.EXPECT_ARGUMENT_CLOSING_BRACE,O(e,this.clonePosition())):(this.bump(),{val:!0,err:null})},e.prototype.parseSimpleArgStyleIfPossible=function(){for(var e=0,t=this.clonePosition();!this.isEOF();)switch(this.char()){case 39:this.bump() +var a=this.clonePosition() +if(!this.bumpUntil("'"))return this.error(l.UNCLOSED_QUOTE_IN_ARGUMENT_STYLE,O(a,this.clonePosition())) +this.bump() +break +case 123:e+=1,this.bump() +break +case 125:if(!(e>0))return{val:this.message.slice(t.offset,this.offset()),err:null} +e-=1 +break +default:this.bump()}return{val:this.message.slice(t.offset,this.offset()),err:null}},e.prototype.parseNumberSkeletonFromString=function(e,t){var a=[] +try{a=function(e){if(0===e.length)throw new Error("Number skeleton cannot be empty") +for(var t=[],a=0,l=e.split(M).filter((function(e){return e.length>0}));a=48&&n<=57))break +i=!0,o=10*o+(n-48),this.bump()}var r=O(l,this.clonePosition()) +return i?I(o*=a)?{val:o,err:null}:this.error(t,r):this.error(e,r)},e.prototype.offset=function(){return this.position.offset},e.prototype.isEOF=function(){return this.offset()===this.message.length},e.prototype.clonePosition=function(){return{offset:this.position.offset,line:this.position.line,column:this.position.column}},e.prototype.char=function(){var e=this.position.offset +if(e>=this.message.length)throw Error("out of bound") +var t=K(this.message,e) +if(void 0===t)throw Error("Offset ".concat(e," is at invalid UTF-16 code unit boundary")) +return t},e.prototype.error=function(e,t){return{val:null,err:{kind:e,message:this.message,location:t}}},e.prototype.bump=function(){if(!this.isEOF()){var e=this.char() +10===e?(this.position.line+=1,this.position.column=1,this.position.offset+=1):(this.position.column+=1,this.position.offset+=e<65536?1:2)}},e.prototype.bumpIf=function(e){if(q(this.message,e,this.offset())){for(var t=0;t=0?(this.bumpTo(a),!0):(this.bumpTo(this.message.length),!1)},e.prototype.bumpTo=function(e){if(this.offset()>e)throw Error("targetOffset ".concat(e," must be greater than or equal to the current offset ").concat(this.offset())) +for(e=Math.min(e,this.message.length);;){var t=this.offset() +if(t===e)break +if(t>e)throw Error("targetOffset ".concat(e," is at invalid UTF-16 code unit boundary")) +if(this.bump(),this.isEOF())break}},e.prototype.bumpSpace=function(){for(;!this.isEOF()&&ae(this.char());)this.bump()},e.prototype.peek=function(){if(this.isEOF())return null +var e=this.char(),t=this.offset(),a=this.message.charCodeAt(t+(e>=65536?2:1)) +return null!=a?a:null},e}() +function te(e){return e>=97&&e<=122||e>=65&&e<=90}function ae(e){return e>=9&&e<=13||32===e||133===e||e>=8206&&e<=8207||8232===e||8233===e}function le(e){return e>=33&&e<=35||36===e||e>=37&&e<=39||40===e||41===e||42===e||43===e||44===e||45===e||e>=46&&e<=47||e>=58&&e<=59||e>=60&&e<=62||e>=63&&e<=64||91===e||92===e||93===e||94===e||96===e||123===e||124===e||125===e||126===e||161===e||e>=162&&e<=165||166===e||167===e||169===e||171===e||172===e||174===e||176===e||177===e||182===e||187===e||191===e||215===e||247===e||e>=8208&&e<=8213||e>=8214&&e<=8215||8216===e||8217===e||8218===e||e>=8219&&e<=8220||8221===e||8222===e||8223===e||e>=8224&&e<=8231||e>=8240&&e<=8248||8249===e||8250===e||e>=8251&&e<=8254||e>=8257&&e<=8259||8260===e||8261===e||8262===e||e>=8263&&e<=8273||8274===e||8275===e||e>=8277&&e<=8286||e>=8592&&e<=8596||e>=8597&&e<=8601||e>=8602&&e<=8603||e>=8604&&e<=8607||8608===e||e>=8609&&e<=8610||8611===e||e>=8612&&e<=8613||8614===e||e>=8615&&e<=8621||8622===e||e>=8623&&e<=8653||e>=8654&&e<=8655||e>=8656&&e<=8657||8658===e||8659===e||8660===e||e>=8661&&e<=8691||e>=8692&&e<=8959||e>=8960&&e<=8967||8968===e||8969===e||8970===e||8971===e||e>=8972&&e<=8991||e>=8992&&e<=8993||e>=8994&&e<=9e3||9001===e||9002===e||e>=9003&&e<=9083||9084===e||e>=9085&&e<=9114||e>=9115&&e<=9139||e>=9140&&e<=9179||e>=9180&&e<=9185||e>=9186&&e<=9254||e>=9255&&e<=9279||e>=9280&&e<=9290||e>=9291&&e<=9311||e>=9472&&e<=9654||9655===e||e>=9656&&e<=9664||9665===e||e>=9666&&e<=9719||e>=9720&&e<=9727||e>=9728&&e<=9838||9839===e||e>=9840&&e<=10087||10088===e||10089===e||10090===e||10091===e||10092===e||10093===e||10094===e||10095===e||10096===e||10097===e||10098===e||10099===e||10100===e||10101===e||e>=10132&&e<=10175||e>=10176&&e<=10180||10181===e||10182===e||e>=10183&&e<=10213||10214===e||10215===e||10216===e||10217===e||10218===e||10219===e||10220===e||10221===e||10222===e||10223===e||e>=10224&&e<=10239||e>=10240&&e<=10495||e>=10496&&e<=10626||10627===e||10628===e||10629===e||10630===e||10631===e||10632===e||10633===e||10634===e||10635===e||10636===e||10637===e||10638===e||10639===e||10640===e||10641===e||10642===e||10643===e||10644===e||10645===e||10646===e||10647===e||10648===e||e>=10649&&e<=10711||10712===e||10713===e||10714===e||10715===e||e>=10716&&e<=10747||10748===e||10749===e||e>=10750&&e<=11007||e>=11008&&e<=11055||e>=11056&&e<=11076||e>=11077&&e<=11078||e>=11079&&e<=11084||e>=11085&&e<=11123||e>=11124&&e<=11125||e>=11126&&e<=11157||11158===e||e>=11159&&e<=11263||e>=11776&&e<=11777||11778===e||11779===e||11780===e||11781===e||e>=11782&&e<=11784||11785===e||11786===e||11787===e||11788===e||11789===e||e>=11790&&e<=11798||11799===e||e>=11800&&e<=11801||11802===e||11803===e||11804===e||11805===e||e>=11806&&e<=11807||11808===e||11809===e||11810===e||11811===e||11812===e||11813===e||11814===e||11815===e||11816===e||11817===e||e>=11818&&e<=11822||11823===e||e>=11824&&e<=11833||e>=11834&&e<=11835||e>=11836&&e<=11839||11840===e||11841===e||11842===e||e>=11843&&e<=11855||e>=11856&&e<=11857||11858===e||e>=11859&&e<=11903||e>=12289&&e<=12291||12296===e||12297===e||12298===e||12299===e||12300===e||12301===e||12302===e||12303===e||12304===e||12305===e||e>=12306&&e<=12307||12308===e||12309===e||12310===e||12311===e||12312===e||12313===e||12314===e||12315===e||12316===e||12317===e||e>=12318&&e<=12319||12320===e||12336===e||64830===e||64831===e||e>=65093&&e<=65094}function ie(e){e.forEach((function(e){if(delete e.location,u(e)||f(e))for(var t in e.options)delete e.options[t].location,ie(e.options[t].value) +else h(e)&&m(e.style)||(s(e)||d(e))&&y(e.style)?delete e.style.location:p(e)&&ie(e.children)}))}function oe(e,t){void 0===t&&(t={}),t=(0,n.pi)({shouldParseSkeletons:!0,requiresOtherClause:!0},t) +var a=new ee(e,t).parse() +if(a.err){var i=SyntaxError(l[a.err.kind]) +throw i.location=a.err.location,i.originalMessage=a.err.message,i}return(null==t?void 0:t.captureLocation)||ie(a.val),a.val}function ne(e,t){var a=t&&t.cache?t.cache:ve,l=t&&t.serializer?t.serializer:de +return(t&&t.strategy?t.strategy:se)(e,{cache:a,serializer:l})}function re(e,t,a,l){var i,o=null==(i=l)||"number"==typeof i||"boolean"==typeof i?l:a(l),n=t.get(o) +return void 0===n&&(n=e.call(this,l),t.set(o,n)),n}function ce(e,t,a){var l=Array.prototype.slice.call(arguments,3),i=a(l),o=t.get(i) +return void 0===o&&(o=e.apply(this,l),t.set(i,o)),o}function he(e,t,a,l,i){return a.bind(t,e,l,i)}function se(e,t){return he(e,this,1===e.length?re:ce,t.cache.create(),t.serializer)}var de=function(){return JSON.stringify(arguments)} +function ue(){this.cache=Object.create(null)}ue.prototype.get=function(e){return this.cache[e]},ue.prototype.set=function(e,t){this.cache[e]=t} +var fe,ve={create:function(){return new ue}},pe={variadic:function(e,t){return he(e,this,ce,t.cache.create(),t.serializer)},monadic:function(e,t){return he(e,this,re,t.cache.create(),t.serializer)}} +!function(e){e.MISSING_VALUE="MISSING_VALUE",e.INVALID_VALUE="INVALID_VALUE",e.MISSING_INTL_API="MISSING_INTL_API"}(fe||(fe={})) +var me,ye=function(e){function t(t,a,l){var i=e.call(this,t)||this +return i.code=a,i.originalMessage=l,i}return(0,n.ZT)(t,e),t.prototype.toString=function(){return"[formatjs Error: ".concat(this.code,"] ").concat(this.message)},t}(Error),ge=function(e){function t(t,a,l,i){return e.call(this,'Invalid values for "'.concat(t,'": "').concat(a,'". Options are "').concat(Object.keys(l).join('", "'),'"'),fe.INVALID_VALUE,i)||this}return(0,n.ZT)(t,e),t}(ye),be=function(e){function t(t,a,l){return e.call(this,'Value for "'.concat(t,'" must be of type ').concat(a),fe.INVALID_VALUE,l)||this}return(0,n.ZT)(t,e),t}(ye),ze=function(e){function t(t,a){return e.call(this,'The intl string context variable "'.concat(t,'" was not provided to the string "').concat(a,'"'),fe.MISSING_VALUE,a)||this}return(0,n.ZT)(t,e),t}(ye) +function Me(e){return"function"==typeof e}function Ae(e,t,a,l,i,o,n){if(1===e.length&&r(e[0]))return[{type:me.literal,value:e[0].value}] +for(var g=[],b=0,z=e;b0?new Intl.Locale(t[0]):new Intl.Locale("string"==typeof e?e:e[0])},e.__parse=oe,e.formats={number:{integer:{maximumFractionDigits:0},currency:{style:"currency"},percent:{style:"percent"}},date:{short:{month:"numeric",day:"numeric",year:"2-digit"},medium:{month:"short",day:"numeric",year:"numeric"},long:{month:"long",day:"numeric",year:"numeric"},full:{weekday:"long",month:"long",day:"numeric",year:"numeric"}},time:{short:{hour:"numeric",minute:"numeric"},medium:{hour:"numeric",minute:"numeric",second:"numeric"},long:{hour:"numeric",minute:"numeric",second:"numeric",timeZoneName:"short"},full:{hour:"numeric",minute:"numeric",second:"numeric",timeZoneName:"short"}}},e}() +const He=xe},5709:(e,t,a)=>{var l=a(9958),i=a(2451) +function o(e){this.Container=e||Array,this.items=new Map,this.clear(),Object.defineProperty(this.items,"constructor",{value:o,enumerable:!1})}o.prototype.clear=function(){this.size=0,this.dimension=0,this.items.clear()},o.prototype.set=function(e,t){var a,l=this.items.get(e) +return l||(this.dimension++,l=new this.Container,this.items.set(e,l)),this.Container===Set?(a=l.size,l.add(t),a1?t:this,this.items.forEach((function(e,t){a=t,e.forEach(l)}))},o.prototype.forEachAssociation=function(e,t){t=arguments.length>1?t:this,this.items.forEach(e,t)},o.prototype.keys=function(){return this.items.keys()},o.prototype.values=function(){var e,t,a,i,o=this.items.values(),n=!1 +return this.Container===Set?new l((function a(){if(!n){if((t=o.next()).done)return{done:!0} +n=!0,e=t.value.values()}return(t=e.next()).done?(n=!1,a()):{done:!1,value:t.value}})):new l((function l(){if(!n){if((t=o.next()).done)return{done:!0} +n=!0,e=t.value,a=0,i=e.length}return a>=i?(n=!1,l()):{done:!1,value:e[a++]}}))},o.prototype.entries=function(){var e,t,a,i,o,n=this.items.entries(),r=!1 +return this.Container===Set?new l((function l(){if(!r){if((t=n.next()).done)return{done:!0} +r=!0,a=t.value[0],e=t.value[1].values()}return(t=e.next()).done?(r=!1,l()):{done:!1,value:[a,t.value]}})):new l((function l(){if(!r){if((t=n.next()).done)return{done:!0} +r=!0,a=t.value[0],e=t.value[1],i=0,o=e.length}return i>=o?(r=!1,l()):{done:!1,value:[a,e[i++]]}}))},o.prototype.containers=function(){return this.items.values()},o.prototype.associations=function(){return this.items.entries()},"undefined"!=typeof Symbol&&(o.prototype[Symbol.iterator]=o.prototype.entries),o.prototype.inspect=function(){return this.items},"undefined"!=typeof Symbol&&(o.prototype[Symbol.for("nodejs.util.inspect.custom")]=o.prototype.inspect),o.prototype.toJSON=function(){return this.items},o.from=function(e,t){var a=new o(t) +return i(e,(function(e,t){a.set(t,e)})),a},e.exports=o},2519:(e,t)=>{t.intersection=function(){if(arguments.length<2)throw new Error("mnemonist/Set.intersection: needs at least two arguments.") +var e,t,a=new Set,l=1/0,i=null,o=arguments.length +for(t=0;tt.size)return!1 +for(;!(a=l.next()).done;)if(!t.has(a.value))return!1 +return!0},t.isSuperset=function(e,a){return t.isSubset(a,e)},t.add=function(e,t){for(var a,l=t.values();!(a=l.next()).done;)e.add(a.value)},t.subtract=function(e,t){for(var a,l=t.values();!(a=l.next()).done;)e.delete(a.value)},t.intersect=function(e,t){for(var a,l=e.values();!(a=l.next()).done;)t.has(a.value)||e.delete(a.value)},t.disjunct=function(e,t){for(var a,l=e.values(),i=[];!(a=l.next()).done;)t.has(a.value)&&i.push(a.value) +for(l=t.values();!(a=l.next()).done;)e.has(a.value)||e.add(a.value) +for(var o=0,n=i.length;ot.size&&(a=e,e=t,t=a),0===e.size)return 0 +if(e===t)return e.size +for(var l,i=e.values(),o=0;!(l=i.next()).done;)t.has(l.value)&&o++ +return o},t.unionSize=function(e,a){var l=t.intersectionSize(e,a) +return e.size+a.size-l},t.jaccard=function(e,a){var l=t.intersectionSize(e,a) +return 0===l?0:l/(e.size+a.size-l)},t.overlap=function(e,a){var l=t.intersectionSize(e,a) +return 0===l?0:l/Math.min(e.size,a.size)}},4977:e=>{function t(e,t){if(!e)throw new Error(t||"AssertionError")}t.notEqual=function(e,a,l){t(e!=a,l)},t.notOk=function(e,a){t(!e,a)},t.equal=function(e,a,l){t(e==a,l)},t.ok=t,e.exports=t},4208:e=>{e.exports=function(e){!function(e){if(!e)throw new Error("Eventify cannot use falsy object as events subject") +for(var t=["on","fire","off"],a=0;a1&&(l=Array.prototype.splice.call(arguments,1)) +for(var o=0;o{e.exports=function(e){if("uniqueLinkId"in(e=e||{})&&(console.warn("ngraph.graph: Starting from version 0.14 `uniqueLinkId` is deprecated.\nUse `multigraph` option instead\n","\n","Note: there is also change in default behavior: From now on each graph\nis considered to be not a multigraph by default (each edge is unique)."),e.multigraph=e.uniqueLinkId),void 0===e.multigraph&&(e.multigraph=!1),"function"!=typeof Map)throw new Error("ngraph.graph requires `Map` to be defined. Please polyfill it before using ngraph") +var t,a=new Map,h=[],s={},d=0,u=e.multigraph?function(e,t,a){var l=c(e,t),i=s.hasOwnProperty(l) +if(i||_(e,t)){i||(s[l]=0) +var o="@"+ ++s[l] +l=c(e+o,t+o)}return new r(e,t,a,l)}:function(e,t,a){return new r(e,t,a,c(e,t))},f=[],v=B,p=B,m=B,y=B,g={addNode:M,addLink:function(e,t,a){m() +var l=A(e)||M(e),i=A(t)||M(t),o=u(e,t,a) +return h.push(o),n(l,o),e!==t&&n(i,o),v(o,"add"),y(),o},removeLink:V,removeNode:w,getNode:A,getNodeCount:x,getLinkCount:H,getLinksCount:H,getNodesCount:x,getLinks:function(e){var t=A(e) +return t?t.links:null},forEachNode:E,forEachLinkedNode:function(e,t,l){var i=A(e) +if(i&&i.links&&"function"==typeof t)return l?function(e,t,l){for(var i=0;i=0&&a.links.splice(t,1),l&&(t=i(e,l.links))>=0&&l.links.splice(t,1),v(e,"remove"),y(),!0}function _(e,t){var a,l=A(e) +if(!l||!l.links)return null +for(a=0;a0&&(g.fire("changed",f),f.length=0)}function E(e){if("function"!=typeof e)throw new Error("Function is expected to iterate over graph nodes. You passed "+e) +for(var t=a.values(),l=t.next();!l.done;){if(e(l.value))return!0 +l=t.next()}}} +var l=a(4208) +function i(e,t){if(!t)return-1 +if(t.indexOf)return t.indexOf(e) +var a,l=t.length +for(a=0;a{var l=a(1317),i=l.ARRAY_BUFFER_SUPPORT,o=l.SYMBOL_SUPPORT +e.exports=function(e,t){var a,l,n,r,c +if(!e)throw new Error("obliterator/forEach: invalid iterable.") +if("function"!=typeof t)throw new Error("obliterator/forEach: expecting a callback.") +if(Array.isArray(e)||i&&ArrayBuffer.isView(e)||"string"==typeof e||"[object Arguments]"===e.toString())for(n=0,r=e.length;n{function t(e){if("function"!=typeof e)throw new Error("obliterator/iterator: expecting a function!") +this.next=e}"undefined"!=typeof Symbol&&(t.prototype[Symbol.iterator]=function(){return this}),t.of=function(){var e=arguments,a=e.length,l=0 +return new t((function(){return l>=a?{done:!0}:{done:!1,value:e[l++]}}))},t.empty=function(){return new t((function(){return{done:!0}}))},t.fromSequence=function(e){var a=0,l=e.length +return new t((function(){return a>=l?{done:!0}:{done:!1,value:e[a++]}}))},t.is=function(e){return e instanceof t||"object"==typeof e&&null!==e&&"function"==typeof e.next},e.exports=t},1317:(e,t)=>{t.ARRAY_BUFFER_SUPPORT="undefined"!=typeof ArrayBuffer,t.SYMBOL_SUPPORT="undefined"!=typeof Symbol},89:e=>{"use strict" +var t=/(\x2D?(?:\d+\.?\d*|\d*\.?\d+)(?:e[-+]?\d+)?)\s*([A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC\u{10000}-\u{1000B}\u{1000D}-\u{10026}\u{10028}-\u{1003A}\u{1003C}\u{1003D}\u{1003F}-\u{1004D}\u{10050}-\u{1005D}\u{10080}-\u{100FA}\u{10280}-\u{1029C}\u{102A0}-\u{102D0}\u{10300}-\u{1031F}\u{1032D}-\u{10340}\u{10342}-\u{10349}\u{10350}-\u{10375}\u{10380}-\u{1039D}\u{103A0}-\u{103C3}\u{103C8}-\u{103CF}\u{10400}-\u{1049D}\u{104B0}-\u{104D3}\u{104D8}-\u{104FB}\u{10500}-\u{10527}\u{10530}-\u{10563}\u{10570}-\u{1057A}\u{1057C}-\u{1058A}\u{1058C}-\u{10592}\u{10594}\u{10595}\u{10597}-\u{105A1}\u{105A3}-\u{105B1}\u{105B3}-\u{105B9}\u{105BB}\u{105BC}\u{10600}-\u{10736}\u{10740}-\u{10755}\u{10760}-\u{10767}\u{10780}-\u{10785}\u{10787}-\u{107B0}\u{107B2}-\u{107BA}\u{10800}-\u{10805}\u{10808}\u{1080A}-\u{10835}\u{10837}\u{10838}\u{1083C}\u{1083F}-\u{10855}\u{10860}-\u{10876}\u{10880}-\u{1089E}\u{108E0}-\u{108F2}\u{108F4}\u{108F5}\u{10900}-\u{10915}\u{10920}-\u{10939}\u{10980}-\u{109B7}\u{109BE}\u{109BF}\u{10A00}\u{10A10}-\u{10A13}\u{10A15}-\u{10A17}\u{10A19}-\u{10A35}\u{10A60}-\u{10A7C}\u{10A80}-\u{10A9C}\u{10AC0}-\u{10AC7}\u{10AC9}-\u{10AE4}\u{10B00}-\u{10B35}\u{10B40}-\u{10B55}\u{10B60}-\u{10B72}\u{10B80}-\u{10B91}\u{10C00}-\u{10C48}\u{10C80}-\u{10CB2}\u{10CC0}-\u{10CF2}\u{10D00}-\u{10D23}\u{10E80}-\u{10EA9}\u{10EB0}\u{10EB1}\u{10F00}-\u{10F1C}\u{10F27}\u{10F30}-\u{10F45}\u{10F70}-\u{10F81}\u{10FB0}-\u{10FC4}\u{10FE0}-\u{10FF6}\u{11003}-\u{11037}\u{11071}\u{11072}\u{11075}\u{11083}-\u{110AF}\u{110D0}-\u{110E8}\u{11103}-\u{11126}\u{11144}\u{11147}\u{11150}-\u{11172}\u{11176}\u{11183}-\u{111B2}\u{111C1}-\u{111C4}\u{111DA}\u{111DC}\u{11200}-\u{11211}\u{11213}-\u{1122B}\u{1123F}\u{11240}\u{11280}-\u{11286}\u{11288}\u{1128A}-\u{1128D}\u{1128F}-\u{1129D}\u{1129F}-\u{112A8}\u{112B0}-\u{112DE}\u{11305}-\u{1130C}\u{1130F}\u{11310}\u{11313}-\u{11328}\u{1132A}-\u{11330}\u{11332}\u{11333}\u{11335}-\u{11339}\u{1133D}\u{11350}\u{1135D}-\u{11361}\u{11400}-\u{11434}\u{11447}-\u{1144A}\u{1145F}-\u{11461}\u{11480}-\u{114AF}\u{114C4}\u{114C5}\u{114C7}\u{11580}-\u{115AE}\u{115D8}-\u{115DB}\u{11600}-\u{1162F}\u{11644}\u{11680}-\u{116AA}\u{116B8}\u{11700}-\u{1171A}\u{11740}-\u{11746}\u{11800}-\u{1182B}\u{118A0}-\u{118DF}\u{118FF}-\u{11906}\u{11909}\u{1190C}-\u{11913}\u{11915}\u{11916}\u{11918}-\u{1192F}\u{1193F}\u{11941}\u{119A0}-\u{119A7}\u{119AA}-\u{119D0}\u{119E1}\u{119E3}\u{11A00}\u{11A0B}-\u{11A32}\u{11A3A}\u{11A50}\u{11A5C}-\u{11A89}\u{11A9D}\u{11AB0}-\u{11AF8}\u{11C00}-\u{11C08}\u{11C0A}-\u{11C2E}\u{11C40}\u{11C72}-\u{11C8F}\u{11D00}-\u{11D06}\u{11D08}\u{11D09}\u{11D0B}-\u{11D30}\u{11D46}\u{11D60}-\u{11D65}\u{11D67}\u{11D68}\u{11D6A}-\u{11D89}\u{11D98}\u{11EE0}-\u{11EF2}\u{11F02}\u{11F04}-\u{11F10}\u{11F12}-\u{11F33}\u{11FB0}\u{12000}-\u{12399}\u{12480}-\u{12543}\u{12F90}-\u{12FF0}\u{13000}-\u{1342F}\u{13441}-\u{13446}\u{14400}-\u{14646}\u{16800}-\u{16A38}\u{16A40}-\u{16A5E}\u{16A70}-\u{16ABE}\u{16AD0}-\u{16AED}\u{16B00}-\u{16B2F}\u{16B40}-\u{16B43}\u{16B63}-\u{16B77}\u{16B7D}-\u{16B8F}\u{16E40}-\u{16E7F}\u{16F00}-\u{16F4A}\u{16F50}\u{16F93}-\u{16F9F}\u{16FE0}\u{16FE1}\u{16FE3}\u{17000}-\u{187F7}\u{18800}-\u{18CD5}\u{18D00}-\u{18D08}\u{1AFF0}-\u{1AFF3}\u{1AFF5}-\u{1AFFB}\u{1AFFD}\u{1AFFE}\u{1B000}-\u{1B122}\u{1B132}\u{1B150}-\u{1B152}\u{1B155}\u{1B164}-\u{1B167}\u{1B170}-\u{1B2FB}\u{1BC00}-\u{1BC6A}\u{1BC70}-\u{1BC7C}\u{1BC80}-\u{1BC88}\u{1BC90}-\u{1BC99}\u{1D400}-\u{1D454}\u{1D456}-\u{1D49C}\u{1D49E}\u{1D49F}\u{1D4A2}\u{1D4A5}\u{1D4A6}\u{1D4A9}-\u{1D4AC}\u{1D4AE}-\u{1D4B9}\u{1D4BB}\u{1D4BD}-\u{1D4C3}\u{1D4C5}-\u{1D505}\u{1D507}-\u{1D50A}\u{1D50D}-\u{1D514}\u{1D516}-\u{1D51C}\u{1D51E}-\u{1D539}\u{1D53B}-\u{1D53E}\u{1D540}-\u{1D544}\u{1D546}\u{1D54A}-\u{1D550}\u{1D552}-\u{1D6A5}\u{1D6A8}-\u{1D6C0}\u{1D6C2}-\u{1D6DA}\u{1D6DC}-\u{1D6FA}\u{1D6FC}-\u{1D714}\u{1D716}-\u{1D734}\u{1D736}-\u{1D74E}\u{1D750}-\u{1D76E}\u{1D770}-\u{1D788}\u{1D78A}-\u{1D7A8}\u{1D7AA}-\u{1D7C2}\u{1D7C4}-\u{1D7CB}\u{1DF00}-\u{1DF1E}\u{1DF25}-\u{1DF2A}\u{1E030}-\u{1E06D}\u{1E100}-\u{1E12C}\u{1E137}-\u{1E13D}\u{1E14E}\u{1E290}-\u{1E2AD}\u{1E2C0}-\u{1E2EB}\u{1E4D0}-\u{1E4EB}\u{1E7E0}-\u{1E7E6}\u{1E7E8}-\u{1E7EB}\u{1E7ED}\u{1E7EE}\u{1E7F0}-\u{1E7FE}\u{1E800}-\u{1E8C4}\u{1E900}-\u{1E943}\u{1E94B}\u{1EE00}-\u{1EE03}\u{1EE05}-\u{1EE1F}\u{1EE21}\u{1EE22}\u{1EE24}\u{1EE27}\u{1EE29}-\u{1EE32}\u{1EE34}-\u{1EE37}\u{1EE39}\u{1EE3B}\u{1EE42}\u{1EE47}\u{1EE49}\u{1EE4B}\u{1EE4D}-\u{1EE4F}\u{1EE51}\u{1EE52}\u{1EE54}\u{1EE57}\u{1EE59}\u{1EE5B}\u{1EE5D}\u{1EE5F}\u{1EE61}\u{1EE62}\u{1EE64}\u{1EE67}-\u{1EE6A}\u{1EE6C}-\u{1EE72}\u{1EE74}-\u{1EE77}\u{1EE79}-\u{1EE7C}\u{1EE7E}\u{1EE80}-\u{1EE89}\u{1EE8B}-\u{1EE9B}\u{1EEA1}-\u{1EEA3}\u{1EEA5}-\u{1EEA9}\u{1EEAB}-\u{1EEBB}\u{20000}-\u{2A6DF}\u{2A700}-\u{2B739}\u{2B740}-\u{2B81D}\u{2B820}-\u{2CEA1}\u{2CEB0}-\u{2EBE0}\u{2F800}-\u{2FA1D}\u{30000}-\u{3134A}\u{31350}-\u{323AF}]*)/giu +function a(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"ms" +var i=null +return e=(e+"").replace(/(\d)[,_](\d)/g,"$1$2"),e.replace(t,(function(e,t,a){(a=l(a))&&(i=(i||0)+parseFloat(t,10)*a)})),i&&i/(l(a)||1)}function l(e){return a[e]||a[e.toLowerCase().replace(/s$/,"")]}e.exports=a,e.exports.default=a,a.nanosecond=a.ns=1e-6,a["µs"]=a["μs"]=a.us=a.microsecond=.001,a.millisecond=a.ms=a[""]=1,a.second=a.sec=a.s=1e3*a.ms,a.minute=a.min=a.m=60*a.s,a.hour=a.hr=a.h=60*a.m,a.day=a.d=24*a.h,a.week=a.wk=a.w=7*a.d,a.month=a.b=30.4375*a.d,a.year=a.yr=a.y=365.25*a.d},3507:e=>{"use strict" +e.exports=e=>{if("number"!=typeof e)throw new TypeError("Expected a number") +const t=e>0?Math.floor:Math.ceil +return{days:t(e/864e5),hours:t(e/36e5)%24,minutes:t(e/6e4)%60,seconds:t(e/1e3)%60,milliseconds:t(e)%1e3,microseconds:t(1e3*e)%1e3,nanoseconds:t(1e6*e)%1e3}}},9837:(e,t,a)=>{"use strict" +const l=a(3507) +e.exports=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} +if(!Number.isFinite(e))throw new TypeError("Expected a finite number") +t.colonNotation&&(t.compact=!1,t.formatSubMilliseconds=!1,t.separateMilliseconds=!1,t.verbose=!1),t.compact&&(t.secondsDecimalDigits=0,t.millisecondsDecimalDigits=0) +const a=[],i=(e,l,i,o)=>{if(!(0!==a.length&&t.colonNotation||0!==e||t.colonNotation&&"m"===i))return +let n,r +if(o=(o||e||"0").toString(),t.colonNotation){n=a.length>0?":":"",r="" +const e=o.includes(".")?o.split(".")[0].length:o.length,t=a.length>0?2:1 +o="0".repeat(Math.max(0,t-e))+o}else n="",r=t.verbose?" "+(c=l,1===e?c:`${c}s`):i +var c +a.push(n+o+r)},o=l(e) +if(i(Math.trunc(o.days/365),"year","y"),i(o.days%365,"day","d"),i(o.hours,"hour","h"),i(o.minutes,"minute","m"),t.separateMilliseconds||t.formatSubMilliseconds||!t.colonNotation&&e<1e3)if(i(o.seconds,"second","s"),t.formatSubMilliseconds)i(o.milliseconds,"millisecond","ms"),i(o.microseconds,"microsecond","µs"),i(o.nanoseconds,"nanosecond","ns") +else{const e=o.milliseconds+o.microseconds/1e3+o.nanoseconds/1e6,a="number"==typeof t.millisecondsDecimalDigits?t.millisecondsDecimalDigits:0,l=e>=1?Math.round(e):Math.ceil(e),n=a?e.toFixed(a):l +i(Number.parseFloat(n,10),"millisecond","ms",n)}else{const a=((e,t)=>{const a=Math.floor(e*10**t+1e-7) +return(Math.round(a)/10**t).toFixed(t)})(e/1e3%60,"number"==typeof t.secondsDecimalDigits?t.secondsDecimalDigits:1),l=t.keepDecimalsOnWholeSeconds?a:a.replace(/\.0+$/,"") +i(Number.parseFloat(l,10),"second","s",l)}if(0===a.length)return"0"+(t.verbose?" milliseconds":"ms") +if(t.compact)return a[0] +if("number"==typeof t.unitCount){const e=t.colonNotation?"":" " +return a.slice(0,Math.max(t.unitCount,1)).join(e)}return t.colonNotation?a.join(""):a.join(" ")}},9640:(e,t,a)=>{"use strict" +function l(e){if(null==e)return window +if("[object Window]"!==e.toString()){var t=e.ownerDocument +return t&&t.defaultView||window}return e}function i(e){return e instanceof l(e).Element||e instanceof Element}function o(e){return e instanceof l(e).HTMLElement||e instanceof HTMLElement}function n(e){return"undefined"!=typeof ShadowRoot&&(e instanceof l(e).ShadowRoot||e instanceof ShadowRoot)}a.r(t),a.d(t,{animateFill:()=>dt,createSingleton:()=>ct,default:()=>bt,delegate:()=>st,followCursor:()=>pt,hideAll:()=>nt,inlinePositioning:()=>mt,roundArrow:()=>fe,sticky:()=>yt}) +var r=Math.max,c=Math.min,h=Math.round +function s(){var e=navigator.userAgentData +return null!=e&&e.brands?e.brands.map((function(e){return e.brand+"/"+e.version})).join(" "):navigator.userAgent}function d(){return!/^((?!chrome|android).)*safari/i.test(s())}function u(e,t,a){void 0===t&&(t=!1),void 0===a&&(a=!1) +var n=e.getBoundingClientRect(),r=1,c=1 +t&&o(e)&&(r=e.offsetWidth>0&&h(n.width)/e.offsetWidth||1,c=e.offsetHeight>0&&h(n.height)/e.offsetHeight||1) +var s=(i(e)?l(e):window).visualViewport,u=!d()&&a,f=(n.left+(u&&s?s.offsetLeft:0))/r,v=(n.top+(u&&s?s.offsetTop:0))/c,p=n.width/r,m=n.height/c +return{width:p,height:m,top:v,right:f+p,bottom:v+m,left:f,x:f,y:v}}function f(e){var t=l(e) +return{scrollLeft:t.pageXOffset,scrollTop:t.pageYOffset}}function v(e){return e?(e.nodeName||"").toLowerCase():null}function p(e){return((i(e)?e.ownerDocument:e.document)||window.document).documentElement}function m(e){return u(p(e)).left+f(e).scrollLeft}function y(e){return l(e).getComputedStyle(e)}function g(e){var t=y(e),a=t.overflow,l=t.overflowX,i=t.overflowY +return/auto|scroll|overlay|hidden/.test(a+i+l)}function b(e,t,a){void 0===a&&(a=!1) +var i,n,r=o(t),c=o(t)&&function(e){var t=e.getBoundingClientRect(),a=h(t.width)/e.offsetWidth||1,l=h(t.height)/e.offsetHeight||1 +return 1!==a||1!==l}(t),s=p(t),d=u(e,c,a),y={scrollLeft:0,scrollTop:0},b={x:0,y:0} +return(r||!r&&!a)&&(("body"!==v(t)||g(s))&&(y=(i=t)!==l(i)&&o(i)?{scrollLeft:(n=i).scrollLeft,scrollTop:n.scrollTop}:f(i)),o(t)?((b=u(t,!0)).x+=t.clientLeft,b.y+=t.clientTop):s&&(b.x=m(s))),{x:d.left+y.scrollLeft-b.x,y:d.top+y.scrollTop-b.y,width:d.width,height:d.height}}function z(e){var t=u(e),a=e.offsetWidth,l=e.offsetHeight +return Math.abs(t.width-a)<=1&&(a=t.width),Math.abs(t.height-l)<=1&&(l=t.height),{x:e.offsetLeft,y:e.offsetTop,width:a,height:l}}function M(e){return"html"===v(e)?e:e.assignedSlot||e.parentNode||(n(e)?e.host:null)||p(e)}function A(e){return["html","body","#document"].indexOf(v(e))>=0?e.ownerDocument.body:o(e)&&g(e)?e:A(M(e))}function w(e,t){var a +void 0===t&&(t=[]) +var i=A(e),o=i===(null==(a=e.ownerDocument)?void 0:a.body),n=l(i),r=o?[n].concat(n.visualViewport||[],g(i)?i:[]):i,c=t.concat(r) +return o?c:c.concat(w(M(r)))}function x(e){return["table","td","th"].indexOf(v(e))>=0}function H(e){return o(e)&&"fixed"!==y(e).position?e.offsetParent:null}function V(e){for(var t=l(e),a=H(e);a&&x(a)&&"static"===y(a).position;)a=H(a) +return a&&("html"===v(a)||"body"===v(a)&&"static"===y(a).position)?t:a||function(e){var t=/firefox/i.test(s()) +if(/Trident/i.test(s())&&o(e)&&"fixed"===y(e).position)return null +var a=M(e) +for(n(a)&&(a=a.host);o(a)&&["html","body"].indexOf(v(a))<0;){var l=y(a) +if("none"!==l.transform||"none"!==l.perspective||"paint"===l.contain||-1!==["transform","perspective"].indexOf(l.willChange)||t&&"filter"===l.willChange||t&&l.filter&&"none"!==l.filter)return a +a=a.parentNode}return null}(e)||t}var _="top",B="bottom",L="right",C="left",E="auto",k=[_,B,L,C],D="start",S="end",F="clippingParents",O="viewport",T="popper",P="reference",N=k.reduce((function(e,t){return e.concat([t+"-"+D,t+"-"+S])}),[]),U=[].concat(k,[E]).reduce((function(e,t){return e.concat([t,t+"-"+D,t+"-"+S])}),[]),R=["beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite"] +function j(e){var t=new Map,a=new Set,l=[] +function i(e){a.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach((function(e){if(!a.has(e)){var l=t.get(e) +l&&i(l)}})),l.push(e)}return e.forEach((function(e){t.set(e.name,e)})),e.forEach((function(e){a.has(e.name)||i(e)})),l}var I={placement:"bottom",modifiers:[],strategy:"absolute"} +function G(){for(var e=arguments.length,t=new Array(e),a=0;a=0?"x":"y"}function K(e){var t,a=e.reference,l=e.element,i=e.placement,o=i?q(i):null,n=i?Z(i):null,r=a.x+a.width/2-l.width/2,c=a.y+a.height/2-l.height/2 +switch(o){case _:t={x:r,y:a.y-l.height} +break +case B:t={x:r,y:a.y+a.height} +break +case L:t={x:a.x+a.width,y:c} +break +case C:t={x:a.x-l.width,y:c} +break +default:t={x:a.x,y:a.y}}var h=o?Y(o):null +if(null!=h){var s="y"===h?"height":"width" +switch(n){case D:t[h]=t[h]-(a[s]/2-l[s]/2) +break +case S:t[h]=t[h]+(a[s]/2-l[s]/2)}}return t}var W={top:"auto",right:"auto",bottom:"auto",left:"auto"} +function X(e){var t,a=e.popper,i=e.popperRect,o=e.placement,n=e.variation,r=e.offsets,c=e.position,s=e.gpuAcceleration,d=e.adaptive,u=e.roundOffsets,f=e.isFixed,v=r.x,m=void 0===v?0:v,g=r.y,b=void 0===g?0:g,z="function"==typeof u?u({x:m,y:b}):{x:m,y:b} +m=z.x,b=z.y +var M=r.hasOwnProperty("x"),A=r.hasOwnProperty("y"),w=C,x=_,H=window +if(d){var E=V(a),k="clientHeight",D="clientWidth" +E===l(a)&&"static"!==y(E=p(a)).position&&"absolute"===c&&(k="scrollHeight",D="scrollWidth"),(o===_||(o===C||o===L)&&n===S)&&(x=B,b-=(f&&E===H&&H.visualViewport?H.visualViewport.height:E[k])-i.height,b*=s?1:-1),o!==C&&(o!==_&&o!==B||n!==S)||(w=L,m-=(f&&E===H&&H.visualViewport?H.visualViewport.width:E[D])-i.width,m*=s?1:-1)}var F,O=Object.assign({position:c},d&&W),T=!0===u?function(e){var t=e.x,a=e.y,l=window.devicePixelRatio||1 +return{x:h(t*l)/l||0,y:h(a*l)/l||0}}({x:m,y:b}):{x:m,y:b} +return m=T.x,b=T.y,s?Object.assign({},O,((F={})[x]=A?"0":"",F[w]=M?"0":"",F.transform=(H.devicePixelRatio||1)<=1?"translate("+m+"px, "+b+"px)":"translate3d("+m+"px, "+b+"px, 0)",F)):Object.assign({},O,((t={})[x]=A?b+"px":"",t[w]=M?m+"px":"",t.transform="",t))}const J={name:"applyStyles",enabled:!0,phase:"write",fn:function(e){var t=e.state +Object.keys(t.elements).forEach((function(e){var a=t.styles[e]||{},l=t.attributes[e]||{},i=t.elements[e] +o(i)&&v(i)&&(Object.assign(i.style,a),Object.keys(l).forEach((function(e){var t=l[e] +!1===t?i.removeAttribute(e):i.setAttribute(e,!0===t?"":t)})))}))},effect:function(e){var t=e.state,a={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}} +return Object.assign(t.elements.popper.style,a.popper),t.styles=a,t.elements.arrow&&Object.assign(t.elements.arrow.style,a.arrow),function(){Object.keys(t.elements).forEach((function(e){var l=t.elements[e],i=t.attributes[e]||{},n=Object.keys(t.styles.hasOwnProperty(e)?t.styles[e]:a[e]).reduce((function(e,t){return e[t]="",e}),{}) +o(l)&&v(l)&&(Object.assign(l.style,n),Object.keys(i).forEach((function(e){l.removeAttribute(e)})))}))}},requires:["computeStyles"]} +var Q={left:"right",right:"left",bottom:"top",top:"bottom"} +function ee(e){return e.replace(/left|right|bottom|top/g,(function(e){return Q[e]}))}var te={start:"end",end:"start"} +function ae(e){return e.replace(/start|end/g,(function(e){return te[e]}))}function le(e,t){var a=t.getRootNode&&t.getRootNode() +if(e.contains(t))return!0 +if(a&&n(a)){var l=t +do{if(l&&e.isSameNode(l))return!0 +l=l.parentNode||l.host}while(l)}return!1}function ie(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function oe(e,t,a){return t===O?ie(function(e,t){var a=l(e),i=p(e),o=a.visualViewport,n=i.clientWidth,r=i.clientHeight,c=0,h=0 +if(o){n=o.width,r=o.height +var s=d();(s||!s&&"fixed"===t)&&(c=o.offsetLeft,h=o.offsetTop)}return{width:n,height:r,x:c+m(e),y:h}}(e,a)):i(t)?function(e,t){var a=u(e,!1,"fixed"===t) +return a.top=a.top+e.clientTop,a.left=a.left+e.clientLeft,a.bottom=a.top+e.clientHeight,a.right=a.left+e.clientWidth,a.width=e.clientWidth,a.height=e.clientHeight,a.x=a.left,a.y=a.top,a}(t,a):ie(function(e){var t,a=p(e),l=f(e),i=null==(t=e.ownerDocument)?void 0:t.body,o=r(a.scrollWidth,a.clientWidth,i?i.scrollWidth:0,i?i.clientWidth:0),n=r(a.scrollHeight,a.clientHeight,i?i.scrollHeight:0,i?i.clientHeight:0),c=-l.scrollLeft+m(e),h=-l.scrollTop +return"rtl"===y(i||a).direction&&(c+=r(a.clientWidth,i?i.clientWidth:0)-o),{width:o,height:n,x:c,y:h}}(p(e)))}function ne(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}function re(e,t){return t.reduce((function(t,a){return t[a]=e,t}),{})}function ce(e,t){void 0===t&&(t={}) +var a=t,l=a.placement,n=void 0===l?e.placement:l,h=a.strategy,s=void 0===h?e.strategy:h,d=a.boundary,f=void 0===d?F:d,m=a.rootBoundary,g=void 0===m?O:m,b=a.elementContext,z=void 0===b?T:b,A=a.altBoundary,x=void 0!==A&&A,H=a.padding,C=void 0===H?0:H,E=ne("number"!=typeof C?C:re(C,k)),D=z===T?P:T,S=e.rects.popper,N=e.elements[x?D:z],U=function(e,t,a,l){var n="clippingParents"===t?function(e){var t=w(M(e)),a=["absolute","fixed"].indexOf(y(e).position)>=0&&o(e)?V(e):e +return i(a)?t.filter((function(e){return i(e)&&le(e,a)&&"body"!==v(e)})):[]}(e):[].concat(t),h=[].concat(n,[a]),s=h[0],d=h.reduce((function(t,a){var i=oe(e,a,l) +return t.top=r(i.top,t.top),t.right=c(i.right,t.right),t.bottom=c(i.bottom,t.bottom),t.left=r(i.left,t.left),t}),oe(e,s,l)) +return d.width=d.right-d.left,d.height=d.bottom-d.top,d.x=d.left,d.y=d.top,d}(i(N)?N:N.contextElement||p(e.elements.popper),f,g,s),R=u(e.elements.reference),j=K({reference:R,element:S,strategy:"absolute",placement:n}),I=ie(Object.assign({},S,j)),G=z===T?I:R,$={top:U.top-G.top+E.top,bottom:G.bottom-U.bottom+E.bottom,left:U.left-G.left+E.left,right:G.right-U.right+E.right},q=e.modifiersData.offset +if(z===T&&q){var Z=q[n] +Object.keys($).forEach((function(e){var t=[L,B].indexOf(e)>=0?1:-1,a=[_,B].indexOf(e)>=0?"y":"x" +$[e]+=Z[a]*t}))}return $}function he(e,t,a){return r(e,c(t,a))}function se(e,t,a){return void 0===a&&(a={x:0,y:0}),{top:e.top-t.height-a.y,right:e.right-t.width+a.x,bottom:e.bottom-t.height+a.y,left:e.left-t.width-a.x}}function de(e){return[_,L,B,C].some((function(t){return e[t]>=0}))}var ue=function(e){void 0===e&&(e={}) +var t=e,a=t.defaultModifiers,l=void 0===a?[]:a,o=t.defaultOptions,n=void 0===o?I:o +return function(e,t,a){void 0===a&&(a=n) +var o,r,c={placement:"bottom",orderedModifiers:[],options:Object.assign({},I,n),modifiersData:{},elements:{reference:e,popper:t},attributes:{},styles:{}},h=[],s=!1,d={state:c,setOptions:function(a){var o="function"==typeof a?a(c.options):a +u(),c.options=Object.assign({},n,c.options,o),c.scrollParents={reference:i(e)?w(e):e.contextElement?w(e.contextElement):[],popper:w(t)} +var r,s,f=function(e){var t=j(e) +return R.reduce((function(e,a){return e.concat(t.filter((function(e){return e.phase===a})))}),[])}((r=[].concat(l,c.options.modifiers),s=r.reduce((function(e,t){var a=e[t.name] +return e[t.name]=a?Object.assign({},a,t,{options:Object.assign({},a.options,t.options),data:Object.assign({},a.data,t.data)}):t,e}),{}),Object.keys(s).map((function(e){return s[e]})))) +return c.orderedModifiers=f.filter((function(e){return e.enabled})),c.orderedModifiers.forEach((function(e){var t=e.name,a=e.options,l=void 0===a?{}:a,i=e.effect +if("function"==typeof i){var o=i({state:c,name:t,instance:d,options:l}) +h.push(o||function(){})}})),d.update()},forceUpdate:function(){if(!s){var e=c.elements,t=e.reference,a=e.popper +if(G(t,a)){c.rects={reference:b(t,V(a),"fixed"===c.options.strategy),popper:z(a)},c.reset=!1,c.placement=c.options.placement,c.orderedModifiers.forEach((function(e){return c.modifiersData[e.name]=Object.assign({},e.data)})) +for(var l=0;l=0?-1:1,o="function"==typeof a?a(Object.assign({},t,{placement:e})):a,n=o[0],r=o[1] +return n=n||0,r=(r||0)*i,[C,L].indexOf(l)>=0?{x:r,y:n}:{x:n,y:r}}(a,t.rects,o),e}),{}),r=n[t.placement],c=r.x,h=r.y +null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=c,t.modifiersData.popperOffsets.y+=h),t.modifiersData[l]=n}},{name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,a=e.options,l=e.name +if(!t.modifiersData[l]._skip){for(var i=a.mainAxis,o=void 0===i||i,n=a.altAxis,r=void 0===n||n,c=a.fallbackPlacements,h=a.padding,s=a.boundary,d=a.rootBoundary,u=a.altBoundary,f=a.flipVariations,v=void 0===f||f,p=a.allowedAutoPlacements,m=t.options.placement,y=q(m),g=c||(y!==m&&v?function(e){if(q(e)===E)return[] +var t=ee(e) +return[ae(e),t,ae(t)]}(m):[ee(m)]),b=[m].concat(g).reduce((function(e,a){return e.concat(q(a)===E?function(e,t){void 0===t&&(t={}) +var a=t,l=a.placement,i=a.boundary,o=a.rootBoundary,n=a.padding,r=a.flipVariations,c=a.allowedAutoPlacements,h=void 0===c?U:c,s=Z(l),d=s?r?N:N.filter((function(e){return Z(e)===s})):k,u=d.filter((function(e){return h.indexOf(e)>=0})) +0===u.length&&(u=d) +var f=u.reduce((function(t,a){return t[a]=ce(e,{placement:a,boundary:i,rootBoundary:o,padding:n})[q(a)],t}),{}) +return Object.keys(f).sort((function(e,t){return f[e]-f[t]}))}(t,{placement:a,boundary:s,rootBoundary:d,padding:h,flipVariations:v,allowedAutoPlacements:p}):a)}),[]),z=t.rects.reference,M=t.rects.popper,A=new Map,w=!0,x=b[0],H=0;H=0,T=O?"width":"height",P=ce(t,{placement:V,boundary:s,rootBoundary:d,altBoundary:u,padding:h}),R=O?F?L:C:F?B:_ +z[T]>M[T]&&(R=ee(R)) +var j=ee(R),I=[] +if(o&&I.push(P[S]<=0),r&&I.push(P[R]<=0,P[j]<=0),I.every((function(e){return e}))){x=V,w=!1 +break}A.set(V,I)}if(w)for(var G=function(e){var t=b.find((function(t){var a=A.get(t) +if(a)return a.slice(0,e).every((function(e){return e}))})) +if(t)return x=t,"break"},$=v?3:1;$>0&&"break"!==G($);$--);t.placement!==x&&(t.modifiersData[l]._skip=!0,t.placement=x,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}},{name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,a=e.options,l=e.name,i=a.mainAxis,o=void 0===i||i,n=a.altAxis,h=void 0!==n&&n,s=a.boundary,d=a.rootBoundary,u=a.altBoundary,f=a.padding,v=a.tether,p=void 0===v||v,m=a.tetherOffset,y=void 0===m?0:m,g=ce(t,{boundary:s,rootBoundary:d,padding:f,altBoundary:u}),b=q(t.placement),M=Z(t.placement),A=!M,w=Y(b),x="x"===w?"y":"x",H=t.modifiersData.popperOffsets,E=t.rects.reference,k=t.rects.popper,S="function"==typeof y?y(Object.assign({},t.rects,{placement:t.placement})):y,F="number"==typeof S?{mainAxis:S,altAxis:S}:Object.assign({mainAxis:0,altAxis:0},S),O=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,T={x:0,y:0} +if(H){if(o){var P,N="y"===w?_:C,U="y"===w?B:L,R="y"===w?"height":"width",j=H[w],I=j+g[N],G=j-g[U],$=p?-k[R]/2:0,K=M===D?E[R]:k[R],W=M===D?-k[R]:-E[R],X=t.elements.arrow,J=p&&X?z(X):{width:0,height:0},Q=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},ee=Q[N],te=Q[U],ae=he(0,E[R],J[R]),le=A?E[R]/2-$-ae-ee-F.mainAxis:K-ae-ee-F.mainAxis,ie=A?-E[R]/2+$+ae+te+F.mainAxis:W+ae+te+F.mainAxis,oe=t.elements.arrow&&V(t.elements.arrow),ne=oe?"y"===w?oe.clientTop||0:oe.clientLeft||0:0,re=null!=(P=null==O?void 0:O[w])?P:0,se=j+ie-re,de=he(p?c(I,j+le-re-ne):I,j,p?r(G,se):G) +H[w]=de,T[w]=de-j}if(h){var ue,fe="x"===w?_:C,ve="x"===w?B:L,pe=H[x],me="y"===x?"height":"width",ye=pe+g[fe],ge=pe-g[ve],be=-1!==[_,C].indexOf(b),ze=null!=(ue=null==O?void 0:O[x])?ue:0,Me=be?ye:pe-E[me]-k[me]-ze+F.altAxis,Ae=be?pe+E[me]+k[me]-ze-F.altAxis:ge,we=p&&be?function(e,t,a){var l=he(e,t,a) +return l>a?a:l}(Me,pe,Ae):he(p?Me:ye,pe,p?Ae:ge) +H[x]=we,T[x]=we-pe}t.modifiersData[l]=T}},requiresIfExists:["offset"]},{name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,a=e.state,l=e.name,i=e.options,o=a.elements.arrow,n=a.modifiersData.popperOffsets,r=q(a.placement),c=Y(r),h=[C,L].indexOf(r)>=0?"height":"width" +if(o&&n){var s=function(e,t){return ne("number"!=typeof(e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e)?e:re(e,k))}(i.padding,a),d=z(o),u="y"===c?_:C,f="y"===c?B:L,v=a.rects.reference[h]+a.rects.reference[c]-n[c]-a.rects.popper[h],p=n[c]-a.rects.reference[c],m=V(o),y=m?"y"===c?m.clientHeight||0:m.clientWidth||0:0,g=v/2-p/2,b=s[u],M=y-d[h]-s[f],A=y/2-d[h]/2+g,w=he(b,A,M),x=c +a.modifiersData[l]=((t={})[x]=w,t.centerOffset=w-A,t)}},effect:function(e){var t=e.state,a=e.options.element,l=void 0===a?"[data-popper-arrow]":a +null!=l&&("string"!=typeof l||(l=t.elements.popper.querySelector(l)))&&le(t.elements.popper,l)&&(t.elements.arrow=l)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]},{name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,a=e.name,l=t.rects.reference,i=t.rects.popper,o=t.modifiersData.preventOverflow,n=ce(t,{elementContext:"reference"}),r=ce(t,{altBoundary:!0}),c=se(n,l),h=se(r,i,o),s=de(c),d=de(h) +t.modifiersData[a]={referenceClippingOffsets:c,popperEscapeOffsets:h,isReferenceHidden:s,hasPopperEscaped:d},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":s,"data-popper-escaped":d})}}]}),fe='',ve="tippy-box",pe="tippy-content",me="tippy-backdrop",ye="tippy-arrow",ge="tippy-svg-arrow",be={passive:!0,capture:!0},ze=function(){return document.body} +function Me(e,t,a){if(Array.isArray(e)){var l=e[t] +return null==l?Array.isArray(a)?a[t]:a:l}return e}function Ae(e,t){var a={}.toString.call(e) +return 0===a.indexOf("[object")&&a.indexOf(t+"]")>-1}function we(e,t){return"function"==typeof e?e.apply(void 0,t):e}function xe(e,t){return 0===t?e:function(l){clearTimeout(a),a=setTimeout((function(){e(l)}),t)} +var a}function He(e,t){var a=Object.assign({},e) +return t.forEach((function(e){delete a[e]})),a}function Ve(e){return[].concat(e)}function _e(e,t){-1===e.indexOf(t)&&e.push(t)}function Be(e){return e.split("-")[0]}function Le(e){return[].slice.call(e)}function Ce(e){return Object.keys(e).reduce((function(t,a){return void 0!==e[a]&&(t[a]=e[a]),t}),{})}function Ee(){return document.createElement("div")}function ke(e){return["Element","Fragment"].some((function(t){return Ae(e,t)}))}function De(e){return Ae(e,"MouseEvent")}function Se(e){return!(!e||!e._tippy||e._tippy.reference!==e)}function Fe(e,t){e.forEach((function(e){e&&(e.style.transitionDuration=t+"ms")}))}function Oe(e,t){e.forEach((function(e){e&&e.setAttribute("data-state",t)}))}function Te(e){var t,a=Ve(e)[0] +return null!=a&&null!=(t=a.ownerDocument)&&t.body?a.ownerDocument:document}function Pe(e,t,a){var l=t+"EventListener";["transitionend","webkitTransitionEnd"].forEach((function(t){e[l](t,a)}))}function Ne(e,t){for(var a=t;a;){var l +if(e.contains(a))return!0 +a=null==a.getRootNode||null==(l=a.getRootNode())?void 0:l.host}return!1}var Ue={isTouch:!1},Re=0 +function je(){Ue.isTouch||(Ue.isTouch=!0,window.performance&&document.addEventListener("mousemove",Ie))}function Ie(){var e=performance.now() +e-Re<20&&(Ue.isTouch=!1,document.removeEventListener("mousemove",Ie)),Re=e}function Ge(){var e=document.activeElement +if(Se(e)){var t=e._tippy +e.blur&&!t.state.isVisible&&e.blur()}}var $e=!("undefined"==typeof window||"undefined"==typeof document||!window.msCrypto),qe=Object.assign({appendTo:ze,aria:{content:"auto",expanded:"auto"},delay:0,duration:[300,250],getReferenceClientRect:null,hideOnClick:!0,ignoreAttributes:!1,interactive:!1,interactiveBorder:2,interactiveDebounce:0,moveTransition:"",offset:[0,10],onAfterUpdate:function(){},onBeforeUpdate:function(){},onCreate:function(){},onDestroy:function(){},onHidden:function(){},onHide:function(){},onMount:function(){},onShow:function(){},onShown:function(){},onTrigger:function(){},onUntrigger:function(){},onClickOutside:function(){},placement:"top",plugins:[],popperOptions:{},render:null,showOnCreate:!1,touch:!0,trigger:"mouseenter focus",triggerTarget:null},{animateFill:!1,followCursor:!1,inlinePositioning:!1,sticky:!1},{allowHTML:!1,animation:"fade",arrow:!0,content:"",inertia:!1,maxWidth:350,role:"tooltip",theme:"",zIndex:9999}),Ze=Object.keys(qe) +function Ye(e){var t=(e.plugins||[]).reduce((function(t,a){var l,i=a.name,o=a.defaultValue +return i&&(t[i]=void 0!==e[i]?e[i]:null!=(l=qe[i])?l:o),t}),{}) +return Object.assign({},e,t)}function Ke(e,t){var a=Object.assign({},t,{content:we(t.content,[e])},t.ignoreAttributes?{}:function(e,t){return(t?Object.keys(Ye(Object.assign({},qe,{plugins:t}))):Ze).reduce((function(t,a){var l=(e.getAttribute("data-tippy-"+a)||"").trim() +if(!l)return t +if("content"===a)t[a]=l +else try{t[a]=JSON.parse(l)}catch(e){t[a]=l}return t}),{})}(e,t.plugins)) +return a.aria=Object.assign({},qe.aria,a.aria),a.aria={expanded:"auto"===a.aria.expanded?t.interactive:a.aria.expanded,content:"auto"===a.aria.content?t.interactive?null:"describedby":a.aria.content},a}var We=function(){return"innerHTML"} +function Xe(e,t){e[We()]=t}function Je(e){var t=Ee() +return!0===e?t.className=ye:(t.className=ge,ke(e)?t.appendChild(e):Xe(t,e)),t}function Qe(e,t){ke(t.content)?(Xe(e,""),e.appendChild(t.content)):"function"!=typeof t.content&&(t.allowHTML?Xe(e,t.content):e.textContent=t.content)}function et(e){var t=e.firstElementChild,a=Le(t.children) +return{box:t,content:a.find((function(e){return e.classList.contains(pe)})),arrow:a.find((function(e){return e.classList.contains(ye)||e.classList.contains(ge)})),backdrop:a.find((function(e){return e.classList.contains(me)}))}}function tt(e){var t=Ee(),a=Ee() +a.className=ve,a.setAttribute("data-state","hidden"),a.setAttribute("tabindex","-1") +var l=Ee() +function i(a,l){var i=et(t),o=i.box,n=i.content,r=i.arrow +l.theme?o.setAttribute("data-theme",l.theme):o.removeAttribute("data-theme"),"string"==typeof l.animation?o.setAttribute("data-animation",l.animation):o.removeAttribute("data-animation"),l.inertia?o.setAttribute("data-inertia",""):o.removeAttribute("data-inertia"),o.style.maxWidth="number"==typeof l.maxWidth?l.maxWidth+"px":l.maxWidth,l.role?o.setAttribute("role",l.role):o.removeAttribute("role"),a.content===l.content&&a.allowHTML===l.allowHTML||Qe(n,e.props),l.arrow?r?a.arrow!==l.arrow&&(o.removeChild(r),o.appendChild(Je(l.arrow))):o.appendChild(Je(l.arrow)):r&&o.removeChild(r)}return l.className=pe,l.setAttribute("data-state","hidden"),Qe(l,e.props),t.appendChild(a),a.appendChild(l),i(e.props,e.props),{popper:t,onUpdate:i}}tt.$$tippy=!0 +var at=1,lt=[],it=[] +function ot(e,t){void 0===t&&(t={}) +var a=qe.plugins.concat(t.plugins||[]) +document.addEventListener("touchstart",je,be),window.addEventListener("blur",Ge) +var l,i=Object.assign({},t,{plugins:a}),o=(l=e,ke(l)?[l]:function(e){return Ae(e,"NodeList")}(l)?Le(l):Array.isArray(l)?l:Le(document.querySelectorAll(l))).reduce((function(e,t){var a=t&&function(e,t){var a,l,i,o,n,r,c,h,s=Ke(e,Object.assign({},qe,Ye(Ce(t)))),d=!1,u=!1,f=!1,v=!1,p=[],m=xe(Z,s.interactiveDebounce),y=at++,g=(h=s.plugins).filter((function(e,t){return h.indexOf(e)===t})),b={id:y,reference:e,popper:Ee(),popperInstance:null,props:s,state:{isEnabled:!0,isVisible:!1,isDestroyed:!1,isMounted:!1,isShown:!1},plugins:g,clearDelayTimeouts:function(){clearTimeout(a),clearTimeout(l),cancelAnimationFrame(i)},setProps:function(t){if(!b.state.isDestroyed){D("onBeforeUpdate",[b,t]),$() +var a=b.props,l=Ke(e,Object.assign({},a,Ce(t),{ignoreAttributes:!0})) +b.props=l,G(),a.interactiveDebounce!==l.interactiveDebounce&&(O(),m=xe(Z,l.interactiveDebounce)),a.triggerTarget&&!l.triggerTarget?Ve(a.triggerTarget).forEach((function(e){e.removeAttribute("aria-expanded")})):l.triggerTarget&&e.removeAttribute("aria-expanded"),F(),k(),A&&A(a,l),b.popperInstance&&(X(),Q().forEach((function(e){requestAnimationFrame(e._tippy.popperInstance.forceUpdate)}))),D("onAfterUpdate",[b,t])}},setContent:function(e){b.setProps({content:e})},show:function(){var e=b.state.isVisible,t=b.state.isDestroyed,a=!b.state.isEnabled,l=Ue.isTouch&&!b.props.touch,i=Me(b.props.duration,0,qe.duration) +if(!(e||t||a||l||B().hasAttribute("disabled")||(D("onShow",[b],!1),!1===b.props.onShow(b)))){if(b.state.isVisible=!0,_()&&(M.style.visibility="visible"),k(),U(),b.state.isMounted||(M.style.transition="none"),_()){var o=C() +Fe([o.box,o.content],0)}var n,c,h +r=function(){var e +if(b.state.isVisible&&!v){if(v=!0,M.offsetHeight,M.style.transition=b.props.moveTransition,_()&&b.props.animation){var t=C(),a=t.box,l=t.content +Fe([a,l],i),Oe([a,l],"visible")}S(),F(),_e(it,b),null==(e=b.popperInstance)||e.forceUpdate(),D("onMount",[b]),b.props.animation&&_()&&function(e,t){j(e,(function(){b.state.isShown=!0,D("onShown",[b])}))}(i)}},c=b.props.appendTo,h=B(),(n=b.props.interactive&&c===ze||"parent"===c?h.parentNode:we(c,[h])).contains(M)||n.appendChild(M),b.state.isMounted=!0,X()}},hide:function(){var e=!b.state.isVisible,t=b.state.isDestroyed,a=!b.state.isEnabled,l=Me(b.props.duration,1,qe.duration) +if(!(e||t||a)&&(D("onHide",[b],!1),!1!==b.props.onHide(b))){if(b.state.isVisible=!1,b.state.isShown=!1,v=!1,d=!1,_()&&(M.style.visibility="hidden"),O(),R(),k(!0),_()){var i=C(),o=i.box,n=i.content +b.props.animation&&(Fe([o,n],l),Oe([o,n],"hidden"))}S(),F(),b.props.animation?_()&&function(e,t){j(e,(function(){!b.state.isVisible&&M.parentNode&&M.parentNode.contains(M)&&t()}))}(l,b.unmount):b.unmount()}},hideWithInteractivity:function(e){L().addEventListener("mousemove",m),_e(lt,m),m(e)},enable:function(){b.state.isEnabled=!0},disable:function(){b.hide(),b.state.isEnabled=!1},unmount:function(){b.state.isVisible&&b.hide(),b.state.isMounted&&(J(),Q().forEach((function(e){e._tippy.unmount()})),M.parentNode&&M.parentNode.removeChild(M),it=it.filter((function(e){return e!==b})),b.state.isMounted=!1,D("onHidden",[b]))},destroy:function(){b.state.isDestroyed||(b.clearDelayTimeouts(),b.unmount(),$(),delete e._tippy,b.state.isDestroyed=!0,D("onDestroy",[b]))}} +if(!s.render)return b +var z=s.render(b),M=z.popper,A=z.onUpdate +M.setAttribute("data-tippy-root",""),M.id="tippy-"+b.id,b.popper=M,e._tippy=b,M._tippy=b +var w=g.map((function(e){return e.fn(b)})),x=e.hasAttribute("aria-expanded") +return G(),F(),k(),D("onCreate",[b]),s.showOnCreate&&ee(),M.addEventListener("mouseenter",(function(){b.props.interactive&&b.state.isVisible&&b.clearDelayTimeouts()})),M.addEventListener("mouseleave",(function(){b.props.interactive&&b.props.trigger.indexOf("mouseenter")>=0&&L().addEventListener("mousemove",m)})),b +function H(){var e=b.props.touch +return Array.isArray(e)?e:[e,0]}function V(){return"hold"===H()[0]}function _(){var e +return!(null==(e=b.props.render)||!e.$$tippy)}function B(){return c||e}function L(){var e=B().parentNode +return e?Te(e):document}function C(){return et(M)}function E(e){return b.state.isMounted&&!b.state.isVisible||Ue.isTouch||o&&"focus"===o.type?0:Me(b.props.delay,e?0:1,qe.delay)}function k(e){void 0===e&&(e=!1),M.style.pointerEvents=b.props.interactive&&!e?"":"none",M.style.zIndex=""+b.props.zIndex}function D(e,t,a){var l +void 0===a&&(a=!0),w.forEach((function(a){a[e]&&a[e].apply(a,t)})),a&&(l=b.props)[e].apply(l,t)}function S(){var t=b.props.aria +if(t.content){var a="aria-"+t.content,l=M.id +Ve(b.props.triggerTarget||e).forEach((function(e){var t=e.getAttribute(a) +if(b.state.isVisible)e.setAttribute(a,t?t+" "+l:l) +else{var i=t&&t.replace(l,"").trim() +i?e.setAttribute(a,i):e.removeAttribute(a)}}))}}function F(){!x&&b.props.aria.expanded&&Ve(b.props.triggerTarget||e).forEach((function(e){b.props.interactive?e.setAttribute("aria-expanded",b.state.isVisible&&e===B()?"true":"false"):e.removeAttribute("aria-expanded")}))}function O(){L().removeEventListener("mousemove",m),lt=lt.filter((function(e){return e!==m}))}function T(t){if(!Ue.isTouch||!f&&"mousedown"!==t.type){var a=t.composedPath&&t.composedPath()[0]||t.target +if(!b.props.interactive||!Ne(M,a)){if(Ve(b.props.triggerTarget||e).some((function(e){return Ne(e,a)}))){if(Ue.isTouch)return +if(b.state.isVisible&&b.props.trigger.indexOf("click")>=0)return}else D("onClickOutside",[b,t]) +!0===b.props.hideOnClick&&(b.clearDelayTimeouts(),b.hide(),u=!0,setTimeout((function(){u=!1})),b.state.isMounted||R())}}}function P(){f=!0}function N(){f=!1}function U(){var e=L() +e.addEventListener("mousedown",T,!0),e.addEventListener("touchend",T,be),e.addEventListener("touchstart",N,be),e.addEventListener("touchmove",P,be)}function R(){var e=L() +e.removeEventListener("mousedown",T,!0),e.removeEventListener("touchend",T,be),e.removeEventListener("touchstart",N,be),e.removeEventListener("touchmove",P,be)}function j(e,t){var a=C().box +function l(e){e.target===a&&(Pe(a,"remove",l),t())}if(0===e)return t() +Pe(a,"remove",n),Pe(a,"add",l),n=l}function I(t,a,l){void 0===l&&(l=!1),Ve(b.props.triggerTarget||e).forEach((function(e){e.addEventListener(t,a,l),p.push({node:e,eventType:t,handler:a,options:l})}))}function G(){var e +V()&&(I("touchstart",q,{passive:!0}),I("touchend",Y,{passive:!0})),(e=b.props.trigger,e.split(/\s+/).filter(Boolean)).forEach((function(e){if("manual"!==e)switch(I(e,q),e){case"mouseenter":I("mouseleave",Y) +break +case"focus":I($e?"focusout":"blur",K) +break +case"focusin":I("focusout",K)}}))}function $(){p.forEach((function(e){var t=e.node,a=e.eventType,l=e.handler,i=e.options +t.removeEventListener(a,l,i)})),p=[]}function q(e){var t,a=!1 +if(b.state.isEnabled&&!W(e)&&!u){var l="focus"===(null==(t=o)?void 0:t.type) +o=e,c=e.currentTarget,F(),!b.state.isVisible&&De(e)&<.forEach((function(t){return t(e)})),"click"===e.type&&(b.props.trigger.indexOf("mouseenter")<0||d)&&!1!==b.props.hideOnClick&&b.state.isVisible?a=!0:ee(e),"click"===e.type&&(d=!a),a&&!l&&te(e)}}function Z(e){var t=e.target,a=B().contains(t)||M.contains(t) +if("mousemove"!==e.type||!a){var l=Q().concat(M).map((function(e){var t,a=null==(t=e._tippy.popperInstance)?void 0:t.state +return a?{popperRect:e.getBoundingClientRect(),popperState:a,props:s}:null})).filter(Boolean);(function(e,t){var a=t.clientX,l=t.clientY +return e.every((function(e){var t=e.popperRect,i=e.popperState,o=e.props.interactiveBorder,n=Be(i.placement),r=i.modifiersData.offset +if(!r)return!0 +var c="bottom"===n?r.top.y:0,h="top"===n?r.bottom.y:0,s="right"===n?r.left.x:0,d="left"===n?r.right.x:0,u=t.top-l+c>o,f=l-t.bottom-h>o,v=t.left-a+s>o,p=a-t.right-d>o +return u||f||v||p}))})(l,e)&&(O(),te(e))}}function Y(e){W(e)||b.props.trigger.indexOf("click")>=0&&d||(b.props.interactive?b.hideWithInteractivity(e):te(e))}function K(e){b.props.trigger.indexOf("focusin")<0&&e.target!==B()||b.props.interactive&&e.relatedTarget&&M.contains(e.relatedTarget)||te(e)}function W(e){return!!Ue.isTouch&&V()!==e.type.indexOf("touch")>=0}function X(){J() +var t=b.props,a=t.popperOptions,l=t.placement,i=t.offset,o=t.getReferenceClientRect,n=t.moveTransition,c=_()?et(M).arrow:null,h=o?{getBoundingClientRect:o,contextElement:o.contextElement||B()}:e,s=[{name:"offset",options:{offset:i}},{name:"preventOverflow",options:{padding:{top:2,bottom:2,left:5,right:5}}},{name:"flip",options:{padding:5}},{name:"computeStyles",options:{adaptive:!n}},{name:"$$tippy",enabled:!0,phase:"beforeWrite",requires:["computeStyles"],fn:function(e){var t=e.state +if(_()){var a=C().box;["placement","reference-hidden","escaped"].forEach((function(e){"placement"===e?a.setAttribute("data-placement",t.placement):t.attributes.popper["data-popper-"+e]?a.setAttribute("data-"+e,""):a.removeAttribute("data-"+e)})),t.attributes.popper={}}}}] +_()&&c&&s.push({name:"arrow",options:{element:c,padding:3}}),s.push.apply(s,(null==a?void 0:a.modifiers)||[]),b.popperInstance=ue(h,M,Object.assign({},a,{placement:l,onFirstUpdate:r,modifiers:s}))}function J(){b.popperInstance&&(b.popperInstance.destroy(),b.popperInstance=null)}function Q(){return Le(M.querySelectorAll("[data-tippy-root]"))}function ee(e){b.clearDelayTimeouts(),e&&D("onTrigger",[b,e]),U() +var t=E(!0),l=H(),i=l[0],o=l[1] +Ue.isTouch&&"hold"===i&&o&&(t=o),t?a=setTimeout((function(){b.show()}),t):b.show()}function te(e){if(b.clearDelayTimeouts(),D("onUntrigger",[b,e]),b.state.isVisible){if(!(b.props.trigger.indexOf("mouseenter")>=0&&b.props.trigger.indexOf("click")>=0&&["mouseleave","mousemove"].indexOf(e.type)>=0&&d)){var t=E(!1) +t?l=setTimeout((function(){b.state.isVisible&&b.hide()}),t):i=requestAnimationFrame((function(){b.hide()}))}}else R()}}(t,i) +return a&&e.push(a),e}),[]) +return ke(e)?o[0]:o}ot.defaultProps=qe,ot.setDefaultProps=function(e){Object.keys(e).forEach((function(t){qe[t]=e[t]}))},ot.currentInput=Ue +var nt=function(e){var t=void 0===e?{}:e,a=t.exclude,l=t.duration +it.forEach((function(e){var t=!1 +if(a&&(t=Se(a)?e.reference===a:e.popper===a.popper),!t){var i=e.props.duration +e.setProps({duration:l}),e.hide(),e.state.isDestroyed||e.setProps({duration:i})}}))},rt=Object.assign({},J,{effect:function(e){var t=e.state,a={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}} +Object.assign(t.elements.popper.style,a.popper),t.styles=a,t.elements.arrow&&Object.assign(t.elements.arrow.style,a.arrow)}}),ct=function(e,t){var a +void 0===t&&(t={}) +var l,i=e,o=[],n=[],r=t.overrides,c=[],h=!1 +function s(){n=i.map((function(e){return Ve(e.props.triggerTarget||e.reference)})).reduce((function(e,t){return e.concat(t)}),[])}function d(){o=i.map((function(e){return e.reference}))}function u(e){i.forEach((function(t){e?t.enable():t.disable()}))}function f(e){return i.map((function(t){var a=t.setProps +return t.setProps=function(i){a(i),t.reference===l&&e.setProps(i)},function(){t.setProps=a}}))}function v(e,t){var a=n.indexOf(t) +if(t!==l){l=t +var c=(r||[]).concat("content").reduce((function(e,t){return e[t]=i[a].props[t],e}),{}) +e.setProps(Object.assign({},c,{getReferenceClientRect:"function"==typeof c.getReferenceClientRect?c.getReferenceClientRect:function(){var e +return null==(e=o[a])?void 0:e.getBoundingClientRect()}}))}}u(!1),d(),s() +var p={fn:function(){return{onDestroy:function(){u(!0)},onHidden:function(){l=null},onClickOutside:function(e){e.props.showOnCreate&&!h&&(h=!0,l=null)},onShow:function(e){e.props.showOnCreate&&!h&&(h=!0,v(e,o[0]))},onTrigger:function(e,t){v(e,t.currentTarget)}}}},m=ot(Ee(),Object.assign({},He(t,["overrides"]),{plugins:[p].concat(t.plugins||[]),triggerTarget:n,popperOptions:Object.assign({},t.popperOptions,{modifiers:[].concat((null==(a=t.popperOptions)?void 0:a.modifiers)||[],[rt])})})),y=m.show +m.show=function(e){if(y(),!l&&null==e)return v(m,o[0]) +if(!l||null!=e){if("number"==typeof e)return o[e]&&v(m,o[e]) +if(i.indexOf(e)>=0){var t=e.reference +return v(m,t)}return o.indexOf(e)>=0?v(m,e):void 0}},m.showNext=function(){var e=o[0] +if(!l)return m.show(0) +var t=o.indexOf(l) +m.show(o[t+1]||e)},m.showPrevious=function(){var e=o[o.length-1] +if(!l)return m.show(e) +var t=o.indexOf(l),a=o[t-1]||e +m.show(a)} +var g=m.setProps +return m.setProps=function(e){r=e.overrides||r,g(e)},m.setInstances=function(e){u(!0),c.forEach((function(e){return e()})),i=e,u(!1),d(),s(),c=f(m),m.setProps({triggerTarget:n})},c=f(m),m},ht={mouseover:"mouseenter",focusin:"focus",click:"click"} +function st(e,t){var a=[],l=[],i=!1,o=t.target,n=He(t,["target"]),r=Object.assign({},n,{trigger:"manual",touch:!1}),c=Object.assign({touch:qe.touch},n,{showOnCreate:!0}),h=ot(e,r) +function s(e){if(e.target&&!i){var a=e.target.closest(o) +if(a){var n=a.getAttribute("data-tippy-trigger")||t.trigger||qe.trigger +if(!a._tippy&&!("touchstart"===e.type&&"boolean"==typeof c.touch||"touchstart"!==e.type&&n.indexOf(ht[e.type])<0)){var r=ot(a,c) +r&&(l=l.concat(r))}}}}function d(e,t,l,i){void 0===i&&(i=!1),e.addEventListener(t,l,i),a.push({node:e,eventType:t,handler:l,options:i})}return Ve(h).forEach((function(e){var t=e.destroy,o=e.enable,n=e.disable +e.destroy=function(e){void 0===e&&(e=!0),e&&l.forEach((function(e){e.destroy()})),l=[],a.forEach((function(e){var t=e.node,a=e.eventType,l=e.handler,i=e.options +t.removeEventListener(a,l,i)})),a=[],t()},e.enable=function(){o(),l.forEach((function(e){return e.enable()})),i=!1},e.disable=function(){n(),l.forEach((function(e){return e.disable()})),i=!0},function(e){var t=e.reference +d(t,"touchstart",s,be),d(t,"mouseover",s),d(t,"focusin",s),d(t,"click",s)}(e)})),h}var dt={name:"animateFill",defaultValue:!1,fn:function(e){var t +if(null==(t=e.props.render)||!t.$$tippy)return{} +var a=et(e.popper),l=a.box,i=a.content,o=e.props.animateFill?function(){var e=Ee() +return e.className=me,Oe([e],"hidden"),e}():null +return{onCreate:function(){o&&(l.insertBefore(o,l.firstElementChild),l.setAttribute("data-animatefill",""),l.style.overflow="hidden",e.setProps({arrow:!1,animation:"shift-away"}))},onMount:function(){if(o){var e=l.style.transitionDuration,t=Number(e.replace("ms","")) +i.style.transitionDelay=Math.round(t/10)+"ms",o.style.transitionDuration=e,Oe([o],"visible")}},onShow:function(){o&&(o.style.transitionDuration="0ms")},onHide:function(){o&&Oe([o],"hidden")}}}},ut={clientX:0,clientY:0},ft=[] +function vt(e){var t=e.clientX,a=e.clientY +ut={clientX:t,clientY:a}}var pt={name:"followCursor",defaultValue:!1,fn:function(e){var t=e.reference,a=Te(e.props.triggerTarget||t),l=!1,i=!1,o=!0,n=e.props +function r(){return"initial"===e.props.followCursor&&e.state.isVisible}function c(){a.addEventListener("mousemove",d)}function h(){a.removeEventListener("mousemove",d)}function s(){l=!0,e.setProps({getReferenceClientRect:null}),l=!1}function d(a){var l=!a.target||t.contains(a.target),i=e.props.followCursor,o=a.clientX,n=a.clientY,r=t.getBoundingClientRect(),c=o-r.left,h=n-r.top +!l&&e.props.interactive||e.setProps({getReferenceClientRect:function(){var e=t.getBoundingClientRect(),a=o,l=n +"initial"===i&&(a=e.left+c,l=e.top+h) +var r="horizontal"===i?e.top:l,s="vertical"===i?e.right:a,d="horizontal"===i?e.bottom:l,u="vertical"===i?e.left:a +return{width:s-u,height:d-r,top:r,right:s,bottom:d,left:u}}})}function u(){e.props.followCursor&&(ft.push({instance:e,doc:a}),function(e){e.addEventListener("mousemove",vt)}(a))}function f(){0===(ft=ft.filter((function(t){return t.instance!==e}))).filter((function(e){return e.doc===a})).length&&function(e){e.removeEventListener("mousemove",vt)}(a)}return{onCreate:u,onDestroy:f,onBeforeUpdate:function(){n=e.props},onAfterUpdate:function(t,a){var o=a.followCursor +l||void 0!==o&&n.followCursor!==o&&(f(),o?(u(),!e.state.isMounted||i||r()||c()):(h(),s()))},onMount:function(){e.props.followCursor&&!i&&(o&&(d(ut),o=!1),r()||c())},onTrigger:function(e,t){De(t)&&(ut={clientX:t.clientX,clientY:t.clientY}),i="focus"===t.type},onHidden:function(){e.props.followCursor&&(s(),h(),o=!0)}}}},mt={name:"inlinePositioning",defaultValue:!1,fn:function(e){var t,a=e.reference,l=-1,i=!1,o=[],n={name:"tippyInlinePositioning",enabled:!0,phase:"afterWrite",fn:function(i){var n=i.state +e.props.inlinePositioning&&(-1!==o.indexOf(n.placement)&&(o=[]),t!==n.placement&&-1===o.indexOf(n.placement)&&(o.push(n.placement),e.setProps({getReferenceClientRect:function(){return function(e){return function(e,t,a,l){if(a.length<2||null===e)return t +if(2===a.length&&l>=0&&a[0].left>a[1].right)return a[l]||t +switch(e){case"top":case"bottom":var i=a[0],o=a[a.length-1],n="top"===e,r=i.top,c=o.bottom,h=n?i.left:o.left,s=n?i.right:o.right +return{top:r,bottom:c,left:h,right:s,width:s-h,height:c-r} +case"left":case"right":var d=Math.min.apply(Math,a.map((function(e){return e.left}))),u=Math.max.apply(Math,a.map((function(e){return e.right}))),f=a.filter((function(t){return"left"===e?t.left===d:t.right===u})),v=f[0].top,p=f[f.length-1].bottom +return{top:v,bottom:p,left:d,right:u,width:u-d,height:p-v} +default:return t}}(Be(e),a.getBoundingClientRect(),Le(a.getClientRects()),l)}(n.placement)}})),t=n.placement)}} +function r(){var t +i||(t=function(e,t){var a +return{popperOptions:Object.assign({},e.popperOptions,{modifiers:[].concat(((null==(a=e.popperOptions)?void 0:a.modifiers)||[]).filter((function(e){return e.name!==t.name})),[t])})}}(e.props,n),i=!0,e.setProps(t),i=!1)}return{onCreate:r,onAfterUpdate:r,onTrigger:function(t,a){if(De(a)){var i=Le(e.reference.getClientRects()),o=i.find((function(e){return e.left-2<=a.clientX&&e.right+2>=a.clientX&&e.top-2<=a.clientY&&e.bottom+2>=a.clientY})),n=i.indexOf(o) +l=n>-1?n:l}},onHidden:function(){l=-1}}}},yt={name:"sticky",defaultValue:!1,fn:function(e){var t=e.reference,a=e.popper +function l(t){return!0===e.props.sticky||e.props.sticky===t}var i=null,o=null +function n(){var r=l("reference")?(e.popperInstance?e.popperInstance.state.elements.reference:t).getBoundingClientRect():null,c=l("popper")?a.getBoundingClientRect():null;(r&>(i,r)||c&>(o,c))&&e.popperInstance&&e.popperInstance.update(),i=r,o=c,e.state.isMounted&&requestAnimationFrame(n)}return{onMount:function(){e.props.sticky&&n()}}}} +function gt(e,t){return!e||!t||e.top!==t.top||e.right!==t.right||e.bottom!==t.bottom||e.left!==t.left}ot.setDefaultProps({render:tt}) +const bt=ot},2985:(e,t,a)=>{"use strict" +a.d(t,{ZT:()=>i,ev:()=>n,pi:()=>o}) +var l=function(e,t){return l=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a])},l(e,t)} +function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null") +function a(){this.constructor=e}l(e,t),e.prototype=null===t?Object.create(t):(a.prototype=t.prototype,new a)}var o=function(){return o=Object.assign||function(e){for(var t,a=1,l=arguments.length;a{"use strict" +function l(e){return null!==e&&"object"==typeof e&&!(e instanceof Date||e instanceof RegExp)&&!Array.isArray(e)}a.r(t),a.d(t,{BufferedChangeset:()=>Ee,CHANGESET:()=>D,Change:()=>o,Changeset:()=>Se,Err:()=>c,ValidatedChangeset:()=>De,buildOldValues:()=>W,changeset:()=>ke,getChangeValue:()=>r,getDeep:()=>y,getKeyValues:()=>d,isChange:()=>n,isChangeset:()=>S,isObject:()=>l,isPromise:()=>f,keyInObject:()=>O,lookupValidator:()=>g,mergeDeep:()=>ie,mergeNested:()=>Y,normalizeObject:()=>H,objectWithout:()=>he,propertyIsUnsafe:()=>te,pureAssign:()=>_,setDeep:()=>q,take:()=>se}) +var i=Symbol("__value__"),o=function(e){this[i]=e},n=function(e){return l(e)&&i in e} +function r(e){if(n(e))return e[i]}var c=function(e,t){this.value=e,this.validation=t},h=function(e,t){var a="function"==typeof Symbol&&e[Symbol.iterator] +if(!a)return e +var l,i,o=a.call(e),n=[] +try{for(;(void 0===t||t-- >0)&&!(l=o.next()).done;)n.push(l.value)}catch(e){i={error:e}}finally{try{l&&!l.done&&(a=o.return)&&a.call(o)}finally{if(i)throw i.error}}return n},s=function(){for(var e=[],t=0;t0&&i[i.length-1])||6!==o[0]&&2!==o[0])){n=0 +continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0)&&!(l=o.next()).done;)n.push(l.value)}catch(e){i={error:e}}finally{try{l&&!l.done&&(a=o.return)&&a.call(o)}finally{if(i)throw i.error}}return n},z=function(){function e(){this.listeners=[]}return e.prototype.addListener=function(e){var t=this +return this.listeners.push(e),function(){return t.removeListener(e)}},e.prototype.removeListener=function(e){for(var t=0;t=e.length&&(e=void 0),{value:e&&e[l++],done:!e}}} +throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},x=function(){return x=Object.assign||function(e){for(var t,a=1,l=arguments.length;a=e.length&&(e=void 0),{value:e&&e[l++],done:!e}}} +throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},L=function(e,t){var a="function"==typeof Symbol&&e[Symbol.iterator] +if(!a)return e +var l,i,o=a.call(e),n=[] +try{for(;(void 0===t||t-- >0)&&!(l=o.next()).done;)n.push(l.value)}catch(e){i={error:e}}finally{try{l&&!l.done&&(a=o.return)&&a.call(o)}finally{if(i)throw i.error}}return n},C=function(){for(var e=[],t=0;t0)&&!(l=o.next()).done;)n.push(l.value)}catch(e){i={error:e}}finally{try{l&&!l.done&&(a=o.return)&&a.call(o)}finally{if(i)throw i.error}}return n} +function O(e,t){var a=F(t.split(".")),l=a[0],i=a.slice(1) +if(!l||!(l in e))return!1 +if(!i.length)return l in e +var o=e[l] +return null!==o&&"object"==typeof o&&O(e[l],i.join("."))}var T=function(e){var t="function"==typeof Symbol&&Symbol.iterator,a=t&&e[t],l=0 +if(a)return a.call(e) +if(e&&"number"==typeof e.length)return{next:function(){return e&&l>=e.length&&(e=void 0),{value:e&&e[l++],done:!e}}} +throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},P=function(e,t){var a="function"==typeof Symbol&&e[Symbol.iterator] +if(!a)return e +var l,i,o=a.call(e),n=[] +try{for(;(void 0===t||t-- >0)&&!(l=o.next()).done;)n.push(l.value)}catch(e){i={error:e}}finally{try{l&&!l.done&&(a=o.return)&&a.call(o)}finally{if(i)throw i.error}}return n} +function N(e){return!!e&&Object.keys(e).every((function(e){return Number.isInteger(parseInt(e,10))}))}function U(e){return e.reduce((function(e,t,a){return e[a]=t,e}),{})}function R(e){var t,a,l=[] +try{for(var i=T(Object.entries(e)),o=i.next();!o.done;o=i.next()){var n=P(o.value,2),r=n[0],c=n[1] +l[parseInt(r,10)]=c}}catch(e){t={error:e}}finally{try{o&&!o.done&&(a=i.return)&&a.call(i)}finally{if(t)throw t.error}}return l}var j=function(){return j=Object.assign||function(e){for(var t,a=1,l=arguments.length;a0)&&!(l=o.next()).done;)n.push(l.value)}catch(e){i={error:e}}finally{try{l&&!l.done&&(a=o.return)&&a.call(o)}finally{if(i)throw i.error}}return n} +function G(e,t){var a=I(t.slice(-1),1)[0],l=Object.keys(e).filter((function(e){return e!==a})).reduce((function(t,a){return t[a]=e[a],t}),Object.create(null)) +return j({},l)}function $(e){return"__proto__"!==e&&"constructor"!==e&&"prototype"!==e}function q(e,t,a,i){void 0===i&&(i={safeSet:void 0,safeGet:void 0}) +var c=function(e){return e.split(".")}(t).filter($),h=e +if(i.safeSet=i.safeSet||function(e,t,a){return e[t]=a},i.safeGet=i.safeGet||function(e,t){return e?e[t]:e},1===c.length)return i.safeSet(e,t,a),e +for(var s=0;s=e.length&&(e=void 0),{value:e&&e[l++],done:!e}}} +throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")} +function W(e,t,a){var l,i,o=Object.create(null) +try{for(var n=K(t),r=n.next();!r.done;r=n.next()){var c=r.value +o[c.key]=a(e,c.key)}}catch(e){l={error:e}}finally{try{r&&!r.done&&(i=n.return)&&i.call(n)}finally{if(l)throw l.error}}return o}var X=function(e,t){var a="function"==typeof Symbol&&e[Symbol.iterator] +if(!a)return e +var l,i,o=a.call(e),n=[] +try{for(;(void 0===t||t-- >0)&&!(l=o.next()).done;)n.push(l.value)}catch(e){i={error:e}}finally{try{l&&!l.done&&(a=o.return)&&a.call(o)}finally{if(i)throw i.error}}return n},J=function(){for(var e=[],t=0;t0)for(l in i){var o=i[l] +a.safeSet(e,l,o)}}}else{if(!ee(e,l)||!function(e){return!!e&&"object"==typeof e}(h=t[l])||function(e){var t=Object.prototype.toString.call(e) +return"[object RegExp]"===t||"[object Date]"===t}(h)||n(t[l])){var c=t[l] +return c&&n(c)?a.safeSet(e,l,r(c)):a.safeSet(e,l,H(c))}a.safeSet(e,l,ie(a.safeGet(e,l),a.safeGet(t,l),a))}var h})),e}function ie(e,t,a){void 0===a&&(a={safeGet:void 0,safeSet:void 0,propertyIsUnsafe:void 0,getKeys:void 0}),a.getKeys=a.getKeys||Q,a.propertyIsUnsafe=a.propertyIsUnsafe||te,a.safeGet=a.safeGet||function(e,t){return e[t]},a.safeSet=a.safeSet||function(e,t,a){return e[t]=a} +var l=Array.isArray(t),i=Array.isArray(e) +if(l===i)return l||null==e?t:le(e,t,a) +var o=N(t) +return i&&o?R(le(U(e),t,a)):t}var oe=function(){return oe=Object.assign||function(e){for(var t,a=1,l=arguments.length;a0&&i[i.length-1])||6!==o[0]&&2!==o[0])){n=0 +continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0)&&!(l=o.next()).done;)n.push(l.value)}catch(e){i={error:e}}finally{try{l&&!l.done&&(a=o.return)&&a.call(o)}finally{if(i)throw i.error}}return n},pe=function(){for(var e=[],t=0;t0)||l.find((function(t){return e.match(t)}))){var i=this[ye],o=this.safeGet(i,e) +if(a.skipValidate)return this._setProperty({key:e,value:t,oldValue:o}),void this._handleValidation(!0,{key:e,value:t}) +this._setProperty({key:e,value:t,oldValue:o}),this._validateKey(e,t)}},Object.defineProperty(e.prototype,Symbol.toStringTag,{get:function(){return"changeset:"+_(this[ye],{}).toString()},enumerable:!1,configurable:!0}),e.prototype.toString=function(){return"changeset:"+_(this[ye],{}).toString()},e.prototype.prepare=function(e){var t=e(this._bareChanges) +if(Le("Callback to `changeset.prepare` must return an object",this.isObject(t)),this.isObject(t)){var a=me(t).reduce((function(e,a){return e[a]=new o(t[a]),e}),{}) +this[be]=a}return this},e.prototype.execute=function(){var e +if(this.isValid&&this.isDirty){var t=this[ye],a=this[be] +e=W(t,this.changes,this.getDeep),this[ye]=this.mergeDeep(t,a)}return this.trigger("execute"),this[be]={},this[ge]=e,this},e.prototype.unexecute=function(){return this[ge]&&(this[ye]=this.mergeDeep(this[ye],this[ge],{safeGet:this.safeGet,safeSet:this.safeSet})),this},e.prototype.save=function(e){return ue(this,void 0,void 0,(function(){var t,a,l,i +return fe(this,(function(o){switch(o.label){case 0:t=this[ye],a=Promise.resolve(this),this.execute(),"function"==typeof t.save?a=t.save(e):"function"==typeof this.safeGet(t,"save")&&(l=this.maybeUnwrapProxy(t).save())&&(a=l),o.label=1 +case 1:return o.trys.push([1,3,,4]),[4,a] +case 2:return i=o.sent(),this.rollback(),[2,i] +case 3:throw o.sent() +case 4:return[2]}}))}))},e.prototype.merge=function(e){var t=this[ye] +if(Le("Cannot merge with a non-changeset",S(e)),Le("Cannot merge with a changeset of different content",e[ye]===t),this.isPristine&&e.isPristine)return this +var a=this[be],l=e[be],i=this[ze],o=e[ze],n=new De(t,this[Ae]),r=he(me(l),i),c=he(me(o),a),h=Y(r,o),s=Y(c,l) +return n[ze]=h,n[be]=s,n._notifyVirtualProperties(),n},e.prototype.rollback=function(){var e=this._rollbackKeys() +return this[be]={},this[ze]={},this[Me]={},this._notifyVirtualProperties(e),this.trigger("afterRollback"),this},e.prototype.rollbackInvalid=function(e){var t=this,a=me(this[ze]) +return e?(this._notifyVirtualProperties([e]),this[ze]=this._deleteKey(ze,e),this[Me]=this[ze],a.indexOf(e)>-1&&(this[be]=this._deleteKey(be,e))):(this._notifyVirtualProperties(),this[ze]={},this[Me]=this[ze],a.forEach((function(e){t[be]=t._deleteKey(be,e)}))),this},e.prototype.rollbackProperty=function(e){return this[be]=this._deleteKey(be,e),this[ze]=this._deleteKey(ze,e),this[Me]=this[ze],this},e.prototype.validate=function(){for(var e=[],t=0;t0?e:me(k(this.validationMap)),t=e.map((function(e){var t=a[e],l=t instanceof ce?t.unwrap():t +return a._validateKey(e,l)})),[2,Promise.all(t)]):[2,Promise.resolve(null)]}))}))},e.prototype.addError=function(e,t){var a,l=this +if(function(e){return l.isObject(e)&&!Array.isArray(e)}(t))Le("Error must have value.",t.hasOwnProperty("value")||void 0!==t.value),Le("Error must have validation.",t.hasOwnProperty("validation")),a=new c(t.value,t.validation) +else{var i=this[e] +a=new c(i,t)}var o=this[ze] +return this[ze]=this.setDeep(o,e,a,{safeSet:this.safeSet}),this[Me]=this[ze],t},e.prototype.pushErrors=function(e){for(var t=[],a=1;a0},e.prototype._validateKey=function(e,t){var a=this,l=this[ye],i=this.getDeep(l,e),o=this._validate(e,t,i) +if(this.trigger("beforeValidation",e),f(o)){this._setIsValidating(e,o) +var n=this[xe],r=Object.entries(n) +return Promise.all(r).then((function(){return o.then((function(l){return delete n[e],a._handleValidation(l,{key:e,value:t})})).then((function(t){return a.trigger(He,e),t}))}))}var c=this._handleValidation(o,{key:e,value:t}) +return this.trigger(He,e),c},e.prototype._handleValidation=function(e,t){var a=t.key,l=t.value,i=!0===e||Array.isArray(e)&&1===e.length&&!0===e[0] +return this[ze]=this._deleteKey(Me,a),i?l:this.addError(a,{value:l,validation:e})},e.prototype._validate=function(e,t,a){var l=this[Ae],i=this[ye] +if("function"==typeof l){var o=l({key:e,newValue:t,oldValue:a,changes:this.change,content:i}) +return void 0===o||o}return!0},e.prototype._setProperty=function(e){var t,a,l=e.key,i=e.value,n=e.oldValue,r=this[be] +if(a=n,((t=i)instanceof Date&&a instanceof Date?t.getTime()===a.getTime():t===a)&&void 0!==n)O(r,l)&&(this[be]=this._deleteKey(be,l)) +else{var c=this.setDeep(r,l,new o(i),{safeSet:this.safeSet}) +this[be]=c}},e.prototype._setIsValidating=function(e,t){var a=this[xe] +this.setDeep(a,e,t)},e.prototype._notifyVirtualProperties=function(e){return e||(e=this._rollbackKeys()),e},e.prototype._rollbackKeys=function(){var e=this[be],t=this[ze] +return pe(new Set(pe(me(e),me(t))))},e.prototype._deleteKey=function(e,t){void 0===t&&(t="") +var a=this[e],l=t.split(".") +if(1===l.length&&a.hasOwnProperty(t))delete a[t] +else if(a[l[0]])for(var i=ve(l),o=i[0],r=i.slice(1),c=a,h=a[o],s=o;this.isObject(h)&&s;){var d=h;(n(d)||void 0!==d.value||d.validation)&&delete c[s],c=h,(s=r.shift())&&(h=h[s])}return a},e.prototype.get=function(e){var t=ve(e.split(".")),a=t[0],i=t.slice(1),o=this[be],c=this[ye] +if(Object.prototype.hasOwnProperty.call(o,a)){var h=this.getDeep(o,e) +if(!this.isObject(h)&&void 0!==h)return h}if(Object.prototype.hasOwnProperty.call(o,a)&&V(o)){var s=o[a],d=H(s) +if(this.isObject(d)){var u=this.maybeUnwrapProxy(this.getDeep(d,i.join("."))) +if(void 0===u&&function(e,t,a){var l,i +if(n(e))return!1 +var o=t.split("."),r=e +try{for(var c=w(o),h=c.next();!h.done;h=c.next()){var s=h.value +if(!r)return!1 +if(o[o.length-1]!==s&&n(a(r,s)))return!0 +r=a(r,s)}}catch(e){l={error:e}}finally{try{h&&!h.done&&(i=c.return)&&i.call(c)}finally{if(l)throw l.error}}return!1}(o,e,this.safeGet)&&!function(e,t,a){var l,i,o=t.split("."),c=e +try{for(var h=w(o),s=h.next();!s.done;s=h.next()){var d=s.value +if(!c||!Object.prototype.hasOwnProperty.call(c,d))return!1 +c=a(c,d),n(c)&&(c=r(c))}}catch(e){l={error:e}}finally{try{s&&!s.done&&(i=h.return)&&i.call(h)}finally{if(l)throw l.error}}return!0}(o,e,this.safeGet)&&this.getDeep(c,e))return +if(this.isObject(u)){if(n(u))return r(u) +var f=this.safeGet(c,a)||{},v=this.getDeep(f,i.join(".")),p=function(e,t){var a=e +if(-1===t.indexOf("."))return a[t] +for(var l="string"==typeof t?t.split("."):t,i=0;i{var l=a(4977),i=a(5689) +e.exports=function e(t){if(!(this instanceof e))return new e(t) +var a=(t||"").replace(/^\//,""),o=i() +return n._trie=o,n.on=function(e,t){if(l.equal(typeof e,"string"),l.equal(typeof t,"function"),e=e||"/",t._wayfarer&&t._trie)o.mount(e,t._trie.trie) +else{var a=o.create(e) +a.cb=t,a.route=e}return n},n.emit=n,n.match=r,n._wayfarer=!0,n +function n(e){var t=r(e),a=new Array(arguments.length) +a[0]=t.params +for(var l=1;l{var l=a(4977) +function i(){if(!(this instanceof i))return new i +this.trie={nodes:{}}}function o(e,t){return Object.prototype.hasOwnProperty.call(e,t)}e.exports=i,i.prototype.create=function(e){l.equal(typeof e,"string","route should be a string") +var t=e.replace(/^\//,"").split("/") +return function e(a,l){var i=o(t,a)&&t[a] +if(!1===i)return l +var n=null +return/^:|^\*/.test(i)?(o(l.nodes,"$$")?n=l.nodes.$$:(n={nodes:{}},l.nodes.$$=n),"*"===i[0]&&(l.wildcard=!0),l.name=i.replace(/^:|^\*/,"")):o(l.nodes,i)?n=l.nodes[i]:(n={nodes:{}},l.nodes[i]=n),e(a+1,n)}(0,this.trie)},i.prototype.match=function(e){l.equal(typeof e,"string","route should be a string") +var t=e.replace(/^\//,"").split("/"),a={},i=function e(l,i){if(void 0!==i){var n=t[l] +if(void 0===n)return i +if(o(i.nodes,n))return e(l+1,i.nodes[n]) +if(i.name){try{a[i.name]=decodeURIComponent(n)}catch(t){return e(l,void 0)}return e(l+1,i.nodes.$$)}if(i.wildcard){try{a.wildcard=decodeURIComponent(t.slice(l).join("/"))}catch(t){return e(l,void 0)}return i.nodes.$$}return e(l+1)}}(0,this.trie) +if(i)return(i=Object.assign({},i)).params=a,i},i.prototype.mount=function(e,t){l.equal(typeof e,"string","route should be a string"),l.equal(typeof t,"object","trie should be a object") +var a=e.replace(/^\//,"").split("/"),i=null,o=null +if(1===a.length)o=a[0],i=this.create(o) +else{var n=a.join("/") +o=a[0],i=this.create(n)}Object.assign(i.nodes,t.nodes),t.name&&(i.name=t.name),i.nodes[""]&&(Object.keys(i.nodes[""]).forEach((function(e){"nodes"!==e&&(i[e]=i.nodes[""][e])})),Object.assign(i.nodes,i.nodes[""].nodes),delete i.nodes[""].nodes)}},2959:(e,t,a)=>{"use strict" +a.r(t)},8531:(e,t,a)=>{"use strict" +a.r(t),a.d(t,{CSSResult:()=>r,ReactiveElement:()=>z,adoptStyles:()=>s,css:()=>h,defaultConverter:()=>y,getCompatibleStyle:()=>d,notEqual:()=>g,supportsAdoptingStyleSheets:()=>i,unsafeCSS:()=>c}) +const l=window,i=l.ShadowRoot&&(void 0===l.ShadyCSS||l.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,o=Symbol(),n=new WeakMap +class r{constructor(e,t,a){if(this._$cssResult$=!0,a!==o)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.") +this.cssText=e,this.t=t}get styleSheet(){let e=this.o +const t=this.t +if(i&&void 0===e){const a=void 0!==t&&1===t.length +a&&(e=n.get(t)),void 0===e&&((this.o=e=new CSSStyleSheet).replaceSync(this.cssText),a&&n.set(t,e))}return e}toString(){return this.cssText}}const c=e=>new r("string"==typeof e?e:e+"",void 0,o),h=function(e){for(var t=arguments.length,a=new Array(t>1?t-1:0),l=1;lt+(e=>{if(!0===e._$cssResult$)return e.cssText +if("number"==typeof e)return e +throw Error("Value passed to 'css' function must be a 'css' function result: "+e+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(a)+e[l+1]),e[0]) +return new r(i,e,o)},s=(e,t)=>{i?e.adoptedStyleSheets=t.map((e=>e instanceof CSSStyleSheet?e:e.styleSheet)):t.forEach((t=>{const a=document.createElement("style"),i=l.litNonce +void 0!==i&&a.setAttribute("nonce",i),a.textContent=t.cssText,e.appendChild(a)}))},d=i?e=>e:e=>e instanceof CSSStyleSheet?(e=>{let t="" +for(const a of e.cssRules)t+=a.cssText +return c(t)})(e):e +var u +const f=window,v=f.trustedTypes,p=v?v.emptyScript:"",m=f.reactiveElementPolyfillSupport,y={toAttribute(e,t){switch(t){case Boolean:e=e?p:null +break +case Object:case Array:e=null==e?e:JSON.stringify(e)}return e},fromAttribute(e,t){let a=e +switch(t){case Boolean:a=null!==e +break +case Number:a=null===e?null:Number(e) +break +case Object:case Array:try{a=JSON.parse(e)}catch(e){a=null}}return a}},g=(e,t)=>t!==e&&(t==t||e==e),b={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:g} +class z extends HTMLElement{constructor(){super(),this._$Ei=new Map,this.isUpdatePending=!1,this.hasUpdated=!1,this._$El=null,this.u()}static addInitializer(e){var t +this.finalize(),(null!==(t=this.h)&&void 0!==t?t:this.h=[]).push(e)}static get observedAttributes(){this.finalize() +const e=[] +return this.elementProperties.forEach(((t,a)=>{const l=this._$Ep(a,t) +void 0!==l&&(this._$Ev.set(l,a),e.push(l))})),e}static createProperty(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:b +if(t.state&&(t.attribute=!1),this.finalize(),this.elementProperties.set(e,t),!t.noAccessor&&!this.prototype.hasOwnProperty(e)){const a="symbol"==typeof e?Symbol():"__"+e,l=this.getPropertyDescriptor(e,a,t) +void 0!==l&&Object.defineProperty(this.prototype,e,l)}}static getPropertyDescriptor(e,t,a){return{get(){return this[t]},set(l){const i=this[e] +this[t]=l,this.requestUpdate(e,i,a)},configurable:!0,enumerable:!0}}static getPropertyOptions(e){return this.elementProperties.get(e)||b}static finalize(){if(this.hasOwnProperty("finalized"))return!1 +this.finalized=!0 +const e=Object.getPrototypeOf(this) +if(e.finalize(),void 0!==e.h&&(this.h=[...e.h]),this.elementProperties=new Map(e.elementProperties),this._$Ev=new Map,this.hasOwnProperty("properties")){const e=this.properties,t=[...Object.getOwnPropertyNames(e),...Object.getOwnPropertySymbols(e)] +for(const a of t)this.createProperty(a,e[a])}return this.elementStyles=this.finalizeStyles(this.styles),!0}static finalizeStyles(e){const t=[] +if(Array.isArray(e)){const a=new Set(e.flat(1/0).reverse()) +for(const e of a)t.unshift(d(e))}else void 0!==e&&t.push(d(e)) +return t}static _$Ep(e,t){const a=t.attribute +return!1===a?void 0:"string"==typeof a?a:"string"==typeof e?e.toLowerCase():void 0}u(){var e +this._$E_=new Promise((e=>this.enableUpdating=e)),this._$AL=new Map,this._$Eg(),this.requestUpdate(),null===(e=this.constructor.h)||void 0===e||e.forEach((e=>e(this)))}addController(e){var t,a;(null!==(t=this._$ES)&&void 0!==t?t:this._$ES=[]).push(e),void 0!==this.renderRoot&&this.isConnected&&(null===(a=e.hostConnected)||void 0===a||a.call(e))}removeController(e){var t +null===(t=this._$ES)||void 0===t||t.splice(this._$ES.indexOf(e)>>>0,1)}_$Eg(){this.constructor.elementProperties.forEach(((e,t)=>{this.hasOwnProperty(t)&&(this._$Ei.set(t,this[t]),delete this[t])}))}createRenderRoot(){var e +const t=null!==(e=this.shadowRoot)&&void 0!==e?e:this.attachShadow(this.constructor.shadowRootOptions) +return s(t,this.constructor.elementStyles),t}connectedCallback(){var e +void 0===this.renderRoot&&(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),null===(e=this._$ES)||void 0===e||e.forEach((e=>{var t +return null===(t=e.hostConnected)||void 0===t?void 0:t.call(e)}))}enableUpdating(e){}disconnectedCallback(){var e +null===(e=this._$ES)||void 0===e||e.forEach((e=>{var t +return null===(t=e.hostDisconnected)||void 0===t?void 0:t.call(e)}))}attributeChangedCallback(e,t,a){this._$AK(e,a)}_$EO(e,t){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:b +var l +const i=this.constructor._$Ep(e,a) +if(void 0!==i&&!0===a.reflect){const o=(void 0!==(null===(l=a.converter)||void 0===l?void 0:l.toAttribute)?a.converter:y).toAttribute(t,a.type) +this._$El=e,null==o?this.removeAttribute(i):this.setAttribute(i,o),this._$El=null}}_$AK(e,t){var a +const l=this.constructor,i=l._$Ev.get(e) +if(void 0!==i&&this._$El!==i){const e=l.getPropertyOptions(i),o="function"==typeof e.converter?{fromAttribute:e.converter}:void 0!==(null===(a=e.converter)||void 0===a?void 0:a.fromAttribute)?e.converter:y +this._$El=i,this[i]=o.fromAttribute(t,e.type),this._$El=null}}requestUpdate(e,t,a){let l=!0 +void 0!==e&&(((a=a||this.constructor.getPropertyOptions(e)).hasChanged||g)(this[e],t)?(this._$AL.has(e)||this._$AL.set(e,t),!0===a.reflect&&this._$El!==e&&(void 0===this._$EC&&(this._$EC=new Map),this._$EC.set(e,a))):l=!1),!this.isUpdatePending&&l&&(this._$E_=this._$Ej())}async _$Ej(){this.isUpdatePending=!0 +try{await this._$E_}catch(e){Promise.reject(e)}const e=this.scheduleUpdate() +return null!=e&&await e,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){var e +if(!this.isUpdatePending)return +this.hasUpdated,this._$Ei&&(this._$Ei.forEach(((e,t)=>this[t]=e)),this._$Ei=void 0) +let t=!1 +const a=this._$AL +try{t=this.shouldUpdate(a),t?(this.willUpdate(a),null===(e=this._$ES)||void 0===e||e.forEach((e=>{var t +return null===(t=e.hostUpdate)||void 0===t?void 0:t.call(e)})),this.update(a)):this._$Ek()}catch(e){throw t=!1,this._$Ek(),e}t&&this._$AE(a)}willUpdate(e){}_$AE(e){var t +null===(t=this._$ES)||void 0===t||t.forEach((e=>{var t +return null===(t=e.hostUpdated)||void 0===t?void 0:t.call(e)})),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(e)),this.updated(e)}_$Ek(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$E_}shouldUpdate(e){return!0}update(e){void 0!==this._$EC&&(this._$EC.forEach(((e,t)=>this._$EO(t,this[t],e))),this._$EC=void 0),this._$Ek()}updated(e){}firstUpdated(e){}}z.finalized=!0,z.elementProperties=new Map,z.elementStyles=[],z.shadowRootOptions={mode:"open"},null==m||m({ReactiveElement:z}),(null!==(u=f.reactiveElementVersions)&&void 0!==u?u:f.reactiveElementVersions=[]).push("1.6.1")}}]) diff --git a/agent/uiserver/dist/assets/chunk.412.2df22e4bf69d8f15ebdb.js.LICENSE.txt b/agent/uiserver/dist/assets/chunk.924.719761ac5e77d019056f.js.LICENSE.txt similarity index 97% rename from agent/uiserver/dist/assets/chunk.412.2df22e4bf69d8f15ebdb.js.LICENSE.txt rename to agent/uiserver/dist/assets/chunk.924.719761ac5e77d019056f.js.LICENSE.txt index b25e5082df0fb..987cdda7ee183 100644 --- a/agent/uiserver/dist/assets/chunk.412.2df22e4bf69d8f15ebdb.js.LICENSE.txt +++ b/agent/uiserver/dist/assets/chunk.924.719761ac5e77d019056f.js.LICENSE.txt @@ -1,5 +1,5 @@ /*! - * clipboard.js v2.0.8 + * clipboard.js v2.0.11 * https://clipboardjs.com/ * * Licensed MIT © Zeno Rocha diff --git a/agent/uiserver/dist/assets/codemirror/mode/javascript/javascript-a5e5d64b0f9ff6b6e21f5f48aa1ef464.js b/agent/uiserver/dist/assets/codemirror/mode/javascript/javascript-a5e5d64b0f9ff6b6e21f5f48aa1ef464.js index 4da59f70de85c..d852d63f92991 100644 --- a/agent/uiserver/dist/assets/codemirror/mode/javascript/javascript-a5e5d64b0f9ff6b6e21f5f48aa1ef464.js +++ b/agent/uiserver/dist/assets/codemirror/mode/javascript/javascript-a5e5d64b0f9ff6b6e21f5f48aa1ef464.js @@ -93,44 +93,45 @@ if(f.test(i)){e.eatWhile(f) var a=e.current(),s=h.propertyIsEnumerable(a)&&h[a] return s&&"."!=r.lastType?y(s.type,s.style,a):y("variable","variable",a)}}function v(e,t){for(var r,n=!1;r=e.next();){if("/"==r&&n){t.tokenize=m break}n="*"==r}return y("comment","comment")}function g(e,t){for(var r,n=!1;null!=(r=e.next());){if(!n&&("`"==r||"$"==r&&e.eat("{"))){t.tokenize=m -break}n=!n&&"\\"==r}return y("quasi","string-2",e.current())}function x(e,t){t.fatArrowAt&&(t.fatArrowAt=null) +break}n=!n&&"\\"==r}return y("quasi","string-2",e.current())}var x="([{}])" +function b(e,t){t.fatArrowAt&&(t.fatArrowAt=null) var r=e.string.indexOf("=>",e.start) -if(!(r<0)){for(var n=0,i=!1,a=r-1;a>=0;--a){var s=e.string.charAt(a),o="([{}])".indexOf(s) +if(!(r<0)){for(var n=0,i=!1,a=r-1;a>=0;--a){var s=e.string.charAt(a),o=x.indexOf(s) if(o>=0&&o<3){if(!n){++a break}if(0==--n)break}else if(o>=3&&o<6)++n else if(f.test(s))i=!0 else{if(/["'\/]/.test(s))return if(i&&!n){++a -break}}}i&&!n&&(t.fatArrowAt=a)}}var b={atom:!0,number:!0,variable:!0,string:!0,regexp:!0,this:!0,"jsonld-keyword":!0} -function k(e,t,r,n,i,a){this.indented=e,this.column=t,this.type=r,this.prev=i,this.info=a,null!=n&&(this.align=n)}function w(e,t){for(var r=e.localVars;r;r=r.next)if(r.name==t)return!0 -for(var n=e.context;n;n=n.prev)for(r=n.vars;r;r=r.next)if(r.name==t)return!0}var _={state:null,column:null,marked:null,cc:null} -function E(){for(var e=arguments.length-1;e>=0;e--)_.cc.push(arguments[e])}function j(){return E.apply(null,arguments),!0}function S(e){function t(t){for(var r=t;r;r=r.next)if(r.name==e)return!0 -return!1}var r=_.state -if(_.marked="def",r.context){if(t(r.localVars))return +break}}}i&&!n&&(t.fatArrowAt=a)}}var k={atom:!0,number:!0,variable:!0,string:!0,regexp:!0,this:!0,"jsonld-keyword":!0} +function w(e,t,r,n,i,a){this.indented=e,this.column=t,this.type=r,this.prev=i,this.info=a,null!=n&&(this.align=n)}function _(e,t){for(var r=e.localVars;r;r=r.next)if(r.name==t)return!0 +for(var n=e.context;n;n=n.prev)for(r=n.vars;r;r=r.next)if(r.name==t)return!0}var E={state:null,column:null,marked:null,cc:null} +function j(){for(var e=arguments.length-1;e>=0;e--)E.cc.push(arguments[e])}function S(){return j.apply(null,arguments),!0}function I(e){function t(t){for(var r=t;r;r=r.next)if(r.name==e)return!0 +return!1}var r=E.state +if(E.marked="def",r.context){if(t(r.localVars))return r.localVars={name:e,next:r.localVars}}else{if(t(r.globalVars))return -n.globalVars&&(r.globalVars={name:e,next:r.globalVars})}}var I={name:"this",next:{name:"arguments"}} -function $(){_.state.context={prev:_.state.context,vars:_.state.localVars},_.state.localVars=I}function A(){_.state.localVars=_.state.context.vars,_.state.context=_.state.context.prev}function M(e,t){var r=function(){var r=_.state,n=r.indented +n.globalVars&&(r.globalVars={name:e,next:r.globalVars})}}var $={name:"this",next:{name:"arguments"}} +function A(){E.state.context={prev:E.state.context,vars:E.state.localVars},E.state.localVars=$}function M(){E.state.localVars=E.state.context.vars,E.state.context=E.state.context.prev}function N(e,t){var r=function(){var r=E.state,n=r.indented if("stat"==r.lexical.type)n=r.lexical.indented else for(var i=r.lexical;i&&")"==i.type&&i.align;i=i.prev)n=i.indented -r.lexical=new k(n,_.stream.column(),e,null,r.lexical,t)} -return r.lex=!0,r}function N(){var e=_.state -e.lexical.prev&&(")"==e.lexical.type&&(e.indented=e.lexical.indented),e.lexical=e.lexical.prev)}function O(e){return function t(r){return r==e?j():";"==e?E():j(t)}}function V(e,t){return"var"==e?j(M("vardef",t.length),ae,O(";"),N):"keyword a"==e?j(M("form"),T,V,N):"keyword b"==e?j(M("form"),V,N):"{"==e?j(M("}"),ee,N):";"==e?j():"if"==e?("else"==_.state.lexical.info&&_.state.cc[_.state.cc.length-1]==N&&_.state.cc.pop()(),j(M("form"),T,V,N,ue)):"function"==e?j(me):"for"==e?j(M("form"),fe,V,N):"variable"==e?j(M("stat"),D):"switch"==e?j(M("form"),T,M("}","switch"),O("{"),ee,N,N):"case"==e?j(T,O(":")):"default"==e?j(O(":")):"catch"==e?j(M("form"),$,O("("),ve,O(")"),V,N,A):"class"==e?j(M("form"),ge,N):"export"==e?j(M("stat"),we,N):"import"==e?j(M("stat"),_e,N):"module"==e?j(M("form"),se,M("}"),O("{"),ee,N,N):"async"==e?j(V):E(M("stat"),T,O(";"),N)}function T(e){return L(e,!1)}function z(e){return L(e,!0)}function L(e,t){if(_.state.fatArrowAt==_.stream.start){var r=t?W:C -if("("==e)return j($,M(")"),Y(se,")"),N,O("=>"),r,A) -if("variable"==e)return E($,se,O("=>"),r,A)}var n=t?F:J -return b.hasOwnProperty(e)?j(n):"function"==e?j(me,n):"keyword c"==e?j(t?P:q):"("==e?j(M(")"),q,Ae,O(")"),N,n):"operator"==e||"spread"==e?j(t?z:T):"["==e?j(M("]"),Ie,N,n):"{"==e?Z(K,"}",null,n):"quasi"==e?E(U,n):"new"==e?j(function(e){return function(t){return"."==t?j(e?G:B):E(e?z:T)}}(t)):j()}function q(e){return e.match(/[;\}\)\],]/)?E():E(T)}function P(e){return e.match(/[;\}\)\],]/)?E():E(z)}function J(e,t){return","==e?j(T):F(e,t,!1)}function F(e,t,r){var n=0==r?J:F,i=0==r?T:z -return"=>"==e?j($,r?W:C,A):"operator"==e?/\+\+|--/.test(t)?j(n):"?"==t?j(T,O(":"),i):j(i):"quasi"==e?E(U,n):";"!=e?"("==e?Z(z,")","call",n):"."==e?j(H,n):"["==e?j(M("]"),q,O("]"),N,n):void 0:void 0}function U(e,t){return"quasi"!=e?E():"${"!=t.slice(t.length-2)?j(U):j(T,R)}function R(e){if("}"==e)return _.marked="string-2",_.state.tokenize=g,j(U)}function C(e){return x(_.stream,_.state),E("{"==e?V:T)}function W(e){return x(_.stream,_.state),E("{"==e?V:z)}function B(e,t){if("target"==t)return _.marked="keyword",j(J)}function G(e,t){if("target"==t)return _.marked="keyword",j(F)}function D(e){return":"==e?j(N,V):E(J,O(";"),N)}function H(e){if("variable"==e)return _.marked="property",j()}function K(e,t){return"variable"==e||"keyword"==_.style?(_.marked="property",j("get"==t||"set"==t?Q:X)):"number"==e||"string"==e?(_.marked=l?"property":_.style+" property",j(X)):"jsonld-keyword"==e?j(X):"modifier"==e?j(K):"["==e?j(T,O("]"),X):"spread"==e?j(T):void 0}function Q(e){return"variable"!=e?E(X):(_.marked="property",j(me))}function X(e){return":"==e?j(z):"("==e?E(me):void 0}function Y(e,t){function r(n,i){if(","==n){var a=_.state.lexical -return"call"==a.info&&(a.pos=(a.pos||0)+1),j(e,r)}return n==t||i==t?j():j(O(t))}return function(n,i){return n==t||i==t?j():E(e,r)}}function Z(e,t,r){for(var n=3;n"),ie):"["==e?j(O("]"),ie):void 0}function ae(){return E(se,te,le,ce)}function se(e,t){return"modifier"==e?j(se):"variable"==e?(S(t),j()):"spread"==e?j(se):"["==e?Z(se,"]"):"{"==e?Z(oe,"}"):void 0}function oe(e,t){return"variable"!=e||_.stream.match(/^\s*:/,!1)?("variable"==e&&(_.marked="property"),"spread"==e?j(se):"}"==e?E():j(O(":"),se,le)):(S(t),j(le))}function le(e,t){if("="==t)return j(z)}function ce(e){if(","==e)return j(ae)}function ue(e,t){if("keyword b"==e&&"else"==t)return j(M("form","else"),V,N)}function fe(e){if("("==e)return j(M(")"),he,O(")"),N)}function he(e){return"var"==e?j(ae,O(";"),de):";"==e?j(de):"variable"==e?j(pe):E(T,O(";"),de)}function pe(e,t){return"in"==t||"of"==t?(_.marked="keyword",j(T)):j(J,de)}function de(e,t){return";"==e?j(ye):"in"==t||"of"==t?(_.marked="keyword",j(T)):E(T,O(";"),ye)}function ye(e){")"!=e&&j(T)}function me(e,t){return"*"==t?(_.marked="keyword",j(me)):"variable"==e?(S(t),j(me)):"("==e?j($,M(")"),Y(ve,")"),N,te,V,A):void 0}function ve(e){return"spread"==e?j(ve):E(se,te,re)}function ge(e,t){if("variable"==e)return S(t),j(xe)}function xe(e,t){return"extends"==t?j(T,xe):"{"==e?j(M("}"),be,N):void 0}function be(e,t){return"variable"==e||"keyword"==_.style?"static"==t?(_.marked="keyword",j(be)):(_.marked="property","get"==t||"set"==t?j(ke,me,be):j(me,be)):"*"==t?(_.marked="keyword",j(be)):";"==e?j(be):"}"==e?j():void 0}function ke(e){return"variable"!=e?E():(_.marked="property",j())}function we(e,t){return"*"==t?(_.marked="keyword",j(Se,O(";"))):"default"==t?(_.marked="keyword",j(T,O(";"))):E(V)}function _e(e){return"string"==e?j():E(Ee,Se)}function Ee(e,t){return"{"==e?Z(Ee,"}"):("variable"==e&&S(t),"*"==t&&(_.marked="keyword"),j(je))}function je(e,t){if("as"==t)return _.marked="keyword",j(Ee)}function Se(e,t){if("from"==t)return _.marked="keyword",j(T)}function Ie(e){return"]"==e?j():E(z,$e)}function $e(e){return"for"==e?E(Ae,O("]")):","==e?j(Y(P,"]")):E(Y(z,"]"))}function Ae(e){return"for"==e?j(fe,Ae):"if"==e?j(T,Ae):void 0}return N.lex=!0,{startState:function(e){var t={tokenize:m,lastType:"sof",cc:[],lexical:new k((e||0)-s,0,"block",!1),localVars:n.localVars,context:n.localVars&&{vars:n.localVars},indented:e||0} -return n.globalVars&&"object"==typeof n.globalVars&&(t.globalVars=n.globalVars),t},token:function(e,t){if(e.sol()&&(t.lexical.hasOwnProperty("align")||(t.lexical.align=!1),t.indented=e.indentation(),x(e,t)),t.tokenize!=v&&e.eatSpace())return null +r.lexical=new w(n,E.stream.column(),e,null,r.lexical,t)} +return r.lex=!0,r}function O(){var e=E.state +e.lexical.prev&&(")"==e.lexical.type&&(e.indented=e.lexical.indented),e.lexical=e.lexical.prev)}function V(e){return function t(r){return r==e?S():";"==e?j():S(t)}}function T(e,t){return"var"==e?S(N("vardef",t.length),se,V(";"),O):"keyword a"==e?S(N("form"),z,T,O):"keyword b"==e?S(N("form"),T,O):"{"==e?S(N("}"),te,O):";"==e?S():"if"==e?("else"==E.state.lexical.info&&E.state.cc[E.state.cc.length-1]==O&&E.state.cc.pop()(),S(N("form"),z,T,O,fe)):"function"==e?S(ve):"for"==e?S(N("form"),he,T,O):"variable"==e?S(N("stat"),H):"switch"==e?S(N("form"),z,N("}","switch"),V("{"),te,O,O):"case"==e?S(z,V(":")):"default"==e?S(V(":")):"catch"==e?S(N("form"),A,V("("),ge,V(")"),T,O,M):"class"==e?S(N("form"),xe,O):"export"==e?S(N("stat"),_e,O):"import"==e?S(N("stat"),Ee,O):"module"==e?S(N("form"),oe,N("}"),V("{"),te,O,O):"async"==e?S(T):j(N("stat"),z,V(";"),O)}function z(e){return q(e,!1)}function L(e){return q(e,!0)}function q(e,t){if(E.state.fatArrowAt==E.stream.start){var r=t?B:W +if("("==e)return S(A,N(")"),Z(oe,")"),O,V("=>"),r,M) +if("variable"==e)return j(A,oe,V("=>"),r,M)}var n=t?U:F +return k.hasOwnProperty(e)?S(n):"function"==e?S(ve,n):"keyword c"==e?S(t?J:P):"("==e?S(N(")"),P,Me,V(")"),O,n):"operator"==e||"spread"==e?S(t?L:z):"["==e?S(N("]"),$e,O,n):"{"==e?ee(Q,"}",null,n):"quasi"==e?j(R,n):"new"==e?S(function(e){return function(t){return"."==t?S(e?D:G):j(e?L:z)}}(t)):S()}function P(e){return e.match(/[;\}\)\],]/)?j():j(z)}function J(e){return e.match(/[;\}\)\],]/)?j():j(L)}function F(e,t){return","==e?S(z):U(e,t,!1)}function U(e,t,r){var n=0==r?F:U,i=0==r?z:L +return"=>"==e?S(A,r?B:W,M):"operator"==e?/\+\+|--/.test(t)?S(n):"?"==t?S(z,V(":"),i):S(i):"quasi"==e?j(R,n):";"!=e?"("==e?ee(L,")","call",n):"."==e?S(K,n):"["==e?S(N("]"),P,V("]"),O,n):void 0:void 0}function R(e,t){return"quasi"!=e?j():"${"!=t.slice(t.length-2)?S(R):S(z,C)}function C(e){if("}"==e)return E.marked="string-2",E.state.tokenize=g,S(R)}function W(e){return b(E.stream,E.state),j("{"==e?T:z)}function B(e){return b(E.stream,E.state),j("{"==e?T:L)}function G(e,t){if("target"==t)return E.marked="keyword",S(F)}function D(e,t){if("target"==t)return E.marked="keyword",S(U)}function H(e){return":"==e?S(O,T):j(F,V(";"),O)}function K(e){if("variable"==e)return E.marked="property",S()}function Q(e,t){return"variable"==e||"keyword"==E.style?(E.marked="property",S("get"==t||"set"==t?X:Y)):"number"==e||"string"==e?(E.marked=l?"property":E.style+" property",S(Y)):"jsonld-keyword"==e?S(Y):"modifier"==e?S(Q):"["==e?S(z,V("]"),Y):"spread"==e?S(z):void 0}function X(e){return"variable"!=e?j(Y):(E.marked="property",S(ve))}function Y(e){return":"==e?S(L):"("==e?j(ve):void 0}function Z(e,t){function r(n,i){if(","==n){var a=E.state.lexical +return"call"==a.info&&(a.pos=(a.pos||0)+1),S(e,r)}return n==t||i==t?S():S(V(t))}return function(n,i){return n==t||i==t?S():j(e,r)}}function ee(e,t,r){for(var n=3;n"),ae):"["==e?S(V("]"),ae):void 0}function se(){return j(oe,re,ce,ue)}function oe(e,t){return"modifier"==e?S(oe):"variable"==e?(I(t),S()):"spread"==e?S(oe):"["==e?ee(oe,"]"):"{"==e?ee(le,"}"):void 0}function le(e,t){return"variable"!=e||E.stream.match(/^\s*:/,!1)?("variable"==e&&(E.marked="property"),"spread"==e?S(oe):"}"==e?j():S(V(":"),oe,ce)):(I(t),S(ce))}function ce(e,t){if("="==t)return S(L)}function ue(e){if(","==e)return S(se)}function fe(e,t){if("keyword b"==e&&"else"==t)return S(N("form","else"),T,O)}function he(e){if("("==e)return S(N(")"),pe,V(")"),O)}function pe(e){return"var"==e?S(se,V(";"),ye):";"==e?S(ye):"variable"==e?S(de):j(z,V(";"),ye)}function de(e,t){return"in"==t||"of"==t?(E.marked="keyword",S(z)):S(F,ye)}function ye(e,t){return";"==e?S(me):"in"==t||"of"==t?(E.marked="keyword",S(z)):j(z,V(";"),me)}function me(e){")"!=e&&S(z)}function ve(e,t){return"*"==t?(E.marked="keyword",S(ve)):"variable"==e?(I(t),S(ve)):"("==e?S(A,N(")"),Z(ge,")"),O,re,T,M):void 0}function ge(e){return"spread"==e?S(ge):j(oe,re,ne)}function xe(e,t){if("variable"==e)return I(t),S(be)}function be(e,t){return"extends"==t?S(z,be):"{"==e?S(N("}"),ke,O):void 0}function ke(e,t){return"variable"==e||"keyword"==E.style?"static"==t?(E.marked="keyword",S(ke)):(E.marked="property","get"==t||"set"==t?S(we,ve,ke):S(ve,ke)):"*"==t?(E.marked="keyword",S(ke)):";"==e?S(ke):"}"==e?S():void 0}function we(e){return"variable"!=e?j():(E.marked="property",S())}function _e(e,t){return"*"==t?(E.marked="keyword",S(Ie,V(";"))):"default"==t?(E.marked="keyword",S(z,V(";"))):j(T)}function Ee(e){return"string"==e?S():j(je,Ie)}function je(e,t){return"{"==e?ee(je,"}"):("variable"==e&&I(t),"*"==t&&(E.marked="keyword"),S(Se))}function Se(e,t){if("as"==t)return E.marked="keyword",S(je)}function Ie(e,t){if("from"==t)return E.marked="keyword",S(z)}function $e(e){return"]"==e?S():j(L,Ae)}function Ae(e){return"for"==e?j(Me,V("]")):","==e?S(Z(J,"]")):j(Z(L,"]"))}function Me(e){return"for"==e?S(he,Me):"if"==e?S(z,Me):void 0}return O.lex=!0,{startState:function(e){var t={tokenize:m,lastType:"sof",cc:[],lexical:new w((e||0)-s,0,"block",!1),localVars:n.localVars,context:n.localVars&&{vars:n.localVars},indented:e||0} +return n.globalVars&&"object"==typeof n.globalVars&&(t.globalVars=n.globalVars),t},token:function(e,t){if(e.sol()&&(t.lexical.hasOwnProperty("align")||(t.lexical.align=!1),t.indented=e.indentation(),b(e,t)),t.tokenize!=v&&e.eatSpace())return null var r=t.tokenize(e,t) return"comment"==i?r:(t.lastType="operator"!=i||"++"!=a&&"--"!=a?i:"incdec",function(e,t,r,n,i){var a=e.cc -for(_.state=e,_.stream=i,_.marked=null,_.cc=a,_.style=t,e.lexical.hasOwnProperty("align")||(e.lexical.align=!0);;)if((a.length?a.pop():c?T:V)(r,n)){for(;a.length&&a[a.length-1].lex;)a.pop()() -return _.marked?_.marked:"variable"==r&&w(e,n)?"variable-2":t}}(t,r,i,a,e))},indent:function(t,r){if(t.tokenize==v)return e.Pass +for(E.state=e,E.stream=i,E.marked=null,E.cc=a,E.style=t,e.lexical.hasOwnProperty("align")||(e.lexical.align=!0);;)if((a.length?a.pop():c?z:T)(r,n)){for(;a.length&&a[a.length-1].lex;)a.pop()() +return E.marked?E.marked:"variable"==r&&_(e,n)?"variable-2":t}}(t,r,i,a,e))},indent:function(t,r){if(t.tokenize==v)return e.Pass if(t.tokenize!=m)return 0 var i=r&&r.charAt(0),a=t.lexical if(!/^\s*else\b/.test(r))for(var l=t.cc.length-1;l>=0;--l){var c=t.cc[l] -if(c==N)a=a.prev -else if(c!=ue)break}"stat"==a.type&&"}"==i&&(a=a.prev),o&&")"==a.type&&"stat"==a.prev.type&&(a=a.prev) +if(c==O)a=a.prev +else if(c!=fe)break}"stat"==a.type&&"}"==i&&(a=a.prev),o&&")"==a.type&&"stat"==a.prev.type&&(a=a.prev) var u=a.type,f=i==u return"vardef"==u?a.indented+("operator"==t.lastType||","==t.lastType?a.info+1:0):"form"==u&&"{"==i?a.indented:"form"==u?a.indented+s:"stat"==u?a.indented+(function(e,t){return"operator"==e.lastType||","==e.lastType||p.test(t.charAt(0))||/[,.]/.test(t.charAt(0))}(t,r)?o||s:0):"switch"!=a.info||f||0==n.doubleIndentSwitch?a.align?a.column+(f?0:1):a.indented+(f?0:s):a.indented+(/^(?:case|default)\b/.test(r)?s:2*s)},electricInput:/^\s*(?:case .*?:|default:|\{|\})$/,blockCommentStart:c?null:"/*",blockCommentEnd:c?null:"*/",lineComment:c?null:"//",fold:"brace",closeBrackets:"()[]{}''\"\"``",helperType:c?"json":"javascript",jsonldMode:l,jsonMode:c,expressionAllowed:t,skipExpression:function(e){var t=e.cc[e.cc.length-1] -t!=T&&t!=z||e.cc.pop()}}})),e.registerHelper("wordChars","javascript",/[\w$]/),e.defineMIME("text/javascript","javascript"),e.defineMIME("text/ecmascript","javascript"),e.defineMIME("application/javascript","javascript"),e.defineMIME("application/x-javascript","javascript"),e.defineMIME("application/ecmascript","javascript"),e.defineMIME("application/json",{name:"javascript",json:!0}),e.defineMIME("application/x-json",{name:"javascript",json:!0}),e.defineMIME("application/ld+json",{name:"javascript",jsonld:!0}),e.defineMIME("text/typescript",{name:"javascript",typescript:!0}),e.defineMIME("application/typescript",{name:"javascript",typescript:!0})})) +t!=z&&t!=L||e.cc.pop()}}})),e.registerHelper("wordChars","javascript",/[\w$]/),e.defineMIME("text/javascript","javascript"),e.defineMIME("text/ecmascript","javascript"),e.defineMIME("application/javascript","javascript"),e.defineMIME("application/x-javascript","javascript"),e.defineMIME("application/ecmascript","javascript"),e.defineMIME("application/json",{name:"javascript",json:!0}),e.defineMIME("application/x-json",{name:"javascript",json:!0}),e.defineMIME("application/ld+json",{name:"javascript",jsonld:!0}),e.defineMIME("text/typescript",{name:"javascript",typescript:!0}),e.defineMIME("application/typescript",{name:"javascript",typescript:!0})})) diff --git a/agent/uiserver/dist/assets/codemirror/mode/yaml/yaml-39582b60e653cf0b8d42292ddfabefb2.js b/agent/uiserver/dist/assets/codemirror/mode/yaml/yaml-39582b60e653cf0b8d42292ddfabefb2.js deleted file mode 100644 index a52cfdfb93fd3..0000000000000 --- a/agent/uiserver/dist/assets/codemirror/mode/yaml/yaml-39582b60e653cf0b8d42292ddfabefb2.js +++ /dev/null @@ -1,276 +0,0 @@ -/*! js-yaml 4.0.0 https://github.com/nodeca/js-yaml @license MIT */ -(function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).jsyaml={})})(this,(function(e){"use strict" -function t(e){return null==e}var n={isNothing:t,isObject:function(e){return"object"==typeof e&&null!==e},toArray:function(e){return Array.isArray(e)?e:t(e)?[]:[e]},repeat:function(e,t){var n,i="" -for(n=0;nl&&(t=i-l+(o=" ... ").length),n-i>l&&(n=i+l-(a=" ...").length),{str:o+e.slice(t,n).replace(/\t/g,"→")+a,pos:i-t+o.length}}function l(e,t){return n.repeat(" ",t-e.length)+e}var c=function(e,t){if(t=Object.create(t||null),!e.buffer)return null -t.maxLength||(t.maxLength=79),"number"!=typeof t.indent&&(t.indent=1),"number"!=typeof t.linesBefore&&(t.linesBefore=3),"number"!=typeof t.linesAfter&&(t.linesAfter=2) -for(var i,r=/\r?\n|\r|\0/g,o=[0],c=[],s=-1;i=r.exec(e.buffer);)c.push(i.index),o.push(i.index+i[0].length),e.position<=i.index&&s<0&&(s=o.length-2) -s<0&&(s=o.length-1) -var u,p,f="",d=Math.min(e.line+t.linesAfter,c.length).toString().length,h=t.maxLength-(t.indent+d+3) -for(u=1;u<=t.linesBefore&&!(s-u<0);u++)p=a(e.buffer,o[s-u],c[s-u],e.position-(o[s]-o[s-u]),h),f=n.repeat(" ",t.indent)+l((e.line-u+1).toString(),d)+" | "+p.str+"\n"+f -for(p=a(e.buffer,o[s],c[s],e.position,h),f+=n.repeat(" ",t.indent)+l((e.line+1).toString(),d)+" | "+p.str+"\n",f+=n.repeat("-",t.indent+d+3+p.pos)+"^\n",u=1;u<=t.linesAfter&&!(s+u>=c.length);u++)p=a(e.buffer,o[s+u],c[s+u],e.position-(o[s]-o[s+u]),h),f+=n.repeat(" ",t.indent)+l((e.line+u+1).toString(),d)+" | "+p.str+"\n" -return f.replace(/\n$/,"")},s=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],u=["scalar","sequence","mapping"] -var p=function(e,t){if(t=t||{},Object.keys(t).forEach((function(t){if(-1===s.indexOf(t))throw new o('Unknown option "'+t+'" is met in definition of "'+e+'" YAML type.')})),this.tag=e,this.kind=t.kind||null,this.resolve=t.resolve||function(){return!0},this.construct=t.construct||function(e){return e},this.instanceOf=t.instanceOf||null,this.predicate=t.predicate||null,this.represent=t.represent||null,this.representName=t.representName||null,this.defaultStyle=t.defaultStyle||null,this.multi=t.multi||!1,this.styleAliases=function(e){var t={} -return null!==e&&Object.keys(e).forEach((function(n){e[n].forEach((function(e){t[String(e)]=n}))})),t}(t.styleAliases||null),-1===u.indexOf(this.kind))throw new o('Unknown kind "'+this.kind+'" is specified for "'+e+'" YAML type.')} -function f(e,t,n){var i=[] -return e[t].forEach((function(e){n.forEach((function(t,n){t.tag===e.tag&&t.kind===e.kind&&t.multi===e.multi&&i.push(n)})),n.push(e)})),n.filter((function(e,t){return-1===i.indexOf(t)}))}function d(e){return this.extend(e)}d.prototype.extend=function(e){var t=[],n=[] -if(e instanceof p)n.push(e) -else if(Array.isArray(e))n=n.concat(e) -else{if(!e||!Array.isArray(e.implicit)&&!Array.isArray(e.explicit))throw new o("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })") -e.implicit&&(t=t.concat(e.implicit)),e.explicit&&(n=n.concat(e.explicit))}t.forEach((function(e){if(!(e instanceof p))throw new o("Specified list of YAML types (or a single Type object) contains a non-Type object.") -if(e.loadKind&&"scalar"!==e.loadKind)throw new o("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.") -if(e.multi)throw new o("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")})),n.forEach((function(e){if(!(e instanceof p))throw new o("Specified list of YAML types (or a single Type object) contains a non-Type object.")})) -var i=Object.create(d.prototype) -return i.implicit=(this.implicit||[]).concat(t),i.explicit=(this.explicit||[]).concat(n),i.compiledImplicit=f(i,"implicit",[]),i.compiledExplicit=f(i,"explicit",[]),i.compiledTypeMap=function(){var e,t,n={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}} -function i(e){e.multi?(n.multi[e.kind].push(e),n.multi.fallback.push(e)):n[e.kind][e.tag]=n.fallback[e.tag]=e}for(e=0,t=arguments.length;e=0?"0b"+e.toString(2):"-0b"+e.toString(2).slice(1)},octal:function(e){return e>=0?"0o"+e.toString(8):"-0o"+e.toString(8).slice(1)},decimal:function(e){return e.toString(10)},hexadecimal:function(e){return e>=0?"0x"+e.toString(16).toUpperCase():"-0x"+e.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),k=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$") -var w=/^[-+]?[0-9]+e/ -var C=new p("tag:yaml.org,2002:float",{kind:"scalar",resolve:function(e){return null!==e&&!(!k.test(e)||"_"===e[e.length-1])},construct:function(e){var t,n -return n="-"===(t=e.replace(/_/g,"").toLowerCase())[0]?-1:1,"+-".indexOf(t[0])>=0&&(t=t.slice(1)),".inf"===t?1===n?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===t?NaN:n*parseFloat(t,10)},predicate:function(e){return"[object Number]"===Object.prototype.toString.call(e)&&(e%1!=0||n.isNegativeZero(e))},represent:function(e,t){var i -if(isNaN(e))switch(t){case"lowercase":return".nan" -case"uppercase":return".NAN" -case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===e)switch(t){case"lowercase":return".inf" -case"uppercase":return".INF" -case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===e)switch(t){case"lowercase":return"-.inf" -case"uppercase":return"-.INF" -case"camelcase":return"-.Inf"}else if(n.isNegativeZero(e))return"-0.0" -return i=e.toString(10),w.test(i)?i.replace("e",".e"):i},defaultStyle:"lowercase"}),x=m.extend({implicit:[g,y,v,C]}),I=x,S=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),O=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$") -var j=new p("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:function(e){return null!==e&&(null!==S.exec(e)||null!==O.exec(e))},construct:function(e){var t,n,i,r,o,a,l,c,s=0,u=null -if(null===(t=S.exec(e))&&(t=O.exec(e)),null===t)throw new Error("Date resolve error") -if(n=+t[1],i=+t[2]-1,r=+t[3],!t[4])return new Date(Date.UTC(n,i,r)) -if(o=+t[4],a=+t[5],l=+t[6],t[7]){for(s=t[7].slice(0,3);s.length<3;)s+="0" -s=+s}return t[9]&&(u=6e4*(60*+t[10]+ +(t[11]||0)),"-"===t[9]&&(u=-u)),c=new Date(Date.UTC(n,i,r,o,a,l,s)),u&&c.setTime(c.getTime()-u),c},instanceOf:Date,represent:function(e){return e.toISOString()}}) -var T=new p("tag:yaml.org,2002:merge",{kind:"scalar",resolve:function(e){return"<<"===e||null===e}}),E="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r" -var M=new p("tag:yaml.org,2002:binary",{kind:"scalar",resolve:function(e){if(null===e)return!1 -var t,n,i=0,r=e.length,o=E -for(n=0;n64)){if(t<0)return!1 -i+=6}return i%8==0},construct:function(e){var t,n,i=e.replace(/[\r\n=]/g,""),r=i.length,o=E,a=0,l=[] -for(t=0;t>16&255),l.push(a>>8&255),l.push(255&a)),a=a<<6|o.indexOf(i.charAt(t)) -return 0===(n=r%4*6)?(l.push(a>>16&255),l.push(a>>8&255),l.push(255&a)):18===n?(l.push(a>>10&255),l.push(a>>2&255)):12===n&&l.push(a>>4&255),new Uint8Array(l)},predicate:function(e){return"[object Uint8Array]"===Object.prototype.toString.call(e)},represent:function(e){var t,n,i="",r=0,o=e.length,a=E -for(t=0;t>18&63],i+=a[r>>12&63],i+=a[r>>6&63],i+=a[63&r]),r=(r<<8)+e[t] -return 0===(n=o%3)?(i+=a[r>>18&63],i+=a[r>>12&63],i+=a[r>>6&63],i+=a[63&r]):2===n?(i+=a[r>>10&63],i+=a[r>>4&63],i+=a[r<<2&63],i+=a[64]):1===n&&(i+=a[r>>2&63],i+=a[r<<4&63],i+=a[64],i+=a[64]),i}}),L=Object.prototype.hasOwnProperty,N=Object.prototype.toString -var F=new p("tag:yaml.org,2002:omap",{kind:"sequence",resolve:function(e){if(null===e)return!0 -var t,n,i,r,o,a=[],l=e -for(t=0,n=l.length;t>10),56320+(e-65536&1023))}for(var ee=new Array(256),te=new Array(256),ne=0;ne<256;ne++)ee[ne]=Q(ne)?1:0,te[ne]=Q(ne) -function ie(e,t){this.input=e,this.filename=t.filename||null,this.schema=t.schema||Y,this.onWarning=t.onWarning||null,this.legacy=t.legacy||!1,this.json=t.json||!1,this.listener=t.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=e.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function re(e,t){var n={name:e.filename,buffer:e.input.slice(0,-1),position:e.position,line:e.line,column:e.position-e.lineStart} -return n.snippet=c(n),new o(t,n)}function oe(e,t){throw re(e,t)}function ae(e,t){e.onWarning&&e.onWarning.call(null,re(e,t))}var le={YAML:function(e,t,n){var i,r,o -null!==e.version&&oe(e,"duplication of %YAML directive"),1!==n.length&&oe(e,"YAML directive accepts exactly one argument"),null===(i=/^([0-9]+)\.([0-9]+)$/.exec(n[0]))&&oe(e,"ill-formed argument of the YAML directive"),r=parseInt(i[1],10),o=parseInt(i[2],10),1!==r&&oe(e,"unacceptable YAML version of the document"),e.version=n[0],e.checkLineBreaks=o<2,1!==o&&2!==o&&ae(e,"unsupported YAML version of the document")},TAG:function(e,t,n){var i,r -2!==n.length&&oe(e,"TAG directive accepts exactly two arguments"),i=n[0],r=n[1],K.test(i)||oe(e,"ill-formed tag handle (first argument) of the TAG directive"),P.call(e.tagMap,i)&&oe(e,'there is a previously declared suffix for "'+i+'" tag handle'),W.test(r)||oe(e,"ill-formed tag prefix (second argument) of the TAG directive") -try{r=decodeURIComponent(r)}catch(o){oe(e,"tag prefix is malformed: "+r)}e.tagMap[i]=r}} -function ce(e,t,n,i){var r,o,a,l -if(t1&&(e.result+=n.repeat("\n",t-1))}function me(e,t){var n,i,r=e.tag,o=e.anchor,a=[],l=!1 -if(-1!==e.firstTabInLine)return!1 -for(null!==e.anchor&&(e.anchorMap[e.anchor]=a),i=e.input.charCodeAt(e.position);0!==i&&(-1!==e.firstTabInLine&&(e.position=e.firstTabInLine,oe(e,"tab characters must not be used in indentation")),45===i)&&Z(e.input.charCodeAt(e.position+1));)if(l=!0,e.position++,fe(e,!0,-1)&&e.lineIndent<=t)a.push(null),i=e.input.charCodeAt(e.position) -else if(n=e.line,be(e,t,3,!1,!0),a.push(e.result),fe(e,!0,-1),i=e.input.charCodeAt(e.position),(e.line===n||e.lineIndent>t)&&0!==i)oe(e,"bad indentation of a sequence entry") -else if(e.lineIndentt?m=1:e.lineIndent===t?m=0:e.lineIndentt?m=1:e.lineIndent===t?m=0:e.lineIndentt)&&(y&&(a=e.line,l=e.lineStart,c=e.position),be(e,t,4,!0,r)&&(y?m=e.result:g=e.result),y||(ue(e,f,d,h,m,g,a,l,c),h=m=g=null),fe(e,!0,-1),s=e.input.charCodeAt(e.position)),(e.line===o||e.lineIndent>t)&&0!==s)oe(e,"bad indentation of a mapping entry") -else if(e.lineIndent=0))break -0===o?oe(e,"bad explicit indentation width of a block scalar; it cannot be less than one"):u?oe(e,"repeat of an indentation width identifier"):(p=t+o-1,u=!0)}if(V(a)){do{a=e.input.charCodeAt(++e.position)}while(V(a)) -if(35===a)do{a=e.input.charCodeAt(++e.position)}while(!G(a)&&0!==a)}for(;0!==a;){for(pe(e),e.lineIndent=0,a=e.input.charCodeAt(e.position);(!u||e.lineIndentp&&(p=e.lineIndent),G(a))f++ -else{if(e.lineIndent0){for(r=a,o=0;r>0;r--)(a=J(l=e.input.charCodeAt(++e.position)))>=0?o=(o<<4)+a:oe(e,"expected hexadecimal character") -e.result+=X(o),e.position++}else oe(e,"unknown escape sequence") -n=i=e.position}else G(l)?(ce(e,n,i,!0),he(e,fe(e,!1,t)),n=i=e.position):e.position===e.lineStart&&de(e)?oe(e,"unexpected end of the document within a double quoted scalar"):(e.position++,i=e.position)}oe(e,"unexpected end of the stream within a double quoted scalar")}(e,d)?y=!0:!function(e){var t,n,i -if(42!==(i=e.input.charCodeAt(e.position)))return!1 -for(i=e.input.charCodeAt(++e.position),t=e.position;0!==i&&!Z(i)&&!z(i);)i=e.input.charCodeAt(++e.position) -return e.position===t&&oe(e,"name of an alias node must contain at least one character"),n=e.input.slice(t,e.position),P.call(e.anchorMap,n)||oe(e,'unidentified alias "'+n+'"'),e.result=e.anchorMap[n],fe(e,!0,-1),!0}(e)?function(e,t,n){var i,r,o,a,l,c,s,u,p=e.kind,f=e.result -if(Z(u=e.input.charCodeAt(e.position))||z(u)||35===u||38===u||42===u||33===u||124===u||62===u||39===u||34===u||37===u||64===u||96===u)return!1 -if((63===u||45===u)&&(Z(i=e.input.charCodeAt(e.position+1))||n&&z(i)))return!1 -for(e.kind="scalar",e.result="",r=o=e.position,a=!1;0!==u;){if(58===u){if(Z(i=e.input.charCodeAt(e.position+1))||n&&z(i))break}else if(35===u){if(Z(e.input.charCodeAt(e.position-1)))break}else{if(e.position===e.lineStart&&de(e)||n&&z(u))break -if(G(u)){if(l=e.line,c=e.lineStart,s=e.lineIndent,fe(e,!1,-1),e.lineIndent>=t){a=!0,u=e.input.charCodeAt(e.position) -continue}e.position=o,e.line=l,e.lineStart=c,e.lineIndent=s -break}}a&&(ce(e,r,o,!1),he(e,e.line-l),r=o=e.position,a=!1),V(u)||(o=e.position+1),u=e.input.charCodeAt(++e.position)}return ce(e,r,o,!1),!!e.result||(e.kind=p,e.result=f,!1)}(e,d,1===i)&&(y=!0,null===e.tag&&(e.tag="?")):(y=!0,null===e.tag&&null===e.anchor||oe(e,"alias node should not have any properties")),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):0===m&&(y=c&&me(e,h))),null===e.tag)null!==e.anchor&&(e.anchorMap[e.anchor]=e.result) -else if("?"===e.tag){for(null!==e.result&&"scalar"!==e.kind&&oe(e,'unacceptable node kind for ! tag; it should be "scalar", not "'+e.kind+'"'),s=0,u=e.implicitTypes.length;s"),null!==e.result&&f.kind!==e.kind&&oe(e,"unacceptable node kind for !<"+e.tag+'> tag; it should be "'+f.kind+'", not "'+e.kind+'"'),f.resolve(e.result,e.tag)?(e.result=f.construct(e.result,e.tag),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):oe(e,"cannot resolve a node with !<"+e.tag+"> explicit tag")}return null!==e.listener&&e.listener("close",e),null!==e.tag||null!==e.anchor||y}function Ae(e){var t,n,i,r,o=e.position,a=!1 -for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap=Object.create(null),e.anchorMap=Object.create(null);0!==(r=e.input.charCodeAt(e.position))&&(fe(e,!0,-1),r=e.input.charCodeAt(e.position),!(e.lineIndent>0||37!==r));){for(a=!0,r=e.input.charCodeAt(++e.position),t=e.position;0!==r&&!Z(r);)r=e.input.charCodeAt(++e.position) -for(i=[],(n=e.input.slice(t,e.position)).length<1&&oe(e,"directive name must not be less than one character in length");0!==r;){for(;V(r);)r=e.input.charCodeAt(++e.position) -if(35===r){do{r=e.input.charCodeAt(++e.position)}while(0!==r&&!G(r)) -break}if(G(r))break -for(t=e.position;0!==r&&!Z(r);)r=e.input.charCodeAt(++e.position) -i.push(e.input.slice(t,e.position))}0!==r&&pe(e),P.call(le,n)?le[n](e,n,i):ae(e,'unknown document directive "'+n+'"')}fe(e,!0,-1),0===e.lineIndent&&45===e.input.charCodeAt(e.position)&&45===e.input.charCodeAt(e.position+1)&&45===e.input.charCodeAt(e.position+2)?(e.position+=3,fe(e,!0,-1)):a&&oe(e,"directives end mark is expected"),be(e,e.lineIndent-1,4,!1,!0),fe(e,!0,-1),e.checkLineBreaks&&$.test(e.input.slice(o,e.position))&&ae(e,"non-ASCII line breaks are interpreted as content"),e.documents.push(e.result),e.position===e.lineStart&&de(e)?46===e.input.charCodeAt(e.position)&&(e.position+=3,fe(e,!0,-1)):e.position=55296&&i<=56319&&t+1=56320&&n<=57343?1024*(i-55296)+n-56320+65536:i}function Ue(e){return/^\n* /.test(e)}function qe(e,t,n,i,r,o,a,l){var c,s,u=0,p=null,f=!1,d=!1,h=-1!==i,m=-1,g=Ne(s=De(e,0))&&s!==xe&&!Le(s)&&45!==s&&63!==s&&58!==s&&44!==s&&91!==s&&93!==s&&123!==s&&125!==s&&35!==s&&38!==s&&42!==s&&33!==s&&124!==s&&61!==s&&62!==s&&39!==s&&34!==s&&37!==s&&64!==s&&96!==s&&function(e){return!Le(e)&&58!==e}(De(e,e.length-1)) -if(t||a)for(c=0;c=65536?c+=2:c++){if(!Ne(u=De(e,c)))return 5 -g=g&&_e(u,p,l),p=u}else{for(c=0;c=65536?c+=2:c++){if(10===(u=De(e,c)))f=!0,h&&(d=d||c-m-1>i&&" "!==e[m+1],m=c) -else if(!Ne(u))return 5 -g=g&&_e(u,p,l),p=u}d=d||h&&c-m-1>i&&" "!==e[m+1]}return f||d?n>9&&Ue(e)?5:a?2===o?5:2:d?4:3:!g||a||r(e)?2===o?5:2:1}function Ye(e,t,n,i,r){e.dump=function(){if(0===t.length)return 2===e.quotingType?'""':"''" -if(!e.noCompatMode&&(-1!==Se.indexOf(t)||Oe.test(t)))return 2===e.quotingType?'"'+t+'"':"'"+t+"'" -var a=e.indent*Math.max(1,n),l=-1===e.lineWidth?-1:Math.max(Math.min(e.lineWidth,40),e.lineWidth-a),c=i||e.flowLevel>-1&&n>=e.flowLevel -switch(qe(t,c,e.indent,l,(function(t){return function(e,t){var n,i -for(n=0,i=e.implicitTypes.length;n"+Pe(t,e.indent)+Re(Ee(function(e,t){var n,i,r=/(\n+)([^\n]*)/g,o=(l=e.indexOf("\n"),l=-1!==l?l:e.length,r.lastIndex=l,$e(e.slice(0,l),t)),a="\n"===e[0]||" "===e[0] -var l -for(;i=r.exec(e);){var c=i[1],s=i[2] -n=" "===s[0],o+=c+(a||n||""===s?"":"\n")+$e(s,t),a=n}return o}(t,l),a)) -case 5:return'"'+function(e){for(var t,n="",i=0,r=0;r=65536?r+=2:r++)i=De(e,r),!(t=Ie[i])&&Ne(i)?(n+=e[r],i>=65536&&(n+=e[r+1])):n+=t||je(i) -return n}(t)+'"' -default:throw new o("impossible error: invalid scalar style")}}()}function Pe(e,t){var n=Ue(e)?String(t):"",i="\n"===e[e.length-1] -return n+(i&&("\n"===e[e.length-2]||"\n"===e)?"+":i?"":"-")+"\n"}function Re(e){return"\n"===e[e.length-1]?e.slice(0,-1):e}function $e(e,t){if(""===e||" "===e[0])return e -for(var n,i,r=/ [^ ]/g,o=0,a=0,l=0,c="";n=r.exec(e);)(l=n.index)-o>t&&(i=a>o?a:l,c+="\n"+e.slice(o,i),o=i+1),a=l -return c+="\n",e.length-o>t&&a>o?c+=e.slice(o,a)+"\n"+e.slice(a+1):c+=e.slice(o),c.slice(1)}function Be(e,t,n,i){var r,o,a,l="",c=e.tag -for(r=0,o=n.length;r tag resolver accepts not "'+s+'" style') -i=c.represent[s](t,s)}e.dump=i}return!0}return!1}function We(e,t,n,i,r,a,l){e.tag=null,e.dump=n,Ke(e,n,!1)||Ke(e,n,!0) -var c,s=we.call(e.dump),u=i -i&&(i=e.flowLevel<0||e.flowLevel>t) -var p,f,d="[object Object]"===s||"[object Array]"===s -if(d&&(f=-1!==(p=e.duplicates.indexOf(n))),(null!==e.tag&&"?"!==e.tag||f||2!==e.indent&&t>0)&&(r=!1),f&&e.usedDuplicates[p])e.dump="*ref_"+p -else{if(d&&f&&!e.usedDuplicates[p]&&(e.usedDuplicates[p]=!0),"[object Object]"===s)i&&0!==Object.keys(e.dump).length?(function(e,t,n,i){var r,a,l,c,s,u,p="",f=e.tag,d=Object.keys(n) -if(!0===e.sortKeys)d.sort() -else if("function"==typeof e.sortKeys)d.sort(e.sortKeys) -else if(e.sortKeys)throw new o("sortKeys must be a boolean or a function") -for(r=0,a=d.length;r1024)&&(e.dump&&10===e.dump.charCodeAt(0)?u+="?":u+="? "),u+=e.dump,s&&(u+=Me(e,t)),We(e,t+1,c,!0,s)&&(e.dump&&10===e.dump.charCodeAt(0)?u+=":":u+=": ",p+=u+=e.dump)) -e.tag=f,e.dump=p||"{}"}(e,t,e.dump,r),f&&(e.dump="&ref_"+p+e.dump)):(function(e,t,n){var i,r,o,a,l,c="",s=e.tag,u=Object.keys(n) -for(i=0,r=u.length;i1024&&(l+="? "),l+=e.dump+(e.condenseFlow?'"':"")+":"+(e.condenseFlow?"":" "),We(e,t,a,!1,!1)&&(c+=l+=e.dump)) -e.tag=s,e.dump="{"+c+"}"}(e,t,e.dump),f&&(e.dump="&ref_"+p+" "+e.dump)) -else if("[object Array]"===s)i&&0!==e.dump.length?(e.noArrayIndent&&!l&&t>0?Be(e,t-1,e.dump,r):Be(e,t,e.dump,r),f&&(e.dump="&ref_"+p+e.dump)):(function(e,t,n){var i,r,o,a="",l=e.tag -for(i=0,r=n.length;i",e.dump=c+" "+e.dump)}return!0}function He(e,t){var n,i,r=[],o=[] -for(Ge(e,r,o),n=0,i=o.length;nn.keyCol)return t.skipToEnd(),"string" -if(n.literal&&(n.literal=!1),t.sol()){if(n.keyCol=0,n.pair=!1,n.pairStart=!1,t.match(/---/))return"def" -if(t.match(/\.\.\./))return"def" -if(t.match(/\s*-\s+/))return"meta"}if(t.match(/^(\{|\}|\[|\])/))return"{"==i?n.inlinePairs++:"}"==i?n.inlinePairs--:"["==i?n.inlineList++:n.inlineList--,"meta" -if(n.inlineList>0&&!r&&","==i)return t.next(),"meta" -if(n.inlinePairs>0&&!r&&","==i)return n.keyCol=0,n.pair=!1,n.pairStart=!1,t.next(),"meta" -if(n.pairStart){if(t.match(/^\s*(\||\>)\s*/))return n.literal=!0,"meta" -if(t.match(/^\s*(\&|\*)[a-z0-9\._-]+\b/i))return"variable-2" -if(0==n.inlinePairs&&t.match(/^\s*-?[0-9\.\,]+\s?$/))return"number" -if(n.inlinePairs>0&&t.match(/^\s*-?[0-9\.\,]+\s?(?=(,|}))/))return"number" -if(t.match(e))return"keyword"}return!n.pair&&t.match(/^\s*(?:[,\[\]{}&*!|>'"%@`][^\s'":]|[^,\[\]{}#&*!|>'"%@`])[^#]*?(?=\s*:($|\s))/)?(n.pair=!0,n.keyCol=t.indentation(),"atom"):n.pair&&t.match(/^:\s*/)?(n.pairStart=!0,"meta"):(n.pairStart=!1,n.escaped="\\"==i,t.next(),null)},startState:function(){return{pair:!1,pairStart:!1,keyCol:0,inlinePairs:0,inlineList:0,literal:!1,escaped:!1}}}})),e.defineMIME("text/x-yaml","yaml")})) diff --git a/agent/uiserver/dist/assets/codemirror/mode/yaml/yaml-d1dfef3221c9d73c6c8042ca73949aa2.js b/agent/uiserver/dist/assets/codemirror/mode/yaml/yaml-d1dfef3221c9d73c6c8042ca73949aa2.js new file mode 100644 index 0000000000000..e68f7e1eac047 --- /dev/null +++ b/agent/uiserver/dist/assets/codemirror/mode/yaml/yaml-d1dfef3221c9d73c6c8042ca73949aa2.js @@ -0,0 +1,279 @@ +/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */ +(function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).jsyaml={})})(this,(function(e){"use strict" +function t(e){return null==e}var n={isNothing:t,isObject:function(e){return"object"==typeof e&&null!==e},toArray:function(e){return Array.isArray(e)?e:t(e)?[]:[e]},repeat:function(e,t){var n,i="" +for(n=0;nl&&(t=i-l+(o=" ... ").length),n-i>l&&(n=i+l-(a=" ...").length),{str:o+e.slice(t,n).replace(/\t/g,"→")+a,pos:i-t+o.length}}function l(e,t){return n.repeat(" ",t-e.length)+e}var s=function(e,t){if(t=Object.create(t||null),!e.buffer)return null +t.maxLength||(t.maxLength=79),"number"!=typeof t.indent&&(t.indent=1),"number"!=typeof t.linesBefore&&(t.linesBefore=3),"number"!=typeof t.linesAfter&&(t.linesAfter=2) +for(var i,r=/\r?\n|\r|\0/g,o=[0],s=[],c=-1;i=r.exec(e.buffer);)s.push(i.index),o.push(i.index+i[0].length),e.position<=i.index&&c<0&&(c=o.length-2) +c<0&&(c=o.length-1) +var u,p,f="",d=Math.min(e.line+t.linesAfter,s.length).toString().length,h=t.maxLength-(t.indent+d+3) +for(u=1;u<=t.linesBefore&&!(c-u<0);u++)p=a(e.buffer,o[c-u],s[c-u],e.position-(o[c]-o[c-u]),h),f=n.repeat(" ",t.indent)+l((e.line-u+1).toString(),d)+" | "+p.str+"\n"+f +for(p=a(e.buffer,o[c],s[c],e.position,h),f+=n.repeat(" ",t.indent)+l((e.line+1).toString(),d)+" | "+p.str+"\n",f+=n.repeat("-",t.indent+d+3+p.pos)+"^\n",u=1;u<=t.linesAfter&&!(c+u>=s.length);u++)p=a(e.buffer,o[c+u],s[c+u],e.position-(o[c]-o[c+u]),h),f+=n.repeat(" ",t.indent)+l((e.line+u+1).toString(),d)+" | "+p.str+"\n" +return f.replace(/\n$/,"")},c=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],u=["scalar","sequence","mapping"] +var p=function(e,t){if(t=t||{},Object.keys(t).forEach((function(t){if(-1===c.indexOf(t))throw new o('Unknown option "'+t+'" is met in definition of "'+e+'" YAML type.')})),this.options=t,this.tag=e,this.kind=t.kind||null,this.resolve=t.resolve||function(){return!0},this.construct=t.construct||function(e){return e},this.instanceOf=t.instanceOf||null,this.predicate=t.predicate||null,this.represent=t.represent||null,this.representName=t.representName||null,this.defaultStyle=t.defaultStyle||null,this.multi=t.multi||!1,this.styleAliases=function(e){var t={} +return null!==e&&Object.keys(e).forEach((function(n){e[n].forEach((function(e){t[String(e)]=n}))})),t}(t.styleAliases||null),-1===u.indexOf(this.kind))throw new o('Unknown kind "'+this.kind+'" is specified for "'+e+'" YAML type.')} +function f(e,t){var n=[] +return e[t].forEach((function(e){var t=n.length +n.forEach((function(n,i){n.tag===e.tag&&n.kind===e.kind&&n.multi===e.multi&&(t=i)})),n[t]=e})),n}function d(e){return this.extend(e)}d.prototype.extend=function(e){var t=[],n=[] +if(e instanceof p)n.push(e) +else if(Array.isArray(e))n=n.concat(e) +else{if(!e||!Array.isArray(e.implicit)&&!Array.isArray(e.explicit))throw new o("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })") +e.implicit&&(t=t.concat(e.implicit)),e.explicit&&(n=n.concat(e.explicit))}t.forEach((function(e){if(!(e instanceof p))throw new o("Specified list of YAML types (or a single Type object) contains a non-Type object.") +if(e.loadKind&&"scalar"!==e.loadKind)throw new o("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.") +if(e.multi)throw new o("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")})),n.forEach((function(e){if(!(e instanceof p))throw new o("Specified list of YAML types (or a single Type object) contains a non-Type object.")})) +var i=Object.create(d.prototype) +return i.implicit=(this.implicit||[]).concat(t),i.explicit=(this.explicit||[]).concat(n),i.compiledImplicit=f(i,"implicit"),i.compiledExplicit=f(i,"explicit"),i.compiledTypeMap=function(){var e,t,n={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}} +function i(e){e.multi?(n.multi[e.kind].push(e),n.multi.fallback.push(e)):n[e.kind][e.tag]=n.fallback[e.tag]=e}for(e=0,t=arguments.length;e=0?"0b"+e.toString(2):"-0b"+e.toString(2).slice(1)},octal:function(e){return e>=0?"0o"+e.toString(8):"-0o"+e.toString(8).slice(1)},decimal:function(e){return e.toString(10)},hexadecimal:function(e){return e>=0?"0x"+e.toString(16).toUpperCase():"-0x"+e.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),x=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$") +var I=/^[-+]?[0-9]+e/ +var S=new p("tag:yaml.org,2002:float",{kind:"scalar",resolve:function(e){return null!==e&&!(!x.test(e)||"_"===e[e.length-1])},construct:function(e){var t,n +return n="-"===(t=e.replace(/_/g,"").toLowerCase())[0]?-1:1,"+-".indexOf(t[0])>=0&&(t=t.slice(1)),".inf"===t?1===n?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===t?NaN:n*parseFloat(t,10)},predicate:function(e){return"[object Number]"===Object.prototype.toString.call(e)&&(e%1!=0||n.isNegativeZero(e))},represent:function(e,t){var i +if(isNaN(e))switch(t){case"lowercase":return".nan" +case"uppercase":return".NAN" +case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===e)switch(t){case"lowercase":return".inf" +case"uppercase":return".INF" +case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===e)switch(t){case"lowercase":return"-.inf" +case"uppercase":return"-.INF" +case"camelcase":return"-.Inf"}else if(n.isNegativeZero(e))return"-0.0" +return i=e.toString(10),I.test(i)?i.replace("e",".e"):i},defaultStyle:"lowercase"}),j=b.extend({implicit:[A,v,C,S]}),O=j,T=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),E=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$") +var M=new p("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:function(e){return null!==e&&(null!==T.exec(e)||null!==E.exec(e))},construct:function(e){var t,n,i,r,o,a,l,s,c=0,u=null +if(null===(t=T.exec(e))&&(t=E.exec(e)),null===t)throw new Error("Date resolve error") +if(n=+t[1],i=+t[2]-1,r=+t[3],!t[4])return new Date(Date.UTC(n,i,r)) +if(o=+t[4],a=+t[5],l=+t[6],t[7]){for(c=t[7].slice(0,3);c.length<3;)c+="0" +c=+c}return t[9]&&(u=6e4*(60*+t[10]+ +(t[11]||0)),"-"===t[9]&&(u=-u)),s=new Date(Date.UTC(n,i,r,o,a,l,c)),u&&s.setTime(s.getTime()-u),s},instanceOf:Date,represent:function(e){return e.toISOString()}}) +var L=new p("tag:yaml.org,2002:merge",{kind:"scalar",resolve:function(e){return"<<"===e||null===e}}),N="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r" +var F=new p("tag:yaml.org,2002:binary",{kind:"scalar",resolve:function(e){if(null===e)return!1 +var t,n,i=0,r=e.length,o=N +for(n=0;n64)){if(t<0)return!1 +i+=6}return i%8==0},construct:function(e){var t,n,i=e.replace(/[\r\n=]/g,""),r=i.length,o=N,a=0,l=[] +for(t=0;t>16&255),l.push(a>>8&255),l.push(255&a)),a=a<<6|o.indexOf(i.charAt(t)) +return 0===(n=r%4*6)?(l.push(a>>16&255),l.push(a>>8&255),l.push(255&a)):18===n?(l.push(a>>10&255),l.push(a>>2&255)):12===n&&l.push(a>>4&255),new Uint8Array(l)},predicate:function(e){return"[object Uint8Array]"===Object.prototype.toString.call(e)},represent:function(e){var t,n,i="",r=0,o=e.length,a=N +for(t=0;t>18&63],i+=a[r>>12&63],i+=a[r>>6&63],i+=a[63&r]),r=(r<<8)+e[t] +return 0===(n=o%3)?(i+=a[r>>18&63],i+=a[r>>12&63],i+=a[r>>6&63],i+=a[63&r]):2===n?(i+=a[r>>10&63],i+=a[r>>4&63],i+=a[r<<2&63],i+=a[64]):1===n&&(i+=a[r>>2&63],i+=a[r<<4&63],i+=a[64],i+=a[64]),i}}),_=Object.prototype.hasOwnProperty,D=Object.prototype.toString +var q=new p("tag:yaml.org,2002:omap",{kind:"sequence",resolve:function(e){if(null===e)return!0 +var t,n,i,r,o,a=[],l=e +for(t=0,n=l.length;t>10),56320+(e-65536&1023))}for(var ue=new Array(256),pe=new Array(256),fe=0;fe<256;fe++)ue[fe]=se(fe)?1:0,pe[fe]=se(fe) +function de(e,t){this.input=e,this.filename=t.filename||null,this.schema=t.schema||$,this.onWarning=t.onWarning||null,this.legacy=t.legacy||!1,this.json=t.json||!1,this.listener=t.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=e.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function he(e,t){var n={name:e.filename,buffer:e.input.slice(0,-1),position:e.position,line:e.line,column:e.position-e.lineStart} +return n.snippet=s(n),new o(t,n)}function me(e,t){throw he(e,t)}function ge(e,t){e.onWarning&&e.onWarning.call(null,he(e,t))}var ye={YAML:function(e,t,n){var i,r,o +null!==e.version&&me(e,"duplication of %YAML directive"),1!==n.length&&me(e,"YAML directive accepts exactly one argument"),null===(i=/^([0-9]+)\.([0-9]+)$/.exec(n[0]))&&me(e,"ill-formed argument of the YAML directive"),r=parseInt(i[1],10),o=parseInt(i[2],10),1!==r&&me(e,"unacceptable YAML version of the document"),e.version=n[0],e.checkLineBreaks=o<2,1!==o&&2!==o&&ge(e,"unsupported YAML version of the document")},TAG:function(e,t,n){var i,r +2!==n.length&&me(e,"TAG directive accepts exactly two arguments"),i=n[0],r=n[1],ee.test(i)||me(e,"ill-formed tag handle (first argument) of the TAG directive"),B.call(e.tagMap,i)&&me(e,'there is a previously declared suffix for "'+i+'" tag handle'),te.test(r)||me(e,"ill-formed tag prefix (second argument) of the TAG directive") +try{r=decodeURIComponent(r)}catch(o){me(e,"tag prefix is malformed: "+r)}e.tagMap[i]=r}} +function be(e,t,n,i){var r,o,a,l +if(t1&&(e.result+=n.repeat("\n",t-1))}function Ie(e,t){var n,i,r=e.tag,o=e.anchor,a=[],l=!1 +if(-1!==e.firstTabInLine)return!1 +for(null!==e.anchor&&(e.anchorMap[e.anchor]=a),i=e.input.charCodeAt(e.position);0!==i&&(-1!==e.firstTabInLine&&(e.position=e.firstTabInLine,me(e,"tab characters must not be used in indentation")),45===i)&&oe(e.input.charCodeAt(e.position+1));)if(l=!0,e.position++,we(e,!0,-1)&&e.lineIndent<=t)a.push(null),i=e.input.charCodeAt(e.position) +else if(n=e.line,Oe(e,t,H,!1,!0),a.push(e.result),we(e,!0,-1),i=e.input.charCodeAt(e.position),(e.line===n||e.lineIndent>t)&&0!==i)me(e,"bad indentation of a sequence entry") +else if(e.lineIndentt?m=1:e.lineIndent===t?m=0:e.lineIndentt?m=1:e.lineIndent===t?m=0:e.lineIndentt)&&(y&&(a=e.line,l=e.lineStart,s=e.position),Oe(e,t,G,!0,r)&&(y?m=e.result:g=e.result),y||(ve(e,f,d,h,m,g,a,l,s),h=m=g=null),we(e,!0,-1),c=e.input.charCodeAt(e.position)),(e.line===o||e.lineIndent>t)&&0!==c)me(e,"bad indentation of a mapping entry") +else if(e.lineIndent=0))break +0===o?me(e,"bad explicit indentation width of a block scalar; it cannot be less than one"):u?me(e,"repeat of an indentation width identifier"):(p=t+o-1,u=!0)}if(re(a)){do{a=e.input.charCodeAt(++e.position)}while(re(a)) +if(35===a)do{a=e.input.charCodeAt(++e.position)}while(!ie(a)&&0!==a)}for(;0!==a;){for(ke(e),e.lineIndent=0,a=e.input.charCodeAt(e.position);(!u||e.lineIndentp&&(p=e.lineIndent),ie(a))f++ +else{if(e.lineIndent0){for(r=a,o=0;r>0;r--)(a=le(l=e.input.charCodeAt(++e.position)))>=0?o=(o<<4)+a:me(e,"expected hexadecimal character") +e.result+=ce(o),e.position++}else me(e,"unknown escape sequence") +n=i=e.position}else ie(l)?(be(e,n,i,!0),xe(e,we(e,!1,t)),n=i=e.position):e.position===e.lineStart&&Ce(e)?me(e,"unexpected end of the document within a double quoted scalar"):(e.position++,i=e.position)}me(e,"unexpected end of the stream within a double quoted scalar")}(e,d)?y=!0:!function(e){var t,n,i +if(42!==(i=e.input.charCodeAt(e.position)))return!1 +for(i=e.input.charCodeAt(++e.position),t=e.position;0!==i&&!oe(i)&&!ae(i);)i=e.input.charCodeAt(++e.position) +return e.position===t&&me(e,"name of an alias node must contain at least one character"),n=e.input.slice(t,e.position),B.call(e.anchorMap,n)||me(e,'unidentified alias "'+n+'"'),e.result=e.anchorMap[n],we(e,!0,-1),!0}(e)?function(e,t,n){var i,r,o,a,l,s,c,u,p=e.kind,f=e.result +if(oe(u=e.input.charCodeAt(e.position))||ae(u)||35===u||38===u||42===u||33===u||124===u||62===u||39===u||34===u||37===u||64===u||96===u)return!1 +if((63===u||45===u)&&(oe(i=e.input.charCodeAt(e.position+1))||n&&ae(i)))return!1 +for(e.kind="scalar",e.result="",r=o=e.position,a=!1;0!==u;){if(58===u){if(oe(i=e.input.charCodeAt(e.position+1))||n&&ae(i))break}else if(35===u){if(oe(e.input.charCodeAt(e.position-1)))break}else{if(e.position===e.lineStart&&Ce(e)||n&&ae(u))break +if(ie(u)){if(l=e.line,s=e.lineStart,c=e.lineIndent,we(e,!1,-1),e.lineIndent>=t){a=!0,u=e.input.charCodeAt(e.position) +continue}e.position=o,e.line=l,e.lineStart=s,e.lineIndent=c +break}}a&&(be(e,r,o,!1),xe(e,e.line-l),r=o=e.position,a=!1),re(u)||(o=e.position+1),u=e.input.charCodeAt(++e.position)}return be(e,r,o,!1),!!e.result||(e.kind=p,e.result=f,!1)}(e,d,K===i)&&(y=!0,null===e.tag&&(e.tag="?")):(y=!0,null===e.tag&&null===e.anchor||me(e,"alias node should not have any properties")),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):0===m&&(y=s&&Ie(e,h))),null===e.tag)null!==e.anchor&&(e.anchorMap[e.anchor]=e.result) +else if("?"===e.tag){for(null!==e.result&&"scalar"!==e.kind&&me(e,'unacceptable node kind for ! tag; it should be "scalar", not "'+e.kind+'"'),c=0,u=e.implicitTypes.length;c"),null!==e.result&&f.kind!==e.kind&&me(e,"unacceptable node kind for !<"+e.tag+'> tag; it should be "'+f.kind+'", not "'+e.kind+'"'),f.resolve(e.result,e.tag)?(e.result=f.construct(e.result,e.tag),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):me(e,"cannot resolve a node with !<"+e.tag+"> explicit tag")}return null!==e.listener&&e.listener("close",e),null!==e.tag||null!==e.anchor||y}function Te(e){var t,n,i,r,o=e.position,a=!1 +for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap=Object.create(null),e.anchorMap=Object.create(null);0!==(r=e.input.charCodeAt(e.position))&&(we(e,!0,-1),r=e.input.charCodeAt(e.position),!(e.lineIndent>0||37!==r));){for(a=!0,r=e.input.charCodeAt(++e.position),t=e.position;0!==r&&!oe(r);)r=e.input.charCodeAt(++e.position) +for(i=[],(n=e.input.slice(t,e.position)).length<1&&me(e,"directive name must not be less than one character in length");0!==r;){for(;re(r);)r=e.input.charCodeAt(++e.position) +if(35===r){do{r=e.input.charCodeAt(++e.position)}while(0!==r&&!ie(r)) +break}if(ie(r))break +for(t=e.position;0!==r&&!oe(r);)r=e.input.charCodeAt(++e.position) +i.push(e.input.slice(t,e.position))}0!==r&&ke(e),B.call(ye,n)?ye[n](e,n,i):ge(e,'unknown document directive "'+n+'"')}we(e,!0,-1),0===e.lineIndent&&45===e.input.charCodeAt(e.position)&&45===e.input.charCodeAt(e.position+1)&&45===e.input.charCodeAt(e.position+2)?(e.position+=3,we(e,!0,-1)):a&&me(e,"directives end mark is expected"),Oe(e,e.lineIndent-1,G,!1,!0),we(e,!0,-1),e.checkLineBreaks&&Q.test(e.input.slice(o,e.position))&&ge(e,"non-ASCII line breaks are interpreted as content"),e.documents.push(e.result),e.position===e.lineStart&&Ce(e)?46===e.input.charCodeAt(e.position)&&(e.position+=3,we(e,!0,-1)):e.position=55296&&i<=56319&&t+1=56320&&n<=57343?1024*(i-55296)+n-56320+65536:i}function At(e){return/^\n* /.test(e)}var vt=1,kt=2,wt=3,Ct=4,xt=5 +function It(e,t,n,i,r,o,a,l){var s,c,u=0,p=null,f=!1,d=!1,h=-1!==i,m=-1,g=mt(c=bt(e,0))&&c!==Fe&&!ht(c)&&c!==Ge&&c!==Je&&c!==Ve&&c!==He&&c!==Xe&&c!==et&&c!==nt&&c!==rt&&c!==Re&&c!==Be&&c!==We&&c!==Ye&&c!==it&&c!==Ze&&c!==ze&&c!==Ke&&c!==Pe&&c!==$e&&c!==Qe&&c!==tt&&function(e){return!ht(e)&&e!==Ve}(bt(e,e.length-1)) +if(t||a)for(s=0;s=65536?s+=2:s++){if(!mt(u=bt(e,s)))return xt +g=g&&yt(u,p,l),p=u}else{for(s=0;s=65536?s+=2:s++){if((u=bt(e,s))===De)f=!0,h&&(d=d||s-m-1>i&&" "!==e[m+1],m=s) +else if(!mt(u))return xt +g=g&&yt(u,p,l),p=u}d=d||h&&s-m-1>i&&" "!==e[m+1]}return f||d?n>9&&At(e)?xt:a?o===ut?xt:kt:d?Ct:wt:!g||a||r(e)?o===ut?xt:kt:vt}function St(e,t,n,i,r){e.dump=function(){if(0===t.length)return e.quotingType===ut?'""':"''" +if(!e.noCompatMode&&(-1!==at.indexOf(t)||lt.test(t)))return e.quotingType===ut?'"'+t+'"':"'"+t+"'" +var a=e.indent*Math.max(1,n),l=-1===e.lineWidth?-1:Math.max(Math.min(e.lineWidth,40),e.lineWidth-a),s=i||e.flowLevel>-1&&n>=e.flowLevel +switch(It(t,s,e.indent,l,(function(t){return function(e,t){var n,i +for(n=0,i=e.implicitTypes.length;n"+jt(t,e.indent)+Ot(ft(function(e,t){var n,i,r=/(\n+)([^\n]*)/g,o=(l=e.indexOf("\n"),l=-1!==l?l:e.length,r.lastIndex=l,Tt(e.slice(0,l),t)),a="\n"===e[0]||" "===e[0] +var l +for(;i=r.exec(e);){var s=i[1],c=i[2] +n=" "===c[0],o+=s+(a||n||""===c?"":"\n")+Tt(c,t),a=n}return o}(t,l),a)) +case xt:return'"'+function(e){for(var t,n="",i=0,r=0;r=65536?r+=2:r++)i=bt(e,r),!(t=ot[i])&&mt(i)?(n+=e[r],i>=65536&&(n+=e[r+1])):n+=t||st(i) +return n}(t)+'"' +default:throw new o("impossible error: invalid scalar style")}}()}function jt(e,t){var n=At(e)?String(t):"",i="\n"===e[e.length-1] +return n+(i&&("\n"===e[e.length-2]||"\n"===e)?"+":i?"":"-")+"\n"}function Ot(e){return"\n"===e[e.length-1]?e.slice(0,-1):e}function Tt(e,t){if(""===e||" "===e[0])return e +for(var n,i,r=/ [^ ]/g,o=0,a=0,l=0,s="";n=r.exec(e);)(l=n.index)-o>t&&(i=a>o?a:l,s+="\n"+e.slice(o,i),o=i+1),a=l +return s+="\n",e.length-o>t&&a>o?s+=e.slice(o,a)+"\n"+e.slice(a+1):s+=e.slice(o),s.slice(1)}function Et(e,t,n,i){var r,o,a,l="",s=e.tag +for(r=0,o=n.length;r tag resolver accepts not "'+c+'" style') +i=s.represent[c](t,c)}e.dump=i}return!0}return!1}function Lt(e,t,n,i,r,a,l){e.tag=null,e.dump=n,Mt(e,n,!1)||Mt(e,n,!0) +var s,c=Le.call(e.dump),u=i +i&&(i=e.flowLevel<0||e.flowLevel>t) +var p,f,d="[object Object]"===c||"[object Array]"===c +if(d&&(f=-1!==(p=e.duplicates.indexOf(n))),(null!==e.tag&&"?"!==e.tag||f||2!==e.indent&&t>0)&&(r=!1),f&&e.usedDuplicates[p])e.dump="*ref_"+p +else{if(d&&f&&!e.usedDuplicates[p]&&(e.usedDuplicates[p]=!0),"[object Object]"===c)i&&0!==Object.keys(e.dump).length?(function(e,t,n,i){var r,a,l,s,c,u,p="",f=e.tag,d=Object.keys(n) +if(!0===e.sortKeys)d.sort() +else if("function"==typeof e.sortKeys)d.sort(e.sortKeys) +else if(e.sortKeys)throw new o("sortKeys must be a boolean or a function") +for(r=0,a=d.length;r1024)&&(e.dump&&De===e.dump.charCodeAt(0)?u+="?":u+="? "),u+=e.dump,c&&(u+=dt(e,t)),Lt(e,t+1,s,!0,c)&&(e.dump&&De===e.dump.charCodeAt(0)?u+=":":u+=": ",p+=u+=e.dump)) +e.tag=f,e.dump=p||"{}"}(e,t,e.dump,r),f&&(e.dump="&ref_"+p+e.dump)):(function(e,t,n){var i,r,o,a,l,s="",c=e.tag,u=Object.keys(n) +for(i=0,r=u.length;i1024&&(l+="? "),l+=e.dump+(e.condenseFlow?'"':"")+":"+(e.condenseFlow?"":" "),Lt(e,t,a,!1,!1)&&(s+=l+=e.dump)) +e.tag=c,e.dump="{"+s+"}"}(e,t,e.dump),f&&(e.dump="&ref_"+p+" "+e.dump)) +else if("[object Array]"===c)i&&0!==e.dump.length?(e.noArrayIndent&&!l&&t>0?Et(e,t-1,e.dump,r):Et(e,t,e.dump,r),f&&(e.dump="&ref_"+p+e.dump)):(function(e,t,n){var i,r,o,a="",l=e.tag +for(i=0,r=n.length;i",e.dump=s+" "+e.dump)}return!0}function Nt(e,t){var n,i,r=[],o=[] +for(Ft(e,r,o),n=0,i=o.length;nn.keyCol)return t.skipToEnd(),"string" +if(n.literal&&(n.literal=!1),t.sol()){if(n.keyCol=0,n.pair=!1,n.pairStart=!1,t.match(/---/))return"def" +if(t.match(/\.\.\./))return"def" +if(t.match(/\s*-\s+/))return"meta"}if(t.match(/^(\{|\}|\[|\])/))return"{"==i?n.inlinePairs++:"}"==i?n.inlinePairs--:"["==i?n.inlineList++:n.inlineList--,"meta" +if(n.inlineList>0&&!r&&","==i)return t.next(),"meta" +if(n.inlinePairs>0&&!r&&","==i)return n.keyCol=0,n.pair=!1,n.pairStart=!1,t.next(),"meta" +if(n.pairStart){if(t.match(/^\s*(\||\>)\s*/))return n.literal=!0,"meta" +if(t.match(/^\s*(\&|\*)[a-z0-9\._-]+\b/i))return"variable-2" +if(0==n.inlinePairs&&t.match(/^\s*-?[0-9\.\,]+\s?$/))return"number" +if(n.inlinePairs>0&&t.match(/^\s*-?[0-9\.\,]+\s?(?=(,|}))/))return"number" +if(t.match(e))return"keyword"}return!n.pair&&t.match(/^\s*(?:[,\[\]{}&*!|>'"%@`][^\s'":]|[^,\[\]{}#&*!|>'"%@`])[^#]*?(?=\s*:($|\s))/)?(n.pair=!0,n.keyCol=t.indentation(),"atom"):n.pair&&t.match(/^:\s*/)?(n.pairStart=!0,"meta"):(n.pairStart=!1,n.escaped="\\"==i,t.next(),null)},startState:function(){return{pair:!1,pairStart:!1,keyCol:0,inlinePairs:0,inlineList:0,literal:!1,escaped:!1}}}})),e.defineMIME("text/x-yaml","yaml")})) diff --git a/agent/uiserver/dist/assets/consul-acls/routes-0c01f9c463b81fdc3929288f31c23040.js b/agent/uiserver/dist/assets/consul-acls/routes-e55feae2bb3c7d46658daac388c6d28b.js similarity index 100% rename from agent/uiserver/dist/assets/consul-acls/routes-0c01f9c463b81fdc3929288f31c23040.js rename to agent/uiserver/dist/assets/consul-acls/routes-e55feae2bb3c7d46658daac388c6d28b.js diff --git a/agent/uiserver/dist/assets/consul-acls/services-70b9e635f1e8e9a316e3773fccadb7c7.js b/agent/uiserver/dist/assets/consul-acls/services-1c7ca8671626e96e6ea4d8652235a7ed.js similarity index 100% rename from agent/uiserver/dist/assets/consul-acls/services-70b9e635f1e8e9a316e3773fccadb7c7.js rename to agent/uiserver/dist/assets/consul-acls/services-1c7ca8671626e96e6ea4d8652235a7ed.js diff --git a/agent/uiserver/dist/assets/consul-hcp/routes-282630d2b2c8bf766b7e0d4f512828cc.js b/agent/uiserver/dist/assets/consul-hcp/routes-50ef0656ce15ca397f130b4f71463b3d.js similarity index 100% rename from agent/uiserver/dist/assets/consul-hcp/routes-282630d2b2c8bf766b7e0d4f512828cc.js rename to agent/uiserver/dist/assets/consul-hcp/routes-50ef0656ce15ca397f130b4f71463b3d.js diff --git a/agent/uiserver/dist/assets/consul-hcp/services-51af43ae095119987dadf6f2392a59b3.js b/agent/uiserver/dist/assets/consul-hcp/services-0f03ec98fed9bf2a0b847a11efca654f.js similarity index 100% rename from agent/uiserver/dist/assets/consul-hcp/services-51af43ae095119987dadf6f2392a59b3.js rename to agent/uiserver/dist/assets/consul-hcp/services-0f03ec98fed9bf2a0b847a11efca654f.js diff --git a/agent/uiserver/dist/assets/consul-lock-sessions/routes-7718d309039e9f8b3b185656b6dd7f05.js b/agent/uiserver/dist/assets/consul-lock-sessions/routes-74df2f8452a25372c7dbaf121357ff4e.js similarity index 100% rename from agent/uiserver/dist/assets/consul-lock-sessions/routes-7718d309039e9f8b3b185656b6dd7f05.js rename to agent/uiserver/dist/assets/consul-lock-sessions/routes-74df2f8452a25372c7dbaf121357ff4e.js diff --git a/agent/uiserver/dist/assets/consul-lock-sessions/services-70b9e635f1e8e9a316e3773fccadb7c7.js b/agent/uiserver/dist/assets/consul-lock-sessions/services-1c7ca8671626e96e6ea4d8652235a7ed.js similarity index 100% rename from agent/uiserver/dist/assets/consul-lock-sessions/services-70b9e635f1e8e9a316e3773fccadb7c7.js rename to agent/uiserver/dist/assets/consul-lock-sessions/services-1c7ca8671626e96e6ea4d8652235a7ed.js diff --git a/agent/uiserver/dist/assets/consul-nspaces/routes-71c32de6a0307211d1299dac7688bfbf.js b/agent/uiserver/dist/assets/consul-nspaces/routes-63906dec24f0e6ddffea3b1604011f6a.js similarity index 100% rename from agent/uiserver/dist/assets/consul-nspaces/routes-71c32de6a0307211d1299dac7688bfbf.js rename to agent/uiserver/dist/assets/consul-nspaces/routes-63906dec24f0e6ddffea3b1604011f6a.js diff --git a/agent/uiserver/dist/assets/consul-nspaces/services-70b9e635f1e8e9a316e3773fccadb7c7.js b/agent/uiserver/dist/assets/consul-nspaces/services-1c7ca8671626e96e6ea4d8652235a7ed.js similarity index 100% rename from agent/uiserver/dist/assets/consul-nspaces/services-70b9e635f1e8e9a316e3773fccadb7c7.js rename to agent/uiserver/dist/assets/consul-nspaces/services-1c7ca8671626e96e6ea4d8652235a7ed.js diff --git a/agent/uiserver/dist/assets/consul-partitions/routes-1bdd3b7ae99c7d7ce0425b2412f10d5e.js b/agent/uiserver/dist/assets/consul-partitions/routes-afd0605ddd15bb1b9f6d29ff9c3520a6.js similarity index 100% rename from agent/uiserver/dist/assets/consul-partitions/routes-1bdd3b7ae99c7d7ce0425b2412f10d5e.js rename to agent/uiserver/dist/assets/consul-partitions/routes-afd0605ddd15bb1b9f6d29ff9c3520a6.js diff --git a/agent/uiserver/dist/assets/consul-partitions/services-1a3b6937a8bc5f6e68df884b1650eaf0.js b/agent/uiserver/dist/assets/consul-partitions/services-aff2ecb993421b18439e13717fc0d5b9.js similarity index 100% rename from agent/uiserver/dist/assets/consul-partitions/services-1a3b6937a8bc5f6e68df884b1650eaf0.js rename to agent/uiserver/dist/assets/consul-partitions/services-aff2ecb993421b18439e13717fc0d5b9.js diff --git a/agent/uiserver/dist/assets/consul-peerings/routes-989d6de4b58a54c8638e37694240f29a.js b/agent/uiserver/dist/assets/consul-peerings/routes-3d7de4222e3d59c0731f3c185920e3ad.js similarity index 100% rename from agent/uiserver/dist/assets/consul-peerings/routes-989d6de4b58a54c8638e37694240f29a.js rename to agent/uiserver/dist/assets/consul-peerings/routes-3d7de4222e3d59c0731f3c185920e3ad.js diff --git a/agent/uiserver/dist/assets/consul-peerings/services-e5a754eca7f3fbb406035f10b8dfbb77.js b/agent/uiserver/dist/assets/consul-peerings/services-2f4bca619d25ae9a31801359d4ed18a8.js similarity index 100% rename from agent/uiserver/dist/assets/consul-peerings/services-e5a754eca7f3fbb406035f10b8dfbb77.js rename to agent/uiserver/dist/assets/consul-peerings/services-2f4bca619d25ae9a31801359d4ed18a8.js diff --git a/agent/uiserver/dist/assets/consul-ui-698b9ad7e3ebf8146d4d081130554ca9.js b/agent/uiserver/dist/assets/consul-ui-698b9ad7e3ebf8146d4d081130554ca9.js new file mode 100644 index 0000000000000..b0b71600a993f --- /dev/null +++ b/agent/uiserver/dist/assets/consul-ui-698b9ad7e3ebf8146d4d081130554ca9.js @@ -0,0 +1,4471 @@ +"use strict" +define("consul-ui/abilities/acl",["exports","consul-ui/abilities/base","@ember/service"],(function(e,t,n){var l,r,i +function o(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let a=(l=(0,n.inject)("env"),r=class extends t.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="env",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0}),o(this,"resource","acl"),o(this,"segmented",!1)}get canAccess(){return!this.env.var("CONSUL_ACLS_ENABLED")||this.canRead}get canRead(){return this.env.var("CONSUL_ACLS_ENABLED")&&super.canRead}get canDuplicate(){return this.env.var("CONSUL_ACLS_ENABLED")&&super.canWrite}get canDelete(){return this.env.var("CONSUL_ACLS_ENABLED")&&"anonymous"!==this.item.ID&&super.canWrite}get canUse(){return this.env.var("CONSUL_ACLS_ENABLED")}},u=r.prototype,s="env",c=[l],d={configurable:!0,enumerable:!0,writable:!0,initializer:null},f={},Object.keys(d).forEach((function(e){f[e]=d[e]})),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=c.slice().reverse().reduce((function(e,t){return t(u,s,e)||e}),f),p&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(p):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(u,s,f),f=null),i=f,r) +var u,s,c,d,p,f +e.default=a})),define("consul-ui/abilities/auth-method",["exports","consul-ui/abilities/base","@ember/service"],(function(e,t,n){var l,r,i +function o(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let a=(l=(0,n.inject)("env"),r=class extends t.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="env",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0}),o(this,"resource","acl"),o(this,"segmented",!1)}get canRead(){return this.env.var("CONSUL_ACLS_ENABLED")&&super.canRead}get canCreate(){return this.env.var("CONSUL_ACLS_ENABLED")&&super.canCreate}get canDelete(){return this.env.var("CONSUL_ACLS_ENABLED")&&super.canDelete}get canUse(){return this.env.var("CONSUL_SSO_ENABLED")}},u=r.prototype,s="env",c=[l],d={configurable:!0,enumerable:!0,writable:!0,initializer:null},f={},Object.keys(d).forEach((function(e){f[e]=d[e]})),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=c.slice().reverse().reduce((function(e,t){return t(u,s,e)||e}),f),p&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(p):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(u,s,f),f=null),i=f,r) +var u,s,c,d,p,f +e.default=a})),define("consul-ui/abilities/base",["exports","@ember/service","@ember/object","ember-can"],(function(e,t,n,l){var r,i,o +function a(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.ACCESS_WRITE=e.ACCESS_READ=e.ACCESS_LIST=void 0 +const u="read" +e.ACCESS_READ=u +const s="write" +e.ACCESS_WRITE=s +const c="list" +e.ACCESS_LIST=c +let d=(r=(0,t.inject)("repository/permission"),i=class extends l.Ability{constructor(){var e,t,n,l +super(...arguments),e=this,t="permissions",l=this,(n=o)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0}),a(this,"resource",""),a(this,"segmented",!0)}generate(e){return this.permissions.generate(this.resource,e)}generateForSegment(e){return this.segmented?[this.permissions.generate(this.resource,u,e),this.permissions.generate(this.resource,s,e)]:[]}get isLinkable(){return!0}get isNew(){return this.item.isNew}get isPristine(){return this.item.isPristine}get canRead(){if(void 0!==this.item){const e=((0,n.get)(this,"item.Resources")||[]).find((e=>e.Access===u)) +if(e)return e.Allow}return this.permissions.has(this.generate(u))}get canList(){if(void 0!==this.item){const e=((0,n.get)(this,"item.Resources")||[]).find((e=>e.Access===c)) +if(e)return e.Allow}return this.permissions.has(this.generate(c))}get canWrite(){if(void 0!==this.item){const e=((0,n.get)(this,"item.Resources")||[]).find((e=>e.Access===s)) +if(e)return e.Allow}return this.permissions.has(this.generate(s))}get canCreate(){return this.canWrite}get canDelete(){return this.canWrite}get canUpdate(){return this.canWrite}},p=i.prototype,f="permissions",m=[r],h={configurable:!0,enumerable:!0,writable:!0,initializer:null},y={},Object.keys(h).forEach((function(e){y[e]=h[e]})),y.enumerable=!!y.enumerable,y.configurable=!!y.configurable,("value"in y||y.initializer)&&(y.writable=!0),y=m.slice().reverse().reduce((function(e,t){return t(p,f,e)||e}),y),b&&void 0!==y.initializer&&(y.value=y.initializer?y.initializer.call(b):void 0,y.initializer=void 0),void 0===y.initializer&&(Object.defineProperty(p,f,y),y=null),o=y,i) +var p,f,m,h,b,y +e.default=d})),define("consul-ui/abilities/intention",["exports","consul-ui/abilities/base"],(function(e,t){function n(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class l extends t.default{constructor(){super(...arguments),n(this,"resource","intention")}get canWrite(){return(void 0===this.item||void 0===this.item.SourcePeer)&&(super.canWrite&&(void 0===this.item||!this.canViewCRD))}get canViewCRD(){return void 0!==this.item&&this.item.IsManagedByCRD}}e.default=l})),define("consul-ui/abilities/kv",["exports","consul-ui/abilities/base"],(function(e,t){function n(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class l extends t.default{constructor(){super(...arguments),n(this,"resource","key")}generateForSegment(e){let n=super.generateForSegment(e) +return e.endsWith("/")&&(n=n.concat(this.permissions.generate(this.resource,t.ACCESS_LIST,e))),n}get canRead(){return!0}get canList(){return!0}get canWrite(){return!0}}e.default=l})),define("consul-ui/abilities/license",["exports","consul-ui/abilities/base","@ember/service"],(function(e,t,n){var l,r,i +function o(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let a=(l=(0,n.inject)("env"),r=class extends t.default{constructor(){var e,t,n,l +super(...arguments),o(this,"resource","operator"),o(this,"segmented",!1),e=this,t="env",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}get canRead(){return this.env.var("CONSUL_NSPACES_ENABLED")&&super.canRead}},u=r.prototype,s="env",c=[l],d={configurable:!0,enumerable:!0,writable:!0,initializer:null},f={},Object.keys(d).forEach((function(e){f[e]=d[e]})),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=c.slice().reverse().reduce((function(e,t){return t(u,s,e)||e}),f),p&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(p):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(u,s,f),f=null),i=f,r) +var u,s,c,d,p,f +e.default=a})),define("consul-ui/abilities/node",["exports","consul-ui/abilities/base"],(function(e,t){function n(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class l extends t.default{constructor(){super(...arguments),n(this,"resource","node")}}e.default=l})),define("consul-ui/abilities/nspace",["exports","consul-ui/abilities/base","@ember/service"],(function(e,t,n){var l,r,i +function o(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let a=(l=(0,n.inject)("env"),r=class extends t.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="env",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0}),o(this,"resource","operator"),o(this,"segmented",!1)}get isLinkable(){return!this.item.DeletedAt}get canManage(){return this.canCreate}get canDelete(){return"default"!==this.item.Name&&super.canDelete}get canChoose(){return this.canUse}get canUse(){return this.env.var("CONSUL_NSPACES_ENABLED")}},u=r.prototype,s="env",c=[l],d={configurable:!0,enumerable:!0,writable:!0,initializer:null},f={},Object.keys(d).forEach((function(e){f[e]=d[e]})),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=c.slice().reverse().reduce((function(e,t){return t(u,s,e)||e}),f),p&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(p):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(u,s,f),f=null),i=f,r) +var u,s,c,d,p,f +e.default=a})),define("consul-ui/abilities/overview",["exports","consul-ui/abilities/base","@ember/service"],(function(e,t,n){var l,r,i +function o(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let a=(l=(0,n.inject)("env"),r=class extends t.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="env",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0}),o(this,"resource","operator"),o(this,"segmented",!1)}get canAccess(){return!this.env.var("CONSUL_HCP_ENABLED")&&this.canRead}},u=r.prototype,s="env",c=[l],d={configurable:!0,enumerable:!0,writable:!0,initializer:null},f={},Object.keys(d).forEach((function(e){f[e]=d[e]})),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=c.slice().reverse().reduce((function(e,t){return t(u,s,e)||e}),f),p&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(p):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(u,s,f),f=null),i=f,r) +var u,s,c,d,p,f +e.default=a})),define("consul-ui/abilities/partition",["exports","consul-ui/abilities/base","@ember/service"],(function(e,t,n){var l,r,i,o,a +function u(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function s(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function c(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let d=(l=(0,n.inject)("env"),r=(0,n.inject)("repository/dc"),i=class extends t.default{constructor(){super(...arguments),u(this,"env",o,this),u(this,"dcs",a,this),s(this,"resource","operator"),s(this,"segmented",!1)}get isLinkable(){return!this.item.DeletedAt}get canManage(){return this.canWrite}get canCreate(){return!(this.dcs.peekAll().length>1)&&super.canCreate}get canDelete(){return"default"!==this.item.Name&&super.canDelete}get canChoose(){return void 0!==this.dc&&(this.canUse&&this.dc.Primary)}get canUse(){return this.env.var("CONSUL_PARTITIONS_ENABLED")}},o=c(i.prototype,"env",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),a=c(i.prototype,"dcs",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),i) +e.default=d})),define("consul-ui/abilities/peer",["exports","consul-ui/abilities/base","@ember/service"],(function(e,t,n){var l,r,i +function o(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let a=(l=(0,n.inject)("env"),r=class extends t.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="env",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0}),o(this,"resource","peering"),o(this,"segmented",!1)}get isLinkable(){return this.canDelete}get canDelete(){return!["DELETING"].includes(this.item.State)&&super.canDelete}get canUse(){return this.env.var("CONSUL_PEERINGS_ENABLED")}},u=r.prototype,s="env",c=[l],d={configurable:!0,enumerable:!0,writable:!0,initializer:null},f={},Object.keys(d).forEach((function(e){f[e]=d[e]})),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=c.slice().reverse().reduce((function(e,t){return t(u,s,e)||e}),f),p&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(p):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(u,s,f),f=null),i=f,r) +var u,s,c,d,p,f +e.default=a})),define("consul-ui/abilities/permission",["exports","consul-ui/abilities/base"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class n extends t.default{get canRead(){return this.permissions.permissions.length>0}}e.default=n})),define("consul-ui/abilities/policy",["exports","consul-ui/abilities/base","@ember/service","consul-ui/helpers/policy/typeof"],(function(e,t,n,l){var r,i,o +function a(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let u=(r=(0,n.inject)("env"),i=class extends t.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="env",l=this,(n=o)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0}),a(this,"resource","acl"),a(this,"segmented",!1)}get canRead(){return this.env.var("CONSUL_ACLS_ENABLED")&&super.canRead}get canWrite(){return this.env.var("CONSUL_ACLS_ENABLED")&&(void 0===this.item||!["policy-management","read-only"].includes((0,l.typeOf)([this.item])))&&super.canWrite}get canCreate(){return this.env.var("CONSUL_ACLS_ENABLED")&&super.canCreate}get canDelete(){return this.env.var("CONSUL_ACLS_ENABLED")&&(void 0===this.item||"policy-management"!==(0,l.typeOf)([this.item]))&&super.canDelete}},s=i.prototype,c="env",d=[r],p={configurable:!0,enumerable:!0,writable:!0,initializer:null},m={},Object.keys(p).forEach((function(e){m[e]=p[e]})),m.enumerable=!!m.enumerable,m.configurable=!!m.configurable,("value"in m||m.initializer)&&(m.writable=!0),m=d.slice().reverse().reduce((function(e,t){return t(s,c,e)||e}),m),f&&void 0!==m.initializer&&(m.value=m.initializer?m.initializer.call(f):void 0,m.initializer=void 0),void 0===m.initializer&&(Object.defineProperty(s,c,m),m=null),o=m,i) +var s,c,d,p,f,m +e.default=u})),define("consul-ui/abilities/role",["exports","consul-ui/abilities/base","@ember/service"],(function(e,t,n){var l,r,i +function o(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let a=(l=(0,n.inject)("env"),r=class extends t.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="env",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0}),o(this,"resource","acl"),o(this,"segmented",!1)}get canRead(){return this.env.var("CONSUL_ACLS_ENABLED")&&super.canRead}get canCreate(){return this.env.var("CONSUL_ACLS_ENABLED")&&super.canCreate}get canDelete(){return this.env.var("CONSUL_ACLS_ENABLED")&&super.canDelete}},u=r.prototype,s="env",c=[l],d={configurable:!0,enumerable:!0,writable:!0,initializer:null},f={},Object.keys(d).forEach((function(e){f[e]=d[e]})),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=c.slice().reverse().reduce((function(e,t){return t(u,s,e)||e}),f),p&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(p):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(u,s,f),f=null),i=f,r) +var u,s,c,d,p,f +e.default=a})),define("consul-ui/abilities/server",["exports","consul-ui/abilities/base"],(function(e,t){function n(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class l extends t.default{constructor(){super(...arguments),n(this,"resource","operator"),n(this,"segmented",!1)}}e.default=l})),define("consul-ui/abilities/service-instance",["exports","consul-ui/abilities/base"],(function(e,t){function n(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class l extends t.default{constructor(){super(...arguments),n(this,"resource","service")}generateForSegment(e){return super.generateForSegment(...arguments).concat([this.permissions.generate("intention",t.ACCESS_READ,e),this.permissions.generate("intention",t.ACCESS_WRITE,e)])}}e.default=l})),define("consul-ui/abilities/session",["exports","consul-ui/abilities/base"],(function(e,t){function n(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class l extends t.default{constructor(){super(...arguments),n(this,"resource","session")}}e.default=l})),define("consul-ui/abilities/token",["exports","consul-ui/abilities/base","@ember/service","consul-ui/helpers/token/is-legacy","consul-ui/helpers/token/is-anonymous"],(function(e,t,n,l,r){var i,o,a +function u(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let s=(i=(0,n.inject)("env"),o=class extends t.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="env",l=this,(n=a)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0}),u(this,"resource","acl"),u(this,"segmented",!1)}get canRead(){return this.env.var("CONSUL_ACLS_ENABLED")&&super.canRead}get canCreate(){return this.env.var("CONSUL_ACLS_ENABLED")&&super.canCreate}get canDelete(){return this.env.var("CONSUL_ACLS_ENABLED")&&!(0,r.isAnonymous)([this.item])&&this.item.AccessorID!==this.token.AccessorID&&super.canDelete}get canDuplicate(){return this.env.var("CONSUL_ACLS_ENABLED")&&!(0,l.isLegacy)([this.item])&&super.canWrite}},c=o.prototype,d="env",p=[i],f={configurable:!0,enumerable:!0,writable:!0,initializer:null},h={},Object.keys(f).forEach((function(e){h[e]=f[e]})),h.enumerable=!!h.enumerable,h.configurable=!!h.configurable,("value"in h||h.initializer)&&(h.writable=!0),h=p.slice().reverse().reduce((function(e,t){return t(c,d,e)||e}),h),m&&void 0!==h.initializer&&(h.value=h.initializer?h.initializer.call(m):void 0,h.initializer=void 0),void 0===h.initializer&&(Object.defineProperty(c,d,h),h=null),a=h,o) +var c,d,p,f,m,h +e.default=s})),define("consul-ui/abilities/upstream",["exports","consul-ui/abilities/base"],(function(e,t){function n(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class l extends t.default{constructor(){super(...arguments),n(this,"resource","upstream")}get isLinkable(){return this.item.InstanceCount>0}}e.default=l})),define("consul-ui/abilities/zervice",["exports","consul-ui/abilities/base"],(function(e,t){function n(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class l extends t.default{constructor(){super(...arguments),n(this,"resource","service")}get isLinkable(){return this.item.InstanceCount>0}get canReadIntention(){if(void 0===this.item||void 0===this.item.Resources)return!1 +return void 0!==this.item.Resources.find((e=>"intention"===e.Resource&&"read"===e.Access&&!0===e.Allow))}get canWriteIntention(){if(void 0===this.item||void 0===this.item.Resources)return!1 +return void 0!==this.item.Resources.find((e=>"intention"===e.Resource&&"write"===e.Access&&!0===e.Allow))}get canCreateIntention(){return this.canWriteIntention}get canUpdateIntention(){return this.canWriteIntention}}e.default=l})),define("consul-ui/abilities/zone",["exports","consul-ui/abilities/base","@ember/service"],(function(e,t,n){var l,r,i +Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let o=(l=(0,n.inject)("env"),r=class extends t.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="env",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}get canRead(){return this.env.var("CONSUL_NSPACES_ENABLED")}},a=r.prototype,u="env",s=[l],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},p={},Object.keys(c).forEach((function(e){p[e]=c[e]})),p.enumerable=!!p.enumerable,p.configurable=!!p.configurable,("value"in p||p.initializer)&&(p.writable=!0),p=s.slice().reverse().reduce((function(e,t){return t(a,u,e)||e}),p),d&&void 0!==p.initializer&&(p.value=p.initializer?p.initializer.call(d):void 0,p.initializer=void 0),void 0===p.initializer&&(Object.defineProperty(a,u,p),p=null),i=p,r) +var a,u,s,c,d,p +e.default=o})),define("consul-ui/adapters/-json-api",["exports","@ember-data/adapter/json-api"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/adapters/application",["exports","consul-ui/adapters/http","@ember/service"],(function(e,t,n){var l,r,i,o,a +function u(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function s(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.NSPACE_QUERY_PARAM=e.DATACENTER_QUERY_PARAM=void 0 +e.DATACENTER_QUERY_PARAM="dc" +e.NSPACE_QUERY_PARAM="ns" +let c=(l=(0,n.inject)("client/http"),r=(0,n.inject)("env"),i=class extends t.default{constructor(){super(...arguments),u(this,"client",o,this),u(this,"env",a,this)}formatNspace(e){if(this.env.var("CONSUL_NSPACES_ENABLED"))return""!==e?{ns:e}:void 0}formatDatacenter(e){return{dc:e}}},o=s(i.prototype,"client",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),a=s(i.prototype,"env",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),i) +e.default=c})),define("consul-ui/adapters/auth-method",["exports","consul-ui/adapters/application"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class n extends t.default{requestForQuery(e,t){let{dc:n,ns:l,partition:r,index:i,id:o}=t +return e` + GET /v1/acl/auth-methods?${{dc:n}} + + ${{ns:l,partition:r,index:i}} + `}requestForQueryRecord(e,t){let{dc:n,ns:l,partition:r,index:i,id:o}=t +if(void 0===o)throw new Error("You must specify an id") +return e` + GET /v1/acl/auth-method/${o}?${{dc:n}} + + ${{ns:l,partition:r,index:i}} + `}}e.default=n})),define("consul-ui/adapters/binding-rule",["exports","consul-ui/adapters/application"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class n extends t.default{requestForQuery(e,t){let{dc:n,ns:l,partition:r,authmethod:i,index:o}=t +return e` + GET /v1/acl/binding-rules?${{dc:n,authmethod:i}} + + ${{ns:l,partition:r,index:o}} + `}}e.default=n})),define("consul-ui/adapters/coordinate",["exports","consul-ui/adapters/application"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class n extends t.default{requestForQuery(e,t){let{dc:n,partition:l,index:r,uri:i}=t +return e` + GET /v1/coordinate/nodes?${{dc:n}} + X-Request-ID: ${i} + + ${{partition:l,index:r}} + `}}e.default=n})),define("consul-ui/adapters/discovery-chain",["exports","consul-ui/adapters/application"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class n extends t.default{requestForQueryRecord(e,t){let{dc:n,ns:l,partition:r,index:i,id:o,uri:a}=t +if(void 0===o)throw new Error("You must specify an id") +return e` + GET /v1/discovery-chain/${o}?${{dc:n}} + X-Request-ID: ${a} + + ${{ns:l,partition:r,index:i}} + `}}e.default=n})),define("consul-ui/adapters/http",["exports","@ember/service","@ember-data/adapter","@ember-data/adapter/error"],(function(e,t,n,l){var r,i,o +Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const a=function(e,t,n){let l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{} +return e.rpc((function(e){for(var t=arguments.length,l=new Array(t>1?t-1:0),r=1;r1?t-1:0),r=1;r1?t-1:0),r=1;r1?t-1:0),r=1;r=500?new l.ServerError(t,r):new l.default(t,r)}}catch(i){n=i}throw n}query(e,t,n){return a(this,t.modelName,"Query",n)}queryRecord(e,t,n){return a(this,t.modelName,"QueryRecord",n)}findAll(e,t){return a(this,t.modelName,"FindAll")}createRecord(e,t,n){return u(this,t.modelName,"CreateRecord",n)}updateRecord(e,t,n){return u(this,t.modelName,"UpdateRecord",n)}deleteRecord(e,t,n){return u(this,t.modelName,"DeleteRecord",n)}},c=i.prototype,d="client",p=[r],f={configurable:!0,enumerable:!0,writable:!0,initializer:null},h={},Object.keys(f).forEach((function(e){h[e]=f[e]})),h.enumerable=!!h.enumerable,h.configurable=!!h.configurable,("value"in h||h.initializer)&&(h.writable=!0),h=p.slice().reverse().reduce((function(e,t){return t(c,d,e)||e}),h),m&&void 0!==h.initializer&&(h.value=h.initializer?h.initializer.call(m):void 0,h.initializer=void 0),void 0===h.initializer&&(Object.defineProperty(c,d,h),h=null),o=h,i) +var c,d,p,f,m,h +e.default=s})),define("consul-ui/adapters/intention",["exports","consul-ui/adapters/application","@ember/object"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class l extends t.default{requestForQuery(e,t){let{dc:n,ns:l,partition:r,filter:i,index:o,uri:a}=t +return e` + GET /v1/connect/intentions?${{dc:n}} + X-Request-ID: ${a}${void 0!==i?`\n X-Range: ${i}`:""} + + ${{partition:r,ns:"*",index:o,filter:i}} + `}requestForQueryRecord(e,t){let{dc:n,index:l,id:r}=t +if(void 0===r)throw new Error("You must specify an id") +if(r.match(/^peer:/)){const[t,i,o,a,u,s,c]=r.split(":").map(decodeURIComponent) +return e` + GET /v1/connect/intentions/exact?${{source:`${t}:${i}/${o}/${a}`,destination:`${u}/${s}/${c}`,dc:n}} + Cache-Control: no-store + + ${{index:l}} + `}{const[t,i,o,a,u,s]=r.split(":").map(decodeURIComponent) +return e` + GET /v1/connect/intentions/exact?${{source:`${t}/${i}/${o}`,destination:`${a}/${u}/${s}`,dc:n}} + Cache-Control: no-store + + ${{index:l}} + `}}requestForCreateRecord(e,t,l){const r={SourceName:t.SourceName,DestinationName:t.DestinationName,SourceNS:t.SourceNS,DestinationNS:t.DestinationNS,SourcePartition:t.SourcePartition,DestinationPartition:t.DestinationPartition,SourceType:t.SourceType,Meta:t.Meta,Description:t.Description} +return(0,n.get)(t,"Action.length")?r.Action=t.Action:t.Permissions&&(r.Permissions=t.Permissions),e` + PUT /v1/connect/intentions/exact?${{source:`${l.SourcePartition}/${l.SourceNS}/${l.SourceName}`,destination:`${l.DestinationPartition}/${l.DestinationNS}/${l.DestinationName}`,dc:l.Datacenter}} + + ${r} + `}requestForUpdateRecord(e,t,n){return delete t.DestinationName,delete t.DestinationNS,delete t.DestinationPartition,this.requestForCreateRecord(...arguments)}requestForDeleteRecord(e,t,n){return e` + DELETE /v1/connect/intentions/exact?${{source:`${n.SourcePartition}/${n.SourceNS}/${n.SourceName}`,destination:`${n.DestinationPartition}/${n.DestinationNS}/${n.DestinationName}`,dc:n.Datacenter}} + `}}e.default=l})),define("consul-ui/adapters/kv",["exports","consul-ui/adapters/application","consul-ui/utils/isFolder","consul-ui/utils/keyToArray","consul-ui/models/kv"],(function(e,t,n,l,r){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class i extends t.default{async requestForQuery(e,t){let{dc:n,ns:r,partition:i,index:o,id:a,separator:u}=t +if(void 0===a)throw new Error("You must specify an id") +const s=await(e` + GET /v1/kv/${(0,l.default)(a)}?${{keys:null,dc:n,separator:u}} + + ${{ns:r,partition:i,index:o}} + `) +return await s(((e,t)=>delete e["x-consul-index"])),s}async requestForQueryRecord(e,t){let{dc:n,ns:r,partition:i,index:o,id:a}=t +if(void 0===a)throw new Error("You must specify an id") +const u=await(e` + GET /v1/kv/${(0,l.default)(a)}?${{dc:n}} + + ${{ns:r,partition:i,index:o}} + `) +return await u(((e,t)=>delete e["x-consul-index"])),u}requestForCreateRecord(e,t,n){const i={dc:n.Datacenter,ns:n.Namespace,partition:n.Partition} +return e` + PUT /v1/kv/${(0,l.default)(n[r.SLUG_KEY])}?${i} + Content-Type: text/plain; charset=utf-8 + + ${t} + `}requestForUpdateRecord(e,t,n){const i={dc:n.Datacenter,ns:n.Namespace,partition:n.Partition,flags:n.Flags} +return e` + PUT /v1/kv/${(0,l.default)(n[r.SLUG_KEY])}?${i} + Content-Type: text/plain; charset=utf-8 + + ${t} + `}requestForDeleteRecord(e,t,i){let o;(0,n.default)(i[r.SLUG_KEY])&&(o=null) +const a={dc:i.Datacenter,ns:i.Namespace,partition:i.Partition,recurse:o} +return e` + DELETE /v1/kv/${(0,l.default)(i[r.SLUG_KEY])}?${a} + `}}e.default=i})) +define("consul-ui/adapters/node",["exports","consul-ui/adapters/application"],(function(e,t){function n(e,t){var n=Object.keys(e) +if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) +t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function l(e){for(var t=1;t({ID:e.ID}))),RoleDefaults:t.ACLs.RoleDefaults.map((e=>({ID:e.ID})))}}} + `}requestForUpdateRecord(e,t,l){return e` + PUT /v1/namespace/${l[n.SLUG_KEY]}?${{dc:l.Datacenter,partition:l.Partition}} + + ${{Description:t.Description,ACLs:{PolicyDefaults:t.ACLs.PolicyDefaults.map((e=>({ID:e.ID}))),RoleDefaults:t.ACLs.RoleDefaults.map((e=>({ID:e.ID})))}}} + `}requestForDeleteRecord(e,t,l){return e` + DELETE /v1/namespace/${l[n.SLUG_KEY]}?${{dc:l.Datacenter,partition:l.Partition}} + `}}e.default=l})),define("consul-ui/adapters/oidc-provider",["exports","consul-ui/adapters/application","@ember/service"],(function(e,t,n){var l,r,i +Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let o=(l=(0,n.inject)("env"),r=class extends t.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="env",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}requestForQuery(e,t){let{dc:n,ns:l,partition:r,index:i,uri:o}=t +return e` + GET /v1/internal/ui/oidc-auth-methods?${{dc:n}} + X-Request-ID: ${o} + + ${{ns:l,partition:r,index:i}} + `}requestForQueryRecord(e,t){let{dc:n,ns:l,partition:r,id:i}=t +if(void 0===i)throw new Error("You must specify an id") +return e` + POST /v1/acl/oidc/auth-url?${{dc:n,ns:l,partition:r}} + Cache-Control: no-store + + ${{AuthMethod:i,RedirectURI:`${this.env.var("CONSUL_BASE_UI_URL")}/oidc/callback`}} + `}requestForAuthorize(e,t){let{dc:n,ns:l,partition:r,id:i,code:o,state:a}=t +if(void 0===i)throw new Error("You must specify an id") +if(void 0===o)throw new Error("You must specify an code") +if(void 0===a)throw new Error("You must specify an state") +return e` + POST /v1/acl/oidc/callback?${{dc:n,ns:l,partition:r}} + Cache-Control: no-store + + ${{AuthMethod:i,Code:o,State:a}} + `}requestForLogout(e,t){let{id:n}=t +if(void 0===n)throw new Error("You must specify an id") +return e` + POST /v1/acl/logout + Cache-Control: no-store + X-Consul-Token: ${n} + `}authorize(e,t,n,l){return this.rpc((function(e,t,n,l){return e.requestForAuthorize(t,n,l)}),(function(e,t,n,l){return e.respondForAuthorize(t,n,l)}),l,t.modelName)}logout(e,t,n,l){return this.rpc((function(e,t,n,l){return e.requestForLogout(t,n,l)}),(function(e,t,n,l){return{}}),l,t.modelName)}},a=r.prototype,u="env",s=[l],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},p={},Object.keys(c).forEach((function(e){p[e]=c[e]})),p.enumerable=!!p.enumerable,p.configurable=!!p.configurable,("value"in p||p.initializer)&&(p.writable=!0),p=s.slice().reverse().reduce((function(e,t){return t(a,u,e)||e}),p),d&&void 0!==p.initializer&&(p.value=p.initializer?p.initializer.call(d):void 0,p.initializer=void 0),void 0===p.initializer&&(Object.defineProperty(a,u,p),p=null),i=p,r) +var a,u,s,c,d,p +e.default=o})),define("consul-ui/adapters/partition",["exports","consul-ui/adapters/application","consul-ui/models/partition"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class l extends t.default{async requestForQuery(e,t){let{ns:n,dc:l,index:r}=t +const i=await(e` + GET /v1/partitions?${{dc:l}} + + ${{index:r}} + `) +return await i(((e,t)=>delete e["x-consul-index"])),i}async requestForQueryRecord(e,t){let{ns:n,dc:l,index:r,id:i}=t +if(void 0===i)throw new Error("You must specify an id") +const o=await(e` + GET /v1/partition/${i}?${{dc:l}} + + ${{index:r}} + `) +return await o(((e,t)=>delete e["x-consul-index"])),o}async requestForCreateRecord(e,t,l){return e` + PUT /v1/partition/${l[n.SLUG_KEY]}?${{dc:l.Datacenter}} + + ${{Name:t.Name,Description:t.Description}} + `}async requestForUpdateRecord(e,t,l){return e` + PUT /v1/partition/${l[n.SLUG_KEY]}?${{dc:l.Datacenter}} + + ${{Description:t.Description}} + `}async requestForDeleteRecord(e,t,l){return e` + DELETE /v1/partition/${l[n.SLUG_KEY]}?${{dc:l.Datacenter}} + `}}e.default=l})),define("consul-ui/adapters/permission",["exports","consul-ui/adapters/application","@ember/service"],(function(e,t,n){var l,r,i,o,a +function u(e,t){var n=Object.keys(e) +if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) +t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function s(e){for(var t=1;ts(s({},e),{},{Namespace:l})))),this.env.var("CONSUL_PARTITIONS_ENABLED")&&(i=i.map((e=>s(s({},e),{},{Partition:r})))),e` + POST /v1/internal/acl/authorize?${{dc:n}} + + ${i} + `}authorize(e,t,n,l){return this.rpc((async(e,t,n,l)=>{const r=this.env.var("CONSUL_NSPACES_ENABLED"),i=this.env.var("CONSUL_PARTITIONS_ENABLED") +if(r||i){const e=await this.settings.findBySlug("token") +r&&(void 0!==n.ns&&0!==n.ns.length||(n.ns=e.Namespace)),i&&(void 0!==n.partition&&0!==n.partition.length||(n.partition=e.Partition))}return e.requestForAuthorize(t,n)}),(function(e,t,n,l){return t((function(e,t){return t}))}),l,t.modelName)}},o=p(i.prototype,"env",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),a=p(i.prototype,"settings",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),i) +e.default=f})),define("consul-ui/adapters/policy",["exports","consul-ui/adapters/application","consul-ui/models/policy"],(function(e,t,n){function l(e,t){var n=Object.keys(e) +if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) +t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function r(e){for(var t=1;tdelete e["x-consul-index"])),a}requestForCreateRecord(e,t,n){return e` + PUT /v1/acl/token?${u(u({},this.formatDatacenter(n.Datacenter)),{},{ns:n.Namespace,partition:n.Partition})} + + ${{Description:t.Description,Policies:t.Policies,Roles:t.Roles,ServiceIdentities:t.ServiceIdentities,NodeIdentities:t.NodeIdentities,Local:t.Local}} + `}requestForUpdateRecord(e,t,n){if(void 0!==n.Rules)return e` + PUT /v1/acl/update?${this.formatDatacenter(n.Datacenter)} + + ${t} + ` +const r=u(u({},this.formatDatacenter(n.Datacenter)),{},{ns:n.Namespace,partition:n.Partition}) +return e` + PUT /v1/acl/token/${n[l.SLUG_KEY]}?${r} + + ${{Description:t.Description,AccessorID:t.AccessorID,Policies:t.Policies,Roles:t.Roles,ServiceIdentities:t.ServiceIdentities,NodeIdentities:t.NodeIdentities,Local:t.Local}} + `}requestForDeleteRecord(e,t,n){const r={dc:n.Datacenter,ns:n.Namespace,partition:n.Partition} +return e` + DELETE /v1/acl/token/${n[l.SLUG_KEY]}?${r} + `}requestForSelf(e,t,n){let{dc:l,index:r,secret:i}=n +return e` + GET /v1/acl/token/self?${{dc:l}} + X-Consul-Token: ${i} + Cache-Control: no-store + + ${{index:r}} + `}requestForCloneRecord(e,t,n){const r=n[l.SLUG_KEY] +if(void 0===r)throw new Error("You must specify an id") +return e` + PUT /v1/acl/token/${r}/clone?${{dc:n.Datacenter,ns:n.Namespace,partition:n.Partition}} + `}self(e,t,n,l){return this.rpc((function(e,t,n,l){return e.requestForSelf(t,n,l)}),(function(e,t,n,l){return e.respondForSelf(t,n,l)}),l,t.modelName)}clone(e,t,n,l){return this.rpc((function(e,t,n,l){return e.requestForCloneRecord(t,n,l)}),((e,t,n,l)=>{const r={dc:l.Datacenter,ns:l.Namespace,partition:l.Partition} +return e.respondForQueryRecord(t,r)}),l,t.modelName)}},d=i.prototype,p="store",f=[r],m={configurable:!0,enumerable:!0,writable:!0,initializer:null},b={},Object.keys(m).forEach((function(e){b[e]=m[e]})),b.enumerable=!!b.enumerable,b.configurable=!!b.configurable,("value"in b||b.initializer)&&(b.writable=!0),b=f.slice().reverse().reduce((function(e,t){return t(d,p,e)||e}),b),h&&void 0!==b.initializer&&(b.value=b.initializer?b.initializer.call(h):void 0,b.initializer=void 0),void 0===b.initializer&&(Object.defineProperty(d,p,b),b=null),o=b,i) +var d,p,f,m,h,b +e.default=c})),define("consul-ui/adapters/topology",["exports","consul-ui/adapters/application"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class n extends t.default{requestForQueryRecord(e,t){let{dc:n,ns:l,partition:r,kind:i,index:o,id:a,uri:u}=t +if(void 0===a)throw new Error("You must specify an id") +return e` + GET /v1/internal/ui/service-topology/${a}?${{dc:n,kind:i}} + X-Request-ID: ${u} + + ${{ns:l,partition:r,index:o}} + `}}e.default=n})),define("consul-ui/app",["exports","@ember/application","ember-resolver","ember-load-initializers","consul-ui/config/environment"],(function(e,t,n,l,r){function i(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class o extends t.default{constructor(){super(...arguments),i(this,"modulePrefix",r.default.modulePrefix),i(this,"podModulePrefix",r.default.podModulePrefix),i(this,"Resolver",n.default)}}e.default=o,(0,l.default)(o,r.default.modulePrefix)})),define("consul-ui/component-managers/glimmer",["exports","@glimmer/component/-private/ember-component-manager"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/-dynamic-element-alt",["exports","@glimmer/component"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class n extends t.default{}e.default=n})),define("consul-ui/components/-dynamic-element",["exports","@glimmer/component"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class n extends t.default{}e.default=n})),define("consul-ui/components/action/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"KpdZ2T3D",block:'[[[1,"\\n"],[41,[30,1],[[[11,"label"],[16,"for",[30,1]],[17,2],[12],[18,8,null],[13]],[]],[[[41,[30,3],[[[41,[30,4],[[[11,3],[16,6,[30,3]],[24,"target","_blank"],[24,"rel","noopener noreferrer"],[17,2],[12],[18,8,null],[13]],[]],[[[11,3],[16,6,[30,3]],[17,2],[12],[18,8,null],[13]],[]]]],[]],[[[11,"button"],[16,4,[28,[37,2],[[30,5],"button"],null]],[16,"tabindex",[30,6]],[17,2],[4,[38,3],["click",[28,[37,4],[[30,7]],null]],null],[12],[18,8,null],[13]],[]]]],[]]]],["@for","&attrs","@href","@external","@type","@tabindex","@onclick","&default"],false,["if","yield","or","on","optional"]]',moduleName:"consul-ui/components/action/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/anonymous/index",["exports","@ember/component","@ember/template-factory"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const l=(0,n.createTemplateFactory)({id:"MXp+ENoB",block:'[[[1,"\\n"],[18,1,null]],["&default"],false,["yield"]]',moduleName:"consul-ui/components/anonymous/index.hbs",isStrictMode:!1}) +var r=(0,t.setComponentTemplate)(l,t.default.extend({tagName:""})) +e.default=r})),define("consul-ui/components/app-error/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"staay0IG",block:'[[[1,"\\n"],[8,[39,0],null,null,[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n Error "],[1,[30,1,["status"]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@error","@login"],[[30,1],[52,[28,[37,4],[[30,1,["status"]],"403"],null],[30,2]]]],null],[1,"\\n "]],[]]]]],[1,"\\n"]],[]]]]],[1,"\\n"]],["@error","@login"],false,["app-view","block-slot","error-state","if","eq"]]',moduleName:"consul-ui/components/app-error/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/app-view/index",["exports","@ember/component","@ember/template-factory","block-slots"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"oa2Rdx8I",block:'[[[1,"\\n"],[11,0],[24,0,"app-view"],[17,1],[12],[1,"\\n "],[18,2,null],[1,"\\n "],[10,"header"],[12],[1,"\\n "],[10,0],[12],[1,"\\n "],[10,0],[12],[1,"\\n "],[10,"nav"],[14,"aria-label","Breadcrumb"],[12],[1,"\\n "],[8,[39,1],null,[["@name"],["breadcrumbs"]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],null,[["class"],["with-breadcrumbs"]]]],[1,"\\n "],[18,2,null],[1,"\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[10,0],[14,0,"title"],[12],[1,"\\n "],[10,0],[14,0,"title-left-container"],[12],[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[18,2,null],[1,"\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[10,0],[14,0,"actions"],[12],[1,"\\n "],[8,[39,1],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[8,[39,3],null,[["@name"],["app-view-actions"]],null],[1,"\\n "],[18,2,null],[1,"\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[8,[39,1],null,[["@name"],["nav"]],[["default"],[[[[1,"\\n "],[18,2,null],[1,"\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[8,[39,1],null,[["@name"],["toolbar"]],[["default"],[[[[1,"\\n "],[10,"input"],[14,1,"toolbar-toggle"],[14,4,"checkbox"],[12],[13],[1,"\\n "],[18,2,null],[1,"\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[10,0],[12],[1,"\\n "],[8,[39,1],null,[["@name"],["content"]],[["default"],[[[[18,2,null]],[]]]]],[1,"\\n "],[13],[1,"\\n"],[13],[1,"\\n"]],["&attrs","&default"],false,["yield","yield-slot","document-attrs","portal-target"]]',moduleName:"consul-ui/components/app-view/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,t.default.extend(l.default,{tagName:""})) +e.default=i})),define("consul-ui/components/app/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@ember/service","@ember/object"],(function(e,t,n,l,r,i){var o,a,u +function s(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const c=(0,n.createTemplateFactory)({id:"bKitd39l",block:'[[[1,"\\n"],[44,[[28,[37,1],null,[["main","Notification"],[[28,[37,2],[[33,3],"-main"],null],[50,"app/notification",0,null,null]]]]],[[[1,"\\n "],[11,0],[24,0,"app"],[17,2],[12],[1,"\\n "],[8,[39,5],null,null,null],[1,"\\n\\n "],[18,3,[[30,1]]],[1,"\\n "],[10,"main"],[15,1,[28,[37,2],[[33,3],"-main"],null]],[12],[1,"\\n "],[10,0],[14,0,"notifications"],[12],[1,"\\n "],[18,4,[[30,1]]],[1,"\\n "],[8,[39,7],null,[["@name","@multiple"],["app-notifications",true]],null],[1,"\\n "],[13],[1,"\\n "],[18,5,[[30,1]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n\\n"]],[1]]]],["exported","&attrs","&side-nav","¬ifications","&main"],false,["let","hash","concat","guid","component","modal-layer","yield","portal-target"]]',moduleName:"consul-ui/components/app/index.hbs",isStrictMode:!1}) +let d=(o=(0,r.inject)("dom"),a=class extends l.default{constructor(e,t){var n,l,r,i +super(...arguments),n=this,l="dom",i=this,(r=u)&&Object.defineProperty(n,l,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(i):void 0}),this.guid=this.dom.guid(this)}keypressClick(e){e.target.dispatchEvent(new MouseEvent("click"))}focus(e){const t=e.target.getAttribute("href") +t.startsWith("#")&&(e.preventDefault(),this.dom.focus(t))}unfocus(e){e.target.blur()}},u=s(a.prototype,"dom",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),s(a.prototype,"keypressClick",[i.action],Object.getOwnPropertyDescriptor(a.prototype,"keypressClick"),a.prototype),s(a.prototype,"focus",[i.action],Object.getOwnPropertyDescriptor(a.prototype,"focus"),a.prototype),s(a.prototype,"unfocus",[i.action],Object.getOwnPropertyDescriptor(a.prototype,"unfocus"),a.prototype),a) +e.default=d,(0,t.setComponentTemplate)(c,d)})),define("consul-ui/components/app/notification/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"CpdPnT0l",block:'[[[1,"\\n"],[11,0],[24,0,"app-notification"],[17,1],[4,[38,0],[[28,[37,1],[[28,[37,1],["opacity","1"],null],[28,[37,1],["transition-delay",[28,[37,2],[[30,2],"ms"],null]],null]],null]],null],[4,[38,0],[[28,[37,1],[[28,[37,1],["opacity",[52,[30,3],"1","0"]],null]],null]],[["delay"],[0]]],[12],[1,"\\n "],[18,4,null],[1,"\\n"],[13],[1,"\\n\\n"]],["&attrs","@delay","@sticky","&default"],false,["style","array","concat","if","yield"]]',moduleName:"consul-ui/components/app/notification/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/aria-menu/index",["exports","@ember/component","@ember/template-factory","@ember/service","@ember/object","@ember/runloop"],(function(e,t,n,l,r,i){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const o=(0,n.createTemplateFactory)({id:"XFAq3WQx",block:'[[[1,"\\n"],[18,1,[[28,[37,1],[[30,0],"change"],null],[28,[37,1],[[30,0],"keypress"],null],[28,[37,1],[[30,0],"keypressClick"],null],[28,[37,2],null,[["labelledBy","controls","expanded"],[[28,[37,3],["component-aria-menu-trigger-",[33,4]],null],[28,[37,3],["component-aria-menu-menu-",[33,4]],null],[52,[33,6],"true",[27]]]]]]]],["&default"],false,["yield","action","hash","concat","guid","if","expanded"]]',moduleName:"consul-ui/components/aria-menu/index.hbs",isStrictMode:!1}),a=13,u=32,s=38,c=40,d={vertical:{[c]:function(e){return((arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1)+1)%e.length},[s]:function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0 +return 0===t?e.length-1:t-1},36:function(e,t){return 0},35:function(e,t){return e.length-1}},horizontal:{}},p='[role^="menuitem"]' +var f=(0,t.setComponentTemplate)(o,t.default.extend({tagName:"",dom:(0,l.inject)("dom"),guid:"",expanded:!1,orientation:"vertical",keyboardAccess:!0,init:function(){this._super(...arguments),(0,r.set)(this,"guid",this.dom.guid(this)),this._listeners=this.dom.listeners(),this._routelisteners=this.dom.listeners()},didInsertElement:function(){this.$menu=this.dom.element(`#component-aria-menu-menu-${this.guid}`) +const e=this.$menu.getAttribute("aria-labelledby") +this.$trigger=this.dom.element(`#${e}`)},willDestroyElement:function(){this._super(...arguments),this._listeners.remove(),this._routelisteners.remove()},actions:{keypressClick:function(e){e.target.dispatchEvent(new MouseEvent("click"))},keypress:function(e){if(![a,u,s,c].includes(e.keyCode))return +e.stopPropagation() +const t=[...this.dom.elements(p,this.$menu)] +if(e.keyCode===a||e.keyCode===u){let e=this.expanded?void 0:t[0];(0,i.next)((()=>{e=this.expanded?e:this.$trigger,void 0!==e&&e.focus()}))}if(void 0===d[this.orientation][e.keyCode])return +e.preventDefault() +const n=this.dom.element(`${p}:focus`,this.$menu) +let l +n&&(l=t.findIndex((function(e){return e===n}))) +t[d[this.orientation][e.keyCode](t,l)].focus()},change:function(e){e.target.checked?this.actions.open.apply(this,[e]):this.actions.close.apply(this,[e])},close:function(e){this._listeners.remove(),(0,r.set)(this,"expanded",!1),(0,i.next)((()=>{this.$trigger.removeAttribute("tabindex")}))},open:function(e){(0,r.set)(this,"expanded",!0) +0===[...this.dom.elements(p,this.$menu)].length&&this.dom.element('input[type="checkbox"]',this.$menu.parentElement).dispatchEvent(new MouseEvent("click")),this.$trigger.setAttribute("tabindex","-1"),this._listeners.add(this.dom.document(),{keydown:e=>{27===e.keyCode&&this.$trigger.focus(),9!==e.keyCode&&27!==e.keyCode?this.keyboardAccess&&this.actions.keypress.apply(this,[e]):this.$trigger.dispatchEvent(new MouseEvent("click"))}})}}})) +e.default=f})),define("consul-ui/components/auth-dialog/chart.xstate",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default={id:"auth-dialog",initial:"idle",on:{CHANGE:[{target:"authorized",cond:"hasToken",actions:["login"]},{target:"unauthorized",actions:["logout"]}]},states:{idle:{on:{CHANGE:[{target:"authorized",cond:"hasToken"},{target:"unauthorized"}]}},unauthorized:{},authorized:{}}}})),define("consul-ui/components/auth-dialog/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@ember/service","@ember/object","consul-ui/components/auth-dialog/chart.xstate"],(function(e,t,n,l,r,i,o){var a,u,s +function c(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const d=(0,n.createTemplateFactory)({id:"dtpP8wDK",block:'[[[1,"\\n"],[8,[39,0],null,[["@src"],[[99,1,["@src"]]]],[["default"],[[[[1,"\\n\\n "],[8,[30,2],null,[["@name","@cond"],["hasToken",[28,[37,2],[[30,0],"hasToken"],null]]],null],[1,"\\n "],[8,[30,3],null,[["@name","@exec"],["login",[28,[37,2],[[30,0],"login"],null]]],null],[1,"\\n "],[8,[30,3],null,[["@name","@exec"],["logout",[28,[37,2],[[30,0],"logout"],null]]],null],[1,"\\n\\n"],[1," "],[8,[39,3],null,[["@src","@onchange"],[[30,6],[28,[37,4],[[28,[37,2],[[30,0],[28,[37,5],[[33,6]],null]],[["value"],["data"]]],[28,[37,2],[[30,0],[30,4],"CHANGE"],null],[28,[37,2],[[30,0],[28,[37,5],[[33,7]],null]],[["value"],["data"]]]],null]]],null],[1,"\\n"],[1," "],[8,[39,8],null,[["@sink"],[[30,7]]],[["default"],[[[[1,"\\n"],[44,[[28,[37,10],null,[["login","logout","token"],[[28,[37,2],[[30,0],[30,8,["open"]]],null],[28,[37,2],[[30,0],[30,8,["open"]],null],null],[33,6]]]]],[[[1,"\\n "],[8,[30,1],null,[["@matches"],["authorized"]],[["default"],[[[[1,"\\n "],[18,10,[[30,9]]],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[30,1],null,[["@matches"],["unauthorized"]],[["default"],[[[[1,"\\n "],[18,11,[[30,9]]],[1,"\\n "]],[]]]]],[1,"\\n\\n"]],[9]]],[1," "]],[8]]]]],[1,"\\n"]],[1,2,3,4,5]]]]],[1,"\\n"]],["State","Guard","Action","dispatch","state","@src","@sink","sink","api","&authorized","&unauthorized"],false,["state-chart","chart","action","data-source","queue","mut","token","previousToken","data-sink","let","hash","yield"]]',moduleName:"consul-ui/components/auth-dialog/index.hbs",isStrictMode:!1}) +let p=(a=(0,r.inject)("repository/oidc-provider"),u=class extends l.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="repo",l=this,(n=s)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0}),this.chart=o.default}hasToken(){return void 0!==this.token.AccessorID}login(){let e=(0,i.get)(this,"previousToken.AccessorID"),t=(0,i.get)(this,"token.AccessorID") +null===e&&(e=(0,i.get)(this,"previousToken.SecretID")),null===t&&(t=(0,i.get)(this,"token.SecretID")) +let n="authorize" +void 0!==e&&e!==t&&(n="use"),this.args.onchange({data:this.token,type:n})}logout(){void 0!==(0,i.get)(this,"previousToken.AuthMethod")&&this.repo.logout((0,i.get)(this,"previousToken.SecretID")),this.previousToken=null,this.args.onchange({data:null,type:"logout"})}},s=c(u.prototype,"repo",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),c(u.prototype,"hasToken",[i.action],Object.getOwnPropertyDescriptor(u.prototype,"hasToken"),u.prototype),c(u.prototype,"login",[i.action],Object.getOwnPropertyDescriptor(u.prototype,"login"),u.prototype),c(u.prototype,"logout",[i.action],Object.getOwnPropertyDescriptor(u.prototype,"logout"),u.prototype),u) +e.default=p,(0,t.setComponentTemplate)(d,p)})),define("consul-ui/components/auth-form/chart.xstate",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default={id:"auth-form",initial:"idle",on:{RESET:[{target:"idle"}],ERROR:[{target:"error"}]},states:{idle:{entry:["clearError"],on:{SUBMIT:[{target:"loading",cond:"hasValue"},{target:"error"}]}},loading:{},error:{exit:["clearError"],on:{TYPING:[{target:"idle"}],SUBMIT:[{target:"loading",cond:"hasValue"},{target:"error"}]}}}}})),define("consul-ui/components/auth-form/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@ember/object","consul-ui/components/auth-form/chart.xstate","consul-ui/components/auth-form/tabs.xstate"],(function(e,t,n,l,r,i,o){var a +function u(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const s=(0,n.createTemplateFactory)({id:"BOj7IYa9",block:'[[[1,"\\n"],[8,[39,0],null,[["@src"],[[30,0,["chart"]]]],[["default"],[[[[1,"\\n"],[44,[[28,[37,2],null,[["State","Guard","Action","dispatch","state"],[[30,1],[30,2],[30,3],[30,4],[30,5]]]]],[[[44,[[28,[37,2],null,[["reset","focus","disabled","error","submit"],[[28,[37,3],[[30,0],[30,4],"RESET"],null],[30,0,["focus"]],[28,[37,4],[[30,5],"loading"],null],[28,[37,5],[[28,[37,3],[[30,0],[30,4],"ERROR"],null],[28,[37,3],[[30,0],[28,[37,6],[[30,0,["error"]]],null]],[["value"],["error.errors.firstObject"]]]],null],[28,[37,5],[[28,[37,3],[[30,0],[28,[37,6],[[30,0,["value"]]],null]],null],[28,[37,3],[[30,0],[30,4],"SUBMIT"],null]],null]]]]],[[[1," "],[8,[30,2],null,[["@name","@cond"],["hasValue",[30,0,["hasValue"]]]],null],[1,"\\n"],[1," "],[8,[30,6,["Action"]],null,[["@name","@exec"],["clearError",[28,[37,5],[[28,[37,3],[[30,0],[28,[37,6],[[30,0,["error"]]],null],[27]],null],[28,[37,3],[[30,0],[28,[37,6],[[30,0,["secret"]]],null],[27]],null]],null]]],null],[1,"\\n "],[11,0],[24,0,"auth-form"],[17,8],[12],[1,"\\n "],[8,[39,0],null,[["@src"],[[30,0,["tabsChart"]]]],[["default"],[[[[1,"\\n"],[41,[28,[37,8],["use SSO"],null],[[[1," "],[8,[39,9],null,[["@items","@onclick"],[[28,[37,10],[[28,[37,2],null,[["label","selected"],["Token",[28,[37,4],[[30,13],"token"],null]]]],[28,[37,2],null,[["label","selected"],["SSO",[28,[37,4],[[30,13],"sso"],null]]]]],null],[28,[37,5],[[28,[37,3],[[30,0],[30,12]],null],[28,[37,3],[[30,0],[30,4],"RESET"],null]],null]]],null],[1,"\\n"]],[]],null],[1," "],[8,[30,1],null,[["@matches"],["error"]],[["default"],[[[[1,"\\n"],[41,[30,0,["error","status"]],[[[1," "],[8,[39,11],[[24,0,"mb-1 mt-2"]],[["@type","@color"],["inline","critical"]],[["default"],[[[[1,"\\n "],[8,[30,14,["Title"]],null,null,[["default"],[[[[1,"\\n"],[41,[30,0,["value","Name"]],[[[41,[28,[37,12],[[30,0,["error","status"]],"403"],null],[[[1," Consul login failed\\n"]],[]],[[[41,[28,[37,12],[[30,0,["error","status"]],"401"],null],[[[1," Could not log in to provider\\n"]],[]],[[[41,[28,[37,12],[[30,0,["error","status"]],"499"],null],[[[1," SSO log in window closed\\n"]],[]],[[[1," Error\\n "]],[]]]],[]]]],[]]]],[]],[[[41,[28,[37,12],[[30,0,["error","status"]],"403"],null],[[[1," Invalid token\\n"]],[]],[[[41,[28,[37,12],[[30,0,["error","status"]],"404"],null],[[[1," No providers\\n"]],[]],[[[1," Error\\n "]],[]]]],[]]]],[]]],[1," "]],[]]]]],[1,"\\n "],[8,[30,14,["Description"]],null,null,[["default"],[[[[1,"\\n"],[41,[30,0,["value","Name"]],[[[41,[28,[37,12],[[30,0,["error","status"]],"403"],null],[[[1," We received a token from your OIDC provider but could not log in to Consul\\n with it.\\n"]],[]],[[[41,[28,[37,12],[[30,0,["error","status"]],"401"],null],[[[1," The OIDC provider has rejected this access token. Please have an\\n administrator check your auth method configuration.\\n"]],[]],[[[41,[28,[37,12],[[30,0,["error","status"]],"499"],null],[[[1," The OIDC provider window was closed. Please try again.\\n"]],[]],[[[1," "],[1,[30,0,["error","detail"]]],[1,"\\n "]],[]]]],[]]]],[]]]],[]],[[[41,[28,[37,12],[[30,0,["error","status"]],"403"],null],[[[1," The token entered does not exist. Please enter a valid token to log in.\\n"]],[]],[[[41,[28,[37,12],[[30,0,["error","status"]],"404"],null],[[[1," No SSO providers are configured for that Partition.\\n"]],[]],[[[1," "],[1,[30,0,["error","detail"]]],[1,"\\n "]],[]]]],[]]]],[]]],[1," "]],[]]]]],[1,"\\n "]],[14]]]]],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[8,[30,9],null,[["@matches"],["token"]],[["default"],[[[[1,"\\n "],[10,"form"],[15,"onsubmit",[28,[37,3],[[30,0],[30,4],"SUBMIT"],null]],[12],[1,"\\n "],[10,"fieldset"],[12],[1,"\\n "],[10,"label"],[15,0,[28,[37,13],["type-password",[52,[28,[37,14],[[28,[37,4],[[30,5],"error"],null],[28,[37,15],[[30,0,["error","status"]]],null]],null]," has-error"]],null]],[12],[1,"\\n "],[10,1],[12],[1,"Log in with a token"],[13],[1,"\\n\\n"],[1," "],[11,"input"],[16,"disabled",[28,[37,4],[[30,5],"loading"],null]],[24,3,"auth[SecretID]"],[24,"placeholder","SecretID"],[16,2,[30,0,["secret"]]],[16,"oninput",[28,[37,5],[[28,[37,3],[[30,0],[28,[37,6],[[30,0,["secret"]]],null]],[["value"],["target.value"]]],[28,[37,3],[[30,0],[28,[37,6],[[30,0,["value"]]],null]],[["value"],["target.value"]]],[28,[37,3],[[30,0],[30,4],"TYPING"],null]],null]],[16,4,[52,[28,[37,12],[[28,[37,16],["environment"],null],"testing"],null],"text","password"]],[4,[38,17],[[28,[37,18],[[30,0],"input"],null]],null],[12],[13],[1,"\\n "],[8,[30,1],null,[["@matches"],["error"]],[["default"],[[[[1,"\\n"],[41,[28,[37,15],[[30,0,["error","status"]]],null],[[[1," "],[10,"strong"],[14,"role","alert"],[12],[1,"\\n Please enter your secret\\n "],[13],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[8,[39,19],[[16,"disabled",[28,[37,4],[[30,5],"loading"],null]],[24,4,"submit"]],[["@text"],["Log in"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[18,19,[[28,[37,21],[[30,7],[28,[37,2],null,[["Method"],[[30,9]]]]],null]]],[1,"\\n\\n "],[10,"em"],[12],[1,"\\n Contact your administrator for login credentials.\\n "],[13],[1,"\\n "]],[9,10,11,12,13]]]]],[1,"\\n\\n "],[13],[1,"\\n "],[8,[30,1],null,[["@matches"],["loading"]],[["default"],[[[[1,"\\n "],[8,[39,22],null,[["@dc","@nspace","@partition","@type","@value","@onchange","@onerror"],[[30,15],[28,[37,23],[[30,0,["value","Namespace"]],[30,16]],null],[28,[37,23],[[30,0,["value","Partition"]],[30,17]],null],[52,[30,0,["value","Name"]],"oidc","secret"],[30,0,["value"]],[28,[37,5],[[28,[37,3],[[30,0],[30,4],"RESET"],null],[30,18]],null],[28,[37,5],[[28,[37,3],[[30,0],[28,[37,6],[[30,0,["error"]]],null]],[["value"],["error.errors.firstObject"]]],[28,[37,3],[[30,0],[30,4],"ERROR"],null]],null]]],null],[1,"\\n "]],[]]]]],[1,"\\n"]],[7]]]],[6]]]],[1,2,3,4,5]]]]],[1,"\\n"]],["State","Guard","ChartAction","dispatch","state","chart","exported","&attrs","TabState","IgnoredGuard","IgnoredAction","tabDispatch","tabState","A","@dc","@nspace","@partition","@onsubmit","&default"],false,["state-chart","let","hash","action","state-matches","queue","mut","if","can","tab-nav","array","hds/alert","eq","concat","and","not","env","did-insert","set","hds/button","yield","assign","token-source","or"]]',moduleName:"consul-ui/components/auth-form/index.hbs",isStrictMode:!1}) +let c=(a=class extends l.default{constructor(){super(...arguments),this.chart=i.default,this.tabsChart=o.default}hasValue(e,t,n){return""!==this.value&&void 0!==this.value}focus(){this.input.focus()}},u(a.prototype,"hasValue",[r.action],Object.getOwnPropertyDescriptor(a.prototype,"hasValue"),a.prototype),u(a.prototype,"focus",[r.action],Object.getOwnPropertyDescriptor(a.prototype,"focus"),a.prototype),a) +e.default=c,(0,t.setComponentTemplate)(s,c)})),define("consul-ui/components/auth-form/tabs.xstate",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default={id:"auth-form-tabs",initial:"token",on:{TOKEN:[{target:"token"}],SSO:[{target:"sso"}]},states:{token:{},sso:{}}}})),define("consul-ui/components/basic-dropdown-content",["exports","ember-basic-dropdown/components/basic-dropdown-content"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})) +define("consul-ui/components/basic-dropdown-optional-tag",["exports","ember-basic-dropdown/components/basic-dropdown-optional-tag"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/basic-dropdown-trigger",["exports","ember-basic-dropdown/components/basic-dropdown-trigger"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/basic-dropdown",["exports","ember-basic-dropdown/components/basic-dropdown"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/block-slot",["exports","block-slots/components/block-slot"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/brand-loader/enterprise",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"DW5EhD40",block:'[[[10,"path"],[14,"data-enterprise-logo",""],[14,"d","M322.099,18.0445001 C319.225,18.0223001 316.427,18.9609001 314.148,20.7112001 L314.016,20.8179001 L313.68,18.5368001 L310.332,18.5368001 L310.332,53.0000001 L314.312,52.4338001 L314.312,42.3164001 L314.435,42.3164001 C316.705,42.7693001 319.012,43.0165001 321.327,43.0549001 C326.554,43.0549001 329.098,40.5029001 329.098,35.2432001 L329.098,25.3802001 C329.073,20.4569001 326.809,18.0445001 322.099,18.0445001 Z M264.971,11.9722001 L260.991,12.5466001 L260.991,18.5284001 L256.708,18.5284001 L256.708,21.8106001 L260.991,21.8106001 L260.991,37.6883001 L260.99344,37.9365729 C261.066744,41.6122056 262.7975,43.1124033 266.915,43.1124033 C268.591,43.1170001 270.255,42.8396001 271.839,42.2915001 L271.363,39.1817001 L270.896229,39.3066643 C269.803094,39.5806719 268.682875,39.7315001 267.555,39.7560001 C265.526625,39.7560001 265.081547,38.9674128 264.991981,37.7056542 L264.97743,37.4176027 L264.97159,37.1147428 L264.971,21.8188001 L271.494,21.8188001 L271.83,18.5366001 L264.971,18.5366001 L264.971,11.9722001 Z M283.556,18.0770001 C277.312,18.0770001 274.144,21.0884001 274.144,27.0374001 L274.144,34.3075001 C274.144,40.3140001 277.164,43.1124894 283.655,43.1124894 C286.526,43.1192001 289.38,42.6620001 292.106,41.7581001 L291.589,38.6154001 C289.116,39.3030001 286.566,39.6779001 283.999,39.7314001 C279.785843,39.7314001 278.500803,38.4772648 278.201322,35.860808 L278.165734,35.4868687 L278.141767,35.0951811 C278.138675,35.0284172 278.136019,34.9609111 278.133774,34.8926614 L278.125037,34.474229 L278.124,32.0756001 L292.582,32.0756001 L292.582,27.1031001 C292.582,21.0064001 289.636,18.0770001 283.556,18.0770001 Z M384.631,18.0768001 C378.412,18.0440001 375.22,21.0554001 375.22,27.0208001 L375.22,34.2909001 C375.22,40.2973001 378.239,43.0955988 384.73,43.0955988 C387.599,43.1033001 390.45,42.6460001 393.173,41.7415001 L392.665,38.5988001 C390.188,39.2815001 387.635,39.6509001 385.066,39.6983001 C380.852843,39.6983001 379.567803,38.4442359 379.268322,35.8278014 L379.232734,35.4538649 L379.208767,35.0621794 C379.205675,34.9954158 379.203019,34.9279099 379.200774,34.8596604 L379.192037,34.4412289 L379.191,32.0754001 L393.657,32.0754001 L393.657,27.1029001 C393.657,21.0062001 390.712,18.0768001 384.631,18.0768001 Z M364.634,18.0441001 C363.881125,18.0441001 363.18736,18.0712813 362.54969,18.1279834 L362.016783,18.1838695 C357.948857,18.6791301 356.371,20.5353768 356.371,24.4608001 L356.371522,24.7155013 L356.376145,25.2052033 L356.386527,25.669464 L356.403852,26.1092746 C356.407384,26.1805939 356.411254,26.2509357 356.415488,26.3203208 L356.445451,26.7253144 L356.485319,27.1083357 C356.756619,29.3425283 357.626845,30.4437319 360.247859,31.3753061 L360.701103,31.529163 C360.779411,31.5545991 360.85912,31.5799457 360.940253,31.6052232 L361.444353,31.7562266 L361.983836,31.9065664 L362.55989,32.0572338 L363.430663,32.2724269 L364.440153,32.5299129 L364.884369,32.6506971 L365.29049,32.7679922 L365.660213,32.8831607 L365.99523,32.9975651 C367.26815,33.4554713 367.748817,33.9277406 367.925217,34.806783 L367.963261,35.0352452 C367.974017,35.1143754 367.982943,35.1965576 367.990321,35.2820187 L368.008092,35.5484662 L368.018269,35.8359502 L368.023,36.3096001 C368.023,36.3683432 368.022674,36.4261667 368.021989,36.4830819 L368.013333,36.8137655 C368.008847,36.9204214 368.002676,37.0235359 367.994568,37.1232009 L367.964177,37.4119383 C367.774513,38.8512264 367.058626,39.4837671 364.875404,39.6510671 L364.43427,39.67773 L363.954974,39.6933243 C363.78868,39.6967387 363.615773,39.6984001 363.436,39.6984001 C361.126,39.6638001 358.83,39.3385001 356.601,38.7302001 L356.051,41.7908001 L356.619468,41.9710684 C358.900888,42.6645722 361.270923,43.0269154 363.658,43.0463001 C369.59355,43.0463001 371.402903,41.3625861 371.812159,38.0405419 L371.854011,37.6421573 C371.859965,37.574501 371.865421,37.5062155 371.870401,37.4373012 L371.894725,37.0162715 L371.908596,36.5801656 C371.911587,36.4322862 371.913,36.2818967 371.913,36.1290001 L371.914417,35.5317322 C371.901583,33.4289389 371.677,32.2649251 370.797,31.3698001 C370.053077,30.6022731 368.787947,30.0494771 366.870096,29.4840145 L366.242608,29.3047611 C366.13436,29.2747269 366.024265,29.2445914 365.912304,29.2143213 L365.218,29.0308209 L364.216102,28.7784328 L363.495981,28.593015 L363.068145,28.4733265 L362.67987,28.3551624 C361.018765,27.8247783 360.501056,27.2986662 360.340522,26.2094051 L360.310407,25.9578465 C360.306262,25.9142982 360.302526,25.8699197 360.29916,25.8246823 L360.283089,25.5427193 L360.273984,25.2387571 L360.269927,24.911412 L360.270221,24.3885398 L360.280627,24.0635689 C360.366727,22.3885604 360.966747,21.6370879 363.248047,21.4645754 L363.695778,21.4389299 L364.184625,21.426349 L364.445,21.4248001 C366.684,21.4608001 368.916,21.6859001 371.117,22.0976001 L371.396,18.8646001 L370.730951,18.7059457 C368.73071,18.2553391 366.686,18.0331201 364.634,18.0441001 Z M351.301,18.5363001 L347.321,18.5363001 L347.321,42.6112001 L351.301,42.6112001 L351.301,18.5363001 Z M307.335,18.0850001 L306.70097,18.3638937 C304.598769,19.3169298 302.610091,20.5031364 300.771,21.9005001 L300.623,22.0236001 L300.369,18.5363001 L296.931,18.5363001 L296.931,42.6112001 L300.91,42.6112001 L300.91,25.9048001 L301.641825,25.3925123 C303.604371,24.0427531 305.654445,22.8240667 307.778,21.7446001 L307.335,18.0850001 Z M344.318,18.0850001 L343.683947,18.3638937 C341.581595,19.3169298 339.592091,20.5031364 337.753,21.9005001 L337.606,22.0236001 L337.351,18.5363001 L333.946,18.5363001 L333.946,42.6112001 L337.926,42.6112001 L337.926,25.9048001 L337.967,25.9048001 L338.701162,25.3884311 C340.669963,24.0279284 342.726556,22.7996223 344.859,21.7118001 L344.318,18.0850001 Z M230.384,9.62500005 L211.109,9.62500005 L211.109,42.6112001 L230.466,42.6112001 L230.466,38.9597001 L215.146,38.9597001 L215.146,27.4720001 L229.293,27.4720001 L229.293,23.8698001 L215.146,23.8698001 L215.146,13.2600001 L230.384,13.2600001 L230.384,9.62500005 Z M248.763,18.0441001 C245.899,18.0441001 241.706,19.3323001 239.047,20.6124001 L238.924,20.6698001 L238.522,18.5282001 L235.322,18.5282001 L235.322,42.5704001 L239.302,42.5704001 L239.302,24.2885001 L239.359,24.2885001 C241.919,22.9674001 245.661,21.8268001 247.524,21.8268001 C249.165,21.8268001 249.985,22.5735001 249.985,24.1736001 L249.985,42.5868001 L253.965,42.5868001 L253.965,24.1161001 C253.932,20.0380001 252.25,18.0523001 248.763,18.0441001 Z M321.229,21.5564001 C323.526,21.5564001 325.061,22.2046001 325.061,25.3966001 L325.094,35.2760001 C325.094,38.3121001 323.887,39.6085001 321.057,39.6085001 C318.81,39.5533001 316.572,39.3035001 314.369,38.8618001 L314.287,38.8618001 L314.287,24.4694001 C316.198,22.7311001 318.649,21.7027001 321.229,21.5564001 Z M283.581,21.3264001 C287.372,21.3264001 288.758,22.8855001 288.758,26.7010001 L288.758,28.7934001 L278.149,28.7934001 L278.149,26.7010001 C278.149,22.9839001 279.79,21.3264001 283.581,21.3264001 Z M384.648,21.3262001 C388.431,21.3262001 389.834,22.8852001 389.834,26.7008001 L389.834,28.7932001 L379.224,28.7932001 L379.224,26.7008001 C379.224,22.9837001 380.865,21.3262001 384.648,21.3262001 Z M351.301,8.63220005 L347.321,8.63220005 L347.321,14.4499001 L351.301,14.4499001 L351.301,8.63220005 Z"],[14,"fill-rule","nonzero"],[12],[13],[1,"\\n\\n"]],[],false,[]]',moduleName:"consul-ui/components/brand-loader/enterprise.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/brand-loader/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"yNoyAgqg",block:'[[[10,0],[14,0,"brand-loader"],[15,5,[29,["margin-left: calc(-",[30,1],"px / 2)"]]],[12],[1,"\\n"],[10,"svg"],[15,"width",[29,[[30,1]]]],[14,"height","53"],[14,"xmlns","http://www.w3.org/2000/svg","http://www.w3.org/2000/xmlns/"],[15,"fill",[29,[[30,2]]]],[12],[1,"\\n "],[10,"path"],[14,"d","M32.7240001,0.866235051 C28.6239001,-0.218137949 24.3210001,-0.285465949 20.1890001,0.670096051 C16.0569001,1.62566005 12.2205001,3.57523005 9.01276015,6.34960005 C5.80499015,9.12397005 3.32280015,12.6393001 1.78161015,16.5905001 C0.240433148,20.5416001 -0.313157852,24.8092001 0.168892148,29.0228001 C0.650943148,33.2364001 2.15407015,37.2687001 4.54780015,40.7697001 C6.94153015,44.2707001 10.1535001,47.1346001 13.9050001,49.1128001 C17.6565001,51.0910001 21.8341001,52.1238001 26.0752001,52.1214409 C32.6125001,52.1281001 38.9121001,49.6698001 43.7170001,45.2370001 L37.5547001,38.7957001 C35.0952001,41.0133001 32.0454001,42.4701001 28.7748001,42.9898001 C25.5042001,43.5096001 22.1530001,43.0698001 19.1273001,41.7239001 C16.1015001,40.3779001 13.5308001,38.1835001 11.7267001,35.4064001 C9.92260015,32.6294001 8.96239015,29.3888001 8.96239015,26.0771001 C8.96239015,22.7655001 9.92260015,19.5249001 11.7267001,16.7478001 C13.5308001,13.9707001 16.1015001,11.7763001 19.1273001,10.4304001 C22.1530001,9.08444005 25.5042001,8.64470005 28.7748001,9.16441005 C32.0454001,9.68412005 35.0952001,11.1410001 37.5547001,13.3586001 L43.7170001,6.89263005 C40.5976001,4.01926005 36.8241001,1.95061005 32.7240001,0.866235051 Z M46.6320001,34.8572001 C46.2182001,34.9395001 45.8380001,35.1427001 45.5397001,35.4410001 C45.2413001,35.7394001 45.0381001,36.1195001 44.9558001,36.5334001 C44.8735001,36.9472001 44.9157001,37.3762001 45.0772001,37.7660001 C45.2387001,38.1559001 45.5121001,38.4891001 45.8630001,38.7235001 C46.2138001,38.9579001 46.6263001,39.0830001 47.0482001,39.0830001 C47.6141001,39.0830001 48.1567001,38.8583001 48.5568001,38.4582001 C48.9569001,38.0581001 49.1817001,37.5154001 49.1817001,36.9496001 C49.1817001,36.5276001 49.0565001,36.1152001 48.8221001,35.7643001 C48.5877001,35.4135001 48.2545001,35.1400001 47.8647001,34.9786001 C47.4748001,34.8171001 47.0459001,34.7748001 46.6320001,34.8572001 Z M49.0856001,27.5622001 C48.6718001,27.6446001 48.2916001,27.8477001 47.9933001,28.1461001 C47.6949001,28.4445001 47.4917001,28.8246001 47.4094001,29.2385001 C47.3271001,29.6523001 47.3693001,30.0813001 47.5308001,30.4711001 C47.6923001,30.8609001 47.9657001,31.1941001 48.3166001,31.4286001 C48.6674001,31.6630001 49.0799001,31.7881001 49.5018001,31.7881001 C50.0670001,31.7859001 50.6084001,31.5605001 51.0080001,31.1609001 C51.4076001,30.7612001 51.6331001,30.2198001 51.6353001,29.6547001 C51.6353001,29.2327001 51.5102001,28.8202001 51.2757001,28.4694001 C51.0413001,28.1186001 50.7081001,27.8451001 50.3183001,27.6836001 C49.9284001,27.5222001 49.4995001,27.4799001 49.0856001,27.5622001 Z M28.0728001,20.8457001 C27.0412001,20.4185001 25.9061001,20.3067001 24.8110001,20.5245001 C23.7159001,20.7423001 22.7100001,21.2800001 21.9205001,22.0695001 C21.1309001,22.8590001 20.5933001,23.8650001 20.3754001,24.9600001 C20.1576001,26.0551001 20.2694001,27.1902001 20.6967001,28.2218001 C21.1240001,29.2534001 21.8476001,30.1351001 22.7760001,30.7554001 C23.7043001,31.3757001 24.7958001,31.7068001 25.9124001,31.7068001 C27.4096001,31.7068001 28.8455001,31.1120001 29.9043001,30.0533001 C30.9630001,28.9946001 31.5578001,27.5587001 31.5578001,26.0614001 C31.5578001,24.9449001 31.2267001,23.8534001 30.6063001,22.9250001 C29.9860001,21.9966001 29.1043001,21.2730001 28.0728001,20.8457001 Z M43.9670001,27.4378001 C43.5772001,27.2763001 43.1482001,27.2341001 42.7344001,27.3164001 C42.3205001,27.3987001 41.9404001,27.6019001 41.6420001,27.9003001 C41.3437001,28.1986001 41.1405001,28.5788001 41.0581001,28.9926001 C40.9758001,29.4065001 41.0181001,29.8354001 41.1796001,30.2253001 C41.3410001,30.6151001 41.6145001,30.9483001 41.9653001,31.1827001 C42.3162001,31.4171001 42.7286001,31.5423001 43.1506001,31.5423001 C43.7164001,31.5423001 44.2591001,31.3175001 44.6592001,30.9174001 C45.0592001,30.5173001 45.2840001,29.9747001 45.2840001,29.4088001 C45.2840001,28.9869001 45.1589001,28.5744001 44.9245001,28.2236001 C44.6901001,27.8727001 44.3568001,27.5993001 43.9670001,27.4378001 Z M43.9670001,20.7503001 C43.5772001,20.5888001 43.1482001,20.5466001 42.7344001,20.6289001 C42.3205001,20.7112001 41.9404001,20.9144001 41.6420001,21.2128001 C41.3437001,21.5111001 41.1405001,21.8913001 41.0581001,22.3051001 C40.9758001,22.7190001 41.0181001,23.1479001 41.1796001,23.5378001 C41.3410001,23.9276001 41.6145001,24.2608001 41.9653001,24.4952001 C42.3162001,24.7296001 42.7286001,24.8548001 43.1506001,24.8548001 C43.7164001,24.8548001 44.2591001,24.6300001 44.6592001,24.2299001 C45.0592001,23.8298001 45.2840001,23.2871001 45.2840001,22.7213001 C45.2840001,22.2994001 45.1589001,21.8869001 44.9245001,21.5360001 C44.6901001,21.1852001 44.3568001,20.9118001 43.9670001,20.7503001 Z M49.0856001,20.3825001 C48.6718001,20.4649001 48.2916001,20.6681001 47.9933001,20.9664001 C47.6949001,21.2648001 47.4917001,21.6449001 47.4094001,22.0588001 C47.3271001,22.4726001 47.3693001,22.9016001 47.5308001,23.2914001 C47.6923001,23.6813001 47.9657001,24.0144001 48.3166001,24.2489001 C48.6674001,24.4833001 49.0799001,24.6084001 49.5018001,24.6084001 C50.0670001,24.6063001 50.6084001,24.3808001 51.0080001,23.9812001 C51.4076001,23.5815001 51.6331001,23.0401001 51.6353001,22.4750001 C51.6353001,22.0530001 51.5102001,21.6406001 51.2757001,21.2897001 C51.0413001,20.9389001 50.7081001,20.6654001 50.3183001,20.5040001 C49.9284001,20.3425001 49.4995001,20.3002001 49.0856001,20.3825001 Z M46.7554001,13.2026001 C46.3416001,13.2849001 45.9614001,13.4881001 45.6630001,13.7865001 C45.3647001,14.0849001 45.1615001,14.4650001 45.0792001,14.8788001 C44.9969001,15.2927001 45.0391001,15.7217001 45.2006001,16.1115001 C45.3621001,16.5013001 45.6355001,16.8345001 45.9863001,17.0689001 C46.3372001,17.3034001 46.7497001,17.4285001 47.1716001,17.4285001 C47.7374001,17.4285001 48.2801001,17.2037001 48.6802001,16.8036001 C49.0803001,16.4035001 49.3050001,15.8609001 49.3050001,15.2951001 C49.3050001,14.8731001 49.1799001,14.4606001 48.9455001,14.1098001 C48.7111001,13.7589001 48.3779001,13.4855001 47.9880001,13.3240001 C47.5982001,13.1625001 47.1692001,13.1203001 46.7554001,13.2026001 Z"],[14,"fill-rule","nonzero"],[12],[13],[1,"\\n "],[10,"path"],[14,"d","M83.5385001,9.02612084 C75.3002001,9.02612084 71.7718001,12.5545001 71.7718001,18.6102001 L71.7718001,33.5278001 L71.7744126,33.809806 C71.8842215,39.6928981 75.4612111,43.1118103 83.5385001,43.1118103 C86.5802001,43.1131001 89.6109001,42.7466001 92.5646001,42.0205001 L91.8671001,36.6049001 L90.9760579,36.7631811 C88.5964705,37.1629803 86.1899224,37.3844223 83.7765001,37.4254001 C79.4194001,37.4254001 78.0326001,35.9320001 78.0326001,32.4118001 L78.0326001,19.7261001 L78.0346281,19.4988781 C78.0956946,16.133828 79.5462067,14.7125001 83.7765001,14.7125001 C86.4916001,14.7587001 89.1980001,15.0332001 91.8671001,15.5331001 L92.5646001,10.1175001 L91.8246092,9.94345672 C89.1057071,9.33281156 86.3267251,9.02500229 83.5385001,9.02612084 Z M172.149,18.4131001 L166.094,18.4131001 L166.09588,36.2248122 C166.154955,40.3975255 167.61375,43.1117001 171.55,43.1117001 C174.919,42.9517001 178.218,42.0880001 181.233,40.5762001 L181.832,42.6112001 L186.443,42.6112001 L186.443,18.4131001 L180.388,18.4131001 L180.388,35.1934001 C178.188,36.3339001 175.481,37.2283001 174.086,37.2283001 C172.691,37.2283001 172.149,36.5801001 172.149,35.2918001 L172.149,18.4131001 Z M105.939,17.9127001 C98.2719471,17.9127001 95.7845671,21.8519543 95.4516942,26.3358062 L95.4257941,26.7784774 C95.4225999,26.8525088 95.4199581,26.9266566 95.4178553,27.0009059 L95.4116001,27.4475001 L95.4116001,33.5853001 L95.4178331,34.0318054 C95.5519456,38.7818866 97.886685,43.0872001 105.931,43.0872001 C113.716697,43.0872001 116.15821,39.0467642 116.432186,34.4757046 L116.45204,34.0318054 C116.456473,33.8833653 116.458758,33.734491 116.459,33.5853001 L116.459,27.4475001 L116.457455,27.2221358 C116.453317,26.9220505 116.440796,26.6236441 116.419035,26.3278463 L116.379357,25.8862225 C115.91894,21.5651129 113.355121,17.9127001 105.939,17.9127001 Z M154.345,17.8876515 C147.453,17.8876515 145.319,20.0214001 145.319,24.8873001 L145.319694,25.1343997 L145.325703,25.6107983 L145.338905,26.064173 C145.341773,26.1378641 145.344992,26.2106314 145.348588,26.2824927 L145.374889,26.7029295 C145.380095,26.7712375 145.385729,26.838675 145.391816,26.9052596 L145.433992,27.2946761 C145.714183,29.5082333 146.613236,30.7206123 149.232713,31.693068 L149.698825,31.8575665 C150.021076,31.9658547 150.36662,32.0715774 150.737101,32.1758709 L151.311731,32.3313812 C151.509646,32.3829554 151.714,32.4343143 151.925,32.4856001 L152.205551,32.5543061 L152.728976,32.6899356 L153.204098,32.8237311 L153.633238,32.9563441 C155.53221,33.5734587 156.004908,34.1732248 156.112605,35.0535762 L156.130482,35.2466262 L156.139507,35.448917 L156.142,35.6611001 L156.137247,35.9859786 L156.121298,36.2838969 C156.024263,37.5177444 155.540462,38.0172149 153.741624,38.1073495 L153.302742,38.1210314 L153.065,38.1227001 C150.631,38.0987001 148.21,37.7482001 145.869,37.0807001 L145.049,41.6922001 L145.672496,41.887484 C148.174444,42.639635 150.769923,43.0436231 153.385,43.0871001 C159.627887,43.0871001 161.583469,40.9824692 162.030289,37.4548504 L162.074576,37.049455 C162.087289,36.9123213 162.098004,36.7731979 162.106868,36.6321214 L162.128062,36.2030694 L162.139051,35.7625187 L162.141,35.5380001 C162.141,35.4566181 162.140828,35.3763299 162.14046,35.2971136 L162.131203,34.6125174 L162.117224,34.1865271 L162.095649,33.7836378 L162.065324,33.4027996 L162.025093,33.0429627 L161.973799,32.7030773 C161.659145,30.8866498 160.790109,29.9278873 158.501441,29.0408119 L158.069484,28.8801405 L157.605084,28.7199991 C157.524916,28.6932947 157.443348,28.6665687 157.360357,28.6397991 L156.845127,28.4784845 L156.294565,28.3150754 L155.707516,28.148522 L155.082823,27.9777746 L154.035614,27.7021396 L153.423677,27.5325226 L153.071612,27.4262327 C153.016479,27.4088193 152.963082,27.3915263 152.911366,27.3743086 L152.620815,27.2715428 C151.671458,26.912485 151.415595,26.5466416 151.348761,25.7543883 L151.334373,25.5160648 L151.327658,25.2523603 L151.327351,24.8244501 C151.355827,23.4390475 151.851313,22.8769001 154.403,22.8769001 C156.636,22.9360001 158.861,23.1692001 161.057,23.5744001 L161.591,18.7085001 L160.876597,18.5511522 C158.72872,18.1040608 156.5401,17.8816774 154.345,17.8876515 Z M197.71,7.71350005 L191.654,8.53405005 L191.654,42.6116001 L197.71,42.6116001 L197.71,7.71350005 Z M135.455,17.9211001 C132.086,18.0823001 128.788,18.9459001 125.772,20.4566001 L125.189,18.4135001 L120.57,18.4135001 L120.57,42.6115001 L126.625,42.6115001 L126.625,25.8066001 C128.833,24.6661001 131.549,23.7717001 132.936,23.7717001 C134.322,23.7717001 134.872,24.4199001 134.872,25.7082001 L134.872,42.6115001 L140.919,42.6115001 L140.919,25.0681001 C140.919,20.7520001 139.475,17.9211001 135.455,17.9211001 Z M105.931,23.0740001 C109.156,23.0740001 110.395,24.5592001 110.395,27.2506001 L110.395,33.7494001 L110.392134,33.9740961 C110.325067,36.5604698 109.074195,37.9178001 105.931,37.9178001 C102.698,37.9178001 101.459,36.4818001 101.459,33.7494001 L101.459,27.2506001 L101.461884,27.0258853 C101.529372,24.4390811 102.787806,23.0740001 105.931,23.0740001 Z"],[14,"fill-rule","nonzero"],[12],[13],[1,"\\n "],[1,[30,3]],[1,"\\n "],[18,4,null],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n\\n"]],["@width","@color","@subtitle","&default"],false,["yield"]]',moduleName:"consul-ui/components/brand-loader/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/child-selector/index",["exports","@ember/component","@ember/template-factory","@ember/object","@ember/object/computed","@ember/service","ember-concurrency","block-slots"],(function(e,t,n,l,r,i,o,a){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const u=(0,n.createTemplateFactory)({id:"MfLIFek0",block:'[[[1,"\\n"],[11,0],[16,0,[29,["child-selector ",[36,0],"-child-selector"]]],[17,1],[12],[1,"\\n"],[18,4,null],[1,"\\n"],[41,[28,[37,3],[[33,4]],null],[[[1," "],[8,[39,5],null,[["@name"],["create"]],[["default"],[[[[18,4,null]],[]]]]],[1,"\\n "],[10,"label"],[14,0,"type-text"],[12],[1,"\\n "],[10,1],[12],[8,[39,5],null,[["@name"],["label"]],[["default"],[[[[18,4,null]],[]]]]],[13],[1,"\\n"],[41,[33,6],[[[1," "],[8,[39,7],null,[["@src","@onchange"],[[28,[37,8],["/${partition}/${nspace}/${dc}/${type}",[28,[37,9],null,[["partition","nspace","dc","type"],[[33,10],[33,11],[33,12],[28,[37,13],[[33,0]],null]]]]],null],[28,[37,14],[[30,0],[28,[37,15],[[33,16]],null]],[["value"],["data"]]]]],null],[1,"\\n"]],[]],null],[1," "],[8,[39,17],null,[["@type","@sort","@filters","@items"],[[99,0,["@type"]],"Name:asc",[28,[37,9],null,[["searchproperties"],[[28,[37,18],["Name"],null]]]],[99,19,["@items"]]]],[["default"],[[[[1,"\\n "],[8,[39,20],null,[["@searchEnabled","@search","@options","@loadingMessage","@searchMessage","@searchPlaceholder","@onOpen","@onClose","@onChange"],[true,[28,[37,14],[[30,0],[30,2,["search"]]],null],[28,[37,21],["Name:asc",[33,19]],null],"Loading...","No possible options",[99,22,["@searchPlaceholder"]],[28,[37,14],[[30,0],[28,[37,15],[[33,6]],null],true],null],[28,[37,14],[[30,0],[28,[37,15],[[33,6]],null],false],null],[28,[37,14],[[30,0],"change","items[]",[33,23]],null]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name","@params"],["option",[28,[37,24],[[30,3]],null]]],[["default"],[[[[18,4,null]],[]]]]],[1,"\\n "]],[3]]]]],[1,"\\n "]],[2]]]]],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[28,[37,25],[[33,23,["length"]],0],null],[[[1," "],[8,[39,5],null,[["@name"],["set"]],[["default"],[[[[18,4,null]],[]]]]],[1,"\\n"]],[]],[[[1,"\\n"]],[]]],[13]],["&attrs","collection","item","&default"],false,["type","yield","if","not","disabled","yield-slot","isOpen","data-source","uri","hash","partition","nspace","dc","pluralize","action","mut","allOptions","data-collection","array","options","power-select","sort-by","placeholder","items","block-params","gt"]]',moduleName:"consul-ui/components/child-selector/index.hbs",isStrictMode:!1}) +var s=(0,t.setComponentTemplate)(u,t.default.extend(a.default,{onchange:function(){},tagName:"",error:function(){},type:"",dom:(0,i.inject)("dom"),formContainer:(0,i.inject)("form"),item:(0,r.alias)("form.data"),selectedOptions:(0,r.alias)("items"),init:function(){this._super(...arguments),this._listeners=this.dom.listeners(),(0,l.set)(this,"form",this.formContainer.form(this.type)),this.form.clear({Datacenter:this.dc,Namespace:this.nspace})},willDestroyElement:function(){this._super(...arguments),this._listeners.remove()},options:(0,l.computed)("selectedOptions.[]","allOptions.[]",(function(){let e=this.allOptions||[] +const t=this.selectedOptions||[] +return(0,l.get)(t,"length")>0&&(e=e.filter((e=>!t.findBy("ID",(0,l.get)(e,"ID"))))),e})),save:(0,o.task)((function(e,t){var n=this +let l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){} +return function*(){const r=n.repo +try{e=yield r.persist(e),n.actions.change.apply(n,[{target:{name:"items[]",value:t}},t,e]),l()}catch(i){n.error({error:i})}}()})),actions:{reset:function(){this.form.clear({Datacenter:this.dc,Namespace:this.nspace,Partition:this.partition})},remove:function(e,t){const n=this.repo.getSlugKey(),r=(0,l.get)(e,n),i=t.findIndex((function(e){return(0,l.get)(e,n)===r})) +if(-1!==i)return t.removeAt(i,1) +this.onchange({target:this})},change:function(e,t,n){const r=t +if("items[]"===this.dom.normalizeEvent(...arguments).target.name)(0,l.set)(n,"CreateTime",(new Date).getTime()),r.pushObject(n),this.onchange({target:this})}}})) +e.default=s})),define("consul-ui/components/code-editor/index",["exports","@ember/component","@ember/template-factory","@ember/object","@ember/service"],(function(e,t,n,l,r){function i(e,t){var n=Object.keys(e) +if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) +t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function o(e){for(var t=1;t{let[t]=e +this.oninput((0,l.set)(this,"value",t.target.wholeText))})),this.observer.observe(e,{attributes:!1,subtree:!0,childList:!1,characterData:!0}),(0,l.set)(this,"value",e.firstChild.wholeText)),(0,l.set)(this,"editor",this.helper.getEditor(this.element)),this.settings.findBySlug("code-editor").then((e=>{const t=this.modes,n=this.syntax +n&&(e=t.find((function(e){return e.name.toLowerCase()==n.toLowerCase()}))),e=e||t[0],this.setMode(e)}))},didAppear:function(){this.editor.refresh()},actions:{change:function(e){this.settings.persist({"code-editor":e}),this.setMode(e)}}})) +e.default=c})),define("consul-ui/components/confirmation-alert/index",["exports","@ember/component","@ember/template-factory"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const l=(0,n.createTemplateFactory)({id:"4XrJqbun",block:'[[[1,"\\n"],[18,5,null],[1,"\\n"],[8,[39,1],[[24,0,"confirmation-alert warning"],[17,1]],null,[["header","body","actions"],[[[[1,"\\n "],[8,[39,2],null,[["@name"],["header"]],[["default"],[[[[18,5,null]],[]]]]],[1,"\\n "]],[]],[[[1,"\\n "],[8,[39,2],null,[["@name"],["body"]],[["default"],[[[[18,5,null]],[]]]]],[1,"\\n "]],[]],[[[1,"\\n "],[8,[30,2,["Action"]],[[24,0,"dangerous"]],null,[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@name","@params"],["confirm",[28,[37,3],[[50,"action",0,null,[["onclick","tabindex"],[[28,[37,5],[[30,0],[30,3]],null],"-1"]]]],null]]],[["default"],[[[[1,"\\n "],[18,5,null],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,2,["Action"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@for"],[[30,4]]],[["default"],[[[[1,"\\n Cancel\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[2]]]]]],["&attrs","Actions","@onclick","@name","&default"],false,["yield","informed-action","yield-slot","block-params","component","action"]]',moduleName:"consul-ui/components/confirmation-alert/index.hbs",isStrictMode:!1}) +var r=(0,t.setComponentTemplate)(l,t.default.extend({tagName:""})) +e.default=r})),define("consul-ui/components/confirmation-dialog/index",["exports","@ember/component","@ember/template-factory","block-slots","@ember/object"],(function(e,t,n,l,r){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const i=(0,n.createTemplateFactory)({id:"BPY22wiu",block:'[[[1,"\\n"],[11,0],[16,0,[28,[37,0],["with-confirmation",[52,[33,2]," confirming",""]],null]],[17,1],[12],[1,"\\n"],[18,2,null],[1,"\\n"],[8,[39,4],null,[["@name","@params"],["action",[28,[37,5],[[28,[37,6],[[30,0],"confirm"],null],[28,[37,6],[[30,0],"cancel"],null]],null]]],[["default"],[[[[1,"\\n"],[41,[28,[37,7],[[33,8],[28,[37,9],[[33,2]],null]],null],[[[1," "],[18,2,null],[1,"\\n"]],[]],null]],[]]]]],[1,"\\n"],[8,[39,4],null,[["@name","@params"],["dialog",[28,[37,5],[[28,[37,6],[[30,0],"execute"],null],[28,[37,6],[[30,0],"cancel"],null],[33,10],[33,11]],null]]],[["default"],[[[[1,"\\n"],[41,[33,2],[[[1," "],[18,2,null],[1,"\\n"]],[]],null]],[]]]]],[1,"\\n"],[13]],["&attrs","&default"],false,["concat","if","confirming","yield","yield-slot","block-params","action","or","permanent","not","message","actionName"]]',moduleName:"consul-ui/components/confirmation-dialog/index.hbs",isStrictMode:!1}) +var o=(0,t.setComponentTemplate)(i,t.default.extend(l.default,{tagName:"",message:"Are you sure?",confirming:!1,permanent:!1,actions:{cancel:function(){(0,r.set)(this,"confirming",!1)},execute:function(){(0,r.set)(this,"confirming",!1),this.sendAction("actionName",...this.arguments)},confirm:function(){const[e,...t]=arguments;(0,r.set)(this,"actionName",e),(0,r.set)(this,"arguments",t),(0,r.set)(this,"confirming",!0)}}})) +e.default=o})),define("consul-ui/components/consul-copy-button/chart.xstate",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default={id:"copy-button",initial:"idle",on:{RESET:[{target:"idle"}]},states:{idle:{on:{SUCCESS:[{target:"success"}],ERROR:[{target:"error"}]}},success:{},error:{}}}})),define("consul-ui/components/consul-copy-button/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","consul-ui/components/consul-copy-button/chart.xstate"],(function(e,t,n,l,r){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const i=(0,n.createTemplateFactory)({id:"WfykRiNj",block:'[[[1,"\\n"],[8,[39,0],null,[["@src"],[[30,0,["chart"]]]],[["default"],[[[[1,"\\n "],[11,0],[24,0,"copy-button"],[17,6],[12],[1,"\\n"],[44,[[28,[37,2],[[30,4],"SUCCESS"],null],[28,[37,2],[[30,4],"ERROR"],null],[28,[37,2],[[30,4],"RESET"],null]],[[[1," "],[11,"button"],[16,"aria-label",[28,[37,3],["components.consul-copy-button.title"],[["name"],[[30,10]]]]],[24,4,"button"],[24,0,"copy-btn"],[17,6],[4,[38,4],[[30,11]],[["success","error"],[[30,7],[30,8]]]],[4,[38,5],[[52,[28,[37,7],[[30,5],"success"],null],[28,[37,3],["components.consul-copy-button.success"],[["name"],[[30,10]]]],[28,[37,3],["components.consul-copy-button.error"],null]]],[["options"],[[28,[37,8],null,[["trigger","showOnCreate","delay","onHidden"],["manual",[28,[37,9],[[28,[37,7],[[30,5],"idle"],null]],null],[28,[37,10],[0,3000],null],[30,9]]]]]]],[12],[18,12,null],[13],[1,"\\n"]],[7,8,9]]],[1," "],[13],[1,"\\n"]],[1,2,3,4,5]]]]],[1,"\\n"]],["State","Guard","Action","dispatch","state","&attrs","success","error","reset","@name","@value","&default"],false,["state-chart","let","fn","t","with-copyable","tooltip","if","state-matches","hash","not","array","yield"]]',moduleName:"consul-ui/components/consul-copy-button/index.hbs",isStrictMode:!1}) +class o extends l.default{constructor(){super(...arguments),this.chart=r.default}}e.default=o,(0,t.setComponentTemplate)(i,o)})),define("consul-ui/components/consul/acl/disabled/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"JlSTtuNT",block:'[[[1,"\\n"],[8,[39,0],null,null,[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n Tokens\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,2],null,null,[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"Welcome to ACLs"],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n ACLs are not enabled in this Consul cluster. We strongly encourage the use of ACLs in production environments for the best security practices.\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,3],null,[["@text","@href","@icon","@iconPosition","@size"],["Read the documentation",[29,[[28,[37,4],["CONSUL_DOCS_URL"],null],"/acl/index.html"]],"docs-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,3],null,[["@text","@href","@icon","@iconPosition","@size"],["Follow the guide",[29,[[28,[37,4],["CONSUL_DOCS_LEARN_URL"],null],"/consul/security-networking/production-acls"]],"learn-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]]]]],[1,"\\n\\n"]],[],false,["app-view","block-slot","empty-state","hds/link/standalone","env"]]',moduleName:"consul-ui/components/consul/acl/disabled/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/acl/selector/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"S5plMqyM",block:'[[[1,"\\n"],[44,[[30,1]],[[[41,[28,[37,2],["use acls"],null],[[[1," "],[8,[30,2,["Title"]],null,null,[["default"],[[[[1,[28,[35,3],["components.hashicorp-consul.side-nav.acls.title"],null]]],[]]]]],[1,"\\n"]],[]],[[[1," "],[8,[30,2,["Title"]],[[4,[38,4],[[28,[37,3],["components.hashicorp-consul.side-nav.acls.tooltip"],null]],null]],null,[["default"],[[[[1,"\\n "],[1,[28,[35,3],["components.hashicorp-consul.side-nav.acls.title"],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]]],[1,"\\n "],[8,[30,2,["Link"]],null,[["@text","@href","@isHrefExternal","@isActive"],[[28,[37,3],["components.hashicorp-consul.side-nav.acls.tokens"],null],[28,[37,5],["dc.acls.tokens",[30,3,["Name"]]],null],false,[28,[37,6],["dc.acls.tokens",[30,3,["Name"]]],null]]],null],[1,"\\n\\n"],[41,[28,[37,2],["read acls"],null],[[[1," "],[8,[30,2,["Link"]],null,[["@text","@href","@isHrefExternal","@isActive"],[[28,[37,3],["components.hashicorp-consul.side-nav.acls.policies"],null],[28,[37,5],["dc.acls.policies",[30,3,["Name"]]],null],false,[28,[37,6],["dc.acls.policies",[30,3,["Name"]]],null]]],null],[1,"\\n "],[8,[30,2,["Link"]],null,[["@text","@href","@isHrefExternal","@isActive"],[[28,[37,3],["components.hashicorp-consul.side-nav.acls.roles"],null],[28,[37,5],["dc.acls.roles",[30,3,["Name"]]],null],false,[28,[37,6],["dc.acls.roles",[30,3,["Name"]]],null]]],null],[1,"\\n "],[8,[30,2,["Link"]],null,[["@text","@href","@isHrefExternal","@isActive"],[[28,[37,3],["components.hashicorp-consul.side-nav.acls.auth-methods"],null],[28,[37,5],["dc.acls.auth-methods",[30,3,["Name"]]],null],false,[28,[37,6],["dc.acls.auth-methods",[30,3,["Name"]]],null]]],null],[1,"\\n"]],[]],[[[41,[28,[37,7],[[28,[37,2],["use acls"],null]],null],[[[1," "],[8,[30,2,["Item"]],[[24,0,"consul-disabled-nav"]],null,[["default"],[[[[1,"\\n "],[1,[28,[35,3],["components.hashicorp-consul.side-nav.acls.policies"],null]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,2,["Item"]],[[24,0,"consul-disabled-nav"]],null,[["default"],[[[[1,"\\n "],[1,[28,[35,3],["components.hashicorp-consul.side-nav.acls.roles"],null]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,2,["Item"]],[[24,0,"consul-disabled-nav"]],null,[["default"],[[[[1,"\\n "],[1,[28,[35,3],["components.hashicorp-consul.side-nav.acls.auth-methods"],null]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]],null]],[]]]],[2]]]],["@list","SNL","@dc"],false,["let","if","can","t","tooltip","href-to","is-href","not"]]',moduleName:"consul-ui/components/consul/acl/selector/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/auth-method/binding-list/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"qC1cSJjc",block:'[[[1,"\\n"],[10,0],[14,0,"consul-auth-method-binding-list"],[12],[1,"\\n "],[10,"h2"],[12],[1,[30,1,["BindName"]]],[13],[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[14,0,"type"],[12],[1,[28,[35,0],["models.binding-rule.BindType"],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[30,1,["BindType"]]],[1,"\\n "],[10,1],[12],[1,"\\n"],[41,[28,[37,2],[[30,1,["BindType"]],"service"],null],[[[1," "],[8,[39,3],null,null,[["default"],[[[[1,"\\n "],[1,[28,[35,0],["components.consul.auth-method.binding-list.bind-type.service"],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],[[[41,[28,[37,2],[[30,1,["BindType"]],"node"],null],[[[1," "],[8,[39,3],null,null,[["default"],[[[[1,"\\n "],[1,[28,[35,0],["components.consul.auth-method.binding-list.bind-type.node"],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],[[[41,[28,[37,2],[[30,1,["BindType"]],"role"],null],[[[1," "],[8,[39,3],null,null,[["default"],[[[[1,"\\n "],[1,[28,[35,0],["components.consul.auth-method.binding-list.bind-type.role"],null]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]],null]],[]]]],[]]],[1," "],[13],[1,"\\n "],[13],[1,"\\n "],[10,"dt"],[12],[1,[28,[35,0],["models.binding-rule.Selector"],null]],[13],[1,"\\n "],[10,"dd"],[12],[10,"code"],[12],[1,[30,1,["Selector"]]],[13],[13],[1,"\\n "],[10,"dt"],[12],[1,[28,[35,0],["models.binding-rule.Description"],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,1,["Description"]]],[13],[1,"\\n "],[13],[1,"\\n"],[13]],["@item"],false,["t","if","eq","tooltip"]]',moduleName:"consul-ui/components/consul/auth-method/binding-list/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/auth-method/list/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"d2xDNEp2",block:'[[[1,"\\n"],[8,[39,0],[[24,0,"consul-auth-method-list"]],[["@items"],[[30,1]]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n"],[41,[28,[37,3],[[30,2,["DisplayName"]],""],null],[[[1," "],[10,3],[15,6,[28,[37,4],["dc.acls.auth-methods.show",[30,2,["Name"]]],null]],[12],[1,"\\n "],[1,[30,2,["DisplayName"]]],[1,"\\n "],[13],[1,"\\n"]],[]],[[[1," "],[10,3],[15,6,[28,[37,4],["dc.acls.auth-methods.show",[30,2,["Name"]]],null]],[12],[1,"\\n "],[1,[30,2,["Name"]]],[1,"\\n "],[13],[1,"\\n"]],[]]],[1," "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["details"]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@item"],[[30,2]]],null],[1,"\\n"],[41,[28,[37,3],[[30,2,["DisplayName"]],""],null],[[[1," "],[10,1],[12],[1,[30,2,["Name"]]],[13],[1,"\\n"]],[]],null],[41,[28,[37,6],[[30,2,["TokenLocality"]],"global"],null],[[[1," "],[10,1],[14,0,"locality"],[12],[1,"creates global tokens"],[13],[1,"\\n"]],[]],null],[41,[30,2,["MaxTokenTTL"]],[[[1," "],[10,"dl"],[14,0,"ttl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n "],[8,[39,7],null,null,[["default"],[[[[1,"\\n Maximum Time to Live: the maximum life of any token created by this auth method\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,2,["MaxTokenTTL"]]],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n"]],[2]]]]],[1,"\\n"]],["@items","item"],false,["list-collection","block-slot","if","not-eq","href-to","consul/auth-method/type","eq","tooltip"]]',moduleName:"consul-ui/components/consul/auth-method/list/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/auth-method/nspace-list/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"5QjjBDlL",block:'[[[1,"\\n"],[10,0],[14,0,"consul-auth-method-nspace-list"],[12],[1,"\\n "],[10,"table"],[12],[1,"\\n "],[10,"thead"],[12],[1,"\\n "],[10,"tr"],[12],[1,"\\n "],[10,"td"],[12],[1,[28,[35,0],["models.auth-method.Selector"],null]],[13],[1,"\\n "],[10,"td"],[12],[1,[28,[35,0],["models.auth-method.BindNamespace"],null]],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[10,"tbody"],[12],[1,"\\n"],[42,[28,[37,2],[[28,[37,2],[[30,1]],null]],null],null,[[[1," "],[10,"tr"],[12],[1,"\\n "],[10,"td"],[12],[1,[30,2,["Selector"]]],[13],[1,"\\n "],[10,"td"],[12],[1,[30,2,["BindNamespace"]]],[13],[1,"\\n "],[13],[1,"\\n"]],[2]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n"],[13],[1,"\\n\\n"]],["@items","item"],false,["t","each","-track-array"]]',moduleName:"consul-ui/components/consul/auth-method/nspace-list/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/auth-method/search-bar/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"Ka2pQgPL",block:'[[[1,"\\n"],[8,[39,0],[[24,0,"consul-auth-method-search-bar"],[17,1]],[["@filter"],[[30,2]]],[["status","search","filter","sort"],[[[[1,"\\n\\n"],[44,[[28,[37,2],[[28,[37,3],["components.consul.auth-method.search-bar.",[30,3,["status","key"]],".name"],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","key"]]],null],[28,[37,3],["common.consul.",[30,3,["status","key"]]],null]],null]]]],[28,[37,2],[[28,[37,3],["components.consul.auth-method.search-bar.",[30,3,["status","key"]],".options.",[30,3,["status","value"]]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","value"]]],null],[28,[37,3],["common.consul.",[30,3,["status","value"]]],null],[28,[37,3],["common.brand.",[30,3,["status","value"]]],null]],null]]]]],[[[1," "],[8,[30,3,["RemoveFilter"]],[[16,"aria-label",[28,[37,2],["common.ui.remove"],[["item"],[[28,[37,3],[[30,4]," ",[30,5]],null]]]]]],null,[["default"],[[[[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,[30,4]],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,5]],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[4,5]]],[1,"\\n "]],[3]],[[[1,"\\n "],[8,[30,6,["Search"]],null,[["@onsearch","@value","@placeholder"],[[28,[37,5],[[30,0],[30,7]],null],[30,8],[28,[37,2],["common.search.search"],null]]],[["default"],[[[[1,"\\n "],[8,[30,6,["Select"]],[[24,0,"type-search-properties"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,2,["searchproperty","change"]]],null],true,true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["common.search.searchproperty"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,9,["Optgroup"]],[30,9,["Option"]]],[[[42,[28,[37,8],[[28,[37,8],[[30,2,["searchproperty","default"]]],null]],null],null,[[[1," "],[8,[30,11],null,[["@value","@selected"],[[30,12],[28,[37,9],[[30,12],[30,2,["searchproperty","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["common.consul.",[28,[37,10],[[30,12]],null]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[12]],null]],[10,11]]],[1," "]],[]]]]],[1,"\\n "]],[9]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]],[[[1,"\\n "],[8,[30,13,["Select"]],[[24,0,"type-kind"]],[["@position","@onchange","@multiple"],["left",[28,[37,5],[[30,0],[30,2,["kind","change"]]],null],true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["components.consul.auth-method.search-bar.kind.name"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,14,["Optgroup"]],[30,14,["Option"]]],[[[1," "],[8,[30,16],null,[["@value","@selected"],["kubernetes",[28,[37,9],["kubernetes",[30,2,["kind","value"]]],null]]],[["default"],[[[[1,"\\n "],[8,[39,11],[[24,0,"mr-2.5"]],[["@name"],["kubernetes-color"]],null],[1,"\\n Kubernetes\\n "]],[]]]]],[1,"\\n "],[8,[30,16],[[24,0,"jwt"]],[["@value","@selected"],["jwt",[28,[37,9],["jwt",[30,2,["kind","value"]]],null]]],[["default"],[[[[1,"JWT"]],[]]]]],[1,"\\n"],[41,[28,[37,13],["CONSUL_SSO_ENABLED"],null],[[[1," "],[8,[30,16],[[24,0,"oidc"]],[["@value","@selected"],["oidc",[28,[37,9],["oidc",[30,2,["kind","value"]]],null]]],[["default"],[[[[1,"OIDC"]],[]]]]],[1,"\\n"]],[]],null]],[15,16]]],[1," "]],[]]]]],[1,"\\n "]],[14]]]]],[1,"\\n "],[8,[30,13,["Select"]],[[24,0,"type-locality"]],[["@position","@onchange","@multiple"],["left",[28,[37,5],[[30,0],[30,2,["source","change"]]],null],true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["components.consul.auth-method.search-bar.locality.name"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,17,["Optgroup"]],[30,17,["Option"]]],[[[42,[28,[37,8],[[28,[37,8],[[28,[37,4],["local","global"],null]],null]],null],null,[[[1," "],[8,[30,19],[[16,0,[29,[[30,20]]]]],[["@value","@selected"],[[30,20],[28,[37,9],[[30,20],[30,2,["types"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["components.consul.auth-method.search-bar.locality.options.",[30,20]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[20]],null]],[18,19]]],[1," "]],[]]]]],[1,"\\n "]],[17]]]]],[1,"\\n "]],[13]],[[[1,"\\n "],[8,[30,21,["Select"]],[[24,0,"type-sort"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,22,["change"]]],null],false,true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n"],[44,[[28,[37,14],[[28,[37,4],[[28,[37,4],["MethodName:asc",[28,[37,2],["common.sort.alpha.asc"],null]],null],[28,[37,4],["MethodName:desc",[28,[37,2],["common.sort.alpha.desc"],null]],null],[28,[37,4],["TokenTTL:desc",[28,[37,2],["common.sort.duration.asc"],null]],null],[28,[37,4],["TokenTTL:asc",[28,[37,2],["common.sort.duration.desc"],null]],null]],null]],null]],[[[1," "],[1,[28,[35,15],[[30,24],[30,22,["value"]]],null]],[1,"\\n"]],[24]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,23,["Optgroup"]],[30,23,["Option"]]],[[[1," "],[8,[30,25],null,[["@label"],[[28,[37,2],["common.ui.name"],null]]],[["default"],[[[[1,"\\n "],[8,[30,26],null,[["@value","@selected"],["MethodName:asc",[28,[37,16],["MethodName:asc",[30,22,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,26],null,[["@value","@selected"],["MethodName:desc",[28,[37,16],["MethodName:desc",[30,22,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,25],null,[["@label"],[[28,[37,2],["common.ui.maxttl"],null]]],[["default"],[[[[1,"\\n "],[8,[30,26],null,[["@value","@selected"],["TokenTTL:desc",[28,[37,16],["TokenTTL:desc",[30,22,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.duration.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,26],null,[["@value","@selected"],["TokenTTL:asc",[28,[37,16],["TokenTTL:asc",[30,22,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.duration.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[25,26]]],[1," "]],[]]]]],[1,"\\n "]],[23]]]]],[1,"\\n "]],[21]]]]],[1,"\\n"]],["&attrs","@filter","search","key","value","search","@onsearch","@search","components","Optgroup","Option","prop","search","components","Optgroup","Option","components","Optgroup","Option","option","search","@sort","components","selectable","Optgroup","Option"],false,["search-bar","let","t","concat","array","action","block-slot","each","-track-array","includes","lowercase","flight-icon","if","env","from-entries","get","eq"]]',moduleName:"consul-ui/components/consul/auth-method/search-bar/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/auth-method/type/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"bY+aGPOK",block:'[[[1,"\\n"],[44,[[28,[37,1],[[30,1,["Type"]]],null]],[[[1," "],[10,1],[15,0,[29,["consul-auth-method-type ",[52,[51,[30,2]],[30,1,["Type"]]]]]],[12],[1,"\\n"],[41,[30,2],[[[1," "],[8,[39,4],[[24,0,"mr-1.5 w-4 h-4"]],[["@name"],[[30,2]]],null],[1,"\\n"]],[]],null],[1," "],[1,[28,[35,5],[[28,[37,6],["common.brand.",[30,1,["Type"]]],null]],null]],[1,"\\n "],[13],[1,"\\n"]],[2]]]],["@item","flightIcon"],false,["let","icon-mapping","unless","if","flight-icon","t","concat"]]',moduleName:"consul-ui/components/consul/auth-method/type/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/auth-method/view/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"kcVi1X7l",block:'[[[1,"\\n "],[10,0],[14,0,"consul-auth-method-view"],[12],[1,"\\n"],[41,[28,[37,1],[[30,1,["Type"]],"kubernetes"],null],[[[1," "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,[28,[35,2],["models.auth-method.Type"],null]],[13],[1,"\\n "],[10,"dd"],[12],[8,[39,3],null,[["@item"],[[30,1]]],null],[13],[1,"\\n\\n"],[42,[28,[37,5],[[28,[37,5],[[28,[37,6],["MaxTokenTTL","TokenLocality","DisplayName","Description"],null]],null]],null],null,[[[41,[28,[37,7],[[30,1],[30,2]],null],[[[1," "],[10,"dt"],[12],[1,[28,[35,2],[[28,[37,8],["models.auth-method.",[30,2]],null]],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,[28,[35,7],[[30,1],[30,2]],null]],[13],[1,"\\n"]],[]],null]],[2]],null],[41,[30,1,["Config","Host"]],[[[1," "],[10,"dt"],[12],[1,[28,[35,2],["models.auth-method.Config.Host"],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,9],null,[["@value","@name"],[[30,1,["Config","Host"]],[28,[37,2],["models.auth-method.Config.Host"],null]]],null],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[30,1,["Config","CACert"]],[[[1," "],[10,"dt"],[12],[1,[28,[35,2],["models.auth-method.Config.CACert"],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,9],null,[["@obfuscated","@value","@name"],[true,[30,1,["Config","CACert"]],[28,[37,2],["models.auth-method.Config.CACert"],null]]],null],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[30,1,["Config","ServiceAccountJWT"]],[[[1," "],[10,"dt"],[12],[1,[28,[35,2],["models.auth-method.Config.ServiceAccountJWT"],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,9],null,[["@value","@name"],[[30,1,["Config","ServiceAccountJWT"]],[28,[37,2],["models.auth-method.Config.ServiceAccountJWT"],null]]],null],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n"]],[]],[[[1," "],[10,"section"],[14,0,"meta"],[12],[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"Type"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,3],null,[["@item"],[[30,1]]],null],[1,"\\n "],[13],[1,"\\n\\n"],[42,[28,[37,5],[[28,[37,5],[[28,[37,6],["MaxTokenTTL","TokenLocality","DisplayName","Description"],null]],null]],null],null,[[[41,[28,[37,7],[[30,1],[30,3]],null],[[[1,"\\n "],[10,"dt"],[12],[1,[28,[35,2],[[28,[37,8],["models.auth-method.",[30,3]],null]],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,[28,[35,7],[[30,1],[30,3]],null]],[13],[1,"\\n\\n"]],[]],null]],[3]],null],[1,"\\n"],[41,[28,[37,1],[[30,1,["Type"]],"aws-iam"],null],[[[1,"\\n"],[44,[[30,1,["Config"]]],[[[42,[28,[37,5],[[28,[37,5],[[28,[37,6],["BoundIAMPrincipalARNs","EnableIAMEntityDetails","IAMEntityTags","IAMEndpoint","MaxRetries","STSEndpoint","STSRegion","AllowedSTSHeaderValues","ServerIDHeaderValue"],null]],null]],null],null,[[[41,[28,[37,7],[[30,4],[30,5]],null],[[[1,"\\n "],[10,"dt"],[12],[1,[28,[35,2],[[28,[37,8],["models.auth-method.",[30,5]],null]],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n"],[44,[[28,[37,7],[[30,4],[30,5]],null]],[[[41,[28,[37,11],[[30,6]],null],[[[1," "],[10,"ul"],[12],[1,"\\n"],[42,[28,[37,5],[[28,[37,5],[[30,6]],null]],null],null,[[[1," "],[10,"li"],[12],[1,"\\n "],[10,1],[12],[1,[30,7]],[13],[1,"\\n "],[13],[1,"\\n"]],[7]],null],[1," "],[13],[1,"\\n"]],[]],[[[1," "],[1,[30,6]],[1,"\\n"]],[]]]],[6]]],[1," "],[13],[1,"\\n\\n"]],[]],null]],[5]],null],[1,"\\n"]],[4]]],[1,"\\n"]],[]],[[[41,[28,[37,1],[[30,1,["Type"]],"jwt"],null],[[[41,[30,1,["Config","JWKSURL"]],[[[1," "],[10,"dt"],[12],[1,[28,[35,2],["models.auth-method.Config.JWKSURL"],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,9],null,[["@value","@name"],[[30,1,["Config","JWKSURL"]],[28,[37,2],["models.auth-method.Config.JWKSURL"],null]]],null],[1,"\\n "],[13],[1,"\\n "],[10,"dt"],[12],[1,[28,[35,2],["models.auth-method.Config.JWKSCACert"],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,9],null,[["@obfuscated","@value","@name"],[true,[30,1,["Config","JWKSCACert"]],[28,[37,2],["models.auth-method.Config.JWKSCACert"],null]]],null],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[30,1,["Config","JWTValidationPubKeys"]],[[[1," "],[10,"dt"],[12],[1,[28,[35,2],["models.auth-method.Config.JWTValidationPubKeys"],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,9],null,[["@obfuscated","@value","@name"],[true,[30,1,["Config","JWTValidationPubKeys"]],[28,[37,2],["models.auth-method.Config.JWTValidationPubKeys"],null]]],null],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[30,1,["Config","OIDCDiscoveryURL"]],[[[1," "],[10,"dt"],[12],[1,[28,[35,2],["models.auth-method.Config.OIDCDiscoveryURL"],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,9],null,[["@value","@name"],[[30,1,["Config","OIDCDiscoveryURL"]],[28,[37,2],["models.auth-method.Config.OIDCDiscoveryURL"],null]]],null],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[30,1,["Config","JWTSupportedAlgs"]],[[[1," "],[10,"dt"],[12],[1,[28,[35,2],["models.auth-method.Config.JWTSupportedAlgs"],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,[28,[35,12],[", ",[30,1,["Config","JWTSupportedAlgs"]]],null]],[13],[1,"\\n"]],[]],null],[41,[30,1,["Config","BoundAudiences"]],[[[1," "],[10,"dt"],[12],[1,[28,[35,2],["models.auth-method.Config.BoundAudiences"],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[10,"ul"],[12],[1,"\\n"],[42,[28,[37,5],[[28,[37,5],[[30,1,["Config","BoundAudiences"]]],null]],null],null,[[[1," "],[10,"li"],[12],[1,"\\n "],[10,1],[12],[1,[30,8]],[13],[1,"\\n "],[13],[1,"\\n"]],[8]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[42,[28,[37,5],[[28,[37,5],[[28,[37,6],["BoundIssuer","ExpirationLeeway","NotBeforeLeeway","ClockSkewLeeway"],null]],null]],null],null,[[[41,[28,[37,7],[[30,1,["Config"]],[30,9]],null],[[[1," "],[10,"dt"],[12],[1,[28,[35,2],[[28,[37,8],["models.auth-method.Config.",[30,9]],null]],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,[28,[35,7],[[30,1,["Config"]],[30,9]],null]],[13],[1,"\\n"]],[]],null]],[9]],null]],[]],[[[41,[28,[37,1],[[30,1,["Type"]],"oidc"],null],[[[41,[30,1,["Config","OIDCDiscoveryURL"]],[[[1," "],[10,"dt"],[12],[1,[28,[35,2],["models.auth-method.Config.OIDCDiscoveryURL"],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,9],null,[["@value","@name"],[[30,1,["Config","OIDCDiscoveryURL"]],[28,[37,2],["models.auth-method.Config.OIDCDiscoveryURL"],null]]],null],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[30,1,["Config","OIDCDiscoveryCACert"]],[[[1," "],[10,"dt"],[12],[1,[28,[35,2],["models.auth-method.Config.OIDCDiscoveryCACert"],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,9],null,[["@obfuscated","@value","@name"],[true,[30,1,["Config","OIDCDiscoveryCACert"]],[28,[37,2],["models.auth-method.Config.OIDCDiscoveryCACert"],null]]],null],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[30,1,["Config","OIDCClientID"]],[[[1," "],[10,"dt"],[12],[1,[28,[35,2],["models.auth-method.Config.OIDCClientID"],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,1,["Config","OIDCClientID"]]],[13],[1,"\\n"]],[]],null],[41,[30,1,["Config","OIDCClientSecret"]],[[[1," "],[10,"dt"],[12],[1,[28,[35,2],["models.auth-method.Config.OIDCClientSecret"],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,1,["Config","OIDCClientSecret"]]],[13],[1,"\\n"]],[]],null],[41,[30,1,["Config","AllowedRedirectURIs"]],[[[1," "],[10,"dt"],[12],[1,[28,[35,2],["models.auth-method.Config.AllowedRedirectURIs"],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[10,"ul"],[12],[1,"\\n"],[42,[28,[37,5],[[28,[37,5],[[30,1,["Config","AllowedRedirectURIs"]]],null]],null],null,[[[1," "],[10,"li"],[12],[1,"\\n "],[8,[39,9],null,[["@value","@name"],[[30,10],"Redirect URI"]],null],[1,"\\n "],[13],[1,"\\n"]],[10]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[30,1,["Config","BoundAudiences"]],[[[1," "],[10,"dt"],[12],[1,[28,[35,2],["models.auth-method.Config.BoundAudiences"],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[10,"ul"],[12],[1,"\\n"],[42,[28,[37,5],[[28,[37,5],[[30,1,["Config","BoundAudiences"]]],null]],null],null,[[[1," "],[10,"li"],[12],[1,"\\n "],[10,1],[12],[1,[30,11]],[13],[1,"\\n "],[13],[1,"\\n"]],[11]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[30,1,["Config","OIDCScopes"]],[[[1," "],[10,"dt"],[12],[1,[28,[35,2],["models.auth-method.Config.OIDCScopes"],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[10,"ul"],[12],[1,"\\n"],[42,[28,[37,5],[[28,[37,5],[[30,1,["Config","OIDCScopes"]]],null]],null],null,[[[1," "],[10,"li"],[12],[1,"\\n "],[10,1],[12],[1,[30,12]],[13],[1,"\\n "],[13],[1,"\\n"]],[12]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[30,1,["Config","JWTSupportedAlgs"]],[[[1," "],[10,"dt"],[12],[1,[28,[35,2],["models.auth-method.Config.JWTSupportedAlgs"],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,[28,[35,12],[", ",[30,1,["Config","JWTSupportedAlgs"]]],null]],[13],[1,"\\n"]],[]],null],[41,[30,1,["Config","VerboseOIDCLogging"]],[[[1," "],[10,"dt"],[14,0,"check"],[12],[1,[28,[35,2],["models.auth-method.Config.VerboseOIDCLogging"],null]],[13],[1,"\\n "],[10,"dd"],[12],[10,"input"],[14,"disabled","disabled"],[15,"checked",[30,1,["Config","VerboseOIDCLogging"]]],[14,4,"checkbox"],[12],[13],[13],[1,"\\n"]],[]],null],[1," "]],[]],null]],[]]]],[]]],[1," "],[13],[1,"\\n "],[13],[1,"\\n\\n"],[41,[28,[37,13],[[28,[37,1],[[30,1,["Type"]],"aws-iam"],null]],null],[[[1," "],[10,"hr"],[12],[13],[1,"\\n\\n "],[10,"section"],[14,0,"claim-mappings"],[12],[1,"\\n "],[10,"h2"],[12],[1,"Claim Mappings"],[13],[1,"\\n"],[41,[30,1,["Config","ClaimMappings"]],[[[1," "],[10,2],[12],[1,"Use this if the claim you are capturing is singular. When mapped, the values can be any of a number, string, or boolean and will all be stringified when returned."],[13],[1,"\\n "],[10,"table"],[12],[1,"\\n "],[10,"thead"],[12],[1,"\\n "],[10,"tr"],[12],[1,"\\n "],[10,"td"],[12],[1,"Key"],[13],[1,"\\n "],[10,"td"],[12],[1,"Value"],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[10,"tbody"],[12],[1,"\\n"],[42,[28,[37,5],[[28,[37,5],[[28,[37,14],[[30,1,["Config","ClaimMappings"]]],null]],null]],null],null,[[[1," "],[10,"tr"],[12],[1,"\\n "],[10,"td"],[12],[1,[28,[35,7],[[30,13],0],null]],[13],[1,"\\n "],[10,"td"],[12],[1,[28,[35,7],[[30,13],1],null]],[13],[1,"\\n "],[13],[1,"\\n"]],[13]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],[[[1," "],[8,[39,15],null,null,[["default"],[[[[1,"\\n "],[8,[39,16],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"No claim mappings"],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,16],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"Use this if the claim you are capturing is singular. When mapped, the values can be any of a number, string, or boolean and will all be stringified when returned."],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,16],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[10,"li"],[14,0,"docs-link"],[12],[1,"\\n"],[41,[28,[37,1],[[30,1,["Type"]],"jwt"],null],[[[1," "],[10,3],[15,6,[29,[[28,[37,17],["CONSUL_DOCS_URL"],null],"/security/acl/auth-methods/jwt#claimmappings"]]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[1,"Read the documentation"],[13],[1,"\\n"]],[]],[[[1," "],[10,3],[15,6,[29,[[28,[37,17],["CONSUL_DOCS_URL"],null],"/security/acl/auth-methods/oidc#claimmappings"]]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[1,"Read the documentation"],[13],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n\\n "],[10,"hr"],[12],[13],[1,"\\n\\n "],[10,"section"],[14,0,"list-claim-mappings"],[12],[1,"\\n "],[10,"h2"],[12],[1,"List Claim Mappings"],[13],[1,"\\n"],[41,[30,1,["Config","ListClaimMappings"]],[[[1," "],[10,2],[12],[1,"Use this if the claim you are capturing is list-like (such as groups). When mapped, the values can be any of a number, string, or boolean and will all be stringified when returned."],[13],[1,"\\n "],[10,"table"],[12],[1,"\\n "],[10,"thead"],[12],[1,"\\n "],[10,"tr"],[12],[1,"\\n "],[10,"td"],[12],[1,"Key"],[13],[1,"\\n "],[10,"td"],[12],[1,"Value"],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[10,"tbody"],[12],[1,"\\n"],[42,[28,[37,5],[[28,[37,5],[[28,[37,14],[[30,1,["Config","ListClaimMappings"]]],null]],null]],null],null,[[[1," "],[10,"tr"],[12],[1,"\\n "],[10,"td"],[12],[1,[28,[35,7],[[30,14],0],null]],[13],[1,"\\n "],[10,"td"],[12],[1,[28,[35,7],[[30,14],1],null]],[13],[1,"\\n "],[13],[1,"\\n"]],[14]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],[[[1," "],[8,[39,15],null,null,[["default"],[[[[1,"\\n "],[8,[39,16],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"No list claim mappings"],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,16],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"Use this if the claim you are capturing is list-like (such as groups). When mapped, the values can be any of a number, string, or boolean and will all be stringified when returned."],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,16],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[10,"li"],[14,0,"docs-link"],[12],[1,"\\n"],[41,[28,[37,1],[[30,1,["Type"]],"jwt"],null],[[[1," "],[10,3],[15,6,[29,[[28,[37,17],["CONSUL_DOCS_URL"],null],"/security/acl/auth-methods/jwt#listclaimmappings"]]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[1,"Read the documentation"],[13],[1,"\\n"]],[]],[[[1," "],[10,3],[15,6,[29,[[28,[37,17],["CONSUL_DOCS_URL"],null],"/security/acl/auth-methods/oidc#listclaimmappings"]]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[1,"Read the documentation"],[13],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n"]],[]],null]],[]]],[1," "],[13]],["@item","value","value","config","value","item","jtem","bond","value","uri","bond","scope","entry","entry"],false,["if","eq","t","consul/auth-method/type","each","-track-array","array","get","concat","copyable-code","let","array-is-array","join","not","entries","empty-state","block-slot","env"]]',moduleName:"consul-ui/components/consul/auth-method/view/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/bucket/list/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@ember/service"],(function(e,t,n,l,r){var i,o +Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const a=(0,n.createTemplateFactory)({id:"r6O724Xz",block:'[[[1,"\\n"],[41,[30,0,["itemsToDisplay","length"]],[[[1," "],[10,"dl"],[14,0,"consul-bucket-list"],[12],[1,"\\n"],[42,[28,[37,2],[[28,[37,2],[[30,0,["itemsToDisplay"]]],null]],null],null,[[[1," "],[11,"dt"],[16,0,[30,1,["type"]]],[4,[38,3],null,null],[12],[1,"\\n "],[1,[30,1,["label"]]],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[30,1,["item"]]],[1,"\\n "],[13],[1,"\\n"]],[1]],null],[1," "],[13],[1,"\\n"]],[]],null]],["item"],false,["if","each","-track-array","tooltip"]]',moduleName:"consul-ui/components/consul/bucket/list/index.hbs",isStrictMode:!1}) +let u=(i=class extends l.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="abilities",l=this,(n=o)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}get itemsToDisplay(){const{peerOrPartitionPart:e,namespacePart:t,servicePart:n}=this +return[...e,...t,...n]}get peerOrPartitionPart(){const{peerPart:e,partitionPart:t}=this +return e.length?e:t}get partitionPart(){const{item:e,partition:t}=this.args,{abilities:n}=this +return t&&n.can("use partitions")&&e.Partition!==t?[{type:"partition",label:"Admin Partition",item:e.Partition}]:[]}get peerPart(){const{item:e}=this.args +return e.PeerName?[{type:"peer",label:"Peer",item:e.PeerName}]:[]}get namespacePart(){const{item:e,nspace:t}=this.args,{abilities:n,partitionPart:l,peerPart:r}=this,i={type:"nspace",label:"Namespace",item:e.Namespace} +return l.length||r.length&&n.can("use nspaces")||t&&n.can("use nspaces")&&e.Namespace!==t?[i]:[]}get servicePart(){const{item:e,service:t}=this.args,{partitionPart:n,namespacePart:l}=this +return(n.length||l.length)&&e.Service&&t?[{type:"service",label:"Service",item:e.Service}]:[]}},s=i.prototype,c="abilities",d=[r.inject],p={configurable:!0,enumerable:!0,writable:!0,initializer:null},m={},Object.keys(p).forEach((function(e){m[e]=p[e]})),m.enumerable=!!m.enumerable,m.configurable=!!m.configurable,("value"in m||m.initializer)&&(m.writable=!0),m=d.slice().reverse().reduce((function(e,t){return t(s,c,e)||e}),m),f&&void 0!==m.initializer&&(m.value=m.initializer?m.initializer.call(f):void 0,m.initializer=void 0),void 0===m.initializer&&(Object.defineProperty(s,c,m),m=null),o=m,i) +var s,c,d,p,f,m +e.default=u,(0,t.setComponentTemplate)(a,u)})),define("consul-ui/components/consul/datacenter/selector/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@ember/object","@glimmer/tracking"],(function(e,t,n,l,r,i){var o,a +function u(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const s=(0,n.createTemplateFactory)({id:"xS/PrPr6",block:'[[[1,"\\n"],[44,[[30,1]],[[[41,[28,[37,2],[[30,3,["length"]],1],null],[[[1," "],[8,[30,2,["Title"]],[[24,0,"consul-side-nav__selector-title"]],null,[["default"],[[[[1,[28,[35,3],["components.hashicorp-consul.side-nav.datacenters.title"],null]]],[]]]]],[1,"\\n "],[8,[39,4],[[24,0,"consul-datacenter-selector"]],[["@list","@items","@item","@key","@icon","@placeholder","@description"],[[30,2],[28,[37,5],["Primary:desc","Local:desc","Name:asc",[30,3]],null],[30,4],"Name","server-cluster",[28,[37,3],["components.hashicorp-consul.side-nav.datacenters.placeholder"],null],[28,[37,3],["components.hashicorp-consul.side-nav.datacenters.description"],null]]],[["default"],[[[[1,"\\n "],[8,[30,5,["Dropdown","Checkmark"]],[[24,0,"consul-datacenter-selector__item"]],[["@selected","@href","@isHrefExternal"],[[28,[37,6],[[30,4,["Name"]],[30,5,["item","Name"]]],null],[28,[37,7],["."],[["params"],[[28,[37,8],null,[["dc","partition","nspace"],[[30,5,["item","Name"]],[27],[52,[28,[37,2],[[30,6,["length"]],0],null],[30,6],[27]]]]]]]],false]],[["default"],[[[[1,"\\n "],[10,1],[14,0,"consul-datacenter-selector__dc-name"],[12],[1,"\\n "],[1,[30,5,["item","Name"]]],[1,"\\n\\n"],[41,[28,[37,9],[[30,5,["item","Local"]],[30,5,["item","Primary"]]],null],[[[1," "],[10,1],[14,0,"consul-datacenter-selector__badges"],[12],[1,"\\n"],[41,[30,5,["item","Primary"]],[[[1," "],[8,[39,10],null,[["@text"],["Primary"]],null],[1,"\\n"]],[]],null],[41,[30,5,["item","Local"]],[[[1," "],[8,[39,10],null,[["@text"],["Local"]],null],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[5]]]]],[1,"\\n"]],[]],[[[1," "],[8,[30,2,["Item"]],[[24,0,"consul-side-nav__datacenter"]],null,[["default"],[[[[1,"\\n "],[8,[39,11],null,[["@name","@color"],["server-cluster","var(--token-form-control-disabled-foreground-color)"]],null],[1,"\\n "],[8,[39,12],null,[["@size","@color"],["200","disabled"]],[["default"],[[[[1,[30,4,["Name"]]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]]]],[2]]]],["@list","SNL","@dcs","@dc","Selector","@nspace"],false,["let","if","gt","t","nav-selector","sort-by","eq","href-to","hash","or","hds/badge","flight-icon","hds/text/display"]]',moduleName:"consul-ui/components/consul/datacenter/selector/index.hbs",isStrictMode:!1}) +let c=(o=class extends l.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="search",l=this,(n=a)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}get filteredItems(){const e=this.search.toLowerCase() +return this.args.dcs.filter((t=>t.Name.toLowerCase().includes(e)))}onSearchInput(e){this.search=e.target.value}},a=u(o.prototype,"search",[i.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return""}}),u(o.prototype,"onSearchInput",[r.action],Object.getOwnPropertyDescriptor(o.prototype,"onSearchInput"),o.prototype),o) +e.default=c,(0,t.setComponentTemplate)(s,c)})),define("consul-ui/components/consul/discovery-chain/index",["exports","@ember/component","@ember/template-factory","@ember/service","@ember/object","consul-ui/components/consul/discovery-chain/utils"],(function(e,t,n,l,r,i){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const o=(0,n.createTemplateFactory)({id:"G/NfZcWn",block:'[[[1,"\\n"],[10,"style"],[12],[1,"\\n"],[41,[33,1,["nodes"]],[[[1," "],[1,[33,1,["nodes"]]],[1,"\\n { opacity: 1 !important; background-color: var(--token-color-surface-interactive); border:\\n var(--decor-border-100); border-radius: var(--decor-radius-200); border-color:\\n var(--token-color-foreground-faint); box-shadow: var(--token-surface-high-box-shadow); }\\n"]],[]],null],[41,[33,1,["edges"]],[[[1," "],[1,[33,1,["edges"]]],[1,"\\n { opacity: 1; }\\n"]],[]],null],[13],[1,"\\n\\n"],[10,0],[14,0,"routes"],[12],[1,"\\n "],[10,"header"],[12],[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[33,2,["ServiceName"]]],[1,"\\n Router\\n "],[11,1],[4,[38,3],["Use routers to intercept traffic using Layer 7 criteria such as path prefixes or http headers."],null],[12],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[10,0],[14,"role","group"],[12],[1,"\\n"],[42,[28,[37,5],[[28,[37,5],[[33,6]],null]],null],null,[[[1," "],[8,[39,7],[[4,[38,9],[[28,[37,10],[[28,[37,11],[[30,1],"rect"],null]],[["from"],[[30,0,["edges"]]]]]],null]],[["@item","@onclick"],[[30,1],[28,[37,8],[[30,0],"click"],null]]],null],[1,"\\n"]],[1]],null],[1," "],[13],[1,"\\n"],[13],[1,"\\n\\n"],[10,0],[14,0,"splitters"],[12],[1,"\\n "],[10,"header"],[12],[1,"\\n "],[10,"h2"],[12],[1,"\\n Splitters\\n "],[11,1],[4,[38,3],["Splitters are configured to split incoming requests across different services or subsets of a single service."],null],[12],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[10,0],[14,"role","group"],[12],[1,"\\n"],[42,[28,[37,5],[[28,[37,5],[[28,[37,12],["Name",[33,13]],null]],null]],null],null,[[[1," "],[8,[39,14],[[4,[38,9],[[28,[37,10],[[28,[37,11],[[30,2],"rect"],null]],[["from"],[[30,0,["edges"]]]]]],null]],[["@item","@onclick"],[[30,2],[28,[37,8],[[30,0],"click"],null]]],null],[1,"\\n"]],[2]],null],[1," "],[13],[1,"\\n"],[13],[1,"\\n\\n"],[10,0],[14,0,"resolvers"],[12],[1,"\\n "],[10,"header"],[12],[1,"\\n "],[10,"h2"],[12],[1,"\\n Resolvers\\n "],[11,1],[4,[38,3],["Resolvers are used to define which instances of a service should satisfy discovery requests."],null],[12],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[10,0],[14,"role","group"],[12],[1,"\\n"],[42,[28,[37,5],[[28,[37,5],[[28,[37,12],["Name",[33,15]],null]],null]],null],null,[[[1," "],[8,[39,16],[[4,[38,9],[[28,[37,10],[[28,[37,11],[[30,3],"rect"],null]],[["from"],[[30,0,["edges"]]]]]],null]],[["@item","@edges","@onclick"],[[30,3],[30,0,["edges"]],[28,[37,8],[[30,0],"click"],null]]],null],[1,"\\n"]],[3]],null],[1," "],[13],[1,"\\n"],[13],[1,"\\n\\n"],[1,[34,17]],[1,"\\n\\n"],[11,"svg"],[24,0,"edges"],[24,"width","100%"],[24,"height","100%"],[24,"preserveAspectRatio","none"],[4,[38,18],[[28,[37,11],[[30,0],"edges"],null]],null],[12],[1,"\\n"],[42,[28,[37,5],[[28,[37,5],[[33,6]],null]],null],null,[[[41,[30,4,["rect"]],[[[44,[[30,4,["rect"]],[30,4,["NextItem","rect"]]],[[[44,[[28,[37,20],[[28,[37,21],null,[["x","y"],[[30,6,["x"]],[28,[37,22],[[30,6,["y"]],[28,[37,23],[[30,6,["height"]],2],null]],null]]]],[28,[37,24],[[30,4,["ID"]]],null]],null]],[[[1,"\\n "],[10,"path"],[15,1,[28,[37,24],[[30,4,["ID"]],">",[30,4,["NextNode"]]],null]],[15,"d",[28,[37,25],[[28,[37,21],null,[["x","y"],[[30,7,["x"]],[28,[37,26],[[30,7,["y"]],0],null]]]]],[["src"],[[28,[37,21],null,[["x","y"],[[30,5,["right"]],[28,[37,22],[[30,5,["y"]],[28,[37,23],[[30,5,["height"]],2],null]],null]]]]]]]],[12],[13],[1,"\\n\\n"]],[7]]]],[5,6]]]],[]],null]],[4]],null],[1,"\\n"],[42,[28,[37,5],[[28,[37,5],[[33,13]],null]],null],null,[[[41,[30,8,["rect"]],[[[44,[[30,8,["rect"]]],[[[42,[28,[37,5],[[28,[37,5],[[30,8,["Splits"]]],null]],null],null,[[[44,[[30,10,["NextItem","rect"]]],[[[44,[[28,[37,20],[[28,[37,21],null,[["x","y"],[[30,12,["x"]],[28,[37,22],[[30,12,["y"]],[28,[37,23],[[30,12,["height"]],2],null]],null]]]],[28,[37,24],[[30,8,["ID"]],"-",[30,11]],null]],null]],[[[1,"\\n "],[11,"path"],[16,1,[28,[37,24],["splitter:",[30,8,["Name"]],">",[30,10,["NextNode"]]],null]],[24,0,"split"],[16,"d",[28,[37,25],[[28,[37,21],null,[["x","y"],[[30,13,["x"]],[30,13,["y"]]]]]],[["src"],[[28,[37,21],null,[["x","y"],[[30,9,["right"]],[28,[37,22],[[30,9,["y"]],[28,[37,23],[[30,9,["height"]],2],null]],null]]]]]]]],[4,[38,3],[[28,[37,24],[[28,[37,27],[[28,[37,28],[[30,10,["Weight"]],0],null]],[["decimals"],[2]]],"%"],null]],[["options"],[[28,[37,21],null,[["followCursor"],[true]]]]]],[12],[13],[1,"\\n\\n"]],[13]]]],[12]]]],[10,11]],null]],[9]]]],[]],null]],[8]],null],[1,"\\n"],[13],[1,"\\n\\n"],[10,"svg"],[14,0,"resolver-inlets"],[14,"height","100%"],[12],[1,"\\n"],[42,[28,[37,5],[[28,[37,5],[[33,6]],null]],null],null,[[[41,[28,[37,29],[[30,14,["NextNode"]],"resolver:"],null],[[[44,[[28,[37,28],[[30,14,["NextItem","rect"]],[28,[37,21],null,[["y","height"],[0,0]]]],null]],[[[1," "],[10,"circle"],[14,"r","2.5"],[14,"cx","5"],[15,"cy",[28,[37,22],[[30,15,["y"]],[28,[37,23],[[30,15,["height"]],2],null]],null]],[12],[13],[1,"\\n"]],[15]]]],[]],null]],[14]],null],[42,[28,[37,5],[[28,[37,5],[[33,13]],null]],null],null,[[[42,[28,[37,5],[[28,[37,5],[[30,16,["Splits"]]],null]],null],null,[[[44,[[28,[37,28],[[30,17,["NextItem","rect"]],[28,[37,21],null,[["y","height"],[0,0]]]],null]],[[[1," "],[10,"circle"],[14,"r","2.5"],[14,"cx","5"],[15,"cy",[28,[37,22],[[30,18,["y"]],[28,[37,23],[[30,18,["height"]],2],null]],null]],[12],[13],[1,"\\n"]],[18]]]],[17]],null]],[16]],null],[13],[1,"\\n\\n"],[10,"svg"],[14,0,"splitter-inlets"],[14,"height","100%"],[12],[1,"\\n"],[42,[28,[37,5],[[28,[37,5],[[33,6]],null]],null],null,[[[41,[28,[37,29],[[30,19,["NextNode"]],"splitter:"],null],[[[44,[[28,[37,28],[[30,19,["NextItem","rect"]],[28,[37,21],null,[["y","height"],[0,0]]]],null]],[[[1," "],[10,"circle"],[14,"r","2.5"],[14,"cx","5"],[15,"cy",[28,[37,22],[[30,20,["y"]],[28,[37,23],[[30,20,["height"]],2],null]],null]],[12],[13],[1,"\\n"]],[20]]]],[]],null]],[19]],null],[13],[1,"\\n"]],["item","item","item","item","src","destRect","dest","splitter","src","item","index","destRect","dest","item","dest","item","item","dest","item","dest"],false,["if","selected","chain","tooltip","each","-track-array","routes","consul/discovery-chain/route-card","action","on-resize","dom-position","set","sort-by","splitters","consul/discovery-chain/splitter-card","resolvers","consul/discovery-chain/resolver-card","nodes","did-insert","let","tween-to","hash","add","div","concat","svg-curve","sub","round","or","string-starts-with"]]',moduleName:"consul-ui/components/consul/discovery-chain/index.hbs",isStrictMode:!1}) +var a=(0,t.setComponentTemplate)(o,t.default.extend({dom:(0,l.inject)("dom"),ticker:(0,l.inject)("ticker"),dataStructs:(0,l.inject)("data-structs"),classNames:["discovery-chain"],classNameBindings:["active"],selectedId:"",init:function(){this._super(...arguments),this._listeners=this.dom.listeners()},didInsertElement:function(){this._listeners.add(this.dom.document(),{click:e=>{this.dom.closest('[class$="-card"]',e.target)||((0,r.set)(this,"active",!1),(0,r.set)(this,"selectedId",""))}})},willDestroyElement:function(){this._super(...arguments),this._listeners.remove(),this.ticker.destroy(this)},splitters:(0,r.computed)("chain.Nodes",(function(){return(0,i.getSplitters)((0,r.get)(this,"chain.Nodes"))})),routes:(0,r.computed)("chain.Nodes",(function(){const e=(0,i.getRoutes)((0,r.get)(this,"chain.Nodes"),this.dom.guid) +if(!e.find((e=>"/"===(0,r.get)(e,"Definition.Match.HTTP.PathPrefix")))&&!e.find((e=>void 0===e.Definition))){let t +const n=`resolver:${this.chain.ServiceName}.${this.chain.Namespace}.${this.chain.Partition}.${this.chain.Datacenter}`,l=`splitter:${this.chain.ServiceName}.${this.chain.Namespace}.${this.chain.Partition}` +if(void 0!==this.chain.Nodes[l]?t=l:void 0!==this.chain.Nodes[n]&&(t=n),void 0!==t){const n={Default:!0,ID:`route:${this.chain.ServiceName}`,Name:this.chain.ServiceName,Definition:{Match:{HTTP:{PathPrefix:"/"}}},NextNode:t} +e.push((0,i.createRoute)(n,this.chain.ServiceName,this.dom.guid))}}return e})),nodes:(0,r.computed)("routes","splitters","resolvers",(function(){let e=this.resolvers.reduce(((e,t)=>(e[`resolver:${t.ID}`]=t,t.Children.reduce(((e,t)=>(e[`resolver:${t.ID}`]=t,e)),e),e)),{}) +return e=this.splitters.reduce(((e,t)=>(e[t.ID]=t,e)),e),e=this.routes.reduce(((e,t)=>(e[t.ID]=t,e)),e),Object.entries(e).forEach((t=>{let[n,l]=t +void 0!==l.NextNode&&(l.NextItem=e[l.NextNode]),void 0!==l.Splits&&l.Splits.forEach((t=>{void 0!==t.NextNode&&(t.NextItem=e[t.NextNode])}))})),""})),resolvers:(0,r.computed)("chain.{Nodes,Targets}",(function(){return(0,i.getResolvers)(this.chain.Datacenter,this.chain.Partition,this.chain.Namespace,(0,r.get)(this,"chain.Targets"),(0,r.get)(this,"chain.Nodes"))})),graph:(0,r.computed)("splitters","routes.[]",(function(){const e=this.dataStructs.graph() +return this.splitters.forEach((t=>{t.Splits.forEach((n=>{e.addLink(t.ID,n.NextNode)}))})),this.routes.forEach(((t,n)=>{e.addLink(t.ID,t.NextNode)})),e})),selected:(0,r.computed)("selectedId","graph",(function(){if(""===this.selectedId||!this.dom.element(`#${this.selectedId}`))return{} +const e=this.selectedId,t=e.split(":").shift(),n=[e],l=[] +return this.graph.forEachLinkedNode(e,((e,r)=>{n.push(e.id),l.push(`${r.fromId}>${r.toId}`),this.graph.forEachLinkedNode(e.id,((e,r)=>{const i=e.id.split(":").shift() +t!==i&&"splitter"!==t&&"splitter"!==i&&(n.push(e.id),l.push(`${r.fromId}>${r.toId}`))}))})),{nodes:n.map((e=>`#${CSS.escape(e)}`)),edges:l.map((e=>`#${CSS.escape(e)}`))}})),actions:{click:function(e){const t=e.currentTarget.getAttribute("id") +t===this.selectedId?((0,r.set)(this,"active",!1),(0,r.set)(this,"selectedId","")):((0,r.set)(this,"active",!0),(0,r.set)(this,"selectedId",t))}}})) +e.default=a})),define("consul-ui/components/consul/discovery-chain/resolver-card/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"15kmIv+F",block:'[[[1,"\\n"],[10,0],[14,0,"resolver-card"],[12],[1,"\\n "],[11,"header"],[17,1],[16,"onclick",[28,[37,0],[[30,2]],null]],[16,1,[28,[37,1],["resolver:",[30,3,["ID"]]],null]],[12],[1,"\\n "],[10,3],[14,3,""],[12],[1,"\\n "],[10,"h3"],[12],[1,[30,3,["Name"]]],[13],[1,"\\n"],[41,[30,3,["Failover"]],[[[1," "],[10,"dl"],[14,0,"failover"],[12],[1,"\\n "],[11,"dt"],[4,[38,3],[[28,[37,1],[[30,3,["Failover","Type"]]," failover"],null]],null],[12],[1,"\\n "],[1,[28,[35,1],[[30,3,["Failover","Type"]]," failover"],null]],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[10,"ol"],[12],[1,"\\n"],[42,[28,[37,5],[[28,[37,5],[[30,3,["Failover","Targets"]]],null]],null],null,[[[1," "],[10,"li"],[12],[10,1],[12],[1,[30,4]],[13],[13],[1,"\\n"]],[4]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n"],[41,[28,[37,6],[[30,3,["Children","length"]],0],null],[[[1," "],[10,"ul"],[12],[1,"\\n"],[42,[28,[37,5],[[28,[37,5],[[30,3,["Children"]]],null]],null],null,[[[1," "],[11,"li"],[16,"onclick",[28,[37,0],[[30,2]],null]],[16,1,[28,[37,1],["resolver:",[30,5,["ID"]]],null]],[4,[38,7],[[28,[37,8],[[28,[37,9],[[30,5],"rect"],null]],[["from"],[[30,6]]]]],null],[12],[1,"\\n "],[10,3],[14,3,""],[12],[1,"\\n"],[41,[30,5,["Redirect"]],[[[1," "],[10,"dl"],[14,0,"redirect"],[12],[1,"\\n "],[11,"dt"],[4,[38,3],[[28,[37,1],[[30,5,["Redirect"]]," redirect"],null]],null],[12],[1,"\\n "],[1,[30,5,["Redirect"]]],[1," redirect\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[30,5,["Name"]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"],[41,[30,5,["Failover"]],[[[1," "],[10,"dl"],[14,0,"failover"],[12],[1,"\\n "],[11,"dt"],[4,[38,3],[[28,[37,1],[[30,5,["Failover","Type"]]," failover"],null]],null],[12],[1,"\\n "],[1,[30,5,["Failover","Type"]]],[1," failover\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[10,"ol"],[12],[1,"\\n"],[42,[28,[37,5],[[28,[37,5],[[30,5,["Failover","Targets"]]],null]],null],null,[[[1," "],[10,"li"],[12],[1,"\\n "],[10,1],[12],[1,[30,7]],[13],[1,"\\n "],[13],[1,"\\n"]],[7]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null]],[]],[[[41,[30,5,["Failover"]],[[[1," "],[1,[30,5,["Name"]]],[1,"\\n "],[10,"dl"],[14,0,"failover"],[12],[1,"\\n "],[11,"dt"],[4,[38,3],[[28,[37,1],[[30,5,["Failover","Type"]]," failover"],null]],null],[12],[1,"\\n "],[1,[28,[35,1],[[30,5,["Failover","Type"]]," failover"],null]],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[10,"ol"],[12],[1,"\\n"],[42,[28,[37,5],[[28,[37,5],[[30,5,["Failover","Targets"]]],null]],null],null,[[[1," "],[10,"li"],[12],[1,"\\n "],[10,1],[12],[1,[30,8]],[13],[1,"\\n "],[13],[1,"\\n"]],[8]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],[[[1," "],[1,[30,5,["Name"]]],[1,"\\n "]],[]]]],[]]],[1," "],[13],[1,"\\n "],[13],[1,"\\n"]],[5]],null],[1," "],[13],[1,"\\n"]],[]],null],[13],[1,"\\n"]],["&attrs","@onclick","@item","item","child","@edges","target","target"],false,["optional","concat","if","tooltip","each","-track-array","gt","on-resize","dom-position","set"]]',moduleName:"consul-ui/components/consul/discovery-chain/resolver-card/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/discovery-chain/route-card/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@ember/object"],(function(e,t,n,l,r){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const i=(0,n.createTemplateFactory)({id:"gPMB5AI2",block:'[[[1,"\\n"],[11,3],[24,0,"route-card"],[16,"onclick",[30,1]],[16,1,[30,2,["ID"]]],[17,3],[12],[1,"\\n "],[10,"header"],[15,0,[52,[28,[37,1],[[30,0,["path","value"]],"/"],null],"short"]],[12],[1,"\\n"],[41,[28,[37,2],[[30,2,["Definition","Match","HTTP","Methods","length"]],0],null],[[[1," "],[10,"ul"],[14,0,"match-methods"],[12],[1,"\\n"],[42,[28,[37,4],[[28,[37,4],[[30,2,["Definition","Match","HTTP","Methods"]]],null]],null],null,[[[1," "],[10,"li"],[12],[1,[30,4]],[13],[1,"\\n"]],[4]],null],[1," "],[13],[1,"\\n"]],[]],null],[1," "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n "],[1,[30,0,["path","type"]]],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[30,0,["path","value"]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"],[41,[28,[37,2],[[30,2,["Definition","Match","HTTP","Header","length"]],0],null],[[[1," "],[10,"section"],[14,0,"match-headers"],[12],[1,"\\n "],[11,"header"],[4,[38,5],["Header"],null],[12],[1,"\\n "],[10,"h4"],[12],[1,"Headers"],[13],[1,"\\n "],[13],[1,"\\n "],[10,"dl"],[12],[1,"\\n"],[42,[28,[37,4],[[28,[37,4],[[30,2,["Definition","Match","HTTP","Header"]]],null]],null],null,[[[1," "],[10,"dt"],[12],[1,"\\n "],[1,[30,5,["Name"]]],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[28,[35,6],[[30,5]],null]],[1,"\\n "],[13],[1,"\\n"]],[5]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[28,[37,2],[[30,2,["Definition","Match","HTTP","QueryParam","length"]],0],null],[[[1," "],[10,"section"],[14,0,"match-queryparams"],[12],[1,"\\n "],[11,"header"],[4,[38,5],["Query Params"],null],[12],[1,"\\n "],[10,"h4"],[12],[1,"Query Params"],[13],[1,"\\n "],[13],[1,"\\n "],[10,"dl"],[12],[1,"\\n"],[42,[28,[37,4],[[28,[37,4],[[30,2,["Definition","Match","HTTP","QueryParam"]]],null]],null],null,[[[1," "],[10,"dt"],[12],[1,"\\n "],[1,[30,6,["Name"]]],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[28,[35,6],[[30,6]],null]],[1,"\\n "],[13],[1,"\\n"]],[6]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[13],[1,"\\n"]],["@onclick","@item","&attrs","item","item","item"],false,["if","eq","gt","each","-track-array","tooltip","route-match"]]',moduleName:"consul-ui/components/consul/discovery-chain/route-card/index.hbs",isStrictMode:!1}) +class o extends l.default{get path(){return Object.entries((0,r.get)(this.args.item,"Definition.Match.HTTP")||{}).reduce((function(e,t){let[n,l]=t +return n.toLowerCase().startsWith("path")?{type:n.replace("Path",""),value:l}:e}),{type:"Prefix",value:"/"})}}e.default=o,(0,t.setComponentTemplate)(i,o)})),define("consul-ui/components/consul/discovery-chain/splitter-card/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"JSAcFDJZ",block:'[[[1,"\\n"],[10,0],[12],[1,"\\n "],[11,3],[17,1],[16,1,[30,2,["ID"]]],[24,0,"splitter-card"],[16,"onclick",[28,[37,0],[[30,3]],null]],[12],[1,"\\n "],[10,"header"],[12],[1,"\\n "],[10,"h3"],[12],[1,[30,2,["Name"]]],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"],[13],[1,"\\n"]],["&attrs","@item","@onclick"],false,["optional"]]',moduleName:"consul-ui/components/consul/discovery-chain/splitter-card/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/discovery-chain/utils",["exports"],(function(e){function t(e,t){var n=Object.keys(e) +if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) +t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function n(e){for(var n=1;n0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0 +return Object.values(e).filter((e=>e.Type===t))},i=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"default",l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"default",r=arguments.length>4?arguments[4]:void 0 +return void 0===e[t]&&(e[t]={ID:`${t}.${n}.${l}.${r}`,Name:t,Children:[]}),e[t]},o=function(e,t){let n +const l=e.map((function(e){const[l,r]=[t,e].map((e=>e.split(".").reverse())),i=["Datacenter","Partition","Namespace","Service","Subset"] +return r.find((function(e,t){const r=e!==l[t] +return r&&(n=i[t]),r}))})) +return{Type:n,Targets:l}} +e.getAlternateServices=o +e.getSplitters=function(e){return r(e,"splitter").map((function(e){const t=e.Name.split(".") +return t.reverse(),t.shift(),t.shift(),t.reverse(),n(n({},e),{},{ID:`splitter:${e.Name}`,Name:t.join(".")})}))} +e.getRoutes=function(e,t){return r(e,"router").reduce((function(e,n){return e.concat(n.Routes.map((function(e,l){return a(e,n.Name,t)})))}),[])} +e.getResolvers=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"default",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"default",l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{} +const a={} +return Object.values(r).filter((e=>"resolver"===e.Type)).forEach((function(l){const r=l.Name.split(".") +let u +r.length>4&&(u=r.shift()),r.reverse(),r.shift(),r.shift(),r.shift(),r.reverse() +const s=r.join("."),c=i(a,s,n,t,e) +let d +if(void 0!==l.Resolver.Failover&&(d=o(l.Resolver.Failover.Targets,l.Name)),u){const e={Subset:!0,ID:l.Name,Name:u} +void 0!==d&&(e.Failover=d),c.Children.push(e)}else void 0!==d&&(c.Failover=d)})),Object.values(l).forEach((l=>{if(void 0!==r[`resolver:${l.ID}`]){const u=o([l.ID],`service.${n}.${t}.${e}`) +if("Service"!==u.Type){const s=i(a,l.Service,n,t,e),c={Redirect:u.Type,ID:l.ID,Name:l[u.Type]} +void 0!==r[`resolver:${l.ID}`].Resolver.Failover&&(c.Failover=o(r[`resolver:${l.ID}`].Resolver.Failover.Targets,l.ID)),s.Children.push(c)}}})),Object.values(a)} +const a=function(e,t,l){return n(n({},e),{},{Default:e.Default||void 0===e.Definition.Match,ID:`route:${t}-${l(e.Definition)}`})} +e.createRoute=a})),define("consul-ui/components/consul/exposed-path/list/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"vg28qIfG",block:'[[[1,"\\n"],[11,0],[24,0,"consul-exposed-path-list"],[17,1],[12],[1,"\\n "],[10,"ul"],[12],[1,"\\n"],[42,[28,[37,1],[[28,[37,1],[[30,2]],null]],null],null,[[[1," "],[10,"li"],[12],[1,"\\n "],[10,0],[14,0,"header"],[12],[1,"\\n"],[44,[[28,[37,3],[[30,4],":",[30,3,["ListenerPort"]],[30,3,["Path"]]],null]],[[[1," "],[10,2],[14,0,"combined-address"],[12],[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[30,5]],[1,"\\n "],[13],[1,"\\n "],[8,[39,4],null,[["@value","@name"],[[30,5],"Address"]],null],[1,"\\n "],[13],[1,"\\n"]],[5]]],[1," "],[13],[1,"\\n "],[10,0],[14,0,"detail"],[12],[1,"\\n"],[41,[30,3,["Protocol"]],[[[1," "],[10,"dl"],[14,0,"protocol"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n "],[8,[39,6],null,null,[["default"],[[[[1,"\\n Protocol\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[30,3,["Protocol"]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[30,3,["ListenerPort"]],[[[1," "],[10,"dl"],[14,0,"port"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n "],[8,[39,6],null,null,[["default"],[[[[1,"\\n Listener Port\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n listening on :"],[1,[30,3,["ListenerPort"]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[30,3,["LocalPathPort"]],[[[1," "],[10,"dl"],[14,0,"port"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n "],[8,[39,6],null,null,[["default"],[[[[1,"\\n Local Path Port\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n local port :"],[1,[30,3,["LocalPathPort"]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[30,3,["Path"]],[[[1," "],[10,"dl"],[14,0,"path"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n "],[8,[39,6],null,null,[["default"],[[[[1,"\\n Path\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[30,3,["Path"]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n"]],[3]],null],[1," "],[13],[1,"\\n"],[13],[1,"\\n"]],["&attrs","@items","path","@address","combinedAddress"],false,["each","-track-array","let","concat","consul-copy-button","if","tooltip"]]',moduleName:"consul-ui/components/consul/exposed-path/list/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/external-source/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"uG5lBIhe",block:'[[[1,"\\n"],[41,[30,1],[[[44,[[28,[37,2],[[30,1]],null]],[[[41,[28,[37,3],[[30,3],[28,[37,4],[[30,2],"consul-api-gateway"],null]],null],[[[1," "],[10,"dl"],[14,0,"tooltip-panel"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n "],[11,1],[24,0,"consul-external-source"],[17,4],[12],[1,"\\n "],[8,[39,5],[[24,0,"mr-1.5 w-4 h-4"]],[["@name"],[[28,[37,6],[[30,2]],null]]],null],[1,"\\n Registered via "],[1,[28,[35,7],[[28,[37,8],["common.brand.",[30,2]],null]],null]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,9],null,[["@position","@menu"],["left",false]],[["default"],[[[[1,"\\n "],[8,[39,10],null,[["@name"],["header"]],[["default"],[[[[1,"\\n API Gateways manage north-south traffic from external services to services in the Datacenter. For more information, read our documentation.\\n "]],[]]]]],[1,"\\n "],[8,[39,10],null,[["@name"],["menu"]],[["default"],[[[[1,"\\n "],[10,"li"],[14,"role","separator"],[12],[1,"\\n About "],[1,[28,[35,7],[[28,[37,8],["common.brand.",[30,2]],null]],null]],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[14,"role","none"],[14,0,"learn-link"],[12],[1,"\\n "],[10,3],[14,"tabindex","-1"],[14,"role","menuitem"],[15,6,[28,[37,8],[[28,[37,11],["CONSUL_DOCS_LEARN_URL"],null]],null]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[1,"\\n Learn guides\\n "],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],[[[41,[30,2],[[[1," "],[11,1],[24,0,"consul-external-source"],[17,4],[12],[1,"\\n "],[8,[39,5],[[24,0,"mr-1.5 h-4 w-4"]],[["@name","@color"],[[28,[37,6],[[30,2]],null],"var(--token-color-hashicorp-brand)"]],null],[1,"\\n"],[41,[30,5],[[[1," "],[1,[30,5]],[1,"\\n"]],[]],[[[1," Registered via "],[1,[28,[35,7],[[28,[37,8],["common.brand.",[30,2]],null]],null]],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n "]],[]],null]],[]]]],[2]]]],[]],null]],["@item","externalSource","@withInfo","&attrs","@label"],false,["if","let","service/external-source","and","eq","flight-icon","icon-mapping","t","concat","menu-panel","block-slot","env"]]',moduleName:"consul-ui/components/consul/external-source/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/hcp/home/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"72uvEJHV",block:'[[[1,"\\n"],[44,[[30,1],[28,[37,1],["CONSUL_HCP_URL"],null]],[[[41,[28,[37,3],[[30,2],[30,3]],null],[[[1," "],[8,[30,2,["BackLink"]],null,[["@text","@href","@isHrefExternal"],[[28,[37,4],["components.hashicorp-consul.side-nav.hcp"],null],[30,3],true]],null],[1,"\\n"]],[]],null]],[2,3]]]],["@list","SNL","hcpUrl"],false,["let","env","if","and","t"]]',moduleName:"consul-ui/components/consul/hcp/home/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})) +define("consul-ui/components/consul/health-check/list/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"1WWZf50M",block:'[[[1,"\\n"],[11,0],[24,0,"consul-health-check-list"],[17,1],[12],[1,"\\n "],[10,"ul"],[12],[1,"\\n"],[42,[28,[37,1],[[28,[37,1],[[30,2]],null]],null],null,[[[1," "],[10,"li"],[15,0,[28,[37,2],["health-check-output ",[30,3,["Status"]]],null]],[12],[1,"\\n "],[10,0],[12],[1,"\\n "],[10,"header"],[12],[1,"\\n "],[10,"h2"],[12],[1,[30,3,["Name"]]],[13],[1,"\\n "],[13],[1,"\\n "],[10,"dl"],[12],[1,"\\n"],[41,[28,[37,4],[[30,3,["Kind"]],"node"],null],[[[1," "],[10,"dt"],[12],[1,"NodeName"],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,3,["Node"]]],[13],[1,"\\n"]],[]],[[[1," "],[10,"dt"],[12],[1,"ServiceName"],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,3,["ServiceName"]]],[13],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"CheckID"],[13],[1,"\\n "],[10,"dd"],[12],[1,[28,[35,5],[[30,3,["CheckID"]],"-"],null]],[13],[1,"\\n "],[13],[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"Type"],[13],[1,"\\n "],[10,"dd"],[14,"data-health-check-type",""],[12],[1,"\\n "],[1,[30,3,["Type"]]],[1,"\\n"],[41,[30,3,["Exposed"]],[[[1," "],[11,"em"],[4,[38,6],["Expose.checks is set to true, so all registered HTTP and gRPC check paths are exposed through Envoy for the Consul agent."],null],[12],[1,"Exposed"],[13],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"Notes"],[13],[1,"\\n "],[10,"dd"],[12],[1,[28,[35,5],[[30,3,["Notes"]],"-"],null]],[13],[1,"\\n "],[13],[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"Output"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[10,"pre"],[12],[10,"code"],[12],[1,[30,3,["Output"]]],[13],[13],[1,"\\n "],[8,[39,7],null,[["@value","@name"],[[30,3,["Output"]],"output"]],null],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[3]],null],[1," "],[13],[1,"\\n"],[13],[1,"\\n"]],["&attrs","@items","item"],false,["each","-track-array","concat","if","eq","or","tooltip","consul-copy-button"]]',moduleName:"consul-ui/components/consul/health-check/list/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/health-check/search-bar/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"vj3AOTz9",block:'[[[1,"\\n"],[8,[39,0],[[24,0,"consul-healthcheck-search-bar"],[17,1]],[["@filter"],[[30,2]]],[["status","search","filter","sort"],[[[[1,"\\n\\n"],[44,[[28,[37,2],[[28,[37,3],["components.consul.health-check.search-bar.",[30,3,["status","key"]],".name"],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","key"]]],null],[28,[37,3],["common.consul.",[30,3,["status","key"]]],null]],null]]]],[28,[37,2],[[28,[37,3],["components.consul.health-check.search-bar.",[30,3,["status","key"]],".options.",[30,3,["status","value"]]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","value"]]],null],[28,[37,3],["common.consul.",[30,3,["status","value"]]],null]],null]]]]],[[[1," "],[8,[30,3,["RemoveFilter"]],[[16,"aria-label",[28,[37,2],["common.ui.remove"],[["item"],[[28,[37,3],[[30,4]," ",[30,5]],null]]]]]],null,[["default"],[[[[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,[30,4]],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,5]],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[4,5]]],[1,"\\n "]],[3]],[[[1,"\\n "],[8,[30,6,["Search"]],null,[["@onsearch","@value","@placeholder"],[[28,[37,5],[[30,0],[30,7]],null],[30,8],[28,[37,2],["common.search.search"],null]]],[["default"],[[[[1,"\\n"],[41,[30,2,["searchproperty"]],[[[1," "],[8,[30,6,["Select"]],[[24,0,"type-search-properties"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,2,["searchproperty","change"]]],null],true,true]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["common.search.searchproperty"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,9,["Optgroup"]],[30,9,["Option"]]],[[[42,[28,[37,9],[[28,[37,9],[[30,2,["searchproperty","default"]]],null]],null],null,[[[1," "],[8,[30,11],null,[["@value","@selected"],[[30,12],[28,[37,10],[[30,12],[30,2,["searchproperty","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["common.consul.",[28,[37,11],[[30,12]],null]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[12]],null]],[10,11]]],[1," "]],[]]]]],[1,"\\n "]],[9]]]]],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "]],[6]],[[[1,"\\n "],[8,[30,13,["Select"]],[[24,0,"type-status"]],[["@position","@onchange","@multiple"],["left",[28,[37,5],[[30,0],[30,2,["status","change"]]],null],true]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["common.consul.status"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,14,["Optgroup"]],[30,14,["Option"]]],[[[42,[28,[37,9],[[28,[37,9],[[28,[37,4],["passing","warning","critical","empty"],null]],null]],null],null,[[[1," "],[8,[30,16],[[16,0,[29,["value-",[30,17]]]]],[["@value","@selected"],[[30,17],[28,[37,10],[[30,17],[30,2,["status","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["common.consul.",[30,17]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,17]],null]],null]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[17]],null]],[15,16]]],[1," "]],[]]]]],[1,"\\n "]],[14]]]]],[1,"\\n"],[41,[30,2,["kind"]],[[[1," "],[8,[30,13,["Select"]],[[24,0,"type-kind"]],[["@position","@onchange","@multiple"],["left",[28,[37,5],[[30,0],[30,2,["kind","change"]]],null],true]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["components.consul.health-check.search-bar.kind.name"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,18,["Optgroup"]],[30,18,["Option"]]],[[[42,[28,[37,9],[[28,[37,9],[[28,[37,4],["service","node"],null]],null]],null],null,[[[1," "],[8,[30,20],null,[["@value","@selected"],[[30,21],[28,[37,10],[[30,21],[30,2,["kind","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["components.consul.health-check.search-bar.kind.options.",[30,21]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,21]],null]],null]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[21]],null]],[19,20]]],[1," "]],[]]]]],[1,"\\n "]],[18]]]]],[1,"\\n"]],[]],null],[1," "],[8,[30,13,["Select"]],[[24,0,"type-check"]],[["@position","@onchange","@multiple"],["left",[28,[37,5],[[30,0],[30,2,["check","change"]]],null],true]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["components.consul.health-check.search-bar.check.name"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,22,["Optgroup"]],[30,22,["Option"]]],[[[42,[28,[37,9],[[28,[37,9],[[28,[37,4],["alias","docker","grpc","http","script","serf","tcp","ttl"],null]],null]],null],null,[[[1," "],[8,[30,24],null,[["@value","@selected"],[[30,25],[28,[37,10],[[30,25],[30,2,["check","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["components.consul.health-check.search-bar.check.options.",[30,25]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,25]],null]],null]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[25]],null]],[23,24]]],[1," "]],[]]]]],[1,"\\n "]],[22]]]]],[1,"\\n "]],[13]],[[[1,"\\n "],[8,[30,26,["Select"]],[[24,0,"type-sort"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,27,["change"]]],null],false,true]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n"],[44,[[28,[37,12],[[28,[37,4],[[28,[37,4],["Name:asc",[28,[37,2],["common.sort.alpha.asc"],null]],null],[28,[37,4],["Name:desc",[28,[37,2],["common.sort.alpha.desc"],null]],null],[28,[37,4],["Status:asc",[28,[37,2],["common.sort.status.asc"],null]],null],[28,[37,4],["Status:desc",[28,[37,2],["common.sort.status.desc"],null]],null],[28,[37,4],["Kind:asc",[28,[37,2],["components.consul.health-check.search-bar.sort.kind.asc"],null]],null],[28,[37,4],["Kind:desc",[28,[37,2],["components.consul.health-check.search-bar.sort.kind.desc"],null]],null]],null]],null]],[[[1," "],[1,[28,[35,13],[[30,29],[30,27,["value"]]],null]],[1,"\\n"]],[29]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,28,["Optgroup"]],[30,28,["Option"]]],[[[1," "],[8,[30,30],null,[["@label"],[[28,[37,2],["common.consul.status"],null]]],[["default"],[[[[1,"\\n "],[8,[30,31],null,[["@value","@selected"],["Status:asc",[28,[37,14],["Status:asc",[30,27,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.status.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,31],null,[["@value","@selected"],["Status:desc",[28,[37,14],["Status:desc",[30,27,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.status.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,30],null,[["@label"],[[28,[37,2],["components.consul.health-check.search-bar.sort.name.name"],null]]],[["default"],[[[[1,"\\n "],[8,[30,31],null,[["@value","@selected"],["Name:asc",[28,[37,14],["Name:asc",[30,27,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,31],null,[["@value","@selected"],["Name:desc",[28,[37,14],["Name:desc",[30,27,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,30],null,[["@label"],[[28,[37,2],["components.consul.health-check.search-bar.sort.kind.name"],null]]],[["default"],[[[[1,"\\n "],[8,[30,31],null,[["@value","@selected"],["Kind:asc",[28,[37,14],["Kind:asc",[30,27]],null]]],[["default"],[[[[1,"Service to Node"]],[]]]]],[1,"\\n "],[8,[30,31],null,[["@value","@selected"],["Kind:desc",[28,[37,14],["Kind:desc",[30,27]],null]]],[["default"],[[[[1,"Node to Service"]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[30,31]]],[1," "]],[]]]]],[1,"\\n "]],[28]]]]],[1,"\\n "]],[26]]]]]],["&attrs","@filter","search","key","value","search","@onsearch","@search","components","Optgroup","Option","prop","search","components","Optgroup","Option","state","components","Optgroup","Option","item","components","Optgroup","Option","item","search","@sort","components","selectable","Optgroup","Option"],false,["search-bar","let","t","concat","array","action","if","block-slot","each","-track-array","includes","lowercase","from-entries","get","eq"]]',moduleName:"consul-ui/components/consul/health-check/search-bar/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/instance-checks/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"AKBTKkHH",block:'[[[1,"\\n"],[44,[[28,[37,1],["Status",[28,[37,2],[[30,1],[28,[37,3],null,null]],null]],null]],[[[44,[[28,[37,2],[[52,[28,[37,5],[[30,2,["critical","length"]],0],null],[30,2,["critical"]]],[52,[28,[37,5],[[30,2,["warning","length"]],0],null],[30,2,["warning"]]],[52,[28,[37,5],[[30,2,["passing","length"]],0],null],[30,2,["passing"]]],[28,[37,3],null,null]],null]],[[[44,[[30,3,["firstObject","Status"]]],[[[1," "],[11,"dl"],[16,0,[28,[37,6],["consul-instance-checks",[28,[37,3],["empty",[28,[37,7],[[30,3,["length"]],0],null]],null],[28,[37,3],[[30,4],[28,[37,8],[[30,3,["length"]],0],null]],null]],null]],[17,5],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n "],[8,[39,9],null,null,[["default"],[[[[1,"\\n "],[1,[28,[35,10],[[30,6]],null]],[1," Checks\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n"],[44,[[28,[37,2],[[52,[28,[37,7],[[30,4],"critical"],null],"failing"],[52,[28,[37,7],[[30,4],"warning"],null],"with a warning"],[30,4]],null]],[[[1," "],[10,"dd"],[12],[1,"\\n "],[1,[28,[35,2],[[52,[28,[37,7],[[30,3,["length"]],0],null],[28,[37,11],["No ",[30,6]," checks"],null]],[52,[28,[37,7],[[30,3,["length"]],[30,1,["length"]]],null],[28,[37,11],["All ",[30,6]," checks ",[30,7]],null]],[28,[37,11],[[30,3,["length"]],"/",[30,1,["length"]]," ",[30,6]," checks ",[30,7]],null]],null]],[1,"\\n "],[13],[1,"\\n"]],[7]]],[1," "],[13],[1,"\\n"]],[4]]]],[3]]]],[2]]]],["@items","grouped","checks","status","&attrs","@type","humanized"],false,["let","group-by","or","array","if","gt","class-map","eq","not-eq","tooltip","capitalize","concat"]]',moduleName:"consul-ui/components/consul/instance-checks/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/intention/form/fieldsets/index",["exports","@ember/component","@ember/template-factory"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const l=(0,n.createTemplateFactory)({id:"8Nb+ToX7",block:'[[[1,"\\n"],[11,0],[17,1],[24,0,"consul-intention-fieldsets"],[12],[1,"\\n "],[10,"fieldset"],[15,"disabled",[36,0]],[12],[1,"\\n "],[10,0],[14,"role","group"],[12],[1,"\\n "],[10,"fieldset"],[12],[1,"\\n "],[10,"h2"],[12],[1,"Source"],[13],[1,"\\n "],[10,"label"],[15,0,[29,["type-select",[52,[33,2,["error","SourceName"]]," has-error"]]]],[12],[1,"\\n "],[10,1],[12],[1,"Source Service"],[13],[1,"\\n "],[8,[39,3],null,[["@disabled","@options","@searchField","@selected","@searchPlaceholder","@buildSuggestion","@showCreateWhen","@onCreate","@onChange"],[[28,[37,4],[[33,5]],null],[99,6,["@options"]],"Name",[99,7,["@selected"]],"Type service name",[28,[37,8],[[30,0],"createNewLabel","Use a Consul Service called \'{{term}}\'"],null],[28,[37,8],[[30,0],"isUnique",[33,6]],null],[28,[37,8],[[30,0],[33,9],"SourceName"],null],[28,[37,8],[[30,0],[33,9],"SourceName"],null]]],[["default"],[[[[1,"\\n"],[41,[28,[37,10],[[30,2,["Name"]],"*"],null],[[[1," * (All Services)\\n"]],[]],[[[1," "],[1,[30,2,["Name"]]],[1,"\\n"]],[]]],[1," "]],[2]]]]],[1,"\\n"],[41,[33,5],[[[1," "],[10,"em"],[12],[1,"Search for an existing service, or enter any Service name."],[13],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n"],[41,[28,[37,11],["choose nspaces"],null],[[[1," "],[10,"label"],[15,0,[29,["type-select",[52,[33,2,["error","SourceNS"]]," has-error"]]]],[12],[1,"\\n "],[10,1],[12],[1,"Source Namespace"],[13],[1,"\\n "],[8,[39,3],null,[["@disabled","@options","@selected","@searchPlaceholder","@buildSuggestion","@showCreateWhen","@onCreate","@onChange"],[[28,[37,4],[[33,5]],null],[99,12,["@options"]],[99,13,["@selected"]],"Type namespace name",[28,[37,8],[[30,0],"createNewLabel","Use a Consul Namespace called \'{{term}}\'"],null],[28,[37,8],[[30,0],"isUnique",[33,12]],null],[28,[37,8],[[30,0],[33,9],"SourceNS"],null],[28,[37,8],[[30,0],[33,9],"SourceNS"],null]]],[["default"],[[[[1,"\\n"],[41,[28,[37,10],[[30,3,["Name"]],"*"],null],[[[1," * (All Namespaces)\\n"]],[]],[[[1," "],[1,[30,3,["Name"]]],[1,"\\n"]],[]]],[1," "]],[3]]]]],[1,"\\n"],[41,[33,5],[[[1," "],[10,"em"],[12],[1,"Search for an existing namespace, or enter any Namespace name."],[13],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n"]],[]],null],[41,[28,[37,11],["choose partitions"],[["dc"],[[30,4]]]],[[[1," "],[10,"label"],[15,0,[29,["type-select",[52,[33,2,["error","SourcePartition"]]," has-error"]]]],[12],[1,"\\n "],[10,1],[12],[1,"Source Partition"],[13],[1,"\\n "],[8,[39,3],null,[["@disabled","@options","@selected","@searchPlaceholder","@buildSuggestion","@showCreateWhen","@onCreate","@onChange"],[[28,[37,4],[[33,5]],null],[99,14,["@options"]],[99,15,["@selected"]],"Type partition name",[28,[37,8],[[30,0],"createNewLabel","Use a Consul Partition called \'{{term}}\'"],null],[28,[37,8],[[30,0],"isUnique",[33,14]],null],[28,[37,8],[[30,0],[33,9],"SourcePartition"],null],[28,[37,8],[[30,0],[33,9],"SourcePartition"],null]]],[["default"],[[[[1,"\\n "],[1,[30,5,["Name"]]],[1,"\\n "]],[5]]]]],[1,"\\n"],[41,[33,5],[[[1," "],[10,"em"],[12],[1,"Search for an existing partition, or enter any Partition name."],[13],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n "],[10,"fieldset"],[12],[1,"\\n "],[10,"h2"],[12],[1,"Destination"],[13],[1,"\\n "],[10,"label"],[15,0,[29,["type-select",[52,[33,2,["error","DestinationName"]]," has-error"]]]],[12],[1,"\\n "],[10,1],[12],[1,"Destination Service"],[13],[1,"\\n "],[8,[39,3],null,[["@disabled","@options","@searchField","@selected","@searchPlaceholder","@buildSuggestion","@showCreateWhen","@onCreate","@onChange"],[[28,[37,4],[[33,5]],null],[99,6,["@options"]],"Name",[99,16,["@selected"]],"Type service name",[28,[37,8],[[30,0],"createNewLabel","Use a Consul Service called \'{{term}}\'"],null],[28,[37,8],[[30,0],"isUnique",[33,6]],null],[28,[37,8],[[30,0],[33,9],"DestinationName"],null],[28,[37,8],[[30,0],[33,9],"DestinationName"],null]]],[["default"],[[[[1,"\\n"],[41,[28,[37,10],[[30,6,["Name"]],"*"],null],[[[1," * (All Services)\\n"]],[]],[[[1," "],[1,[30,6,["Name"]]],[1,"\\n"]],[]]],[1," "]],[6]]]]],[1,"\\n"],[41,[33,5],[[[1," "],[10,"em"],[12],[1,"Search for an existing service, or enter any Service name."],[13],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n"],[41,[28,[37,11],["choose nspaces"],null],[[[1," "],[10,"label"],[15,0,[29,["type-select",[52,[33,2,["error","DestinationNS"]]," has-error"]]]],[12],[1,"\\n "],[10,1],[12],[1,"Destination Namespace"],[13],[1,"\\n "],[8,[39,3],null,[["@disabled","@options","@searchField","@selected","@searchPlaceholder","@buildSuggestion","@showCreateWhen","@onCreate","@onChange"],[[28,[37,4],[[33,5]],null],[99,12,["@options"]],"Name",[99,17,["@selected"]],"Type namespace name",[28,[37,8],[[30,0],"createNewLabel","Use a future Consul Namespace called \'{{term}}\'"],null],[28,[37,8],[[30,0],"isUnique",[33,12]],null],[28,[37,8],[[30,0],[33,9],"DestinationNS"],null],[28,[37,8],[[30,0],[33,9],"DestinationNS"],null]]],[["default"],[[[[1,"\\n"],[41,[28,[37,10],[[30,7,["Name"]],"*"],null],[[[1," * (All Namespaces)\\n"]],[]],[[[1," "],[1,[30,7,["Name"]]],[1,"\\n"]],[]]],[1," "]],[7]]]]],[1,"\\n"],[41,[33,5],[[[1," "],[10,"em"],[12],[1,"For the destination, you may choose any namespace for which you have access."],[13],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n"]],[]],null],[41,[28,[37,11],["choose partitions"],[["dc"],[[30,4]]]],[[[1," "],[10,"label"],[15,0,[29,["type-select",[52,[33,2,["error","DestinationPartition"]]," has-error"]]]],[12],[1,"\\n "],[10,1],[12],[1,"Destination Partition"],[13],[1,"\\n "],[8,[39,3],null,[["@disabled","@options","@searchField","@selected","@searchPlaceholder","@buildSuggestion","@showCreateWhen","@onCreate","@onChange"],[[28,[37,4],[[33,5]],null],[99,14,["@options"]],"Name",[99,18,["@selected"]],"Type partition name",[28,[37,8],[[30,0],"createNewLabel","Use a future Consul Partition called \'{{term}}\'"],null],[28,[37,8],[[30,0],"isUnique",[33,14]],null],[28,[37,8],[[30,0],[33,9],"DestinationPartition"],null],[28,[37,8],[[30,0],[33,9],"DestinationPartition"],null]]],[["default"],[[[[1,"\\n "],[1,[30,8,["Name"]]],[1,"\\n "]],[8]]]]],[1,"\\n"],[41,[33,5],[[[1," "],[10,"em"],[12],[1,"For the destination, you may choose any partition for which you have access."],[13],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n "],[10,"fieldset"],[12],[1,"\\n "],[10,"label"],[15,0,[29,["type-text",[52,[33,2,["error","Description"]]," has-error"]]]],[12],[1,"\\n "],[10,1],[12],[1,"Description (Optional)"],[13],[1,"\\n "],[10,"input"],[14,3,"Description"],[15,2,[33,2,["Description"]]],[14,"placeholder","Description (Optional)"],[15,"onchange",[28,[37,8],[[30,0],[33,9]],null]],[14,4,"text"],[12],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[10,0],[12],[1,"\\n "],[10,1],[14,0,"label"],[12],[1,"Should this source connect to the destination?"],[13],[1,"\\n "],[10,0],[14,"role","radiogroup"],[15,0,[52,[33,2,["error","Action"]]," has-error"]],[12],[1,"\\n"],[42,[28,[37,20],[[28,[37,20],[[28,[37,21],[[28,[37,22],null,[["intent","header","body"],["allow","Allow","The source service will be allowed to connect to the destination."]]],[28,[37,22],null,[["intent","header","body"],["deny","Deny","The source service will not be allowed to connect to the destination."]]],[28,[37,22],null,[["intent","header","body"],["","Application Aware","The source service may or may not connect to the destination service via unique permissions based on Layer 7 criteria: path, header, or method."]]]],null]],null]],null],null,[[[1," "],[8,[39,23],[[16,0,[28,[37,24],["value-",[30,9,["intent"]]],null]]],[["@value","@checked","@onchange","@name"],[[30,9,["intent"]],[52,[28,[37,10],[[28,[37,25],[[33,2,["Action"]],""],null],[30,9,["intent"]]],null],"checked"],[28,[37,8],[[30,0],[33,9]],null],"Action"]],[["default"],[[[[1,"\\n "],[10,"header"],[12],[1,"\\n "],[1,[30,9,["header"]]],[1,"\\n "],[13],[1,"\\n "],[10,2],[12],[1,"\\n "],[1,[30,9,["body"]]],[1,"\\n "],[13],[1,"\\n "]],[10]]]]],[1,"\\n"]],[9]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"],[41,[28,[37,10],[[28,[37,25],[[33,2,["Action"]],""],null],""],null],[[[1," "],[10,"fieldset"],[14,0,"permissions"],[12],[1,"\\n "],[8,[39,26],[[4,[38,27],["click",[28,[37,8],[[30,0],[30,0,["openModal"]]],null]],null]],[["@text","@size","@color","@icon"],["Add permission","small","tertiary","plus"]],null],[1,"\\n "],[10,"h2"],[12],[1,"Permissions"],[13],[1,"\\n"],[41,[28,[37,28],[[33,2,["Permissions","length"]],0],null],[[[1," "],[8,[39,29],null,null,null],[1,"\\n "],[8,[39,30],null,[["@items","@onclick","@ondelete"],[[33,2,["Permissions"]],[28,[37,31],[[28,[37,8],[[30,0],[28,[37,32],[[33,33]],null]],null],[28,[37,8],[[30,0],[30,0,["openModal"]]],null]],null],[28,[37,8],[[30,0],"delete","Permissions",[33,2]],null]]],null],[1,"\\n"]],[]],[[[1," "],[8,[39,34],null,null,[["default"],[[[[1,"\\n "],[8,[39,35],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h3"],[12],[1,"\\n No permissions yet\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,35],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n Permissions intercept an Intention\'s traffic using Layer 7 criteria, such as path prefixes and http headers.\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,35],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,36],null,[["@text","@href","@icon","@iconPosition","@size"],["Documentation",[29,[[28,[37,37],["CONSUL_DOCS_URL"],null],"/commands/intention"]],"docs-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,36],null,[["@text","@href","@icon","@iconPosition","@size"],["Read the guide",[29,[[28,[37,37],["CONSUL_DOCS_LEARN_URL"],null],"/consul/getting-started/connect"]],"learn-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n"]],[]],null],[1,"\\n "],[8,[39,38],[[24,0,"consul-intention-permission-modal"]],[["@onclose","@aria"],[[28,[37,8],[[30,0],[28,[37,32],[[33,33]],null],[27]],null],[28,[37,22],null,[["label"],["Edit Permission"]]]]],[["default"],[[[[1,"\\n "],[8,[39,39],null,[["@target","@name","@value"],[[30,0],"modal",[30,11]]],null],[1,"\\n "],[8,[39,35],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h3"],[12],[1,"Edit Permission"],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,35],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[8,[39,40],null,[["@item","@onsubmit"],[[99,33,["@item"]],[28,[37,8],[[30,0],"add","Permissions",[33,2]],null]]],[["default"],[[[[1,"\\n "],[8,[39,39],null,[["@target","@name","@value"],[[30,0],"permissionForm",[30,12]]],null],[1,"\\n "]],[12]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,35],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[8,[39,41],null,null,[["default"],[[[[1,"\\n "],[8,[39,26],[[16,"disabled",[52,[28,[37,4],[[30,0,["permissionForm","isDirty"]]],null],"disabled"]],[16,"onclick",[28,[37,31],[[28,[37,8],[[30,0],[30,0,["permissionForm","submit"]]],null],[28,[37,8],[[30,0],[30,11,["close"]]],null]],null]]],[["@text","@color"],["Save","primary"]],null],[1,"\\n "],[8,[39,26],[[16,"onclick",[28,[37,31],[[28,[37,8],[[30,0],[30,0,["permissionForm","reset"]]],null],[28,[37,8],[[30,0],[30,11,["close"]]],null]],null]]],[["@text","@color"],["Cancel","secondary"]],null],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[11]]]]],[1,"\\n\\n"],[13]],["&attrs","service","nspace","@dc","partition","service","nspace","partition","_action","radio","modal","permissionForm"],false,["disabled","if","item","power-select-with-create","not","create","services","SourceName","action","onchange","eq","can","nspaces","SourceNS","partitions","SourcePartition","DestinationName","DestinationNS","DestinationPartition","each","-track-array","array","hash","radio-card","concat","or","hds/button","on","gt","consul/intention/notice/permissions","consul/intention/permission/list","queue","mut","permission","empty-state","block-slot","hds/link/standalone","env","modal-dialog","ref","consul/intention/permission/form","hds/button-set"]]',moduleName:"consul-ui/components/consul/intention/form/fieldsets/index.hbs",isStrictMode:!1}) +var r=(0,t.setComponentTemplate)(l,t.default.extend({tagName:"",shouldShowPermissionForm:!1,openModal(){var e +null===(e=this.modal)||void 0===e||e.open()},actions:{createNewLabel:function(e,t){return e.replace(/{{term}}/g,t)},isUnique:function(e,t){return!e.findBy("Name",t)},add:function(e,t,n){(t.get(e)||[]).includes(n)||(t.pushObject(e,n),t.validate())},delete:function(e,t,n){(t.get(e)||[]).includes(n)&&(t.removeObject(e,n),t.validate())}}})) +e.default=r})),define("consul-ui/components/consul/intention/form/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@ember/service","@ember/object","@glimmer/tracking"],(function(e,t,n,l,r,i,o){var a,u,s,c,d,p,f,m,h,b,y,v,g +function O(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function P(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function w(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const x=(0,n.createTemplateFactory)({id:"f3I3843H",block:'[[[1,"\\n"],[11,0],[24,0,"consul-intention"],[17,1],[12],[1,"\\n"],[8,[39,0],null,[["@type","@dc","@nspace","@partition","@autofill","@item","@src","@onchange","@onsubmit"],["intention",[30,2,["Name"]],[30,3],[30,4],[30,5],[30,6],[30,7],[28,[37,1],[[30,0],[30,0,["change"]]],null],[28,[37,1],[[30,0],[30,0,["onsubmit"]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,2],null,[["@name"],["error"]],[["default"],[[[[1,"\\n"],[41,[28,[37,4],[[30,8,["error","detail"]],"duplicate intention found:"],null],[[[1," "],[8,[39,5],[[4,[38,6],null,[["after"],[[28,[37,1],[[30,0],[30,9]],null]]]]],[["@color"],["critical"]],[["default"],[[[[1,"\\n "],[8,[30,10,["Title"]],null,null,[["default"],[[[[1,"Intention exists!"]],[]]]]],[1,"\\n "],[8,[30,10,["Description"]],null,null,[["default"],[[[[1,"\\n An intention already exists for this Source-Destination pair. Please enter a different combination of Services, or search the intentions to edit an existing intention.\\n "]],[]]]]],[1,"\\n "]],[10]]]]],[1,"\\n"]],[]],[[[1," "],[8,[39,5],[[4,[38,6],null,[["after"],[[28,[37,1],[[30,0],[30,9]],null]]]]],[["@color"],["critical"]],[["default"],[[[[1,"\\n "],[8,[30,11,["Title"]],null,null,[["default"],[[[[1,"Error!"]],[]]]]],[1,"\\n "],[8,[30,11,["Description"]],null,null,[["default"],[[[[1,"\\n There was an error saving your intention.\\n"],[41,[28,[37,7],[[30,8,["error","status"]],[30,8,["error","detail"]]],null],[[[1," "],[10,"br"],[12],[13],[1,[30,8,["error","status"]]],[1,": "],[1,[30,8,["error","detail"]]],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "]],[11]]]]],[1,"\\n"]],[]]],[1," "]],[9]]]]],[1,"\\n\\n "],[8,[39,2],null,[["@name"],["form"]],[["default"],[[[[1,"\\n"],[44,[[30,8,["data"]],[28,[37,9],[[28,[37,10],["write intention"],[["item"],[[30,8,["data"]]]]]],null]],[[[41,[28,[37,9],[[30,13]],null],[[[1,"\\n"],[44,[[28,[37,11],[[30,12],"Action"],null]],[[[1," "],[8,[39,12],[[24,0,"consul-intention-action-warn-modal warning"]],[["@aria"],[[28,[37,13],null,[["label"],[[28,[37,14],["Set intention to ",[30,14]],null]]]]]],[["default"],[[[[1,"\\n "],[8,[39,15],null,[["@target","@name","@value"],[[30,0],"modal",[30,15]]],null],[1,"\\n "],[8,[39,2],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"Set intention to "],[1,[30,14]],[1,"?"],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,2],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n When you change this Intention to "],[1,[30,14]],[1,", you will remove all the Layer 7 policy permissions currently saved to this Intention. Are you sure you want to set it to "],[1,[30,14]],[1,"?\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,2],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[8,[39,16],null,null,[["default"],[[[[1,"\\n "],[8,[39,17],[[4,[38,19],["click",[30,8,["submit"]]],null]],[["@text","@color"],[[29,["Set to ",[28,[37,18],[[30,14]],null]]],"critical"]],null],[1,"\\n "],[8,[39,17],[[16,"onclick",[30,16]]],[["@text","@color"],["No, Cancel","secondary"]],null],[1,"\\n "]],[]]]]],[1,"\\n "]],[16]]]]],[1,"\\n "]],[15]]]]],[1,"\\n"]],[14]]],[1,"\\n "],[8,[39,20],null,[["@src","@onchange"],[[28,[37,21],["/${partition}/*/${dc}/services",[28,[37,13],null,[["partition","dc"],[[30,4],[30,2,["Name"]]]]]],null],[28,[37,1],[[30,0],[30,0,["createServices"]],[30,12]],null]]],null],[1,"\\n\\n"],[41,[28,[37,10],["use nspaces"],null],[[[1," "],[8,[39,20],null,[["@src","@onchange"],[[28,[37,21],["/${partition}/*/${dc}/namespaces",[28,[37,13],null,[["partition","dc"],[[30,4],[30,2,["Name"]]]]]],null],[28,[37,1],[[30,0],[30,0,["createNspaces"]],[30,12]],null]]],null],[1,"\\n"]],[]],null],[1,"\\n"],[41,[28,[37,10],["use partitions"],null],[[[1," "],[8,[39,20],null,[["@src","@onchange"],[[28,[37,21],["/*/*/${dc}/partitions",[28,[37,13],null,[["dc"],[[30,2,["Name"]]]]]],null],[28,[37,1],[[30,0],[30,0,["createPartitions"]],[30,12]],null]]],null],[1,"\\n"]],[]],null],[1,"\\n"],[41,[30,8,["isCreate"]],[[[41,[28,[37,7],[[28,[37,10],["use partitions"],null],[28,[37,9],[[28,[37,10],["choose partitions"],[["dc"],[[30,2]]]]],null]],null],[[[1," "],[8,[39,22],[[24,0,"mb-3 mt-2"]],[["@type"],["inline"]],[["default"],[[[[1,"\\n "],[8,[30,17,["Title"]],null,null,[["default"],[[[[1,"Cross-partition communication not supported"]],[]]]]],[1,"\\n "],[8,[30,17,["Description"]],null,null,[["default"],[[[[1,"Cross-partition communication is not supported outside of the primary datacenter. You will only be able to select namespaces for source and destination services."]],[]]]]],[1,"\\n "]],[17]]]]],[1,"\\n"]],[]],null],[41,[30,0,["isManagedByCRDs"]],[[[1," "],[8,[39,23],null,[["@type"],["warning"]],null],[1,"\\n"]],[]],null]],[]],null],[1," "],[11,"form"],[4,[38,19],["submit",[28,[37,24],[[30,0,["submit"]],[30,12],[30,8,["submit"]]],null]],null],[12],[1,"\\n "],[8,[39,25],null,[["@nspaces","@dc","@partitions","@services","@SourceName","@SourceNS","@SourcePartition","@DestinationName","@DestinationNS","@DestinationPartition","@item","@disabled","@create","@onchange"],[[30,0,["nspaces"]],[30,2],[30,0,["partitions"]],[30,0,["services"]],[30,0,["SourceName"]],[30,0,["SourceNS"]],[30,0,["SourcePartition"]],[30,0,["DestinationName"]],[30,0,["DestinationNS"]],[30,0,["DestinationPartition"]],[30,12],[30,8,["disabled"]],[30,8,["isCreate"]],[30,8,["change"]]]],null],[1,"\\n "],[10,0],[12],[1,"\\n "],[8,[39,16],null,null,[["default"],[[[[1,"\\n "],[8,[39,17],[[16,"disabled",[28,[37,26],[[30,12,["isInvalid"]],[30,8,["disabled"]]],null]],[24,4,"submit"]],[["@text"],["Save"]],null],[1,"\\n "],[8,[39,17],[[16,"disabled",[30,8,["disabled"]]],[24,4,"reset"],[4,[38,19],["click",[28,[37,24],[[30,0,["oncancel"]],[30,12]],null]],null]],[["@text","@color"],["Cancel","secondary"]],null],[1,"\\n"],[41,[28,[37,9],[[30,8,["isCreate"]]],null],[[[41,[28,[37,27],[[30,12,["ID"]],"anonymous"],null],[[[1," "],[8,[39,28],null,[["@message"],["Are you sure you want to delete this Intention?"]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@name"],["action"]],[["default"],[[[[1,"\\n "],[8,[39,17],[[16,"disabled",[30,8,["disabled"]]],[4,[38,19],["click",[28,[37,24],[[30,18],[30,8,["delete"]]],null]],null]],[["@text","@color"],["Delete","critical"]],null],[1,"\\n "]],[18]]]]],[1,"\\n "],[8,[39,2],null,[["@name"],["dialog"]],[["default"],[[[[1,"\\n "],[8,[39,29],null,[["@message","@execute","@cancel"],[[30,21],[30,19],[30,20]]],null],[1,"\\n "]],[19,20,21]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null]],[]],null],[1," "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],[[[1,"\\n"],[41,[30,12,["IsManagedByCRD"]],[[[1," "],[8,[39,22],[[24,0,"mb-3 mt-2"]],[["@type"],["inline"]],[["default"],[[[[1,"\\n "],[8,[30,22,["Title"]],null,null,[["default"],[[[[1,"Intention Custom Resource"]],[]]]]],[1,"\\n "],[8,[30,22,["Description"]],null,null,[["default"],[[[[1,"This Intention is view only because it is managed through an Intention Custom Resource in your Kubernetes cluster."]],[]]]]],[1,"\\n "],[8,[30,22,["Link::Standalone"]],null,[["@text","@href","@icon","@iconPosition"],["Learn more about CRDs",[29,[[28,[37,30],["CONSUL_DOCS_URL"],null],"/k8s/crds"]],"docs-link","trailing"]],null],[1,"\\n "]],[22]]]]],[1,"\\n"]],[]],null],[1,"\\n "],[8,[39,31],null,[["@item"],[[30,12]]],null],[1,"\\n"]],[]]]],[12,13]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[8]]]]],[1,"\\n"],[13],[1,"\\n"]],["&attrs","@dc","@nspace","@partition","@autofill","@item","@src","api","after","T","T","item","readonly","newAction","modal","close","A","confirm","execute","cancel","message","A"],false,["data-form","action","block-slot","if","string-starts-with","hds/toast","notification","and","let","not","can","changeset-get","modal-dialog","hash","concat","ref","hds/button-set","hds/button","capitalize","on","data-source","uri","hds/alert","consul/intention/notice/custom-resource","fn","consul/intention/form/fieldsets","or","not-eq","confirmation-dialog","delete-confirmation","env","consul/intention/view"]]',moduleName:"consul-ui/components/consul/intention/form/index.hbs",isStrictMode:!1}) +let j=(a=(0,r.inject)("repository/intention"),u=class extends l.default{constructor(e,t){super(...arguments),O(this,"services",s,this),O(this,"SourceName",c,this),O(this,"DestinationName",d,this),O(this,"nspaces",p,this),O(this,"SourceNS",f,this),O(this,"DestinationNS",m,this),O(this,"partitions",h,this),O(this,"SourcePartition",b,this),O(this,"DestinationPartition",y,this),O(this,"isManagedByCRDs",v,this),P(this,"modal",null),O(this,"repo",g,this),this.updateCRDManagement()}ondelete(){this.args.ondelete?this.args.ondelete(...arguments):this.onsubmit(...arguments)}oncancel(){this.args.oncancel?this.args.oncancel(...arguments):this.onsubmit(...arguments)}onsubmit(){this.args.onsubmit&&this.args.onsubmit(...arguments)}updateCRDManagement(){this.isManagedByCRDs=this.repo.isManagedByCRDs()}submit(e,t,n){n.preventDefault(),void 0!==e.change.Action&&void 0===e.data.Action?this.modal.open():t()}createServices(e,t){let n=t.data.uniqBy("Name").toArray().filter((e=>!["connect-proxy","mesh-gateway","terminating-gateway"].includes(e.Kind))).sort(((e,t)=>e.Name.localeCompare(t.Name))) +n=[{Name:"*"}].concat(n) +let l=n.findBy("Name",e.SourceName) +l||(l={Name:e.SourceName},n=[l].concat(n)) +let r=n.findBy("Name",e.DestinationName) +r||(r={Name:e.DestinationName},n=[r].concat(n)),this.services=n,this.SourceName=l,this.DestinationName=r}createNspaces(e,t){let n=t.data.toArray().sort(((e,t)=>e.Name.localeCompare(t.Name))) +n=[{Name:"*"}].concat(n) +let l=n.findBy("Name",e.SourceNS) +l||(l={Name:e.SourceNS},n=[l].concat(n)) +let r=n.findBy("Name",e.DestinationNS) +r||(r={Name:e.DestinationNS},n=[r].concat(n)),this.nspaces=n,this.SourceNS=l,this.DestinationNS=r}createPartitions(e,t){let n=t.data.toArray().sort(((e,t)=>e.Name.localeCompare(t.Name))),l=n.findBy("Name",e.SourcePartition) +l||(l={Name:e.SourcePartition},n=[l].concat(n)) +let r=n.findBy("Name",e.DestinationPartition) +r||(r={Name:e.DestinationPartition},n=[r].concat(n)),this.partitions=n,this.SourcePartition=l,this.DestinationPartition=r}change(e,t,n){const l=e.target +let r,i +switch(l.name){case"SourceName":case"DestinationName":case"SourceNS":case"DestinationNS":case"SourcePartition":case"DestinationPartition":switch(r=i=l.value,"string"!=typeof r&&(r=l.value.Name),l.value=r,l.name){case"SourceName":case"DestinationName":0===this.services.filterBy("Name",r).length&&(i={Name:r},this.services=[i].concat(this.services.toArray())) +break +case"SourceNS":case"DestinationNS":0===this.nspaces.filterBy("Name",r).length&&(i={Name:r},this.nspaces=[i].concat(this.nspaces.toArray())) +break +case"SourcePartition":case"DestinationPartition":0===this.partitions.filterBy("Name",r).length&&(i={Name:r},this.partitions=[i].concat(this.partitions.toArray()))}this[l.name]=i}t.handleEvent(e)}},s=w(u.prototype,"services",[o.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),c=w(u.prototype,"SourceName",[o.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),d=w(u.prototype,"DestinationName",[o.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p=w(u.prototype,"nspaces",[o.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f=w(u.prototype,"SourceNS",[o.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m=w(u.prototype,"DestinationNS",[o.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=w(u.prototype,"partitions",[o.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=w(u.prototype,"SourcePartition",[o.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),y=w(u.prototype,"DestinationPartition",[o.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),v=w(u.prototype,"isManagedByCRDs",[o.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),g=w(u.prototype,"repo",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),w(u.prototype,"ondelete",[i.action],Object.getOwnPropertyDescriptor(u.prototype,"ondelete"),u.prototype),w(u.prototype,"oncancel",[i.action],Object.getOwnPropertyDescriptor(u.prototype,"oncancel"),u.prototype),w(u.prototype,"onsubmit",[i.action],Object.getOwnPropertyDescriptor(u.prototype,"onsubmit"),u.prototype),w(u.prototype,"updateCRDManagement",[i.action],Object.getOwnPropertyDescriptor(u.prototype,"updateCRDManagement"),u.prototype),w(u.prototype,"submit",[i.action],Object.getOwnPropertyDescriptor(u.prototype,"submit"),u.prototype),w(u.prototype,"createServices",[i.action],Object.getOwnPropertyDescriptor(u.prototype,"createServices"),u.prototype),w(u.prototype,"createNspaces",[i.action],Object.getOwnPropertyDescriptor(u.prototype,"createNspaces"),u.prototype),w(u.prototype,"createPartitions",[i.action],Object.getOwnPropertyDescriptor(u.prototype,"createPartitions"),u.prototype),w(u.prototype,"change",[i.action],Object.getOwnPropertyDescriptor(u.prototype,"change"),u.prototype),u) +e.default=j,(0,t.setComponentTemplate)(x,j)})),define("consul-ui/components/consul/intention/list/check/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"A/kl6rVt",block:'[[[1,"\\n"],[44,[[28,[37,1],[[28,[37,2],[[28,[37,2],["allow","Allowed"],null],[28,[37,2],["deny","Denied"],null],[28,[37,2],["","Layer 7 Rules"],null]],null]],null]],[[[11,0],[16,0,[28,[37,3],["consul-intention-list-check ","notice ",[28,[37,4],[[30,2,["Action"]],"permissions"],null]],null]],[17,3],[12],[1,"\\n "],[10,"h3"],[12],[1,"\\n "],[1,[28,[35,5],[[30,1],[28,[37,4],[[30,2,["Action"]],""],null]],null]],[1,"\\n "],[13],[1,"\\n "],[10,2],[12],[1,"\\n"],[41,[28,[37,7],[[30,2,["Action"]],"allow"],null],[[[1," Yes, "],[1,[33,8,["SourceName"]]],[1," is allowed to connect to "],[1,[30,2,["DestinationName"]]],[1," due to the highest precedence intention below:\\n"]],[]],[[[41,[28,[37,7],[[30,2,["Action"]],"deny"],null],[[[1," No, "],[1,[30,2,["SourceName"]]],[1," is not allowed to connect to "],[1,[30,2,["DestinationName"]]],[1," due to the highest precedence intention below:\\n"]],[]],[[[1," "],[1,[30,2,["SourceName"]]],[1," may or may not be allowed to connect with "],[1,[30,2,["DestinationName"]]],[1," through its Layer 7 rules.\\n "]],[]]]],[]]],[1," "],[13],[1,"\\n"],[13],[1,"\\n"]],[1]]]],["titles","@item","&attrs"],false,["let","from-entries","array","concat","or","get","if","eq","item"]]',moduleName:"consul-ui/components/consul/intention/list/check/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/intention/list/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@ember/service","@ember/object","@glimmer/tracking"],(function(e,t,n,l,r,i,o){var a,u,s,c +function d(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function p(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const f=(0,n.createTemplateFactory)({id:"1D6EKD3D",block:'[[[1,"\\n"],[11,0],[24,0,"consul-intention-list"],[17,1],[4,[38,0],[[30,0,["updateCRDManagement"]],[30,2]],null],[12],[1,"\\n"],[18,4,[[28,[37,2],null,[["Table","CheckNotice","CustomResourceNotice"],[[50,"consul/intention/list/table",0,null,[["delete","items"],[[30,3],[30,0,["items"]]]]],[52,[30,0,["checkedItem"]],[50,"consul/intention/list/check",0,null,[["item"],[[30,0,["checkedItem"]]]]],""],[52,[30,0,["isManagedByCRDs"]],[50,"consul/intention/notice/custom-resource",0,null,null],""]]]]]],[1,"\\n"],[13]],["&attrs","@items","@delete","&default"],false,["did-update","yield","hash","component","if"]]',moduleName:"consul-ui/components/consul/intention/list/index.hbs",isStrictMode:!1}) +let m=(a=(0,r.inject)("repository/intention"),u=class extends l.default{constructor(e,t){super(...arguments),d(this,"repo",s,this),d(this,"isManagedByCRDs",c,this),this.updateCRDManagement(t.items)}get items(){return this.args.items||[]}get checkedItem(){return 1===this.items.length&&this.args.check&&this.items[0].SourceName===this.args.check?this.items[0]:null}updateCRDManagement(){this.isManagedByCRDs=this.repo.isManagedByCRDs()}},s=p(u.prototype,"repo",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),c=p(u.prototype,"isManagedByCRDs",[o.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p(u.prototype,"updateCRDManagement",[i.action],Object.getOwnPropertyDescriptor(u.prototype,"updateCRDManagement"),u.prototype),u) +e.default=m,(0,t.setComponentTemplate)(f,m)})),define("consul-ui/components/consul/intention/list/table/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"0tpkzdWh",block:'[[[1,"\\n"],[8,[39,0],[[24,0,"consul-intention-list-table"],[17,1]],[["@items","@rowHeight"],[[30,2],59]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"th"],[14,0,"source"],[12],[1,"Source"],[13],[1,"\\n "],[10,"th"],[14,0,"intent"],[12],[1," "],[13],[1,"\\n "],[10,"th"],[14,0,"destination"],[12],[1,"Destination"],[13],[1,"\\n "],[10,"th"],[14,0,"permissions"],[12],[1,"\\n Permissions\\n "],[10,1],[12],[1,"\\n "],[8,[39,2],null,null,[["default"],[[[[1,"Permissions intercept an Intention\'s traffic using Layer 7 criteria, such as path\\n prefixes and http headers."]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[10,"th"],[14,0,"meta"],[12],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["row"]],[["default"],[[[[1,"\\n "],[10,"td"],[14,0,"source"],[12],[1,"\\n "],[10,3],[15,6,[28,[37,3],[[28,[37,4],[[30,5],"dc.intentions.edit"],null],[30,3,["ID"]]],null]],[12],[1,"\\n"],[41,[28,[37,6],[[30,3,["SourceName"]],"*"],null],[[[1," All Services (*)\\n"]],[]],[[[1," "],[1,[30,3,["SourceName"]]],[1,"\\n"]],[]]],[1," "],[10,"em"],[14,0,"consul-intention-list-table__meta-info"],[12],[1,"\\n "],[8,[39,7],null,[["@item","@nspace","@partition"],[[28,[37,8],null,[["Namespace","Partition","PeerName"],[[30,3,["SourceNS"]],[30,3,["SourcePartition"]],[30,3,["SourcePeer"]]]]],"-","-"]],null],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[10,"td"],[15,0,[29,["intent intent-",[28,[37,9],[[30,3,["Action"]]],null]]]],[12],[1,"\\n "],[10,"strong"],[12],[1,[28,[35,10],[[28,[37,4],[[30,3,["Action"]],"App aware"],null]],null]],[13],[1,"\\n "],[13],[1,"\\n "],[10,"td"],[14,0,"destination"],[12],[1,"\\n "],[10,1],[12],[1,"\\n"],[41,[28,[37,6],[[30,3,["DestinationName"]],"*"],null],[[[1," All Services (*)\\n"]],[]],[[[1," "],[1,[30,3,["DestinationName"]]],[1,"\\n"]],[]]],[41,[28,[37,4],[[28,[37,11],["use nspaces"],null],[28,[37,11],["use partitions"],null]],null],[[[1," "],[10,"em"],[12],[1,"\\n "],[10,1],[15,0,[28,[37,12],["partition-",[28,[37,4],[[30,3,["DestinationPartition"]],"default"],null]],null]],[12],[1,[28,[35,4],[[30,3,["DestinationPartition"]],"default"],null]],[13],[1,"\\n /\\n "],[10,1],[15,0,[28,[37,12],["nspace-",[28,[37,4],[[30,3,["DestinationNS"]],"default"],null]],null]],[12],[1,[28,[35,4],[[30,3,["DestinationNS"]],"default"],null]],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n "],[10,"td"],[14,0,"permissions"],[12],[1,"\\n"],[41,[28,[37,13],[[30,3,["Permissions","length"]],0],null],[[[1," "],[10,1],[12],[1,[28,[35,14],[[30,3,["Permissions","length"]],"Permission"],null]],[13],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n "],[10,"td"],[14,0,"meta"],[12],[1,"\\n"],[41,[30,3,["IsManagedByCRD"]],[[[1," "],[8,[39,15],null,[["@item","@label"],[[30,3],"Managed by CRD"]],null],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[8,[39,16],null,[["@expanded","@onchange","@keyboardAccess"],[[52,[28,[37,6],[[30,8],[30,6]],null],true,false],[28,[37,17],[[30,0],[30,7],[30,6]],null],false]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["trigger"]],[["default"],[[[[1,"\\n More\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["menu"]],[["default"],[[[[1,"\\n"],[41,[28,[37,11],["write intention"],[["item"],[[30,3]]]],[[[1," "],[10,"li"],[14,"role","none"],[12],[1,"\\n "],[10,3],[14,"role","menuitem"],[14,"tabindex","-1"],[15,6,[28,[37,3],[[28,[37,4],[[33,18],"dc.intentions.edit"],null],[30,3,["ID"]]],null]],[12],[1,"Edit"],[13],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[14,"role","none"],[14,0,"dangerous"],[12],[1,"\\n "],[10,"label"],[15,"for",[30,9]],[14,"role","menuitem"],[14,"tabindex","-1"],[15,"onkeypress",[30,11]],[12],[1,"Delete"],[13],[1,"\\n "],[10,0],[14,"role","menu"],[12],[1,"\\n "],[8,[39,19],[[24,0,"warning"]],null,[["header","body","actions"],[[[[1,"\\n Confirm Delete\\n "]],[]],[[[1,"\\n "],[10,2],[12],[1,"\\n Are you sure you want to delete this intention?\\n "],[13],[1,"\\n "]],[]],[[[1,"\\n "],[8,[30,13,["Action"]],[[24,0,"dangerous"]],null,[["default"],[[[[1,"\\n "],[8,[39,17],[[24,0,"type-delete"],[24,"tabindex","-1"],[4,[38,20],["click",[28,[37,21],[[28,[37,17],[[30,0],[30,12]],null],[28,[37,17],[[30,0],[30,14],[30,3]],null]],null]],null]],null,[["default"],[[[[1,"\\n Delete\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,13,["Action"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,17],null,[["@for"],[[30,9]]],[["default"],[[[[1,"\\n Cancel\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[13]]]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],[[[41,[28,[37,11],["view CRD intention"],[["item"],[[30,3]]]],[[[1," "],[10,"li"],[14,"role","none"],[12],[1,"\\n "],[10,0],[14,"role","menu"],[12],[1,"\\n "],[8,[39,19],null,null,[["header","body","actions"],[[[[1,"\\n "],[10,1],[14,0,"flex flex-nowrap items-center"],[12],[1,"\\n "],[8,[39,22],[[24,0,"mr-1.5"]],[["@name"],["kubernetes-color"]],null],[1,"\\n Managed by CRD\\n "],[13],[1,"\\n "]],[]],[[[1,"\\n "],[10,2],[12],[1,"\\n This intention is being managed through an Intention Custom Resource in your\\n Kubernetes cluster. It is view only in the UI.\\n "],[13],[1,"\\n "]],[]],[[[1,"\\n "],[8,[30,15,["Action"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,17],[[24,"tabindex","-1"],[24,0,"action"]],[["@href"],[[28,[37,3],[[28,[37,4],[[30,5],"dc.intentions.edit"],null],[30,3,["ID"]]],null]]],[["default"],[[[[1,"\\n View\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,15,["Action"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,17],null,[["@onclick"],[[28,[37,17],[[30,0],[30,12]],null]]],[["default"],[[[[1,"\\n Cancel\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[15]]]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],[[[1," "],[10,"li"],[14,"role","none"],[12],[1,"\\n "],[10,3],[14,"role","menuitem"],[14,"tabindex","-1"],[15,6,[28,[37,3],[[28,[37,4],[[33,18],"dc.intentions.edit"],null],[30,3,["ID"]]],null]],[12],[1,"\\n View\\n "],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]],[]]],[1," "]],[9,10,11,12]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6,7,8]]]]],[1,"\\n"]],[3,4]]]]],[1,"\\n"]],["&attrs","@items","item","index","@routeName","index","change","checked","confirm","send","keypressClick","change","Actions","@delete","Actions"],false,["tabular-collection","block-slot","tooltip","href-to","or","if","eq","consul/bucket/list","hash","slugify","capitalize","can","concat","gt","pluralize","consul/external-source","popover-menu","action","routeName","informed-action","on","queue","flight-icon"]]',moduleName:"consul-ui/components/consul/intention/list/table/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/intention/notice/custom-resource/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"bdXNglRL",block:'[[[1,"\\n"],[8,[39,0],[[24,0,"mb-2 mt-2 consul-intention-notice-custom-resource"]],[["@type","@color"],["inline",[28,[37,1],[[30,1],"neutral"],null]]],[["default"],[[[[1,"\\n "],[8,[30,2,["Title"]],null,null,[["default"],[[[[1,"Intention Custom Resource"]],[]]]]],[1,"\\n "],[8,[30,2,["Description"]],null,null,[["default"],[[[[1,"Some of your intentions are being managed through an Intention Custom Resource in your Kubernetes cluster. Those managed intentions will be view only in the UI. Any intentions created in the UI will work but will not be synced to the Custom Resource Definition (CRD) datastore."]],[]]]]],[1,"\\n "],[8,[30,2,["Link::Standalone"]],null,[["@href","@text","@icon","@iconPosition","@size"],[[29,[[28,[37,2],["CONSUL_DOCS_URL"],null],"/k8s/crds"]],"Learn more about CRDs","docs-link","trailing","small"]],null],[1,"\\n"]],[2]]]]]],["@type","A"],false,["hds/alert","or","env"]]',moduleName:"consul-ui/components/consul/intention/notice/custom-resource/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/intention/notice/permissions/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"vs+EKtgU",block:'[[[1,"\\n"],[8,[39,0],[[24,0,"mb-3 mt-2"]],[["@type"],["inline"]],[["default"],[[[[1,"\\n "],[8,[30,1,["Description"]],null,null,[["default"],[[[[1,[28,[35,1],["components.consul.intention.notice.permissions.body"],null]]],[]]]]],[1,"\\n "],[8,[30,1,["Link::Standalone"]],null,[["@text","@href","@icon","@iconPosition","@size"],[[28,[37,1],["components.consul.intention.notice.permissions.footer"],null],[29,[[28,[37,2],["CONSUL_DOCS_URL"],null],"/connect/intentions"]],"docs-link","trailing","small"]],null],[1,"\\n"]],[1]]]]]],["A"],false,["hds/alert","t","env"]]',moduleName:"consul-ui/components/consul/intention/notice/permissions/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/intention/notifications/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"WszqZIrE",block:'[[[1,"\\n"],[41,[28,[37,1],[[30,1],"create"],null],[[[41,[28,[37,1],[[30,2],"success"],null],[[[1," Your intention has been added.\\n"]],[]],[[[1," There was an error adding your intention.\\n"]],[]]]],[]],[[[41,[28,[37,1],[[30,1],"update"],null],[[[41,[28,[37,1],[[30,2],"success"],null],[[[1," Your intention has been saved.\\n"]],[]],[[[1," There was an error saving your intention.\\n"]],[]]]],[]],[[[41,[28,[37,1],[[30,1],"delete"],null],[[[41,[28,[37,1],[[30,2],"success"],null],[[[1," Your intention was deleted.\\n"]],[]],[[[1," There was an error deleting your intention.\\n"]],[]]]],[]],null]],[]]]],[]]],[44,[[30,3,["errors","firstObject"]]],[[[41,[30,4,["detail"]],[[[1," "],[10,"br"],[12],[13],[1,[28,[35,3],["(",[52,[30,4,["status"]],[28,[37,3],[[30,4,["status"]],": "],null]],[30,4,["detail"]],")"],null]],[1,"\\n"]],[]],null]],[4]]]],["@type","@status","@error","error"],false,["if","eq","let","concat"]]',moduleName:"consul-ui/components/consul/intention/notifications/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/intention/permission/form/index",["exports","@ember/component","@ember/template-factory","@ember/object","@ember/object/computed","@ember/service"],(function(e,t,n,l,r,i){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const o=(0,n.createTemplateFactory)({id:"CUvwsNTr",block:'[[[1,"\\n"],[11,0],[17,1],[24,0,"consul-intention-permission-form"],[12],[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n\\n "],[18,11,[[28,[37,3],null,[["submit","reset","isDirty","changeset"],[[28,[37,4],[[30,0],"submit",[33,5]],null],[28,[37,4],[[30,0],"reset",[33,5]],null],[28,[37,6],[[33,5,["isValid"]]],null],[33,5]]]]]],[1,"\\n\\n "],[10,"fieldset"],[12],[1,"\\n "],[10,0],[14,"data-property","action"],[12],[1,"\\n "],[10,1],[14,0,"label"],[12],[1,"\\n Should this permission allow the source connect to the destination?\\n "],[13],[1,"\\n "],[10,0],[14,"role","radiogroup"],[15,0,[52,[33,5,["error","Action"]]," has-error"]],[12],[1,"\\n"],[42,[28,[37,9],[[28,[37,9],[[33,10]],null]],null],null,[[[1," "],[10,"label"],[12],[1,"\\n "],[10,1],[12],[1,[28,[35,11],[[30,3]],null]],[13],[1,"\\n "],[10,"input"],[14,3,"Action"],[15,2,[30,3]],[15,"checked",[52,[28,[37,12],[[33,5,["Action"]],[30,3]],null],"checked"]],[15,"onchange",[28,[37,4],[[30,0],[28,[37,13],[[33,5],"Action"],null]],[["value"],["target.value"]]]],[14,4,"radio"],[12],[13],[1,"\\n "],[13],[1,"\\n"]],[3]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n\\n "],[10,"fieldset"],[12],[1,"\\n "],[10,"header"],[12],[1,"\\n "],[10,"h2"],[12],[1,"Path"],[13],[1,"\\n "],[13],[1,"\\n "],[10,0],[12],[1,"\\n "],[8,[30,2,["Element"]],null,[["@name","@type"],["PathType","select"]],[["default"],[[[[1,"\\n "],[8,[30,4,["Label"]],null,null,[["default"],[[[[1,"\\n Path type\\n "]],[]]]]],[1,"\\n "],[8,[39,14],null,[["@options","@selected","@onChange"],[[99,15,["@options"]],[99,16,["@selected"]],[28,[37,4],[[30,0],"change","HTTP.PathType",[33,5]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,17],[[33,18],[30,5]],null]],[1,"\\n "]],[5]]]]],[1,"\\n "]],[4]]]]],[1,"\\n\\n"],[41,[33,19],[[[1," "],[8,[30,2,["Element"]],null,[["@name","@error"],["Path",[28,[37,20],[[33,5],"error.HTTP.Path"],null]]],[["default"],[[[[1,"\\n "],[8,[30,6,["Label"]],null,null,[["default"],[[[[1,"\\n "],[1,[28,[35,17],[[33,18],[33,16]],null]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,6,["Text"]],[[16,"oninput",[28,[37,4],[[30,0],"change","HTTP.Path",[33,5]],null]]],[["@value"],[[28,[37,20],[[33,5],"HTTP.Path"],null]]],null],[1,"\\n "],[8,[39,21],null,[["@state","@matches"],[[30,6,["state"]],"error"]],[["default"],[[[[1,"\\n "],[8,[30,6,["Error"]],null,null,[["default"],[[[[1,"\\n"],[41,[28,[37,12],[[28,[37,20],[[33,5],"HTTP.Path"],null],"Regex"],null],[[[1," Path Regex should not be blank\\n"]],[]],[[[1," Path should begin with a \'/\'\\n"]],[]]],[1," "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n"]],[]],null],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n\\n "],[10,"fieldset"],[12],[1,"\\n "],[10,"h2"],[12],[1,"Methods"],[13],[1,"\\n "],[10,0],[14,0,"type-toggle"],[12],[1,"\\n "],[10,1],[12],[1,"All methods are applied by default unless specified"],[13],[1,"\\n "],[8,[30,2,["Element"]],null,[["@name"],["allMethods"]],[["default"],[[[[1,"\\n "],[8,[30,7,["Checkbox"]],[[16,"checked",[52,[33,22],"checked"]],[16,"onchange",[28,[37,4],[[30,0],"change","allMethods",[33,5]],null]]],null,null],[1,"\\n "],[8,[30,7,["Label"]],null,null,[["default"],[[[[1,"\\n All Methods\\n "]],[]]]]],[1,"\\n "]],[7]]]]],[1,"\\n "],[13],[1,"\\n\\n"],[41,[33,23],[[[1," "],[10,0],[14,0,"checkbox-group"],[14,"role","group"],[12],[1,"\\n"],[42,[28,[37,9],[[28,[37,9],[[33,24]],null]],null],null,[[[1," "],[10,"label"],[14,0,"type-checkbox"],[12],[1,"\\n "],[10,"input"],[14,3,"method"],[15,2,[30,8]],[15,"checked",[52,[28,[37,25],[[30,8],[33,5,["HTTP","Methods"]]],null],"checked"]],[15,"onchange",[28,[37,4],[[30,0],"change","method",[33,5]],null]],[14,4,"checkbox"],[12],[13],[1,"\\n "],[10,1],[12],[1,[30,8]],[13],[1,"\\n "],[13],[1,"\\n"]],[8]],null],[1," "],[13],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n\\n "],[10,"fieldset"],[12],[1,"\\n "],[10,"h2"],[12],[1,"Headers"],[13],[1,"\\n\\n "],[8,[39,26],null,[["@items","@ondelete"],[[28,[37,20],[[33,5],"HTTP.Header"],null],[28,[37,4],[[30,0],"delete","HTTP.Header",[33,5]],null]]],[["default"],[[[[1,"\\n\\n "]],[9]]]]],[1,"\\n\\n "],[8,[39,27],null,[["@onsubmit"],[[28,[37,4],[[30,0],"add","HTTP.Header",[33,5]],null]]],[["default"],[[[[1,"\\n "],[8,[39,28],null,[["@target","@name","@value"],[[30,0],"headerForm",[30,10]]],null],[1,"\\n "]],[10]]]]],[1,"\\n\\n "],[8,[39,29],null,null,[["default"],[[[[1,"\\n "],[8,[39,30],[[16,"disabled",[52,[28,[37,31],[[30,0,["headerForm","isDirty"]]],null],"disabled"]],[16,"onclick",[28,[37,4],[[30,0],[30,0,["headerForm","submit"]]],null]]],[["@text","@color"],[[29,["Add",[52,[28,[37,32],[[28,[37,17],[[28,[37,20],[[33,5],"HTTP.Header"],null],"length"],null],0],null]," another",""]," header"]],"primary"]],null],[1,"\\n "],[8,[39,30],[[16,"onclick",[28,[37,4],[[30,0],[30,0,["headerForm","reset"]]],null]]],[["@text","@color"],["Cancel","secondary"]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "]],[2]]]]],[1,"\\n"],[13]],["&attrs","group","intent","el","Type","el","el","method","headerList","headerForm","&default"],false,["form-group","name","yield","hash","action","changeset","and","if","each","-track-array","intents","capitalize","eq","changeset-set","power-select","pathTypes","pathType","get","pathLabels","shouldShowPathField","changeset-get","state","allMethods","shouldShowMethods","methods","includes","consul/intention/permission/header/list","consul/intention/permission/header/form","ref","hds/button-set","hds/button","not","gt"]]',moduleName:"consul-ui/components/consul/intention/permission/form/index.hbs",isStrictMode:!1}),a="intention-permission" +var u=(0,t.setComponentTemplate)(o,t.default.extend({tagName:"",name:a,schema:(0,i.inject)("schema"),change:(0,i.inject)("change"),repo:(0,i.inject)(`repository/${a}`),onsubmit:function(){},onreset:function(){},intents:(0,r.alias)(`schema.${a}.Action.allowedValues`),methods:(0,r.alias)(`schema.${a}-http.Methods.allowedValues`),pathProps:(0,r.alias)(`schema.${a}-http.PathType.allowedValues`),pathTypes:(0,l.computed)("pathProps",(function(){return["NoPath"].concat(this.pathProps)})),pathLabels:(0,l.computed)((function(){return{NoPath:"No Path",PathExact:"Exact",PathPrefix:"Prefixed by",PathRegex:"Regular Expression"}})),pathInputLabels:(0,l.computed)((function(){return{PathExact:"Exact Path",PathPrefix:"Path Prefix",PathRegex:"Path Regular Expression"}})),changeset:(0,l.computed)("item",(function(){const e=this.change.changesetFor(a,this.item||this.repo.create()) +return e.isPristine&&e.validate(),e})),pathType:(0,l.computed)("changeset._changes.HTTP.PathType","pathTypes.firstObject",(function(){return this.changeset.HTTP.PathType||this.pathTypes.firstObject})),noPathType:(0,r.equal)("pathType","NoPath"),shouldShowPathField:(0,r.not)("noPathType"),allMethods:!1,shouldShowMethods:(0,r.not)("allMethods"),didReceiveAttrs:function(){(0,l.get)(this,"item.HTTP.Methods.length")||(0,l.set)(this,"allMethods",!0)},actions:{change:function(e,t,n){const r=void 0!==(0,l.get)(n,"target.value")?n.target.value:n +switch(e){case"allMethods":(0,l.set)(this,e,n.target.checked) +break +case"method":n.target.checked?this.actions.add.apply(this,["HTTP.Methods",t,r]):this.actions.delete.apply(this,["HTTP.Methods",t,r]) +break +default:t.set(e,r)}t.validate()},add:function(e,t,n){t.pushObject(e,n),t.validate()},delete:function(e,t,n){t.removeObject(e,n),t.validate()},submit:function(e,t){void 0!==e.changes.find((e=>{let{key:t,value:n}=e +return"HTTP.PathType"===t||"HTTP.Path"===t}))&&(this.pathProps.forEach((t=>{e.set(`HTTP.${t}`,void 0)})),"NoPath"!==e.HTTP.PathType&&e.set(`HTTP.${e.HTTP.PathType}`,e.HTTP.Path)),this.allMethods&&e.set("HTTP.Methods",null),delete e._changes.HTTP.PathType,delete e._changes.HTTP.Path,this.repo.persist(e),this.onsubmit(e.data)},reset:function(e,t){e.rollback(),this.onreset(e.data)}}})) +e.default=u})),define("consul-ui/components/consul/intention/permission/header/form/index",["exports","@ember/component","@ember/template-factory","@ember/object","@ember/object/computed","@ember/service"],(function(e,t,n,l,r,i){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const o=(0,n.createTemplateFactory)({id:"2cihjQ3k",block:'[[[1,"\\n"],[11,0],[17,1],[24,0,"consul-intention-permission-header-form"],[12],[1,"\\n "],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n\\n "],[18,7,[[28,[37,3],null,[["submit","reset","isDirty","changeset"],[[28,[37,4],[[30,0],"submit",[33,5]],null],[28,[37,4],[[30,0],"reset",[33,5]],null],[28,[37,6],[[33,5,["isValid"]],[33,5,["isDirty"]]],null],[33,5]]]]]],[1,"\\n\\n "],[10,"fieldset"],[12],[1,"\\n "],[10,0],[12],[1,"\\n "],[8,[30,2,["Element"]],null,[["@name","@type"],["HeaderType","select"]],[["default"],[[[[1,"\\n "],[8,[30,3,["Label"]],null,null,[["default"],[[[[1,"Header type"]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@options","@selected","@onChange"],[[99,8,["@options"]],[99,9,["@selected"]],[28,[37,4],[[30,0],"change","HeaderType",[33,5]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,10],[[33,11],[30,4]],null]],[1,"\\n "]],[4]]]]],[1,"\\n "]],[3]]]]],[1,"\\n\\n\\n "],[8,[30,2,["Element"]],null,[["@name","@error"],["Name",[28,[37,12],[[33,5],"error.Name"],null]]],[["default"],[[[[1,"\\n "],[8,[30,5,["Label"]],null,null,[["default"],[[[[1,"Header name"]],[]]]]],[1,"\\n "],[8,[30,5,["Text"]],[[16,"oninput",[28,[37,4],[[30,0],"change","Name",[33,5]],null]]],[["@value"],[[28,[37,12],[[33,5],"Name"],null]]],null],[1,"\\n "],[8,[39,13],null,[["@state","@matches"],[[30,5,["state"]],"error"]],[["default"],[[[[1,"\\n "],[8,[30,5,["Error"]],null,null,[["default"],[[[[1,"\\n "],[1,[28,[35,12],[[33,5],"error.Name.validation"],null]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[5]]]]],[1,"\\n\\n"],[41,[33,15],[[[1," "],[8,[30,2,["Element"]],null,[["@name","@error"],["Value",[28,[37,12],[[33,5],"error.Value"],null]]],[["default"],[[[[1,"\\n "],[8,[30,6,["Label"]],null,null,[["default"],[[[[1,"Header "],[1,[28,[35,16],[[28,[37,10],[[33,11],[33,9]],null]],null]]],[]]]]],[1,"\\n "],[8,[30,6,["Text"]],[[16,"oninput",[28,[37,4],[[30,0],"change","Value",[33,5]],null]]],[["@value"],[[28,[37,12],[[33,5],"Value"],null]]],null],[1,"\\n "],[8,[39,13],null,[["@state","@matches"],[[30,6,["state"]],"error"]],[["default"],[[[[1,"\\n "],[8,[30,6,["Error"]],null,null,[["default"],[[[[1,"\\n "],[1,[28,[35,12],[[33,5],"error.Value.validation"],null]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n"]],[]],null],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "]],[2]]]]],[1,"\\n"],[13]],["&attrs","group","el","Type","el","el","&default"],false,["form-group","name","yield","hash","action","changeset","and","power-select","headerTypes","headerType","get","headerLabels","changeset-get","state","if","shouldShowValueField","lowercase"]]',moduleName:"consul-ui/components/consul/intention/permission/header/form/index.hbs",isStrictMode:!1}),a="intention-permission-http-header" +var u=(0,t.setComponentTemplate)(o,t.default.extend({tagName:"",name:a,schema:(0,i.inject)("schema"),change:(0,i.inject)("change"),repo:(0,i.inject)(`repository/${a}`),onsubmit:function(){},onreset:function(){},changeset:(0,l.computed)("item",(function(){return this.change.changesetFor(a,this.item||this.repo.create({HeaderType:this.headerTypes.firstObject}))})),headerTypes:(0,r.alias)(`schema.${a}.HeaderType.allowedValues`),headerLabels:(0,l.computed)((function(){return{Exact:"Exactly Matching",Prefix:"Prefixed by",Suffix:"Suffixed by",Regex:"Regular Expression",Present:"Is present"}})),headerType:(0,l.computed)("changeset.HeaderType","headerTypes.firstObject",(function(){return this.changeset.HeaderType||this.headerTypes.firstObject})),headerTypeEqualsPresent:(0,r.equal)("headerType","Present"),shouldShowValueField:(0,r.not)("headerTypeEqualsPresent"),actions:{change:function(e,t,n){const r=void 0!==(0,l.get)(n,"target.value")?n.target.value:n +t.set(e,r),t.validate()},submit:function(e){this.headerTypes.forEach((t=>{e.set(t,void 0)})) +const t="Present"===e.HeaderType||e.Value +e.set(e.HeaderType,t),delete e._changes.HeaderType,delete e._changes.Value,this.repo.persist(e),this.onsubmit(e.data),(0,l.set)(this,"item",this.repo.create({HeaderType:this.headerType}))},reset:function(e,t){e.rollback()}}})) +e.default=u})),define("consul-ui/components/consul/intention/permission/header/list/index",["exports","@ember/component","@ember/template-factory"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const l=(0,n.createTemplateFactory)({id:"YQICAE68",block:'[[[1,"\\n"],[41,[28,[37,1],[[33,2,["length"]],0],null],[[[8,[39,3],[[24,0,"consul-intention-permission-header-list"]],[["@items","@scroll","@cellHeight"],[[99,2,["@items"]],"native",42]],[["default"],[[[[1,"\\n "],[8,[39,4],null,[["@name"],["details"]],[["default"],[[[[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n "],[8,[39,5],null,null,[["default"],[[[[1,"\\n Header\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[30,1,["Name"]]],[1," "],[1,[28,[35,6],[[30,1]],null]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,4],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[8,[30,2],null,null,[["default"],[[[[1,"\\n "],[8,[30,3],[[24,0,"dangerous"]],[["@onclick"],[[28,[37,7],[[30,0],[33,8],[30,1]],null]]],[["default"],[[[[1,"\\n "],[8,[39,4],null,[["@name"],["label"]],[["default"],[[[[1,"\\n Delete\\n "]],[]]]]],[1,"\\n "],[8,[39,4],null,[["@name"],["confirmation"]],[["default"],[[[[1,"\\n "],[8,[30,4],[[24,0,"warning"]],null,[["default"],[[[[1,"\\n "],[8,[39,4],null,[["@name"],["header"]],[["default"],[[[[1,"\\n Confirm delete\\n "]],[]]]]],[1,"\\n "],[8,[39,4],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n Are you sure you want to delete this header?\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,4],null,[["@name"],["confirm"]],[["default"],[[[[1,"\\n "],[8,[30,5],null,null,[["default"],[[[[1,"Delete"]],[]]]]],[1,"\\n "]],[5]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[4]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[3]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],[]],null]],["item","Actions","Action","Confirmation","Confirm"],false,["if","gt","items","list-collection","block-slot","tooltip","route-match","action","ondelete"]]',moduleName:"consul-ui/components/consul/intention/permission/header/list/index.hbs",isStrictMode:!1}) +var r=(0,t.setComponentTemplate)(l,t.default.extend({tagName:""})) +e.default=r})),define("consul-ui/components/consul/intention/permission/list/index",["exports","@ember/component","@ember/template-factory"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const l=(0,n.createTemplateFactory)({id:"eQ5zYOJl",block:'[[[1,"\\n"],[41,[28,[37,1],[[33,2,["length"]],0],null],[[[8,[39,3],[[16,0,[29,["consul-intention-permission-list",[52,[28,[37,4],[[33,5]],null]," readonly"]]]]],[["@scroll","@items","@partial"],["native",[99,2,["@items"]],5]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["details"]],[["default"],[[[[1,"\\n "],[10,0],[15,"onclick",[28,[37,7],[[30,0],[28,[37,8],[[33,5]],null],[30,1]],null]],[12],[1,"\\n "],[10,"strong"],[15,0,[28,[37,9],["intent-",[30,1,["Action"]]],null]],[12],[1,[28,[35,10],[[30,1,["Action"]]],null]],[13],[1,"\\n"],[41,[28,[37,1],[[30,1,["HTTP","Methods","length"]],0],null],[[[1," "],[10,"dl"],[14,0,"permission-methods"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n "],[8,[39,11],null,null,[["default"],[[[[1,"\\n Methods\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n"],[42,[28,[37,13],[[28,[37,13],[[30,1,["HTTP","Methods"]]],null]],null],null,[[[1," "],[1,[30,2]],[1,"\\n"]],[2]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[30,1,["HTTP","Path"]],[[[1," "],[10,"dl"],[14,0,"permission-path"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n "],[8,[39,11],null,null,[["default"],[[[[1,"\\n "],[1,[30,1,["HTTP","PathType"]]],[1,"\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[30,1,["HTTP","Path"]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[42,[28,[37,13],[[28,[37,13],[[30,1,["HTTP","Header"]]],null]],null],null,[[[1," "],[10,"dl"],[14,0,"permission-header"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n "],[8,[39,11],null,null,[["default"],[[[[1,"\\n Header\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[30,3,["Name"]]],[1," "],[1,[28,[35,14],[[30,3]],null]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[3]],null],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n"],[41,[33,5],[[[1," "],[8,[39,6],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[8,[30,4],null,null,[["default"],[[[[1,"\\n "],[8,[30,5],null,[["@onclick","@close"],[[28,[37,7],[[30,0],[28,[37,8],[[33,5]],null],[30,1]],null],true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["label"]],[["default"],[[[[1,"\\n Edit\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,5],[[24,0,"dangerous"]],[["@onclick"],[[28,[37,7],[[30,0],[33,15],[30,1]],null]]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["label"]],[["default"],[[[[1,"\\n Delete\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["confirmation"]],[["default"],[[[[1,"\\n "],[8,[30,6],[[24,0,"warning"]],null,[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["header"]],[["default"],[[[[1,"\\n Confirm delete\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n Are you sure you want to delete this permission?\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["confirm"]],[["default"],[[[[1,"\\n "],[8,[30,7],null,null,[["default"],[[[[1,"Delete"]],[]]]]],[1,"\\n "]],[7]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[5]]]]],[1,"\\n "]],[4]]]]],[1,"\\n"]],[]],null]],[1]]]]],[1,"\\n"]],[]],null]],["item","item","item","Actions","Action","Confirmation","Confirm"],false,["if","gt","items","list-collection","not","onclick","block-slot","action","optional","concat","capitalize","tooltip","each","-track-array","route-match","ondelete"]]',moduleName:"consul-ui/components/consul/intention/permission/list/index.hbs",isStrictMode:!1}) +var r=(0,t.setComponentTemplate)(l,t.default.extend({tagName:""})) +e.default=r})),define("consul-ui/components/consul/intention/search-bar/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"TGY4oICb",block:'[[[1,"\\n"],[8,[39,0],[[24,0,"consul-intention-search-bar"],[17,1]],[["@filter"],[[30,2]]],[["status","search","filter","sort"],[[[[1,"\\n\\n"],[44,[[28,[37,2],[[28,[37,3],["components.consul.intention.search-bar.",[30,3,["status","key"]]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","key"]]],null],[28,[37,3],["common.consul.",[30,3,["status","key"]]],null]],null]]]],[28,[37,2],[[28,[37,3],["components.consul.intention.search-bar.",[30,3,["status","value"]]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","value"]]],null],[28,[37,3],["common.consul.",[30,3,["status","value"]]],null]],null]]]]],[[[1," "],[8,[30,3,["RemoveFilter"]],[[16,"aria-label",[28,[37,2],["common.ui.remove"],[["item"],[[28,[37,3],[[30,4]," ",[30,5]],null]]]]]],null,[["default"],[[[[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,[30,4]],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,5]],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[4,5]]],[1,"\\n "]],[3]],[[[1,"\\n "],[8,[30,6,["Search"]],null,[["@onsearch","@value","@placeholder"],[[28,[37,5],[[30,0],[30,7]],null],[30,8],[28,[37,2],["common.search.search"],null]]],[["default"],[[[[1,"\\n"],[41,[30,2,["searchproperty"]],[[[1," "],[8,[30,6,["Select"]],[[24,0,"type-search-properties"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,2,["searchproperty","change"]]],null],true,true]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["common.search.searchproperty"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,9,["Optgroup"]],[30,9,["Option"]]],[[[42,[28,[37,9],[[28,[37,9],[[30,2,["searchproperty","default"]]],null]],null],null,[[[1," "],[8,[30,11],null,[["@value","@selected"],[[30,12],[28,[37,10],[[30,12],[30,2,["searchproperty","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["common.consul.",[28,[37,11],[[30,12]],null]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[12]],null]],[10,11]]],[1," "]],[]]]]],[1,"\\n "]],[9]]]]],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "]],[6]],[[[1,"\\n "],[8,[30,13,["Select"]],[[24,0,"type-access"]],[["@position","@onchange","@multiple"],["left",[28,[37,5],[[30,0],[30,2,["access","change"]]],null],true]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["components.consul.intention.search-bar.access.name"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,14,["Optgroup"]],[30,14,["Option"]]],[[[42,[28,[37,9],[[28,[37,9],[[28,[37,4],["allow","deny",""],null]],null]],null],null,[[[1," "],[8,[30,16],[[16,0,[28,[37,3],["value-",[30,17]],null]]],[["@value","@selected"],[[28,[37,12],[[30,17],"app-aware"],null],[28,[37,10],[[28,[37,12],[[30,17],"app-aware"],null],[30,2,["access","value"]]],null]]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,[28,[35,2],[[28,[37,3],["components.consul.intention.search-bar.access.options.",[28,[37,12],[[30,17],"app-aware"],null]],null]],null]],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[17]],null]],[15,16]]],[1," "]],[]]]]],[1,"\\n "]],[14]]]]],[1,"\\n "]],[13]],[[[1,"\\n "],[8,[30,18,["Select"]],[[24,0,"type-sort"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,19,["change"]]],null],false,true]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n"],[44,[[28,[37,13],[[28,[37,4],[[28,[37,4],["Action:asc",[28,[37,2],["components.consul.intention.search-bar.sort.access.asc"],null]],null],[28,[37,4],["Action:desc",[28,[37,2],["components.consul.intention.search-bar.sort.access.desc"],null]],null],[28,[37,4],["SourceName:asc",[28,[37,2],["components.consul.intention.search-bar.sort.source-name.asc"],null]],null],[28,[37,4],["SourceName:desc",[28,[37,2],["components.consul.intention.search-bar.sort.source-name.desc"],null]],null],[28,[37,4],["DestinationName:asc",[28,[37,2],["components.consul.intention.search-bar.sort.destination-name.asc"],null]],null],[28,[37,4],["DestinationName:desc",[28,[37,2],["components.consul.intention.search-bar.sort.destination-name.desc"],null]],null],[28,[37,4],["Precedence:asc",[28,[37,2],["common.sort.numeric.asc"],null]],null],[28,[37,4],["Precedence:desc",[28,[37,2],["common.sort.numeric.desc"],null]],null]],null]],null]],[[[1," "],[1,[28,[35,14],[[30,21],[30,19,["value"]]],null]],[1,"\\n"]],[21]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,20,["Optgroup"]],[30,20,["Option"]]],[[[1," "],[8,[30,22],null,[["@label"],[[28,[37,2],["components.consul.intention.search-bar.sort.access.name"],null]]],[["default"],[[[[1,"\\n "],[8,[30,23],null,[["@value","@selected"],["Action:asc",[28,[37,15],["Action:asc",[30,19,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["components.consul.intention.search-bar.sort.access.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,23],null,[["@value","@selected"],["Action:desc",[28,[37,15],["Action:desc",[30,19,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["components.consul.intention.search-bar.sort.access.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,22],null,[["@label"],[[28,[37,2],["components.consul.intention.search-bar.sort.source-name.name"],null]]],[["default"],[[[[1,"\\n "],[8,[30,23],null,[["@value","@selected"],["SourceName:asc",[28,[37,15],["SourceName:asc",[30,19,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,23],null,[["@value","@selected"],["SourceName:desc",[28,[37,15],["SourceName:desc",[30,19,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,22],null,[["@label"],[[28,[37,2],["components.consul.intention.search-bar.sort.destination-name.name"],null]]],[["default"],[[[[1,"\\n "],[8,[30,23],null,[["@value","@selected"],["DestinationName:asc",[28,[37,15],["DestinationName:asc",[30,19,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,23],null,[["@value","@selected"],["DestinationName:desc",[28,[37,15],["DestinationName:desc",[30,19,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,22],null,[["@label"],[[28,[37,2],["components.consul.intention.search-bar.sort.precedence.name"],null]]],[["default"],[[[[1,"\\n "],[8,[30,23],null,[["@value","@selected"],["Precedence:asc",[28,[37,15],["Precedence:asc",[30,19,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.numeric.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,23],null,[["@value","@selected"],["Precedence:desc",[28,[37,15],["Precedence:desc",[30,19,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.numeric.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[22,23]]],[1," "]],[]]]]],[1,"\\n "]],[20]]]]],[1,"\\n "]],[18]]]]]],["&attrs","@filter","search","key","value","search","@onsearch","@search","components","Optgroup","Option","prop","search","components","Optgroup","Option","item","search","@sort","components","selectable","Optgroup","Option"],false,["search-bar","let","t","concat","array","action","if","block-slot","each","-track-array","includes","lowercase","or","from-entries","get","eq"]]',moduleName:"consul-ui/components/consul/intention/search-bar/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/intention/view/index",["exports","@ember/component","@ember/template-factory"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const l=(0,n.createTemplateFactory)({id:"2U6CYW9B",block:'[[[1,"\\n"],[11,0],[24,0,"consul-intention-view"],[17,1],[12],[1,"\\n\\n "],[10,0],[14,0,"definition-table"],[12],[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"Destination"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,0],null,[["@item","@nspace","@partition","@service"],[[28,[37,1],null,[["Namespace","Partition","Service"],[[33,2,["DestinationNS"]],[33,2,["DestinationPartition"]],[33,2,["DestinationName"]]]]],"-","-",true]],null],[1,"\\n "],[13],[1,"\\n "],[10,"dt"],[12],[1,"Source"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,0],null,[["@item","@nspace","@partition","@service"],[[28,[37,1],null,[["Namespace","Partition","Service","PeerName"],[[33,2,["SourceNS"]],[33,2,["SourcePartition"]],[33,2,["SourceName"]],[33,2,["SourcePeer"]]]]],"-","-",true]],null],[1,"\\n "],[13],[1,"\\n"],[41,[33,2,["Action"]],[[[1," "],[10,"dt"],[12],[1,"Action"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[33,2,["Action"]]],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1," "],[10,"dt"],[12],[1,"Description"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[28,[35,4],[[33,2,["Description"]],"N/A"],null]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n\\n"],[41,[28,[37,5],[[33,2,["Permissions","length"]],0],null],[[[1," "],[10,"h2"],[12],[1,"Permissions"],[13],[1,"\\n "],[8,[39,6],null,null,null],[1,"\\n "],[8,[39,7],null,[["@items"],[[33,2,["Permissions"]]]],null],[1,"\\n"]],[]],null],[1,"\\n"],[13],[1,"\\n"]],["&attrs"],false,["consul/bucket/list","hash","item","if","or","gt","consul/intention/notice/permissions","consul/intention/permission/list"]]',moduleName:"consul-ui/components/consul/intention/view/index.hbs",isStrictMode:!1}) +var r=(0,t.setComponentTemplate)(l,t.default.extend({tagName:""})) +e.default=r})),define("consul-ui/components/consul/kind/index",["exports","@ember/component","@ember/template-factory","@ember/object","ember-cli-string-helpers/helpers/titleize","ember-cli-string-helpers/helpers/humanize"],(function(e,t,n,l,r,i){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const o=(0,n.createTemplateFactory)({id:"w6CpoygV",block:'[[[1,"\\n"],[41,[33,1,["Kind"]],[[[41,[33,2],[[[1," "],[10,"dl"],[14,0,"tooltip-panel"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n "],[10,1],[14,0,"consul-kind"],[12],[1,"\\n "],[1,[34,3]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,4],null,[["@position"],["left"]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n"],[41,[28,[37,6],[[33,1,["Kind"]],"ingress-gateway"],null],[[[1," Ingress gateways enable ingress traffic from services outside the Consul service mesh to services inside the Consul service mesh.\\n"]],[]],[[[41,[28,[37,6],[[33,1,["Kind"]],"terminating-gateway"],null],[[[1," Terminating gateways allow connect-enabled services in Consul service mesh to communicate with services outside the service mesh.\\n"]],[]],[[[41,[28,[37,6],[[33,1,["Kind"]],"api-gateway"],null],[[[1," API gateways enable ingress traffic from services outside the Consul service mesh to services inside the Consul service mesh.\\n"]],[]],[[[1," Mesh gateways enable routing of Connect traffic between different Consul datacenters.\\n "]],[]]]],[]]]],[]]],[1," "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["menu"]],[["default"],[[[[1,"\\n "],[10,"li"],[14,"role","separator"],[12],[1,"\\n"],[41,[28,[37,6],[[33,1,["Kind"]],"ingress-gateway"],null],[[[1," About Ingress gateways\\n"]],[]],[[[41,[28,[37,6],[[33,1,["Kind"]],"terminating-gateway"],null],[[[1," About Terminating gateways\\n"]],[]],[[[41,[28,[37,6],[[33,1,["Kind"]],"api-gateway"],null],[[[1," About API gateways\\n"]],[]],[[[1," About Mesh gateways\\n "]],[]]]],[]]]],[]]],[1," "],[13],[1,"\\n"],[44,[[28,[37,8],[[28,[37,9],[[28,[37,9],["ingress-gateway","/consul/developer-mesh/ingress-gateways"],null],[28,[37,9],["terminating-gateway","/consul/developer-mesh/understand-terminating-gateways"],null],[28,[37,9],["mesh-gateway","/consul/developer-mesh/connect-gateways"],null]],null]],null]],[[[1," "],[10,"li"],[14,"role","none"],[14,0,"learn-link"],[12],[1,"\\n "],[10,3],[14,"tabindex","-1"],[14,"role","menuitem"],[15,6,[28,[37,10],[[28,[37,11],["CONSUL_DOCS_LEARN_URL"],null],[28,[37,12],[[30,1],[33,1,["Kind"]]],null]],null]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[1,"\\n Learn guides\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[1]]],[44,[[28,[37,8],[[28,[37,9],[[28,[37,9],["ingress-gateway","/connect/gateways/ingress-gateway"],null],[28,[37,9],["terminating-gateway","/connect/gateways/terminating-gateway"],null],[28,[37,9],["api-gateway","/connect/gateways/api-gateway"],null],[28,[37,9],["mesh-gateway","/connect/gateways/mesh-gateway"],null]],null]],null]],[[[1," "],[10,"li"],[14,"role","none"],[14,0,"docs-link"],[12],[1,"\\n "],[10,3],[14,"tabindex","-1"],[14,"role","menuitem"],[15,6,[28,[37,10],[[28,[37,11],["CONSUL_DOCS_URL"],null],[28,[37,12],[[30,2],[33,1,["Kind"]]],null]],null]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[1,"\\n Documentation\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[14,"role","separator"],[12],[1,"\\n Other gateway types\\n "],[13],[1,"\\n"],[41,[28,[37,13],[[33,1,["Kind"]],"mesh-gateway"],null],[[[1," "],[10,"li"],[14,"role","none"],[14,0,"docs-link"],[12],[1,"\\n "],[10,3],[14,"tabindex","-1"],[14,"role","menuitem"],[15,6,[28,[37,10],[[28,[37,11],["CONSUL_DOCS_URL"],null],[28,[37,12],[[30,2],"mesh-gateway"],null]],null]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[1,"\\n Mesh gateways\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[28,[37,13],[[33,1,["Kind"]],"terminating-gateway"],null],[[[1," "],[10,"li"],[14,"role","none"],[14,0,"docs-link"],[12],[1,"\\n "],[10,3],[14,"tabindex","-1"],[14,"role","menuitem"],[15,6,[28,[37,10],[[28,[37,11],["CONSUL_DOCS_URL"],null],[28,[37,12],[[30,2],"terminating-gateway"],null]],null]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[1,"\\n Terminating gateways\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[28,[37,13],[[33,1,["Kind"]],"ingress-gateway"],null],[[[1," "],[10,"li"],[14,"role","none"],[14,0,"docs-link"],[12],[1,"\\n "],[10,3],[14,"tabindex","-1"],[14,"role","menuitem"],[15,6,[28,[37,10],[[28,[37,11],["CONSUL_DOCS_URL"],null],[28,[37,12],[[30,2],"ingress-gateway"],null]],null]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[1,"\\n Ingress gateways\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[28,[37,13],[[33,1,["Kind"]],"api-gateway"],null],[[[1," "],[10,"li"],[14,"role","none"],[14,0,"docs-link"],[12],[1,"\\n "],[10,3],[14,"tabindex","-1"],[14,"role","menuitem"],[15,6,[28,[37,10],[[28,[37,11],["CONSUL_DOCS_URL"],null],[28,[37,12],[[30,2],"api-gateway"],null]],null]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[1,"\\n API gateways\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null]],[2]]],[1," "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],[[[1," "],[10,1],[14,0,"consul-kind"],[12],[1,"\\n "],[1,[34,3]],[1,"\\n "],[13],[1,"\\n"]],[]]]],[]],null]],["link","link"],false,["if","item","withInfo","Name","menu-panel","block-slot","eq","let","from-entries","array","concat","env","get","not-eq"]]',moduleName:"consul-ui/components/consul/kind/index.hbs",isStrictMode:!1}),a={"api-gateway":"API Gateway","mesh-gateway":"Mesh Gateway","ingress-gateway":"Ingress Gateway","terminating-gateway":"Terminating Gateway"} +var u=(0,t.setComponentTemplate)(o,t.default.extend({tagName:"",Name:(0,l.computed)("item.Kind",(function(){const e=a[this.item.Kind] +return e||(0,r.titleize)((0,i.humanize)(this.item.Kind))}))})) +e.default=u})),define("consul-ui/components/consul/kv/form/index",["exports","@ember/component","@ember/template-factory","@ember/object","@ember/service"],(function(e,t,n,l,r){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const i=(0,n.createTemplateFactory)({id:"CDb8CUMa",block:'[[[1,"\\n"],[8,[39,0],null,[["@dc","@nspace","@partition","@type","@label","@autofill","@item","@src","@onchange","@onsubmit"],[[99,1,["@dc"]],[99,2,["@nspace"]],[99,3,["@partition"]],"kv","key",[99,4,["@autofill"]],[99,5,["@item"]],[99,6,["@src"]],[28,[37,7],[[30,0],"change"],null],[28,[37,7],[[30,0],[33,8]],null]]],[["default"],[[[[1,"\\n "],[8,[39,9],null,[["@name"],["content"]],[["default"],[[[[1,"\\n"],[44,[[28,[37,11],["write kv"],[["item"],[[30,1,["data"]]]]]],[[[1," "],[10,"form"],[15,"onsubmit",[28,[37,7],[[30,0],[30,1,["submit"]]],null]],[12],[1,"\\n "],[11,"fieldset"],[4,[38,12],[[28,[37,13],[[30,2],[30,1,["disabled"]]],null]],null],[12],[1,"\\n"],[41,[30,1,["isCreate"]],[[[1," "],[10,"label"],[15,0,[29,["type-text",[52,[30,1,["data","error","Key"]]," has-error"]]]],[12],[1,"\\n "],[10,1],[12],[1,"Key or folder"],[13],[1,"\\n "],[10,"input"],[14,"autofocus","autofocus"],[15,2,[28,[37,15],[[30,1,["data","Key"]],[33,16]],null]],[14,3,"additional"],[15,"oninput",[28,[37,7],[[30,0],[30,1,["change"]]],null]],[14,"placeholder","Key or folder"],[14,4,"text"],[12],[13],[1,"\\n "],[10,"em"],[12],[1,"To create a folder, end a key with "],[10,"code"],[12],[1,"/"],[13],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[28,[37,13],[[28,[37,17],[[28,[37,15],[[30,1,["data","Key"]],[33,16]],null],""],null],[28,[37,18],[[28,[37,19],[[30,1,["data","Key"]]],null],"/"],null]],null],[[[1," "],[10,0],[12],[1,"\\n "],[10,0],[14,0,"type-toggle"],[12],[1,"\\n "],[10,"label"],[12],[1,"\\n "],[11,"input"],[24,3,"json"],[16,"checked",[52,[33,20],"checked"]],[16,"onchange",[28,[37,7],[[30,0],[30,1,["change"]]],null]],[24,4,"checkbox"],[4,[38,12],[false],null],[12],[13],[1,"\\n "],[10,1],[12],[1,"Code"],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n\\n "],[10,"label"],[14,"for",""],[15,0,[29,["type-text",[52,[30,1,["data","error","Value"]]," has-error"]]]],[12],[1,"\\n"],[41,[33,20],[[[1," "],[8,[39,21],null,[["@name","@readonly","@value","@onkeyup"],["value",[28,[37,13],[[30,2],[30,1,["disabled"]]],null],[28,[37,22],[[30,1,["data","Value"]]],null],[28,[37,7],[[30,0],[30,1,["change"]],"value"],null]]],[["label"],[[[[1,"Value"]],[]]]]],[1,"\\n"]],[]],[[[1," "],[10,1],[12],[1,"Value"],[13],[1,"\\n "],[11,"textarea"],[16,"autofocus",[28,[37,23],[[30,1,["isCreate"]]],null]],[24,3,"value"],[16,"oninput",[28,[37,7],[[30,0],[30,1,["change"]]],null]],[4,[38,12],[[28,[37,13],[[30,2],[30,1,["disabled"]]],null]],null],[12],[1,[28,[35,22],[[30,1,["data","Value"]]],null]],[13],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n "],[8,[39,24],null,null,[["default"],[[[[1,"\\n"],[41,[30,1,["isCreate"]],[[[41,[28,[37,23],[[30,2]],null],[[[1," "],[8,[39,25],[[16,"disabled",[28,[37,13],[[30,1,["data","isPristine"]],[30,1,["data","isInvalid"]],[30,1,["disabled"]]],null]],[24,4,"submit"]],[["@text"],["Save"]],null],[1,"\\n"]],[]],null],[1,"\\n "],[8,[39,25],[[16,"disabled",[30,1,["disabled"]]],[16,"onclick",[28,[37,7],[[30,0],[33,26],[30,1,["data"]]],null]],[24,4,"reset"]],[["@text","@color"],["Cancel","secondary"]],null],[1,"\\n"]],[]],[[[41,[28,[37,23],[[30,2]],null],[[[1," "],[8,[39,25],[[16,"disabled",[28,[37,13],[[30,1,["data","isInvalid"]],[30,1,["disabled"]]],null]],[24,4,"submit"]],[["@text"],["Save"]],null],[1,"\\n"]],[]],null],[1," "],[8,[39,25],[[16,"disabled",[30,1,["disabled"]]],[16,"onclick",[28,[37,7],[[30,0],[33,26],[30,1,["data"]]],null]],[24,4,"reset"]],[["@text","@color"],["Cancel","secondary"]],null],[1,"\\n"],[41,[28,[37,23],[[30,2]],null],[[[1," "],[8,[39,27],null,[["@message"],["Are you sure you want to delete this key?"]],[["default"],[[[[1,"\\n "],[8,[39,9],null,[["@name"],["action"]],[["default"],[[[[1,"\\n "],[8,[39,25],[[16,"disabled",[30,1,["disabled"]]],[4,[38,28],["click",[28,[37,7],[[30,0],[30,3],[30,1,["delete"]]],null]],null]],[["@text","@color"],["Delete","critical"]],null],[1,"\\n "]],[3]]]]],[1,"\\n "],[8,[39,9],null,[["@name"],["dialog"]],[["default"],[[[[1,"\\n "],[8,[39,29],null,[["@message","@execute","@cancel"],[[30,6],[30,4],[30,5]]],null],[1,"\\n "]],[4,5,6]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null]],[]]],[1," "]],[]]]]],[1,"\\n "],[13],[1,"\\n"]],[2]]],[1," "]],[]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["api","disabld","confirm","execute","cancel","message"],false,["data-form","dc","nspace","partition","autofill","item","src","action","onsubmit","block-slot","let","cannot","disabled","or","if","left-trim","parent","eq","not-eq","last","json","code-editor","atob","not","hds/button-set","hds/button","oncancel","confirmation-dialog","on","delete-confirmation"]]',moduleName:"consul-ui/components/consul/kv/form/index.hbs",isStrictMode:!1}) +var o=(0,t.setComponentTemplate)(i,t.default.extend({tagName:"",encoder:(0,r.inject)("btoa"),json:!0,ondelete:function(){this.onsubmit(...arguments)},oncancel:function(){this.onsubmit(...arguments)},onsubmit:function(){},actions:{change:function(e,t){const n=t.getData() +try{t.handleEvent(e)}catch(r){const t=e.target +let i +switch(t.name){case"value":(0,l.set)(n,"Value",this.encoder.execute(t.value)) +break +case"additional":i=this.parent,(0,l.set)(n,"Key",`${"/"!==i?i:""}${t.value}`) +break +case"json":(0,l.set)(this,"json",!this.json) +break +default:throw r}}}}})) +e.default=o})),define("consul-ui/components/consul/kv/list/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"sbZrWnGU",block:'[[[1,"\\n"],[8,[39,0],[[24,0,"consul-kv-list"],[17,1]],[["@items"],[[30,2]]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"th"],[12],[1,"Name"],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["row"]],[["default"],[[[[1,"\\n "],[10,"td"],[15,0,[52,[30,3,["isFolder"]],"folder","file"]],[12],[1,"\\n "],[10,3],[15,6,[28,[37,3],[[52,[30,3,["isFolder"]],"dc.kv.folder","dc.kv.edit"],[30,3,["Key"]]],null]],[12],[1,[28,[35,4],[[28,[37,5],[[30,3,["Key"]],[30,5,["Key"]]],null],"/"],null]],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@expanded","@onchange","@keyboardAccess"],[[52,[28,[37,7],[[30,8],[30,6]],null],true,false],[28,[37,8],[[30,0],[30,7],[30,6]],null],false]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["trigger"]],[["default"],[[[[1,"\\n More\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["menu"]],[["default"],[[[[1,"\\n"],[41,[28,[37,9],["write kv"],[["item"],[[30,3]]]],[[[1," "],[10,"li"],[14,"role","none"],[12],[1,"\\n "],[10,3],[14,"role","menuitem"],[14,"tabindex","-1"],[15,6,[28,[37,3],[[52,[30,3,["isFolder"]],"dc.kv.folder","dc.kv.edit"],[30,3,["Key"]]],null]],[12],[1,[52,[30,3,["isFolder"]],"View","Edit"]],[13],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[14,"role","none"],[14,0,"dangerous"],[12],[1,"\\n "],[10,"label"],[15,"for",[30,9]],[14,"role","menuitem"],[14,"tabindex","-1"],[15,"onkeypress",[30,11]],[12],[1,"Delete"],[13],[1,"\\n "],[10,0],[14,"role","menu"],[12],[1,"\\n "],[8,[39,10],[[24,0,"warning"]],null,[["header","body","actions"],[[[[1,"\\n Confirm Delete\\n "]],[]],[[[1,"\\n "],[10,2],[12],[1,"\\n Are you sure you want to delete this KV entry?\\n "],[13],[1,"\\n "]],[]],[[[1,"\\n "],[8,[30,12,["Action"]],[[24,0,"dangerous"]],null,[["default"],[[[[1,"\\n "],[8,[39,8],[[24,0,"type-delete"],[24,"tabindex","-1"],[4,[38,11],["click",[28,[37,12],[[28,[37,8],[[30,0],[30,7]],null],[28,[37,8],[[30,0],[30,13],[30,3]],null]],null]],null]],null,[["default"],[[[[1,"\\n Delete\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,12,["Action"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,8],null,[["@for"],[[30,9]]],[["default"],[[[[1,"\\n Cancel\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[12]]]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],[[[1," "],[10,"li"],[14,"role","none"],[12],[1,"\\n "],[10,3],[14,"role","menuitem"],[14,"tabindex","-1"],[15,6,[28,[37,3],[[52,[30,3,["isFolder"]],"dc.kv.folder","dc.kv.edit"],[30,3,["Key"]]],null]],[12],[1,"View"],[13],[1,"\\n "],[13],[1,"\\n"]],[]]],[1," "]],[9,10,11]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6,7,8]]]]],[1,"\\n"]],[3,4]]]]]],["&attrs","@items","item","index","@parent","index","change","checked","confirm","send","keypressClick","Actions","@delete"],false,["tabular-collection","block-slot","if","href-to","right-trim","left-trim","popover-menu","eq","action","can","informed-action","on","queue"]]',moduleName:"consul-ui/components/consul/kv/list/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/kv/search-bar/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"zAAbqFtP",block:'[[[1,"\\n"],[8,[39,0],[[24,0,"consul-kv-search-bar"],[17,1]],[["@filter"],[[30,2]]],[["status","search","filter","sort"],[[[[1,"\\n\\n"],[44,[[28,[37,2],[[28,[37,3],["components.consul.kv.search-bar.",[30,3,["status","key"]]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","key"]]],null],[28,[37,3],["common.consul.",[30,3,["status","key"]]],null]],null]]]],[28,[37,2],[[28,[37,3],["components.consul.kv.search-bar.",[30,3,["status","value"]]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","value"]]],null],[28,[37,3],["common.consul.",[30,3,["status","value"]]],null]],null]]]]],[[[1," "],[8,[30,3,["RemoveFilter"]],[[16,"aria-label",[28,[37,2],["common.ui.remove"],[["item"],[[28,[37,3],[[30,4]," ",[30,5]],null]]]]]],null,[["default"],[[[[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,[30,4]],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,5]],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[4,5]]],[1,"\\n "]],[3]],[[[1,"\\n "],[8,[30,6,["Search"]],null,[["@onsearch","@value","@placeholder"],[[28,[37,5],[[30,0],[30,7]],null],[30,8],[28,[37,2],["common.search.search"],null]]],[["default"],[[[[1,"\\n"],[41,[30,2,["searchproperty"]],[[[1," "],[8,[30,6,["Select"]],[[24,0,"type-search-properties"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,2,["searchproperty","change"]]],null],true,true]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["common.search.searchproperty"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,9,["Optgroup"]],[30,9,["Option"]]],[[[42,[28,[37,9],[[28,[37,9],[[30,2,["searchproperty","default"]]],null]],null],null,[[[1," "],[8,[30,11],null,[["@value","@selected"],[[30,12],[28,[37,10],[[30,12],[30,2,["searchproperty","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["common.consul.",[28,[37,11],[[30,12]],null]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[12]],null]],[10,11]]],[1," "]],[]]]]],[1,"\\n "]],[9]]]]],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "]],[6]],[[[1,"\\n "],[8,[30,13,["Select"]],[[24,0,"type-kind"]],[["@position","@onchange","@multiple"],["left",[28,[37,5],[[30,0],[30,2,["kind","change"]]],null],true]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["components.consul.kv.search-bar.kind.name"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,14,["Optgroup"]],[30,14,["Option"]]],[[[42,[28,[37,9],[[28,[37,9],[[28,[37,4],["folder","key"],null]],null]],null],null,[[[1," "],[8,[30,16],[[24,0,"value-{item}}"]],[["@value","@selected"],[[30,17],[28,[37,10],[[30,17],[30,2,["kind","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["components.consul.kv.search-bar.kind.options.",[30,17]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[17]],null]],[15,16]]],[1," "]],[]]]]],[1,"\\n "]],[14]]]]],[1,"\\n "]],[13]],[[[1,"\\n "],[8,[30,18,["Select"]],[[24,0,"type-sort"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,19,["change"]]],null],false,true]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n"],[44,[[28,[37,12],[[28,[37,4],[[28,[37,4],["Key:asc",[28,[37,2],["common.sort.alpha.asc"],null]],null],[28,[37,4],["Key:desc",[28,[37,2],["common.sort.alpha.desc"],null]],null],[28,[37,4],["Kind:asc",[28,[37,2],["components.consul.kv.search-bar.sort.kind.asc"],null]],null],[28,[37,4],["Kind:desc",[28,[37,2],["components.consul.kv.search-bar.sort.kind.desc"],null]],null]],null]],null]],[[[1," "],[1,[28,[35,13],[[30,21],[30,19,["value"]]],null]],[1,"\\n"]],[21]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,20,["Optgroup"]],[30,20,["Option"]]],[[[1," "],[8,[30,22],null,[["@label"],[[28,[37,2],["common.consul.name"],null]]],[["default"],[[[[1,"\\n "],[8,[30,23],null,[["@value","@selected"],["Key:asc",[28,[37,14],["Key:asc",[30,19,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,23],null,[["@value","@selected"],["Key:desc",[28,[37,14],["Key:desc",[30,19,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,22],null,[["@label"],[[28,[37,2],["components.consul.kv.search-bar.kind.name"],null]]],[["default"],[[[[1,"\\n "],[8,[30,23],null,[["@value","@selected"],["Kind:asc",[28,[37,14],["Kind:asc",[30,19,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["components.consul.kv.search-bar.sort.kind.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,23],null,[["@value","@selected"],["Kind:desc",[28,[37,14],["Kind:desc",[30,19,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["components.consul.kv.search-bar.sort.kind.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[22,23]]],[1," "]],[]]]]],[1,"\\n "]],[20]]]]],[1,"\\n "]],[18]]]]],[1,"\\n"]],["&attrs","@filter","search","key","value","search","@onsearch","@search","components","Optgroup","Option","prop","search","components","Optgroup","Option","item","search","@sort","components","selectable","Optgroup","Option"],false,["search-bar","let","t","concat","array","action","if","block-slot","each","-track-array","includes","lowercase","from-entries","get","eq"]]',moduleName:"consul-ui/components/consul/kv/search-bar/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/loader/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"FplgL0cl",block:'[[[1,"\\n"],[11,0],[24,0,"consul-loader"],[17,1],[12],[1,"\\n "],[10,"svg"],[14,"xmlns","http://www.w3.org/2000/svg","http://www.w3.org/2000/xmlns/"],[14,"xmlns:xlink","http://www.w3.org/1999/xlink","http://www.w3.org/2000/xmlns/"],[14,"width","44px"],[14,"height","44px"],[14,"viewBox","0 0 44 44"],[14,"version","1.1"],[12],[1,"\\n "],[10,"g"],[12],[1,"\\n "],[10,"circle"],[14,"r","1"],[14,"cx","27"],[14,"cy","2"],[14,5,"transform-origin: 27px 2px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","1"],[14,"cx","17"],[14,"cy","2"],[14,5,"transform-origin: 17px 2px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","1"],[14,"cx","27"],[14,"cy","42"],[14,5,"transform-origin: 27px 42px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","1"],[14,"cx","17"],[14,"cy","42"],[14,5,"transform-origin: 17px 42px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","1"],[14,"cx","2"],[14,"cy","17"],[14,5,"transform-origin: 2px 17px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","1"],[14,"cx","2"],[14,"cy","27"],[14,5,"transform-origin: 2px 27px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","1"],[14,"cx","42"],[14,"cy","17"],[14,5,"transform-origin: 42px 17px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","1"],[14,"cx","42"],[14,"cy","27"],[14,5,"transform-origin: 42px 27px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","1"],[14,"cx","33"],[14,"cy","4"],[14,5,"transform-origin: 33px 4px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","1"],[14,"cx","11"],[14,"cy","4"],[14,5,"transform-origin: 11px 4px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","1"],[14,"cx","33"],[14,"cy","40"],[14,5,"transform-origin: 33px 40px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","1"],[14,"cx","11"],[14,"cy","40"],[14,5,"transform-origin: 11px 40px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","1"],[14,"cx","40"],[14,"cy","11"],[14,5,"transform-origin: 40px 11px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","1"],[14,"cx","4"],[14,"cy","33"],[14,5,"transform-origin: 4px 33px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","1"],[14,"cx","40"],[14,"cy","33"],[14,5,"transform-origin: 40px 33px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","1"],[14,"cx","4"],[14,"cy","11"],[14,5,"transform-origin: 4px 11px"],[12],[13],[1,"\\n "],[13],[1,"\\n "],[10,"g"],[12],[1,"\\n "],[10,"circle"],[14,"r","2"],[14,"cx","22"],[14,"cy","4"],[14,5,"transform-origin: 22px 4px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","2"],[14,"cx","22"],[14,"cy","40"],[14,5,"transform-origin: 22px 40px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","2"],[14,"cx","4"],[14,"cy","22"],[14,5,"transform-origin: 4px 22px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","2"],[14,"cx","40"],[14,"cy","22"],[14,5,"transform-origin: 40px 22px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","2"],[14,"cx","9"],[14,"cy","9"],[14,5,"transform-origin: 9px 9px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","2"],[14,"cx","35"],[14,"cy","35"],[14,5,"transform-origin: 35px 35px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","2"],[14,"cx","35"],[14,"cy","9"],[14,5,"transform-origin: 35px 9px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","2"],[14,"cx","9"],[14,"cy","35"],[14,5,"transform-origin: 9px 35px"],[12],[13],[1,"\\n "],[13],[1,"\\n "],[10,"g"],[12],[1,"\\n "],[10,"circle"],[14,"r","2"],[14,"cx","28"],[14,"cy","8"],[14,5,"transform-origin: 28px 8px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","2"],[14,"cx","16"],[14,"cy","8"],[14,5,"transform-origin: 16px 8px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","2"],[14,"cx","28"],[14,"cy","36"],[14,5,"transform-origin: 28px 36px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","2"],[14,"cx","16"],[14,"cy","36"],[14,5,"transform-origin: 16px 36px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","2"],[14,"cx","8"],[14,"cy","28"],[14,5,"transform-origin: 8px 28px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","2"],[14,"cx","8"],[14,"cy","16"],[14,5,"transform-origin: 8px 16px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","2"],[14,"cx","36"],[14,"cy","28"],[14,5,"transform-origin: 36px 28px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","2"],[14,"cx","36"],[14,"cy","16"],[14,5,"transform-origin: 36px 16px"],[12],[13],[1,"\\n "],[13],[1,"\\n "],[10,"g"],[12],[1,"\\n "],[10,"circle"],[14,"r","5"],[14,"cx","22"],[14,"cy","12"],[14,5,"transform-origin: 22px 12px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","5"],[14,"cx","22"],[14,"cy","32"],[14,5,"transform-origin: 22px 32px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","5"],[14,"cx","12"],[14,"cy","22"],[14,5,"transform-origin: 12px 22px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","5"],[14,"cx","32"],[14,"cy","22"],[14,5,"transform-origin: 32px 22px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","5"],[14,"cx","15"],[14,"cy","15"],[14,5,"transform-origin: 15px 15px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","5"],[14,"cx","29"],[14,"cy","29"],[14,5,"transform-origin: 29px 29px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","5"],[14,"cx","29"],[14,"cy","15"],[14,5,"transform-origin: 29px 15px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","5"],[14,"cx","15"],[14,"cy","29"],[14,5,"transform-origin: 15px 29px"],[12],[13],[1,"\\n "],[13],[1,"\\n "],[10,"g"],[12],[1,"\\n "],[10,"circle"],[14,"r","9"],[14,"cx","22"],[14,"cy","22"],[14,5,"transform-origin: 22px 22px"],[12],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"],[13],[1,"\\n"]],["&attrs"],false,[]]',moduleName:"consul-ui/components/consul/loader/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/lock-session/form/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"siqBOmFq",block:'[[[1,"\\n"],[11,0],[24,0,"consul-lock-session-form"],[17,1],[12],[1,"\\n "],[8,[39,0],null,[["@sink","@type","@label","@ondelete","@onchange"],[[28,[37,1],["/${partition}/${nspace}/${dc}/session",[28,[37,2],null,[["partition","nspace","dc"],[[30,2,["Partition"]],[30,2,["Namespace"]],[30,2,["Datacenter"]]]]]],null],"session","Lock Session",[28,[37,3],[[52,[30,3],[30,3],[30,4]],[30,2]],null],[28,[37,3],[[28,[37,5],[[30,4]],null],[30,2]],null]]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["removed"]],[["default"],[[[[1,"\\n "],[8,[39,7],[[4,[38,8],null,[["after"],[[28,[37,9],[[30,0],[30,6]],null]]]]],[["@type"],["remove"]],null],[1,"\\n "]],[6]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,7],[[4,[38,8],null,[["after"],[[28,[37,9],[[30,0],[30,7]],null]]]]],[["@type","@error"],["remove",[30,8]]],null],[1,"\\n "]],[7,8]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[10,0],[14,0,"definition-table"],[12],[1,"\\n "],[10,"dl"],[12],[1,"\\n"],[41,[30,2,["Name"]],[[[1," "],[10,"dt"],[12],[1,"Name"],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,2,["Name"]]],[13],[1,"\\n"]],[]],null],[1," "],[10,"dt"],[12],[1,"ID"],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,2,["ID"]]],[13],[1,"\\n "],[10,"dt"],[12],[1,"Node"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,10],null,[["@text","@icon","@href","@isHrefExternal","@size","@color"],[[30,2,["Node"]],"git-commit",[28,[37,11],["dc.nodes.show",[30,2,["Node"]]],null],false,"small","tertiary"]],null],[1,"\\n "],[13],[1,"\\n "],[10,"dt"],[12],[1,"Delay"],[13],[1,"\\n "],[10,"dd"],[12],[1,[28,[35,12],[[30,2,["LockDelay"]]],null]],[13],[1,"\\n "],[10,"dt"],[12],[1,"TTL"],[13],[1,"\\n "],[10,"dd"],[12],[1,[28,[35,13],[[30,2,["TTL"]],"-"],null]],[13],[1,"\\n "],[10,"dt"],[12],[1,"Behavior"],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,2,["Behavior"]]],[13],[1,"\\n"],[44,[[30,2,["checks"]]],[[[1," "],[10,"dt"],[12],[1,"Health Checks"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n"],[41,[28,[37,15],[[30,9,["length"]],0],null],[[[1," "],[1,[28,[35,16],[", ",[30,9]],null]],[1,"\\n"]],[]],[[[1," -\\n"]],[]]],[1," "],[13],[1,"\\n"]],[9]]],[1," "],[13],[1,"\\n "],[13],[1,"\\n"],[41,[28,[37,17],["delete session"],[["item"],[[30,2]]]],[[[1," "],[8,[39,18],null,[["@message"],["Are you sure you want to invalidate this Lock Session?"]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["action"]],[["default"],[[[[1,"\\n "],[8,[39,10],[[4,[38,19],["click",[28,[37,3],[[30,10],[28,[37,3],[[30,5,["delete"]],[30,2]],null]],null]],null]],[["@text","@color"],["Invalidate Session","critical"]],null],[1,"\\n "]],[10]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["dialog"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n "],[1,[30,13]],[1,"\\n "],[13],[1,"\\n "],[8,[39,20],null,null,[["default"],[[[[1,"\\n "],[8,[39,10],[[4,[38,19],["click",[28,[37,3],[[30,11]],null]],null]],[["@text","@color"],["Confirm Invalidation","critical"]],null],[1,"\\n "],[8,[39,10],[[4,[38,19],["click",[28,[37,3],[[30,12]],null]],null]],[["@text","@color"],["Cancel","secondary"]],null],[1,"\\n "]],[]]]]],[1,"\\n "]],[11,12,13]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "]],[5]]]]],[1,"\\n"],[13]],["&attrs","@item","@ondelete","@onsubmit","writer","after","after","error","checks","confirm","execute","cancel","message"],false,["data-writer","uri","hash","fn","if","optional","block-slot","consul/lock-session/notifications","notification","action","hds/button","href-to","duration-from","or","let","gt","join","can","confirmation-dialog","on","hds/button-set"]]',moduleName:"consul-ui/components/consul/lock-session/form/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/lock-session/list/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"W2kUeHox",block:'[[[1,"\\n"],[8,[39,0],[[24,0,"consul-lock-session-list"],[17,1]],[["@items"],[[30,2]]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n"],[41,[30,3,["Name"]],[[[1," "],[10,1],[12],[1,[30,3,["Name"]]],[13],[1,"\\n"]],[]],[[[1," "],[10,1],[12],[1,"\\n "],[1,[30,3,["ID"]]],[1,"\\n "],[8,[39,3],null,[["@value","@name"],[[30,3,["ID"]],"ID"]],null],[1,"\\n "],[13],[1,"\\n"]],[]]],[1," "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["details"]],[["default"],[[[[1,"\\n"],[41,[30,3,["Name"]],[[[1," "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n ID\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,3],null,[["@value","@name"],[[30,3,["ID"]],"ID"]],null],[1,"\\n "],[1,[30,3,["ID"]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1," "],[10,"dl"],[14,0,"lock-delay"],[12],[1,"\\n "],[11,"dt"],[4,[38,4],null,null],[12],[1,"\\n Delay\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,[28,[35,5],[[30,3,["LockDelay"]]],null]],[13],[1,"\\n "],[13],[1,"\\n "],[10,"dl"],[14,0,"ttl"],[12],[1,"\\n "],[11,"dt"],[4,[38,4],null,null],[12],[1,"\\n TTL\\n "],[13],[1,"\\n"],[41,[28,[37,6],[[30,3,["TTL"]],""],null],[[[1," "],[10,"dd"],[12],[1,"-"],[13],[1,"\\n"]],[]],[[[1," "],[10,"dd"],[12],[1,[30,3,["TTL"]]],[13],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n "],[10,"dl"],[14,0,"behavior"],[12],[1,"\\n "],[11,"dt"],[4,[38,4],null,null],[12],[1,"\\n Behavior\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,3,["Behavior"]]],[13],[1,"\\n "],[13],[1,"\\n"],[44,[[28,[37,8],[[30,3,["NodeChecks"]],[30,3,["ServiceChecks"]]],null]],[[[1," "],[10,"dl"],[14,0,"checks"],[12],[1,"\\n "],[11,"dt"],[4,[38,4],null,null],[12],[1,"\\n Checks\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n"],[41,[28,[37,9],[[30,5,["length"]],0],null],[[[42,[28,[37,11],[[28,[37,11],[[30,5]],null]],null],null,[[[1," "],[10,1],[12],[1,[30,6]],[13],[1,"\\n"]],[6]],null]],[]],[[[1," -\\n"]],[]]],[1," "],[13],[1,"\\n "],[13],[1,"\\n"]],[5]]],[1," "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[8,[39,12],null,[["@message"],["Are you sure you want to invalidate this session?"]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["action"]],[["default"],[[[[1,"\\n "],[8,[39,13],[[4,[38,14],["click",[28,[37,15],[[30,7],[28,[37,15],[[30,8],[30,3]],null]],null]],null]],[["@text","@color"],["Invalidate","critical"]],null],[1,"\\n "]],[7]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["dialog"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n "],[1,[30,11]],[1,"\\n "],[13],[1,"\\n "],[8,[39,16],null,null,[["default"],[[[[1,"\\n "],[8,[39,13],[[4,[38,14],["click",[28,[37,15],[[30,9]],null]],null]],[["@text","@color"],["Confirm Invalidate","critical"]],null],[1,"\\n "],[8,[39,13],[[4,[38,14],["click",[28,[37,15],[[30,10]],null]],null]],[["@text","@color"],["Cancel","secondary"]],null],[1,"\\n "]],[]]]]],[1,"\\n "]],[9,10,11]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[3,4]]]]]],["&attrs","@items","item","index","checks","item","confirm","@ondelete","execute","cancel","message"],false,["list-collection","block-slot","if","consul-copy-button","tooltip","duration-from","eq","let","union","gt","each","-track-array","confirmation-dialog","hds/button","on","fn","hds/button-set"]]',moduleName:"consul-ui/components/consul/lock-session/list/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/lock-session/notifications/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"31+K+XMy",block:'[[[1,"\\n"],[41,[28,[37,1],[[30,1],"remove"],null],[[[41,[30,2],[[[1," "],[8,[39,2],[[17,3]],[["@color"],["critical"]],[["default"],[[[[1,"\\n "],[8,[30,4,["Title"]],null,null,[["default"],[[[[1,"Error!"]],[]]]]],[1,"\\n "],[8,[30,4,["Description"]],null,null,[["default"],[[[[1,"\\n There was an error invalidating the Lock Session.\\n"],[41,[28,[37,3],[[30,2,["status"]],[30,2,["detail"]]],null],[[[1," "],[10,"br"],[12],[13],[1,[30,2,["status"]]],[1,": "],[1,[30,2,["detail"]]],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "]],[4]]]]],[1,"\\n"]],[]],[[[1," "],[8,[39,2],[[17,3]],[["@color"],["success"]],[["default"],[[[[1,"\\n "],[8,[30,5,["Title"]],null,null,[["default"],[[[[1,"Success!"]],[]]]]],[1,"\\n "],[8,[30,5,["Description"]],null,null,[["default"],[[[[1,"\\n Your Lock Session has been invalidated.\\n "]],[]]]]],[1,"\\n "]],[5]]]]],[1,"\\n"]],[]]]],[]],[[[41,[28,[37,1],[[30,1],"kv"],null],[[[1," "],[8,[39,4],[[24,0,"mb-3"]],[["@type","@color"],["inline","warning"]],[["default"],[[[[1,"\\n "],[8,[30,6,["Title"]],null,null,[["default"],[[[[1,"Warning"]],[]]]]],[1,"\\n "],[8,[30,6,["Description"]],null,null,[["default"],[[[[1,"This KV has a lock session. You can edit KV\'s with lock sessions, but we recommend doing so with care, or not doing so at all. It may negatively impact the active node it\'s associated with. See below for more details on the Lock Session."]],[]]]]],[1,"\\n "],[8,[30,6,["Link::Standalone"]],null,[["@text","@href","@icon","@iconPosition"],["Learn more",[29,[[28,[37,5],["CONSUL_DOCS_URL"],null],"/internals/sessions.html"]],"docs-link","trailing"]],null],[1,"\\n "]],[6]]]]],[1,"\\n"]],[]],null]],[]]]],["@type","@error","&attrs","T","T","A"],false,["if","eq","hds/toast","and","hds/alert","env"]]',moduleName:"consul-ui/components/consul/lock-session/notifications/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/metadata/list/index",["exports","@ember/component","@ember/template-factory"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const l=(0,n.createTemplateFactory)({id:"8Eqo0Hvc",block:'[[[1,"\\n"],[8,[39,0],[[24,0,"consul-metadata-list"]],[["@items"],[[99,1,["@items"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"th"],[12],[1,"Key"],[13],[1,"\\n "],[10,"th"],[12],[1,"Value"],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,2],null,[["@name"],["row"]],[["default"],[[[[1,"\\n "],[10,"td"],[12],[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,3],[0,[30,1]],null]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[10,"td"],[12],[1,"\\n "],[10,1],[12],[1,[28,[35,3],[1,[30,1]],null]],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[1,2]]]]],[1,"\\n"]],["item","index"],false,["tabular-collection","items","block-slot","object-at"]]',moduleName:"consul-ui/components/consul/metadata/list/index.hbs",isStrictMode:!1}) +var r=(0,t.setComponentTemplate)(l,t.default.extend({tagName:""})) +e.default=r})),define("consul-ui/components/consul/node-identity/template/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"FtkBULd3",block:'[[[1,"\\n"],[41,[28,[37,1],["use partitions"],null],[[[1,"partition \\""],[1,[28,[35,2],[[30,1],"default"],null]],[1,"\\" {\\n"],[41,[28,[37,1],["use nspaces"],null],[[[1," namespace \\"default\\" {\\n node \\""],[1,[30,2]],[1,"\\" {\\n\\t policy = \\"write\\"\\n }\\n }\\n namespace_prefix \\"\\" {\\n service_prefix \\"\\" {\\n\\t policy = \\"read\\"\\n }\\n }\\n"]],[]],[[[1," node \\""],[1,[30,2]],[1,"\\" {\\n\\t policy = \\"write\\"\\n }\\n service_prefix \\"\\" {\\n\\t policy = \\"read\\"\\n }\\n"]],[]]],[1,"}"]],[]],[[[41,[28,[37,1],["use nspaces"],null],[[[1,"namespace \\"default\\" {\\n node \\""],[1,[30,2]],[1,"\\" {\\n\\t policy = \\"write\\"\\n }\\n}\\nnamespace_prefix \\"\\" {\\n service_prefix \\"\\" {\\n\\t policy = \\"read\\"\\n }\\n}\\n"]],[]],[[[1,"node \\""],[1,[30,2]],[1,"\\" {\\n\\tpolicy = \\"write\\"\\n}\\nservice_prefix \\"\\" {\\n\\tpolicy = \\"read\\"\\n}"]],[]]]],[]]]],["@partition","@name"],false,["if","can","or"]]',moduleName:"consul-ui/components/consul/node-identity/template/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/node/agentless-notice/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@ember/object","consul-ui/services/local-storage"],(function(e,t,n,l,r,i){var o,a,u +function s(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function c(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const d=(0,n.createTemplateFactory)({id:"gCCXUOqK",block:'[[[1,"\\n"],[41,[33,1],[[[1," "],[8,[39,2],[[24,0,"mb-3 mt-2 agentless-node-notice"]],[["@type"],["inline"]],[["default"],[[[[1,"\\n "],[8,[30,1,["Title"]],null,null,[["default"],[[[[1,"\\n "],[10,1],[12],[1,[28,[35,3],["routes.dc.nodes.index.agentless.notice.header"],null]],[13],[1,"\\n "],[8,[39,4],[[4,[38,5],["click",[30,0,["dismissAgentlessNotice"]]],null]],[["@color","@text","@icon","@size","@isIconOnly"],["secondary","Dismiss notice","x","small",true]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,1,["Description"]],null,null,[["default"],[[[[1,[28,[35,3],["routes.dc.nodes.index.agentless.notice.body"],null]]],[]]]]],[1,"\\n "],[8,[30,1,["Link::Standalone"]],null,[["@href","@text","@icon","@iconPosition"],[[29,[[28,[37,6],["CONSUL_DOCS_DEVELOPER_URL"],null],"/connect/dataplane"]],[28,[37,3],["routes.dc.nodes.index.agentless.notice.footer"],null],"docs-link","trailing"]],null],[1,"\\n "]],[1]]]]],[1,"\\n"]],[]],null]],["A"],false,["if","isVisible","hds/alert","t","hds/button","on","env"]]',moduleName:"consul-ui/components/consul/node/agentless-notice/index.hbs",isStrictMode:!1}) +let p=(o=(0,i.storageFor)("notices"),a=class extends l.default{constructor(){var e,t,n,l +super(...arguments),s(this,"storageKey","nodes-agentless-dismissed"),e=this,t="notices",l=this,(n=u)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0}),this.args.postfix&&(this.storageKey=`nodes-agentless-dismissed-${this.args.postfix}`)}get isVisible(){const{items:e,filteredItems:t}=this.args +return!this.notices.state.includes(this.storageKey)&&e.length>t.length}dismissAgentlessNotice(){this.notices.add(this.storageKey)}},u=c(a.prototype,"notices",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),c(a.prototype,"dismissAgentlessNotice",[r.action],Object.getOwnPropertyDescriptor(a.prototype,"dismissAgentlessNotice"),a.prototype),a) +e.default=p,(0,t.setComponentTemplate)(d,p)})),define("consul-ui/components/consul/node/list/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"+A6LiBf2",block:'[[[1,"\\n"],[8,[39,0],[[24,0,"consul-node-list"]],[["@items"],[[30,1]]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"dl"],[15,0,[30,2,["Status"]]],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n Health\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,2],null,[["@position"],["top-start"]],[["default"],[[[[1,"\\n"],[41,[28,[37,4],["critical",[30,2,["Status"]]],null],[[[1," At least one health check on this node is failing.\\n"]],[]],[[[41,[28,[37,4],["warning",[30,2,["Status"]]],null],[[[1," At least one health check on this node has a warning.\\n"]],[]],[[[41,[28,[37,4],["passing",[30,2,["Status"]]],null],[[[1," All health checks are passing.\\n"]],[]],[[[1," There are no health checks.\\n "]],[]]]],[]]]],[]]],[1," "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[10,3],[15,6,[28,[37,5],["dc.nodes.show",[30,2,["Node"]]],[["params"],[[28,[37,6],null,[["peer"],[[30,2,["PeerName"]]]]]]]]],[12],[1,"\\n "],[1,[30,2,["Node"]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["details"]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@item"],[[30,2]]],null],[1,"\\n"],[41,[28,[37,4],[[30,2,["Address"]],[30,4,["Address"]]],null],[[[1," "],[10,1],[14,0,"leader"],[12],[1,"Leader"],[13],[1,"\\n"]],[]],null],[1," "],[10,1],[12],[1,"\\n "],[1,[28,[35,8],[[30,2,["MeshServiceInstances","length"]]],null]],[1," "],[1,[28,[35,9],[[30,2,["MeshServiceInstances","length"]],"Service"],[["without-count"],[true]]]],[1,"\\n "],[13],[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n "],[10,1],[12],[1,"Address"],[13],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,10],null,[["@value","@name"],[[30,2,["Address"]],"Address"]],null],[1,"\\n "],[1,[30,2,["Address"]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n "],[10,1],[12],[1,"ConsulVersion"],[13],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n"],[41,[30,2,["Meta","consul-version"]],[[[1," "],[8,[39,11],[[24,0,"w-4 h-4"]],[["@size","@name","@stretched"],["24","consul-color",true]],null],[1,"\\n "],[10,1],[12],[1,"v"],[1,[30,2,["Meta","consul-version"]]],[13],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[2,3]]]]],[1,"\\n"]],["@items","item","index","@leader"],false,["list-collection","block-slot","tooltip","if","eq","href-to","hash","consul/node/peer-info","format-number","pluralize","consul-copy-button","flight-icon"]]',moduleName:"consul-ui/components/consul/node/list/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/node/peer-info/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"ufFBkLZx",block:'[[[1,"\\n"],[41,[30,1,["PeerName"]],[[[1," "],[10,1],[14,0,"consul-node-peer-info"],[12],[1,"\\n "],[11,"svg"],[24,"width","16"],[24,"height","16"],[24,"viewBox","0 0 16 16"],[24,"fill","none"],[24,"xmlns","http://www.w3.org/2000/svg","http://www.w3.org/2000/xmlns/"],[4,[38,1],["Peer"],null],[12],[1,"\\n "],[10,"path"],[14,"d","M16 8C16 7.80109 15.921 7.61032 15.7803 7.46967L12.2803 3.96967C11.9874 3.67678 11.5126 3.67678 11.2197 3.96967C10.9268 4.26256 10.9268 4.73744 11.2197 5.03033L14.1893 8L11.2197 10.9697C10.9268 11.2626 10.9268 11.7374 11.2197 12.0303C11.5126 12.3232 11.9874 12.3232 12.2803 12.0303L15.7803 8.53033C15.921 8.38968 16 8.19891 16 8Z"],[14,"fill","#77838A"],[12],[13],[1,"\\n "],[10,"path"],[14,"d","M0.21967 8.53033C-0.0732233 8.23744 -0.0732233 7.76256 0.21967 7.46967L3.71967 3.96967C4.01256 3.67678 4.48744 3.67678 4.78033 3.96967C5.07322 4.26256 5.07322 4.73744 4.78033 5.03033L1.81066 8L4.78033 10.9697C5.07322 11.2626 5.07322 11.7374 4.78033 12.0303C4.48744 12.3232 4.01256 12.3232 3.71967 12.0303L0.21967 8.53033Z"],[14,"fill","#77838A"],[12],[13],[1,"\\n "],[10,"path"],[14,"d","M5 7C4.44772 7 4 7.44772 4 8C4 8.55229 4.44772 9 5 9H5.01C5.56228 9 6.01 8.55229 6.01 8C6.01 7.44772 5.56228 7 5.01 7H5Z"],[14,"fill","#77838A"],[12],[13],[1,"\\n "],[10,"path"],[14,"d","M7 8C7 7.44772 7.44772 7 8 7H8.01C8.56228 7 9.01 7.44772 9.01 8C9.01 8.55229 8.56228 9 8.01 9H8C7.44772 9 7 8.55229 7 8Z"],[14,"fill","#77838A"],[12],[13],[1,"\\n "],[10,"path"],[14,"d","M11 7C10.4477 7 10 7.44772 10 8C10 8.55229 10.4477 9 11 9H11.01C11.5623 9 12.01 8.55229 12.01 8C12.01 7.44772 11.5623 7 11.01 7H11Z"],[14,"fill","#77838A"],[12],[13],[1,"\\n "],[13],[1,"\\n "],[10,1],[14,0,"consul-node-peer-info__name"],[12],[1,[30,1,["PeerName"]]],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null]],["@item"],false,["if","tooltip"]]',moduleName:"consul-ui/components/consul/node/peer-info/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})) +define("consul-ui/components/consul/node/search-bar/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"XAC5AQJw",block:'[[[1,"\\n"],[8,[39,0],[[24,0,"consul-node-search-bar"],[17,1]],[["@filter"],[[30,2]]],[["status","search","filter","sort"],[[[[1,"\\n\\n"],[44,[[28,[37,2],[[28,[37,3],["components.consul.node.search-bar.",[30,3,["status","key"]]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","key"]]],null],[28,[37,3],["common.consul.",[30,3,["status","key"]]],null]],null]]]],[52,[30,3,["status","value"]],[30,3,["status","value"]],[28,[37,2],[[28,[37,3],["components.consul.node.search-bar.",[30,3,["status","value"]]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","value"]]],null],[28,[37,3],["common.consul.",[30,3,["status","value"]]],null],[28,[37,3],["common.brand.",[30,3,["status","value"]]],null]],null]]]]]],[[[1," "],[8,[30,3,["RemoveFilter"]],[[16,"aria-label",[28,[37,2],["common.ui.remove"],[["item"],[[28,[37,3],[[30,4]," ",[30,5]],null]]]]]],null,[["default"],[[[[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,[30,4]],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,5]],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[4,5]]],[1,"\\n "]],[3]],[[[1,"\\n "],[8,[30,6,["Search"]],null,[["@onsearch","@value","@placeholder"],[[28,[37,6],[[30,0],[30,7]],null],[30,8],[28,[37,2],["common.search.search"],null]]],[["default"],[[[[1,"\\n "],[8,[30,6,["Select"]],[[24,0,"type-search-properties"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,6],[[30,0],[30,2,["searchproperty","change"]]],null],true,true]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["common.search.searchproperty"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,9,["Optgroup"]],[30,9,["Option"]]],[[[42,[28,[37,9],[[28,[37,9],[[30,2,["searchproperty","default"]]],null]],null],null,[[[1," "],[8,[30,11],null,[["@value","@selected"],[[30,12],[28,[37,10],[[30,12],[30,2,["searchproperty","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["common.consul.",[28,[37,11],[[30,12]],null]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[12]],null]],[10,11]]],[1," "]],[]]]]],[1,"\\n "]],[9]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]],[[[1,"\\n "],[8,[30,13,["Select"]],[[24,0,"type-status"]],[["@position","@onchange","@multiple"],["left",[28,[37,6],[[30,0],[30,2,["status","change"]]],null],true]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["common.consul.status"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,14,["Optgroup"]],[30,14,["Option"]]],[[[42,[28,[37,9],[[28,[37,9],[[28,[37,4],["passing","warning","critical"],null]],null]],null],null,[[[1," "],[8,[30,16],[[16,0,[29,["value-",[30,17]]]]],[["@value","@selected"],[[30,17],[28,[37,10],[[30,17],[30,2,["status","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["common.consul.",[30,17]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,17]],null]],null]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[17]],null]],[15,16]]],[1," "]],[]]]]],[1,"\\n "]],[14]]]]],[1,"\\n "],[8,[30,13,["Select"]],[[24,0,"type-version"]],[["@position","@onchange","@multiple"],["left",[28,[37,6],[[30,0],[30,2,["version","change"]]],null],true]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["common.consul.version"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,18,["Optgroup"]],[30,18,["Option"]]],[[[42,[28,[37,9],[[28,[37,9],[[30,21]],null]],null],null,[[[1," "],[8,[30,20],null,[["@value","@selected"],[[30,22],[28,[37,10],[[30,22],[30,2,["version","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,3],[[30,22],".x"],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[22]],null]],[19,20]]],[1," "]],[]]]]],[1,"\\n "]],[18]]]]],[1,"\\n "]],[13]],[[[1,"\\n "],[8,[30,23,["Select"]],[[24,0,"type-sort"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,6],[[30,0],[30,24,["change"]]],null],false,true]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n"],[44,[[28,[37,12],[[28,[37,4],[[28,[37,4],["Node:asc",[28,[37,2],["common.sort.alpha.asc"],null]],null],[28,[37,4],["Node:desc",[28,[37,2],["common.sort.alpha.desc"],null]],null],[28,[37,4],["Status:asc",[28,[37,2],["common.sort.status.asc"],null]],null],[28,[37,4],["Status:desc",[28,[37,2],["common.sort.status.desc"],null]],null],[28,[37,4],["Version:asc",[28,[37,2],["common.sort.version.asc"],null]],null],[28,[37,4],["Version:desc",[28,[37,2],["common.sort.version.desc"],null]],null]],null]],null]],[[[1," "],[1,[28,[35,13],[[30,26],[30,24,["value"]]],null]],[1,"\\n"]],[26]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,25,["Optgroup"]],[30,25,["Option"]]],[[[1," "],[8,[30,27],null,[["@label"],[[28,[37,2],["common.consul.status"],null]]],[["default"],[[[[1,"\\n "],[8,[30,28],null,[["@value","@selected"],["Status:asc",[28,[37,14],["Status:asc",[30,24,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.status.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,28],null,[["@value","@selected"],["Status:desc",[28,[37,14],["Status:desc",[30,24,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.status.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,27],null,[["@label"],[[28,[37,2],["common.consul.node-name"],null]]],[["default"],[[[[1,"\\n "],[8,[30,28],null,[["@value","@selected"],["Node:asc",[28,[37,14],["Node:asc",[30,24,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,28],null,[["@value","@selected"],["Node:desc",[28,[37,14],["Node:desc",[30,24,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,27],null,[["@label"],[[28,[37,2],["common.consul.version"],null]]],[["default"],[[[[1,"\\n "],[8,[30,28],null,[["@value","@selected"],["Version:asc",[28,[37,14],["Version:asc",[30,24,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.version.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,28],null,[["@value","@selected"],["Version:desc",[28,[37,14],["Version:desc",[30,24,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.version.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[27,28]]],[1," "]],[]]]]],[1,"\\n "]],[25]]]]],[1,"\\n "]],[23]]]]]],["&attrs","@filter","search","key","value","search","@onsearch","@search","components","Optgroup","Option","prop","search","components","Optgroup","Option","state","components","Optgroup","Option","@versions","version","search","@sort","components","selectable","Optgroup","Option"],false,["search-bar","let","t","concat","array","if","action","block-slot","each","-track-array","includes","lowercase","from-entries","get","eq"]]',moduleName:"consul-ui/components/consul/node/search-bar/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/nspace/form/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@ember/object"],(function(e,t,n,l,r){var i +function o(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const a=(0,n.createTemplateFactory)({id:"0A+rYSOU",block:'[[[1,"\\n"],[11,0],[24,0,"consul-nspace-form"],[17,1],[12],[1,"\\n "],[8,[39,0],null,[["@sink","@type","@label","@ondelete","@onchange"],[[28,[37,1],["/${partition}/${nspace}/${dc}/nspace",[28,[37,2],null,[["partition","nspace","dc"],["","",[30,2,["Datacenter"]]]]]],null],"nspace","Namespace",[28,[37,3],[[30,0,["onDelete"]],[30,2]],null],[28,[37,3],[[30,0,["onSubmit"]],[30,2]],null]]],[["default"],[[[[1,"\\n "],[8,[39,4],null,[["@name"],["removed"]],[["default"],[[[[1,"\\n "],[8,[39,5],[[4,[38,6],null,[["after"],[[28,[37,7],[[30,0],[30,4]],null]]]]],[["@type"],["remove"]],null],[1,"\\n "]],[4]]]]],[1,"\\n\\n "],[8,[39,4],null,[["@name"],["content"]],[["default"],[[[[1,"\\n\\n"],[44,[[28,[37,9],[[28,[37,10],["write nspaces"],null]],null],[30,2],[28,[37,2],null,[["help","Name"],["Must be a valid DNS hostname. Must contain 1-64 characters (numbers, letters, and hyphens), and must begin with a letter. Once created, this cannot be changed.",[28,[37,11],[[28,[37,2],null,[["test","error"],["^[a-zA-Z0-9]([a-zA-Z0-9-]{0,62}[a-zA-Z0-9])?$","Name must be a valid DNS hostname."]]]],null]]]],[28,[37,2],null,[["Description"],[[28,[37,11],null,null]]]]],[[[1," "],[11,"form"],[4,[38,12],["submit",[28,[37,3],[[30,3,["persist"]],[30,6]],null]],null],[4,[38,13],[[30,5]],null],[12],[1,"\\n\\n "],[8,[39,14],null,[["@src"],[[28,[37,14],["validate"],null]]],[["default"],[[[[1,"\\n\\n "],[10,"fieldset"],[12],[1,"\\n"],[41,[28,[37,16],["new nspace"],[["item"],[[30,6]]]],[[[1," "],[8,[39,17],null,[["@name","@placeholder","@item","@validations","@chart"],["Name","Name",[30,6],[30,7],[28,[37,2],null,[["state","dispatch"],[[30,13],[30,12]]]]]],null],[1,"\\n"]],[]],null],[1," "],[8,[39,17],null,[["@expanded","@name","@label","@item","@validations","@chart"],[true,"Description","Description (Optional)",[30,6],[30,8],[28,[37,2],null,[["state","dispatch"],[[30,13],[30,12]]]]]],null],[1,"\\n "],[13],[1,"\\n"],[41,[28,[37,10],["use acls"],null],[[[1," "],[10,"fieldset"],[14,1,"roles"],[12],[1,"\\n "],[10,"h2"],[12],[1,"Roles"],[13],[1,"\\n "],[10,2],[12],[1,"\\n"],[41,[28,[37,10],["write nspace"],[["item"],[[30,6]]]],[[[1," By adding roles to this namespaces, you will apply them to\\n all tokens created within this namespace.\\n"]],[]],[[[1," The following roles are applied to all tokens created within\\n this namespace.\\n"]],[]]],[1," "],[13],[1,"\\n "],[8,[39,18],null,[["@dc","@nspace","@partition","@disabled","@items"],[[30,14],"default",[30,15],[30,5],[30,6,["ACLs","RoleDefaults"]]]],null],[1,"\\n "],[13],[1,"\\n "],[10,"fieldset"],[14,1,"policies"],[12],[1,"\\n "],[10,"h2"],[12],[1,"Policies"],[13],[1,"\\n "],[10,2],[12],[1,"\\n"],[41,[28,[37,9],[[30,5]],null],[[[1," By adding policies to this namespace, you will apply them to\\n all tokens created within this namespace.\\n"]],[]],[[[1," The following policies are applied to all tokens created\\n within this namespace.\\n"]],[]]],[1," "],[13],[1,"\\n "],[8,[39,19],null,[["@dc","@nspace","@partition","@disabled","@allowIdentity","@items"],[[30,14],"default",[30,15],[30,5],false,[30,6,["ACLs","PolicyDefaults"]]]],null],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1," "],[10,0],[12],[1,"\\n "],[8,[39,20],null,null,[["default"],[[[[1,"\\n"],[41,[28,[37,21],[[28,[37,16],["new nspace"],[["item"],[[30,6]]]],[28,[37,10],["create nspaces"],null]],null],[[[1," "],[8,[39,22],[[16,"disabled",[28,[37,23],[[28,[37,16],["pristine nspace"],[["item"],[[30,6]]]],[28,[37,24],[[30,13],"error"],null]],null]],[24,4,"submit"]],[["@text"],["Save"]],null],[1,"\\n"]],[]],[[[41,[28,[37,10],["write nspace"],[["item"],[[30,6]]]],[[[1," "],[8,[39,22],[[24,4,"submit"]],[["@text"],["Save"]],null],[1,"\\n "]],[]],null]],[]]],[1,"\\n "],[8,[39,22],[[24,4,"reset"],[4,[38,12],["click",[28,[37,3],[[30,0,["onCancel"]],[30,6]],null]],null]],[["@color","@text"],["secondary","Cancel"]],null],[1,"\\n\\n"],[41,[28,[37,21],[[28,[37,9],[[28,[37,16],["new nspace"],[["item"],[[30,6]]]]],null],[28,[37,10],["delete nspace"],[["item"],[[30,6]]]]],null],[[[1," "],[8,[39,25],null,[["@message"],["Are you sure you want to delete this Namespace?"]],[["default"],[[[[1,"\\n "],[8,[39,4],null,[["@name"],["action"]],[["default"],[[[[1,"\\n "],[8,[39,22],[[4,[38,12],["click",[28,[37,3],[[30,16],[28,[37,3],[[30,3,["delete"]],[30,6]],null]],null]],null]],[["@color","@text"],["critical","Delete"]],null],[1,"\\n "]],[16]]]]],[1,"\\n "],[8,[39,4],null,[["@name"],["dialog"]],[["default"],[[[[1,"\\n "],[8,[39,26],null,[["@message","@execute","@cancel"],[[30,19],[30,17],[30,18]]],null],[1,"\\n "]],[17,18,19]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[13],[1,"\\n "]],[9,10,11,12,13]]]]],[1,"\\n "],[13],[1,"\\n"]],[5,6,7,8]]],[1," "]],[]]]]],[1,"\\n "]],[3]]]]],[1,"\\n"],[13]],["&attrs","@item","writer","after","readOnly","item","Name","Description","State","Guard","ChartAction","dispatch","state","@dc","@partition","confirm","execute","cancel","message"],false,["data-writer","uri","hash","fn","block-slot","consul/nspace/notifications","notification","action","let","not","can","array","on","disabled","state-chart","if","is","text-input","role-selector","policy-selector","hds/button-set","and","hds/button","or","state-matches","confirmation-dialog","delete-confirmation"]]',moduleName:"consul-ui/components/consul/nspace/form/index.hbs",isStrictMode:!1}) +let u=(o((i=class extends l.default{onSubmit(e){const t=this.args.onsubmit +if(t)return t(e)}onDelete(e){const{onsubmit:t,ondelete:n}=this.args +return n?n(e):t?t(e):void 0}onCancel(e){const{oncancel:t,onsubmit:n}=this.args +return t?t(e):n?n(e):void 0}}).prototype,"onSubmit",[r.action],Object.getOwnPropertyDescriptor(i.prototype,"onSubmit"),i.prototype),o(i.prototype,"onDelete",[r.action],Object.getOwnPropertyDescriptor(i.prototype,"onDelete"),i.prototype),o(i.prototype,"onCancel",[r.action],Object.getOwnPropertyDescriptor(i.prototype,"onCancel"),i.prototype),i) +e.default=u,(0,t.setComponentTemplate)(a,u)})),define("consul-ui/components/consul/nspace/list/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"5DLhAB/n",block:'[[[1,"\\n"],[8,[39,0],[[24,0,"consul-nspace-list"],[17,1]],[["@items","@linkable"],[[30,2],"linkable nspace"]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n"],[41,[30,3,["DeletedAt"]],[[[1," "],[10,2],[12],[1,"\\n Deleting "],[1,[30,3,["Name"]]],[1,"...\\n "],[13],[1,"\\n"]],[]],[[[1," "],[10,3],[15,6,[28,[37,3],["dc.nspaces.edit",[30,3,["Name"]]],null]],[12],[1,[30,3,["Name"]]],[13],[1,"\\n"]],[]]],[1," "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["details"]],[["default"],[[[[1,"\\n"],[41,[30,3,["Description"]],[[[1," "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"Description"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[30,3,["Description"]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[28,[37,4],["CONSUL_ACLS_ENABLED"],null],[[[1," "],[8,[39,5],null,[["@item"],[[30,3]]],null],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n"],[41,[28,[37,6],[[30,3,["DeletedAt"]]],null],[[[1," "],[8,[30,4],null,null,[["default"],[[[[1,"\\n "],[8,[30,5],null,[["@href"],[[28,[37,3],["dc.nspaces.edit",[30,3,["Name"]]],null]]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["label"]],[["default"],[[[[1,"\\n"],[41,[28,[37,7],["write nspace"],[["item"],[[30,3]]]],[[[1," Edit\\n"]],[]],[[[1," View\\n"]],[]]],[1," "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"],[41,[28,[37,7],["delete nspace"],[["item"],[[30,3]]]],[[[1," "],[8,[30,5],[[24,0,"dangerous"]],[["@onclick"],[[28,[37,8],[[30,0],[30,6],[30,3]],null]]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["label"]],[["default"],[[[[1,"\\n Delete\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["confirmation"]],[["default"],[[[[1,"\\n "],[8,[30,7],[[24,0,"warning"]],null,[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n Confirm delete\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n Are you sure you want to delete this namespace?\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["confirm"]],[["default"],[[[[1,"\\n "],[8,[30,8],null,null,[["default"],[[[[1,"Delete"]],[]]]]],[1,"\\n "]],[8]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[7]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[1," "]],[5]]]]],[1,"\\n"]],[]],null],[1," "]],[4]]]]],[1,"\\n"]],[3]]]]]],["&attrs","@items","item","Actions","Action","@ondelete","Confirmation","Confirm"],false,["list-collection","block-slot","if","href-to","env","consul/token/ruleset/list","not","can","action"]]',moduleName:"consul-ui/components/consul/nspace/list/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/nspace/notifications/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"F/gWWJYk",block:'[[[1,"\\n"],[41,[28,[37,1],[[30,1],"remove"],null],[[[1," "],[8,[39,2],[[17,2]],[["@color"],["success"]],[["default"],[[[[1,"\\n "],[8,[30,3,["Title"]],null,null,[["default"],[[[[1,"Success!"]],[]]]]],[1,"\\n "],[8,[30,3,["Description"]],null,null,[["default"],[[[[1,"Your Namespace has been marked for deletion."]],[]]]]],[1,"\\n "]],[3]]]]],[1,"\\n"]],[]],null]],["@type","&attrs","T"],false,["if","eq","hds/toast"]]',moduleName:"consul-ui/components/consul/nspace/notifications/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/nspace/search-bar/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"DelkwCZ4",block:'[[[1,"\\n"],[8,[39,0],[[24,0,"consul-nspace-search-bar"],[17,1]],[["@filter"],[[30,2]]],[["status","search","sort"],[[[[1,"\\n\\n"],[44,[[28,[37,2],[[28,[37,3],["components.consul.nspace.search-bar.",[30,3,["status","key"]]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","key"]]],null],[28,[37,3],["common.consul.",[30,3,["status","key"]]],null]],null]]]],[28,[37,2],[[28,[37,3],["components.consul.nspace.search-bar.",[30,3,["status","value"]]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","value"]]],null],[28,[37,3],["common.consul.",[30,3,["status","value"]]],null],[28,[37,3],["common.brand.",[30,3,["status","value"]]],null]],null]]]]],[[[1," "],[8,[30,3,["RemoveFilter"]],[[16,"aria-label",[28,[37,2],["common.ui.remove"],[["item"],[[28,[37,3],[[30,4]," ",[30,5]],null]]]]]],null,[["default"],[[[[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,[30,4]],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,5]],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[4,5]]],[1,"\\n "]],[3]],[[[1,"\\n "],[8,[30,6,["Search"]],null,[["@onsearch","@value","@placeholder"],[[28,[37,5],[[30,0],[30,7]],null],[30,8],[28,[37,2],["common.search.search"],null]]],[["default"],[[[[1,"\\n "],[8,[30,6,["Select"]],[[24,0,"type-search-properties"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,2,["searchproperty","change"]]],null],true,true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["common.search.searchproperty"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,9,["Optgroup"]],[30,9,["Option"]]],[[[42,[28,[37,8],[[28,[37,8],[[30,2,["searchproperty","default"]]],null]],null],null,[[[1," "],[8,[30,11],null,[["@value","@selected"],[[30,12],[28,[37,9],[[30,12],[30,2,["searchproperty","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["common.consul.",[28,[37,10],[[30,12]],null]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[12]],null]],[10,11]]],[1," "]],[]]]]],[1,"\\n "]],[9]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]],[[[1,"\\n "],[8,[30,13,["Select"]],[[24,0,"type-sort"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,14,["change"]]],null],false,true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n"],[44,[[28,[37,11],[[28,[37,4],[[28,[37,4],["Name:asc",[28,[37,2],["common.sort.alpha.asc"],null]],null],[28,[37,4],["Name:desc",[28,[37,2],["common.sort.alpha.desc"],null]],null]],null]],null]],[[[1," "],[1,[28,[35,12],[[30,16],[30,14,["value"]]],null]],[1,"\\n"]],[16]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,15,["Optgroup"]],[30,15,["Option"]]],[[[1," "],[8,[30,17],null,[["@label"],[[28,[37,2],["common.consul.name"],null]]],[["default"],[[[[1,"\\n "],[8,[30,18],null,[["@value","@selected"],["Name:asc",[28,[37,13],["Name:asc",[30,14,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,18],null,[["@value","@selected"],["Name:desc",[28,[37,13],["Name:desc",[30,14,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[17,18]]],[1," "]],[]]]]],[1,"\\n "]],[15]]]]],[1,"\\n "]],[13]]]]]],["&attrs","@filter","search","key","value","search","@onsearch","@search","components","Optgroup","Option","prop","search","@sort","components","selectable","Optgroup","Option"],false,["search-bar","let","t","concat","array","action","block-slot","each","-track-array","includes","lowercase","from-entries","get","eq"]]',moduleName:"consul-ui/components/consul/nspace/search-bar/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/nspace/selector/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"ZHMEj55d",block:'[[[1,"\\n"],[41,[28,[37,1],[[28,[37,2],["use nspaces"],null],[28,[37,2],["choose nspaces"],null]],null],[[[44,[[30,1],[52,[30,2],[28,[37,4],null,[["Name"],[[30,2]]]],[28,[37,4],null,[["Name"],["default"]]]],[28,[37,5],["dc.nspaces",[30,3,["Name"]]],null]],[[[1," "],[8,[30,4,["Title"]],[[24,0,"consul-side-nav__selector-title"]],null,[["default"],[[[[1,[28,[35,6],["components.hashicorp-consul.side-nav.nspaces.title"],null]]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@list","@items","@item","@key","@icon","@placeholder","@footerLink","@footerLinkText"],[[30,1],[28,[37,8],["Name:asc",[28,[37,9],["DeletedAt",[30,7]],null]],null],[30,5],"Name","folder",[28,[37,6],["components.hashicorp-consul.side-nav.nspaces.placeholder"],null],[28,[37,10],["dc.nspaces",[30,3,["Name"]]],null],[28,[37,6],["components.hashicorp-consul.side-nav.nspaces.footer"],null]]],[["default"],[[[[1,"\\n "],[8,[30,8,["Data"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,11],null,[["@src","@loading","@onchange"],[[28,[37,12],["/${partition}/*/${dc}/namespaces",[28,[37,4],null,[["partition","dc"],[[30,9],[30,3,["Name"]]]]]],null],"lazy",[28,[37,13],[[28,[37,14],[[30,10]],null]],null]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,8,["Dropdown","Checkmark"]],null,[["@selected","@href","@isHrefExternal"],[[28,[37,15],[[30,5,["Name"]],[30,8,["item","Name"]]],null],[28,[37,10],["dc.services.index"],[["params"],[[28,[37,4],null,[["partition","nspace","peer","dc"],[[52,[28,[37,16],[[30,9,["length"]],0],null],[30,9],[27]],[30,8,["item","Name"]],[27],[30,3,["Name"]]]]]]]],false]],[["default"],[[[[1,"\\n "],[1,[30,8,["item","Name"]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[8]]]]],[1,"\\n"]],[4,5,6]]]],[]],null]],["@list","@nspace","@dc","SNL","nspace","isManaging","@nspaces","Selector","@partition","@onchange"],false,["if","and","can","let","hash","is-href","t","nav-selector","sort-by","reject-by","href-to","data-source","uri","fn","optional","eq","gt"]]',moduleName:"consul-ui/components/consul/nspace/selector/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/partition/form/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"IFfwt6JG",block:'[[[1,"\\n"],[11,0],[24,0,"consul-partition-form"],[17,1],[12],[1,"\\n "],[8,[39,0],null,[["@sink","@type","@label","@ondelete","@onchange"],[[28,[37,1],["/${partition}/${nspace}/${dc}/partition",[28,[37,2],null,[["partition","nspace","dc"],["","",[30,2,["Datacenter"]]]]]],null],"partition","Partition",[28,[37,3],[[52,[30,3],[30,3],[30,4]],[30,2]],null],[28,[37,3],[[28,[37,5],[[30,4]],null],[30,2]],null]]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["removed"]],[["default"],[[[[1,"\\n "],[8,[39,7],[[4,[38,8],null,[["after"],[[28,[37,9],[[30,0],[30,6]],null]]]]],[["@type"],["remove"]],null],[1,"\\n "]],[6]]]]],[1,"\\n\\n "],[8,[39,6],null,[["@name"],["content"]],[["default"],[[[[1,"\\n\\n"],[44,[[28,[37,11],[[28,[37,12],["write partition"],null]],null],[30,2],[28,[37,2],null,[["help","Name"],["Must be a valid DNS hostname. Must contain 1-64 characters (numbers, letters, and hyphens), and must begin with a letter. Once created, this cannot be changed.",[28,[37,13],[[28,[37,2],null,[["test","error"],["^[a-zA-Z0-9]([a-zA-Z0-9-]{0,62}[a-zA-Z0-9])?$","Name must be a valid DNS hostname."]]]],null]]]],[28,[37,2],null,[["Description"],[[28,[37,13],null,null]]]]],[[[11,"form"],[4,[38,14],["submit",[28,[37,3],[[30,5,["persist"]],[30,8]],null]],null],[4,[38,15],[[30,7]],null],[12],[1,"\\n\\n"],[8,[39,16],null,[["@src"],[[28,[37,16],["validate"],null]]],[["default"],[[[[1,"\\n\\n "],[10,"fieldset"],[12],[1,"\\n"],[41,[28,[37,17],["new partition"],[["item"],[[30,8]]]],[[[1," "],[8,[39,18],null,[["@name","@placeholder","@item","@validations","@chart"],["Name","Name",[30,8],[30,9],[28,[37,2],null,[["state","dispatch"],[[30,15],[30,14]]]]]],null],[1,"\\n"]],[]],null],[1," "],[8,[39,18],null,[["@expanded","@name","@label","@item","@validations","@chart"],[true,"Description","Description (Optional)",[30,8],[30,10],[28,[37,2],null,[["state","dispatch"],[[30,15],[30,14]]]]]],null],[1,"\\n "],[13],[1,"\\n\\n "],[10,0],[12],[1,"\\n "],[8,[39,19],null,null,[["default"],[[[[1,"\\n\\n\\n"],[41,[28,[37,20],[[28,[37,17],["new partition"],[["item"],[[30,8]]]],[28,[37,12],["create partitions"],null]],null],[[[1," "],[8,[39,21],[[16,"disabled",[28,[37,22],[[28,[37,17],["pristine partition"],[["item"],[[30,8]]]],[28,[37,23],[[30,15],"error"],null]],null]],[24,4,"submit"]],[["@text"],["Save"]],null],[1,"\\n"]],[]],[[[41,[28,[37,11],[[30,7]],null],[[[1," "],[8,[39,21],[[24,4,"submit"]],[["@text"],["Save"]],null],[1,"\\n"]],[]],null]],[]]],[1," "],[8,[39,21],[[24,4,"reset"],[4,[38,14],["click",[52,[30,16],[28,[37,3],[[28,[37,5],[[30,16],[30,8]],null]],null],[28,[37,3],[[28,[37,5],[[30,4],[30,8]],null]],null]]],null]],[["@text","@color"],["Cancel","secondary"]],null],[1,"\\n\\n"],[41,[28,[37,20],[[28,[37,11],[[28,[37,17],["new partition"],[["item"],[[30,8]]]]],null],[28,[37,12],["delete partition"],[["item"],[[30,8]]]]],null],[[[1," "],[8,[39,24],null,[["@message"],["Are you sure you want to delete this Partition?"]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["action"]],[["default"],[[[[1,"\\n "],[8,[39,21],[[4,[38,14],["click",[28,[37,3],[[30,17],[28,[37,3],[[30,5,["delete"]],[30,8]],null]],null]],null]],[["@text","@color"],["Delete","critical"]],null],[1,"\\n "]],[17]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["dialog"]],[["default"],[[[[1,"\\n "],[8,[39,25],null,[["@message","@execute","@cancel"],[[30,20],[30,18],[30,19]]],null],[1,"\\n "]],[18,19,20]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[13],[1,"\\n\\n"]],[11,12,13,14,15]]]]],[1,"\\n"],[13],[1,"\\n\\n"]],[7,8,9,10]]],[1," "]],[]]]]],[1,"\\n"]],[5]]]]],[1,"\\n"],[13],[1,"\\n"]],["&attrs","@item","@ondelete","@onsubmit","writer","after","readOnly","item","Name","Description","State","Guard","ChartAction","dispatch","state","@oncancel","confirm","execute","cancel","message"],false,["data-writer","uri","hash","fn","if","optional","block-slot","consul/partition/notifications","notification","action","let","not","can","array","on","disabled","state-chart","is","text-input","hds/button-set","and","hds/button","or","state-matches","confirmation-dialog","delete-confirmation"]]',moduleName:"consul-ui/components/consul/partition/form/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/partition/list/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"x4HKpDnG",block:'[[[1,"\\n"],[8,[39,0],[[24,0,"consul-partition-list"],[17,1]],[["@items","@linkable"],[[30,2],"linkable partition"]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n"],[41,[30,3,["DeletedAt"]],[[[1," "],[10,2],[12],[1,"\\n Deleting "],[1,[30,3,["Name"]]],[1,"...\\n "],[13],[1,"\\n"]],[]],[[[1," "],[10,3],[15,6,[28,[37,3],["dc.partitions.edit",[30,3,["Name"]]],null]],[12],[1,[30,3,["Name"]]],[13],[1,"\\n"]],[]]],[1," "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["details"]],[["default"],[[[[1,"\\n"],[41,[30,3,["Description"]],[[[1," "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"Description"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[30,3,["Description"]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n"],[41,[28,[37,4],[[30,3,["DeletedAt"]]],null],[[[1," "],[8,[30,4],null,null,[["default"],[[[[1,"\\n "],[8,[30,5],null,[["@href"],[[28,[37,3],["dc.partitions.edit",[30,3,["Name"]]],null]]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["label"]],[["default"],[[[[1,"\\n"],[41,[28,[37,5],["write partition"],[["item"],[[30,3]]]],[[[1," Edit\\n"]],[]],[[[1," View\\n"]],[]]],[1," "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"],[41,[28,[37,5],["delete partition"],[["item"],[[30,3]]]],[[[1," "],[8,[30,5],[[24,0,"dangerous"]],[["@onclick"],[[28,[37,6],[[30,0],[30,6],[30,3]],null]]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["label"]],[["default"],[[[[1,"\\n Delete\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["confirmation"]],[["default"],[[[[1,"\\n "],[8,[30,7],[[24,0,"warning"]],null,[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n Confirm delete\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n Are you sure you want to delete this partition?\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["confirm"]],[["default"],[[[[1,"\\n "],[8,[30,8],null,null,[["default"],[[[[1,"Delete"]],[]]]]],[1,"\\n "]],[8]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[7]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[1," "]],[5]]]]],[1,"\\n"]],[]],null],[1," "]],[4]]]]],[1,"\\n"]],[3]]]]],[1,"\\n"]],["&attrs","@items","item","Actions","Action","@ondelete","Confirmation","Confirm"],false,["list-collection","block-slot","if","href-to","not","can","action"]]',moduleName:"consul-ui/components/consul/partition/list/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/partition/notifications/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"PTUeou9E",block:'[[[1,"\\n"],[41,[28,[37,1],[[30,1],"remove"],null],[[[1," "],[8,[39,2],[[17,2]],[["@color"],["success"]],[["default"],[[[[1,"\\n "],[8,[30,3,["Title"]],null,null,[["default"],[[[[1,"Success!"]],[]]]]],[1,"\\n "],[8,[30,3,["Description"]],null,null,[["default"],[[[[1,"\\n Your Partition has been marked for deletion.\\n "]],[]]]]],[1,"\\n "]],[3]]]]],[1,"\\n"]],[]],null]],["@type","&attrs","T"],false,["if","eq","hds/toast"]]',moduleName:"consul-ui/components/consul/partition/notifications/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/partition/search-bar/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"IuHkFeus",block:'[[[1,"\\n"],[8,[39,0],[[24,0,"consul-partition-search-bar"],[17,1]],[["@filter"],[[30,2]]],[["status","search","sort"],[[[[1,"\\n\\n"],[44,[[28,[37,2],[[28,[37,3],["components.consul.nspace.search-bar.",[30,3,["status","key"]]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","key"]]],null],[28,[37,3],["common.consul.",[30,3,["status","key"]]],null]],null]]]],[28,[37,2],[[28,[37,3],["components.consul.nspace.search-bar.",[30,3,["status","value"]]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","value"]]],null],[28,[37,3],["common.consul.",[30,3,["status","value"]]],null],[28,[37,3],["common.brand.",[30,3,["status","value"]]],null]],null]]]]],[[[1," "],[8,[30,3,["RemoveFilter"]],[[16,"aria-label",[28,[37,2],["common.ui.remove"],[["item"],[[28,[37,3],[[30,4]," ",[30,5]],null]]]]]],null,[["default"],[[[[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,[30,4]],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,5]],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[4,5]]],[1,"\\n "]],[3]],[[[1,"\\n "],[8,[30,6,["Search"]],null,[["@onsearch","@value","@placeholder"],[[28,[37,5],[[30,0],[30,7]],null],[30,8],[28,[37,2],["common.search.search"],null]]],[["default"],[[[[1,"\\n "],[8,[30,6,["Select"]],[[24,0,"type-search-properties"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,2,["searchproperty","change"]]],null],true,true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["common.search.searchproperty"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,9,["Optgroup"]],[30,9,["Option"]]],[[[42,[28,[37,8],[[28,[37,8],[[30,2,["searchproperty","default"]]],null]],null],null,[[[1," "],[8,[30,11],null,[["@value","@selected"],[[30,12],[28,[37,9],[[30,12],[30,2,["searchproperty","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["common.consul.",[28,[37,10],[[30,12]],null]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[12]],null]],[10,11]]],[1," "]],[]]]]],[1,"\\n "]],[9]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]],[[[1,"\\n "],[8,[30,13,["Select"]],[[24,0,"type-sort"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,14,["change"]]],null],false,true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n"],[44,[[28,[37,11],[[28,[37,4],[[28,[37,4],["Name:asc",[28,[37,2],["common.sort.alpha.asc"],null]],null],[28,[37,4],["Name:desc",[28,[37,2],["common.sort.alpha.desc"],null]],null]],null]],null]],[[[1," "],[1,[28,[35,12],[[30,16],[30,14,["value"]]],null]],[1,"\\n"]],[16]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,15,["Optgroup"]],[30,15,["Option"]]],[[[1," "],[8,[30,17],null,[["@label"],[[28,[37,2],["common.consul.name"],null]]],[["default"],[[[[1,"\\n "],[8,[30,18],null,[["@value","@selected"],["Name:asc",[28,[37,13],["Name:asc",[30,14,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,18],null,[["@value","@selected"],["Name:desc",[28,[37,13],["Name:desc",[30,14,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[17,18]]],[1," "]],[]]]]],[1,"\\n "]],[15]]]]],[1,"\\n "]],[13]]]]]],["&attrs","@filter","search","key","value","search","@onsearch","@search","components","Optgroup","Option","prop","search","@sort","components","selectable","Optgroup","Option"],false,["search-bar","let","t","concat","array","action","block-slot","each","-track-array","includes","lowercase","from-entries","get","eq"]]',moduleName:"consul-ui/components/consul/partition/search-bar/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/partition/selector/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"kdZOlgGd",block:'[[[1,"\\n"],[44,[[30,1],[52,[30,2],[28,[37,2],null,[["Name"],[[30,2]]]],[28,[37,2],null,[["Name"],["default"]]]],[28,[37,3],["dc.partitions",[30,3,["Name"]]],null],[28,[37,4],["choose partitions"],[["dc"],[[30,3]]]]],[[[1," "],[8,[30,4,["Title"]],[[24,0,"consul-side-nav__selector-title"]],null,[["default"],[[[[1,[28,[35,5],["components.hashicorp-consul.side-nav.partitions.title"],null]]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@list","@items","@item","@key","@icon","@placeholder","@footerLink","@footerLinkText","@disabled"],[[30,1],[28,[37,7],["Name:asc",[28,[37,8],["DeletedAt",[30,8]],null]],null],[30,5],"Name","users",[28,[37,5],["components.hashicorp-consul.side-nav.partitions.placeholder"],null],[28,[37,9],["dc.partitions",[30,3,["Name"]]],null],[28,[37,5],["components.hashicorp-consul.side-nav.partitions.footer"],null],[28,[37,10],[[30,7]],null]]],[["default"],[[[[1,"\\n "],[8,[30,9,["Data"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,11],null,[["@src","@loading","@onchange"],[[28,[37,12],["/*/*/${dc}/partitions",[28,[37,2],null,[["dc"],[[30,3,["Name"]]]]]],null],"lazy",[28,[37,13],[[28,[37,14],[[30,10]],null]],null]]],null],[1,"\\n "]],[]]]]],[1,"\\n"],[41,[30,7],[[[1," "],[8,[30,9,["Dropdown","Checkmark"]],null,[["@selected","@href","@isHrefExternal"],[[28,[37,15],[[30,5,["Name"]],[30,9,["item","Name"]]],null],[52,[30,9,["item","href"]],[30,9,["item","href"]],[28,[37,9],["dc.services.index"],[["params"],[[28,[37,2],null,[["partition","nspace","peer","dc"],[[30,9,["item","Name"]],[27],[27],[30,3,["Name"]]]]]]]]],false]],[["default"],[[[[1,"\\n "],[1,[30,9,["item","Name"]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[1," "]],[9]]]]],[1,"\\n"]],[4,5,6,7]]]],["@list","@partition","@dc","SNL","partition","isManaging","canChoose","@partitions","Selector","@onchange"],false,["let","if","hash","is-href","can","t","nav-selector","sort-by","reject-by","href-to","not","data-source","uri","fn","optional","eq"]]',moduleName:"consul-ui/components/consul/partition/selector/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/peer/address/list/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"TNoxeoLi",block:'[[[1,"\\n"],[8,[39,0],null,null,[["default"],[[[[1,"\\n"],[41,[30,1,["data","height"]],[[[1," "],[10,0],[15,5,[30,1,["data","fillRemainingHeightStyle"]]],[14,0,"overflow-y-scroll"],[12],[1,"\\n "],[8,[39,2],null,[["@tagName","@estimateHeight","@items"],["ul",[30,1,["data","height"]],[30,2]]],[["default"],[[[[1,"\\n "],[10,"li"],[14,0,"px-3 h-12 border-bottom-primary flex items-center justify-between group"],[12],[1,"\\n "],[10,0],[14,0,"hds-typography-display-300 text-hds-foreground-strong hds-font-weight-semibold"],[12],[1,[30,3]],[13],[1,"\\n "],[8,[39,3],[[24,0,"opacity-0 group-hover:opacity-100"]],[["@value","@name"],[[30,3],"Address"]],null],[1,"\\n "],[13],[1,"\\n "]],[3,4]]]]],[1,"\\n "],[13],[1,"\\n"]],[]],null]],[1]]]]]],["p","@items","address","index"],false,["providers/dimension","if","vertical-collection","consul-copy-button"]]',moduleName:"consul-ui/components/consul/peer/address/list/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/peer/bento-box/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"3LY0GCin",block:'[[[1,"\\n"],[8,[39,0],[[24,0,"mt-6 mb-3"]],[["@level","@hasBorder"],["base",true]],[["default"],[[[[1,"\\n "],[10,0],[14,0,"flex h-24 p-6 overflow-x-auto space-x-12"],[12],[1,"\\n "],[10,0],[14,0,"shrink-0"],[12],[1,"\\n "],[10,0],[14,0,"mb-2 hds-typography-body-200 hds-font-weight-semibold hds-foreground-primary"],[12],[1,"Status"],[13],[1,"\\n "],[10,0],[14,0,"flex items-center"],[12],[1,"\\n "],[8,[39,1],null,[["@peering"],[[30,1]]],null],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[10,0],[14,0,"shrink-0"],[12],[1,"\\n "],[10,0],[14,0,"hds-typography-body-200 mb-2 hds-font-weight-semibold hds-foreground-primary"],[12],[1,"Latest heartbeat"],[13],[1,"\\n "],[10,0],[14,0,"flex items-center"],[12],[1,"\\n"],[41,[30,1,["LastHeartbeat"]],[[[44,[[28,[37,4],[[30,1,["LastHeartbeat"]]],null]],[[[1," "],[8,[39,5],[[24,0,"mr-0.5"]],[["@name","@color"],["activity","var(--token-color-foreground-faint)"]],null],[1,"\\n"],[41,[30,2,["isNearDate"]],[[[1," "],[11,1],[4,[38,6],[[30,2,["friendly"]]],null],[12],[1,[30,2,["relative"]]],[13],[1,"\\n"]],[]],[[[1," "],[10,1],[12],[1,[30,2,["friendly"]]],[13],[1,"\\n"]],[]]]],[2]]]],[]],[[[1," "],[10,1],[12],[1,"None yet"],[13],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n "],[13],[1,"\\n "],[10,0],[14,0,"shrink-0"],[12],[1,"\\n "],[10,0],[14,0,"mb-2 hds-typography-body-200 hds-font-weight-semibold hds-foreground-primary"],[12],[1,"Latest receipt"],[13],[1,"\\n "],[10,0],[14,0,"flex items-center"],[12],[1,"\\n"],[41,[30,1,["LastReceive"]],[[[44,[[28,[37,4],[[30,1,["LastReceive"]]],null]],[[[41,[30,3,["isNearDate"]],[[[1," "],[11,1],[4,[38,6],[[30,3,["friendly"]]],null],[12],[1,[30,3,["relative"]]],[13],[1,"\\n"]],[]],[[[1," "],[10,1],[12],[1,[30,3,["friendly"]]],[13],[1,"\\n"]],[]]]],[3]]]],[]],[[[1," "],[10,1],[12],[1,"None yet"],[13],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n "],[13],[1,"\\n "],[10,0],[14,0,"shrink-0"],[12],[1,"\\n "],[10,0],[14,0,"mb-2 hds-typography-body-200 hds-font-weight-semibold hds-foreground-primary"],[12],[1,"Latest send"],[13],[1,"\\n "],[10,0],[14,0,"flex items-center"],[12],[1,"\\n"],[41,[30,1,["LastSend"]],[[[44,[[28,[37,4],[[30,1,["LastSend"]]],null]],[[[41,[30,4,["isNearDate"]],[[[1," "],[11,1],[4,[38,6],[[30,4,["friendly"]]],null],[12],[1,[30,4,["relative"]]],[13],[1,"\\n"]],[]],[[[1," "],[10,1],[12],[1,[30,4,["friendly"]]],[13],[1,"\\n"]],[]]]],[4]]]],[]],[[[1," "],[10,1],[12],[1,"None yet"],[13],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]]]]]],["@peering","smartDate","smartDate","smartDate"],false,["hds/card/container","peerings/badge","if","let","smart-date-format","flight-icon","tooltip"]]',moduleName:"consul-ui/components/consul/peer/bento-box/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/peer/form/chart.xstate",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default={id:"consul-peer-form",initial:"generate",on:{INITIATE:[{target:"initiate"}],GENERATE:[{target:"generate"}]},states:{initiate:{},generate:{}}}})),define("consul-ui/components/consul/peer/form/generate/actions/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"Agkp8hSw",block:'[[[1,"\\n"],[8,[39,0],[[16,"form",[30,1]],[24,4,"submit"],[16,"disabled",[28,[37,1],[[28,[37,2],[[30,2,["Name","length"]],0],null]],null]],[17,3]],[["@text"],["Generate token"]],null]],["@id","@item","&attrs"],false,["hds/button","or","eq"]]',moduleName:"consul-ui/components/consul/peer/form/generate/actions/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/peer/form/generate/chart.xstate",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default={id:"consul-peer-generate-form",initial:"idle",states:{idle:{on:{LOAD:{target:"loading"}}},loading:{on:{SUCCESS:{target:"success"},ERROR:{target:"error"}}},success:{on:{RESET:{target:"idle"}}},error:{}}}})),define("consul-ui/components/consul/peer/form/generate/fieldsets/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@ember/object"],(function(e,t,n,l,r){var i +Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const o=(0,n.createTemplateFactory)({id:"sFxHhDSu",block:'[[[1,"\\n"],[11,0],[16,0,[28,[37,0],["consul-peer-form-generate-fieldsets"],null]],[17,1],[12],[1,"\\n "],[8,[39,1],null,[["@src"],[[28,[37,2],["/machines/validate.xstate"],[["from"],["/components/consul/peer/form/generate/fieldsets"]]]]],[["default"],[[[[1,"\\n"],[44,[[28,[37,4],null,[["help","Name"],[[28,[37,5],[[28,[37,6],["common.validations.dns-hostname.help"],null],[28,[37,6],["common.validations.immutable.help"],null]],null],[28,[37,7],[[28,[37,4],null,[["test","error"],[[28,[37,6],["common.validations.dns-hostname.test"],null],[28,[37,6],["common.validations.dns-hostname.error"],[["name"],["Name"]]]]]]],null]]]]],[[[1," "],[10,"fieldset"],[12],[1,"\\n "],[8,[39,8],null,[["@label","@name","@item","@validations","@chart","@oninput"],[[28,[37,6],["components.consul.peer.generate.name"],null],"Name",[30,4],[30,3],[30,2],[28,[37,9],["target.value",[28,[37,10],[[30,4],"Name"],null]],null]]],null],[1,"\\n "],[18,6,[[28,[37,4],null,[["valid"],[[28,[37,12],[[28,[37,13],[[30,2,["state"]],"error"],null]],null]]]]]],[1,"\\n "],[13],[1,"\\n\\n"]],[3]]],[1,"\\n"],[44,[[28,[37,4],null,[["help"],[[28,[37,6],["common.validations.server-external-addresses.help"],null]]]]],[[[1," "],[10,"fieldset"],[12],[1,"\\n "],[8,[39,8],null,[["@label","@name","@item","@chart","@validations","@oninput"],[[28,[37,6],["components.consul.peer.generate.addresses"],null],"ServerExternalAddresses",[30,4],[30,2],[30,5],[28,[37,9],["target.value",[30,0,["onInput"]]],null]]],null],[1,"\\n "],[18,6,[[28,[37,4],null,[["valid"],[[28,[37,12],[[28,[37,13],[[30,2,["state"]],"error"],null]],null]]]]]],[1,"\\n "],[13],[1,"\\n\\n"]],[5]]],[1," "]],[2]]]]],[1,"\\n"],[13],[1,"\\n"]],["&attrs","fsm","Name","@item","ServerExternalAddresses","&default"],false,["class-map","state-machine","require","let","hash","concat","t","array","text-input","pick","set","yield","not","state-matches"]]',moduleName:"consul-ui/components/consul/peer/form/generate/fieldsets/index.hbs",isStrictMode:!1}) +let a=(i=class extends l.default{onInput(e){e=e?e.split(",").map((e=>e.trim())):[],this.args.item.ServerExternalAddresses=e}},u=i.prototype,s="onInput",c=[r.action],d=Object.getOwnPropertyDescriptor(i.prototype,"onInput"),p=i.prototype,f={},Object.keys(d).forEach((function(e){f[e]=d[e]})),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=c.slice().reverse().reduce((function(e,t){return t(u,s,e)||e}),f),p&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(p):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(u,s,f),f=null),i) +var u,s,c,d,p,f +e.default=a,(0,t.setComponentTemplate)(o,a)})),define("consul-ui/components/consul/peer/form/generate/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"w1v/7n9u",block:'[[[1,"\\n"],[11,0],[16,0,[28,[37,0],["consul-peer-form-generate"],null]],[17,1],[12],[1,"\\n "],[8,[39,1],null,[["@src","@initial"],[[28,[37,2],["./chart.xstate"],[["from"],["/components/consul/peer/form/generate"]]],[52,[30,2],"loading","idle"]]],[["default"],[[[[1,"\\n\\n"],[44,[[28,[37,5],null,null]],[[[1," "],[11,"form"],[16,1,[30,4]],[4,[38,6],["submit",[28,[37,7],[[30,3,["dispatch"]],"LOAD"],null]],null],[12],[1,"\\n\\n "],[8,[30,3,["State"]],null,[["@matches"],[[28,[37,8],["idle","error"],null]]],[["default"],[[[[1,"\\n "],[8,[30,3,["State"]],null,[["@matches"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,9],[[24,0,"mb-3 mt-2"]],[["@color"],["critical"]],[["default"],[[[[1,"\\n "],[8,[30,6,["Title"]],null,null,[["default"],[[[[1,"Error"]],[]]]]],[1,"\\n "],[8,[30,6,["Description"]],null,null,[["default"],[[[[1,[30,3,["state","context","error","message"]]]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[18,9,[[28,[37,11],null,[["Fieldsets","Actions"],[[50,"consul/peer/form/generate/fieldsets",0,null,[["item"],[[30,7]]]],[50,"consul/peer/form/generate/actions",0,null,[["item","id"],[[30,7],[30,4]]]]]]]]],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[30,3,["State"]],null,[["@matches"],["loading"]],[["default"],[[[[1,"\\n "],[8,[39,13],null,[["@src","@onchange","@onerror"],[[28,[37,14],["/${partition}/${nspace}/${dc}/peering/token-for/${name}/${externalAddresses}",[28,[37,11],null,[["partition","nspace","dc","name","externalAddresses"],[[30,7,["Partition"]],"",[30,7,["Datacenter"]],[30,7,["Name"]],[30,7,["ServerExternalAddresses"]]]]]],null],[28,[37,15],[[30,8],[28,[37,16],["data",[28,[37,7],[[30,3,["dispatch"]],"SUCCESS"],null]],null]],null],[28,[37,15],[[28,[37,7],[[30,3,["dispatch"]],"ERROR"],null]],null]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[30,3,["State"]],null,[["@matches"],["success"]],[["default"],[[[[1,"\\n "],[18,9,[[28,[37,11],null,[["Fieldsets","Actions"],[[50,"consul/peer/form/token/fieldsets",0,null,[["item","token","regenerate","onclick"],[[30,7],[30,3,["state","context","PeeringToken"]],[30,2],[28,[37,15],[[28,[37,17],[[30,7],"Name",""],null],[28,[37,7],[[30,3,["dispatch"]],"RESET"],null]],null]]]],[50,"consul/peer/form/token/actions",0,null,[["token","item","id"],[[30,3,["state","context","PeeringToken"]],[30,7],[30,4]]]]]]]]],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[13],[1,"\\n"]],[4,5]]],[1,"\\n "]],[3]]]]],[1,"\\n"],[13],[1,"\\n"]],["&attrs","@regenerate","fsm","id","reset","A","@item","@onchange","&default"],false,["class-map","state-machine","require","if","let","unique-id","on","fn","array","hds/alert","yield","hash","component","data-source","uri","queue","pick","set"]]',moduleName:"consul-ui/components/consul/peer/form/generate/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/peer/form/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"/fuosMgw",block:'[[[1,"\\n"],[11,0],[16,0,[28,[37,0],["consul-peer-form"],null]],[17,1],[12],[1,"\\n "],[8,[39,1],null,[["@src"],[[28,[37,2],["./chart.xstate"],[["from"],["/components/consul/peer/form"]]]]],[["default"],[[[[1,"\\n\\n "],[8,[39,3],null,[["@items","@onTabClicked"],[[28,[37,4],[[28,[37,5],null,[["label","selected","state"],[[28,[37,6],["components.consul.peer.form.generate-label"],null],[28,[37,7],[[30,2,["state"]],"generate"],null],"GENERATE"]]],[28,[37,5],null,[["label","selected","state"],[[28,[37,6],["components.consul.peer.form.establish-label"],null],[28,[37,7],[[30,2,["state"]],"initiate"],null],"INITIATE"]]]],null],[28,[37,8],["state",[30,2,["dispatch"]]],null]]],null],[1,"\\n\\n "],[8,[30,2,["State"]],null,[["@matches"],[[28,[37,4],["generate"],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,9],null,[["@src"],[[28,[37,10],["/${partition}/${nspace}/${dc}/peer-generate/",[30,3]],null]]],[["default"],[[[[1,"\\n "],[18,6,[[28,[37,5],null,[["Form"],[[50,"consul/peer/form/generate",0,null,[["item"],[[30,4,["data"]]]]]]]]]],[1,"\\n "]],[4]]]]],[1,"\\n\\n "]],[]]]]],[1,"\\n\\n "],[8,[30,2,["State"]],null,[["@matches"],["initiate"]],[["default"],[[[[1,"\\n\\n "],[8,[39,9],null,[["@src"],[[28,[37,10],["/${partition}/${nspace}/${dc}/peer-initiate/",[30,3]],null]]],[["default"],[[[[1,"\\n "],[18,6,[[28,[37,5],null,[["Form"],[[50,"consul/peer/form/initiate",0,null,[["item"],[[30,5,["data"]]]]]]]]]],[1,"\\n "]],[5]]]]],[1,"\\n\\n "]],[]]]]],[1,"\\n\\n "]],[2]]]]],[1,"\\n"],[13],[1,"\\n"]],["&attrs","fsm","@params","source","source","&default"],false,["class-map","state-machine","require","tab-nav","array","hash","t","state-matches","pick","data-source","uri","yield","component"]]',moduleName:"consul-ui/components/consul/peer/form/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/peer/form/initiate/actions/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"rVLddbat",block:'[[[1,"\\n"],[8,[39,0],[[16,"form",[30,1]],[24,4,"submit"],[17,2]],[["@text"],["Add peer"]],null]],["@id","&attrs"],false,["hds/button"]]',moduleName:"consul-ui/components/consul/peer/form/initiate/actions/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/peer/form/initiate/fieldsets/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"q1ndxYMU",block:'[[[1,"\\n"],[11,0],[16,0,[28,[37,0],["consul-peer-form-initiate-fieldsets"],null]],[17,1],[12],[1,"\\n"],[44,[[28,[37,2],null,[["help","Name"],["Enter a name to locally identify the new peer.",[28,[37,3],[[28,[37,2],null,[["test","error"],[[28,[37,4],["common.validations.dns-hostname.test"],null],[28,[37,4],["common.validations.dns-hostname.error"],[["name"],["Name"]]]]]]],null]]]],[28,[37,2],null,[["help","PeeringToken"],["Enter the token received from the operator of the desired peer.",[28,[37,3],null,null]]]]],[[[1," "],[10,2],[12],[1,"\\n Enter a token generated in the desired peer.\\n "],[13],[1,"\\n "],[8,[39,5],null,[["@src"],[[28,[37,6],["/machines/validate.xstate"],[["from"],["/components/consul/peer/form/generate/fieldsets"]]]]],[["default"],[[[[1,"\\n\\n "],[10,"fieldset"],[12],[1,"\\n "],[8,[39,7],null,[["@name","@label","@item","@validations","@chart"],["Name","Name of peer",[30,5],[30,2],[30,4]]],null],[1,"\\n "],[8,[39,7],null,[["@expanded","@name","@item","@validations","@chart"],[true,"Token",[30,5],[30,3],[30,4]]],null],[1,"\\n "],[18,6,[[28,[37,2],null,[["valid"],[[28,[37,9],[[28,[37,10],[[30,4,["state"]],"error"],null]],null]]]]]],[1,"\\n "],[13],[1,"\\n\\n "]],[4]]]]],[1,"\\n"]],[2,3]]],[13],[1,"\\n"]],["&attrs","Name","PeeringToken","fsm","@item","&default"],false,["class-map","let","hash","array","t","state-machine","require","text-input","yield","not","state-matches"]]',moduleName:"consul-ui/components/consul/peer/form/initiate/fieldsets/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/peer/form/initiate/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"DWuLBe0N",block:'[[[1,"\\n"],[11,0],[16,0,[28,[37,0],["consul-peer-form-initiate"],null]],[17,1],[12],[1,"\\n "],[8,[39,1],null,[["@sink","@type","@label","@onchange"],[[28,[37,2],["/${partition}/${nspace}/${dc}/peer",[28,[37,3],null,[["partition","nspace","dc"],[[28,[37,4],[[30,2,["Partition"]],""],null],[28,[37,4],[[30,2,["Namespace"]],""],null],[28,[37,4],[[30,2,["Datacenter"]],""],null]]]]],null],"peer","peer",[28,[37,5],[[28,[37,6],[[30,3]],null],[30,2]],null]]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,8],[[24,0,"mb-3 mt-2"]],[["@color"],["critical"]],[["default"],[[[[1,"\\n "],[8,[30,7,["Title"]],null,null,[["default"],[[[[1,"Error"]],[]]]]],[1,"\\n "],[8,[30,7,["Description"]],null,null,[["default"],[[[[1,[30,6,["message"]]]],[]]]]],[1,"\\n "]],[7]]]]],[1,"\\n "]],[5,6]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["content"]],[["default"],[[[[1,"\\n"],[44,[[28,[37,10],null,null]],[[[1," "],[11,"form"],[16,1,[30,8]],[4,[38,11],["submit",[28,[37,5],[[30,4,["persist"]],[30,2]],null]],null],[12],[1,"\\n "],[18,9,[[28,[37,3],null,[["Fieldsets","Actions"],[[50,"consul/peer/form/initiate/fieldsets",0,null,[["item"],[[30,2]]]],[50,"consul/peer/form/initiate/actions",0,null,[["item","id"],[[30,2],[30,8]]]]]]]]],[1,"\\n "],[13],[1,"\\n"]],[8]]],[1," "]],[]]]]],[1,"\\n "]],[4]]]]],[1,"\\n"],[13]],["&attrs","@item","@onsubmit","writer","after","error","A","id","&default"],false,["class-map","data-writer","uri","hash","or","fn","optional","block-slot","hds/alert","let","unique-id","on","yield","component"]]',moduleName:"consul-ui/components/consul/peer/form/initiate/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/peer/form/token/actions/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"Om/MyDR4",block:'[[[1,"\\n"],[11,0],[17,1],[12],[1,"\\n "],[8,[39,0],null,null,[["default"],[[[[1,"\\n "],[8,[39,1],[[17,1],[4,[38,2],[[30,2]],null]],[["@text","@color"],["Copy token","primary"]],null],[1,"\\n "],[8,[39,1],[[24,4,"reset"],[4,[38,3],["click",[30,3]],null]],[["@text","@color"],["Close","secondary"]],null],[1,"\\n "]],[]]]]],[1,"\\n"],[13],[1,"\\n"]],["&attrs","@token","@onclose"],false,["hds/button-set","hds/button","with-copyable","on"]]',moduleName:"consul-ui/components/consul/peer/form/token/actions/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/peer/form/token/fieldsets/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"IOG4Ffy9",block:'[[[1,"\\n"],[41,[30,1],[[[1," "],[10,2],[12],[1,"\\n Token regenerated! Here’s what’s next:\\n "],[13],[1,"\\n"]],[]],[[[1," "],[10,2],[12],[1,"\\n Token generated! Here’s what’s next:\\n "],[13],[1,"\\n"]],[]]],[1," "],[10,"ol"],[12],[1,"\\n "],[10,"li"],[12],[1,"\\n "],[10,"strong"],[12],[1,"Copy the token"],[13],[10,"br"],[12],[13],[1,"\\n This token cannot be viewed again after creation.\\n "],[10,"br"],[12],[13],[1,"\\n "],[8,[39,1],null,[["@value","@name"],[[30,2],"Token"]],null],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[12],[1,"\\n "],[10,"strong"],[12],[1,"Switch to the peer"],[13],[10,"br"],[12],[13],[1,"\\n Someone on your team should log into the Datacenter (Community) or Admin Partition (Enterprise) that you want this one to connect with.\\n "],[13],[1,"\\n "],[10,"li"],[12],[1,"\\n "],[10,"strong"],[12],[1,"Initiate the peering"],[13],[10,"br"],[12],[13],[1,"\\n From there, initiate a new peering, name it, and paste this token in.\\n "],[13],[1,"\\n "],[13],[1,"\\n"],[41,[28,[37,2],[[30,1]],null],[[[1," "],[8,[39,3],[[24,4,"reset"],[4,[38,4],["click",[30,3]],null]],[["@text","@color"],["Generate another token","secondary"]],null],[1,"\\n"]],[]],null],[1,"\\n"]],["@regenerate","@token","@onclick"],false,["if","copyable-code","not","hds/button","on"]]',moduleName:"consul-ui/components/consul/peer/form/token/fieldsets/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/peer/info/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"Fvjn0Yfe",block:'[[[1,"\\n"],[41,[30,1,["PeerName"]],[[[1," "],[10,0],[14,0,"consul-peer-info"],[12],[1,"\\n\\n "],[11,"svg"],[24,"width","16"],[24,"height","16"],[24,"viewBox","0 0 16 16"],[24,"fill","none"],[24,"xmlns","http://www.w3.org/2000/svg","http://www.w3.org/2000/xmlns/"],[4,[38,1],["Peer"],null],[12],[1,"\\n "],[10,"path"],[14,"d","M16 8C16 7.80109 15.921 7.61032 15.7803 7.46967L12.2803 3.96967C11.9874 3.67678 11.5126 3.67678 11.2197 3.96967C10.9268 4.26256 10.9268 4.73744 11.2197 5.03033L14.1893 8L11.2197 10.9697C10.9268 11.2626 10.9268 11.7374 11.2197 12.0303C11.5126 12.3232 11.9874 12.3232 12.2803 12.0303L15.7803 8.53033C15.921 8.38968 16 8.19891 16 8Z"],[14,"fill","#77838A"],[12],[13],[1,"\\n "],[10,"path"],[14,"d","M0.21967 8.53033C-0.0732233 8.23744 -0.0732233 7.76256 0.21967 7.46967L3.71967 3.96967C4.01256 3.67678 4.48744 3.67678 4.78033 3.96967C5.07322 4.26256 5.07322 4.73744 4.78033 5.03033L1.81066 8L4.78033 10.9697C5.07322 11.2626 5.07322 11.7374 4.78033 12.0303C4.48744 12.3232 4.01256 12.3232 3.71967 12.0303L0.21967 8.53033Z"],[14,"fill","#77838A"],[12],[13],[1,"\\n "],[10,"path"],[14,"d","M5 7C4.44772 7 4 7.44772 4 8C4 8.55229 4.44772 9 5 9H5.01C5.56228 9 6.01 8.55229 6.01 8C6.01 7.44772 5.56228 7 5.01 7H5Z"],[14,"fill","#77838A"],[12],[13],[1,"\\n "],[10,"path"],[14,"d","M7 8C7 7.44772 7.44772 7 8 7H8.01C8.56228 7 9.01 7.44772 9.01 8C9.01 8.55229 8.56228 9 8.01 9H8C7.44772 9 7 8.55229 7 8Z"],[14,"fill","#77838A"],[12],[13],[1,"\\n "],[10,"path"],[14,"d","M11 7C10.4477 7 10 7.44772 10 8C10 8.55229 10.4477 9 11 9H11.01C11.5623 9 12.01 8.55229 12.01 8C12.01 7.44772 11.5623 7 11.01 7H11Z"],[14,"fill","#77838A"],[12],[13],[1,"\\n "],[13],[1,"\\n "],[10,1],[14,0,"consul-peer-info__description"],[12],[1,"Imported from "],[10,1],[12],[1,[30,1,["PeerName"]]],[13],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null]],["@item"],false,["if","tooltip"]]',moduleName:"consul-ui/components/consul/peer/info/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/peer/list/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"fnAtXcEa",block:'[[[1,"\\n"],[8,[39,0],[[24,0,"consul-peer-list"],[17,1]],[["@items","@linkable"],[[30,2],"linkable peers"]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n"],[41,[28,[37,3],["delete peer"],[["item"],[[30,3]]]],[[[1," "],[10,3],[15,6,[28,[37,4],["dc.peers.show",[30,3,["Name"]]],null]],[12],[1,"\\n "],[1,[30,3,["Name"]]],[1,"\\n "],[13],[1,"\\n"]],[]],[[[1," "],[10,2],[12],[1,"\\n "],[1,[30,3,["Name"]]],[1,"\\n "],[13],[1,"\\n"]],[]]],[1," "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["details"]],[["default"],[[[[1,"\\n "],[10,0],[14,0,"peers__list__peer-detail"],[12],[1,"\\n "],[8,[39,5],null,[["@peering"],[[30,3]]],null],[1,"\\n\\n "],[11,0],[4,[38,6],[[28,[37,7],["routes.dc.peers.index.detail.imported.tooltip"],[["name"],[[30,3,["Name"]]]]]],null],[12],[1,"\\n "],[1,[28,[35,7],["routes.dc.peers.index.detail.imported.count"],[["count"],[[28,[37,8],[[30,3,["ImportedServiceCount"]]],null]]]]],[1,"\\n "],[13],[1,"\\n\\n "],[11,0],[4,[38,6],[[28,[37,7],["routes.dc.peers.index.detail.exported.tooltip"],[["name"],[[30,3,["Name"]]]]]],null],[12],[1,"\\n "],[1,[28,[35,7],["routes.dc.peers.index.detail.exported.count"],[["count"],[[28,[37,8],[[30,3,["ExportedServiceCount"]]],null]]]]],[1,"\\n "],[13],[1,"\\n\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n"],[41,[28,[37,3],["delete peer"],[["item"],[[30,3]]]],[[[1,"\\n "],[8,[30,5],null,null,[["default"],[[[[1,"\\n"],[41,[28,[37,9],[[28,[37,3],["write peer"],[["item"],[[30,3]]]],[30,3,["isDialer"]]],null],[[[1," "],[8,[30,6],[[4,[38,10],["click",[28,[37,11],[[30,7],[30,3]],null]],null]],null,[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["label"]],[["default"],[[[[1,"\\n Regenerate token\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[1," "],[8,[30,6],null,[["@href"],[[28,[37,4],["dc.peers.show",[30,3,["Name"]]],null]]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["label"]],[["default"],[[[[1,"\\n View\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,6],[[24,0,"dangerous"]],[["@onclick"],[[28,[37,11],[[30,8],[30,3]],null]]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["label"]],[["default"],[[[[1,"\\n Delete\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["confirmation"]],[["default"],[[[[1,"\\n "],[8,[30,9],[[24,0,"warning"]],null,[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n Confirm delete\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n Are you sure you want to delete this peer?\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["confirm"]],[["default"],[[[[1,"\\n "],[8,[30,10],null,null,[["default"],[[[[1,"\\n Delete\\n "]],[]]]]],[1,"\\n "]],[10]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[9]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n"]],[]],null],[1," "]],[5]]]]],[1,"\\n"]],[3,4]]]]]],["&attrs","@items","item","index","Actions","Action","@onedit","@ondelete","Confirmation","Confirm"],false,["list-collection","block-slot","if","can","href-to","peerings/badge","tooltip","t","format-number","and","on","fn"]]',moduleName:"consul-ui/components/consul/peer/list/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/peer/notifications/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"X9zOi0Cb",block:'[[[1,"\\n"],[41,[28,[37,1],[[30,1],"remove"],null],[[[1," "],[8,[39,2],[[17,2]],[["@color"],["success"]],[["default"],[[[[1,"\\n "],[8,[30,3,["Title"]],null,null,[["default"],[[[[1,"Success!"]],[]]]]],[1,"\\n "],[8,[30,3,["Description"]],null,null,[["default"],[[[[1,"\\n Your Peer has been marked for deletion.\\n "]],[]]]]],[1,"\\n "]],[3]]]]],[1,"\\n"]],[]],null]],["@type","&attrs","T"],false,["if","eq","hds/toast"]]',moduleName:"consul-ui/components/consul/peer/notifications/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/peer/search-bar/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"fwTgzNL7",block:'[[[1,"\\n"],[8,[39,0],[[24,0,"consul-peer-search-bar"],[17,1]],[["@filter"],[[30,2]]],[["status","search","filter","sort"],[[[[1,"\\n\\n"],[44,[[28,[37,2],[[28,[37,3],["components.consul.peer.search-bar.",[30,3,["status","key"]]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","key"]]],null],[28,[37,3],["common.consul.",[30,3,["status","key"]]],null]],null]]]],[28,[37,2],[[28,[37,3],["components.consul.peer.search-bar.",[30,3,["status","value"]]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","value"]]],null],[28,[37,3],["common.consul.",[30,3,["status","value"]]],null],[28,[37,3],["common.brand.",[30,3,["status","value"]]],null]],null]]]]],[[[1," "],[8,[30,3,["RemoveFilter"]],[[16,"aria-label",[28,[37,2],["common.ui.remove"],[["item"],[[28,[37,3],[[30,4]," ",[30,5]],null]]]]]],null,[["default"],[[[[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,[30,4]],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,5]],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[4,5]]],[1,"\\n "]],[3]],[[[1,"\\n "],[8,[30,6,["Search"]],null,[["@onsearch","@value","@placeholder"],[[28,[37,5],[[30,0],[30,7]],null],[30,8],[28,[37,2],["common.search.search"],null]]],[["default"],[[[[1,"\\n "],[8,[30,6,["Select"]],[[24,0,"type-search-properties"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,2,["searchproperty","change"]]],null],true,true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["common.search.searchproperty"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,9,["Optgroup"]],[30,9,["Option"]]],[[[42,[28,[37,8],[[28,[37,8],[[30,2,["searchproperty","default"]]],null]],null],null,[[[1," "],[8,[30,11],null,[["@value","@selected"],[[30,12],[28,[37,9],[[30,12],[30,2,["searchproperty","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["common.consul.",[28,[37,10],[[30,12]],null]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[12]],null]],[10,11]]],[1," "]],[]]]]],[1,"\\n "]],[9]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]],[[[1,"\\n "],[8,[30,13,["Select"]],[[24,0,"type-state"]],[["@position","@onchange","@multiple"],["left",[28,[37,5],[[30,0],[30,2,["state","change"]]],null],true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["components.consul.peer.search-bar.state.name"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,14,["Optgroup"]],[30,14,["Option"]]],[[[42,[28,[37,8],[[28,[37,8],[[28,[37,11],[[28,[37,12],["/models/peer"],[["export","from"],["schema","/components/consul/peer/search-bar"]]],"State.allowedValues"],null]],null]],null],null,[[[44,[[28,[37,13],[[30,17]],null]],[[[1," "],[8,[30,16],[[16,0,[29,["value-",[30,18]]]]],[["@value","@selected"],[[30,18],[28,[37,9],[[30,18],[30,2,["state","value"]]],null]]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["components.consul.peer.search-bar.state.options.",[30,18]],null]],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[18]]]],[17]],null]],[15,16]]],[1," "]],[]]]]],[1,"\\n "]],[14]]]]],[1,"\\n "]],[13]],[[[1,"\\n "],[8,[30,19,["Select"]],[[24,0,"type-sort"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,20,["change"]]],null],false,true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n"],[44,[[28,[37,14],[[28,[37,4],[[28,[37,4],["Name:asc",[28,[37,2],["common.sort.alpha.asc"],null]],null],[28,[37,4],["Name:desc",[28,[37,2],["common.sort.alpha.desc"],null]],null],[28,[37,4],["State:asc",[28,[37,2],["components.consul.peer.search-bar.sort.state.asc"],null]],null],[28,[37,4],["State:desc",[28,[37,2],["components.consul.peer.search-bar.sort.state.desc"],null]],null]],null]],null]],[[[1," "],[1,[28,[35,11],[[30,22],[30,20,["value"]]],null]],[1,"\\n"]],[22]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,21,["Optgroup"]],[30,21,["Option"]]],[[[1," "],[8,[30,23],null,[["@label"],[[28,[37,2],["components.consul.peer.search-bar.sort.state.name"],null]]],[["default"],[[[[1,"\\n "],[8,[30,24],null,[["@value","@selected"],["State:asc",[28,[37,15],["State:asc",[30,20,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["components.consul.peer.search-bar.sort.state.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,24],null,[["@value","@selected"],["State:desc",[28,[37,15],["State:desc",[30,20,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["components.consul.peer.search-bar.sort.state.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,23],null,[["@label"],[[28,[37,2],["common.consul.name"],null]]],[["default"],[[[[1,"\\n "],[8,[30,24],null,[["@value","@selected"],["Name:asc",[28,[37,15],["Name:asc",[30,20,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,24],null,[["@value","@selected"],["Name:desc",[28,[37,15],["Name:desc",[30,20,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[23,24]]],[1," "]],[]]]]],[1,"\\n "]],[21]]]]],[1,"\\n "]],[19]]]]],[1,"\\n"]],["&attrs","@filter","search","key","value","search","@onsearch","@search","components","Optgroup","Option","prop","search","components","Optgroup","Option","upperState","state","search","@sort","components","selectable","Optgroup","Option"],false,["search-bar","let","t","concat","array","action","block-slot","each","-track-array","includes","lowercase","get","require","string-to-lower-case","from-entries","eq"]]',moduleName:"consul-ui/components/consul/peer/search-bar/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/peer/selector/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"bN0o4zNN",block:'[[[1,"\\n"],[44,[[30,1]],[[[1," "],[8,[30,2,["Title"]],[[17,3]],null,[["default"],[[[[1,[28,[35,1],["components.hashicorp-consul.side-nav.organization.title"],null]]],[]]]]],[1,"\\n "],[8,[30,2,["Link"]],null,[["@text","@route","@models","@query","@isActive"],[[28,[37,1],["components.hashicorp-consul.side-nav.organization.peers"],null],"dc.peers",[28,[37,2],[[30,4,["Name"]]],null],[28,[37,3],null,[["peer"],[[27]]]],[28,[37,4],["dc.peers",[30,4,["Name"]]],null]]],null],[1,"\\n"]],[2]]]],["@list","SNL","&attrs","@dc"],false,["let","t","array","hash","is-href"]]',moduleName:"consul-ui/components/consul/peer/selector/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/policy/list/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"62bUfTFp",block:'[[[1,"\\n"],[8,[39,0],[[24,0,"consul-policy-list"]],[["@items"],[[30,1]]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n"],[41,[28,[37,3],[[28,[37,4],[[28,[37,5],[[30,2]],null],"policy-management"],null],[28,[37,4],[[28,[37,5],[[30,2]],null],"read-only"],null]],null],[[[1," "],[10,"dl"],[14,0,"policy-management"],[12],[1,"\\n "],[10,"dt"],[12],[1,"Type"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n"],[41,[28,[37,4],[[28,[37,5],[[30,2]],null],"policy-management"],null],[[[1," "],[8,[39,6],null,null,[["default"],[[[[1,"\\n Global Management Policy\\n "]],[]]]]],[1,"\\n"]],[]],[[[1," "],[8,[39,6],null,null,[["default"],[[[[1,"\\n Global Read-only Policy\\n "]],[]]]]],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1," "],[10,3],[15,6,[28,[37,7],["dc.acls.policies.edit",[30,2,["ID"]]],null]],[15,0,[52,[28,[37,4],[[28,[37,5],[[30,2]],null],"policy-management"],null],"is-management"]],[12],[1,[30,2,["Name"]]],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["details"]],[["default"],[[[[1,"\\n "],[10,"dl"],[14,0,"datacenter"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n "],[8,[39,6],null,null,[["default"],[[[[1,"Datacenters"]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[28,[35,8],[", ",[28,[37,9],[[30,2]],null]],null]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[10,"dl"],[14,0,"description"],[12],[1,"\\n "],[10,"dt"],[12],[1,"Description"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[30,2,["Description"]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[8,[30,3],null,null,[["default"],[[[[1,"\\n "],[8,[30,4],null,[["@href"],[[28,[37,7],["dc.acls.policies.edit",[30,2,["ID"]]],null]]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["label"]],[["default"],[[[[1,"\\n"],[41,[28,[37,10],["write policy"],[["item"],[[30,2]]]],[[[1," Edit\\n"]],[]],[[[1," View\\n"]],[]]],[1," "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"],[41,[28,[37,10],["delete policy"],[["item"],[[30,2]]]],[[[1," "],[8,[30,4],[[24,0,"dangerous"]],[["@onclick"],[[28,[37,11],[[30,0],[30,5],[30,2]],null]]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["label"]],[["default"],[[[[1,"\\n Delete\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["confirmation"]],[["default"],[[[[1,"\\n "],[8,[30,6],[[24,0,"warning"]],null,[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n Confirm delete\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n Are you sure you want to delete this policy?\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["confirm"]],[["default"],[[[[1,"\\n "],[8,[30,7],null,null,[["default"],[[[[1,"Delete"]],[]]]]],[1,"\\n "]],[7]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[1," "]],[4]]]]],[1,"\\n "]],[3]]]]],[1,"\\n"]],[2]]]]]],["@items","item","Actions","Action","@ondelete","Confirmation","Confirm"],false,["list-collection","block-slot","if","or","eq","policy/typeof","tooltip","href-to","join","policy/datacenters","can","action"]]',moduleName:"consul-ui/components/consul/policy/list/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})) +define("consul-ui/components/consul/policy/notifications/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"sUAOpVES",block:'[[[1,"\\n"],[41,[28,[37,1],[[30,1],"create"],null],[[[41,[28,[37,1],[[30,2],"success"],null],[[[1," Your policy has been added.\\n"]],[]],[[[1," There was an error adding your policy.\\n"]],[]]]],[]],[[[41,[28,[37,1],[[30,1],"update"],null],[[[41,[28,[37,1],[[30,2],"success"],null],[[[1," Your policy has been saved.\\n"]],[]],[[[1," There was an error saving your policy.\\n"]],[]]]],[]],[[[41,[28,[37,1],[[30,1],"delete"],null],[[[41,[28,[37,1],[[30,2],"success"],null],[[[1," Your policy was deleted.\\n"]],[]],[[[1," There was an error deleting your policy.\\n"]],[]]]],[]],null]],[]]]],[]]],[44,[[30,3,["errors","firstObject"]]],[[[41,[30,4,["detail"]],[[[1," "],[10,"br"],[12],[13],[1,[28,[35,3],["(",[52,[30,4,["status"]],[28,[37,3],[[30,4,["status"]],": "],null]],[30,4,["detail"]],")"],null]],[1,"\\n"]],[]],null]],[4]]]],["@type","@status","@error","error"],false,["if","eq","let","concat"]]',moduleName:"consul-ui/components/consul/policy/notifications/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/policy/search-bar/index",["exports","@ember/component","@ember/template-factory","@glimmer/component"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"Idci/62E",block:'[[[1,"\\n"],[8,[39,0],[[24,0,"consul-policy-search-bar"],[17,1]],[["@filter"],[[30,2]]],[["status","search","filter","sort"],[[[[1,"\\n\\n"],[44,[[28,[37,2],[[28,[37,3],["components.consul.policy.search-bar.",[30,3,["status","key"]],".name"],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","key"]]],null],[28,[37,3],["common.consul.",[30,3,["status","key"]]],null]],null]]]],[28,[37,2],[[28,[37,3],["components.consul.policy.search-bar.",[30,3,["status","key"]],".options.",[30,3,["status","value"]]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","value"]]],null],[28,[37,3],["common.consul.",[30,3,["status","value"]]],null],[28,[37,3],["common.brand.",[30,3,["status","value"]]],null]],null]]]]],[[[1," "],[8,[30,3,["RemoveFilter"]],[[16,"aria-label",[28,[37,2],["common.ui.remove"],[["item"],[[28,[37,3],[[30,4]," ",[30,5]],null]]]]]],null,[["default"],[[[[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,[30,4]],[13],[1,"\\n "],[10,"dd"],[12],[1,[52,[28,[37,6],[[30,3,["status","key"]],"datacenter"],null],[30,3,["status","value"]],[30,5]]],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[4,5]]],[1,"\\n "]],[3]],[[[1,"\\n "],[8,[30,6,["Search"]],null,[["@onsearch","@value","@placeholder"],[[28,[37,7],[[30,0],[30,7]],null],[30,8],[28,[37,2],["common.search.search"],null]]],[["default"],[[[[1,"\\n "],[8,[30,6,["Select"]],[[24,0,"type-search-properties"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,7],[[30,0],[30,2,["searchproperty","change"]]],null],true,true]],[["default"],[[[[1,"\\n "],[8,[39,8],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["common.search.searchproperty"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,8],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,9,["Optgroup"]],[30,9,["Option"]]],[[[42,[28,[37,10],[[28,[37,10],[[30,2,["searchproperty","default"]]],null]],null],null,[[[1," "],[8,[30,11],null,[["@value","@selected"],[[30,12],[28,[37,11],[[30,12],[30,2,["searchproperty","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["common.consul.",[28,[37,12],[[30,12]],null]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[12]],null]],[10,11]]],[1," "]],[]]]]],[1,"\\n "]],[9]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]],[[[1,"\\n "],[8,[30,13,["Select"]],[[24,0,"type-datacenter"]],[["@position","@onchange","@multiple"],["left",[28,[37,7],[[30,0],[30,2,["datacenter","change"]]],null],true]],[["default"],[[[[1,"\\n "],[8,[39,8],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["common.consul.datacenter"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,8],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,14,["Optgroup"]],[30,14,["Option"]]],[[[42,[28,[37,10],[[28,[37,10],[[33,13]],null]],null],null,[[[1," "],[8,[30,16],null,[["@value","@selected"],[[30,17,["Name"]],[28,[37,11],[[30,17,["Name"]],[30,2,["datacenter","value"]]],null]]],[["default"],[[[[1,[30,17,["Name"]]]],[]]]]],[1,"\\n"]],[17]],null],[1," "],[8,[39,14],null,[["@src","@loading","@onchange"],[[28,[37,15],["/${partition}/*/*/datacenters",[28,[37,16],null,[["partition"],[[30,18]]]]],null],"lazy",[28,[37,7],[[30,0],[28,[37,17],[[30,0,["dcs"]]],null]],[["value"],["data"]]]]],null],[1,"\\n"]],[15,16]]],[1," "]],[]]]]],[1,"\\n "]],[14]]]]],[1,"\\n "],[8,[30,13,["Select"]],[[24,0,"type-kind"]],[["@position","@onchange","@multiple"],["left",[28,[37,7],[[30,0],[30,2,["kind","change"]]],null],true]],[["default"],[[[[1,"\\n "],[8,[39,8],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["components.consul.policy.search-bar.kind.name"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,8],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,19,["Optgroup"]],[30,19,["Option"]]],[[[42,[28,[37,10],[[28,[37,10],[[28,[37,4],["global-management","standard"],null]],null]],null],null,[[[1," "],[8,[30,21],[[16,0,[29,["value-",[30,22]]]]],[["@value","@selected"],[[30,22],[28,[37,11],[[30,22],[30,2,["kind","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["components.consul.policy.search-bar.kind.options.",[30,22]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,22]],null]],null]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[22]],null]],[20,21]]],[1," "]],[]]]]],[1,"\\n "]],[19]]]]],[1,"\\n "]],[13]],[[[1,"\\n "],[8,[30,23,["Select"]],[[24,0,"type-sort"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,7],[[30,0],[30,24,["change"]]],null],false,true]],[["default"],[[[[1,"\\n "],[8,[39,8],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n"],[44,[[28,[37,18],[[28,[37,4],[[28,[37,4],["Name:asc",[28,[37,2],["common.sort.alpha.asc"],null]],null],[28,[37,4],["Name:desc",[28,[37,2],["common.sort.alpha.desc"],null]],null]],null]],null]],[[[1," "],[1,[28,[35,19],[[30,26],[30,24,["value"]]],null]],[1,"\\n"]],[26]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,8],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,25,["Optgroup"]],[30,25,["Option"]]],[[[1," "],[8,[30,27],null,[["@label"],[[28,[37,2],["common.ui.name"],null]]],[["default"],[[[[1,"\\n "],[8,[30,28],null,[["@value","@selected"],["Name:asc",[28,[37,6],["Name:asc",[30,24,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,28],null,[["@value","@selected"],["Name:desc",[28,[37,6],["Name:desc",[30,24,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[27,28]]],[1," "]],[]]]]],[1,"\\n "]],[25]]]]],[1,"\\n "]],[23]]]]],[1,"\\n"]],["&attrs","@filter","search","key","value","search","@onsearch","@search","components","Optgroup","Option","prop","search","components","Optgroup","Option","dc","@partition","components","Optgroup","Option","state","search","@sort","components","selectable","Optgroup","Option"],false,["search-bar","let","t","concat","array","if","eq","action","block-slot","each","-track-array","includes","lowercase","dcs","data-source","uri","hash","mut","from-entries","get"]]',moduleName:"consul-ui/components/consul/policy/search-bar/index.hbs",isStrictMode:!1}) +class i extends l.default{}e.default=i,(0,t.setComponentTemplate)(r,i)})),define("consul-ui/components/consul/role/list/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"B3WXmBeq",block:'[[[1,"\\n"],[8,[39,0],[[24,0,"consul-role-list"],[17,1]],[["@items"],[[30,2]]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,3],[15,6,[28,[37,2],["dc.acls.roles.edit",[30,3,["ID"]]],null]],[12],[1,[30,3,["Name"]]],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["details"]],[["default"],[[[[1,"\\n "],[8,[39,3],null,[["@item"],[[30,3]]],null],[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"Description"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[30,3,["Description"]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[8,[30,4],null,null,[["default"],[[[[1,"\\n "],[8,[30,5],null,[["@href"],[[28,[37,2],["dc.acls.roles.edit",[30,3,["ID"]]],null]]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["label"]],[["default"],[[[[1,"\\n"],[41,[28,[37,5],["write role"],[["item"],[[30,3]]]],[[[1," Edit\\n"]],[]],[[[1," View\\n"]],[]]],[1," "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"],[41,[28,[37,5],["delete role"],[["item"],[[30,3]]]],[[[1," "],[8,[30,5],[[24,0,"dangerous"]],[["@onclick"],[[28,[37,6],[[30,0],[30,6],[30,3]],null]]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["label"]],[["default"],[[[[1,"\\n Delete\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["confirmation"]],[["default"],[[[[1,"\\n "],[8,[30,7],[[24,0,"warning"]],null,[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n Confirm delete\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n Are you sure you want to delete this role?\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["confirm"]],[["default"],[[[[1,"\\n "],[8,[30,8],null,null,[["default"],[[[[1,"Delete"]],[]]]]],[1,"\\n "]],[8]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[7]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[1," "]],[5]]]]],[1,"\\n "]],[4]]]]],[1,"\\n"]],[3]]]]]],["&attrs","@items","item","Actions","Action","@ondelete","Confirmation","Confirm"],false,["list-collection","block-slot","href-to","consul/token/ruleset/list","if","can","action"]]',moduleName:"consul-ui/components/consul/role/list/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/role/notifications/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"gE+Sp3ez",block:'[[[1,"\\n"],[41,[28,[37,1],[[30,1],"create"],null],[[[41,[28,[37,1],[[30,2],"success"],null],[[[1," Your role has been added.\\n"]],[]],[[[1," There was an error adding your role.\\n"]],[]]]],[]],[[[41,[28,[37,1],[[30,1],"update"],null],[[[41,[28,[37,1],[[30,2],"success"],null],[[[1," Your role has been saved.\\n"]],[]],[[[1," There was an error saving your role.\\n"]],[]]]],[]],[[[41,[28,[37,1],[[30,1],"delete"],null],[[[41,[28,[37,1],[[30,2],"success"],null],[[[1," Your role was deleted.\\n"]],[]],[[[1," There was an error deleting your role.\\n"]],[]]]],[]],null]],[]]]],[]]],[44,[[30,3,["errors","firstObject"]]],[[[41,[30,4,["detail"]],[[[1," "],[10,"br"],[12],[13],[1,[28,[35,3],["(",[52,[30,4,["status"]],[28,[37,3],[[30,4,["status"]],": "],null]],[30,4,["detail"]],")"],null]],[1,"\\n"]],[]],null]],[4]]]],["@type","@status","@error","error"],false,["if","eq","let","concat"]]',moduleName:"consul-ui/components/consul/role/notifications/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/role/search-bar/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"OtMY+FfU",block:'[[[1,"\\n"],[8,[39,0],[[24,0,"consul-role-search-bar"],[17,1]],[["@filter"],[[30,2]]],[["status","search","sort"],[[[[1,"\\n\\n"],[44,[[28,[37,2],[[28,[37,3],["components.consul.role.search-bar.",[30,3,["status","key"]],".name"],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","key"]]],null],[28,[37,3],["common.consul.",[30,3,["status","key"]]],null]],null]]]],[28,[37,2],[[28,[37,3],["components.consul.role.search-bar.",[30,3,["status","key"]],".options.",[30,3,["status","value"]]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","value"]]],null],[28,[37,3],["common.consul.",[30,3,["status","value"]]],null],[28,[37,3],["common.brand.",[30,3,["status","value"]]],null]],null]]]]],[[[1," "],[8,[30,3,["RemoveFilter"]],[[16,"aria-label",[28,[37,2],["common.ui.remove"],[["item"],[[28,[37,3],[[30,4]," ",[30,5]],null]]]]]],null,[["default"],[[[[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,[30,4]],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,5]],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[4,5]]],[1,"\\n "]],[3]],[[[1,"\\n "],[8,[30,6,["Search"]],null,[["@onsearch","@value","@placeholder"],[[28,[37,5],[[30,0],[30,7]],null],[30,8],[28,[37,2],["common.search.search"],null]]],[["default"],[[[[1,"\\n "],[8,[30,6,["Select"]],[[24,0,"type-search-properties"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,2,["searchproperty","change"]]],null],true,true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["common.search.searchproperty"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,9,["Optgroup"]],[30,9,["Option"]]],[[[42,[28,[37,8],[[28,[37,8],[[30,2,["searchproperty","default"]]],null]],null],null,[[[1," "],[8,[30,11],null,[["@value","@selected"],[[30,12],[28,[37,9],[[30,12],[30,2,["searchproperty","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["common.consul.",[28,[37,10],[[30,12]],null]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[12]],null]],[10,11]]],[1," "]],[]]]]],[1,"\\n "]],[9]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]],[[[1,"\\n "],[8,[30,13,["Select"]],[[24,0,"type-sort"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,14,["change"]]],null],false,true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n"],[44,[[28,[37,11],[[28,[37,4],[[28,[37,4],["Name:asc",[28,[37,2],["common.sort.alpha.asc"],null]],null],[28,[37,4],["Name:desc",[28,[37,2],["common.sort.alpha.desc"],null]],null],[28,[37,4],["CreateIndex:desc",[28,[37,2],["common.sort.age.desc"],null]],null],[28,[37,4],["CreateIndex:asc",[28,[37,2],["common.sort.age.asc"],null]],null]],null]],null]],[[[1," "],[1,[28,[35,12],[[30,16],[30,14,["value"]]],null]],[1,"\\n"]],[16]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,15,["Optgroup"]],[30,15,["Option"]]],[[[1," "],[8,[30,17],null,[["@label"],[[28,[37,2],["common.ui.name"],null]]],[["default"],[[[[1,"\\n "],[8,[30,18],null,[["@value","@selected"],["Name:asc",[28,[37,13],["Name:asc",[30,14,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,18],null,[["@value","@selected"],["Name:desc",[28,[37,13],["Name:desc",[30,14,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,17],null,[["@label"],[[28,[37,2],["common.ui.creation"],null]]],[["default"],[[[[1,"\\n "],[8,[30,18],null,[["@value","@selected"],["CreateIndex:desc",[28,[37,13],["CreateIndex:desc",[30,14,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.age.desc"],null]]],[]]]]],[1,"\\n "],[8,[30,18],null,[["@value","@selected"],["CreateIndex:asc",[28,[37,13],["CreateIndex:asc",[30,14,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.age.asc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[17,18]]],[1," "]],[]]]]],[1,"\\n "]],[15]]]]],[1,"\\n "]],[13]]]]],[1,"\\n"]],["&attrs","@filter","search","key","value","search","@onsearch","@search","components","Optgroup","Option","prop","search","@sort","components","selectable","Optgroup","Option"],false,["search-bar","let","t","concat","array","action","block-slot","each","-track-array","includes","lowercase","from-entries","get","eq"]]',moduleName:"consul-ui/components/consul/role/search-bar/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/server/card/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"Mtow1lYR",block:'[[[1,"\\n"],[11,0],[16,0,[28,[37,0],["consul-server-card",[28,[37,1],["voting-status-leader",[28,[37,2],[[30,1,["Status"]],"leader"],null]],null],[28,[37,1],["voting-status-voter",[28,[37,3],[[28,[37,4],[[30,1,["ReadReplica"]]],null],[28,[37,2],[[30,1,["Status"]],"voter"],null]],null]],null],[28,[37,1],["voting-status-non-voter",[28,[37,5],[[30,1,["ReadReplica"]],[28,[37,6],[[30,1,["Status"]],[28,[37,1],["non-voter","staging"],null]],null]],null]],null]],null]],[17,2],[12],[1,"\\n "],[10,"dl"],[12],[1,"\\n\\n "],[11,"dt"],[24,0,"name"],[4,[38,7],["Leader"],null],[12],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[30,1,["Name"]]],[1,"\\n "],[13],[1,"\\n\\n "],[10,"dt"],[15,0,[28,[37,0],["health-status",[28,[37,1],["healthy",[30,1,["Healthy"]]],null]],null]],[12],[1,"\\n Status\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[52,[28,[37,6],[[30,1,["Status"]],[28,[37,1],["leader","voter"],null]],null],"Active voter","Backup voter"]],[1,"\\n "],[13],[1,"\\n\\n "],[13],[1,"\\n"],[13],[1,"\\n\\n"]],["@item","&attrs"],false,["class-map","array","eq","and","not","or","includes","tooltip","if"]]',moduleName:"consul-ui/components/consul/server/card/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/server/list/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"Npo4ZrBj",block:'[[[1,"\\n"],[11,0],[16,0,[28,[37,0],["consul-server-list"],null]],[17,1],[12],[1,"\\n "],[10,"ul"],[12],[1,"\\n"],[42,[28,[37,2],[[28,[37,2],[[30,2]],null]],null],null,[[[1," "],[10,"li"],[12],[1,"\\n "],[10,3],[15,6,[28,[37,3],["dc.nodes.show",[30,3,["Name"]]],null]],[12],[1,"\\n "],[8,[39,4],null,[["@item"],[[30,3]]],null],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[3]],null],[1," "],[13],[1,"\\n"],[13],[1,"\\n\\n"]],["&attrs","@items","item"],false,["class-map","each","-track-array","href-to","consul/server/card"]]',moduleName:"consul-ui/components/consul/server/list/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/service-identity/template/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"ocpFRqFf",block:'[[[1,"\\n"],[41,[28,[37,1],["use partitions"],null],[[[1,"partition \\""],[1,[28,[35,2],[[30,1],"default"],null]],[1,"\\" {\\n"],[41,[28,[37,1],["use nspaces"],null],[[[1," namespace \\""],[1,[28,[35,2],[[30,2],"default"],null]],[1,"\\" {\\n service \\""],[1,[30,3]],[1,"\\" {\\n\\t policy = \\"write\\"\\n }\\n service \\""],[1,[30,3]],[1,"-sidecar-proxy\\" {\\n\\t policy = \\"write\\"\\n }\\n service_prefix \\"\\" {\\n\\t policy = \\"read\\"\\n }\\n node_prefix \\"\\" {\\n\\t policy = \\"read\\"\\n }\\n }\\n"]],[]],[[[1," service \\""],[1,[30,3]],[1,"\\" {\\n\\t policy = \\"write\\"\\n }\\n service \\""],[1,[30,3]],[1,"-sidecar-proxy\\" {\\n\\t policy = \\"write\\"\\n }\\n service_prefix \\"\\" {\\n\\t policy = \\"read\\"\\n }\\n node_prefix \\"\\" {\\n\\t policy = \\"read\\"\\n }\\n"]],[]]],[1,"}\\n"]],[]],[[[41,[28,[37,1],["use nspaces"],null],[[[1,"namespace \\""],[1,[28,[35,2],[[30,2],"default"],null]],[1,"\\" {\\n service \\""],[1,[30,3]],[1,"\\" {\\n\\t policy = \\"write\\"\\n }\\n service \\""],[1,[30,3]],[1,"-sidecar-proxy\\" {\\n\\t policy = \\"write\\"\\n }\\n service_prefix \\"\\" {\\n\\t policy = \\"read\\"\\n }\\n node_prefix \\"\\" {\\n\\t policy = \\"read\\"\\n }\\n}\\n"]],[]],[[[1,"service \\""],[1,[30,3]],[1,"\\" {\\n\\tpolicy = \\"write\\"\\n}\\nservice \\""],[1,[30,3]],[1,"-sidecar-proxy\\" {\\n\\tpolicy = \\"write\\"\\n}\\nservice_prefix \\"\\" {\\n\\tpolicy = \\"read\\"\\n}\\nnode_prefix \\"\\" {\\n\\tpolicy = \\"read\\"\\n}\\n"]],[]]]],[]]]],["@partition","@nspace","@name"],false,["if","can","or"]]',moduleName:"consul-ui/components/consul/service-identity/template/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/service-instance/list/index",["exports","@ember/component","@ember/template-factory","@glimmer/component"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"UrXEnr5R",block:'[[[1,"\\n"],[44,[[28,[37,1],[[30,1],"Service.Proxy.DestinationServiceID"],null]],[[[8,[39,2],[[24,0,"consul-service-instance-list"],[17,3]],[["@items"],[[30,4]]],[["default"],[[[[1,"\\n "],[8,[39,3],null,[["@name"],["header"]],[["default"],[[[[1,"\\n"],[41,[28,[37,5],[[30,7],"dc.services.show"],null],[[[1," "],[10,3],[15,6,[28,[37,6],[[30,7],[30,5,["Service","Service"]]],null]],[12],[1,"\\n "],[1,[30,5,["Service","ID"]]],[1,"\\n "],[13],[1,"\\n"]],[]],[[[1," "],[10,3],[15,6,[28,[37,6],[[30,7],[30,5,["Service","Service"]],[30,5,["Node","Node"]],[28,[37,7],[[30,5,["Service","ID"]],[30,5,["Service","Service"]]],null]],null]],[12],[1,"\\n "],[1,[30,5,["Service","ID"]]],[1,"\\n "],[13],[1,"\\n"]],[]]],[1," "]],[]]]]],[1,"\\n "],[8,[39,3],null,[["@name"],["details"]],[["default"],[[[[1,"\\n\\n"],[44,[[28,[37,8],[[30,2],[30,5,["Service","ID"]]],null]],[[[44,[[28,[37,9],[[28,[37,10],[[30,5,["Checks"]],[28,[37,7],[[30,8,["Checks"]],[28,[37,10],null,null]],null]],null]],null]],[[[1,"\\n"],[41,[30,10],[[[1," "],[8,[39,11],null,[["@item"],[[30,5,["Service"]]]],null],[1,"\\n "],[8,[39,12],null,[["@type","@items"],["service",[28,[37,13],["ServiceID","",[30,9]],null]]],null],[1,"\\n"]],[]],[[[41,[51,[30,0,["areAllExternalSourcesMatching"]]],[[[1," "],[8,[39,11],null,[["@item"],[[30,5,["Service"]]]],null],[1,"\\n"]],[]],null],[1,"\\n "],[8,[39,12],null,[["@type","@items"],["service",[28,[37,13],["ServiceID","",[30,9]],null]]],null],[1,"\\n\\n"],[41,[51,[30,5,["Node","Meta","synthetic-node"]]],[[[1," "],[8,[39,12],null,[["@type","@items"],["node",[28,[37,15],["ServiceID","",[30,9]],null]]],null],[1,"\\n"]],[]],null]],[]]],[41,[30,8],[[[1," "],[10,"dl"],[14,0,"mesh"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n "],[8,[39,16],null,null,[["default"],[[[[1,"\\n This service uses a proxy for the Consul service mesh\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n in service mesh with proxy\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[28,[37,17],[[28,[37,18],[[30,10]],null],[28,[37,18],[[30,5,["Node","Meta","synthetic-node"]]],null]],null],[[[1," "],[10,"dl"],[14,0,"node"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n "],[8,[39,16],null,null,[["default"],[[[[1,"\\n Node\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[10,3],[15,6,[28,[37,6],["dc.nodes.show",[30,5,["Node","Node"]]],null]],[12],[1,[30,5,["Node","Node"]]],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[30,5,["Service","Port"]],[[[1," "],[10,"dl"],[14,0,"address"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n "],[8,[39,16],null,null,[["default"],[[[[1,"\\n IP Address and Port\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n"],[41,[28,[37,19],[[30,5,["Service","Address"]],""],null],[[[1," "],[1,[30,5,["Service","Address"]]],[1,":"],[1,[30,5,["Service","Port"]]],[1,"\\n"]],[]],[[[1," "],[1,[30,5,["Node","Address"]]],[1,":"],[1,[30,5,["Service","Port"]]],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],[[[41,[30,5,["Service","SocketPath"]],[[[1," "],[10,"dl"],[14,0,"socket"],[12],[1,"\\n "],[11,"dt"],[4,[38,16],null,null],[12],[1,"\\n Socket Path\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[30,5,["Service","SocketPath"]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null]],[]]],[1," "],[8,[39,20],null,[["@item"],[[30,5,["Service"]]]],null],[1,"\\n\\n"]],[9]]]],[8]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[5,6]]]]],[1,"\\n"]],[2]]]],["@proxies","proxies","&attrs","@items","item","index","@routeName","proxy","checks","@node"],false,["let","to-hash","list-collection","block-slot","if","eq","href-to","or","get","merge-checks","array","consul/external-source","consul/instance-checks","filter-by","unless","reject-by","tooltip","and","not","not-eq","tag-list"]]',moduleName:"consul-ui/components/consul/service-instance/list/index.hbs",isStrictMode:!1}) +class i extends l.default{get areAllExternalSourcesMatching(){var e,t,n +const l=null===(e=this.args.items[0])||void 0===e||null===(t=e.Service)||void 0===t||null===(n=t.Meta)||void 0===n?void 0:n["external-source"] +return this.args.items.every((e=>{var t,n +return(null===(t=e.Service)||void 0===t||null===(n=t.Meta)||void 0===n?void 0:n["external-source"])===l}))}}e.default=i,(0,t.setComponentTemplate)(r,i)})),define("consul-ui/components/consul/service-instance/search-bar/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"VjdzBiZi",block:'[[[1,"\\n"],[8,[39,0],[[24,0,"consul-service-instance-search-bar"],[17,1]],[["@filter"],[[30,2]]],[["status","search","filter","sort"],[[[[1,"\\n\\n"],[44,[[28,[37,2],[[28,[37,3],["components.consul.service-instance.search-bar.",[30,3,["status","key"]],".name"],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","key"]]],null],[28,[37,3],["common.consul.",[30,3,["status","key"]]],null]],null]]]],[28,[37,2],[[28,[37,3],["components.consul.service-instance.search-bar.",[30,3,["status","key"]],".options.",[30,3,["status","value"]]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","value"]]],null],[28,[37,3],["common.consul.",[30,3,["status","value"]]],null],[28,[37,3],["common.brand.",[30,3,["status","value"]]],null]],null]]]]],[[[1," "],[8,[30,3,["RemoveFilter"]],[[16,"aria-label",[28,[37,2],["common.ui.remove"],[["item"],[[28,[37,3],[[30,4]," ",[30,5]],null]]]]]],null,[["default"],[[[[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,[30,4]],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,5]],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[4,5]]],[1,"\\n "]],[3]],[[[1,"\\n "],[8,[30,6,["Search"]],null,[["@onsearch","@value","@placeholder"],[[28,[37,5],[[30,0],[30,7]],null],[30,8],[28,[37,2],["common.search.search"],null]]],[["default"],[[[[1,"\\n"],[41,[30,2,["searchproperty"]],[[[1," "],[8,[30,6,["Select"]],[[24,0,"type-search-properties"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,2,["searchproperty","change"]]],null],true,true]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["common.search.searchproperty"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,9,["Option"]]],[[[42,[28,[37,9],[[28,[37,9],[[30,2,["searchproperty","default"]]],null]],null],null,[[[1," "],[8,[30,10],null,[["@value","@selected"],[[30,11],[28,[37,10],[[30,11],[30,2,["searchproperty","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["common.consul.",[28,[37,11],[[30,11]],null]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[11]],null]],[10]]],[1," "]],[]]]]],[1,"\\n "]],[9]]]]],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "]],[6]],[[[1,"\\n "],[8,[30,12,["Select"]],[[24,0,"type-status"]],[["@position","@onchange","@multiple"],["left",[28,[37,5],[[30,0],[30,2,["status","change"]]],null],true]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["common.consul.status"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,13,["Optgroup"]],[30,13,["Option"]]],[[[42,[28,[37,9],[[28,[37,9],[[28,[37,4],["passing","warning","critical","empty"],null]],null]],null],null,[[[1," "],[8,[30,15],[[16,0,[29,["value-",[30,16]]]]],[["@value","@selected"],[[30,16],[28,[37,10],[[30,16],[30,2,["status","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["common.consul.",[30,16]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,16]],null]],null]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[16]],null]],[14,15]]],[1," "]],[]]]]],[1,"\\n "]],[13]]]]],[1,"\\n"],[41,[28,[37,12],[[30,17,["length"]],0],null],[[[1," "],[8,[30,12,["Select"]],[[24,0,"type-source"]],[["@position","@onchange","@multiple"],["left",[28,[37,5],[[30,0],[30,2,["source","change"]]],null],true]],[["default"],[[[[1,"\\n "],[8,[39,13],null,[["@components","@filter","@sources"],[[30,18],[30,2],[30,17]]],null],[1,"\\n "]],[18]]]]],[1,"\\n"]],[]],null],[1," "]],[12]],[[[1,"\\n "],[8,[30,19,["Select"]],[[24,0,"type-sort"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,20,["change"]]],null],false,true]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n"],[44,[[28,[37,14],[[28,[37,4],[[28,[37,4],["Name:asc",[28,[37,2],["common.sort.alpha.asc"],null]],null],[28,[37,4],["Name:desc",[28,[37,2],["common.sort.alpha.desc"],null]],null],[28,[37,4],["Status:asc",[28,[37,2],["common.sort.status.asc"],null]],null],[28,[37,4],["Status:desc",[28,[37,2],["common.sort.status.desc"],null]],null]],null]],null]],[[[1," "],[1,[28,[35,15],[[30,22],[30,20,["value"]]],null]],[1,"\\n"]],[22]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,21,["Optgroup"]],[30,21,["Option"]]],[[[1," "],[8,[30,23],null,[["@label"],[[28,[37,2],["common.consul.status"],null]]],[["default"],[[[[1,"\\n "],[8,[30,24],null,[["@value","@selected"],["Status:asc",[28,[37,16],["Status:asc",[30,20,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.status.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,24],null,[["@value","@selected"],["Status:desc",[28,[37,16],["Status:desc",[30,20,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.status.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,23],null,[["@label"],[[28,[37,2],["components.consul.service-instance.search-bar.sort.name.name"],null]]],[["default"],[[[[1,"\\n "],[8,[30,24],null,[["@value","@selected"],["Name:asc",[28,[37,16],["Name:asc",[30,20,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,24],null,[["@value","@selected"],["Name:desc",[28,[37,16],["Name:desc",[30,20,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[23,24]]],[1," "]],[]]]]],[1,"\\n "]],[21]]]]],[1,"\\n "]],[19]]]]],[1,"\\n"]],["&attrs","@filter","search","key","value","search","@onsearch","@search","components","Option","prop","search","components","Optgroup","Option","state","@sources","components","search","@sort","components","selectable","Optgroup","Option"],false,["search-bar","let","t","concat","array","action","if","block-slot","each","-track-array","includes","lowercase","gt","consul/sources-select","from-entries","get","eq"]]',moduleName:"consul-ui/components/consul/service-instance/search-bar/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/service/list/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"xPCwneUJ",block:'[[[1,"\\n"],[8,[39,0],[[24,0,"consul-service-list"],[17,1]],[["@items","@linkable"],[[30,2],"linkable service"]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@item","@partition","@nspace"],[[30,3],[30,5],[30,6]]],null],[1,"\\n"]],[3,4]]]]],[1,"\\n"]],["&attrs","@items","item","index","@partition","@nspace"],false,["list-collection","consul/service/list/item"]]',moduleName:"consul-ui/components/consul/service/list/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/service/list/item/index",["exports","@ember/component","@ember/template-factory","@glimmer/component"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"cAe7geUl",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"dl"],[15,0,[30,1,["MeshStatus"]]],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n Health\\n "],[13],[1,"\\n "],[11,"dd"],[4,[38,1],[[30,1,["healthTooltipText"]]],null],[12],[13],[1,"\\n "],[13],[1,"\\n"],[41,[28,[37,3],[[30,1,["InstanceCount"]],0],null],[[[1," "],[10,3],[15,6,[28,[37,4],["dc.services.show.index",[30,1,["Name"]]],[["params"],[[30,0,["linkParams"]]]]]],[12],[1,"\\n "],[1,[30,1,["Name"]]],[1,"\\n "],[13],[1,"\\n"]],[]],[[[1," "],[10,2],[12],[1,"\\n "],[1,[30,1,["Name"]]],[1,"\\n "],[13],[1,"\\n"]],[]]]],[]]]]],[1,"\\n"],[8,[39,0],null,[["@name"],["details"]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@item"],[[30,1]]],null],[1,"\\n "],[8,[39,6],null,[["@item"],[[30,1]]],null],[1,"\\n"],[41,[28,[37,7],[[28,[37,8],[[30,1,["InstanceCount"]],0],null],[28,[37,7],[[28,[37,8],[[30,1,["Kind"]],"terminating-gateway"],null],[28,[37,8],[[30,1,["Kind"]],"ingress-gateway"],null]],null]],null],[[[1," "],[10,1],[12],[1,"\\n "],[1,[28,[35,9],[[30,1,["InstanceCount"]]],null]],[1,"\\n "],[1,[28,[35,10],[[30,1,["InstanceCount"]],"instance"],[["without-count"],[true]]]],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[51,[30,2]],[[[1," "],[8,[39,12],null,[["@item","@nspace","@partition"],[[30,1],[30,3],[30,4]]],null],[1,"\\n"]],[]],null],[41,[28,[37,13],[[30,1,["Kind"]],"terminating-gateway"],null],[[[1," "],[10,1],[12],[1,"\\n "],[1,[28,[35,9],[[30,1,["GatewayConfig","AssociatedServiceCount"]]],null]],[1,"\\n "],[1,[28,[35,10],[[30,1,["GatewayConfig","AssociatedServiceCount"]],"linked service"],[["without-count"],[true]]]],[1,"\\n "],[13],[1,"\\n"]],[]],[[[41,[28,[37,13],[[30,1,["Kind"]],"ingress-gateway"],null],[[[1," "],[10,1],[12],[1,"\\n "],[1,[28,[35,9],[[30,1,["GatewayConfig","AssociatedServiceCount"]]],null]],[1,"\\n "],[1,[28,[35,10],[[30,1,["GatewayConfig","AssociatedServiceCount"]],"upstream"],[["without-count"],[true]]]],[1,"\\n "],[13],[1,"\\n "]],[]],null]],[]]],[41,[28,[37,14],[[30,1,["ConnectedWithGateway"]],[30,1,["ConnectedWithProxy"]]],null],[[[1," "],[10,"dl"],[14,0,"mesh"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n "],[8,[39,1],null,null,[["default"],[[[[1,"\\n This service uses a proxy for the Consul service mesh\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n"],[41,[28,[37,7],[[30,1,["ConnectedWithGateway"]],[30,1,["ConnectedWithProxy"]]],null],[[[1," "],[10,"dd"],[12],[1,"\\n in service mesh with proxy and gateway\\n "],[13],[1,"\\n"]],[]],[[[41,[30,1,["ConnectedWithProxy"]],[[[1," "],[10,"dd"],[12],[1,"\\n in service mesh with proxy\\n "],[13],[1,"\\n"]],[]],[[[41,[30,1,["ConnectedWithGateway"]],[[[1," "],[10,"dd"],[12],[1,"\\n in service mesh with gateway\\n "],[13],[1,"\\n "]],[]],null]],[]]]],[]]],[1," "],[13],[1,"\\n"]],[]],null],[1," "],[8,[39,15],null,[["@item"],[[30,1]]],null],[1,"\\n"]],[]]]]]],["@item","@isPeerDetail","@nspace","@partition"],false,["block-slot","tooltip","if","gt","href-to","consul/kind","consul/external-source","and","not-eq","format-number","pluralize","unless","consul/bucket/list","eq","or","tag-list"]]',moduleName:"consul-ui/components/consul/service/list/item/index.hbs",isStrictMode:!1}) +class i extends l.default{get linkParams(){const e={} +return this.args.item.Partition&&this.args.partition!==this.args.item.Partition?(e.partition=this.args.item.Partition,e.nspace=this.args.Namespace):this.args.item.Namespace&&this.args.nspace!==this.args.item.Namespace&&(e.nspace=this.args.item.Namespace),this.args.item.PeerName&&(e.peer=this.args.item.PeerName),e}}e.default=i,(0,t.setComponentTemplate)(r,i)})),define("consul-ui/components/consul/service/search-bar/index",["exports","@ember/component","@ember/template-factory","@glimmer/component"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"4sJ6oMs1",block:'[[[1,"\\n"],[8,[39,0],[[24,0,"consul-service-search-bar"],[17,1]],[["@filter"],[[30,2]]],[["status","search","filter","sort"],[[[[1,"\\n\\n"],[44,[[28,[37,2],[[28,[37,3],["components.consul.service.search-bar.",[30,3,["status","key"]]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","key"]]],null],[28,[37,3],["common.consul.",[30,3,["status","key"]]],null]],null]]]],[28,[37,2],[[28,[37,3],["components.consul.service.search-bar.",[30,3,["status","value"]]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","value"]]],null],[28,[37,3],["common.consul.",[30,3,["status","value"]]],null],[28,[37,3],["common.brand.",[30,3,["status","value"]]],null]],null]]]]],[[[1," "],[8,[30,3,["RemoveFilter"]],[[16,"aria-label",[28,[37,2],["common.ui.remove"],[["item"],[[28,[37,3],[[30,4]," ",[30,5]],null]]]]]],null,[["default"],[[[[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,[30,4]],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,5]],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[4,5]]],[1,"\\n "]],[3]],[[[1,"\\n "],[8,[30,6,["Search"]],null,[["@onsearch","@value","@placeholder"],[[28,[37,5],[[30,0],[30,7]],null],[30,8],[28,[37,2],["common.search.search"],null]]],[["default"],[[[[1,"\\n "],[8,[30,6,["Select"]],[[24,0,"type-search-properties"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,2,["searchproperty","change"]]],null],true,true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["common.search.searchproperty"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,9,["Optgroup"]],[30,9,["Option"]]],[[[42,[28,[37,8],[[28,[37,8],[[30,2,["searchproperty","default"]]],null]],null],null,[[[1," "],[8,[30,11],null,[["@value","@selected"],[[30,12],[28,[37,9],[[30,12],[30,2,["searchproperty","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["common.consul.",[28,[37,10],[[30,12]],null]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[12]],null]],[10,11]]],[1," "]],[]]]]],[1,"\\n "]],[9]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]],[[[1,"\\n "],[8,[30,13,["Select"]],[[24,0,"type-status"]],[["@position","@onchange","@multiple"],["left",[28,[37,5],[[30,0],[30,2,["status","change"]]],null],true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["common.consul.status"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,14,["Optgroup"]],[30,14,["Option"]]],[[[42,[28,[37,8],[[28,[37,8],[[30,0,["healthStates"]]],null]],null],null,[[[1," "],[8,[30,16],[[16,0,[29,["value-",[30,17]]]]],[["@value","@selected"],[[30,17],[28,[37,9],[[30,17],[30,2,["status","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["common.consul.",[30,17]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,17]],null]],null]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[17]],null]],[15,16]]],[1," "]],[]]]]],[1,"\\n "]],[14]]]]],[1,"\\n "],[8,[30,13,["Select"]],null,[["@position","@onchange","@multiple"],["left",[28,[37,5],[[30,0],[30,2,["kind","change"]]],null],true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["components.consul.service.search-bar.kind"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,18,["Optgroup"]],[30,18,["Option"]]],[[[1," "],[8,[30,20],null,[["@value","@selected"],["service",[28,[37,9],["service",[30,2,["kind","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],["common.consul.service"],null]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,19],null,[["@label"],[[28,[37,2],["common.consul.gateway"],null]]],[["default"],[[[[1,"\\n"],[42,[28,[37,8],[[28,[37,8],[[28,[37,4],["api-gateway","ingress-gateway","terminating-gateway","mesh-gateway"],null]],null]],null],null,[[[1," "],[8,[30,20],null,[["@value","@selected"],[[30,21],[28,[37,9],[[30,21],[30,2,["kind","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["common.consul.",[30,21]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[21]],null],[1," "]],[]]]]],[1,"\\n "],[8,[30,19],null,[["@label"],[[28,[37,2],["common.consul.mesh"],null]]],[["default"],[[[[1,"\\n"],[42,[28,[37,8],[[28,[37,8],[[28,[37,4],["in-mesh","not-in-mesh"],null]],null]],null],null,[[[1," "],[8,[30,20],null,[["@value","@selected"],[[30,22],[28,[37,9],[[30,22],[30,2,["kind","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["common.search.",[30,22]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[22]],null],[1," "]],[]]]]],[1,"\\n"]],[19,20]]],[1," "]],[]]]]],[1,"\\n "]],[18]]]]],[1,"\\n"],[41,[28,[37,12],[[30,23,["length"]],0],null],[[[1," "],[8,[30,13,["Select"]],[[24,0,"type-source"]],[["@position","@onchange","@multiple"],["left",[28,[37,5],[[30,0],[30,2,["source","change"]]],null],true]],[["default"],[[[[1,"\\n "],[8,[39,13],null,[["@components","@filter","@sources"],[[30,24],[30,2],[30,0,["sortedSources"]]]],null],[1,"\\n "]],[24]]]]],[1,"\\n"]],[]],null],[1," "]],[13]],[[[1,"\\n "],[8,[30,25,["Select"]],[[24,0,"type-sort"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,26,["change"]]],null],false,true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n"],[44,[[28,[37,14],[[28,[37,4],[[28,[37,4],["Name:asc",[28,[37,2],["common.sort.alpha.asc"],null]],null],[28,[37,4],["Name:desc",[28,[37,2],["common.sort.alpha.desc"],null]],null],[28,[37,4],["Status:asc",[28,[37,2],["common.sort.status.asc"],null]],null],[28,[37,4],["Status:desc",[28,[37,2],["common.sort.status.desc"],null]],null]],null]],null]],[[[1," "],[1,[28,[35,15],[[30,28],[30,26,["value"]]],null]],[1,"\\n"]],[28]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,27,["Optgroup"]],[30,27,["Option"]]],[[[1," "],[8,[30,29],null,[["@label"],[[28,[37,2],["common.consul.status"],null]]],[["default"],[[[[1,"\\n "],[8,[30,30],null,[["@value","@selected"],["Status:asc",[28,[37,16],["Status:asc",[30,26,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.status.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,30],null,[["@value","@selected"],["Status:desc",[28,[37,16],["Status:desc",[30,26,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.status.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,29],null,[["@label"],[[28,[37,2],["common.consul.service-name"],null]]],[["default"],[[[[1,"\\n "],[8,[30,30],null,[["@value","@selected"],["Name:asc",[28,[37,16],["Name:asc",[30,26,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,30],null,[["@value","@selected"],["Name:desc",[28,[37,16],["Name:desc",[30,26,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[29,30]]],[1," "]],[]]]]],[1,"\\n "]],[27]]]]],[1,"\\n "]],[25]]]]],[1,"\\n"]],["&attrs","@filter","search","key","value","search","@onsearch","@search","components","Optgroup","Option","prop","search","components","Optgroup","Option","state","components","Optgroup","Option","kind","state","@sources","components","search","@sort","components","selectable","Optgroup","Option"],false,["search-bar","let","t","concat","array","action","block-slot","each","-track-array","includes","lowercase","if","gt","consul/sources-select","from-entries","get","eq"]]',moduleName:"consul-ui/components/consul/service/search-bar/index.hbs",isStrictMode:!1}) +class i extends l.default{get healthStates(){return this.args.peer?["passing","warning","critical","unknown","empty"]:["passing","warning","critical","empty"]}get sortedSources(){const e=this.args.sources||[] +return e.unshift(["consul"]),e.includes("consul-api-gateway")?[...e.filter((e=>"consul-api-gateway"!==e)),"consul-api-gateway"]:e}}e.default=i,(0,t.setComponentTemplate)(r,i)})),define("consul-ui/components/consul/source/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"94oD1HbB",block:'[[[1,"\\n"],[10,"dl"],[14,0,"tooltip-panel"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n "],[10,1],[14,0,"consul-source"],[12],[1,"\\n "],[1,[30,1]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,0],null,[["@position"],["left"]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],["components.consul.source.header"],null]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["menu"]],[["default"],[[[[1,"\\n "],[10,"li"],[14,"role","separator"],[12],[1,"\\n "],[1,[28,[35,2],["components.consul.source.menu-title"],null]],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[14,"role","none"],[14,0,"docs-link"],[12],[1,"\\n "],[10,3],[14,"tabindex","-1"],[14,"role","menuitem"],[15,6,[29,[[28,[37,3],["CONSUL_DOCS_URL"],null],"/connect/l7-traffic"]]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[1,"\\n "],[1,[28,[35,2],["components.consul.source.links.documentation"],null]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n"],[13],[1,"\\n\\n"]],["@source"],false,["menu-panel","block-slot","t","env"]]',moduleName:"consul-ui/components/consul/source/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/sources-select/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"FlZT/Gne",block:'[[[1,"\\n"],[41,[28,[37,1],[[30,1,["length"]],0],null],[[[1," "],[8,[39,2],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,3],["common.search.source"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,2],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,2,["Option"]]],[[[42,[28,[37,6],[[28,[37,6],[[30,1]],null]],null],null,[[[44,[[28,[37,7],[[30,4]],null]],[[[1," "],[8,[30,3],[[16,0,[52,[51,[30,5]],[30,4]]]],[["@value","@selected"],[[30,4],[28,[37,9],[[30,4],[30,6,["source","value"]]],null]]],[["default"],[[[[1,"\\n"],[41,[30,5],[[[1," "],[8,[39,10],[[24,0,"mr-2.5"]],[["@name"],[[30,5]]],null],[1,"\\n"]],[]],null],[1," "],[1,[28,[35,3],[[28,[37,11],["common.brand.",[30,4]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[5]]]],[4]],null]],[3]]],[1," "]],[]]]]],[1,"\\n"]],[]],null]],["@sources","@components","Option","source","flightIcon","@filter"],false,["if","gt","block-slot","t","let","each","-track-array","icon-mapping","unless","includes","flight-icon","concat"]]',moduleName:"consul-ui/components/consul/sources-select/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/token/list/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"0BngM4XH",block:'[[[1,"\\n"],[8,[39,0],[[24,0,"consul-token-list"]],[["@items"],[[30,1]]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n"],[41,[28,[37,3],[[30,2,["AccessorID"]],[30,3,["AccessorID"]]],null],[[[1," "],[10,"dl"],[14,"rel","me"],[12],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,4],null,[["@position"],["top-start"]],[["default"],[[[[1,"\\n Your token\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1," "],[10,3],[15,6,[28,[37,5],["dc.acls.tokens.edit",[30,2,["AccessorID"]]],null]],[12],[1,[28,[35,6],[[30,2,["AccessorID"]],-8],null]],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["details"]],[["default"],[[[[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"Scope"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[52,[30,2,["Local"]],"local","global"]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[8,[39,7],null,[["@item"],[[30,2]]],null],[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"Description"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[28,[35,8],[[30,2,["Description"]],[30,2,["Name"]]],null]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n"],[41,[30,2,["hasSecretID"]],[[[1," "],[8,[39,9],null,[["@value","@name"],[[30,2,["SecretID"]],[28,[37,10],["components.consul.token.secretID"],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,10],["components.consul.token.secretID"],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[1," "],[8,[30,4],null,null,[["default"],[[[[1,"\\n "],[8,[30,5],null,[["@href"],[[28,[37,5],["dc.acls.tokens.edit",[30,2,["AccessorID"]]],null]]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["label"]],[["default"],[[[[1,"\\n"],[41,[28,[37,11],["write token"],[["item"],[[30,2]]]],[[[1," Edit\\n"]],[]],[[[1," View\\n"]],[]]],[1," "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"],[41,[28,[37,11],["duplicate token"],[["item"],[[30,2]]]],[[[1," "],[8,[30,5],null,[["@onclick"],[[28,[37,12],[[30,0],[30,6],[30,2]],null]]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["label"]],[["default"],[[[[1,"\\n Duplicate\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[1,"\\n"],[41,[28,[37,3],[[30,2,["AccessorID"]],[33,13,["AccessorID"]]],null],[[[1," "],[8,[30,5],[[24,0,"dangerous"]],[["@onclick"],[[28,[37,12],[[30,0],[30,7],[30,2]],null]]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["label"]],[["default"],[[[[1,"\\n Logout\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["confirmation"]],[["default"],[[[[1,"\\n "],[8,[30,8],[[24,0,"warning"]],null,[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n Confirm logout\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n Are you sure you want to stop using this ACL token? This will log you out.\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["confirm"]],[["default"],[[[[1,"\\n "],[8,[30,9],null,null,[["default"],[[[[1,"Logout"]],[]]]]],[1,"\\n "]],[9]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[8]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],[[[1," "],[8,[30,5],null,[["@onclick"],[[28,[37,12],[[30,0],[30,10],[30,2]],null]]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["label"]],[["default"],[[[[1,"\\n Use\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["confirmation"]],[["default"],[[[[1,"\\n "],[8,[30,11],[[24,0,"warning"]],null,[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n Confirm use\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n Are you sure you want to use this ACL token?\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["confirm"]],[["default"],[[[[1,"\\n "],[8,[30,12],null,null,[["default"],[[[[1,"Use"]],[]]]]],[1,"\\n "]],[12]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[11]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]]],[1,"\\n\\n"],[41,[28,[37,11],["delete token"],[["item","token"],[[30,2],[30,3]]]],[[[1," "],[8,[30,5],[[24,0,"dangerous"]],[["@onclick"],[[28,[37,12],[[30,0],[30,13],[30,2]],null]]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["label"]],[["default"],[[[[1,"\\n Delete\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["confirmation"]],[["default"],[[[[1,"\\n "],[8,[30,14],[[24,0,"warning"]],null,[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n Confirm delete\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n Are you sure you want to delete this token?\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["confirm"]],[["default"],[[[[1,"\\n "],[8,[30,15],null,null,[["default"],[[[[1,"Delete"]],[]]]]],[1,"\\n "]],[15]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[14]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[1,"\\n "]],[5]]]]],[1,"\\n "]],[4]]]]],[1,"\\n"]],[2]]]]]],["@items","item","@token","Actions","Action","@onclone","@onlogout","Confirmation","Confirm","@onuse","Confirmation","Confirm","@ondelete","Confirmation","Confirm"],false,["list-collection","block-slot","if","eq","tooltip","href-to","substr","consul/token/ruleset/list","or","consul-copy-button","t","can","action","token"]]',moduleName:"consul-ui/components/consul/token/list/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/token/notifications/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"dh/3vHST",block:'[[[1,"\\n"],[41,[28,[37,1],[[30,1],"create"],null],[[[41,[28,[37,1],[[30,2],"success"],null],[[[1," The token has been added.\\n"]],[]],[[[1," There was an error adding the token.\\n"]],[]]]],[]],[[[41,[28,[37,1],[[30,1],"update"],null],[[[41,[28,[37,1],[[30,2],"success"],null],[[[1," The token has been saved.\\n"]],[]],[[[1," There was an error saving the token.\\n"]],[]]]],[]],[[[41,[28,[37,1],[[30,1],"delete"],null],[[[41,[28,[37,1],[[30,2],"success"],null],[[[1," The token was deleted.\\n"]],[]],[[[1," There was an error deleting the token.\\n"]],[]]]],[]],[[[41,[28,[37,1],[[30,1],"clone"],null],[[[41,[28,[37,1],[[30,2],"success"],null],[[[1," The token has been cloned as "],[1,[28,[35,2],[[30,3,["AccessorID"]],8,false],null]],[1,"\\n"]],[]],[[[1," There was an error cloning the token.\\n"]],[]]]],[]],[[[41,[28,[37,1],[[30,1],"use"],null],[[[41,[28,[37,1],[[30,2],"success"],null],[[[1," You are now using the new ACL token\\n"]],[]],[[[1," There was an error using that ACL token.\\n"]],[]]]],[]],null]],[]]]],[]]]],[]]]],[]]],[44,[[30,4,["errors","firstObject"]]],[[[41,[30,5,["detail"]],[[[1," "],[10,"br"],[12],[13],[1,[28,[35,4],["(",[52,[30,5,["status"]],[28,[37,4],[[30,5,["status"]],": "],null]],[30,5,["detail"]],")"],null]],[1,"\\n"]],[]],null]],[5]]]],["@type","@status","@item","@error","error"],false,["if","eq","truncate","let","concat"]]',moduleName:"consul-ui/components/consul/token/notifications/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/token/ruleset/list/index",["exports","@ember/component","@ember/template-factory"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const l=(0,n.createTemplateFactory)({id:"K4Pw6G3b",block:'[[[1,"\\n"],[44,[[28,[37,1],[[28,[37,2],[[33,3,["Policies"]],[33,3,["ACLs","PolicyDefaults"]],[28,[37,4],null,null]],null]],null]],[[[44,[[28,[37,5],[[30,1],"management"],null]],[[[41,[28,[37,7],[[30,2,["length"]],0],null],[[[1," "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n Management\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n"],[42,[28,[37,9],[[28,[37,9],[[28,[37,5],[[30,1],"management"],null]],null]],null],null,[[[1," "],[10,1],[15,0,[28,[37,10],[[30,3]],null]],[12],[1,[30,3,["Name"]]],[13],[1,"\\n"]],[3]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null]],[2]]],[44,[[28,[37,5],[[30,1],"identities"],null]],[[[41,[28,[37,7],[[30,4,["length"]],0],null],[[[1," "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"Identities"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n"],[42,[28,[37,9],[[28,[37,9],[[30,4]],null]],null],null,[[[1," "],[10,1],[15,0,[28,[37,10],[[30,5]],null]],[12],[1,[30,5,["Name"]]],[13],[1,"\\n"]],[5]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null]],[4]]],[41,[28,[37,11],[[33,3]],null],[[[1," "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"Rules"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n Legacy tokens have embedded rules.\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],[[[44,[[28,[37,12],[[28,[37,5],[[30,1],"policies"],null],[28,[37,2],[[33,3,["Roles"]],[33,3,["ACLs","RoleDefaults"]],[28,[37,4],null,null]],null]],null]],[[[41,[28,[37,7],[[30,6,["length"]],0],null],[[[1," "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"Rules"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n"],[42,[28,[37,9],[[28,[37,9],[[30,6]],null]],null],null,[[[1," "],[10,1],[15,0,[28,[37,10],[[30,7]],null]],[12],[1,[30,7,["Name"]]],[13],[1,"\\n"]],[7]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null]],[6]]]],[]]]],[1]]]],["policies","management","item","identities","item","policies","item"],false,["let","policy/group","or","item","array","get","if","gt","each","-track-array","policy/typeof","token/is-legacy","append"]]',moduleName:"consul-ui/components/consul/token/ruleset/list/index.hbs",isStrictMode:!1}) +var r=(0,t.setComponentTemplate)(l,t.default.extend({tagName:""})) +e.default=r})),define("consul-ui/components/consul/token/search-bar/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"bjhw2BTT",block:'[[[1,"\\n"],[8,[39,0],[[24,0,"consul-token-search-bar"],[17,1]],[["@filter"],[[30,2]]],[["status","search","filter","sort"],[[[[1,"\\n\\n"],[44,[[28,[37,2],[[28,[37,3],["components.consul.token.search-bar.",[30,3,["status","key"]],".name"],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","key"]]],null],[28,[37,3],["common.consul.",[30,3,["status","key"]]],null]],null]]]],[28,[37,2],[[28,[37,3],["components.consul.token.search-bar.",[30,3,["status","key"]],".options.",[30,3,["status","value"]]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","value"]]],null],[28,[37,3],["common.consul.",[30,3,["status","value"]]],null],[28,[37,3],["common.brand.",[30,3,["status","value"]]],null]],null]]]]],[[[1," "],[8,[30,3,["RemoveFilter"]],[[16,"aria-label",[28,[37,2],["common.ui.remove"],[["item"],[[28,[37,3],[[30,4]," ",[30,5]],null]]]]]],null,[["default"],[[[[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,[30,4]],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,5]],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[4,5]]],[1,"\\n "]],[3]],[[[1,"\\n "],[8,[30,6,["Search"]],null,[["@onsearch","@value","@placeholder"],[[28,[37,5],[[30,0],[30,7]],null],[30,8],[28,[37,2],["common.search.search"],null]]],[["default"],[[[[1,"\\n "],[8,[30,6,["Select"]],[[24,0,"type-search-properties"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,2,["searchproperty","change"]]],null],true,true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["common.search.searchproperty"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,9,["Optgroup"]],[30,9,["Option"]]],[[[42,[28,[37,8],[[28,[37,8],[[30,2,["searchproperty","default"]]],null]],null],null,[[[1," "],[8,[30,11],null,[["@value","@selected"],[[30,12],[28,[37,9],[[30,12],[30,2,["searchproperty","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["common.consul.",[28,[37,10],[[30,12]],null]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[12]],null]],[10,11]]],[1," "]],[]]]]],[1,"\\n "]],[9]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]],[[[1,"\\n "],[8,[30,13,["Select"]],[[24,0,"type-status"]],[["@position","@onchange","@multiple"],["left",[28,[37,5],[[30,0],[30,2,["kind","change"]]],null],true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["components.consul.token.search-bar.kind.name"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,14,["Optgroup"]],[30,14,["Option"]]],[[[42,[28,[37,8],[[28,[37,8],[[28,[37,4],["global-management","global","local"],null]],null]],null],null,[[[1," "],[8,[30,16],[[16,0,[29,["value-",[30,17]]]]],[["@value","@selected"],[[30,17],[28,[37,9],[[30,17],[30,2,["kind","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["components.consul.token.search-bar.kind.options.",[30,17]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,17]],null]],null]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[17]],null]],[15,16]]],[1," "]],[]]]]],[1,"\\n "]],[14]]]]],[1,"\\n "]],[13]],[[[1,"\\n "],[8,[30,18,["Select"]],[[24,0,"type-sort"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,19,["change"]]],null],false,true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n"],[44,[[28,[37,11],[[28,[37,4],[[28,[37,4],["CreateTime:desc",[28,[37,2],["common.sort.age.desc"],null]],null],[28,[37,4],["CreateTime:asc",[28,[37,2],["common.sort.age.asc"],null]],null]],null]],null]],[[[1," "],[1,[28,[35,12],[[30,21],[30,19,["value"]]],null]],[1,"\\n"]],[21]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,20,["Optgroup"]],[30,20,["Option"]]],[[[1," "],[8,[30,22],null,[["@label"],[[28,[37,2],["common.ui.creation"],null]]],[["default"],[[[[1,"\\n "],[8,[30,23],null,[["@value","@selected"],["CreateTime:desc",[28,[37,13],["CreateTime:desc",[30,19,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.age.desc"],null]]],[]]]]],[1,"\\n "],[8,[30,23],null,[["@value","@selected"],["CreateTime:asc",[28,[37,13],["CreateTime:asc",[30,19,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.age.asc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[22,23]]],[1," "]],[]]]]],[1,"\\n "]],[20]]]]],[1,"\\n "]],[18]]]]],[1,"\\n"]],["&attrs","@filter","search","key","value","search","@onsearch","@search","components","Optgroup","Option","prop","search","components","Optgroup","Option","state","search","@sort","components","selectable","Optgroup","Option"],false,["search-bar","let","t","concat","array","action","block-slot","each","-track-array","includes","lowercase","from-entries","get","eq"]]',moduleName:"consul-ui/components/consul/token/search-bar/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/token/selector/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@ember/object"],(function(e,t,n,l,r){var i +function o(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const a=(0,n.createTemplateFactory)({id:"IGuw4tq5",block:'[[[1,"\\n"],[41,[28,[37,1],["use acls"],null],[[[1," "],[8,[39,2],null,[["@src","@sink","@onchange"],[[28,[37,3],["settings://consul:token"],null],[28,[37,3],["settings://consul:token"],null],[30,0,["reauthorize"]]]],[["unauthorized","authorized"],[[[[1,"\\n\\n "],[8,[39,4],null,[["@name","@onclose","@onopen","@aria"],["login-toggle",[30,0,["close"]],[30,0,["open"]],[28,[37,5],null,[["label"],["Log in to Consul"]]]]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@target","@name","@value"],[[30,0],"modal",[30,2]]],null],[1,"\\n "],[8,[39,7],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"\\n Log in to Consul\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[8,[39,8],null,[["@dc","@partition","@nspace","@onsubmit"],[[30,3,["Name"]],[30,4],[30,5],[28,[37,9],[[30,0],[30,1,["login"]]],[["value"],["data"]]]]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@target","@name","@value"],[[30,0],"authForm",[30,6]]],null],[1,"\\n"],[41,[28,[37,1],["use SSO"],null],[[[1," "],[8,[30,6,["Method"]],null,[["@matches"],["sso"]],[["default"],[[[[1,"\\n "],[8,[39,10],null,[["@dc","@partition","@nspace","@disabled","@onchange","@onerror"],[[30,3,["Name"]],[30,4],[30,5],[30,6,["disabled"]],[30,6,["submit"]],[30,6,["error"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[1," "]],[6]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[8,[39,11],[[4,[38,12],["click",[30,2,["close"]]],null]],[["@color","@text"],["secondary","Continue without logging in"]],null],[1,"\\n "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n\\n "],[8,[39,13],[[24,0,"hds-side-nav__dropdown"]],[["@listPosition"],["bottom-left"]],[["default"],[[[[1,"\\n\\n "],[8,[30,7,["ToggleIcon"]],null,[["@icon","@text"],["user","Auth menu"]],null],[1,"\\n "],[8,[30,7,["Interactive"]],null,[["@href","@text","@isHrefExternal"],[[28,[37,14],["settings"],[["params"],[[28,[37,5],null,[["nspace","partition"],[[27],[27]]]]]]],[28,[37,15],["components.hashicorp-consul.side-nav.user-menu.settings"],null],false]],null],[1,"\\n "],[8,[30,7,["Interactive"]],[[4,[38,12],["click",[28,[37,16],[[30,0,["modal","open"]]],null]],null]],[["@text"],[[28,[37,15],["components.hashicorp-consul.side-nav.user-menu.log-in"],null]]],null],[1,"\\n "]],[7]]]]],[1,"\\n "]],[1]],[[[1,"\\n\\n "],[8,[39,4],null,[["@name","@onclose","@onopen","@aria"],["login-toggle",[30,0,["close"]],[30,0,["open"]],[28,[37,5],null,[["label"],["Log in with a different token"]]]]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@target","@name","@value"],[[30,0],"modal",[30,9]]],null],[1,"\\n "],[8,[39,7],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"\\n Log in with a different token\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[8,[39,8],null,[["@dc","@nspace","@partition","@onsubmit"],[[30,3,["Name"]],[30,5],[30,4],[28,[37,9],[[30,0],[30,8,["login"]]],[["value"],["data"]]]]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@target","@name","@value"],[[30,0],"authForm",[30,10]]],null],[1,"\\n "]],[10]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[8,[39,11],[[4,[38,12],["click",[30,9,["close"]]],null]],[["@color","@text"],["secondary","Continue without logging in"]],null],[1,"\\n "]],[]]]]],[1,"\\n "]],[9]]]]],[1,"\\n\\n "],[8,[39,13],[[24,0,"hds-side-nav__dropdown"]],[["@listPosition"],["bottom-left"]],[["default"],[[[[1,"\\n "],[8,[30,11,["ToggleIcon"]],null,[["@icon","@text"],["user","Auth menu"]],null],[1,"\\n"],[41,[30,8,["token","AccessorID"]],[[[1," "],[8,[30,11,["Description"]],null,[["@text"],[[28,[37,15],["components.consul.token.selector.logged-in"],[["token","htmlSafe"],[[28,[37,17],[[30,8,["token","AccessorID"]],[28,[37,18],[[30,8,["token","AccessorID","length"]],8],null]],null],true]]]]],null],[1,"\\n"]],[]],null],[1," "],[8,[30,11,["Separator"]],null,null,null],[1,"\\n "],[8,[30,11,["Interactive"]],null,[["@href","@text","@isHrefExternal"],[[28,[37,14],["settings"],[["params"],[[28,[37,5],null,[["nspace","partition"],[[27],[27]]]]]]],[28,[37,15],["components.hashicorp-consul.side-nav.user-menu.settings"],null],false]],null],[1,"\\n "],[8,[30,11,["Interactive"]],[[4,[38,12],["click",[28,[37,16],[[30,8,["logout"]]],null]],null]],[["@text"],[[28,[37,15],["components.hashicorp-consul.side-nav.user-menu.log-out"],null]]],null],[1,"\\n "]],[11]]]]],[1,"\\n "]],[8]]]]],[1,"\\n "],[18,13,[[28,[37,5],null,[["open","close"],[[30,0,["modal","open"]],[30,0,["model","close"]]]]]]],[1,"\\n"]],[]],[[[1," "],[8,[39,13],[[24,0,"hds-side-nav__dropdown"]],[["@listPosition"],["bottom-left"]],[["default"],[[[[1,"\\n "],[8,[30,12,["ToggleIcon"]],null,[["@icon","@text"],["user","Auth menu"]],null],[1,"\\n "],[8,[30,12,["Interactive"]],null,[["@href","@text","@isHrefExternal"],[[28,[37,14],["settings"],[["params"],[[28,[37,5],null,[["nspace","partition"],[[27],[27]]]]]]],[28,[37,15],["components.hashicorp-consul.side-nav.user-menu.settings"],null],false]],null],[1,"\\n "]],[12]]]]],[1,"\\n"]],[]]]],["authDialog","modal","@dc","@partition","@nspace","authForm","dd","authDialog","modal","authForm","dd","dd","&default"],false,["if","can","auth-dialog","uri","modal-dialog","hash","ref","block-slot","auth-form","action","oidc-select","hds/button","on","hds/dropdown","href-to","t","optional","string-substring","sub","yield"]]',moduleName:"consul-ui/components/consul/token/selector/index.hbs",isStrictMode:!1}) +let u=(o((i=class extends l.default{open(){this.authForm.focus()}close(){this.authForm.reset()}reauthorize(e){this.modal.close(),this.args.onchange(e)}}).prototype,"open",[r.action],Object.getOwnPropertyDescriptor(i.prototype,"open"),i.prototype),o(i.prototype,"close",[r.action],Object.getOwnPropertyDescriptor(i.prototype,"close"),i.prototype),o(i.prototype,"reauthorize",[r.action],Object.getOwnPropertyDescriptor(i.prototype,"reauthorize"),i.prototype),i) +e.default=u,(0,t.setComponentTemplate)(a,u)})),define("consul-ui/components/consul/tomography/graph/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@glimmer/tracking"],(function(e,t,n,l,r){var i,o +function a(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const u=(0,n.createTemplateFactory)({id:"NUlnPif0",block:'[[[1,"\\n"],[11,0],[24,0,"tomography-graph"],[17,1],[12],[1,"\\n "],[10,"svg"],[15,"width",[30,0,["size"]]],[15,"height",[30,0,["size"]]],[12],[1,"\\n "],[10,"g"],[15,"transform",[29,["translate(",[28,[37,0],[[30,0,["size"]],2],null],", ",[28,[37,0],[[30,0,["size"]],2],null],")"]]],[12],[1,"\\n "],[10,"g"],[12],[1,"\\n "],[10,"circle"],[14,0,"background"],[15,"r",[30,0,["circle","0"]]],[12],[13],[1,"\\n "],[10,"circle"],[14,0,"axis"],[15,"r",[30,0,["circle","1"]]],[12],[13],[1,"\\n "],[10,"circle"],[14,0,"axis"],[15,"r",[30,0,["circle","2"]]],[12],[13],[1,"\\n "],[10,"circle"],[14,0,"axis"],[15,"r",[30,0,["circle","3"]]],[12],[13],[1,"\\n "],[10,"circle"],[14,0,"border"],[15,"r",[30,0,["circle","4"]]],[12],[13],[1,"\\n "],[13],[1,"\\n "],[10,"g"],[14,0,"lines"],[12],[1,"\\n"],[42,[28,[37,2],[[28,[37,2],[[30,0,["distances"]]],null]],null],null,[[[1," "],[11,"rect"],[16,"transform",[29,["rotate(",[30,2,["rotate"]],")"]]],[16,"width",[30,2,["y2"]]],[24,"height","1"],[4,[38,3],[[28,[37,4],[[30,2,["node"]]," - ",[28,[37,5],[[30,2,["distance"]]],[["maximumFractionDigits"],[2]]],"ms",[52,[30,2,["segment"]],[28,[37,4],["
      (Segment: ",[30,2,["segment"]],")"],null]]],null]],[["options"],[[28,[37,7],null,[["followCursor","allowHTML"],[true,true]]]]]],[12],[13],[1,"\\n"]],[2]],null],[1," "],[13],[1,"\\n "],[10,"g"],[14,0,"labels"],[12],[1,"\\n "],[10,"circle"],[14,0,"point"],[14,"r","5"],[12],[13],[1,"\\n "],[10,"g"],[14,0,"tick"],[15,"transform",[29,["translate(0, ",[30,0,["labels","0"]],")"]]],[12],[1,"\\n "],[10,"line"],[14,"x2","70"],[12],[13],[1,"\\n "],[10,"text"],[14,"x","75"],[14,"y","0"],[14,"dy",".32em"],[12],[1,[28,[35,5],[[30,0,["milliseconds","0"]]],[["maximumFractionDigits"],[2]]]],[1,"ms"],[13],[1,"\\n "],[13],[1,"\\n "],[10,"g"],[14,0,"tick"],[15,"transform",[29,["translate(0, ",[30,0,["labels","1"]],")"]]],[12],[1,"\\n "],[10,"line"],[14,"x2","70"],[12],[13],[1,"\\n "],[10,"text"],[14,"x","75"],[14,"y","0"],[14,"dy",".32em"],[12],[1,[28,[35,5],[[30,0,["milliseconds","1"]]],[["maximumFractionDigits"],[2]]]],[1,"ms"],[13],[1,"\\n "],[13],[1,"\\n "],[10,"g"],[14,0,"tick"],[15,"transform",[29,["translate(0, ",[30,0,["labels","2"]],")"]]],[12],[1,"\\n "],[10,"line"],[14,"x2","70"],[12],[13],[1,"\\n "],[10,"text"],[14,"x","75"],[14,"y","0"],[14,"dy",".32em"],[12],[1,[28,[35,5],[[30,0,["milliseconds","2"]]],[["maximumFractionDigits"],[2]]]],[1,"ms"],[13],[1,"\\n "],[13],[1,"\\n "],[10,"g"],[14,0,"tick"],[15,"transform",[29,["translate(0, ",[30,0,["labels","3"]],")"]]],[12],[1,"\\n "],[10,"line"],[14,"x2","70"],[12],[13],[1,"\\n "],[10,"text"],[14,"x","75"],[14,"y","0"],[14,"dy",".32em"],[12],[1,[28,[35,5],[[30,0,["milliseconds","3"]]],[["maximumFractionDigits"],[2]]]],[1,"ms"],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"],[13],[1,"\\n"]],["&attrs","item"],false,["div","each","-track-array","tooltip","concat","format-number","if","hash"]]',moduleName:"consul-ui/components/consul/tomography/graph/index.hbs",isStrictMode:!1}),s=function(e){return 160*e} +let c=(i=class extends l.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="max",l=this,(n=o)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0}),a(this,"size",336),a(this,"circle",[s(1),s(.25),s(.5),s(.75),s(1)]),a(this,"labels",[s(-.25),s(-.5),s(-.75),s(-1)])}get milliseconds(){const e=(this.args.distances||[]).reduce(((e,t)=>Math.max(e,t.distance)),this.max) +return[25,50,75,100].map((t=>function(e,t){return t>0?parseInt(t*e)/100:0}(t,e)))}get distances(){let e=this.args.distances||[] +const t=e.reduce(((e,t)=>Math.max(e,t.distance)),this.max),n=e.length +if(n>360){const t=360/n +e=e.filter((function(e,l){return 0==l||l==n-1||Math.random()({rotate:360*l/e.length,y2:n.distance/t*160,node:n.node,distance:n.distance,segment:n.segment})))}},d=i.prototype,p="max",f=[r.tracked],m={configurable:!0,enumerable:!0,writable:!0,initializer:function(){return-999999999}},b={},Object.keys(m).forEach((function(e){b[e]=m[e]})),b.enumerable=!!b.enumerable,b.configurable=!!b.configurable,("value"in b||b.initializer)&&(b.writable=!0),b=f.slice().reverse().reduce((function(e,t){return t(d,p,e)||e}),b),h&&void 0!==b.initializer&&(b.value=b.initializer?b.initializer.call(h):void 0,b.initializer=void 0),void 0===b.initializer&&(Object.defineProperty(d,p,b),b=null),o=b,i) +var d,p,f,m,h,b +e.default=c,(0,t.setComponentTemplate)(u,c)})),define("consul-ui/components/consul/transparent-proxy/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"QQRh7noe",block:'[[[1,"\\n"],[10,1],[14,0,"consul-transparent-proxy"],[12],[1,"\\n "],[1,[28,[35,0],["components.consul.transparent-proxy"],null]],[1,"\\n"],[13]],[],false,["t"]]',moduleName:"consul-ui/components/consul/transparent-proxy/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/upstream-instance/list/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"o/cQrCOP",block:'[[[1,"\\n"],[11,0],[24,0,"consul-upstream-instance-list"],[17,1],[12],[1,"\\n "],[10,"ul"],[12],[1,"\\n"],[42,[28,[37,1],[[28,[37,1],[[30,2]],null]],null],null,[[[1," "],[10,"li"],[12],[1,"\\n\\n "],[10,0],[14,0,"header"],[12],[1,"\\n "],[10,2],[12],[1,"\\n "],[1,[30,3,["DestinationName"]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n\\n "],[10,0],[14,0,"detail"],[12],[1,"\\n\\n"],[41,[28,[37,3],[[30,3,["DestinationType"]],"prepared_query"],null],[[[1," "],[8,[39,4],null,[["@item","@partition","@nspace"],[[28,[37,5],null,[["Namespace","Partition"],[[28,[37,6],[[30,3,["DestinationNamespace"]],[30,4]],null],[28,[37,6],[[30,3,["DestinationPartition"]],[30,5]],null]]]],[30,5],[30,4]]],null],[1,"\\n"]],[]],null],[1,"\\n"],[41,[28,[37,7],[[28,[37,3],[[30,3,["Datacenter"]],[30,6]],null],[28,[37,3],[[30,3,["Datacenter"]],""],null]],null],[[[1," "],[10,"dl"],[14,0,"datacenter"],[12],[1,"\\n "],[11,"dt"],[4,[38,8],null,null],[12],[1,"\\n Datacenter\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[30,3,["Datacenter"]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1,"\\n"],[41,[30,3,["LocalBindSocketPath"]],[[[1," "],[10,"dl"],[14,0,"local-bind-socket-path"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n Local bind socket path\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,9],null,[["@value","@name"],[[30,3,["LocalBindSocketPath"]],"Local bind socket path"]],null],[1,"\\n "],[1,[30,3,["LocalBindSocketPath"]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[10,"dl"],[14,0,"local-bind-socket-mode"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n Mode\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[28,[35,6],[[30,3,["LocalBindSocketMode"]],"-"],null]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],[[[1,"\\n"],[41,[28,[37,10],[[30,3,["LocalBindPort"]],0],null],[[[44,[[28,[37,12],[[28,[37,6],[[30,3,["LocalBindAddress"]],"127.0.0.1"],null],":",[30,3,["LocalBindPort"]]],null]],[[[1," "],[10,"dl"],[14,0,"local-bind-address"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n Address\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,9],null,[["@value","@name"],[[30,7],"Address"]],null],[1,"\\n "],[1,[30,7]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[7]]]],[]],null],[1,"\\n"]],[]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[3]],null],[1," "],[13],[1,"\\n"],[13],[1,"\\n"]],["&attrs","@items","item","@nspace","@partition","@dc","combinedAddress"],false,["each","-track-array","if","not-eq","consul/bucket/list","hash","or","and","tooltip","consul-copy-button","gt","let","concat"]]',moduleName:"consul-ui/components/consul/upstream-instance/list/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/upstream-instance/search-bar/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"7/RrQEaf",block:'[[[1,"\\n"],[8,[39,0],[[24,0,"consul-upstream-instance-search-bar"],[17,1]],[["@filter"],[[30,2]]],[["status","search","sort"],[[[[1,"\\n\\n"],[44,[[28,[37,2],[[28,[37,3],["components.consul.upstream-instance.search-bar.",[30,3,["status","key"]],".name"],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","key"]]],null],[28,[37,3],["common.consul.",[30,3,["status","key"]]],null]],null]]]],[28,[37,2],[[28,[37,3],["components.consul.upstream-instance.search-bar.",[30,3,["status","value"]],".name"],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","value"]]],null],[28,[37,3],["common.consul.",[30,3,["status","value"]]],null],[28,[37,3],["common.brand.",[30,3,["status","value"]]],null]],null]]]]],[[[1," "],[8,[30,3,["RemoveFilter"]],[[16,"aria-label",[28,[37,2],["common.ui.remove"],[["item"],[[28,[37,3],[[30,4]," ",[30,5]],null]]]]]],null,[["default"],[[[[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,[30,4]],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,5]],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[4,5]]],[1,"\\n "]],[3]],[[[1,"\\n "],[8,[30,6,["Search"]],null,[["@onsearch","@value","@placeholder"],[[28,[37,5],[[30,0],[30,7]],null],[30,8],[28,[37,2],["common.search.search"],null]]],[["default"],[[[[1,"\\n "],[8,[30,6,["Select"]],[[24,0,"type-search-properties"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,2,["searchproperty","change"]]],null],true,true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["common.search.searchproperty"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,9,["Optgroup"]],[30,9,["Option"]]],[[[42,[28,[37,8],[[28,[37,8],[[30,2,["searchproperty","default"]]],null]],null],null,[[[1," "],[8,[30,11],null,[["@value","@selected"],[[30,12],[28,[37,9],[[30,12],[30,2,["searchproperty","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["common.consul.",[28,[37,10],[[30,12]],null]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[12]],null]],[10,11]]],[1," "]],[]]]]],[1,"\\n "]],[9]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]],[[[1,"\\n "],[8,[30,13,["Select"]],[[24,0,"type-sort"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,14,["change"]]],null],false,true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n"],[44,[[28,[37,11],[[28,[37,4],[[28,[37,4],["DestinationName:asc",[28,[37,2],["common.sort.alpha.asc"],null]],null],[28,[37,4],["DestinationName:desc",[28,[37,2],["common.sort.alpha.desc"],null]],null]],null]],null]],[[[1," "],[1,[28,[35,12],[[30,16],[30,14,["value"]]],null]],[1,"\\n"]],[16]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,15,["Optgroup"]],[30,15,["Option"]]],[[[1," "],[8,[30,18],null,[["@value","@selected"],["DestinationName:asc",[28,[37,13],["DestinationName:asc",[30,14,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,18],null,[["@value","@selected"],["DestinationName:desc",[28,[37,13],["DestinationName:desc",[30,14,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.desc"],null]]],[]]]]],[1,"\\n"]],[17,18]]],[1," "]],[]]]]],[1,"\\n "]],[15]]]]],[1,"\\n "]],[13]]]]],[1,"\\n"]],["&attrs","@filter","search","key","value","search","@onsearch","@search","components","Optgroup","Option","prop","search","@sort","components","selectable","Optgroup","Option"],false,["search-bar","let","t","concat","array","action","block-slot","each","-track-array","includes","lowercase","from-entries","get","eq"]]',moduleName:"consul-ui/components/consul/upstream-instance/search-bar/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/upstream/list/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"IiJIFQhR",block:'[[[1,"\\n"],[8,[39,0],[[24,0,"consul-upstream-list"],[17,1]],[["@items","@linkable"],[[30,2],"linkable upstream"]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n"],[41,[28,[37,3],[[30,3,["InstanceCount"]],0],null],[[[1," "],[10,"dl"],[15,0,[30,3,["MeshStatus"]]],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n Health\\n "],[13],[1,"\\n "],[11,"dd"],[4,[38,4],null,null],[12],[1,"\\n"],[41,[28,[37,5],["critical",[30,3,["MeshStatus"]]],null],[[[1," At least one health check on one instance is failing.\\n"]],[]],[[[41,[28,[37,5],["warning",[30,3,["MeshStatus"]]],null],[[[1," At least one health check on one instance has a warning.\\n"]],[]],[[[41,[28,[37,5],["passing",[30,3,["MeshStatus"]]],null],[[[1," All health checks are passing.\\n"]],[]],[[[1," There are no health checks.\\n "]],[]]]],[]]]],[]]],[1," "],[13],[1,"\\n "],[13],[1,"\\n "],[10,3],[15,6,[28,[37,6],["dc.services.show",[30,3,["Name"]]],[["params"],[[52,[28,[37,7],[[30,3,["Partition"]],[30,5]],null],[28,[37,8],null,[["partition","nspace"],[[30,3,["Partition"]],[30,3,["Namespace"]]]]],[52,[28,[37,7],[[30,3,["Namespace"]],[30,6]],null],[28,[37,8],null,[["nspace"],[[30,3,["Namespace"]]]]],[28,[37,8],null,null]]]]]]],[12],[1,"\\n "],[1,[30,3,["Name"]]],[1,"\\n "],[13],[1,"\\n"]],[]],[[[1," "],[10,2],[12],[1,"\\n "],[1,[30,3,["Name"]]],[1,"\\n "],[13],[1,"\\n"]],[]]],[1," "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["details"]],[["default"],[[[[1,"\\n "],[8,[39,9],null,[["@item","@nspace","@partition"],[[30,3],[30,6],[30,5]]],null],[1,"\\n"],[42,[28,[37,11],[[28,[37,11],[[30,3,["GatewayConfig","Addresses"]]],null]],null],null,[[[1," "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n Address\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,12],null,[["@value","@name"],[[30,7],"Address"]],null],[1,"\\n "],[1,[30,7]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[7]],null],[1," "]],[]]]]],[1,"\\n"]],[3,4]]]]],[1,"\\n"]],["&attrs","@items","item","index","@partition","@nspace","address"],false,["list-collection","block-slot","if","gt","tooltip","eq","href-to","not-eq","hash","consul/bucket/list","each","-track-array","consul-copy-button"]]',moduleName:"consul-ui/components/consul/upstream/list/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/consul/upstream/search-bar/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"CcoH46GJ",block:'[[[1,"\\n"],[8,[39,0],[[24,0,"consul-upstream-search-bar"],[17,1]],[["@filter"],[[30,2]]],[["status","search","filter","sort"],[[[[1,"\\n\\n"],[44,[[28,[37,2],[[28,[37,3],["components.consul.upstream.search-bar.",[30,3,["status","key"]],".name"],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","key"]]],null],[28,[37,3],["common.consul.",[30,3,["status","key"]]],null]],null]]]],[28,[37,2],[[28,[37,3],["components.consul.upstream.search-bar.",[30,3,["status","value"]],".name"],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","value"]]],null],[28,[37,3],["common.consul.",[30,3,["status","value"]]],null],[28,[37,3],["common.brand.",[30,3,["status","value"]]],null]],null]]]]],[[[1," "],[8,[30,3,["RemoveFilter"]],[[16,"aria-label",[28,[37,2],["common.ui.remove"],[["item"],[[28,[37,3],[[30,4]," ",[30,5]],null]]]]]],null,[["default"],[[[[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,[30,4]],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,5]],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[4,5]]],[1,"\\n "]],[3]],[[[1,"\\n "],[8,[30,6,["Search"]],null,[["@onsearch","@value","@placeholder"],[[28,[37,5],[[30,0],[30,7]],null],[30,8],[28,[37,2],["common.search.search"],null]]],[["default"],[[[[1,"\\n "],[8,[30,6,["Select"]],[[24,0,"type-search-properties"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,2,["searchproperty","change"]]],null],true,true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["common.search.searchproperty"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,9,["Optgroup"]],[30,9,["Option"]]],[[[42,[28,[37,8],[[28,[37,8],[[30,2,["searchproperty","default"]]],null]],null],null,[[[1," "],[8,[30,11],null,[["@value","@selected"],[[30,12],[28,[37,9],[[30,12],[30,2,["searchproperty","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["common.consul.",[28,[37,10],[[30,12]],null]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[12]],null]],[10,11]]],[1," "]],[]]]]],[1,"\\n "]],[9]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]],[[[1,"\\n "],[8,[30,13,["Select"]],null,[["@position","@onchange","@multiple"],["left",[28,[37,5],[[30,0],[30,2,["instance","change"]]],null],true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["components.consul.upstream.search-bar.instance.name"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,14,["Optgroup"]],[30,14,["Option"]]],[[[42,[28,[37,8],[[28,[37,8],[[28,[37,4],["registered","not-registered"],null]],null]],null],null,[[[1," "],[8,[30,16],null,[["@value","@selected"],[[30,17],[28,[37,9],[[30,17],[30,2,["instance","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["common.consul.",[30,17]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[17]],null]],[15,16]]],[1," "]],[]]]]],[1,"\\n "]],[14]]]]],[1,"\\n "]],[13]],[[[1,"\\n "],[8,[30,18,["Select"]],[[24,0,"type-sort"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,19,["change"]]],null],false,true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n"],[44,[[28,[37,11],[[28,[37,4],[[28,[37,4],["Name:asc",[28,[37,2],["common.sort.alpha.asc"],null]],null],[28,[37,4],["Name:desc",[28,[37,2],["common.sort.alpha.desc"],null]],null],[28,[37,4],["Status:asc",[28,[37,2],["common.sort.status.asc"],null]],null],[28,[37,4],["Status:desc",[28,[37,2],["common.sort.status.desc"],null]],null]],null]],null]],[[[1," "],[1,[28,[35,12],[[30,21],[30,19,["value"]]],null]],[1,"\\n"]],[21]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,20,["Optgroup"]],[30,20,["Option"]]],[[[1," "],[8,[30,22],null,[["@label"],[[28,[37,2],["common.consul.status"],null]]],[["default"],[[[[1,"\\n "],[8,[30,23],null,[["@value","@selected"],["Status:asc",[28,[37,13],["Status:asc",[30,19,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.status.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,23],null,[["@value","@selected"],["Status:desc",[28,[37,13],["Status:desc",[30,19,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.status.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,22],null,[["@label"],[[28,[37,2],["common.consul.service-name"],null]]],[["default"],[[[[1,"\\n "],[8,[30,23],null,[["@value","@selected"],["Name:asc",[28,[37,13],["Name:asc",[30,19,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,23],null,[["@value","@selected"],["Name:desc",[28,[37,13],["Name:desc",[30,19,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[22,23]]],[1," "]],[]]]]],[1,"\\n "]],[20]]]]],[1,"\\n "]],[18]]]]],[1,"\\n"]],["&attrs","@filter","search","key","value","search","@onsearch","@search","components","Optgroup","Option","prop","search","components","Optgroup","Option","item","search","@sort","components","selectable","Optgroup","Option"],false,["search-bar","let","t","concat","array","action","block-slot","each","-track-array","includes","lowercase","from-entries","get","eq"]]',moduleName:"consul-ui/components/consul/upstream/search-bar/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/copyable-code/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"KbYc4t+4",block:'[[[1,"\\n"],[11,0],[16,0,[28,[37,0],["copyable-code",[28,[37,1],["obfuscated",[30,1]],null]],null]],[17,2],[12],[1,"\\n"],[41,[30,1],[[[1," "],[8,[39,3],null,null,[["default"],[[[[1,"\\n "],[8,[30,3,["Action"]],[[16,"aria-label",[52,[33,4,["expanded"]],"Hide","Show"]],[4,[38,5],["click",[30,3,["toggle"]]],null]],null,[["default"],[[[[1,"\\n\\n "]],[]]]]],[1,"\\n "],[8,[30,3,["Details"]],null,null,[["default"],[[[[1,"\\n "],[10,"pre"],[12],[10,"code"],[15,1,[30,4,["id"]]],[12],[1,[30,5]],[13],[13],[1,"\\n "]],[4]]]]],[1,"\\n "],[8,[30,3,["Details"]],null,[["@auto"],[false]],[["default"],[[[[1,"\\n"],[41,[28,[37,6],[[30,6,["expanded"]]],null],[[[1," "],[10,"hr"],[12],[13],[1,"\\n"]],[]],null],[1," "]],[6]]]]],[1,"\\n "]],[3]]]]],[1,"\\n\\n "],[8,[39,7],null,[["@value","@name"],[[30,5],[30,7]]],null],[1,"\\n\\n"]],[]],[[[1," "],[10,"pre"],[12],[10,"code"],[12],[1,[30,5]],[13],[13],[1,"\\n "],[8,[39,7],null,[["@value","@name"],[[30,5],[30,7]]],null],[1,"\\n"]],[]]],[1,"\\n"],[13]],["@obfuscated","&attrs","disclosure","details","@value","details","@name"],false,["class-map","array","if","disclosure","details","on","not","consul-copy-button"]]',moduleName:"consul-ui/components/copyable-code/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/data-collection/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@ember/service","@ember/object","@ember/object/computed","@glimmer/tracking"],(function(e,t,n,l,r,i,o,a){var u,s,c,d,p,f,m,h,b,y,v,g,O,P,w,x,j +function _(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function S(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const k=(0,n.createTemplateFactory)({id:"2sUjfsVP",block:'[[[1,"\\n"],[1,[28,[35,0],[[28,[37,1],[[30,0],[28,[37,2],[[28,[37,3],[[30,0],"term"],null],""],null],[30,1]],null]],null]],[1,"\\n"],[18,2,[[28,[37,5],null,[["search","items","Collection","Empty"],[[28,[37,1],[[30,0],[30,0,["search"]]],null],[30,0,["items"]],[52,[28,[37,7],[[30,0,["items","length"]],0],null],[50,"anonymous",0,null,null],""],[52,[28,[37,9],[[30,0,["items","length"]],0],null],[50,"anonymous",0,null,null],""]]]]]],[1,"\\n"]],["@search","&default"],false,["did-update","action","fn","set","yield","hash","if","gt","component","eq"]]',moduleName:"consul-ui/components/data-collection/index.hbs",isStrictMode:!1}) +let N=(u=(0,r.inject)("filter"),s=(0,r.inject)("sort"),c=(0,r.inject)("search"),d=(0,o.alias)("searchService.searchables"),p=(0,i.computed)("term","args.search"),f=(0,i.computed)("type","searchMethod","filtered","args.filters"),m=(0,i.computed)("type","args.sort"),h=(0,i.computed)("comparator","searched"),b=(0,i.computed)("searchTerm","searchable","filtered"),y=(0,i.computed)("type","content","args.filters"),v=(0,i.computed)("args.{items.[],items.content.[]}"),g=class extends l.default{constructor(){super(...arguments),_(this,"filter",O,this),_(this,"sort",P,this),_(this,"searchService",w,this),_(this,"term",x,this),_(this,"searchableMap",j,this)}get type(){return this.args.type}get searchMethod(){return this.args.searchable||"exact"}get searchProperties(){return this.args.filters.searchproperties}get searchTerm(){return this.term||this.args.search||""}get searchable(){const e=(0,i.get)(this,"args.filters.searchproperty.value")||(0,i.get)(this,"args.filters.searchproperty") +return new("string"==typeof this.searchMethod?this.searchableMap[this.searchMethod]:this.args.searchable)(this.filtered,{finders:Object.fromEntries(Object.entries(this.searchService.predicate(this.type)).filter((t=>{let[n,l]=t +return void 0===e||e.includes(n)})))})}get comparator(){return void 0===this.args.sort?[]:this.sort.comparator(this.type)(this.args.sort)}get items(){let e="comparator" +return"function"==typeof this.comparator&&(e=this.comparator),(0,i.defineProperty)(this,"sorted",(0,o.sort)("searched",e)),this.sorted}get searched(){return""===this.searchTerm?this.filtered:this.searchable.search(this.searchTerm)}get filtered(){if(void 0===this.args.filters)return this.content.slice() +const e=this.filter.predicate(this.type) +if(void 0===e)return this.content.slice() +const t=Object.entries(this.args.filters).filter((e=>{let[t,n]=e +return Boolean(n)})).map((e=>{let[t,n]=e +return[t,"string"!=typeof n?n.value:n]})) +return this.content.filter(e(Object.fromEntries(t)))}get content(){const e=this.args.items||[] +return"function"==typeof e.dispatchEvent?e.content:e}search(e){return this.term=e,this.items}},O=S(g.prototype,"filter",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),P=S(g.prototype,"sort",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),w=S(g.prototype,"searchService",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),x=S(g.prototype,"term",[a.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return""}}),j=S(g.prototype,"searchableMap",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),S(g.prototype,"searchTerm",[p],Object.getOwnPropertyDescriptor(g.prototype,"searchTerm"),g.prototype),S(g.prototype,"searchable",[f],Object.getOwnPropertyDescriptor(g.prototype,"searchable"),g.prototype),S(g.prototype,"comparator",[m],Object.getOwnPropertyDescriptor(g.prototype,"comparator"),g.prototype),S(g.prototype,"items",[h],Object.getOwnPropertyDescriptor(g.prototype,"items"),g.prototype),S(g.prototype,"searched",[b],Object.getOwnPropertyDescriptor(g.prototype,"searched"),g.prototype),S(g.prototype,"filtered",[y],Object.getOwnPropertyDescriptor(g.prototype,"filtered"),g.prototype),S(g.prototype,"content",[v],Object.getOwnPropertyDescriptor(g.prototype,"content"),g.prototype),S(g.prototype,"search",[i.action],Object.getOwnPropertyDescriptor(g.prototype,"search"),g.prototype),g) +e.default=N,(0,t.setComponentTemplate)(k,N)})),define("consul-ui/components/data-form/index",["exports","@ember/component","@ember/template-factory","@ember/service","@ember/object","block-slots","validated-changeset"],(function(e,t,n,l,r,i,o){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const a=(0,n.createTemplateFactory)({id:"jFu0ODbk",block:'[[[1,"\\n"],[8,[39,0],null,[["@items","@src","@onchange","@once"],[[99,1,["@items"]],[28,[37,2],["/${partition}/${nspace}/${dc}/${type}/${src}",[28,[37,3],null,[["partition","nspace","dc","type","src"],[[33,4],[33,5],[33,6],[33,7],[33,8]]]]],null],[28,[37,9],[[30,0],"setData"],null],true]],[["default"],[[[[1,"\\n "],[8,[39,10],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n\\n "],[8,[39,11],null,[["@sink","@type","@label","@ondelete","@onchange"],[[28,[37,2],["/${partition}/${nspace}/${dc}/${type}",[28,[37,3],null,[["partition","nspace","dc","type"],[[33,4],[33,5],[28,[37,12],[[33,13,["Datacenter"]],[33,6]],null],[33,7]]]]],null],[99,7,["@type"]],[99,14,["@label"]],[28,[37,9],[[30,0],[33,15]],null],[28,[37,9],[[30,0],[33,16]],null]]],[["default"],[[[[1,"\\n\\n"],[44,[[28,[37,3],null,[["data","change","isCreate","error","disabled","submit","delete"],[[33,13],[28,[37,9],[[30,0],"change"],null],[33,18],[30,1,["error"]],[30,1,["inflight"]],[28,[37,9],[[30,0],[30,1,["persist"]],[33,13]],null],[28,[37,9],[[30,0],[30,1,["delete"]],[33,13]],null]]]]],[[[1,"\\n "],[18,3,[[30,2]]],[1,"\\n"],[41,[33,21],[[[1," "],[8,[39,10],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,22],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[18,3,[[30,2]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[1,"\\n "],[8,[39,10],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,22],null,[["@name"],["form"]],[["default"],[[[[1,"\\n "],[18,3,[[30,2]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n\\n"]],[2]]],[1,"\\n "]],[1]]]]],[1,"\\n\\n "]],[]]]]],[1,"\\n"]],[]]]]]],["writer","api","&default"],false,["data-loader","item","uri","hash","partition","nspace","dc","type","src","action","block-slot","data-writer","or","data","label","ondelete","onsubmit","let","create","yield","if","hasError","yield-slot"]]',moduleName:"consul-ui/components/data-form/index.hbs",isStrictMode:!1}) +var u=(0,t.setComponentTemplate)(a,t.default.extend(i.default,{tagName:"",dom:(0,l.inject)("dom"),builder:(0,l.inject)("form"),create:!1,ondelete:function(){return this.onsubmit(...arguments)},oncancel:function(){return this.onsubmit(...arguments)},onsubmit:function(){},onchange:function(e,t){return t.handleEvent(e)},didReceiveAttrs:function(){this._super(...arguments) +try{this.form=this.builder.form(this.type)}catch(e){}},willRender:function(){this._super(...arguments),(0,r.set)(this,"hasError",this._isRegistered("error"))},actions:{setData:function(e){let t=e +return(0,o.isChangeset)(e)||void 0===this.form||(t=this.form.setData(e).getData()),(0,r.get)(e,"isNew")&&((0,r.set)(this,"create",!0),t=Object.entries(this.autofill||{}).reduce((function(e,t){let[n,l]=t +return(0,r.set)(e,n,l),e}),t)),(0,r.set)(this,"data",t),this.data},change:function(e,t,n){this.onchange(this.dom.normalizeEvent(e,t),this.form,this.form.getData())}}})) +e.default=u})),define("consul-ui/components/data-loader/chart.xstate",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default={id:"data-loader",initial:"load",on:{OPEN:{target:"load"},ERROR:{target:"disconnected"},LOAD:[{target:"idle",cond:"loaded"},{target:"loading"}]},states:{load:{},loading:{on:{SUCCESS:{target:"idle"},ERROR:{target:"error"}}},idle:{},error:{on:{RETRY:{target:"load"}}},disconnected:{on:{RETRY:{target:"load"}}}}}})) +define("consul-ui/components/data-loader/index",["exports","@ember/component","@ember/template-factory","@ember/object","block-slots","consul-ui/components/data-loader/chart.xstate"],(function(e,t,n,l,r,i){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const o=(0,n.createTemplateFactory)({id:"FfdegZAa",block:'[[[1,"\\n"],[18,9,null],[1,"\\n"],[8,[39,1],null,[["@src"],[[99,2,["@src"]]]],[["default"],[[[[1,"\\n "],[8,[39,3],null,[["@target","@name","@value"],[[30,0],"dispatch",[30,4]]],null],[1,"\\n "],[8,[30,2],null,[["@name","@cond"],["loaded",[28,[37,4],[[30,0],"isLoaded"],null]]],null],[1,"\\n\\n\\n"],[44,[[28,[37,6],null,[["data","error","invalidate","dispatchError"],[[33,7],[33,8],[30,0,["invalidate"]],[28,[37,9],[[28,[37,4],[[30,0],[28,[37,10],[[33,8]],null]],[["value"],["error.errors.firstObject"]]],[28,[37,4],[[30,0],[30,4],"ERROR"],null]],null]]]]],[[[1,"\\n"],[6,[39,11],null,[["name"],["data"]],[["default","else"],[[[[1," "],[18,9,[[30,6]]],[1,"\\n"]],[]],[[[41,[28,[37,13],[[33,14]],null],[[[1," "],[8,[30,1],null,[["@notMatches"],[[28,[37,15],["error","disconnected"],null]]],[["default"],[[[[1,"\\n"],[41,[28,[37,16],[[33,17],[28,[37,18],[[28,[37,13],[[33,19]],null],[28,[37,20],[[30,5],"loading"],null]],null]],null],[[[1," "],[8,[39,21],null,[["@open","@src","@onchange","@onerror"],[[99,22,["@open"]],[99,17,["@src"]],[28,[37,9],[[28,[37,4],[[30,0],"change"],[["value"],["data"]]],[28,[37,4],[[30,0],[30,4],"SUCCESS"],null]],null],[30,6,["dispatchError"]]]],[["default"],[[[[1,"\\n "],[1,[28,[35,23],[[28,[37,24],[[30,0],"invalidate",[30,7,["invalidate"]]],null]],null]],[1,"\\n "]],[7]]]]],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n"]],[]],null]],[]]]]],[1,"\\n "],[8,[30,1],null,[["@matches"],["loading"]],[["default"],[[[[1,"\\n"],[6,[39,11],null,[["name"],["loading"]],[["default","else"],[[[[1," "],[18,9,[[30,6]]],[1,"\\n"]],[]],[[[1," "],[8,[39,25],null,null,null],[1,"\\n"]],[]]]]],[1," "]],[]]]]],[1,"\\n\\n "],[8,[30,1],null,[["@matches"],["error"]],[["default"],[[[[1,"\\n"],[6,[39,11],null,[["name"],["error"]],[["default","else"],[[[[1," "],[18,9,[[30,6]]],[1,"\\n"]],[]],[[[1," "],[8,[39,26],null,[["@error"],[[99,8,["@error"]]]],null],[1,"\\n"]],[]]]]],[1," "]],[]]]]],[1,"\\n\\n "],[8,[30,1],null,[["@matches"],[[28,[37,15],["idle","disconnected"],null]]],[["default"],[[[[1,"\\n\\n "],[8,[30,1],null,[["@matches"],["disconnected"]],[["default"],[[[[1,"\\n"],[41,[28,[37,13],[[28,[37,27],[[33,8,["status"]],"401"],null]],null],[[[6,[39,11],null,[["name","params"],["disconnected",[28,[37,28],[[28,[37,4],[[30,0],[30,4],"RESET"],null]],null]]],[["default","else"],[[[[1," "],[18,9,[[30,6]]],[1,"\\n"]],[]],[[[1," "],[8,[39,29],[[4,[38,30],null,[["sticky"],[true]]]],[["@color"],["warning"]],[["default"],[[[[1,"\\n "],[8,[30,8,["Title"]],null,null,[["default"],[[[[1,"Warning!"]],[]]]]],[1,"\\n "],[8,[30,8,["Description"]],null,null,[["default"],[[[[1,"An error was returned whilst loading this data, refresh to try again."]],[]]]]],[1,"\\n "]],[8]]]]],[1,"\\n"]],[]]]]]],[]],null],[1," "]],[]]]]],[1,"\\n"],[41,[28,[37,27],[[33,8,["status"]],"403"],null],[[[6,[39,11],null,[["name"],["error"]],[["default","else"],[[[[1," "],[18,9,[[30,6]]],[1,"\\n"]],[]],[[[1," "],[8,[39,26],null,[["@error"],[[99,8,["@error"]]]],null],[1,"\\n"]],[]]]]]],[]],[[[1," "],[8,[39,11],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n "],[18,9,[[30,6]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]]],[1,"\\n "]],[]]]]],[1,"\\n\\n"]],[6]]],[1," "],[1,[28,[35,31],[[28,[37,32],[[30,4],"LOAD"],null]],[["src"],[[33,17]]]]],[1,"\\n"]],[1,2,3,4,5]]]]]],["State","Guard","Action","dispatch","state","api","source","T","&default"],false,["yield","state-chart","chart","ref","action","let","hash","data","error","queue","mut","yield-slot","if","not","items","array","and","src","or","once","state-matches","data-source","open","did-insert","set","consul/loader","error-state","eq","block-params","hds/toast","notification","did-update","fn"]]',moduleName:"consul-ui/components/data-loader/index.hbs",isStrictMode:!1}) +var a=(0,t.setComponentTemplate)(o,t.default.extend(r.default,{tagName:"",onchange:e=>e,init:function(){this._super(...arguments),this.chart=i.default},didReceiveAttrs:function(){this._super(...arguments),void 0!==this.items&&this.send("change",this.items)},didInsertElement:function(){this._super(...arguments),this.dispatch("LOAD")},actions:{isLoaded:function(){return void 0!==this.items||void 0===this.src},change:function(e){(0,l.set)(this,"data",this.onchange(e))}}})) +e.default=a})),define("consul-ui/components/data-sink/index",["exports","@ember/component","@ember/template-factory","@ember/service","@ember/object","consul-ui/utils/dom/event-source"],(function(e,t,n,l,r,i){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const o=(0,n.createTemplateFactory)({id:"hxJqQ0VJ",block:'[[[1,"\\n"],[18,1,[[28,[37,1],null,[["open","state"],[[28,[37,2],[[30,0],"open"],null],[33,3]]]]]],[1,"\\n"]],["&default"],false,["yield","hash","action","state"]]',moduleName:"consul-ui/components/data-sink/index.hbs",isStrictMode:!1}) +var a=(0,t.setComponentTemplate)(o,t.default.extend({tagName:"",service:(0,l.inject)("data-sink/service"),dom:(0,l.inject)("dom"),logger:(0,l.inject)("logger"),onchange:function(e){},onerror:function(e){},state:(0,r.computed)("instance","instance.{dirtyType,isSaving}",(function(){let e +const t=(0,r.get)(this,"instance.isSaving"),n=(0,r.get)(this,"instance.dirtyType") +if(void 0===t&&void 0===n)e="idle" +else{switch(n){case"created":e=t?"creating":"create" +break +case"updated":e=t?"updating":"update" +break +case"deleted":case void 0:e=t?"removing":"remove"}e=`active.${e}`}return{matches:t=>-1!==e.indexOf(t)}})),init:function(){this._super(...arguments),this._listeners=this.dom.listeners()},willDestroyElement:function(){this._super(...arguments),this._listeners.remove()},source:function(e){const t=(0,i.once)(e),n=e=>{(0,r.set)(this,"instance",void 0) +try{this.onerror(e),this.logger.execute(e)}catch(e){this.logger.execute(e)}} +return this._listeners.add(t,{message:e=>{try{(0,r.set)(this,"instance",void 0),this.onchange(e)}catch(t){n(t)}},error:e=>n(e)}),t},didInsertElement:function(){this._super(...arguments),void 0===this.data&&void 0===this.item||this.actions.open.apply(this,[this.data,this.item])},persist:function(e,t){void 0!==e?(0,r.set)(this,"instance",this.service.prepare(this.sink,e,t)):(0,r.set)(this,"instance",t),this.source((()=>this.service.persist(this.sink,this.instance)))},remove:function(e){(0,r.set)(this,"instance",e),this.source((()=>this.service.remove(this.sink,e)))},actions:{open:function(e,t){if(t instanceof Event&&(t=void 0),void 0===e&&void 0===t)throw new Error("You must specify data to save, or null to remove") +null===e||""===e?this.remove(t):this.persist(e,t)}}})) +e.default=a})),define("consul-ui/components/data-source/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@ember/service","@glimmer/tracking","@ember/object","@ember/runloop","@ember/debug"],(function(e,t,n,l,r,i,o,a,u){var s,c,d,p,f,m,h,b,y,v +function g(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function O(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const P=(0,n.createTemplateFactory)({id:"W/NppIUM",block:'[[[1,"\\n"],[41,[28,[37,1],[[30,0,["disabled"]]],null],[[[41,[28,[37,2],[[30,0,["loading"]],"lazy"],null],[[[1," "],[11,"data"],[24,"aria-hidden","true"],[24,5,"width: 0;height: 0;font-size: 0;padding: 0;margin: 0;"],[4,[38,3],[[30,0,["connect"]]],null],[12],[13],[1,"\\n"]],[]],[[[1," "],[1,[28,[35,3],[[30,0,["connect"]]],null]],[1,"\\n"]],[]]],[1," "],[1,[28,[35,4],[[30,0,["attributeChanged"]],"src",[30,1]],null]],[1,"\\n "],[1,[28,[35,4],[[30,0,["attributeChanged"]],"loading",[30,2]],null]],[1,"\\n "],[1,[28,[35,5],[[30,0,["disconnect"]]],null]],[1,"\\n"]],[]],null],[1,[28,[35,4],[[30,0,["attributeChanged"]],"disabled",[30,3]],null]],[1,"\\n"],[18,4,[[28,[37,7],null,[["data","error","invalidate","Source"],[[30,0,["data"]],[30,0,["error"]],[30,0,["invalidate"]],[52,[30,0,["data"]],[50,"data-source",0,null,[["disabled"],[[28,[37,1],[[28,[37,2],[[30,0,["error"]],[27]],null]],null]]]],""]]]]]],[1,"\\n"]],["@src","@loading","@disabled","&default"],false,["if","not","eq","did-insert","did-update","will-destroy","yield","hash","component"]]',moduleName:"consul-ui/components/data-source/index.hbs",isStrictMode:!1}),w=function(e,t,n){let l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null +return"function"==typeof e?e():null} +const r=e[t] +return r!==n&&l(r,n),e[t]=n},x=()=>{},j=e=>"function"==typeof e?e:x,_=["eager","lazy"] +let S=(s=(0,r.inject)("data-source/service"),c=(0,r.inject)("dom"),d=(0,r.inject)("logger"),p=class extends l.default{constructor(e,t){super(...arguments),g(this,"dataSource",f,this),g(this,"dom",m,this),g(this,"logger",h,this),g(this,"isIntersecting",b,this),g(this,"data",y,this),g(this,"error",v,this),this._listeners=this.dom.listeners(),this._lazyListeners=this.dom.listeners()}get loading(){return _.includes(this.args.loading)?this.args.loading:_[0]}get disabled(){return void 0!==this.args.disabled&&this.args.disabled}onchange(e){this.error=void 0,this.data=e.data,j(this.args.onchange)(e)}onerror(e){this.error=e.error||e,j(this.args.onerror)(e)}connect(e){Array.isArray(e)?(this._lazyListeners.remove(),this.open()):this._lazyListeners.add(this.dom.isInViewport(e,(e=>{this.isIntersecting=e,this.isIntersecting?this.open():this.close()})))}disconnect(){void 0!==this.data&&void 0===this.data.length&&"function"==typeof this.data.rollbackAttributes&&this.data.rollbackAttributes(),this.close(),this._listeners.remove(),this._lazyListeners.remove()}attributeChanged(e){let[t,n]=e +if("src"===t)("eager"===this.loading||this.isIntersecting)&&this.open()}open(){const e=this.args.src,t=w(this,"source",this.dataSource.open(e,this,this.open),((e,t)=>{this.dataSource.close(e,this)})),n=e=>{try{const t=(0,o.get)(e,"error.errors.firstObject")||{} +"429"!==(0,o.get)(t,"status")&&this.onerror(e),this.logger.execute(e)}catch(e){this.logger.execute(e)}},l=this._listeners.add(this.source,{message:e=>{try{this.onchange(e)}catch(t){n(t)}},error:e=>{n(e)}}) +if(w(this,"_remove",l),"function"==typeof t.getCurrentEvent){const e=t.getCurrentEvent() +if(e){let t +void 0!==e.error?(t="onerror",this.error=e.error):(this.error=void 0,this.data=e.data,t="onchange"),(0,a.schedule)("afterRender",(()=>{try{this[t](e)}catch(l){n(l)}}))}}}async invalidate(){this.source.readyState=2,this.disconnect(),(0,a.schedule)("afterRender",(()=>{(0,u.runInDebug)((e=>console.debug("Invalidation is only supported for non-lazy data sources. If you want to use this you should fixup support for lazy data sources"))),this.connect([])}))}close(){void 0!==this.source&&(this.dataSource.close(this.source,this),w(this,"_remove",void 0),this.source=void 0)}},f=O(p.prototype,"dataSource",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m=O(p.prototype,"dom",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=O(p.prototype,"logger",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=O(p.prototype,"isIntersecting",[i.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return!1}}),y=O(p.prototype,"data",[i.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),v=O(p.prototype,"error",[i.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),O(p.prototype,"connect",[o.action],Object.getOwnPropertyDescriptor(p.prototype,"connect"),p.prototype),O(p.prototype,"disconnect",[o.action],Object.getOwnPropertyDescriptor(p.prototype,"disconnect"),p.prototype),O(p.prototype,"attributeChanged",[o.action],Object.getOwnPropertyDescriptor(p.prototype,"attributeChanged"),p.prototype),O(p.prototype,"open",[o.action],Object.getOwnPropertyDescriptor(p.prototype,"open"),p.prototype),O(p.prototype,"invalidate",[o.action],Object.getOwnPropertyDescriptor(p.prototype,"invalidate"),p.prototype),O(p.prototype,"close",[o.action],Object.getOwnPropertyDescriptor(p.prototype,"close"),p.prototype),p) +e.default=S,(0,t.setComponentTemplate)(P,S)})),define("consul-ui/components/data-writer/chart.xstate",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default={id:"data-writer",initial:"idle",states:{idle:{on:{PERSIST:{target:"persisting"},REMOVE:{target:"removing"}}},removing:{on:{SUCCESS:{target:"removed"},ERROR:{target:"error"}}},persisting:{on:{SUCCESS:{target:"persisted"},ERROR:{target:"error"}}},removed:{on:{RESET:{target:"idle"}}},persisted:{on:{RESET:{target:"idle"}}},error:{on:{RESET:{target:"idle"}}}}}})),define("consul-ui/components/data-writer/index",["exports","@ember/component","@ember/template-factory","@ember/object","block-slots","consul-ui/components/data-writer/chart.xstate"],(function(e,t,n,l,r,i){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const o=(0,n.createTemplateFactory)({id:"2KEWIUOo",block:'[[[1,"\\n"],[8,[39,0],null,[["@src"],[[99,1,["@src"]]]],[["default"],[[[[1,"\\n\\n "],[8,[39,2],null,[["@target","@name","@value"],[[30,0],"dispatch",[30,4]]],null],[1,"\\n\\n"],[44,[[28,[37,4],null,[["data","error","persist","delete","inflight","disabled"],[[33,5],[33,6],[28,[37,7],[[30,0],"persist"],null],[28,[37,8],[[28,[37,7],[[30,0],[28,[37,9],[[33,5]],null]],null],[28,[37,7],[[30,0],[30,4],"REMOVE"],null]],null],[28,[37,10],[[30,5],[28,[37,11],["persisting","removing"],null]],null],[28,[37,10],[[30,5],[28,[37,11],["persisting","removing"],null]],null]]]]],[[[1,"\\n "],[18,13,[[30,6]]],[1,"\\n\\n "],[8,[30,1],null,[["@matches"],["removing"]],[["default"],[[[[1,"\\n "],[8,[39,13],null,[["@sink","@item","@data","@onchange","@onerror"],[[99,14,["@sink"]],[99,5,["@item"]],null,[28,[37,7],[[30,0],[30,4],"SUCCESS"],null],[28,[37,7],[[30,0],"error"],null]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[30,1],null,[["@matches"],["persisting"]],[["default"],[[[[1,"\\n "],[8,[39,13],null,[["@sink","@item","@onchange","@onerror"],[[99,14,["@sink"]],[99,5,["@item"]],[28,[37,7],[[30,0],[30,4],"SUCCESS"],null],[28,[37,7],[[30,0],"error"],null]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[30,1],null,[["@matches"],["removed"]],[["default"],[[[[1,"\\n"],[44,[[28,[37,8],[[28,[37,7],[[30,0],[30,4],"RESET"],null],[28,[37,7],[[30,0],[33,15]],null]],null]],[[[6,[39,16],null,[["name","params"],["removed",[28,[37,17],[[30,7]],null]]],[["default","else"],[[[[1," "],[18,13,[[30,6]]],[1,"\\n"]],[]],[[[1," "],[8,[39,18],[[4,[38,19],null,[["after"],[[28,[37,7],[[30,0],[30,7]],null]]]]],[["@color"],["success"]],[["default"],[[[[1,"\\n "],[8,[30,8,["Title"]],null,null,[["default"],[[[[1,"Success!"]],[]]]]],[1,"\\n "],[8,[30,8,["Description"]],null,null,[["default"],[[[[1,"Your "],[1,[28,[35,20],[[33,21],[33,22]],null]],[1," has been deleted."]],[]]]]],[1,"\\n "]],[8]]]]],[1,"\\n"]],[]]]]]],[7]]],[1," "]],[]]]]],[1,"\\n\\n "],[8,[30,1],null,[["@matches"],["persisted"]],[["default"],[[[[1,"\\n"],[44,[[28,[37,7],[[30,0],[33,23]],null]],[[[6,[39,16],null,[["name","params"],["persisted",[28,[37,17],[[30,9]],null]]],[["default","else"],[[[[1," "],[18,13,[[30,6]]],[1,"\\n"]],[]],[[[1," "],[8,[39,18],[[4,[38,19],null,[["after"],[[28,[37,7],[[30,0],[30,9]],null]]]]],[["@color"],["success"]],[["default"],[[[[1,"\\n "],[8,[30,10,["Title"]],null,null,[["default"],[[[[1,"Success!"]],[]]]]],[1,"\\n "],[8,[30,10,["Description"]],null,null,[["default"],[[[[1,"Your "],[1,[28,[35,20],[[33,21],[33,22]],null]],[1," has been saved."]],[]]]]],[1,"\\n "]],[10]]]]],[1,"\\n"]],[]]]]]],[9]]],[1," "]],[]]]]],[1,"\\n\\n "],[8,[30,1],null,[["@matches"],["error"]],[["default"],[[[[1,"\\n"],[44,[[28,[37,7],[[30,0],[30,4],"RESET"],null]],[[[6,[39,16],null,[["name","params"],["error",[28,[37,17],[[30,11],[30,6,["error"]]],null]]],[["default","else"],[[[[1," "],[18,13,[[30,6]]],[1,"\\n"]],[]],[[[1," "],[8,[39,18],[[4,[38,19],null,[["after"],[[28,[37,7],[[30,0],[30,11]],null]]]]],[["@color"],["critical"]],[["default"],[[[[1,"\\n "],[8,[30,12,["Title"]],null,null,[["default"],[[[[1,"Error!"]],[]]]]],[1,"\\n "],[8,[30,12,["Description"]],null,null,[["default"],[[[[1,"There was an error saving your "],[1,[28,[35,20],[[33,21],[33,22]],null]],[1,".\\n"],[41,[28,[37,25],[[30,6,["error","status"]],[30,6,["error","detail"]]],null],[[[1," "],[10,"br"],[12],[13],[1,[30,6,["error","status"]]],[1,": "],[1,[30,6,["error","detail"]]],[1,"\\n"]],[]],[[[41,[30,6,["error","message"]],[[[1," "],[10,"br"],[12],[13],[1,[30,6,["error","message"]]],[1,"\\n "]],[]],null]],[]]],[1," "]],[]]]]],[1,"\\n "]],[12]]]]],[1,"\\n"]],[]]]]]],[11]]],[1," "]],[]]]]],[1,"\\n\\n "],[8,[39,16],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[18,13,[[30,6]]],[1,"\\n "]],[]]]]],[1,"\\n\\n"]],[6]]]],[1,2,3,4,5]]]]]],["State","Guard","Action","dispatch","state","api","after","T","after","T","after","T","&default"],false,["state-chart","chart","ref","let","hash","data","error","action","queue","mut","state-matches","array","yield","data-sink","sink","ondelete","yield-slot","block-params","hds/toast","notification","or","label","type","onchange","if","and"]]',moduleName:"consul-ui/components/data-writer/index.hbs",isStrictMode:!1}) +var a=(0,t.setComponentTemplate)(o,t.default.extend(r.default,{tagName:"",ondelete:function(){return this.onchange(...arguments)},onchange:function(){},init:function(){this._super(...arguments),this.chart=i.default},actions:{persist:function(e,t){t&&"function"==typeof t.preventDefault&&t.preventDefault(),(0,l.set)(this,"data",e),this.dispatch("PERSIST")},error:function(e,t){t&&"function"==typeof t.preventDefault&&t.preventDefault(),(0,l.set)(this,"error",void 0!==e.error.errors?e.error.errors.firstObject:e.error),this.dispatch("ERROR")}}})) +e.default=a})),define("consul-ui/components/debug/navigation/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"gn00CoAo",block:"[[],[],false,[]]",moduleName:"consul-ui/components/debug/navigation/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/delete-confirmation/index",["exports","@ember/component","@ember/template-factory"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const l=(0,n.createTemplateFactory)({id:"wrK95/Xv",block:'[[[1,"\\n"],[10,2],[12],[1,"\\n "],[1,[34,0]],[1,"\\n"],[13],[1,"\\n"],[8,[39,1],null,null,[["default"],[[[[1,"\\n "],[8,[39,2],[[16,"onclick",[28,[37,3],[[30,0],[33,4]],null]]],[["@text","@color"],["Confirm Delete","critical"]],null],[1,"\\n "],[8,[39,2],[[16,"onclick",[28,[37,3],[[30,0],[33,5]],null]]],[["@text","@color"],["Cancel","secondary"]],null],[1,"\\n"]],[]]]]]],[],false,["message","hds/button-set","hds/button","action","execute","cancel"]]',moduleName:"consul-ui/components/delete-confirmation/index.hbs",isStrictMode:!1}) +var r=(0,t.setComponentTemplate)(l,t.default.extend({tagName:"",execute:function(){},cancel:function(){}})) +e.default=r})),define("consul-ui/components/disclosure-menu/action/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"5sPiH/Fc",block:'[[[1,"\\n"],[8,[30,1,["Action"]],[[24,"aria-haspopup","menu"],[17,2]],null,[["default"],[[[[1,"\\n "],[18,3,null],[1,"\\n"]],[]]]]],[1,"\\n"]],["@disclosure","&attrs","&default"],false,["yield"]]',moduleName:"consul-ui/components/disclosure-menu/action/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/disclosure-menu/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"xJDSwfnA",block:'[[[1,"\\n"],[11,0],[16,0,[28,[37,0],["disclosure-menu"],null]],[17,1],[12],[1,"\\n "],[8,[39,1],null,[["@expanded"],[[30,2]]],[["default"],[[[[1,"\\n "],[18,6,[[28,[37,3],null,[["Action","Menu","disclosure","toggle","close","open","expanded"],[[50,"disclosure-menu/action",0,null,[["disclosure"],[[30,3]]]],[50,"disclosure-menu/menu",0,null,[["disclosure","items","rowHeight"],[[30,3],[30,4],[30,5]]]],[30,3],[30,3,["toggle"]],[30,3,["close"]],[30,3,["open"]],[30,3,["expanded"]]]]]]],[1,"\\n "]],[3]]]]],[1,"\\n"],[13],[1,"\\n"]],["&attrs","@expanded","disclosure","@items","@rowHeight","&default"],false,["class-map","disclosure","yield","hash","component"]]',moduleName:"consul-ui/components/disclosure-menu/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/disclosure-menu/menu/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"Q113CWhh",block:'[[[1,"\\n"],[8,[30,1,["Details"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,0],null,[["@items"],[[28,[37,1],[[30,3],[28,[37,2],null,null]],null]]],[["default"],[[[[1,"\\n "],[11,0],[16,0,[28,[37,3],[[28,[37,2],["paged-collection-scroll",[28,[37,4],[[30,4,["type"]],[28,[37,2],["virtual-scroll","native-scroll"],null]],null]],null]],null]],[17,5],[4,[38,5],["click",[30,1,["close"]]],null],[4,[38,6],[[30,4,["viewport"]]],null],[4,[38,7],[[30,4,["resize"]]],null],[4,[38,8],["--paged-row-height"],[["returns"],[[30,4,["rowHeight"]]]]],[4,[38,8],["max-height"],[["returns"],[[30,4,["maxHeight"]]]]],[12],[1,"\\n "],[18,6,[[28,[37,10],null,[["Menu"],[[50,"menu",0,null,[["disclosure","pager"],[[30,1],[30,4]]]]]]]]],[1,"\\n "],[13],[1,"\\n "]],[4]]]]],[1,"\\n"]],[2]]]]]],["@disclosure","details","@items","pager","&attrs","&default"],false,["paged-collection","or","array","class-map","includes","on-outside","did-insert","on-resize","css-prop","yield","hash","component"]]',moduleName:"consul-ui/components/disclosure-menu/menu/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/disclosure/action/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"L9cY7BZT",block:'[[[1,"\\n"],[8,[39,0],[[16,"aria-expanded",[52,[30,1,["expanded"]],"true","false"]],[16,"aria-controls",[30,1,["controls"]]],[17,2]],null,[["default"],[[[[1,"\\n "],[18,3,null],[1,"\\n"]],[]]]]],[1,"\\n"]],["@disclosure","&attrs","&default"],false,["action","if","yield"]]',moduleName:"consul-ui/components/disclosure/action/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/disclosure/details/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"2QtyQRCK",block:'[[[1,"\\n"],[44,[[28,[37,1],null,null]],[[[41,[28,[37,3],[[28,[37,4],[[28,[37,5],[[30,2],[27]],null],[30,3,["expanded"]]],null],[28,[37,4],[[28,[37,6],[[30,2],[27]],null],[28,[37,5],[[30,2],false],null]],null]],null],[[[18,4,[[28,[37,8],null,[["id","expanded"],[[30,1],[30,3,["expanded"]]]]]]],[1,"\\n"]],[]],null],[1,[28,[35,9],[[28,[37,10],[[30,3,["add"]],[30,1]],null]],null]],[1,"\\n"],[1,[28,[35,11],[[28,[37,10],[[30,3,["remove"]],[30,1]],null]],null]],[1,"\\n"]],[1]]]],["id","@auto","@disclosure","&default"],false,["let","unique-id","if","or","and","eq","not-eq","yield","hash","did-insert","fn","will-destroy"]]',moduleName:"consul-ui/components/disclosure/details/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/disclosure/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@glimmer/tracking","@ember/object","@ember/runloop"],(function(e,t,n,l,r,i,o){var a,u +function s(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const c=(0,n.createTemplateFactory)({id:"ATdkf5j+",block:'[[[1,"\\n"],[8,[39,0],null,[["@src","@initial"],[[28,[37,0],["boolean"],null],[52,[30,1],"true","false"]]],[["default"],[[[[1,"\\n"],[44,[[28,[37,3],null,[["toggle","close","open","expanded","event","button","controls"],[[28,[37,4],[[30,5],"TOGGLE"],null],[28,[37,4],[[30,5],"FALSE"],null],[28,[37,4],[[30,5],"TRUE"],null],[28,[37,5],[[30,6],"true"],null],[30,6,["context"]],[28,[37,6],null,null],[30,0,["ids"]]]]]],[[[44,[[28,[37,7],[[30,7],[28,[37,3],null,[["Action","Details"],[[50,"disclosure/action",0,null,[["disclosure"],[[30,7]]]],[50,"disclosure/details",0,null,[["disclosure"],[[28,[37,3],null,[["add","remove","expanded"],[[30,0,["add"]],[30,0,["remove"]],[28,[37,5],[[30,6],"true"],null]]]]]]]]]]],null]],[[[1," "],[18,9,[[30,8]]],[1,"\\n"]],[8]]]],[7]]]],[2,3,4,5,6]]]]]],["@expanded","State","Guard","Action","dispatch","state","_api","api","&default"],false,["state-chart","if","let","hash","fn","state-matches","unique-id","assign","component","yield"]]',moduleName:"consul-ui/components/disclosure/index.hbs",isStrictMode:!1}) +let d=(a=class extends l.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="ids",l=this,(n=u)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}add(e){(0,o.schedule)("afterRender",(()=>{this.ids=`${this.ids}${this.ids.length>0?" ":""}${e}`}))}remove(e){this.ids=this.ids.split(" ").filter((t=>t!==e)).join(" ")}},u=s(a.prototype,"ids",[r.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return""}}),s(a.prototype,"add",[i.action],Object.getOwnPropertyDescriptor(a.prototype,"add"),a.prototype),s(a.prototype,"remove",[i.action],Object.getOwnPropertyDescriptor(a.prototype,"remove"),a.prototype),a) +e.default=d,(0,t.setComponentTemplate)(c,d)})),define("consul-ui/components/ember-collection",["exports","ember-collection/components/ember-collection"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/ember-native-scrollable",["exports","ember-collection/components/ember-native-scrollable"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/empty-state/index",["exports","@ember/component","@ember/template-factory","@ember/object","block-slots"],(function(e,t,n,l,r){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const i=(0,n.createTemplateFactory)({id:"Hzp776M1",block:'[[[1,"\\n"],[18,2,null],[1,"\\n"],[11,0],[24,0,"empty-state"],[17,1],[12],[1,"\\n"],[41,[33,2],[[[1," "],[10,"header"],[12],[1,"\\n"],[6,[39,3],null,[["name"],["header"]],[["default"],[[[[1," "],[18,2,null],[1,"\\n"]],[]]]]],[6,[39,3],null,[["name"],["subheader"]],[["default"],[[[[1," "],[18,2,null],[1,"\\n"]],[]]]]],[1," "],[13],[1,"\\n"]],[]],null],[6,[39,3],null,[["name"],["body"]],[["default"],[[[[1," "],[10,0],[12],[1,"\\n "],[18,2,null],[1,"\\n"],[41,[33,4],[[[1," "],[8,[39,5],[[4,[38,7],["click",[33,4]],null]],[["@color","@text"],["primary",[52,[33,6,["AccessorID"]],"Log in with a different token","Log in"]]],[["default"],[[[[1,"\\n "],[8,[39,8],null,[["@src","@onchange"],[[28,[37,9],["settings://consul:token"],null],[28,[37,10],[[30,0],[28,[37,11],[[33,6]],null]],[["value"],["data"]]]]],null],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n"]],[]]]]],[6,[39,3],null,[["name"],["actions"]],[["default"],[[[[1," "],[10,"ul"],[12],[1,"\\n "],[18,2,null],[1,"\\n "],[13],[1,"\\n"]],[]]]]],[13]],["&attrs","&default"],false,["yield","if","hasHeader","yield-slot","login","hds/button","token","on","data-source","uri","action","mut"]]',moduleName:"consul-ui/components/empty-state/index.hbs",isStrictMode:!1}) +var o=(0,t.setComponentTemplate)(i,t.default.extend(r.default,{tagName:"",willRender:function(){this._super(...arguments),(0,l.set)(this,"hasHeader",this._isRegistered("header")||this._isRegistered("subheader"))}})) +e.default=o})),define("consul-ui/components/error-state/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"Zz5ttQNZ",block:'[[[1,"\\n"],[41,[28,[37,1],[[30,1,["status"]],"403"],null],[[[1," "],[8,[39,2],[[16,0,[28,[37,3],["status-",[30,1,["status"]]],null]]],[["@login"],[[30,2]]],[["default"],[[[[1,"\\n "],[8,[39,4],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,5],[[30,1,["message"]],"Consul returned an error"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"],[41,[30,1,["status"]],[[[1," "],[8,[39,4],null,[["@name"],["subheader"]],[["default"],[[[[1,"\\n "],[10,"h3"],[12],[1,"\\n Error "],[1,[30,1,["status"]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[1," "],[8,[39,4],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n"],[41,[30,1,["detail"]],[[[1," "],[1,[30,1,["detail"]]],[1,"\\n"]],[]],[[[1," You may have visited a URL that is loading an unknown resource, so you can try going back to the root or try re-submitting your ACL Token/SecretID by going back to ACLs.\\n"]],[]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,4],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,6],null,[["@route","@text","@icon","@iconPosition","@size"],["index","Go back","chevron-left","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,6],null,[["@text","@href","@iconPosition","@icon","@size"],["Read the documentation",[29,[[28,[37,7],["CONSUL_DOCS_URL"],null]]],"trailing","docs-link","small"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],[[[1," "],[8,[39,2],[[16,0,[28,[37,3],["status-",[30,1,["status"]]],null]]],[["@login"],[[30,2]]],[["default"],[[[[1,"\\n "],[8,[39,4],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"\\n You are not authorized\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,4],null,[["@name"],["subheader"]],[["default"],[[[[1,"\\n "],[10,"h3"],[12],[1,"\\n Error "],[1,[30,1,["status"]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,4],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n You must be granted permissions to view this data. Ask your administrator if you think you should have access.\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,4],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,6],null,[["@text","@href","@icon","@iconPosition","@size"],["Read the documentation",[29,[[28,[37,7],["CONSUL_DOCS_URL"],null],"/acl/index.html"]],"docs-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,6],null,[["@text","@href","@icon","@iconPosition","@size"],["Follow the guide",[29,[[28,[37,7],["CONSUL_DOCS_LEARN_URL"],null],"/consul/security-networking/production-acls"]],"learn-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]]]],["@error","@login"],false,["if","not-eq","empty-state","concat","block-slot","or","hds/link/standalone","env"]]',moduleName:"consul-ui/components/error-state/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/event-source/index",["exports","@ember/component","@ember/template-factory","@ember/service","@ember/object"],(function(e,t,n,l,r){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const i=(0,n.createTemplateFactory)({id:"CYkx/ZA5",block:'[[[1,"\\n"],[18,1,[[28,[37,1],null,[["close"],[[28,[37,2],[[30,0],"close"],null]]]]]],[1,"\\n"]],["&default"],false,["yield","hash","action"]]',moduleName:"consul-ui/components/event-source/index.hbs",isStrictMode:!1}),o=function(e,t,n){let l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null +return"function"==typeof e?e():null} +const i=e[t] +return i!==n&&l(i,n),(0,r.set)(e,t,n)} +var a=(0,t.setComponentTemplate)(i,t.default.extend({tagName:"",dom:(0,l.inject)("dom"),logger:(0,l.inject)("logger"),data:(0,l.inject)("data-source/service"),closeOnDestroy:!0,onerror:function(e){this.logger.execute(e.error)},init:function(){this._super(...arguments),this._listeners=this.dom.listeners()},willDestroyElement:function(){this.closeOnDestroy&&this.actions.close.apply(this,[]),this._listeners.remove(),this._super(...arguments)},didReceiveAttrs:function(){this._super(...arguments),(0,r.get)(this,"src.configuration.uri")!==(0,r.get)(this,"source.configuration.uri")&&this.actions.open.apply(this,[])},actions:{open:function(){o(this,"source",this.data.open(this.src,this),((e,t)=>{void 0!==e&&this.data.close(e,this)})),o(this,"proxy",this.src,((e,t)=>{void 0!==e&&e.destroy()})) +const e=e=>{try{const t=(0,r.get)(e,"error.errors.firstObject") +"429"!==(0,r.get)(t||{},"status")&&this.onerror(e),this.logger.execute(e)}catch(e){this.logger.execute(e)}},t=this._listeners.add(this.source,{error:t=>{e(t)}}) +o(this,"_remove",t)},close:function(){void 0!==this.source&&(this.data.close(this.source,this),o(this,"_remove",void 0),(0,r.set)(this,"source",void 0)),void 0!==this.proxy&&this.proxy.destroy()}}})) +e.default=a})),define("consul-ui/components/flash-message",["exports","ember-cli-flash/components/flash-message"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/flight-icon",["exports","@hashicorp/ember-flight-icons/components/flight-icon"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/form-component/index",["exports","@ember/component","@ember/template-factory","block-slots","@ember/service","@ember/object/computed"],(function(e,t,n,l,r,i){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const o=(0,n.createTemplateFactory)({id:"Zu8CcSUV",block:'[[[1,"\\n"],[18,1,null]],["&default"],false,["yield"]]',moduleName:"consul-ui/components/form-component/index.hbs",isStrictMode:!1}),a=/([^[\]])+/g +var u=(0,t.setComponentTemplate)(o,t.default.extend(l.default,{tagName:"",onreset:function(){},onchange:function(){},onerror:function(){},onsuccess:function(){},data:(0,i.alias)("form.data"),item:(0,i.alias)("form.data"),dom:(0,r.inject)("dom"),container:(0,r.inject)("form"),actions:{change:function(e,t,n){let l=this.dom.normalizeEvent(e,t) +const r=[...l.target.name.matchAll(a)],i=r[r.length-1][0] +let o +o=-1===i.indexOf("[")?`${this.type}[${i}]`:i,this.form.handleEvent(l,o),this.onchange({target:this})}}})) +e.default=u})),define("consul-ui/components/form-group/element/checkbox/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"aTpxDLx0",block:'[[[1,"\\n"],[11,"input"],[24,4,"checkbox"],[16,3,[30,1]],[16,2,[30,2]],[17,3],[4,[38,0],[[28,[37,1],[[30,4]],null]],null],[4,[38,2],["change",[28,[37,1],[[30,5]],null]],null],[12],[13],[1,"\\n"]],["@name","@value","&attrs","@didinsert","@onchange"],false,["did-insert","optional","on"]]',moduleName:"consul-ui/components/form-group/element/checkbox/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/form-group/element/error/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"GMa+YgFr",block:'[[[1,"\\n"],[11,"strong"],[24,"role","alert"],[17,1],[12],[1,"\\n "],[18,2,null],[1,"\\n"],[13],[1,"\\n"]],["&attrs","&default"],false,["yield"]]',moduleName:"consul-ui/components/form-group/element/error/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/form-group/element/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@glimmer/tracking","@ember/object"],(function(e,t,n,l,r,i){var o,a,u +function s(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function c(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const d=(0,n.createTemplateFactory)({id:"LYBie/vO",block:'[[[1,"\\n"],[44,[[28,[37,1],null,[["Element","Text","Checkbox","Radio","Label","Error","state"],[[50,"form-group/element",0,null,[["group","name"],[[30,1],[30,2]]]],[50,"form-group/element/text",0,null,[["didinsert","name","oninput"],[[28,[37,3],[[30,0],[30,0,["connect"]]],null],[30,0,["name"]],[28,[37,3],[[30,0],[28,[37,4],[[30,0,["touched"]]],null],true],null]]]],[50,"form-group/element/checkbox",0,null,[["didinsert","name","onchange"],[[28,[37,3],[[30,0],[30,0,["connect"]]],null],[30,0,["name"]],[28,[37,3],[[30,0],[28,[37,4],[[30,0,["touched"]]],null],true],null]]]],[50,"form-group/element/radio",0,null,[["didinsert","name","onchange"],[[28,[37,3],[[30,0],[30,0,["connect"]]],null],[30,0,["name"]],[28,[37,3],[[30,0],[28,[37,4],[[30,0,["touched"]]],null],true],null]]]],[50,"form-group/element/label",0,null,null],[50,"form-group/element/error",0,null,null],[33,5]]]]],[[[41,[28,[37,7],[[30,0,["type"]],[28,[37,8],["radiogroup","checkbox-group","checkboxgroup"],null]],null],[[[1," "],[11,0],[16,"data-property",[30,0,["prop"]]],[16,0,[29,["type-",[30,0,["type"]],[52,[28,[37,9],[[33,5],"error"],null]," has-error"]]]],[17,4],[12],[1,"\\n "],[18,5,[[30,3]]],[1,"\\n "],[13],[1,"\\n"]],[]],[[[1," "],[11,"label"],[16,"data-property",[30,0,["prop"]]],[16,0,[29,["type-",[30,0,["type"]],[52,[28,[37,9],[[33,5],"error"],null]," has-error"]]]],[17,4],[12],[1,"\\n "],[18,5,[[30,3]]],[1,"\\n "],[13],[1,"\\n"]],[]]]],[3]]]],["@group","@name","el","&attrs","&default"],false,["let","hash","component","action","mut","state","if","includes","array","state-matches","yield"]]',moduleName:"consul-ui/components/form-group/element/index.hbs",isStrictMode:!1}) +let p=(o=class extends l.default{constructor(){super(...arguments),s(this,"el",a,this),s(this,"touched",u,this)}get type(){return void 0!==this.el?this.el.dataset.type||this.el.getAttribute("type")||this.el.getAttribute("role"):this.args.type}get name(){return void 0!==this.args.group?`${this.args.group.name}[${this.args.name}]`:this.args.name}get prop(){return`${this.args.name.toLowerCase().split(".").join("-")}`}get state(){const e=this.touched&&this.args.error +return{matches:t=>"error"===t&&e}}connect(e){this.el=e}},a=c(o.prototype,"el",[r.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),u=c(o.prototype,"touched",[r.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return!1}}),c(o.prototype,"connect",[i.action],Object.getOwnPropertyDescriptor(o.prototype,"connect"),o.prototype),o) +e.default=p,(0,t.setComponentTemplate)(d,p)})),define("consul-ui/components/form-group/element/label/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"f3iRrlW/",block:'[[[1,"\\n"],[11,1],[24,0,"form-elements-label label"],[17,1],[12],[1,"\\n "],[18,2,null],[1,"\\n"],[13],[1,"\\n"]],["&attrs","&default"],false,["yield"]]',moduleName:"consul-ui/components/form-group/element/label/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/form-group/element/radio/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"/22Fhuo5",block:'[[[1,"\\n"],[11,"input"],[24,4,"radio"],[16,3,[30,1]],[16,2,[30,2]],[17,3],[4,[38,0],[[28,[37,1],[[30,4]],null]],null],[4,[38,2],["change",[28,[37,1],[[30,5]],null]],null],[12],[13],[1,"\\n"]],["@name","@value","&attrs","@didinsert","@onchange"],false,["did-insert","optional","on"]]',moduleName:"consul-ui/components/form-group/element/radio/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/form-group/element/text/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"VMeFItBq",block:'[[[1,"\\n"],[11,"input"],[24,4,"text"],[16,3,[30,1]],[16,2,[30,2]],[17,3],[4,[38,0],[[28,[37,1],[[30,4]],null]],null],[4,[38,2],["input",[28,[37,1],[[30,5]],null]],null],[12],[13],[1,"\\n"]],["@name","@value","&attrs","@didinsert","@oninput"],false,["did-insert","optional","on"]]',moduleName:"consul-ui/components/form-group/element/text/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/form-group/index",["exports","@ember/component","@ember/template-factory","@glimmer/component"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"LaNs6VhD",block:'[[[1,"\\n"],[18,1,[[28,[37,1],null,[["Element"],[[50,"form-group/element",0,null,[["group"],[[30,0]]]]]]]]],[1,"\\n"]],["&default"],false,["yield","hash","component"]]',moduleName:"consul-ui/components/form-group/index.hbs",isStrictMode:!1}) +class i extends l.default{get name(){return this.args.name}}e.default=i,(0,t.setComponentTemplate)(r,i)})),define("consul-ui/components/form-input/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"s7KSGcTe",block:'[[[1,"\\n"],[11,"label"],[16,0,[28,[37,0],["form-input",[52,[28,[37,2],[[30,1,["state","context","errors"]],[30,2]],null]," has-error"]],null]],[17,3],[12],[1,"\\n "],[10,1],[12],[1,"\\n "],[18,7,null],[1,"\\n "],[13],[1,"\\n "],[18,8,null],[1,"\\n"],[44,[[28,[37,5],[[30,4,["help"]],[30,5]],null]],[[[41,[30,6],[[[1," "],[10,"em"],[12],[1,"\\n "],[1,[30,6]],[1,"\\n "],[13],[1,"\\n"]],[]],null]],[6]]],[1," "],[8,[39,6],null,[["@state","@matches"],[[30,1,["state"]],"error"]],[["default"],[[[[1,"\\n"],[1," "],[10,"strong"],[14,"role","alert"],[12],[1,[28,[35,2],[[28,[37,2],[[30,1,["state","context","errors"]],[30,2]],null],"message"],null]],[13],[1,"\\n "]],[]]]]],[1,"\\n"],[13],[1,"\\n"]],["@chart","@name","&attrs","@validations","@help","help","&label","&input"],false,["concat","if","get","yield","let","or","state"]]',moduleName:"consul-ui/components/form-input/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/freetext-filter/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@ember/object"],(function(e,t,n,l,r){var i +function o(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const a=(0,n.createTemplateFactory)({id:"QsBvWU14",block:'[[[1,"\\n"],[11,0],[24,0,"freetext-filter"],[17,1],[12],[1,"\\n "],[10,"label"],[14,0,"type-search"],[12],[1,"\\n "],[10,1],[14,0,"freetext-filter_label"],[12],[1,"Search"],[13],[1,"\\n "],[10,"input"],[14,0,"freetext-filter_input"],[15,"onsearch",[28,[37,0],[[30,0],[30,0,["change"]]],null]],[15,"oninput",[28,[37,0],[[30,0],[30,0,["change"]]],null]],[15,"onkeydown",[28,[37,0],[[30,0],[30,0,["keydown"]]],null]],[14,3,"s"],[15,2,[30,2]],[15,"placeholder",[30,0,["placeholder"]]],[14,"autofocus","autofocus"],[14,4,"search"],[12],[13],[1,"\\n "],[13],[1,"\\n "],[18,3,null],[1,"\\n"],[13]],["&attrs","@value","&default"],false,["action","yield"]]',moduleName:"consul-ui/components/freetext-filter/index.hbs",isStrictMode:!1}) +let u=(o((i=class extends l.default{get placeholder(){return this.args.placeholder||"Search"}get onsearch(){return this.args.onsearch||(()=>{})}change(e){this.onsearch(e)}keydown(e){13===e.keyCode&&e.preventDefault()}}).prototype,"change",[r.action],Object.getOwnPropertyDescriptor(i.prototype,"change"),i.prototype),o(i.prototype,"keydown",[r.action],Object.getOwnPropertyDescriptor(i.prototype,"keydown"),i.prototype),i) +e.default=u,(0,t.setComponentTemplate)(a,u)})) +define("consul-ui/components/hashicorp-consul/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@ember/service"],(function(e,t,n,l,r){var i,o,a,u,s +function c(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function d(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const p=(0,n.createTemplateFactory)({id:"aqN2qduu",block:'[[[1,"\\n"],[8,[39,0],[[24,0,"hashicorp-consul"],[17,1]],null,[["notifications","side-nav","main"],[[[[1,"\\n"],[42,[28,[37,2],[[28,[37,2],[[33,3,["queue"]]],null]],null],null,[[[1," "],[8,[30,2,["Notification"]],null,[["@delay","@sticky"],[[28,[37,4],[[30,3,["timeout"]],[30,3,["extendedTimeout"]]],null],[30,3,["sticky"]]]],[["default"],[[[[1,"\\n"],[41,[30,3,["dom"]],[[[1," "],[2,[30,3,["dom"]]],[1,"\\n"]],[]],[[[44,[[28,[37,7],[[30,3,["type"]]],null],[28,[37,7],[[30,3,["action"]]],null]],[[[1," "],[8,[39,8],[[24,"data-notification",""]],[["@color"],[[52,[28,[37,9],[[30,4],"error"],null],"critical",[30,4]]]],[["default"],[[[[1,"\\n "],[8,[30,6,["Title"]],null,null,[["default"],[[[[1,[28,[35,10],[[30,4]],null]],[1,"!"]],[]]]]],[1,"\\n "],[8,[30,6,["Description"]],null,null,[["default"],[[[[1,"\\n"],[41,[28,[37,9],[[30,5],"logout"],null],[[[41,[28,[37,9],[[30,4],"success"],null],[[[1," "],[1,[28,[35,11],["components.hashicorp-consul.notifications.logged-out"],null]],[1,"\\n"]],[]],[[[1," "],[1,[28,[35,11],["components.hashicorp-consul.notifications.logged-out-error"],null]],[1,"\\n"]],[]]]],[]],[[[41,[28,[37,9],[[30,5],"authorize"],null],[[[41,[28,[37,9],[[30,4],"success"],null],[[[1," "],[1,[28,[35,11],["components.hashicorp-consul.notifications.logged-in"],null]],[1,"\\n"]],[]],[[[1," "],[1,[28,[35,11],["components.hashicorp-consul.notifications.logged-in-error"],null]],[1,"\\n"]],[]]]],[]],[[[41,[28,[37,12],[[28,[37,9],[[30,5],"use"],null],[28,[37,9],[[30,3,["model"]],"token"],null]],null],[[[1," "],[8,[39,13],null,[["@type","@status","@item","@error"],[[30,5],[30,4],[30,3,["item"]],[30,3,["error"]]]],null],[1,"\\n"]],[]],[[[41,[28,[37,9],[[30,3,["model"]],"intention"],null],[[[1," "],[8,[39,14],null,[["@type","@status","@item","@error"],[[30,5],[30,4],[30,3,["item"]],[30,3,["error"]]]],null],[1,"\\n"]],[]],[[[41,[28,[37,9],[[30,3,["model"]],"role"],null],[[[1," "],[8,[39,15],null,[["@type","@status","@item","@error"],[[30,5],[30,4],[30,3,["item"]],[30,3,["error"]]]],null],[1,"\\n"]],[]],[[[41,[28,[37,9],[[30,3,["model"]],"policy"],null],[[[1," "],[8,[39,16],null,[["@type","@status","@item","@error"],[[30,5],[30,4],[30,3,["item"]],[30,3,["error"]]]],null],[1,"\\n "]],[]],null]],[]]]],[]]]],[]]],[1," "]],[]]]],[]]],[1," "]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n\\n"]],[4,5]]]],[]]],[1," "]],[]]]]],[1,"\\n"]],[3]],null],[1,"\\n "]],[2]],[[[1,"\\n "],[8,[39,17],[[24,0,"consul-side-nav"]],[["@isResponsive"],[false]],[["header","body","footer"],[[[[1,"\\n "],[8,[39,18],null,null,[["logo","actions"],[[[[1,"\\n "],[8,[39,19],null,[["@icon","@ariaLabel","@href","@isHrefExternal"],["consul-color","Consul",[28,[37,20],["index"],[["params"],[[28,[37,21],null,[["peer"],[[27]]]]]]],false]],null],[1,"\\n "]],[]],[[[1,"\\n "],[8,[39,22],[[24,0,"hds-side-nav__dropdown"]],[["@listPosition"],["bottom-left"]],[["default"],[[[[1,"\\n "],[8,[30,7,["ToggleIcon"]],null,[["@icon","@text"],["help","Help & Support menu"]],null],[1,"\\n "],[8,[39,23],null,[["@dropdown"],[[30,7]]],null],[1,"\\n "],[8,[30,7,["Interactive"]],null,[["@href","@isHrefExternal","@text"],[[28,[37,24],["CONSUL_DOCS_URL"],null],true,[28,[37,11],["components.hashicorp-consul.side-nav.support-menu.docs"],null]]],null],[1,"\\n "],[8,[30,7,["Interactive"]],null,[["@href","@isHrefExternal","@text"],[[28,[37,25],[[28,[37,24],["CONSUL_DOCS_LEARN_URL"],null],"/consul"],null],true,[28,[37,11],["components.hashicorp-consul.side-nav.support-menu.tutorials"],null]]],null],[1,"\\n "],[8,[30,7,["Interactive"]],null,[["@href","@isHrefExternal","@text"],[[28,[37,24],["CONSUL_REPO_ISSUES_URL"],null],true,[28,[37,11],["components.hashicorp-consul.side-nav.support-menu.feedback"],null]]],null],[1,"\\n "]],[7]]]]],[1,"\\n\\n "],[8,[39,26],null,[["@dc","@partition","@nspace","@onchange"],[[30,8],[30,9],[30,10],[30,11]]],[["default"],[[[[1,"\\n "],[8,[39,27],null,[["@target","@name","@value"],[[30,0],"tokenSelector",[30,12]]],null],[1,"\\n "]],[12]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]],[[[1,"\\n "],[8,[39,28],[[24,0,"hds-side-nav-hide-when-minimized consul-side-nav__selector-group"]],null,[["default"],[[[[1,"\\n "],[8,[39,29],null,[["@list"],[[30,13]]],null],[1,"\\n "],[8,[39,30],null,[["@list","@dc","@partition","@nspace","@dcs"],[[30,13],[30,8],[30,9],[30,10],[30,14]]],null],[1,"\\n\\n "],[8,[39,31],null,[["@dc","@partition","@nspace","@partitions","@list","@onchange"],[[30,8],[30,9],[30,10],[30,0,["partitions"]],[30,13],[28,[37,32],[[30,0],[28,[37,33],[[30,0,["partitions"]]],null]],[["value"],["data"]]]]],null],[1,"\\n "],[8,[39,34],null,[["@list","@dc","@partition","@nspace","@nspaces","@onchange"],[[30,13],[30,8],[30,9],[30,10],[30,0,["nspaces"]],[28,[37,32],[[30,0],[28,[37,33],[[30,0,["nspaces"]]],null]],[["value"],["data"]]]]],null],[1,"\\n "]],[13]]]]],[1,"\\n "],[8,[39,28],[[24,0,"hds-side-nav-hide-when-minimized"]],null,[["default"],[[[[1,"\\n"],[41,[28,[37,35],["access overview"],null],[[[1," "],[8,[30,15,["Link"]],null,[["@text","@route","@models","@query","@isActive"],[[28,[37,11],["components.hashicorp-consul.side-nav.overview"],null],"dc.show",[28,[37,36],[[30,8,["Name"]]],null],[28,[37,21],null,[["peer"],[[27]]]],[28,[37,37],["dc.show",[30,8,["Name"]]],null]]],null],[1,"\\n"]],[]],null],[41,[28,[37,35],["read services"],null],[[[1," "],[8,[30,15,["Link"]],null,[["@text","@href","@isHrefExternal","@isActive"],[[28,[37,11],["components.hashicorp-consul.side-nav.services"],null],[28,[37,20],["dc.services",[30,8,["Name"]]],[["params"],[[28,[37,21],null,[["peer"],[[27]]]]]]],false,[28,[37,37],["dc.services",[30,8,["Name"]]],null]]],null],[1,"\\n"]],[]],null],[41,[28,[37,35],["read nodes"],null],[[[1," "],[8,[30,15,["Link"]],null,[["@text","@href","@isHrefExternal","@isActive"],[[28,[37,11],["components.hashicorp-consul.side-nav.nodes"],null],[28,[37,20],["dc.nodes",[30,8,["Name"]]],[["params"],[[28,[37,21],null,[["peer"],[[27]]]]]]],false,[28,[37,37],["dc.nodes",[30,8,["Name"]]],null]]],null],[1,"\\n"]],[]],null],[41,[28,[37,35],["read kv"],null],[[[1," "],[8,[30,15,["Link"]],null,[["@text","@href","@isHrefExternal","@isActive"],[[28,[37,11],["components.hashicorp-consul.side-nav.kv"],null],[28,[37,20],["dc.kv",[30,8,["Name"]]],[["params"],[[28,[37,21],null,[["peer"],[[27]]]]]]],false,[28,[37,37],["dc.kv",[30,8,["Name"]]],null]]],null],[1,"\\n"]],[]],null],[41,[28,[37,35],["read intentions"],null],[[[1," "],[8,[30,15,["Link"]],null,[["@text","@href","@isHrefExternal","@isActive"],[[28,[37,11],["components.hashicorp-consul.side-nav.intentions"],null],[28,[37,20],["dc.intentions",[30,8,["Name"]]],[["params"],[[28,[37,21],null,[["peer"],[[27]]]]]]],false,[28,[37,37],["dc.intentions",[30,8,["Name"]]],null]]],null],[1,"\\n"]],[]],null],[1,"\\n "],[8,[39,38],null,[["@dc","@partition","@nspace","@list"],[[30,8],[30,9],[30,10],[30,15]]],null],[1,"\\n "],[8,[39,39],null,[["@dc","@partition","@nspace","@list"],[[30,8],[30,9],[30,10],[30,15]]],null],[1,"\\n "]],[15]]]]],[1,"\\n "]],[]],[[[1,"\\n "],[10,"footer"],[14,"role","contentinfo"],[12],[1,"\\n "],[8,[39,40],[[24,0,"hds-side-nav-hide-when-minimized"]],[["@size","@color"],["100","disabled"]],[["default"],[[[[1,"\\n "],[1,[28,[35,11],["components.hashicorp-consul.side-nav.footer"],[["version"],[[30,0,["consulVersion"]]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[2,[28,[37,25],["\x3c!-- ",[28,[37,24],["CONSUL_GIT_SHA"],null],"--\x3e"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]],[[[1,"\\n "],[18,16,[[28,[37,21],null,[["login"],[[52,[30,0,["tokenSelector"]],[30,0,["tokenSelector"]],[28,[37,21],null,[["open","close"],[[27],[27]]]]]]]]]],[1,"\\n "]],[]]]]]],["&attrs","app","flash","status","type","T","dd","@dc","@partition","@nspace","@onchange","selector","SNL","@dcs","SNL","&default"],false,["app","each","-track-array","flashMessages","sub","if","let","lowercase","hds/toast","eq","capitalize","t","or","consul/token/notifications","consul/intention/notifications","consul/role/notifications","consul/policy/notifications","hds/side-nav","hds/side-nav/header","hds/side-nav/header/home-link","href-to","hash","hds/dropdown","debug/navigation","env","concat","consul/token/selector","ref","hds/side-nav/list","consul/hcp/home","consul/datacenter/selector","consul/partition/selector","action","mut","consul/nspace/selector","can","array","is-href","consul/acl/selector","consul/peer/selector","hds/text/display","yield"]]',moduleName:"consul-ui/components/hashicorp-consul/index.hbs",isStrictMode:!1}) +let f=(i=(0,r.inject)("flashMessages"),o=(0,r.inject)("env"),a=class extends l.default{constructor(){super(...arguments),c(this,"flashMessages",u,this),c(this,"env",s,this)}get consulVersion(){const e=["","oss"].includes(this.env.var("CONSUL_BINARY_TYPE"))?"":"+ent" +return`${this.env.var("CONSUL_VERSION")}${e}`}},u=d(a.prototype,"flashMessages",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),s=d(a.prototype,"env",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),a) +e.default=f,(0,t.setComponentTemplate)(p,f)})),define("consul-ui/components/hds/accordion/index",["exports","@hashicorp/design-system-components/components/hds/accordion/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/accordion/item/button",["exports","@hashicorp/design-system-components/components/hds/accordion/item/button"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/accordion/item/index",["exports","@hashicorp/design-system-components/components/hds/accordion/item/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/alert/description",["exports","@hashicorp/design-system-components/components/hds/alert/description"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/alert/index",["exports","@hashicorp/design-system-components/components/hds/alert/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/alert/title",["exports","@hashicorp/design-system-components/components/hds/alert/title"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/app-footer/copyright",["exports","@hashicorp/design-system-components/components/hds/app-footer/copyright"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/app-footer/index",["exports","@hashicorp/design-system-components/components/hds/app-footer/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/app-footer/item",["exports","@hashicorp/design-system-components/components/hds/app-footer/item"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/app-footer/legal-links",["exports","@hashicorp/design-system-components/components/hds/app-footer/legal-links"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/app-footer/link",["exports","@hashicorp/design-system-components/components/hds/app-footer/link"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/app-footer/status-link",["exports","@hashicorp/design-system-components/components/hds/app-footer/status-link"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/app-frame/index",["exports","@hashicorp/design-system-components/components/hds/app-frame/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/app-frame/parts/footer",["exports","@hashicorp/design-system-components/components/hds/app-frame/parts/footer"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/app-frame/parts/header",["exports","@hashicorp/design-system-components/components/hds/app-frame/parts/header"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/app-frame/parts/main",["exports","@hashicorp/design-system-components/components/hds/app-frame/parts/main"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/app-frame/parts/modals",["exports","@hashicorp/design-system-components/components/hds/app-frame/parts/modals"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/app-frame/parts/sidebar",["exports","@hashicorp/design-system-components/components/hds/app-frame/parts/sidebar"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/application-state/body",["exports","@hashicorp/design-system-components/components/hds/application-state/body"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/application-state/footer",["exports","@hashicorp/design-system-components/components/hds/application-state/footer"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/application-state/header",["exports","@hashicorp/design-system-components/components/hds/application-state/header"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/application-state/index",["exports","@hashicorp/design-system-components/components/hds/application-state/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/avatar/index",["exports","@hashicorp/design-system-components/components/hds/avatar/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/badge-count/index",["exports","@hashicorp/design-system-components/components/hds/badge-count/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/badge/index",["exports","@hashicorp/design-system-components/components/hds/badge/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/breadcrumb/index",["exports","@hashicorp/design-system-components/components/hds/breadcrumb/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/breadcrumb/item",["exports","@hashicorp/design-system-components/components/hds/breadcrumb/item"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/breadcrumb/truncation",["exports","@hashicorp/design-system-components/components/hds/breadcrumb/truncation"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/button-set/index",["exports","@hashicorp/design-system-components/components/hds/button-set/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})) +define("consul-ui/components/hds/button/index",["exports","@hashicorp/design-system-components/components/hds/button/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/card/container",["exports","@hashicorp/design-system-components/components/hds/card/container"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/copy/button/index",["exports","@hashicorp/design-system-components/components/hds/copy/button/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/copy/snippet/index",["exports","@hashicorp/design-system-components/components/hds/copy/snippet/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/disclosure-primitive/index",["exports","@hashicorp/design-system-components/components/hds/disclosure-primitive/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/dismiss-button/index",["exports","@hashicorp/design-system-components/components/hds/dismiss-button/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/dropdown/footer",["exports","@hashicorp/design-system-components/components/hds/dropdown/footer"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/dropdown/header",["exports","@hashicorp/design-system-components/components/hds/dropdown/header"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/dropdown/index",["exports","@hashicorp/design-system-components/components/hds/dropdown/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/dropdown/list-item/checkbox",["exports","@hashicorp/design-system-components/components/hds/dropdown/list-item/checkbox"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/dropdown/list-item/checkmark",["exports","@hashicorp/design-system-components/components/hds/dropdown/list-item/checkmark"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/dropdown/list-item/copy-item",["exports","@hashicorp/design-system-components/components/hds/dropdown/list-item/copy-item"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/dropdown/list-item/description",["exports","@hashicorp/design-system-components/components/hds/dropdown/list-item/description"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/dropdown/list-item/generic",["exports","@hashicorp/design-system-components/components/hds/dropdown/list-item/generic"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/dropdown/list-item/interactive",["exports","@hashicorp/design-system-components/components/hds/dropdown/list-item/interactive"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/dropdown/list-item/radio",["exports","@hashicorp/design-system-components/components/hds/dropdown/list-item/radio"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/dropdown/list-item/separator",["exports","@hashicorp/design-system-components/components/hds/dropdown/list-item/separator"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/dropdown/list-item/title",["exports","@hashicorp/design-system-components/components/hds/dropdown/list-item/title"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/dropdown/toggle/button",["exports","@hashicorp/design-system-components/components/hds/dropdown/toggle/button"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/dropdown/toggle/chevron",["exports","@hashicorp/design-system-components/components/hds/dropdown/toggle/chevron"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/dropdown/toggle/icon",["exports","@hashicorp/design-system-components/components/hds/dropdown/toggle/icon"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/flyout/body",["exports","@hashicorp/design-system-components/components/hds/flyout/body"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/flyout/description",["exports","@hashicorp/design-system-components/components/hds/flyout/description"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/flyout/footer",["exports","@hashicorp/design-system-components/components/hds/flyout/footer"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/flyout/header",["exports","@hashicorp/design-system-components/components/hds/flyout/header"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/flyout/index",["exports","@hashicorp/design-system-components/components/hds/flyout/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/checkbox/base",["exports","@hashicorp/design-system-components/components/hds/form/checkbox/base"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/checkbox/field",["exports","@hashicorp/design-system-components/components/hds/form/checkbox/field"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/checkbox/group",["exports","@hashicorp/design-system-components/components/hds/form/checkbox/group"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/error/index",["exports","@hashicorp/design-system-components/components/hds/form/error/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})) +define("consul-ui/components/hds/form/error/message",["exports","@hashicorp/design-system-components/components/hds/form/error/message"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/field/index",["exports","@hashicorp/design-system-components/components/hds/form/field/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/fieldset/index",["exports","@hashicorp/design-system-components/components/hds/form/fieldset/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/file-input/base",["exports","@hashicorp/design-system-components/components/hds/form/file-input/base"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/file-input/field",["exports","@hashicorp/design-system-components/components/hds/form/file-input/field"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/helper-text/index",["exports","@hashicorp/design-system-components/components/hds/form/helper-text/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/indicator/index",["exports","@hashicorp/design-system-components/components/hds/form/indicator/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/label/index",["exports","@hashicorp/design-system-components/components/hds/form/label/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/legend/index",["exports","@hashicorp/design-system-components/components/hds/form/legend/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/masked-input/base",["exports","@hashicorp/design-system-components/components/hds/form/masked-input/base"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/masked-input/field",["exports","@hashicorp/design-system-components/components/hds/form/masked-input/field"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/radio-card/description",["exports","@hashicorp/design-system-components/components/hds/form/radio-card/description"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/radio-card/group",["exports","@hashicorp/design-system-components/components/hds/form/radio-card/group"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/radio-card/index",["exports","@hashicorp/design-system-components/components/hds/form/radio-card/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/radio-card/label",["exports","@hashicorp/design-system-components/components/hds/form/radio-card/label"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/radio/base",["exports","@hashicorp/design-system-components/components/hds/form/radio/base"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/radio/field",["exports","@hashicorp/design-system-components/components/hds/form/radio/field"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/radio/group",["exports","@hashicorp/design-system-components/components/hds/form/radio/group"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/select/base",["exports","@hashicorp/design-system-components/components/hds/form/select/base"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/select/field",["exports","@hashicorp/design-system-components/components/hds/form/select/field"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/text-input/base",["exports","@hashicorp/design-system-components/components/hds/form/text-input/base"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/text-input/field",["exports","@hashicorp/design-system-components/components/hds/form/text-input/field"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/textarea/base",["exports","@hashicorp/design-system-components/components/hds/form/textarea/base"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/textarea/field",["exports","@hashicorp/design-system-components/components/hds/form/textarea/field"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/toggle/base",["exports","@hashicorp/design-system-components/components/hds/form/toggle/base"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/toggle/field",["exports","@hashicorp/design-system-components/components/hds/form/toggle/field"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/toggle/group",["exports","@hashicorp/design-system-components/components/hds/form/toggle/group"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/visibility-toggle/index",["exports","@hashicorp/design-system-components/components/hds/form/visibility-toggle/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/icon-tile/index",["exports","@hashicorp/design-system-components/components/hds/icon-tile/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/interactive/index",["exports","@hashicorp/design-system-components/components/hds/interactive/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})) +define("consul-ui/components/hds/link/inline",["exports","@hashicorp/design-system-components/components/hds/link/inline"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/link/standalone",["exports","@hashicorp/design-system-components/components/hds/link/standalone"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/menu-primitive/index",["exports","@hashicorp/design-system-components/components/hds/menu-primitive/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/modal/body",["exports","@hashicorp/design-system-components/components/hds/modal/body"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/modal/footer",["exports","@hashicorp/design-system-components/components/hds/modal/footer"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/modal/header",["exports","@hashicorp/design-system-components/components/hds/modal/header"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/modal/index",["exports","@hashicorp/design-system-components/components/hds/modal/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/page-header/actions",["exports","@hashicorp/design-system-components/components/hds/page-header/actions"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/page-header/badges",["exports","@hashicorp/design-system-components/components/hds/page-header/badges"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/page-header/description",["exports","@hashicorp/design-system-components/components/hds/page-header/description"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/page-header/index",["exports","@hashicorp/design-system-components/components/hds/page-header/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/page-header/subtitle",["exports","@hashicorp/design-system-components/components/hds/page-header/subtitle"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/page-header/title",["exports","@hashicorp/design-system-components/components/hds/page-header/title"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/pagination/compact/index",["exports","@hashicorp/design-system-components/components/hds/pagination/compact/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/pagination/info",["exports","@hashicorp/design-system-components/components/hds/pagination/info"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/pagination/nav/arrow",["exports","@hashicorp/design-system-components/components/hds/pagination/nav/arrow"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/pagination/nav/ellipsis",["exports","@hashicorp/design-system-components/components/hds/pagination/nav/ellipsis"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/pagination/nav/number",["exports","@hashicorp/design-system-components/components/hds/pagination/nav/number"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/pagination/numbered/index",["exports","@hashicorp/design-system-components/components/hds/pagination/numbered/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/pagination/size-selector",["exports","@hashicorp/design-system-components/components/hds/pagination/size-selector"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/reveal/index",["exports","@hashicorp/design-system-components/components/hds/reveal/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/reveal/toggle/button",["exports","@hashicorp/design-system-components/components/hds/reveal/toggle/button"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/segmented-group/index",["exports","@hashicorp/design-system-components/components/hds/segmented-group/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/separator/index",["exports","@hashicorp/design-system-components/components/hds/separator/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/side-nav/base",["exports","@hashicorp/design-system-components/components/hds/side-nav/base"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/side-nav/header/home-link",["exports","@hashicorp/design-system-components/components/hds/side-nav/header/home-link"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/side-nav/header/icon-button",["exports","@hashicorp/design-system-components/components/hds/side-nav/header/icon-button"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/side-nav/header/index",["exports","@hashicorp/design-system-components/components/hds/side-nav/header"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/side-nav/index",["exports","@hashicorp/design-system-components/components/hds/side-nav/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/side-nav/list/back-link",["exports","@hashicorp/design-system-components/components/hds/side-nav/list/back-link"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})) +define("consul-ui/components/hds/side-nav/list/index",["exports","@hashicorp/design-system-components/components/hds/side-nav/list/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/side-nav/list/item",["exports","@hashicorp/design-system-components/components/hds/side-nav/list/item"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/side-nav/list/link",["exports","@hashicorp/design-system-components/components/hds/side-nav/list/link"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/side-nav/list/title",["exports","@hashicorp/design-system-components/components/hds/side-nav/list/title"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/side-nav/portal/index",["exports","@hashicorp/design-system-components/components/hds/side-nav/portal/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/side-nav/portal/target",["exports","@hashicorp/design-system-components/components/hds/side-nav/portal/target"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/side-nav/toggle-button",["exports","@hashicorp/design-system-components/components/hds/side-nav/toggle-button"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/stepper/step/indicator",["exports","@hashicorp/design-system-components/components/hds/stepper/step/indicator"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/stepper/task/indicator",["exports","@hashicorp/design-system-components/components/hds/stepper/task/indicator"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/table/index",["exports","@hashicorp/design-system-components/components/hds/table/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/table/td",["exports","@hashicorp/design-system-components/components/hds/table/td"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/table/th-sort",["exports","@hashicorp/design-system-components/components/hds/table/th-sort"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/table/th",["exports","@hashicorp/design-system-components/components/hds/table/th"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/table/tr",["exports","@hashicorp/design-system-components/components/hds/table/tr"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/tabs/index",["exports","@hashicorp/design-system-components/components/hds/tabs/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/tabs/panel",["exports","@hashicorp/design-system-components/components/hds/tabs/panel"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/tabs/tab",["exports","@hashicorp/design-system-components/components/hds/tabs/tab"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/tag/index",["exports","@hashicorp/design-system-components/components/hds/tag/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/text/body",["exports","@hashicorp/design-system-components/components/hds/text/body"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/text/code",["exports","@hashicorp/design-system-components/components/hds/text/code"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/text/display",["exports","@hashicorp/design-system-components/components/hds/text/display"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/text/index",["exports","@hashicorp/design-system-components/components/hds/text/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/toast/index",["exports","@hashicorp/design-system-components/components/hds/toast/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/tooltip-button/index",["exports","@hashicorp/design-system-components/components/hds/tooltip-button/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/yield/index",["exports","@hashicorp/design-system-components/components/hds/yield/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/informed-action/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"OpUoOs2J",block:'[[[1,"\\n"],[11,0],[24,0,"informed-action"],[17,1],[12],[1,"\\n "],[10,0],[12],[1,"\\n "],[10,"header"],[12],[1,"\\n "],[18,2,null],[1,"\\n "],[13],[1,"\\n "],[18,3,null],[1,"\\n "],[13],[1,"\\n "],[10,"ul"],[12],[1,"\\n "],[18,4,[[28,[37,1],null,[["Action"],[[50,"anonymous",0,null,[["tagName"],["li"]]]]]]]],[1,"\\n "],[13],[1,"\\n"],[13]],["&attrs","&header","&body","&actions"],false,["yield","hash","component"]]',moduleName:"consul-ui/components/informed-action/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/ivy-codemirror",["exports","ivy-codemirror/components/ivy-codemirror"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/jwt-source/index",["exports","@glimmer/component","@ember/service","consul-ui/utils/dom/event-source"],(function(e,t,n,l){var r,i,o,a,u +function s(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function c(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let d=(r=(0,n.inject)("repository/oidc-provider"),i=(0,n.inject)("dom"),o=class extends t.default{constructor(){super(...arguments),s(this,"repo",a,this),s(this,"dom",u,this),this.source&&this.source.close(),this._listeners=this.dom.listeners(),this.source=(0,l.fromPromise)(this.repo.findCodeByURL(this.args.src)),this._listeners.add(this.source,{message:e=>this.onchange(e),error:e=>this.onerror(e)})}onchange(e){"function"==typeof this.args.onchange&&this.args.onchange(...arguments)}onerror(e){"function"==typeof this.args.onerror&&this.args.onerror(...arguments)}willDestroy(){super.willDestroy(...arguments),this.source&&this.source.close(),this.repo.close(),this._listeners.remove()}},a=c(o.prototype,"repo",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),u=c(o.prototype,"dom",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),o) +e.default=d})),define("consul-ui/components/list-collection/index",["exports","@ember/component","@ember/template-factory","@ember/service","@ember/object","ember-collection/components/ember-collection","ember-collection/layouts/percentage-columns","block-slots"],(function(e,t,n,l,r,i,o,a){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const u=(0,n.createTemplateFactory)({id:"c8hhQNDG",block:'[[[1,"\\n"],[11,0],[16,0,[29,["list-collection list-collection-scroll-",[36,0]]]],[23,5,[28,[37,1],["height:",[33,2,["height"]],"px"],null]],[16,1,[36,3]],[17,1],[12],[1,"\\n"],[18,7,null],[1,"\\n"],[41,[28,[37,6],[[33,0],"virtual"],null],[[[1," "],[1,[28,[35,7],["resize",[28,[37,8],[[30,0],"resize"],null]],null]],[1,"\\n "],[8,[39,9],null,[["@tagName","@content-size","@scroll-left","@scroll-top","@scrollChange","@clientSizeChange"],["ul",[99,10,["@content-size"]],[99,11,["@scroll-left"]],[99,12,["@scroll-top"]],[28,[37,8],[[30,0],"scrollChange"],null],[28,[37,8],[[30,0],"clientSizeChange"],null]]],[["default"],[[[[1,"\\n "],[10,"li"],[12],[13],[42,[28,[37,14],[[28,[37,14],[[33,15]],null]],null],null,[[[10,"li"],[15,"onclick",[28,[37,8],[[30,0],"click"],null]],[22,5,[30,2,["style"]]],[15,0,[52,[33,16],[52,[28,[37,17],[[33,16]],[["item"],[[30,2,["item"]]]]],"linkable"]]],[12],[1,"\\n "],[8,[39,18],null,[["@name"],["header"]],[["default"],[[[[10,0],[14,0,"header"],[12],[18,7,[[30,2,["item"]],[30,2,["index"]]]],[13]],[]]]]],[1,"\\n "],[8,[39,18],null,[["@name"],["details"]],[["default"],[[[[10,0],[14,0,"detail"],[12],[18,7,[[30,2,["item"]],[30,2,["index"]]]],[13]],[]]]]],[1,"\\n "],[8,[39,18],null,[["@name","@params"],["actions",[28,[37,19],[[50,"more-popover-menu",0,null,[["expanded","onchange"],[[52,[28,[37,6],[[33,21],[30,2,["index"]]],null],true,false],[28,[37,8],[[30,0],"change",[30,2,["index"]]],null]]]]],null]]],[["default"],[[[[1,"\\n "],[10,0],[14,0,"actions"],[12],[1,"\\n "],[18,7,[[30,2,["item"]],[30,2,["index"]]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[13]],[2]],null]],[]]]]],[1,"\\n"]],[]],[[[44,[[52,[28,[37,23],[[33,24],[28,[37,25],[[30,0,["expand"]]],null]],null],[28,[37,26],[0,[33,24],[33,27]],null],[33,27]]],[[[1," "],[10,"ul"],[12],[1,"\\n "],[10,"li"],[14,5,"display: none;"],[12],[13],[42,[28,[37,14],[[28,[37,14],[[30,3]],null]],null],null,[[[10,"li"],[15,"onclick",[28,[37,8],[[30,0],"click"],null]],[15,0,[52,[28,[37,25],[[33,16]],null],"linkable",[52,[28,[37,17],[[33,16]],[["item"],[[33,28,["item"]]]]],"linkable"]]],[12],[1,"\\n "],[8,[39,18],null,[["@name"],["header"]],[["default"],[[[[10,0],[14,0,"header"],[12],[18,7,[[30,4],[30,5]]],[13]],[]]]]],[1,"\\n "],[8,[39,18],null,[["@name"],["details"]],[["default"],[[[[10,0],[14,0,"detail"],[12],[18,7,[[30,4],[30,5]]],[13]],[]]]]],[1,"\\n "],[8,[39,18],null,[["@name","@params"],["actions",[28,[37,19],[[50,"more-popover-menu",0,null,[["onchange"],[[28,[37,8],[[30,0],"change",[30,5]],null]]]]],null]]],[["default"],[[[[1,"\\n "],[10,0],[14,0,"actions"],[12],[1,"\\n "],[18,7,[[30,4],[30,5]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[13]],[4,5]],null],[13],[1,"\\n"],[41,[28,[37,23],[[33,24],[28,[37,29],[[33,27,["length"]],[33,24]],null]],null],[[[44,[[28,[37,30],[[30,3,["length"]],[33,27,["length"]]],null]],[[[1," "],[10,"button"],[15,0,[52,[30,6],"closed"]],[15,"onclick",[28,[37,8],[[30,0],[28,[37,31],[[30,0,["expand"]]],null],[30,6]],null]],[14,4,"button"],[12],[1,"\\n"],[41,[30,6],[[[1," View "],[1,[28,[35,32],[[33,27,["length"]],[30,3,["length"]]],null]],[1," more\\n"]],[]],[[[1," View less\\n"]],[]]],[1," "],[13],[1,"\\n"]],[6]]]],[]],null]],[3]]],[1,"\\n"]],[]]],[13]],["&attrs","cell","slice","item","index","more","&default"],false,["scroll","concat","style","guid","yield","if","eq","on-window","action","ember-native-scrollable","_contentSize","_scrollLeft","_scrollTop","each","-track-array","_cells","linkable","is","yield-slot","block-params","component","checked","let","and","partial","not","slice","items","cell","gt","not-eq","mut","sub"]]',moduleName:"consul-ui/components/list-collection/index.hbs",isStrictMode:!1}),s=o.default.prototype.formatItemStyle +var c=(0,t.setComponentTemplate)(u,i.default.extend(a.default,{dom:(0,l.inject)("dom"),tagName:"",height:500,cellHeight:70,checked:null,scroll:"virtual",init:function(){this._super(...arguments),this.columns=[100],this.guid=this.dom.guid(this)},didInsertElement:function(){this._super(...arguments),this.$element=this.dom.element(`#${this.guid}`),"virtual"===this.scroll&&this.actions.resize.apply(this,[{target:this.dom.viewport()}])},didReceiveAttrs:function(){this._super(...arguments),this._cellLayout=this["cell-layout"]=new o.default((0,r.get)(this,"items.length"),this.columns,this.cellHeight) +const e=this +this["cell-layout"].formatItemStyle=function(t){let n=s.apply(this,arguments) +return e.checked===t&&(n=`${n};z-index: 1`),n}},style:(0,r.computed)("height",(function(){return"virtual"!==this.scroll?{}:{height:this.height}})),actions:{resize:function(e){const t=this.dom.element('footer[role="contentinfo"]') +if(t){const n=1,l=this.$element.getBoundingClientRect().top+t.clientHeight+n,r=e.target.innerHeight-l +this.set("height",Math.max(0,r)),this.updateItems(),this.updateScrollPosition()}},click:function(e){return this.dom.clickFirstAnchor(e,".list-collection > ul > li")},change:function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} +if(t.target.checked&&e!==this.checked){(0,r.set)(this,"checked",parseInt(e)),this.$row=this.dom.closest("li",t.target),this.$row.style.zIndex=1 +const n=this.dom.sibling(t.target,"div") +n.getBoundingClientRect().top+n.clientHeight>this.dom.element('footer[role="contentinfo"]').getBoundingClientRect().top?n.classList.add("above"):n.classList.remove("above")}else{this.dom.sibling(t.target,"div").classList.remove("above"),(0,r.set)(this,"checked",null),this.$row.style.zIndex=null}}}})) +e.default=c})),define("consul-ui/components/maybe-in-element",["exports","ember-maybe-in-element/components/maybe-in-element"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})) +define("consul-ui/components/menu-panel/index",["exports","@ember/component","@ember/template-factory","@ember/service","@ember/runloop","@ember/object","block-slots"],(function(e,t,n,l,r,i,o){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const a=(0,n.createTemplateFactory)({id:"AUkkhvKM",block:'[[[1,"\\n"],[18,3,null],[1,"\\n"],[44,[[28,[37,2],null,[["change"],[[28,[37,3],[[30,0],"change"],null]]]]],[[[11,0],[16,0,[28,[37,4],[[28,[37,5],["menu-panel"],null],[28,[37,5],["menu-panel-deprecated"],null],[28,[37,5],[[33,6]],null],[28,[37,5],[[33,7],"confirmation"],null]],null]],[4,[38,8],[[28,[37,3],[[30,0],"connect"],null]],null],[12],[1,"\\n "],[8,[39,9],null,[["@name"],["controls"]],[["default"],[[[[1,"\\n "],[18,3,[[30,1]]],[1,"\\n "]],[]]]]],[1,"\\n"],[6,[39,9],null,[["name"],["header"]],[["default","else"],[[[[1," "],[10,0],[12],[1,"\\n "],[18,3,[[30,1]]],[1,"\\n "],[13],[1,"\\n"]],[]],[[],[]]]]],[1," "],[11,"ul"],[24,"role","menu"],[17,2],[12],[1,"\\n "],[8,[39,9],null,[["@name"],["menu"]],[["default"],[[[[1,"\\n "],[18,3,[[30,1]]],[1,"\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n"],[13],[1,"\\n"]],[1]]]],["api","&attrs","&default"],false,["yield","let","hash","action","class-map","array","position","isConfirmation","did-insert","yield-slot"]]',moduleName:"consul-ui/components/menu-panel/index.hbs",isStrictMode:!1}) +var u=(0,t.setComponentTemplate)(a,t.default.extend(o.default,{tagName:"",dom:(0,l.inject)("dom"),isConfirmation:!1,actions:{connect:function(e){(0,r.next)((()=>{if(!this.isDestroyed){const t=this.dom.element('li:only-child > [role="menu"]:first-child',e);(0,i.set)(this,"isConfirmation",void 0!==t)}}))},change:function(e){const t=e.target.getAttribute("id"),n=this.dom.element(`[for='${t}']`),l=this.dom.element("[role=menu]",n.parentElement),r=this.dom.closest(".menu-panel",l) +if(e.target.checked){l.style.display="block" +const e=l.offsetHeight+2 +r.style.maxHeight=r.style.minHeight=`${e}px`}else l.style.display=null,r.style.maxHeight=null,r.style.minHeight="0"}}})) +e.default=u})),define("consul-ui/components/menu/action/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"JOnhu+Ze",block:'[[[1,"\\n"],[8,[39,0],[[24,"role","menuitem"],[17,1],[4,[38,1],["click",[52,[30,2],[30,4,["close"]],[28,[37,3],null,null]]],null]],[["@href","@external"],[[30,2],[30,3]]],[["default"],[[[[1,"\\n "],[18,5,null],[1,"\\n"]],[]]]]],[1,"\\n"]],["&attrs","@href","@external","@disclosure","&default"],false,["action","on","if","noop","yield"]]',moduleName:"consul-ui/components/menu/action/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/menu/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"u8Z6a2DI",block:'[[[1,"\\n"],[11,"ul"],[24,"role","menu"],[23,5,[28,[37,0],[[28,[37,1],["height",[52,[28,[37,3],[[30,1],[28,[37,4],[[30,1,["type"]],"native-scroll"],null]],null],[30,1,["totalHeight"]]],"px"],null],[28,[37,1],["--paged-start",[52,[28,[37,3],[[30,1],[28,[37,4],[[30,1,["type"]],"native-scroll"],null]],null],[30,1,["startHeight"]]],"px"],null]],null]],[4,[38,5],[[28,[37,6],[[30,1,["pane"]]],null]],null],[4,[38,7],null,[["onclose","openEvent"],[[28,[37,8],[[30,2],[30,3,["close"]]],null],[28,[37,8],[[30,4],[30,3,["event"]]],null]]]],[12],[1,"\\n "],[18,5,[[28,[37,10],null,[["Action","Item","Separator","items"],[[50,"menu/action",0,null,[["disclosure"],[[30,3]]]],[50,"menu/item",0,null,null],[50,"menu/separator",0,null,null],[30,1,["items"]]]]]]],[1,"\\n"],[13]],["@pager","@onclose","@disclosure","@event","&default"],false,["style-map","array","if","and","not-eq","did-insert","optional","aria-menu","or","yield","hash","component"]]',moduleName:"consul-ui/components/menu/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/menu/item/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"5LgsA0nf",block:'[[[1,"\\n"],[11,"li"],[24,"role","none"],[17,1],[12],[1,"\\n "],[18,2,null],[1,"\\n"],[13],[1,"\\n\\n"]],["&attrs","&default"],false,["yield"]]',moduleName:"consul-ui/components/menu/item/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/menu/separator/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"yTrI1HMJ",block:'[[[1,"\\n"],[11,"li"],[24,"role","separator"],[17,1],[12],[18,2,null],[13],[1,"\\n"]],["&attrs","&default"],false,["yield"]]',moduleName:"consul-ui/components/menu/separator/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/modal-dialog/index",["exports","@ember/component","@ember/template-factory","@ember/object","block-slots","a11y-dialog","@ember/runloop"],(function(e,t,n,l,r,i,o){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const a=(0,n.createTemplateFactory)({id:"OjyTBU44",block:'[[[1,"\\n"],[44,[[28,[37,1],null,[["labelledby"],[[28,[37,2],null,null]]]]],[[[1," "],[8,[39,3],null,[["@target"],["modal"]],[["default"],[[[[1,"\\n "],[18,4,null],[1,"\\n "],[11,0],[24,0,"modal-dialog"],[24,"aria-hidden","true"],[17,2],[4,[38,5],[[28,[37,6],[[30,0],"connect"],null]],null],[4,[38,7],[[28,[37,6],[[30,0],"disconnect"],null]],null],[12],[1,"\\n "],[10,0],[14,"tabindex","-1"],[14,"data-a11y-dialog-hide",""],[12],[13],[1,"\\n "],[10,0],[14,0,"modal-dialog-modal"],[14,"role","dialog"],[15,"aria-label",[30,3,["label"]]],[12],[1,"\\n "],[10,0],[14,"role","document"],[12],[1,"\\n "],[10,"header"],[14,0,"modal-dialog-header"],[12],[1,"\\n "],[8,[39,8],[[24,"data-a11y-dialog-hide",""]],[["@text","@color","@icon","@size","@isIconOnly"],["Close dialog","secondary","x","small",true]],null],[1,"\\n "],[8,[39,9],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[18,4,[[28,[37,1],null,[["open","close","opened","aria"],[[28,[37,6],[[30,0],"open"],null],[28,[37,6],[[30,0],"close"],null],[30,0,["isOpen"]],[30,1]]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[10,0],[14,0,"modal-dialog-body"],[12],[1,"\\n "],[8,[39,9],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[18,4,[[28,[37,1],null,[["open","close","opened","aria"],[[28,[37,6],[[30,0],"open"],null],[28,[37,6],[[30,0],"close"],null],[30,0,["isOpen"]],[30,1]]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[10,"footer"],[14,0,"modal-dialog-footer"],[12],[1,"\\n "],[8,[39,9],null,[["@name","@params"],["actions",[28,[37,10],[[28,[37,6],[[30,0],"close"],null]],null]]],[["default"],[[[[1,"\\n "],[18,4,[[28,[37,1],null,[["open","close","opened","aria"],[[28,[37,6],[[30,0],"open"],null],[28,[37,6],[[30,0],"close"],null],[30,0,["isOpen"]],[30,1]]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[1]]]],["aria","&attrs","@aria","&default"],false,["let","hash","unique-id","portal","yield","did-insert","action","will-destroy","hds/button","yield-slot","block-params"]]',moduleName:"consul-ui/components/modal-dialog/index.hbs",isStrictMode:!1}) +var u=(0,t.setComponentTemplate)(a,t.default.extend(r.default,{tagName:"",onclose:function(){},onopen:function(){},isOpen:!1,actions:{connect:function(e){this.dialog=new i.default(e),this.dialog.on("hide",(()=>{(0,o.schedule)("afterRender",(e=>(0,l.set)(this,"isOpen",!1))),this.onclose({target:e})})),this.dialog.on("show",(()=>{(0,l.set)(this,"isOpen",!0),this.onopen({target:e})})),this.open&&this.actions.open.apply(this,[])},disconnect:function(e){this.dialog.destroy()},open:function(){this.dialog.show()},close:function(){this.dialog.hide()}}})) +e.default=u})),define("consul-ui/components/modal-layer/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"zyQSzvZS",block:'[[[1,"\\n"],[11,0],[24,0,"modal-layer"],[17,1],[12],[1,"\\n "],[8,[39,0],null,[["@name","@multiple"],["modal",true]],null],[1,"\\n"],[13],[1,"\\n"]],["&attrs"],false,["portal-target"]]',moduleName:"consul-ui/components/modal-layer/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/more-popover-menu/index",["exports","@ember/component","@ember/template-factory"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const l=(0,n.createTemplateFactory)({id:"aLK3TSIx",block:'[[[1,"\\n"],[11,0],[24,0,"more-popover-menu"],[17,1],[12],[1,"\\n "],[8,[39,0],null,[["@expanded","@onchange","@keyboardAccess"],[[99,1,["@expanded"]],[28,[37,2],[[30,0],[33,3]],null],false]],[["default"],[[[[1,"\\n "],[8,[39,4],null,[["@name"],["trigger"]],[["default"],[[[[1,"\\n More\\n "]],[]]]]],[1,"\\n "],[8,[39,4],null,[["@name"],["menu"]],[["default"],[[[[1,"\\n "],[18,4,[[30,2,["MenuItem"]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[2,3]]]]],[1,"\\n"],[13],[1,"\\n"]],["&attrs","components","api","&default"],false,["popover-menu","expanded","action","onchange","block-slot","yield"]]',moduleName:"consul-ui/components/more-popover-menu/index.hbs",isStrictMode:!1}) +var r=(0,t.setComponentTemplate)(l,t.default.extend({tagName:""})) +e.default=r})),define("consul-ui/components/nav-selector/generic",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"J8OHquCr",block:'[[[1,"\\n"],[18,1,null]],["&default"],false,["yield"]]',moduleName:"consul-ui/components/nav-selector/generic.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/nav-selector/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@ember/object","@glimmer/tracking"],(function(e,t,n,l,r,i){var o,a +function u(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const s=(0,n.createTemplateFactory)({id:"JCYQiQJP",block:'[[[1,"\\n"],[44,[[30,1]],[[[1," "],[8,[30,2,["Item"]],[[24,0,"consul-side-nav__selector"]],null,[["default"],[[[[1,"\\n "],[8,[39,1],[[24,0,"hds-side-nav__dropdown"],[17,3]],[["@listPosition","@width","@isInline"],["bottom-left","15.5rem",true]],[["default"],[[[[1,"\\n "],[8,[30,4,["ToggleButton"]],[[24,0,"consul-side-nav__selector-toggle"],[16,"disabled",[28,[37,2],[[30,5],true],null]]],[["@icon","@text"],[[30,6],[28,[37,3],[[30,7],[30,8]],null]]],null],[1,"\\n "],[8,[30,4,["Header"]],null,[["@hasDivider"],[true]],[["default"],[[[[1,"\\n "],[18,14,[[28,[37,5],null,[["Data"],[[50,"nav-selector/generic",0,null,null]]]]]],[1,"\\n"],[41,[30,9],[[[1," "],[10,0],[14,0,"consul-side-nav__selector-description"],[12],[1,"\\n "],[8,[39,8],null,[["@size","@color"],["100","faint"]],[["default"],[[[[1,[30,9]]],[]]]]],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1," "],[8,[39,9],[[16,"placeholder",[30,10]],[16,"aria-label",[30,10]],[4,[38,10],["input",[30,0,["onSearchInput"]]],null]],[["@type","@value"],["search",[30,0,["search"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n"],[41,[28,[37,2],[[30,0,["filteredItems","length"]],0],null],[[[1," "],[8,[30,4,["Description"]],null,[["@text"],["No results"]],null],[1,"\\n"]],[]],[[[42,[28,[37,12],[[28,[37,12],[[30,0,["filteredItems"]]],null]],null],null,[[[1," "],[18,14,[[28,[37,5],null,[["Dropdown","item"],[[30,4],[30,11]]]]]],[1,"\\n"]],[11]],null]],[]]],[41,[30,12],[[[1," "],[8,[30,4,["Footer"]],null,[["@hasDivider"],[true]],[["default"],[[[[1,"\\n "],[8,[39,13],null,[["@href","@isHrefExternal","@text","@iconPosition","@icon","@color"],[[30,12],false,[30,13],"trailing","arrow-right","secondary"]],null],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[1," "]],[4]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[2]]]],["@list","SNL","&attrs","DD","@disabled","@icon","@item","@key","@description","@placeholder","item","@footerLink","@footerLinkText","&default"],false,["let","hds/dropdown","eq","get","yield","hash","component","if","hds/text/body","hds/form/text-input/base","on","each","-track-array","hds/link/standalone"]]',moduleName:"consul-ui/components/nav-selector/index.hbs",isStrictMode:!1}) +let c=(o=class extends l.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="search",l=this,(n=a)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}get filteredItems(){const e=this.search.toLowerCase() +return e?this.args.items.filter((t=>t[this.args.key].toLowerCase().includes(e))):this.args.items}onSearchInput(e){this.search=e.target.value}},a=u(o.prototype,"search",[i.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return""}}),u(o.prototype,"onSearchInput",[r.action],Object.getOwnPropertyDescriptor(o.prototype,"onSearchInput"),o.prototype),o) +e.default=c,(0,t.setComponentTemplate)(s,c)})),define("consul-ui/components/navigation-narrator",["exports","ember-a11y-refocus/components/navigation-narrator"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/oidc-select/chart.xstate",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default={id:"oidc-select",initial:"idle",on:{RESET:[{target:"idle"}]},states:{idle:{on:{LOAD:[{target:"loading"}]}},loaded:{},loading:{on:{SUCCESS:[{target:"loaded"}]}}}}})),define("consul-ui/components/oidc-select/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@glimmer/tracking","consul-ui/components/oidc-select/chart.xstate"],(function(e,t,n,l,r,i){var o,a +Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const u=(0,n.createTemplateFactory)({id:"cSKoM+S3",block:'[[[1,"\\n"],[8,[39,0],null,[["@src"],[[99,1,["@src"]]]],[["default"],[[[[1,"\\n"],[44,[[28,[37,3],null,[["State","Guard","Action","dispatch","state"],[[30,1],[30,2],[30,3],[30,4],[30,5]]]]],[[[1,"\\n "],[11,0],[24,0,"oidc-select"],[17,7],[12],[1,"\\n "],[8,[30,1],null,[["@notMatches"],["idle"]],[["default"],[[[[1,"\\n "],[8,[39,4],null,[["@src","@onchange","@onerror"],[[28,[37,5],["/${partition}/${nspace}/${dc}/oidc/providers",[28,[37,3],null,[["partition","nspace","dc"],[[30,0,["partition"]],[30,8],[30,9]]]]],null],[28,[37,6],[[28,[37,7],[[30,0],[28,[37,8],[[30,0,["items"]]],null]],[["value"],["data"]]],[28,[37,9],[[30,4],"SUCCESS"],null]],null],[28,[37,6],[[28,[37,9],[[30,4],"RESET"],null],[30,10]],null]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[30,1],null,[["@matches"],["loaded"]],[["default"],[[[[1,"\\n "],[8,[39,7],[[24,0,"reset"],[4,[38,10],["click",[28,[37,6],[[28,[37,11],[[30,0],"partition",""],null],[28,[37,9],[[30,4],"RESET"],null]],null]],null]],null,[["default"],[[[[1,"\\n Choose different Partition\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,0],null,[["@src"],[[28,[37,0],["validate"],null]]],[["default"],[[[[1,"\\n "],[8,[39,12],null,[["@name","@label","@item","@validations","@placeholder","@oninput","@chart"],["partition","Admin Partition",[30,0],[28,[37,3],null,[["partition"],[[28,[37,13],[[28,[37,3],null,[["test","error"],["^[a-zA-Z0-9]([a-zA-Z0-9-]{0,62}[a-zA-Z0-9])?$","Name must be a valid DNS hostname."]]]],null]]]],"Enter your Partition",[28,[37,7],[[30,0],[28,[37,8],[[30,0,["partition"]]],null]],[["value"],["target.value"]]],[28,[37,3],null,[["state","dispatch"],[[30,15],[30,14]]]]]],null],[1,"\\n\\n"],[1," "],[8,[30,1],null,[["@matches"],["idle"]],[["default"],[[[[1,"\\n "],[8,[39,14],[[16,"disabled",[28,[37,15],[[28,[37,16],[[30,0,["partition","length"]],1],null],[28,[37,17],[[30,15],"error"],null]],null]],[24,4,"submit"],[4,[38,10],["click",[28,[37,9],[[30,4],"LOAD"],null]],null]],[["@text"],["Choose provider"]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "]],[11,12,13,14,15]]]]],[1,"\\n\\n "],[8,[30,1],null,[["@matches"],["loading"]],[["default"],[[[[1,"\\n "],[8,[39,18],[[24,"aria-label","Loading"]],null,null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[30,1],null,[["@matches"],["loaded"]],[["default"],[[[[1,"\\n"],[41,[28,[37,16],[[30,0,["items","length"]],3],null],[[[1,"\\n "],[10,"ul"],[12],[1,"\\n"],[42,[28,[37,21],[[28,[37,21],[[30,0,["items"]]],null]],null],null,[[[1," "],[10,"li"],[12],[1,"\\n "],[8,[39,7],[[16,0,[28,[37,22],[[30,16,["Kind"]],"-oidc-provider"],null]],[16,"disabled",[30,17]],[4,[38,10],["click",[28,[37,9],[[30,18],[30,16]],null]],null]],[["@type"],["button"]],[["default"],[[[[1,"\\n Continue with\\n "],[1,[28,[35,15],[[30,16,["DisplayName"]],[30,16,["Name"]]],null]],[41,[28,[37,23],[[30,16,["Namespace"]],"default"],null],[[[1,"\\n ("],[1,[30,16,["Namespace"]]],[1,")"]],[]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n"]],[16]],null],[1," "],[13],[1,"\\n\\n"]],[]],[[[1,"\\n"],[44,[[28,[37,15],[[30,0,["provider"]],[28,[37,24],[0,[30,0,["items"]]],null]],null]],[[[1,"\\n "],[8,[39,25],null,[["@label","@name","@item","@selected","@items","@onchange","@disabled"],["SSO Provider","provider",[30,0],[30,19],[30,0,["items"]],[28,[37,7],[[30,0],[28,[37,8],[[30,0,["provider"]]],null]],null],[30,17]]],[["option"],[[[[1,"\\n "],[10,1],[15,0,[28,[37,22],[[30,20,["item","Kind"]],"-oidc-provider"],null]],[12],[1,"\\n "],[1,[28,[35,15],[[30,20,["item","DisplayName"]],[30,20,["item","Name"]]],null]],[41,[28,[37,23],[[30,20,["item","Namespace"]],"default"],null],[[[1," ("],[1,[30,20,["item","Namespace"]]],[1,")"]],[]],null],[1,"\\n "],[13],[1,"\\n "]],[20]]]]],[1,"\\n\\n "],[8,[39,14],[[16,"disabled",[30,17]],[4,[38,10],["click",[28,[37,9],[[30,18],[30,19]],null]],null]],[["@color","@text"],["primary","Log in"]],null],[1,"\\n"]],[19]]]],[]]],[1," "]],[]]]]],[1,"\\n "],[13],[1,"\\n"]],[6]]]],[1,2,3,4,5]]]]],[1,"\\n"]],["State","Guard","ChartAction","dispatch","state","chart","&attrs","@nspace","@dc","@onerror","ignoredState","ignoredGuard","ignoredAction","formDispatch","state","item","@disabled","@onchange","item","option"],false,["state-chart","chart","let","hash","data-source","uri","queue","action","mut","fn","on","set","text-input","array","hds/button","or","lt","state-matches","progress","if","each","-track-array","concat","not-eq","object-at","option-input"]]',moduleName:"consul-ui/components/oidc-select/index.hbs",isStrictMode:!1}) +let s=(o=class extends l.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="partition",l=this,(n=a)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0}),this.chart=i.default,this.args.partition&&(this.partition=this.args.partition)}},c=o.prototype,d="partition",p=[r.tracked],f={configurable:!0,enumerable:!0,writable:!0,initializer:function(){return"default"}},h={},Object.keys(f).forEach((function(e){h[e]=f[e]})),h.enumerable=!!h.enumerable,h.configurable=!!h.configurable,("value"in h||h.initializer)&&(h.writable=!0),h=p.slice().reverse().reduce((function(e,t){return t(c,d,e)||e}),h),m&&void 0!==h.initializer&&(h.value=h.initializer?h.initializer.call(m):void 0,h.initializer=void 0),void 0===h.initializer&&(Object.defineProperty(c,d,h),h=null),a=h,o) +var c,d,p,f,m,h +e.default=s,(0,t.setComponentTemplate)(u,s)})),define("consul-ui/components/option-input/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"HSNBl7Zm",block:'[[[1,"\\n"],[8,[39,0],[[24,0,"option-input type-select"],[17,1]],[["@item","@placeholder","@name","@label","@help","@validations","@chart"],[[30,2],[30,3],[30,4],[30,5],[30,6],[30,7],[30,8]]],[["label","input"],[[[[1,"\\n"],[1," "],[1,[28,[35,1],[[30,5],[30,4]],null]],[1,"\\n "]],[]],[[[1,"\\n"],[41,[30,9],[[[41,[30,10],[[],[]],[[],[]]]],[]],[[[1," "],[8,[39,3],null,[["@disabled","@onChange","@selected","@searchEnabled","@options"],[[30,11],[30,12],[30,13],false,[30,14]]],[["default"],[[[[1,"\\n "],[18,16,[[28,[37,5],null,[["item"],[[30,15]]]]]],[1,"\\n "]],[15]]]]],[1,"\\n"]],[]]],[1," "]],[]]]]],[1,"\\n"]],["&attrs","@item","@placeholder","@name","@label","@help","@validations","@chart","@expanded","@multiple","@disabled","@onchange","@selected","@items","item","&option"],false,["form-input","or","if","power-select","yield","hash"]]',moduleName:"consul-ui/components/option-input/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/outlet/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@glimmer/tracking","@ember/object","@ember/service"],(function(e,t,n,l,r,i,o){var a,u,s,c,d,p,f,m,h,b,y +function v(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function g(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const O=(0,n.createTemplateFactory)({id:"rWvBYpZT",block:'[[[1,"\\n"],[1,[28,[35,0],[[30,0,["connect"]]],null]],[1,"\\n"],[1,[28,[35,1],[[30,0,["disconnect"]]],null]],[1,"\\n"],[11,"section"],[24,0,"outlet"],[16,"data-outlet",[30,1]],[16,"data-route",[30,0,["routeName"]]],[16,"data-state",[30,0,["state","name"]]],[16,"data-transition",[28,[37,2],[[30,0,["previousState","name"]]," ",[30,0,["state","name"]]],null]],[4,[38,0],[[28,[37,3],[[30,0,["attributeChanged"]],"element"],null]],null],[4,[38,4],[[28,[37,3],[[30,0,["attributeChanged"]],"model",[30,2]],null]],null],[4,[38,5],["transitionend",[30,0,["transitionEnd"]]],null],[12],[1,"\\n "],[18,3,[[28,[37,7],null,[["state","previousState","route"],[[30,0,["state"]],[30,0,["previousState"]],[30,0,["route"]]]]]]],[1,"\\n"],[13]],["@name","@model","&default"],false,["did-insert","will-destroy","concat","fn","did-update","on","yield","hash"]]',moduleName:"consul-ui/components/outlet/index.hbs",isStrictMode:!1}) +class P{constructor(e){this.name=e}matches(e){return this.name===e}}let w=(a=(0,o.inject)("routlet"),u=(0,o.inject)("router"),s=class extends l.default{constructor(){super(...arguments),v(this,"routlet",c,this),v(this,"router",d,this),v(this,"element",p,this),v(this,"routeName",f,this),v(this,"state",m,this),v(this,"previousState",h,this),v(this,"endTransition",b,this),v(this,"route",y,this)}get model(){return this.args.model||{}}get name(){return this.args.name}setAppRoute(e){if("loading"!==e||"oidc-provider-debug"===e){const t=this.element.ownerDocument.documentElement +t.classList.contains("ember-loading")&&t.classList.remove("ember-loading"),t.dataset.route=e,this.setAppState("idle")}}setAppState(e){this.element.ownerDocument.documentElement.dataset.state=e}attributeChanged(e,t){switch(e){case"element":this.element=t,"application"===this.args.name&&(this.setAppState("loading"),this.setAppRoute(this.router.currentRouteName)) +break +case"model":void 0!==this.route&&(this.route._model=t)}}transitionEnd(e){"function"==typeof this.endTransition&&this.endTransition()}startLoad(e){const t=this.routlet.findOutlet(e.to.name)||"application" +if(this.args.name===t){let e +this.previousState=this.state,this.state=new P("loading"),this.endTransition=this.routlet.transition(),e=this.element?window.getComputedStyle(this.element).getPropertyValue("transition-duration"):0,0===parseFloat(e)&&this.endTransition()}"application"===this.args.name&&this.setAppState("loading")}endLoad(e){this.state.matches("loading")&&(this.previousState=this.state,this.state=new P("idle")),"application"===this.args.name&&this.setAppRoute(this.router.currentRouteName)}connect(){this.routlet.addOutlet(this.args.name,this),this.previousState=this.state=new P("idle"),this.router.on("routeWillChange",this.startLoad),this.router.on("routeDidChange",this.endLoad)}disconnect(){this.routlet.removeOutlet(this.args.name),this.router.off("routeWillChange",this.startLoad),this.router.off("routeDidChange",this.endLoad)}},c=g(s.prototype,"routlet",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),d=g(s.prototype,"router",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p=g(s.prototype,"element",[r.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f=g(s.prototype,"routeName",[r.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m=g(s.prototype,"state",[r.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=g(s.prototype,"previousState",[r.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=g(s.prototype,"endTransition",[r.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),y=g(s.prototype,"route",[r.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),g(s.prototype,"attributeChanged",[i.action],Object.getOwnPropertyDescriptor(s.prototype,"attributeChanged"),s.prototype),g(s.prototype,"transitionEnd",[i.action],Object.getOwnPropertyDescriptor(s.prototype,"transitionEnd"),s.prototype),g(s.prototype,"startLoad",[i.action],Object.getOwnPropertyDescriptor(s.prototype,"startLoad"),s.prototype),g(s.prototype,"endLoad",[i.action],Object.getOwnPropertyDescriptor(s.prototype,"endLoad"),s.prototype),g(s.prototype,"connect",[i.action],Object.getOwnPropertyDescriptor(s.prototype,"connect"),s.prototype),g(s.prototype,"disconnect",[i.action],Object.getOwnPropertyDescriptor(s.prototype,"disconnect"),s.prototype),s) +e.default=w,(0,t.setComponentTemplate)(O,w)})),define("consul-ui/components/paged-collection/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@ember/object","@glimmer/tracking","@ember/runloop"],(function(e,t,n,l,r,i,o){var a,u,s,c,d,p,f,m +function h(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function b(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const y=(0,n.createTemplateFactory)({id:"aR3XrTzu",block:'[[[1,"\\n"],[18,2,[[28,[37,1],null,[["items","page","pane","resize","viewport","rowHeight","maxHeight","startHeight","totalHeight","totalPages","Pager"],[[30,0,["items"]],[30,1],[28,[37,2],[[30,0,["setPane"]]],null],[28,[37,2],[[30,0,["resize"]]],null],[28,[37,2],[[30,0,["setViewport"]]],null],[28,[37,2],[[30,0,["setRowHeight"]]],null],[28,[37,2],[[30,0,["setMaxHeight"]]],null],[30,0,["startHeight"]],[30,0,["totalHeight"]],[30,0,["totalPages"]],[52,[28,[37,4],[[33,5],"index"],null],[50,"yield",0,null,null],""]]]]]],[1,"\\n\\n"],[1,[28,[35,7],[[30,0,["disconnect"]]],null]],[1,"\\n"]],["@page","&default"],false,["yield","hash","fn","if","eq","type","component","will-destroy"]]',moduleName:"consul-ui/components/paged-collection/index.hbs",isStrictMode:!1}) +let v=(a=class extends l.default{constructor(){super(...arguments),h(this,"$pane",u,this),h(this,"$viewport",s,this),h(this,"top",c,this),h(this,"visibleItems",d,this),h(this,"overflow",p,this),h(this,"_rowHeight",f,this),h(this,"_type",m,this)}get type(){return this.args.type||this._type}get items(){return this.args.items.slice(this.cursor,this.cursor+this.perPage)}get perPage(){switch(this.type){case"virtual-scroll":return this.visibleItems+2*this.overflow +case"index":return parseInt(this.args.perPage)}return this.total}get cursor(){switch(this.type){case"virtual-scroll":return this.itemsBefore +case"index":return(parseInt(this.args.page)-1)*this.perPage}return 0}get itemsBefore(){return void 0===this.$viewport?0:Math.max(0,Math.round(this.top/this.rowHeight)-this.overflow)}get rowHeight(){return parseFloat(this.args.rowHeight||this._rowHeight)}get startHeight(){switch(this.type){case"virtual-scroll":return Math.min(this.totalHeight,this.itemsBefore*this.rowHeight) +case"index":return 0}return 0}get totalHeight(){return this.total*this.rowHeight}get totalPages(){return Math.ceil(this.total/this.perPage)}get total(){return this.args.items.length}scroll(e){this.top=this.$viewport.scrollTop}resize(){this.$viewport.clientHeight>0&&this.rowHeight>0?this.visibleItems=Math.ceil(this.$viewport.clientHeight/this.rowHeight):this.visibleItems=0}setViewport(e){this.$viewport="html"===e?[...document.getElementsByTagName("html")][0]:e,this.$viewport.addEventListener("scroll",this.scroll),"html"===e&&this.$viewport.addEventListener("resize",this.resize),this.scroll(),this.resize()}setPane(e){this.$pane=e}setRowHeight(e){this._rowHeight=parseFloat(e)}setMaxHeight(e){(0,o.scheduleOnce)("actions",this,"_setMaxHeight")}_setMaxHeight(e){const t=parseFloat(e) +isNaN(t)||(this._type="virtual-scroll")}disconnect(){this.$viewport.removeEventListener("scroll",this.scroll),this.$viewport.removeEventListener("resize",this.resize)}},u=b(a.prototype,"$pane",[i.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),s=b(a.prototype,"$viewport",[i.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),c=b(a.prototype,"top",[i.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return 0}}),d=b(a.prototype,"visibleItems",[i.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return 0}}),p=b(a.prototype,"overflow",[i.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return 10}}),f=b(a.prototype,"_rowHeight",[i.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return 0}}),m=b(a.prototype,"_type",[i.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return"native-scroll"}}),b(a.prototype,"scroll",[r.action],Object.getOwnPropertyDescriptor(a.prototype,"scroll"),a.prototype),b(a.prototype,"resize",[r.action],Object.getOwnPropertyDescriptor(a.prototype,"resize"),a.prototype),b(a.prototype,"setViewport",[r.action],Object.getOwnPropertyDescriptor(a.prototype,"setViewport"),a.prototype),b(a.prototype,"setPane",[r.action],Object.getOwnPropertyDescriptor(a.prototype,"setPane"),a.prototype),b(a.prototype,"setRowHeight",[r.action],Object.getOwnPropertyDescriptor(a.prototype,"setRowHeight"),a.prototype),b(a.prototype,"setMaxHeight",[r.action],Object.getOwnPropertyDescriptor(a.prototype,"setMaxHeight"),a.prototype),b(a.prototype,"_setMaxHeight",[r.action],Object.getOwnPropertyDescriptor(a.prototype,"_setMaxHeight"),a.prototype),b(a.prototype,"disconnect",[r.action],Object.getOwnPropertyDescriptor(a.prototype,"disconnect"),a.prototype),a) +e.default=v,(0,t.setComponentTemplate)(y,v)})),define("consul-ui/components/panel/index.css",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default=e=>e` + .panel { + --padding-x: 14px; + --padding-y: 14px; + } + .panel { + position: relative; + } + .panel-separator { + margin: 0; + } + + .panel { + --tone-border: var(--token-color-palette-neutral-300); + border: var(--decor-border-100); + border-radius: var(--decor-radius-200); + box-shadow: var(--token-surface-high-box-shadow); + } + .panel-separator { + border: 0; + border-top: var(--decor-border-100); + } + .panel { + color: var(--token-color-foreground-strong); + background-color: var(--token-color-surface-primary); + } + .panel, + .panel-separator { + border-color: var(--tone-border); + } +`})),define("consul-ui/components/peerings/badge/icon/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"KlZK7YBq",block:'[[[1,"\\n"],[41,[28,[37,1],[[28,[37,2],[[30,1],"PENDING"],null],[28,[37,2],[[30,1],"ESTABLISHING"],null]],null],[[[11,"svg"],[24,"width","16"],[24,"height","16"],[24,"viewBox","0 0 16 16"],[24,"fill","none"],[24,"xmlns","http://www.w3.org/2000/svg","http://www.w3.org/2000/xmlns/"],[17,2],[12],[1,"\\n "],[10,"path"],[14,"fill-rule","evenodd"],[14,"clip-rule","evenodd"],[14,"d","M8 1.5C6.14798 1.5 4.47788 2.27358 3.29301 3.51732C3.0073 3.81723 2.53256 3.82874 2.23266 3.54303C1.93275 3.25732 1.92125 2.78258 2.20696 2.48268C3.66316 0.954124 5.72078 0 8 0C10.2792 0 12.3368 0.954124 13.793 2.48268C14.0788 2.78258 14.0672 3.25732 13.7673 3.54303C13.4674 3.82874 12.9927 3.81723 12.707 3.51732C11.5221 2.27358 9.85202 1.5 8 1.5ZM1.23586 5.27899C1.63407 5.39303 1.86443 5.80828 1.75039 6.20649C1.58749 6.7753 1.5 7.3768 1.5 8C1.5 11.0649 3.62199 13.636 6.47785 14.321C6.88064 14.4176 7.12885 14.8224 7.03225 15.2252C6.93565 15.628 6.53081 15.8762 6.12802 15.7796C2.61312 14.9366 0 11.7744 0 8C0 7.23572 0.107387 6.49527 0.30836 5.79351C0.422401 5.39531 0.837659 5.16494 1.23586 5.27899ZM14.7641 5.27899C15.1623 5.16494 15.5776 5.39531 15.6916 5.79351C15.8926 6.49527 16 7.23572 16 8C16 11.7744 13.3869 14.9366 9.87199 15.7796C9.4692 15.8762 9.06436 15.628 8.96775 15.2252C8.87115 14.8224 9.11936 14.4176 9.52215 14.321C12.378 13.636 14.5 11.0649 14.5 8C14.5 7.3768 14.4125 6.7753 14.2496 6.20649C14.1356 5.80828 14.3659 5.39303 14.7641 5.27899Z"],[14,"fill","#3B3D45"],[12],[13],[1,"\\n "],[10,"path"],[14,"opacity","0.2"],[14,"fill-rule","evenodd"],[14,"clip-rule","evenodd"],[14,"d","M8 4.5C6.067 4.5 4.5 6.067 4.5 8C4.5 9.933 6.067 11.5 8 11.5C9.933 11.5 11.5 9.933 11.5 8C11.5 6.067 9.933 4.5 8 4.5ZM3 8C3 5.23858 5.23858 3 8 3C10.7614 3 13 5.23858 13 8C13 10.7614 10.7614 13 8 13C5.23858 13 3 10.7614 3 8Z"],[14,"fill","#000001"],[12],[13],[1,"\\n"],[13],[1,"\\n"]],[]],null],[41,[28,[37,2],[[30,1],"ACTIVE"],null],[[[11,"svg"],[24,"width","16"],[24,"height","16"],[24,"viewBox","0 0 16 16"],[24,"fill","none"],[24,"xmlns","http://www.w3.org/2000/svg","http://www.w3.org/2000/xmlns/"],[17,2],[12],[1,"\\n "],[10,"path"],[14,"d","M14.7803 4.28033C15.0732 3.98744 15.0732 3.51256 14.7803 3.21967C14.4874 2.92678 14.0126 2.92678 13.7197 3.21967L5.75 11.1893L2.28033 7.71967C1.98744 7.42678 1.51256 7.42678 1.21967 7.71967C0.926777 8.01256 0.926777 8.48744 1.21967 8.78033L5.21967 12.7803C5.51256 13.0732 5.98744 13.0732 6.28033 12.7803L14.7803 4.28033Z"],[14,"fill","#00781E"],[12],[13],[1,"\\n"],[13],[1,"\\n"]],[]],null],[41,[28,[37,2],[[30,1],"FAILING"],null],[[[11,"svg"],[24,"width","16"],[24,"height","16"],[24,"viewBox","0 0 16 16"],[24,"fill","none"],[24,"xmlns","http://www.w3.org/2000/svg","http://www.w3.org/2000/xmlns/"],[17,2],[12],[1,"\\n "],[10,"path"],[14,"d","M12.7803 4.28033C13.0732 3.98744 13.0732 3.51256 12.7803 3.21967C12.4874 2.92678 12.0126 2.92678 11.7197 3.21967L8 6.93934L4.28033 3.21967C3.98744 2.92678 3.51256 2.92678 3.21967 3.21967C2.92678 3.51256 2.92678 3.98744 3.21967 4.28033L6.93934 8L3.21967 11.7197C2.92678 12.0126 2.92678 12.4874 3.21967 12.7803C3.51256 13.0732 3.98744 13.0732 4.28033 12.7803L8 9.06066L11.7197 12.7803C12.0126 13.0732 12.4874 13.0732 12.7803 12.7803C13.0732 12.4874 13.0732 12.0126 12.7803 11.7197L9.06066 8L12.7803 4.28033Z"],[14,"fill","#C00005"],[12],[13],[1,"\\n"],[13],[1,"\\n"]],[]],null],[1,"\\n"],[41,[28,[37,2],[[30,1],"TERMINATED"],null],[[[11,"svg"],[24,"width","16"],[24,"height","17"],[24,"viewBox","0 0 16 17"],[24,"fill","none"],[24,"xmlns","http://www.w3.org/2000/svg","http://www.w3.org/2000/xmlns/"],[17,2],[12],[1,"\\n "],[10,"path"],[14,"fill-rule","evenodd"],[14,"clip-rule","evenodd"],[14,"d","M3.13889 2.55566C2.78604 2.55566 2.5 2.8417 2.5 3.19455V12.9168C2.5 13.2696 2.78604 13.5557 3.13889 13.5557H12.8611C13.214 13.5557 13.5 13.2696 13.5 12.9168V3.19455C13.5 2.8417 13.214 2.55566 12.8611 2.55566H3.13889ZM1 3.19455C1 2.01328 1.95761 1.05566 3.13889 1.05566H12.8611C14.0424 1.05566 15 2.01328 15 3.19455V12.9168C15 14.0981 14.0424 15.0557 12.8611 15.0557H3.13889C1.95761 15.0557 1 14.0981 1 12.9168V3.19455ZM4.71967 4.77533C5.01256 4.48244 5.48744 4.48244 5.78033 4.77533L8 6.995L10.2197 4.77533C10.5126 4.48244 10.9874 4.48244 11.2803 4.77533C11.5732 5.06823 11.5732 5.5431 11.2803 5.83599L9.06066 8.05566L11.2803 10.2753C11.5732 10.5682 11.5732 11.0431 11.2803 11.336C10.9874 11.6289 10.5126 11.6289 10.2197 11.336L8 9.11632L5.78033 11.336C5.48744 11.6289 5.01256 11.6289 4.71967 11.336C4.42678 11.0431 4.42678 10.5682 4.71967 10.2753L6.93934 8.05566L4.71967 5.83599C4.42678 5.5431 4.42678 5.06823 4.71967 4.77533Z"],[14,"fill","#3B3D45"],[12],[13],[1,"\\n"],[13],[1,"\\n"]],[]],null],[41,[28,[37,2],[[30,1],"UNDEFINED"],null],[[[11,"svg"],[24,"width","16"],[24,"height","16"],[24,"viewBox","0 0 16 16"],[24,"fill","none"],[24,"xmlns","http://www.w3.org/2000/svg","http://www.w3.org/2000/xmlns/"],[17,2],[12],[1,"\\n"],[10,"path"],[14,"fill-rule","evenodd"],[14,"clip-rule","evenodd"],[14,"d","M8.1969 4.52275C7.83582 4.45975 7.46375 4.52849 7.14594 4.7185C6.82781 4.9087 6.58324 5.20915 6.45878 5.56907C6.32341 5.96054 5.89632 6.16815 5.50485 6.03278C5.11338 5.89741 4.90577 5.47032 5.04114 5.07886C5.27962 4.3892 5.75141 3.80461 6.37621 3.43106C7.00132 3.05732 7.73786 2.91999 8.45475 3.04508C9.17148 3.17015 9.81887 3.54878 10.2837 4.11048C10.7481 4.67171 11.0009 5.37994 11 6.10959C10.9999 6.59724 10.9078 7.01534 10.7254 7.37628C10.5432 7.73694 10.2936 7.9952 10.0464 8.19341C9.85239 8.34899 9.63602 8.48431 9.46464 8.59149C9.431 8.61253 9.39909 8.63248 9.36942 8.65129C9.16778 8.77916 9.02667 8.87887 8.91689 8.99055C8.81461 9.0946 8.77388 9.18682 8.75706 9.23816C8.74978 9.26038 8.74659 9.27628 8.74537 9.28347C8.72786 9.68216 8.3991 10 7.9961 10C7.58189 10 7.2461 9.66422 7.2461 9.25C7.24626 9.08689 7.28103 8.92552 7.33163 8.77109C7.41129 8.52797 7.56353 8.22758 7.84718 7.93902C8.0857 7.69637 8.35223 7.52016 8.56613 7.38452C8.61117 7.35596 8.65343 7.32942 8.69337 7.30434C8.8616 7.1987 8.98859 7.11896 9.10803 7.02318C9.24074 6.91676 9.32751 6.81683 9.38666 6.69978C9.44562 6.5831 9.49996 6.4041 9.49996 6.10918L9.49996 6.10808C9.50052 5.72536 9.36781 5.35654 9.12803 5.06677C8.88848 4.77728 8.55813 4.58578 8.1969 4.52275Z"],[14,"fill","#3B3D45"],[12],[13],[1,"\\n"],[10,"path"],[14,"d","M8 11C7.44772 11 7 11.4477 7 12C7 12.5523 7.44772 13 8 13H8.00667C8.55895 13 9.00667 12.5523 9.00667 12C9.00667 11.4477 8.55895 11 8.00667 11H8Z"],[14,"fill","#3B3D45"],[12],[13],[1,"\\n"],[10,"path"],[14,"fill-rule","evenodd"],[14,"clip-rule","evenodd"],[14,"d","M0 8C0 3.58172 3.58172 0 8 0C12.4183 0 16 3.58172 16 8C16 12.4183 12.4183 16 8 16C3.58172 16 0 12.4183 0 8ZM8 1.5C4.41015 1.5 1.5 4.41015 1.5 8C1.5 11.5899 4.41015 14.5 8 14.5C11.5899 14.5 14.5 11.5899 14.5 8C14.5 4.41015 11.5899 1.5 8 1.5Z"],[14,"fill","#3B3D45"],[12],[13],[1,"\\n"],[13],[1,"\\n"]],[]],null],[1,"\\n"],[41,[28,[37,2],[[30,1],"DELETING"],null],[[[10,"svg"],[14,"width","16"],[14,"height","16"],[14,"viewBox","0 0 16 16"],[14,"fill","none"],[14,"xmlns","http://www.w3.org/2000/svg","http://www.w3.org/2000/xmlns/"],[12],[1,"\\n"],[10,"path"],[14,"opacity","0.2"],[14,"fill-rule","evenodd"],[14,"clip-rule","evenodd"],[14,"d","M8 1.5C4.41015 1.5 1.5 4.41015 1.5 8C1.5 11.5899 4.41015 14.5 8 14.5C11.5899 14.5 14.5 11.5899 14.5 8C14.5 4.41015 11.5899 1.5 8 1.5ZM0 8C0 3.58172 3.58172 0 8 0C12.4183 0 16 3.58172 16 8C16 12.4183 12.4183 16 8 16C3.58172 16 0 12.4183 0 8Z"],[14,"fill","#000001"],[12],[13],[1,"\\n"],[10,"path"],[14,"fill-rule","evenodd"],[14,"clip-rule","evenodd"],[14,"d","M7.25 0.75C7.25 0.335786 7.58579 0 8 0C12.4183 0 16 3.58172 16 8C16 8.41421 15.6642 8.75 15.25 8.75C14.8358 8.75 14.5 8.41421 14.5 8C14.5 4.41015 11.5899 1.5 8 1.5C7.58579 1.5 7.25 1.16421 7.25 0.75Z"],[14,"fill","#3B3D45"],[12],[13],[1,"\\n"],[13],[1,"\\n"]],[]],null]],["@state","&attrs"],false,["if","or","eq"]]',moduleName:"consul-ui/components/peerings/badge/icon/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/peerings/badge/index",["exports","@ember/component","@ember/template-factory","@glimmer/component"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"9gyI6t3m",block:'[[[1,"\\n"],[41,[30,1,["State"]],[[[1," "],[11,0],[16,0,[29,["peerings-badge ",[28,[37,1],[[30,1,["State"]]],null]]]],[4,[38,2],[[30,0,["tooltip"]]],null],[12],[1,"\\n "],[8,[39,3],null,[["@state"],[[29,[[30,1,["State"]]]]]],null],[1,"\\n "],[10,1],[14,0,"peerings-badge__text"],[12],[1,[28,[35,4],[[28,[37,1],[[30,1,["State"]]],null]],null]],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null]],["@peering"],false,["if","lowercase","tooltip","peerings/badge/icon","capitalize"]]',moduleName:"consul-ui/components/peerings/badge/index.hbs",isStrictMode:!1}),i={ACTIVE:{tooltip:"This peer connection is currently active."},PENDING:{tooltip:"This peering connection has not been established yet."},ESTABLISHING:{tooltip:"This peering connection is in the process of being established."},FAILING:{tooltip:"This peering connection has some intermittent errors (usually network related). It will continue to retry. "},DELETING:{tooltip:"This peer is in the process of being deleted."},TERMINATED:{tooltip:"Someone in the other peer may have deleted this peering connection."},UNDEFINED:{tooltip:""}} +class o extends l.default{get styles(){const{peering:{State:e}}=this.args +return i[e]}get tooltip(){return this.styles.tooltip}}e.default=o,(0,t.setComponentTemplate)(r,o)})),define("consul-ui/components/peerings/provider/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@ember/service","@ember/application","consul-ui/components/tab-nav"],(function(e,t,n,l,r,i,o){var a,u,s +function c(e,t){var n=Object.keys(e) +if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) +t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function d(e){for(var t=1;tnew o.Tab(d(d({},e),{},{currentRouteName:t.currentRouteName,owner:n}))))}},u=m(a.prototype,"router",[r.inject],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),s=m(a.prototype,"intl",[r.inject],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),a) +e.default=b,(0,t.setComponentTemplate)(h,b)})),define("consul-ui/components/policy-form/index",["exports","@ember/component","@ember/template-factory","consul-ui/components/form-component/index","@ember/object"],(function(e,t,n,l,r){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const i=(0,n.createTemplateFactory)({id:"Hx5i6L86",block:'[[[1,"\\n"],[18,6,null],[1,"\\n"],[11,"fieldset"],[24,0,"policy-form"],[16,"disabled",[52,[28,[37,2],[[28,[37,3],["write policy"],[["item"],[[33,4]]]]],null],"disabled"]],[17,1],[12],[1,"\\n"],[6,[39,5],null,[["name"],["template"]],[["default","else"],[[[],[]],[[[1," "],[10,"header"],[12],[1,"\\n Policy"],[1,[52,[33,6]," or identity?",""]],[1,"\\n "],[13],[1,"\\n"],[41,[33,6],[[[1," "],[10,2],[12],[1,"\\n Identities are default policies with configurable names. They save you some time and effort you\'re using Consul for Connect features.\\n "],[13],[1,"\\n"],[1," "],[10,0],[14,"role","radiogroup"],[15,0,[52,[33,4,["error","Type"]]," has-error"]],[12],[1,"\\n"],[42,[28,[37,8],[[28,[37,8],[[33,9]],null]],null],null,[[[1," "],[10,"label"],[12],[1,"\\n "],[10,1],[12],[1,[30,2,["name"]]],[13],[1,"\\n "],[10,"input"],[15,3,[28,[37,10],[[33,11],"[template]"],null]],[15,2,[30,2,["template"]]],[15,"checked",[28,[37,12],[[33,4,["template"]],[30,2,["template"]]],null]],[15,"onchange",[28,[37,13],[[30,0],[28,[37,14],[[28,[37,15],[[33,4],"template"],null]],null]],[["value"],["target.value"]]]],[14,4,"radio"],[12],[13],[1,"\\n "],[13],[1,"\\n"]],[2]],null],[1," "],[13],[1,"\\n"]],[]],[[[1," "],[10,"input"],[15,3,[28,[37,10],[[33,11],"[template]"],null]],[14,2,""],[14,4,"hidden"],[12],[13],[1,"\\n"]],[]]]],[]]]]],[1," "],[10,"label"],[15,0,[29,["type-text",[52,[28,[37,16],[[33,4,["error","Name"]],[28,[37,2],[[33,4,["isPristine"]]],null]],null]," has-error"]]]],[12],[1,"\\n "],[10,1],[12],[1,"Name"],[13],[1,"\\n "],[10,"input"],[15,2,[33,4,["Name"]]],[15,3,[29,[[36,11],"[Name]"]]],[14,"autofocus","autofocus"],[15,"oninput",[28,[37,13],[[30,0],"change"],null]],[14,4,"text"],[12],[13],[1,"\\n "],[10,"em"],[12],[1,"\\n Maximum 128 characters. May only include letters (uppercase and/or lowercase) and/or numbers. Must be unique.\\n "],[13],[1,"\\n"],[41,[28,[37,16],[[33,4,["error","Name"]],[28,[37,2],[[33,4,["isPristine"]]],null]],null],[[[1," "],[10,"strong"],[12],[1,[33,4,["error","Name","validation"]]],[13],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n "],[10,"label"],[14,"for",""],[14,0,"type-text"],[12],[1,"\\n"],[41,[28,[37,12],[[33,4,["template"]],"service-identity"],null],[[[1," "],[8,[39,17],null,[["@readonly","@name","@syntax","@oninput"],[true,[28,[37,10],[[33,11],"[Rules]"],null],"hcl",[28,[37,13],[[30,0],"change",[28,[37,10],[[33,11],"[Rules]"],null]],null]]],[["label","content"],[[[[1,"\\n Rules "],[10,3],[15,6,[29,[[28,[37,18],["CONSUL_DOCS_URL"],null],"/guides/acl.html#rule-specification"]]],[14,"rel","help noopener noreferrer"],[14,"target","_blank"],[12],[1,"(HCL Format)"],[13],[1,"\\n "]],[]],[[[8,[39,19],null,[["@nspace","@partition","@name"],[[99,20,["@nspace"]],[99,21,["@partition"]],[33,4,["Name"]]]],null]],[]]]]],[1,"\\n"]],[]],[[[41,[28,[37,12],[[33,4,["template"]],"node-identity"],null],[[[1," "],[8,[39,17],null,[["@readonly","@name","@syntax","@oninput"],[true,[28,[37,10],[[33,11],"[Rules]"],null],"hcl",[28,[37,13],[[30,0],"change",[28,[37,10],[[33,11],"[Rules]"],null]],null]]],[["label","content"],[[[[1,"\\n Rules "],[10,3],[15,6,[29,[[28,[37,18],["CONSUL_DOCS_URL"],null],"/guides/acl.html#rule-specification"]]],[14,"rel","help noopener noreferrer"],[14,"target","_blank"],[12],[1,"(HCL Format)"],[13],[1,"\\n "]],[]],[[[8,[39,22],null,[["@name","@partition"],[[33,4,["Name"]],[99,21,["@partition"]]]],null]],[]]]]],[1,"\\n"]],[]],[[[1," "],[8,[39,17],null,[["@syntax","@class","@name","@value","@onkeyup"],["hcl",[52,[33,4,["error","Rules"]],"error"],[28,[37,10],[[33,11],"[Rules]"],null],[33,4,["Rules"]],[28,[37,13],[[30,0],"change",[28,[37,10],[[33,11],"[Rules]"],null]],null]]],[["label"],[[[[1,"\\n Rules "],[10,3],[15,6,[29,[[28,[37,18],["CONSUL_DOCS_URL"],null],"/guides/acl.html#rule-specification"]]],[14,"rel","help noopener noreferrer"],[14,"target","_blank"],[12],[1,"(HCL Format)"],[13],[1,"\\n "]],[]]]]],[1,"\\n"],[41,[33,4,["error","Rules"]],[[[1," "],[10,"strong"],[12],[1,[33,4,["error","Rules","validation"]]],[13],[1,"\\n"]],[]],null]],[]]]],[]]],[1," "],[13],[1,"\\n"],[41,[28,[37,12],[[33,4,["template"]],"node-identity"],null],[[[1,"\\n "],[8,[39,23],null,[["@src","@onchange"],[[28,[37,24],["/*/*/*/datacenters"],null],[28,[37,13],[[30,0],[28,[37,25],[[33,26]],null]],[["value"],["data"]]]]],null],[1,"\\n "],[10,"label"],[14,0,"type-select"],[12],[1,"\\n "],[10,1],[12],[1,"Datacenter"],[13],[1,"\\n "],[8,[39,27],null,[["@options","@searchField","@selected","@searchPlaceholder","@onChange"],[[28,[37,28],["Name",[33,26]],null],"Name",[28,[37,29],[[33,4,["Datacenter"]],[33,30]],null],"Type a datacenter name",[28,[37,13],[[30,0],"change","Datacenter"],null]]],[["default"],[[[[1,"\\n "],[1,[30,3]],[1,"\\n "]],[3]]]]],[1,"\\n "],[13],[1,"\\n"]],[]],[[[41,[28,[37,12],[[28,[37,29],[[33,21],"default"],null],"default"],null],[[[1," "],[10,0],[14,0,"type-toggle"],[12],[1,"\\n "],[10,1],[12],[1,"Valid datacenters"],[13],[1,"\\n "],[10,"label"],[12],[1,"\\n "],[10,"input"],[15,3,[29,[[36,11],"[isScoped]"]]],[15,"checked",[52,[28,[37,2],[[33,31]],null],"checked"]],[15,"onchange",[28,[37,13],[[30,0],"change"],null]],[14,4,"checkbox"],[12],[13],[1,"\\n "],[10,1],[12],[1,"All"],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[33,31],[[[1," "],[8,[39,23],null,[["@src","@onchange"],[[28,[37,24],["/*/*/*/datacenters"],null],[28,[37,13],[[30,0],[28,[37,25],[[33,26]],null]],[["value"],["data"]]]]],null],[1,"\\n\\n "],[10,0],[14,0,"checkbox-group"],[14,"role","group"],[12],[1,"\\n"],[42,[28,[37,8],[[28,[37,8],[[33,26]],null]],null],null,[[[1," "],[10,"label"],[14,0,"type-checkbox"],[12],[1,"\\n "],[10,"input"],[15,3,[29,[[36,11],"[Datacenters]"]]],[15,2,[30,4,["Name"]]],[15,"checked",[52,[28,[37,32],[[30,4,["Name"]],[33,4,["Datacenters"]]],null],"checked"]],[15,"onchange",[28,[37,13],[[30,0],"change"],null]],[14,4,"checkbox"],[12],[13],[1,"\\n "],[10,1],[12],[1,[30,4,["Name"]]],[13],[1,"\\n "],[13],[1,"\\n"]],[4]],null],[42,[28,[37,8],[[28,[37,8],[[33,4,["Datacenters"]]],null]],null],null,[[[41,[28,[37,2],[[28,[37,33],["Name",[30,5],[33,26]],null]],null],[[[1," "],[10,"label"],[14,0,"type-checkbox"],[12],[1,"\\n "],[10,"input"],[15,3,[29,[[36,11],"[Datacenters]"]]],[15,2,[30,5]],[14,"checked","checked"],[15,"onchange",[28,[37,13],[[30,0],"change"],null]],[14,4,"checkbox"],[12],[13],[1,"\\n "],[10,1],[12],[1,[30,5]],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null]],[5]],null],[1," "],[13],[1,"\\n\\n\\n"]],[]],null]],[]]],[41,[28,[37,12],[[33,4,["template"]],""],null],[[[1," "],[10,"label"],[14,0,"type-text"],[12],[1,"\\n "],[10,1],[12],[1,"Description (Optional)"],[13],[1,"\\n "],[10,"textarea"],[15,3,[29,[[36,11],"[Description]"]]],[15,2,[33,4,["Description"]]],[15,"oninput",[28,[37,13],[[30,0],"change"],null]],[12],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[13],[1,"\\n\\n"]],["&attrs","template","Name","dc","dc","&default"],false,["yield","if","not","can","item","yield-slot","allowIdentity","each","-track-array","templates","concat","name","eq","action","optional","changeset-set","and","code-editor","env","consul/service-identity/template","nspace","partition","consul/node-identity/template","data-source","uri","mut","datacenters","power-select","map-by","or","dc","isScoped","includes","find-by"]]',moduleName:"consul-ui/components/policy-form/index.hbs",isStrictMode:!1}) +var o=(0,t.setComponentTemplate)(i,l.default.extend({type:"policy",name:"policy",allowIdentity:!0,classNames:["policy-form"],isScoped:!1,init:function(){this._super(...arguments),(0,r.set)(this,"isScoped",(0,r.get)(this,"item.Datacenters.length")>0),this.templates=[{name:"Policy",template:""},{name:"Service Identity",template:"service-identity"},{name:"Node Identity",template:"node-identity"}]},actions:{change:function(e){try{this._super(...arguments)}catch(t){const e=this.isScoped +if("policy[isScoped]"===t.target.name)e?((0,r.set)(this,"previousDatacenters",(0,r.get)(this.item,"Datacenters")),(0,r.set)(this.item,"Datacenters",null)):((0,r.set)(this.item,"Datacenters",this.previousDatacenters),(0,r.set)(this,"previousDatacenters",null)),(0,r.set)(this,"isScoped",!e) +else this.onerror(t) +this.onchange({target:this.form})}}}})) +e.default=o})),define("consul-ui/components/policy-selector/index",["exports","@ember/component","@ember/template-factory","consul-ui/components/child-selector/index","@ember/object","@ember/service"],(function(e,t,n,l,r,i){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const o=(0,n.createTemplateFactory)({id:"Cn++QMVx",block:'[[[1,"\\n"],[8,[39,0],[[17,1]],[["@disabled","@repo","@dc","@partition","@nspace","@type","@placeholder","@items"],[[99,1,["@disabled"]],[99,2,["@repo"]],[99,3,["@dc"]],[99,4,["@partition"]],[99,5,["@nspace"]],"policy","Search for policy",[99,6,["@items"]]]],[["default"],[[[[1,"\\n "],[18,11,null],[1,"\\n "],[8,[39,8],null,[["@name"],["label"]],[["default"],[[[[1,"\\n Apply an existing policy\\n "]],[]]]]],[1,"\\n "],[8,[39,8],null,[["@name"],["create"]],[["default"],[[[[1,"\\n"],[6,[39,9],null,[["name"],["trigger"]],[["default","else"],[[[[1," "],[18,11,null],[1,"\\n"]],[]],[[[1," "],[8,[39,10],[[24,0,"type-dialog"],[4,[38,11],["click",[28,[37,12],[[30,0],[30,0,["openModal"]]],null]],null]],[["@text","@size","@color","@icon"],["Create new policy","small","tertiary","plus"]],null],[1,"\\n"],[1," "],[8,[39,13],[[24,1,"new-policy"]],[["@onopen","@aria"],[[28,[37,12],[[30,0],"open"],null],[28,[37,14],null,[["label"],["New Policy"]]]]],[["default"],[[[[1,"\\n "],[8,[39,15],null,[["@target","@name","@value"],[[30,0],"modal",[30,2]]],null],[1,"\\n "],[8,[39,8],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"New Policy"],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,8],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[8,[39,16],null,[["@form","@nspace","@partition","@dc","@allowServiceIdentity"],[[99,17,["@form"]],[99,5,["@nspace"]],[99,4,["@partition"]],[99,3,["@dc"]],[99,18,["@allowServiceIdentity"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,8],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[8,[39,19],null,null,[["default"],[[[[1,"\\n "],[8,[39,10],[[16,"onclick",[28,[37,20],[[30,0,["save"]],[33,21],[33,6],[28,[37,22],[[28,[37,12],[[30,0],[30,3]],null],[28,[37,12],[[30,0],"reset"],null]],null]],null]],[16,"disabled",[52,[28,[37,24],[[33,21,["isSaving"]],[33,21,["isPristine"]],[33,21,["isInvalid"]]],null],"disabled"]],[24,4,"submit"]],[["@isLoading","@text"],[[33,21,["isSaving"]],"Create and apply"]],null],[1,"\\n "],[8,[39,10],[[16,"disabled",[52,[33,21,["isSaving"]],"disabled"]],[24,4,"reset"],[4,[38,11],["click",[28,[37,12],[[30,0],[28,[37,22],[[28,[37,12],[[30,0],[30,3]],null],[28,[37,12],[[30,0],"reset"],null]],null]],null]],null]],[["@color","@text"],["secondary","Cancel"]],null],[1,"\\n "]],[]]]]],[1,"\\n "]],[3]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[]]]]],[1," "]],[]]]]],[1,"\\n "],[8,[39,8],null,[["@name"],["option"]],[["default"],[[[[1,"\\n "],[1,[30,4,["Name"]]],[1,"\\n "]],[4]]]]],[1,"\\n "],[8,[39,8],null,[["@name"],["set"]],[["default"],[[[[1,"\\n "],[8,[39,25],null,[["@onchange","@items"],[[28,[37,12],[[30,0],"open"],null],[28,[37,26],["CreateTime:desc","Name:asc",[33,6]],null]]],[["default"],[[[[1,"\\n "],[8,[39,8],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"th"],[12],[1,"Name"],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,8],null,[["@name"],["row"]],[["default"],[[[[1,"\\n "],[10,"td"],[15,0,[28,[37,27],[[30,5]],null]],[12],[1,"\\n"],[41,[30,5,["ID"]],[[[1," "],[10,3],[15,6,[28,[37,28],["dc.acls.policies.edit",[30,5,["ID"]]],null]],[12],[1,[30,5,["Name"]]],[13],[1,"\\n"]],[]],[[[1," "],[10,3],[15,3,[30,5,["Name"]]],[12],[1,[30,5,["Name"]]],[13],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,8],null,[["@name"],["details"]],[["default"],[[[[1,"\\n"],[41,[28,[37,29],[[30,5,["template"]],""],null],[[[1," "],[8,[39,30],null,[["@src","@onchange","@loading"],[[28,[37,31],["/${partition}/${nspace}/${dc}/policy/${id}",[28,[37,14],null,[["partition","nspace","dc","id"],[[33,4],[33,5],[33,3],[30,5,["ID"]]]]]],null],[28,[37,12],[[30,0],[28,[37,32],[[33,33]],null]],[["value"],["data"]]],"lazy"]],null],[1,"\\n"]],[]],null],[41,[28,[37,29],[[30,5,["template"]],"node-identity"],null],[[[1," "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"Datacenter:"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[30,5,["Datacenter"]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],[[[1," "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"Datacenters:"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[28,[35,34],[", ",[28,[37,35],[[28,[37,24],[[33,33],[30,5]],null]],null]],null]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]]],[1," "],[10,"label"],[14,0,"type-text"],[12],[1,"\\n"],[41,[28,[37,29],[[30,5,["template"]],"service-identity"],null],[[[1," "],[8,[39,36],null,[["@syntax","@readonly"],["hcl",true]],[["label","content"],[[[[1,"\\n Rules "],[10,3],[15,6,[29,[[28,[37,37],["CONSUL_DOCS_URL"],null],"/guides/acl.html#rule-specification"]]],[14,"rel","help noopener noreferrer"],[14,"target","_blank"],[12],[1,"(HCL Format)"],[13],[1,"\\n "]],[]],[[[1,"\\n "],[8,[39,38],null,[["@nspace","@partition","@name"],[[99,5,["@nspace"]],[99,4,["@partition"]],[30,5,["Name"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],[[[41,[28,[37,29],[[30,5,["template"]],"node-identity"],null],[[[1," "],[8,[39,36],null,[["@syntax","@readonly"],["hcl",true]],[["label","content"],[[[[1,"\\n Rules "],[10,3],[15,6,[29,[[28,[37,37],["CONSUL_DOCS_URL"],null],"/guides/acl.html#rule-specification"]]],[14,"rel","help noopener noreferrer"],[14,"target","_blank"],[12],[1,"(HCL Format)"],[13],[1,"\\n "]],[]],[[[1,"\\n "],[8,[39,39],null,[["@name","@partition"],[[30,5,["Name"]],[99,4,["@partition"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],[[[1," "],[8,[39,36],null,[["@syntax","@readonly","@value"],["hcl",true,[28,[37,24],[[33,33,["Rules"]],[30,5,["Rules"]]],null]]],[["label"],[[[[1,"\\n Rules "],[10,3],[15,6,[29,[[28,[37,37],["CONSUL_DOCS_URL"],null],"/guides/acl.html#rule-specification"]]],[14,"rel","help noopener noreferrer"],[14,"target","_blank"],[12],[1,"(HCL Format)"],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[]]]],[]]],[1," "],[13],[1,"\\n"],[41,[28,[37,40],[[33,1]],null],[[[1," "],[10,0],[12],[1,"\\n "],[8,[39,41],null,[["@message"],["Are you sure you want to remove this policy from this token?"]],[["default"],[[[[1,"\\n "],[8,[39,8],null,[["@name"],["action"]],[["default"],[[[[1,"\\n "],[8,[39,10],[[4,[38,12],[[30,0],[30,7],"remove",[30,5],[33,6]],null]],[["@text","@color","@size"],["Remove","critical","small"]],null],[1,"\\n "]],[7]]]]],[1,"\\n "],[8,[39,8],null,[["@name"],["dialog"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n "],[1,[30,10]],[1,"\\n "],[13],[1,"\\n "],[8,[39,19],null,null,[["default"],[[[[1,"\\n "],[8,[39,10],[[4,[38,12],[[30,0],[30,8]],null]],[["@text","@color","@size"],["Confirm remove","critical","small"]],null],[1,"\\n "],[8,[39,10],[[4,[38,12],[[30,0],[30,9]],null]],[["@text","@color","@size"],["Cancel","secondary","small"]],null],[1,"\\n "]],[]]]]],[1,"\\n "]],[8,9,10]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "]],[5,6]]]]],[1,"\\n\\n "]],[]]]]],[1,"\\n"]],[]]]]],[1,"\\n"]],["&attrs","modal","close","option","item","index","confirm","execute","cancel","message","&default"],false,["child-selector","disabled","repo","dc","partition","nspace","items","yield","block-slot","yield-slot","hds/button","on","action","modal-dialog","hash","ref","policy-form","form","allowServiceIdentity","hds/button-set","perform","item","queue","if","or","tabular-details","sort-by","policy/typeof","href-to","eq","data-source","uri","mut","loadedItem","join","policy/datacenters","code-editor","env","consul/service-identity/template","consul/node-identity/template","not","confirmation-dialog"]]',moduleName:"consul-ui/components/policy-selector/index.hbs",isStrictMode:!1}),a="Invalid Policy: A Policy with Name" +var u=(0,t.setComponentTemplate)(o,l.default.extend({repo:(0,i.inject)("repository/policy"),name:"policy",type:"policy",allowIdentity:!0,classNames:["policy-selector"],init:function(){this._super(...arguments) +const e=this.source +e&&this._listeners.add(e,{save:e=>{this.save.perform(...e.data)}})},reset:function(e){this._super(...arguments),(0,r.set)(this,"isScoped",!1)},refreshCodeEditor:function(e,t){this.dom.component(".code-editor",t).didAppear()},error:function(e){const t=this.item,n=e.error +if(void 0===n.errors)throw n +{const e=n.errors[0] +let l="Rules",r=e.detail +switch(!0){case 0===r.indexOf("Failed to parse ACL rules"):case 0===r.indexOf("Invalid service policy"):l="Rules",r=e.detail +break +case 0===r.indexOf(a):l="Name",r=r.substr(a.indexOf(":")+1)}l&&t.addError(l,r)}},openModal:function(){const{modal:e}=this +e&&e.open()},actions:{open:function(e){this.refreshCodeEditor(e,e.target.parentElement)}}})) +e.default=u})),define("consul-ui/components/popover-menu/index",["exports","@ember/component","@ember/template-factory","@ember/service","block-slots","@ember/object"],(function(e,t,n,l,r,i){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const o=(0,n.createTemplateFactory)({id:"gOcgCjMn",block:'[[[1,"\\n"],[18,11,null],[1,"\\n"],[11,0],[24,0,"popover-menu"],[17,1],[12],[1,"\\n "],[8,[39,1],null,[["@keyboardAccess"],[[99,2,["@keyboardAccess"]]]],[["default"],[[[[1,"\\n\\n"],[44,[[28,[37,4],null,[["MenuItem","MenuSeparator"],[[50,"popover-menu/menu-item",0,null,[["menu"],[[28,[37,4],null,[["addSubmenu","removeSubmenu","confirm","clickTrigger","keypressClick"],[[28,[37,6],[[30,0],"addSubmenu"],null],[28,[37,6],[[30,0],"removeSubmenu"],null],[28,[37,7],["popover-menu-",[33,8],"-"],null],[30,0,["toggle","click"]],[30,4]]]]]]],[50,"popover-menu/menu-separator",0,null,null]]]]],[[[44,[[28,[37,4],null,[["toggle"],[[30,0,["toggle","click"]]]]]],[[[1,"\\n "],[8,[39,9],null,[["@checked","@onchange"],[[52,[33,2],[30,5,["expanded"]],[33,11]],[28,[37,12],[[30,2],[28,[37,6],[[30,0],"change"],null]],null]]],[["default"],[[[[1,"\\n "],[8,[39,13],null,[["@target","@name","@value"],[[30,0],"toggle",[30,8]]],null],[1,"\\n "],[10,"button"],[14,"aria-haspopup","menu"],[15,"onkeydown",[30,3]],[15,"onclick",[30,0,["toggle","click"]]],[15,1,[30,5,["labelledBy"]]],[15,"aria-controls",[30,5,["controls"]]],[14,4,"button"],[12],[1,"\\n "],[8,[39,14],null,[["@name"],["trigger"]],[["default"],[[[[1,"\\n "],[18,11,[[30,6],[30,7]]],[1,"\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "]],[8]]]]],[1,"\\n\\n "],[8,[39,15],[[16,1,[30,5,["controls"]]],[16,"aria-labelledby",[30,5,["labelledBy"]]],[16,"aria-expanded",[30,5,["expanded"]]]],[["@position"],[[99,16,["@position"]]]],[["default"],[[[[1,"\\n "],[8,[39,13],null,[["@target","@name","@value"],[[30,0],"menu",[30,9]]],null],[1,"\\n "],[8,[39,17],null,[["@name"],["controls"]],[["default"],[[[[1,"\\n "],[10,"input"],[15,1,[28,[37,7],["popover-menu-",[33,8],"-"],null]],[14,4,"checkbox"],[12],[13],[1,"\\n"],[42,[28,[37,19],[[28,[37,19],[[33,20]],null]],null],null,[[[1," "],[10,"input"],[15,1,[28,[37,7],["popover-menu-",[33,8],"-",[30,10]],null]],[15,"onchange",[30,9,["change"]]],[14,4,"checkbox"],[12],[13],[1,"\\n"]],[10]],null],[1," "]],[]]]]],[1,"\\n"],[41,[33,21],[[[1," "],[8,[39,17],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[18,11,[[30,6],[30,7]]],[1,"\\n "],[6,[39,14],null,[["name"],["header"]],[["default","else"],[[[],[]],[[],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[1," "],[8,[39,17],null,[["@name"],["menu"]],[["default"],[[[[1,"\\n "],[8,[39,14],null,[["@name","@params"],["menu",[28,[37,22],[[28,[37,7],["popover-menu-",[33,8],"-"],null],[33,23],[30,4],[30,0,["toggle","click"]]],null]]],[["default"],[[[[1,"\\n "],[18,11,[[30,6],[30,7]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[9]]]]],[1,"\\n\\n"]],[7]]]],[6]]],[1,"\\n "]],[2,3,4,5]]]]],[1,"\\n"],[13]],["&attrs","change","keypress","keypressClick","aria","components","api","toggle","menu","sub","&default"],false,["yield","aria-menu","keyboardAccess","let","hash","component","action","concat","guid","toggle-button","if","expanded","queue","ref","yield-slot","menu-panel","position","block-slot","each","-track-array","submenus","hasHeader","block-params","send"]]',moduleName:"consul-ui/components/popover-menu/index.hbs",isStrictMode:!1}) +var a=(0,t.setComponentTemplate)(o,t.default.extend(r.default,{tagName:"",dom:(0,l.inject)("dom"),expanded:!1,keyboardAccess:!0,onchange:function(){},position:"",init:function(){this._super(...arguments),this.guid=this.dom.guid(this),this.submenus=[]},willRender:function(){(0,i.set)(this,"hasHeader",this._isRegistered("header"))},actions:{addSubmenu:function(e){(0,i.set)(this,"submenus",this.submenus.concat(e))},removeSubmenu:function(e){const t=this.submenus.indexOf(e);-1!==t&&(this.submenus.splice(t,1),(0,i.set)(this,"submenus",this.submenus))},change:function(e){e.target.checked||[...this.dom.elements(`[id^=popover-menu-${this.guid}]`)].forEach((function(e){e.checked=!1})),this.onchange(e)},send:function(){this.sendAction(...arguments)}}})) +e.default=a})),define("consul-ui/components/popover-menu/menu-item/index",["exports","@ember/component","@ember/template-factory","@ember/service","@ember/object","block-slots"],(function(e,t,n,l,r,i){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const o=(0,n.createTemplateFactory)({id:"9sIg+bnI",block:'[[[1,"\\n"],[18,3,null],[1,"\\n"],[11,"li"],[24,"role","none"],[17,1],[12],[1,"\\n"],[41,[33,2],[[[1," "],[10,"label"],[15,"for",[28,[37,3],[[33,4,["confirm"]],[33,5]],null]],[14,"role","menuitem"],[14,"tabindex","-1"],[15,"onkeypress",[33,4,["keypressClick"]]],[12],[1,"\\n "],[8,[39,6],null,[["@name"],["label"]],[["default"],[[[[18,3,null]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[10,0],[14,"role","menu"],[12],[1,"\\n "],[8,[39,6],null,[["@name","@params"],["confirmation",[28,[37,7],[[50,"confirmation-alert",0,null,[["onclick","name"],[[28,[37,9],[[28,[37,10],[[30,0],[33,4,["clickTrigger"]]],null],[28,[37,10],[[30,0],[33,11]],null]],null],[28,[37,3],[[33,4,["confirm"]],[33,5]],null]]]]],null]]],[["default"],[[[[18,3,null]],[]]]]],[1,"\\n "],[13],[1,"\\n"]],[]],[[[41,[33,12],[[[44,[[28,[37,14],[[33,12],"://"],null]],[[[1," "],[10,3],[14,"role","menuitem"],[14,"tabindex","-1"],[15,"onclick",[28,[37,10],[[30,0],[33,4,["clickTrigger"]]],null]],[15,6,[36,12]],[15,"target",[52,[30,2],"_blank"]],[15,"rel",[52,[30,2],"noopener noreferrer"]],[12],[1,"\\n "],[8,[39,6],null,[["@name"],["label"]],[["default"],[[[[1,"\\n "],[18,3,null],[1,"\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n"]],[2]]]],[]],[[[10,"button"],[14,"role","menuitem"],[15,"aria-selected",[52,[33,15],"true"]],[14,"tabindex","-1"],[15,"onclick",[28,[37,9],[[28,[37,10],[[30,0],[28,[37,16],[[30,0,["onclick"]],[28,[37,17],null,null]],null]],null],[28,[37,10],[[30,0],[52,[30,0,["close"]],[33,4,["clickTrigger"]],[28,[37,17],null,null]]],null]],null]],[14,4,"button"],[12],[1,"\\n "],[8,[39,6],null,[["@name"],["label"]],[["default"],[[[[1,"\\n "],[18,3,null],[1,"\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n"]],[]]]],[]]],[13],[1,"\\n\\n"]],["&attrs","external","&default"],false,["yield","if","hasConfirmation","concat","menu","guid","yield-slot","block-params","component","queue","action","onclick","href","let","string-includes","selected","or","noop"]]',moduleName:"consul-ui/components/popover-menu/menu-item/index.hbs",isStrictMode:!1}) +var a=(0,t.setComponentTemplate)(o,t.default.extend(i.default,{tagName:"",dom:(0,l.inject)("dom"),init:function(){this._super(...arguments),this.guid=this.dom.guid(this)},didInsertElement:function(){this._super(...arguments),this.menu.addSubmenu(this.guid)},didDestroyElement:function(){this._super(...arguments),this.menu.removeSubmenu(this.guid)},willRender:function(){this._super(...arguments),(0,r.set)(this,"hasConfirmation",this._isRegistered("confirmation"))}})) +e.default=a})),define("consul-ui/components/popover-menu/menu-separator/index",["exports","@ember/component","@ember/template-factory","block-slots"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"Mhlwh5rK",block:'[[[1,"\\n"],[18,1,null],[1,"\\n"],[10,"li"],[14,"role","separator"],[12],[1,"\\n "],[8,[39,1],null,[["@name"],["label"]],[["default"],[[[[18,1,null]],[]]]]],[1,"\\n"],[13],[1,"\\n"]],["&default"],false,["yield","yield-slot"]]',moduleName:"consul-ui/components/popover-menu/menu-separator/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,t.default.extend(l.default,{tagName:""})) +e.default=i})),define("consul-ui/components/popover-select/index",["exports","@ember/component","@ember/template-factory","@ember/service","block-slots"],(function(e,t,n,l,r){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const i=(0,n.createTemplateFactory)({id:"JjNimTr5",block:'[[[1,"\\n"],[8,[39,0],[[24,0,"popover-select"],[17,1]],[["@position"],[[28,[37,1],[[33,2],"left"],null]]],[["default"],[[[[1,"\\n "],[18,6,null],[1,"\\n"],[44,[[50,"popover-select/optgroup",0,null,[["components"],[[30,2]]]],[50,"popover-select/option",0,null,[["select","components","onclick"],[[30,0],[30,2],[28,[37,6],[[28,[37,7],[[30,0],"click"],null],[52,[33,9],[28,[37,10],null,null],[30,3,["toggle"]]]],null]]]]],[[[1," "],[8,[39,11],null,[["@name"],["trigger"]],[["default"],[[[[1,"\\n "],[8,[39,12],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[18,6,[[28,[37,13],null,[["Optgroup","Option"],[[30,4],[30,5]]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,11],null,[["@name"],["menu"]],[["default"],[[[[1,"\\n "],[8,[39,12],null,[["@name"],["options"]],[["default"],[[[[1,"\\n "],[18,6,[[28,[37,13],null,[["Optgroup","Option"],[[30,4],[30,5]]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[4,5]]]],[2,3]]]]],[1,"\\n"]],["&attrs","components","menu","Optgroup","Option","&default"],false,["popover-menu","or","position","yield","let","component","pipe","action","if","multiple","noop","block-slot","yield-slot","hash"]]',moduleName:"consul-ui/components/popover-select/index.hbs",isStrictMode:!1}) +var o=(0,t.setComponentTemplate)(i,t.default.extend(r.default,{tagName:"",dom:(0,l.inject)("dom"),multiple:!1,required:!1,onchange:function(){},addOption:function(e){void 0===this._options&&(this._options=new Set),this._options.add(e)},removeOption:function(e){this._options.delete(e)},actions:{click:function(e,t){if(this.multiple){if(e.selected&&this.required){if(![...this._options].find((t=>t!==e&&t.selected)))return t}}else{if(e.selected&&this.required)return t;[...this._options].filter((t=>t!==e)).forEach((e=>{e.selected=!1}))}return e.selected=!e.selected,this.onchange(this.dom.setEventTargetProperties(t,{selected:t=>e.args.value,selectedItems:e=>[...this._options].filter((e=>e.selected)).map((e=>e.args.value)).join(",")})),t}}})) +e.default=o})),define("consul-ui/components/popover-select/optgroup/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"ErzD41Of",block:'[[[1,"\\n"],[44,[[30,1,["MenuSeparator"]]],[[[8,[30,2],null,null,[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["label"]],[["default"],[[[[1,"\\n "],[1,[30,3]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]]]]],[1,"\\n"],[18,4,null],[1,"\\n"]],[2]]]],["@components","MenuSeparator","@label","&default"],false,["let","block-slot","yield"]]',moduleName:"consul-ui/components/popover-select/optgroup/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/popover-select/option/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@glimmer/tracking","@ember/object"],(function(e,t,n,l,r,i){var o,a +function u(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const s=(0,n.createTemplateFactory)({id:"SC5oIKM/",block:'[[[1,"\\n"],[44,[[30,1,["MenuItem"]]],[[[1," "],[8,[30,2],[[16,0,[52,[30,0,["selected"]],"is-active"]],[17,3],[4,[38,3],[[30,0,["connect"]]],null],[4,[38,3],[[28,[37,4],[[30,0],"selected",[30,5]],null]],null],[4,[38,5],[[28,[37,4],[[30,0],"selected",[30,5]],null]],null],[4,[38,6],[[30,0,["disconnect"]]],null]],[["@onclick","@selected"],[[28,[37,2],[[30,0],[30,4],[30,0]],null],[30,0,["selected"]]]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@name"],["label"]],[["default"],[[[[1,"\\n "],[18,6,null],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[2]]]],["@components","MenuItem","&attrs","@onclick","@selected","&default"],false,["let","if","action","did-insert","set","did-update","will-destroy","block-slot","yield"]]',moduleName:"consul-ui/components/popover-select/option/index.hbs",isStrictMode:!1}) +let c=(o=class extends l.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="selected",l=this,(n=a)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}connect(){this.args.select.addOption(this)}disconnect(){this.args.select.removeOption(this)}},a=u(o.prototype,"selected",[r.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),u(o.prototype,"connect",[i.action],Object.getOwnPropertyDescriptor(o.prototype,"connect"),o.prototype),u(o.prototype,"disconnect",[i.action],Object.getOwnPropertyDescriptor(o.prototype,"disconnect"),o.prototype),o) +e.default=c,(0,t.setComponentTemplate)(s,c)})),define("consul-ui/components/portal-target",["exports","ember-stargate/components/portal-target"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/portal",["exports","ember-stargate/components/portal"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})) +define("consul-ui/components/power-select-multiple-with-create",["exports","ember-power-select-with-create/components/power-select-multiple-with-create"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/power-select-multiple",["exports","ember-power-select/components/power-select-multiple"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/power-select-multiple/trigger",["exports","ember-power-select/components/power-select-multiple/trigger"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/power-select-with-create",["exports","ember-power-select-with-create/components/power-select-with-create"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/power-select-with-create/suggested-option",["exports","ember-power-select-with-create/components/power-select-with-create/suggested-option"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/power-select",["exports","ember-power-select/components/power-select"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/power-select/before-options",["exports","ember-power-select/components/power-select/before-options"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/power-select/no-matches-message",["exports","ember-power-select/components/power-select/no-matches-message"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/power-select/options",["exports","ember-power-select/components/power-select/options"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/power-select/placeholder",["exports","ember-power-select/components/power-select/placeholder"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/power-select/power-select-group",["exports","ember-power-select/components/power-select/power-select-group"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/power-select/search-message",["exports","ember-power-select/components/power-select/search-message"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/power-select/trigger",["exports","ember-power-select/components/power-select/trigger"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/progress/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"v8Ti52Dh",block:'[[[1,"\\n"],[11,0],[24,0,"progress indeterminate"],[24,"role","progressbar"],[17,1],[12],[13],[1,"\\n"]],["&attrs"],false,[]]',moduleName:"consul-ui/components/progress/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/providers/dimension/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@glimmer/tracking","@ember/object","ember-ref-bucket","@ember/template"],(function(e,t,n,l,r,i,o,a){var u,s,c,d +function p(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function f(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const m=(0,n.createTemplateFactory)({id:"F2wGehPq",block:'[[[1,"\\n"],[11,0],[4,[38,0],["element"],[["debugName","bucket"],["create-ref",[30,0]]]],[4,[38,1],[[30,0,["measureDimensions"]]],null],[12],[1,"\\n "],[1,[28,[35,2],["resize",[30,0,["handleWindowResize"]]],null]],[1,"\\n "],[18,1,[[28,[37,4],null,[["data"],[[30,0,["data"]]]]]]],[1,"\\n"],[13]],["&default"],false,["create-ref","did-insert","on-window","yield","hash"]]',moduleName:"consul-ui/components/providers/dimension/index.hbs",isStrictMode:!1}) +let h=(u=(0,o.ref)("element"),s=class extends l.default{constructor(){super(...arguments),p(this,"element",c,this),p(this,"height",d,this)}get data(){const{height:e,fillRemainingHeightStyle:t}=this +return{height:e,fillRemainingHeightStyle:t}}get fillRemainingHeightStyle(){return(0,a.htmlSafe)(`height: ${this.height}px;`)}get bottomBoundary(){return document.querySelector(this.args.bottomBoundary)||this.footer}get footer(){return document.querySelector('footer[role="contentinfo"]')}measureDimensions(e){const t=this.bottomBoundary.getBoundingClientRect(),n=e.getBoundingClientRect() +this.height=t.top+t.height-n.top}handleWindowResize(){const{element:e}=this +this.measureDimensions(e)}},c=f(s.prototype,"element",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),d=f(s.prototype,"height",[r.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f(s.prototype,"measureDimensions",[i.action],Object.getOwnPropertyDescriptor(s.prototype,"measureDimensions"),s.prototype),f(s.prototype,"handleWindowResize",[i.action],Object.getOwnPropertyDescriptor(s.prototype,"handleWindowResize"),s.prototype),s) +e.default=h,(0,t.setComponentTemplate)(m,h)})),define("consul-ui/components/providers/search/index",["exports","@ember/component","@ember/template-factory","@glimmer/component"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"TiH81o1A",block:'[[[1,"\\n"],[18,1,[[28,[37,1],null,[["data"],[[30,0,["data"]]]]]]]],["&default"],false,["yield","hash"]]',moduleName:"consul-ui/components/providers/search/index.hbs",isStrictMode:!1}) +class i extends l.default{get _search(){return this.args.search||""}get items(){const{items:e,searchProperties:t}=this.args,{_search:n}=this +return n.length>0?e.filter((e=>t.reduce(((t,l)=>{const r=-1!==e[l].indexOf(n) +return r?[...t,r]:t}),[]).length>0)):e}get data(){const{items:e}=this +return{items:e}}}e.default=i,(0,t.setComponentTemplate)(r,i)})),define("consul-ui/components/radio-card/index",["exports","@ember/component","@ember/template-factory"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const l=(0,n.createTemplateFactory)({id:"UokgMRSB",block:'[[[1,"\\n"],[11,"label"],[17,1],[16,0,[29,["radio-card",[52,[33,1]," checked"]]]],[12],[1,"\\n "],[10,0],[12],[1,"\\n"],[41,[28,[37,2],[[33,3,["length"]],0],null],[[[1," "],[10,"input"],[15,3,[36,4]],[15,2,[36,3]],[15,"checked",[36,1]],[15,"onchange",[28,[37,5],[[30,0],[33,6]],null]],[14,4,"radio"],[12],[13],[1,"\\n"]],[]],[[[1," "],[10,"input"],[15,3,[36,4]],[14,2,""],[15,"checked",[36,1]],[15,"onchange",[28,[37,5],[[30,0],[33,6]],null]],[14,4,"radio"],[12],[13],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n "],[10,0],[12],[1,"\\n "],[18,2,null],[1,"\\n "],[13],[1,"\\n"],[13]],["&attrs","&default"],false,["if","checked","gt","value","name","action","onchange","yield"]]',moduleName:"consul-ui/components/radio-card/index.hbs",isStrictMode:!1}) +var r=(0,t.setComponentTemplate)(l,t.default.extend({tagName:""})) +e.default=r})),define("consul-ui/components/radio-group/index",["exports","@ember/component","@ember/template-factory","@ember/service"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"wT+5/I+/",block:'[[[1,"\\n"],[10,"fieldset"],[12],[1,"\\n "],[10,0],[14,"role","radiogroup"],[15,1,[29,["radiogroup_",[36,0]]]],[12],[1,"\\n"],[42,[28,[37,2],[[28,[37,2],[[33,3]],null]],null],null,[[[44,[[52,[28,[37,6],[[30,1,["key"]],[27]],null],[30,1,["key"]],[30,1,["value"]]],[28,[37,7],[[30,1,["label"]],[30,1,["value"]]],null]],[[[1," "],[10,"label"],[15,"tabindex",[52,[33,8],"0"]],[15,"onkeydown",[52,[33,8],[28,[37,9],[[30,0],"keydown"],null]]],[15,0,[29,["type-radio value-",[30,2]]]],[12],[1," "],[1,"\\n "],[10,"input"],[15,3,[36,0]],[15,2,[30,2]],[15,"checked",[52,[28,[37,10],[[28,[37,11],[[33,12]],null],[30,2]],null],"checked"]],[15,"onchange",[28,[37,9],[[30,0],"change"],null]],[14,4,"radio"],[12],[13],[1,"\\n "],[10,1],[12],[1,[30,3]],[13],[1,"\\n "],[13],[1,"\\n"]],[2,3]]]],[1]],null],[1," "],[13],[1,"\\n"],[13],[1,"\\n"]],["item","_key","_value"],false,["name","each","-track-array","items","let","if","not-eq","or","keyboardAccess","action","eq","concat","value"]]',moduleName:"consul-ui/components/radio-group/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,t.default.extend({tagName:"",keyboardAccess:!1,dom:(0,l.inject)("dom"),init:function(){this._super(...arguments),this.name=this.dom.guid(this)},actions:{keydown:function(e){13===e.keyCode&&e.target.dispatchEvent(new MouseEvent("click"))},change:function(e){this.onchange(this.dom.setEventTargetProperty(e,"value",(e=>""===e?void 0:e)))}}})) +e.default=i})),define("consul-ui/components/ref/index",["exports","@ember/component","@ember/object"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var l=t.default.extend({tagName:"",didReceiveAttrs:function(){(0,n.set)(this.target,this.name,this.value)}}) +e.default=l})),define("consul-ui/components/role-form/index",["exports","@ember/component","@ember/template-factory","consul-ui/components/form-component/index"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"c7JRCIgS",block:'[[[1,"\\n"],[18,2,null],[1,"\\n"],[11,"fieldset"],[24,0,"role-form"],[16,"disabled",[52,[28,[37,2],[[28,[37,3],["write role"],[["item"],[[33,4]]]]],null],"disabled"]],[17,1],[12],[1,"\\n "],[10,"label"],[15,0,[29,["type-text",[52,[33,4,["error","Name"]]," has-error"]]]],[12],[1,"\\n "],[10,1],[12],[1,"Name"],[13],[1,"\\n "],[10,"input"],[15,2,[33,4,["Name"]]],[14,3,"role[Name]"],[14,"autofocus","autofocus"],[15,"oninput",[28,[37,5],[[30,0],"change"],null]],[14,4,"text"],[12],[13],[1,"\\n "],[10,"em"],[12],[1,"\\n Maximum 256 characters. May only include letters (uppercase and/or lowercase) and/or numbers. Must be unique.\\n "],[13],[1,"\\n"],[41,[33,4,["error","Name"]],[[[1," "],[10,"strong"],[12],[1,[33,4,["error","Name","validation"]]],[13],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n "],[10,"label"],[14,0,"type-text"],[12],[1,"\\n "],[10,1],[12],[1,"Description (Optional)"],[13],[1,"\\n "],[10,"textarea"],[14,3,"role[Description]"],[15,2,[33,4,["Description"]]],[15,"oninput",[28,[37,5],[[30,0],"change"],null]],[12],[13],[1,"\\n "],[13],[1,"\\n"],[13],[1,"\\n"],[10,"fieldset"],[14,1,"policies"],[14,0,"policies"],[12],[1,"\\n "],[10,"h2"],[12],[1,"Policies"],[13],[1,"\\n"],[6,[39,6],null,[["name","params"],["policy",[28,[37,7],[[33,4]],null]]],[["default","else"],[[[[1," "],[18,2,null],[1,"\\n"]],[]],[[[1," "],[8,[39,8],null,[["@disabled","@dc","@partition","@nspace","@items"],[[28,[37,2],[[28,[37,3],["write role"],[["item"],[[33,4]]]]],null],[99,9,["@dc"]],[99,10,["@partition"]],[99,11,["@nspace"]],[33,4,["Policies"]]]],null],[1,"\\n"]],[]]]]],[13],[1,"\\n"]],["&attrs","&default"],false,["yield","if","not","can","item","action","yield-slot","block-params","policy-selector","dc","partition","nspace"]]',moduleName:"consul-ui/components/role-form/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,l.default.extend({type:"role",name:"role",classNames:["role-form"]})) +e.default=i})),define("consul-ui/components/role-selector/index",["exports","@ember/component","@ember/template-factory","consul-ui/components/child-selector/index","@ember/service","@ember/object","@ember/object/computed","consul-ui/utils/dom/event-source"],(function(e,t,n,l,r,i,o,a){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const u=(0,n.createTemplateFactory)({id:"6DJSWWjY",block:'[[[1,"\\n"],[8,[39,0],[[24,0,"role-selector"],[24,1,"new-role"]],[["@onclose","@aria"],[[28,[37,1],[[30,0],[28,[37,2],[[33,3]],null],"role"],null],[28,[37,4],null,[["label"],[[52,[28,[37,6],[[33,3],"role"],null],"New Role","New Policy"]]]]]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@target","@name","@value"],[[30,0],"modal",[30,1]]],null],[1,"\\n "],[8,[39,8],null,[["@name"],["header"]],[["default"],[[[[1,"\\n"],[41,[28,[37,6],[[33,3],"role"],null],[[[1," "],[10,"h2"],[12],[1,"New Role"],[13],[1,"\\n"]],[]],[[[1," "],[10,"h2"],[12],[1,"New Policy"],[13],[1,"\\n"]],[]]],[1," "]],[]]]]],[1,"\\n "],[8,[39,8],null,[["@name"],["body"]],[["default"],[[[[1,"\\n\\n "],[10,"input"],[15,1,[29,[[36,9],"_state_role"]]],[15,3,[29,[[36,9],"[state]"]]],[14,2,"role"],[15,"checked",[52,[28,[37,6],[[33,3],"role"],null],"checked"]],[15,"onchange",[28,[37,1],[[30,0],"change"],null]],[14,4,"radio"],[12],[13],[1,"\\n "],[8,[39,10],null,[["@form","@dc","@nspace","@partition"],[[99,11,["@form"]],[99,12,["@dc"]],[99,13,["@nspace"]],[99,14,["@partition"]]]],[["default"],[[[[1,"\\n "],[8,[39,8],null,[["@name"],["policy"]],[["default"],[[[[1,"\\n\\n "],[8,[39,15],null,[["@source","@dc","@partition","@nspace","@items"],[[99,16,["@source"]],[99,12,["@dc"]],[99,14,["@partition"]],[99,13,["@nspace"]],[33,17,["Policies"]]]],[["default"],[[[[1,"\\n "],[8,[39,8],null,[["@name"],["trigger"]],[["default"],[[[[1,"\\n "],[8,[39,18],[[24,0,"type-dialog"],[4,[38,1],[[30,0],"triggerStateCheckboxChange"],null]],[["@text","@size","@color","@icon"],["Create new policy","small","tertiary","plus"]],null],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[10,"input"],[15,1,[29,[[36,9],"_state_policy"]]],[15,3,[29,[[36,9],"[state]"]]],[14,2,"policy"],[15,"checked",[52,[28,[37,6],[[33,3],"policy"],null],"checked"]],[15,"onchange",[28,[37,1],[[30,0],"change"],null]],[14,4,"radio"],[12],[13],[1,"\\n "],[8,[39,19],null,[["@name","@form","@dc","@nspace","@partition"],["role[policy]",[99,20,["@form"]],[99,12,["@dc"]],[99,13,["@nspace"]],[99,14,["@partition"]]]],null],[1,"\\n\\n "]],[]]]]],[1,"\\n "],[8,[39,8],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n\\n "],[8,[39,21],null,null,[["default"],[[[[1,"\\n"],[41,[28,[37,6],[[33,3],"role"],null],[[[1," "],[8,[39,18],[[16,"onclick",[28,[37,22],[[30,0,["save"]],[33,17],[33,23],[28,[37,24],[[28,[37,1],[[30,0],[30,2]],null],[28,[37,1],[[30,0],"reset"],null]],null]],null]],[16,"disabled",[52,[28,[37,25],[[33,17,["isSaving"]],[33,17,["isPristine"]],[33,17,["isInvalid"]]],null],"disabled"]],[24,4,"submit"]],[["@text","@isLoading"],["Create and apply",[33,17,["isSaving"]]]],null],[1,"\\n "],[8,[39,18],[[16,"disabled",[52,[33,17,["isSaving"]],"disabled"]],[24,4,"reset"],[4,[38,26],["click",[28,[37,1],[[30,0],[28,[37,24],[[28,[37,1],[[30,0],[30,2]],null],[28,[37,1],[[30,0],"reset"],null]],null]],null]],null]],[["@text","@color"],["Cancel","secondary"]],null],[1,"\\n\\n"]],[]],[[[1," "],[8,[39,18],[[16,"disabled",[52,[28,[37,25],[[33,27,["isSaving"]],[33,27,["isPristine"]],[33,27,["isInvalid"]]],null],"disabled"]],[24,4,"submit"],[4,[38,1],[[30,0],"dispatch","save",[28,[37,28],[[33,27],[33,17,["Policies"]],[28,[37,1],[[30,0],[28,[37,2],[[33,3]],null],"role"],null]],null]],null]],[["@text","@isLoading"],["Create and apply",[33,27,["isSaving"]]]],null],[1,"\\n "],[8,[39,18],[[16,"disabled",[52,[33,27,["isSaving"]],"disabled"]],[24,4,"reset"],[4,[38,26],["click",[28,[37,1],[[30,0],[28,[37,2],[[33,3]],null],"role"],null]],null]],[["@text","@color"],["Cancel","secondary"]],null],[1,"\\n"]],[]]],[1," "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n\\n"],[8,[39,29],null,[["@disabled","@repo","@dc","@partition","@nspace","@type","@placeholder","@items"],[[99,30,["@disabled"]],[99,31,["@repo"]],[99,12,["@dc"]],[99,14,["@partition"]],[99,13,["@nspace"]],"role","Search for role",[99,23,["@items"]]]],[["default"],[[[[1,"\\n "],[8,[39,8],null,[["@name"],["label"]],[["default"],[[[[1,"\\n Apply an existing role\\n "]],[]]]]],[1,"\\n "],[8,[39,8],null,[["@name"],["create"]],[["default"],[[[[1,"\\n "],[8,[39,18],[[24,0,"type-dialog"],[4,[38,26],["click",[28,[37,32],[[30,0,["modal","open"]]],null]],null]],[["@text","@size","@color","@icon"],["Create new role","small","tertiary","plus"]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,8],null,[["@name"],["option"]],[["default"],[[[[1,"\\n "],[1,[30,3,["Name"]]],[1,"\\n "]],[3]]]]],[1,"\\n "],[8,[39,8],null,[["@name"],["set"]],[["default"],[[[[1,"\\n "],[8,[39,33],null,[["@rows","@items"],[5,[28,[37,34],["CreateTime:desc","Name:asc",[33,23]],null]]],[["default"],[[[[1,"\\n "],[8,[39,8],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"th"],[12],[1,"Name"],[13],[1,"\\n "],[10,"th"],[12],[1,"Description"],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,8],null,[["@name"],["row"]],[["default"],[[[[1,"\\n "],[10,"td"],[12],[1,"\\n "],[10,3],[15,6,[28,[37,35],["dc.acls.roles.edit",[30,4,["ID"]]],null]],[12],[1,[30,4,["Name"]]],[13],[1,"\\n "],[13],[1,"\\n "],[10,"td"],[12],[1,"\\n "],[1,[30,4,["Description"]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,8],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[8,[39,36],null,[["@expanded","@onchange","@keyboardAccess"],[[52,[28,[37,6],[[30,8],[30,6]],null],true,false],[28,[37,1],[[30,0],[30,7],[30,6]],null],false]],[["default"],[[[[1,"\\n "],[8,[39,8],null,[["@name"],["trigger"]],[["default"],[[[[1,"\\n More\\n "]],[]]]]],[1,"\\n "],[8,[39,8],null,[["@name"],["menu"]],[["default"],[[[[1,"\\n "],[10,"li"],[14,"role","none"],[12],[1,"\\n "],[10,3],[14,"role","menuitem"],[14,"tabindex","-1"],[15,6,[28,[37,35],["dc.acls.roles.edit",[30,4,["ID"]]],null]],[12],[1,"\\n"],[41,[28,[37,37],["edit role"],[["item"],[[30,4]]]],[[[1," Edit\\n"]],[]],[[[1," View\\n"]],[]]],[1," "],[13],[1,"\\n "],[13],[1,"\\n"],[41,[28,[37,38],[[33,30]],null],[[[1," "],[10,"li"],[14,"role","none"],[14,0,"dangerous"],[12],[1,"\\n "],[10,"label"],[15,"for",[30,9]],[14,"role","menuitem"],[14,"tabindex","-1"],[15,"onkeypress",[30,11]],[12],[1,"Remove"],[13],[1,"\\n "],[10,0],[14,"role","menu"],[12],[1,"\\n "],[8,[39,39],[[24,0,"warning"]],null,[["header","body","actions"],[[[[1,"\\n Confirm Remove\\n "]],[]],[[[1,"\\n "],[10,2],[12],[1,"\\n Are you sure you want to remove this role?\\n "],[13],[1,"\\n "]],[]],[[[1,"\\n "],[8,[30,12,["Action"]],[[24,0,"dangerous"]],null,[["default"],[[[[1,"\\n "],[8,[39,1],[[24,"tabindex","-1"],[4,[38,26],["click",[28,[37,1],[[30,0],[30,10],"remove",[30,4],[33,23]],null]],null]],null,[["default"],[[[[1,"\\n Remove\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,12,["Action"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@for"],[[30,9]]],[["default"],[[[[1,"\\n Cancel\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[12]]]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1," "]],[9,10,11]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6,7,8]]]]],[1,"\\n "]],[4,5]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]]]]],[1,"\\n"]],["modal","close","option","item","index","index","change","checked","confirm","send","keypressClick","Actions"],false,["modal-dialog","action","mut","state","hash","if","eq","ref","block-slot","name","role-form","form","dc","nspace","partition","policy-selector","source","item","hds/button","policy-form","policyForm","hds/button-set","perform","items","queue","or","on","policy","array","child-selector","disabled","repo","optional","tabular-collection","sort-by","href-to","popover-menu","can","not","informed-action"]]',moduleName:"consul-ui/components/role-selector/index.hbs",isStrictMode:!1}) +var s=(0,t.setComponentTemplate)(u,l.default.extend({repo:(0,r.inject)("repository/role"),dom:(0,r.inject)("dom"),name:"role",type:"role",classNames:["role-selector"],state:"role",policy:(0,o.alias)("policyForm.data"),init:function(){this._super(...arguments),(0,i.set)(this,"policyForm",this.formContainer.form("policy")),this.source=new a.CallableEventSource},actions:{reset:function(e){this._super(...arguments),this.policyForm.clear({Datacenter:this.dc})},dispatch:function(e,t){this.source.dispatchEvent({type:e,data:t})},change:function(){const e=this.dom.normalizeEvent(...arguments).target +if("role[state]"===e.name)(0,i.set)(this,"state",e.value),"policy"===e.value&&this.dom.component(".code-editor",e.nextElementSibling).didAppear() +else this._super(...arguments)},triggerStateCheckboxChange(){let e=document.getElementById(`${this.name}_state_policy`) +e&&e.dispatchEvent(new Event("change"))}}})) +e.default=s})),define("consul-ui/components/route/announcer/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"vLxKAafQ",block:'[[[1,"\\n"],[1,[28,[35,0],[[30,1]],[["separator"],[[28,[37,1],[[30,2]," - "],null]]]]],[1,"\\n"],[8,[39,2],null,[["@name"],["route-announcer"]],null],[1,"\\n\\n"]],["@title","@separator"],false,["page-title","or","portal-target"]]',moduleName:"consul-ui/components/route/announcer/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/route/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@ember/service","@ember/object","@glimmer/tracking"],(function(e,t,n,l,r,i,o){var a,u,s,c,d,p,f,m,h,b +function y(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function v(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const g=(0,n.createTemplateFactory)({id:"LX/9AVV9",block:'[[[1,"\\n"],[1,[28,[35,0],[[30,0,["connect"]]],null]],[1,"\\n"],[1,[28,[35,1],[[30,0,["disconnect"]]],null]],[1,"\\n"],[18,1,[[28,[37,3],null,[["model","params","currentName","refresh","t","exists","Title","Announcer"],[[30,0,["model"]],[30,0,["params"]],[30,0,["router","currentRoute","name"]],[30,0,["refresh"]],[30,0,["t"]],[30,0,["exists"]],[50,"route/title",0,null,null],[50,"route/announcer",0,null,null]]]]]]],["&default"],false,["did-insert","will-destroy","yield","hash","component"]]',moduleName:"consul-ui/components/route/index.hbs",isStrictMode:!1}),O=/\${([A-Za-z.0-9_-]+)}/g +let P=(a=(0,r.inject)("routlet"),u=(0,r.inject)("router"),s=(0,r.inject)("intl"),c=(0,r.inject)("encoder"),d=class extends l.default{constructor(){super(...arguments),y(this,"routlet",p,this),y(this,"router",f,this),y(this,"intl",m,this),y(this,"encoder",h,this),y(this,"_model",b,this),this.intlKey=this.encoder.createRegExpEncoder(O,(e=>e))}get params(){return this.routlet.paramsFor(this.args.name)}get model(){if(this._model)return this._model +if(this.args.name){const e=this.routlet.outletFor(this.args.name) +if(e)return this.routlet.modelFor(e.name)}}exists(e){return this.routlet.exists(`${this.args.name}.${e}`)}t(e,t){return e.includes("${")&&(e=this.intlKey(e,t)),this.intl.t(`routes.${this.args.name}.${e}`,t)}connect(){this.routlet.addRoute(this.args.name,this)}disconnect(){this.routlet.removeRoute(this.args.name,this)}},p=v(d.prototype,"routlet",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f=v(d.prototype,"router",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m=v(d.prototype,"intl",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=v(d.prototype,"encoder",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=v(d.prototype,"_model",[o.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),v(d.prototype,"exists",[i.action],Object.getOwnPropertyDescriptor(d.prototype,"exists"),d.prototype),v(d.prototype,"t",[i.action],Object.getOwnPropertyDescriptor(d.prototype,"t"),d.prototype),v(d.prototype,"connect",[i.action],Object.getOwnPropertyDescriptor(d.prototype,"connect"),d.prototype),v(d.prototype,"disconnect",[i.action],Object.getOwnPropertyDescriptor(d.prototype,"disconnect"),d.prototype),d) +e.default=P,(0,t.setComponentTemplate)(g,P)})),define("consul-ui/components/route/title/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"6zw7iO0V",block:'[[[1,"\\n"],[1,[28,[35,0],[[30,1]],[["separator"],[[30,2]]]]],[1,"\\n"],[41,[28,[37,2],[[30,3],false],null],[[[1,[30,1]],[1,"\\n"]],[]],null],[8,[39,3],null,[["@target"],["route-announcer"]],[["default"],[[[[1,"\\n"],[11,0],[24,0,"route-title"],[17,4],[24,"aria-live","assertive"],[24,"aria-atomic","true"],[12],[1,"\\n"],[1," "],[1,[28,[35,4],["Navigated to ",[30,1]],null]],[1,"\\n"],[13],[1,"\\n"]],[]]]]],[1,"\\n"]],["@title","@separator","@render","&attrs"],false,["page-title","if","not-eq","portal","concat"]]',moduleName:"consul-ui/components/route/title/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/search-bar/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@ember/object","consul-ui/components/search-bar/utils"],(function(e,t,n,l,r,i){var o +Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const a=(0,n.createTemplateFactory)({id:"ZUmE45ig",block:'[[[1,"\\n"],[11,0],[24,0,"search-bar"],[17,1],[12],[1,"\\n "],[10,"form"],[14,0,"filter-bar"],[12],[1,"\\n "],[10,0],[14,0,"search"],[12],[1,"\\n "],[18,4,[[28,[37,1],null,[["Search","Select"],[[50,"freetext-filter",0,null,null],[50,"popover-select",0,null,null]]]]]],[1,"\\n "],[13],[1,"\\n "],[10,0],[14,0,"filters"],[12],[1,"\\n "],[18,5,[[28,[37,1],null,[["Search","Select"],[[50,"freetext-filter",0,null,null],[50,"popover-select",0,null,null]]]]]],[1,"\\n "],[13],[1,"\\n "],[10,0],[14,0,"sort"],[12],[1,"\\n "],[18,6,[[28,[37,1],null,[["Search","Select"],[[50,"freetext-filter",0,null,null],[50,"popover-select",0,null,null]]]]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"],[41,[30,0,["isFiltered"]],[[[1," "],[10,0],[14,0,"search-bar-status"],[12],[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,[28,[35,4],[[28,[37,5],["component.search-bar.header"],[["default","item"],["common.ui.filtered-by",""]]]],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[10,"ul"],[12],[1,"\\n"],[42,[28,[37,7],[[28,[37,7],[[30,0,["filters"]]],null]],null],null,[[[1," "],[18,7,[[28,[37,1],null,[["RemoveFilter","status"],[[50,"search-bar/remove-filter",0,null,[["onclick"],[[28,[37,8],[[30,0],[28,[37,9],[[28,[37,9],[[30,3],[30,2,["key"]]],null],"change"],null],[28,[37,1],null,[["target"],[[28,[37,1],null,[["selectedItems"],[[28,[37,10],[[30,2,["selected"]],","],null]]]]]]]],null]]]],[28,[37,1],null,[["key","value"],[[30,2,["key"]],[28,[37,11],[[30,2,["value"]]],null]]]]]]]]],[1,"\\n"]],[2]],null],[1," "],[10,"li"],[14,0,"remove-all"],[12],[1,"\\n "],[8,[39,8],[[4,[38,12],["click",[30,0,["removeAllFilters"]]],null]],null,[["default"],[[[[1,"\\n Remove filters\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[13],[1,"\\n"]],["&attrs","filter","@filter","&search","&filter","&sort","&status"],false,["yield","hash","component","if","string-trim","t","each","-track-array","action","get","join","lowercase","on"]]',moduleName:"consul-ui/components/search-bar/index.hbs",isStrictMode:!1}) +let u=(o=class extends l.default{get isFiltered(){const e=this.args.filter.searchproperty||{default:[],value:[]} +return(0,i.diff)(e.default,e.value).length>0||Object.entries(this.args.filter).some((e=>{let[t,n]=e +return"searchproperty"!==t&&void 0!==n.value}))}get filters(){return(0,i.filters)(this.args.filter)}removeAllFilters(){Object.values(this.args.filter).forEach(((e,t)=>{setTimeout((()=>e.change(e.default||[])),1*t)}))}},s=o.prototype,c="removeAllFilters",d=[r.action],p=Object.getOwnPropertyDescriptor(o.prototype,"removeAllFilters"),f=o.prototype,m={},Object.keys(p).forEach((function(e){m[e]=p[e]})),m.enumerable=!!m.enumerable,m.configurable=!!m.configurable,("value"in m||m.initializer)&&(m.writable=!0),m=d.slice().reverse().reduce((function(e,t){return t(s,c,e)||e}),m),f&&void 0!==m.initializer&&(m.value=m.initializer?m.initializer.call(f):void 0,m.initializer=void 0),void 0===m.initializer&&(Object.defineProperty(s,c,m),m=null),o) +var s,c,d,p,f,m +e.default=u,(0,t.setComponentTemplate)(a,u)})),define("consul-ui/components/search-bar/remove-filter/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"cLgM374P",block:'[[[1,"\\n"],[10,"li"],[12],[1,"\\n "],[8,[39,0],[[17,1],[4,[38,1],["click",[30,2]],null]],null,null],[1,"\\n "],[18,3,null],[1,"\\n"],[13],[1,"\\n"]],["&attrs","@onclick","&default"],false,["action","on","yield"]]',moduleName:"consul-ui/components/search-bar/remove-filter/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/search-bar/utils",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.filters=e.diff=void 0 +const t=(e,t)=>e.filter((e=>!t.includes(e))) +e.diff=t +e.filters=e=>Object.entries(e).filter((e=>{let[n,l]=e +return"searchproperty"===n?t(l.default,l.value).length>0:(l.value||[]).length>0})).reduce(((e,n)=>{let[l,r]=n +return e.concat(r.value.map((e=>{const n={key:l,value:e} +return n.selected="searchproperty"!==l?t(r.value,[e]):1===r.value.length?r.default:t(r.value,[e]),n})))}),[])})),define("consul-ui/components/state-chart/action/index",["exports","@ember/component","@ember/template-factory"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const l=(0,n.createTemplateFactory)({id:"T5GYB6QS",block:'[[[1,"\\n"],[18,1,null]],["&default"],false,["yield"]]',moduleName:"consul-ui/components/state-chart/action/index.hbs",isStrictMode:!1}) +var r=(0,t.setComponentTemplate)(l,t.default.extend({tagName:"",didInsertElement:function(){this._super(...arguments),this.chart.addAction(this.name,((e,t)=>this.exec(e,t)))},willDestroy:function(){this._super(...arguments),this.chart.removeAction(this.type)}})) +e.default=r})),define("consul-ui/components/state-chart/guard/index",["exports","@ember/component","@ember/template-factory"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const l=(0,n.createTemplateFactory)({id:"yKKkKZDK",block:'[[[1,"\\n"],[18,1,null]],["&default"],false,["yield"]]',moduleName:"consul-ui/components/state-chart/guard/index.hbs",isStrictMode:!1}) +var r=(0,t.setComponentTemplate)(l,t.default.extend({tagName:"",didInsertElement:function(){this._super(...arguments) +const e=this +this.chart.addGuard(this.name,(function(){return"function"==typeof e.cond?e.cond(...arguments):e.cond}))},willDestroyElement:function(){this._super(...arguments),this.chart.removeGuard(this.name)}})) +e.default=r})),define("consul-ui/components/state-chart/index",["exports","@ember/component","@ember/template-factory","@ember/service","@ember/object"],(function(e,t,n,l,r){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const i=(0,n.createTemplateFactory)({id:"Vs0Hi4qP",block:'[[[1,"\\n"],[18,1,[[50,"state",0,null,[["state"],[[33,2]]]],[50,"state-chart/guard",0,null,[["chart"],[[30,0]]]],[50,"state-chart/action",0,null,[["chart"],[[30,0]]]],[28,[37,3],[[30,0],"dispatch"],null],[33,2]]]],["&default"],false,["yield","component","state","action"]]',moduleName:"consul-ui/components/state-chart/index.hbs",isStrictMode:!1}) +var o=(0,t.setComponentTemplate)(i,t.default.extend({chart:(0,l.inject)("state"),tagName:"",ontransition:function(e){},init:function(){this._super(...arguments),this._actions={},this._guards={}},didReceiveAttrs:function(){var e=this +void 0!==this.machine&&this.machine.stop(),void 0!==this.initial&&(this.src.initial=this.initial),this.machine=this.chart.interpret(this.src,{onTransition:e=>{const t=new CustomEvent("transition",{detail:e}) +this.ontransition(t),t.defaultPrevented||e.actions.forEach((t=>{"function"==typeof this._actions[t.type]&&this._actions[t.type](t.type,e.context,e.event)})),(0,r.set)(this,"state",e)},onGuard:function(t){for(var n=arguments.length,l=new Array(n>1?n-1:0),r=1;r1&&void 0!==arguments[1]?arguments[1]:{} +if(this.$tr&&(this.$tr.style.zIndex=null),t.target&&t.target.checked&&e!==this.checked){(0,r.set)(this,"checked",parseInt(e)) +const n=t.target,l=this.dom.closest("tr",n),i=this.dom.sibling(n,"div") +i.getBoundingClientRect().top+i.clientHeight>this.dom.element('footer[role="contentinfo"]').getBoundingClientRect().top?i.classList.add("above"):i.classList.remove("above"),l.style.zIndex=1,this.$tr=l}else(0,r.set)(this,"checked",null)}}})) +e.default=d})),define("consul-ui/components/tabular-details/index",["exports","@ember/component","@ember/template-factory","@ember/service","block-slots"],(function(e,t,n,l,r){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const i=(0,n.createTemplateFactory)({id:"rfQqVmFw",block:'[[[1,"\\n"],[18,4,null],[1,"\\n"],[10,"table"],[14,0,"with-details has-actions"],[12],[1,"\\n "],[10,"thead"],[12],[1,"\\n "],[10,"tr"],[12],[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[18,4,null]],[]]]]],[1,"\\n "],[10,"th"],[14,0,"actions"],[12],[1,"Actions"],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[10,"tbody"],[12],[1,"\\n"],[44,[[28,[37,3],["tabular-details-",[33,4],"-toggle-",[33,5],"_"],null]],[[[42,[28,[37,7],[[28,[37,7],[[33,8]],null]],null],null,[[[1," "],[10,"tr"],[15,"onclick",[28,[37,9],[[30,0],"click"],null]],[12],[1,"\\n "],[8,[39,1],null,[["@name"],["row"]],[["default"],[[[[18,4,[[30,2],[30,3]]]],[]]]]],[1,"\\n "],[10,"td"],[14,0,"actions"],[12],[1,"\\n "],[10,"label"],[15,"for",[28,[37,3],[[30,1],[30,3]],null]],[12],[10,1],[12],[1,"Show details"],[13],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[10,"tr"],[12],[1,"\\n "],[10,"td"],[14,"colspan","3"],[12],[1,"\\n "],[10,"input"],[15,"checked",[28,[37,10],[[28,[37,11],[[30,2,["closed"]]],null]],null]],[15,2,[30,3]],[15,3,[36,4]],[15,1,[28,[37,3],[[30,1],[30,3]],null]],[15,"onchange",[28,[37,9],[[30,0],"change",[30,2],[33,8]],null]],[14,4,"checkbox"],[12],[13],[1,"\\n "],[10,0],[12],[1,"\\n "],[10,"label"],[15,"for",[28,[37,3],[[30,1],[30,3]],null]],[12],[10,1],[12],[1,"Hide details"],[13],[13],[1,"\\n "],[10,0],[12],[1,"\\n "],[8,[39,1],null,[["@name"],["details"]],[["default"],[[[[1,"\\n "],[18,4,[[30,2],[30,3]]],[1,"\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[2,3]],null]],[1]]],[1," "],[13],[1,"\\n"],[13],[1,"\\n"]],["inputId","item","index","&default"],false,["yield","yield-slot","let","concat","name","guid","each","-track-array","items","action","not","is-empty"]]',moduleName:"consul-ui/components/tabular-details/index.hbs",isStrictMode:!1}) +var o=(0,t.setComponentTemplate)(i,t.default.extend(r.default,{dom:(0,l.inject)("dom"),onchange:function(){},init:function(){this._super(...arguments),this.guid=this.dom.guid(this)},actions:{click:function(e){this.dom.clickFirstAnchor(e)},change:function(e,t,n){this.onchange(n,e,t)}}})) +e.default=o})),define("consul-ui/components/tag-list/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"w4UdhAwF",block:'[[[1,"\\n"],[44,[[28,[37,1],[[28,[37,2],[[30,1,["Tags"]],[28,[37,3],null,null]],null],[28,[37,2],[[30,2],[28,[37,3],null,null]],null]],null]],[[[41,[28,[37,5],[[30,3,["length"]],0],null],[[[41,[48,[30,6]],[[[1," "],[18,6,[[50,"tag-list",0,null,[["item"],[[30,1]]]]]],[1,"\\n"]],[]],[[[11,"dl"],[24,0,"tag-list"],[17,4],[12],[1,"\\n "],[11,"dt"],[4,[38,9],null,null],[12],[1,"\\n "],[1,[28,[35,10],["components.tag-list.title"],[["default"],[[28,[37,3],["common.consul.tags"],null]]]]],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n"],[42,[28,[37,12],[[28,[37,12],[[30,3]],null]],null],null,[[[1," "],[10,1],[12],[1,[30,5]],[13],[1,"\\n"]],[5]],null],[1," "],[13],[1,"\\n"],[13],[1,"\\n"]],[]]]],[]],null]],[3]]]],["@item","@tags","tags","&attrs","item","&default"],false,["let","union","or","array","if","gt","has-block","yield","component","tooltip","t","each","-track-array"]]',moduleName:"consul-ui/components/tag-list/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/text-input/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"/IacsejQ",block:'[[[1,"\\n"],[8,[39,0],[[16,0,[28,[37,1],["text-input"," type-text"],null]],[17,1]],[["@item","@placeholder","@name","@label","@help","@validations","@chart"],[[30,2],[30,3],[30,4],[30,5],[30,6],[30,7],[30,8]]],[["label","input"],[[[[1,"\\n"],[1," "],[1,[28,[35,2],[[30,5],[30,4]],null]],[1,"\\n "]],[]],[[[1,"\\n"],[41,[30,9],[[[1," "],[11,"textarea"],[16,3,[30,4]],[4,[38,4],[[30,2]],[["validations","chart"],[[30,7],[30,8]]]],[4,[38,5],["input",[28,[37,6],[[30,10]],null]],null],[12],[1,[28,[35,2],[[30,11],[28,[37,7],[[30,2],[30,4]],null]],null]],[13],[1,"\\n"]],[]],[[[1," "],[11,"input"],[16,2,[28,[37,2],[[30,11],[28,[37,7],[[30,2],[30,4]],null]],null]],[16,3,[30,4]],[16,"placeholder",[28,[37,2],[[30,3]],null]],[24,4,"text"],[4,[38,4],[[30,2]],[["validations","chart"],[[30,7],[30,8]]]],[4,[38,5],["input",[28,[37,6],[[30,10]],null]],null],[12],[13],[1,"\\n"]],[]]],[1," "]],[]]]]],[1,"\\n"]],["&attrs","@item","@placeholder","@name","@label","@help","@validations","@chart","@expanded","@oninput","@value"],false,["form-input","concat","or","if","validate","on","optional","get"]]',moduleName:"consul-ui/components/text-input/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/toggle-button/index",["exports","@ember/component","@ember/template-factory","@ember/service"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"aP5ecOU9",block:'[[[1,"\\n"],[11,"input"],[17,1],[24,4,"checkbox"],[16,"checked",[52,[33,1],"checked",[27]]],[16,1,[28,[37,2],["toggle-button-",[33,3]],null]],[16,"onchange",[28,[37,4],[[30,0],"change"],null]],[4,[38,5],[[28,[37,6],[[30,0],"input"],null]],null],[12],[13],[1,"\\n"],[11,"label"],[16,"for",[28,[37,2],["toggle-button-",[33,3]],null]],[4,[38,5],[[28,[37,6],[[30,0],"label"],null]],null],[12],[1,"\\n "],[18,2,[[28,[37,8],null,[["click"],[[28,[37,4],[[30,0],"click"],null]]]]]],[1,"\\n"],[13]],["&attrs","&default"],false,["if","checked","concat","guid","action","did-insert","set","yield","hash"]]',moduleName:"consul-ui/components/toggle-button/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,t.default.extend({dom:(0,l.inject)("dom"),tagName:"",checked:!1,onchange:function(){},onblur:function(){},init:function(){this._super(...arguments),this.guid=this.dom.guid(this),this._listeners=this.dom.listeners()},willDestroyElement:function(){this._super(...arguments),this._listeners.remove()},didReceiveAttrs:function(){this._super(...arguments),this.checked?this.addClickOutsideListener():this._listeners.remove()},addClickOutsideListener:function(){this._listeners.remove(),this._listeners.add(this.dom.document(),"click",(e=>{this.dom.isOutside(this.label,e.target)&&this.dom.isOutside(this.label.nextElementSibling,e.target)&&(this.input.checked&&(this.input.checked=!1,this.onchange({target:this.input})),this._listeners.remove())}))},actions:{click:function(e){-1===(e.target.rel||"").indexOf("noopener")&&e.preventDefault(),this.input.checked=!this.input.checked,0!==e.detail&&e.target.blur(),this.actions.change.apply(this,[e])},change:function(e){this.input.checked&&this.addClickOutsideListener(),this.onchange({target:this.input})}}})) +e.default=i})),define("consul-ui/components/token-list/index",["exports","@ember/component","@ember/template-factory","block-slots"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"Y0O5hDWb",block:'[[[1,"\\n"],[18,3,null],[1,"\\n"],[41,[28,[37,2],[[33,3,["length"]],0],null],[[[1," "],[8,[39,4],[[24,0,"token-list"]],[["@rows","@items"],[5,[28,[37,5],["AccessorID:asc",[33,3]],null]]],[["default"],[[[[1,"\\n"],[41,[33,6],[[[1," "],[8,[39,7],null,[["@name"],["caption"]],[["default"],[[[[1,[34,6]]],[]]]]],[1,"\\n"]],[]],null],[1," "],[8,[39,7],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"th"],[12],[1,"AccessorID"],[13],[1,"\\n "],[10,"th"],[12],[1,"Scope"],[13],[1,"\\n "],[10,"th"],[12],[1,"Description"],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["row"]],[["default"],[[[[1,"\\n "],[10,"td"],[12],[1,"\\n "],[10,3],[15,6,[28,[37,8],["dc.acls.tokens.edit",[30,1,["AccessorID"]]],null]],[15,"target",[28,[37,9],[[33,10],""],null]],[12],[1,[28,[35,11],[[30,1,["AccessorID"]],8,false],null]],[13],[1,"\\n "],[13],[1,"\\n "],[10,"td"],[12],[1,"\\n "],[1,[52,[30,1,["Local"]],"local","global"]],[1,"\\n "],[13],[1,"\\n "],[10,"td"],[12],[1,"\\n "],[10,2],[12],[1,[30,1,["Description"]]],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[1,2]]]]],[1,"\\n"]],[]],null]],["item","index","&default"],false,["yield","if","gt","items","tabular-collection","sort-by","caption","block-slot","href-to","or","target","truncate"]]',moduleName:"consul-ui/components/token-list/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,t.default.extend(l.default,{tagName:""})) +e.default=i})),define("consul-ui/components/token-source/chart.xstate",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default={id:"token-source",initial:"idle",on:{RESTART:[{target:"secret",cond:"isSecret"},{target:"provider"}]},states:{idle:{},secret:{},provider:{on:{SUCCESS:"jwt"}},jwt:{on:{SUCCESS:"token"}},token:{}}}})),define("consul-ui/components/token-source/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@ember/object","@glimmer/tracking","consul-ui/components/token-source/chart.xstate"],(function(e,t,n,l,r,i,o){var a,u,s +function c(e,t){var n=Object.keys(e) +if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) +t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function d(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function p(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function f(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const m=(0,n.createTemplateFactory)({id:"4D3syB2X",block:'[[[1,"\\n"],[8,[39,0],null,[["@src","@initial"],[[30,0,["chart"]],[52,[28,[37,2],[[30,1],"oidc"],null],"provider","secret"]]],[["default"],[[[[1,"\\n "],[8,[30,3],null,[["@name","@cond"],["isSecret",[30,0,["isSecret"]]]],null],[1,"\\n"],[44,[[28,[37,4],["/${partition}/${nspace}/${dc}",[28,[37,5],null,[["partition","nspace","dc"],[[28,[37,6],[[30,7,["Partition"]],[30,8]],null],[28,[37,6],[[30,7,["Namespace"]],[30,9]],null],[30,10]]]]],null]],[[[1," "],[8,[30,2],null,[["@matches"],["secret"]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@src","@onchange","@onerror"],[[28,[37,4],[[28,[37,8],[[30,11],"/token/self/${value}"],null],[28,[37,5],null,[["value"],[[30,7]]]]],null],[30,0,["change"]],[30,12]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,2],null,[["@matches"],["provider"]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@src","@onchange","@onerror"],[[28,[37,4],[[28,[37,8],[[30,11],"/oidc/provider/${value}"],null],[28,[37,5],null,[["value"],[[30,7,["Name"]]]]]],null],[28,[37,9],[[28,[37,10],[[30,0],[28,[37,11],[[30,0,["provider"]]],null]],[["value"],["data"]]],[28,[37,10],[[30,0],[30,5],"SUCCESS"],null]],null],[30,12]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,2],null,[["@matches"],["jwt"]],[["default"],[[[[1,"\\n "],[8,[39,12],null,[["@src","@onchange","@onerror"],[[30,0,["provider","AuthURL"]],[28,[37,9],[[28,[37,10],[[30,0],[28,[37,11],[[30,0,["jwt"]]],null]],[["value"],["data"]]],[28,[37,10],[[30,0],[30,5],"SUCCESS"],null]],null],[30,12]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,2],null,[["@matches"],["token"]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@src","@onchange","@onerror"],[[28,[37,4],[[28,[37,8],[[30,11],"/oidc/authorize/${provider}/${code}/${state}"],null],[28,[37,5],null,[["provider","code","state"],[[30,0,["provider","Name"]],[30,0,["jwt","authorizationCode"]],[28,[37,6],[[30,0,["jwt","authorizationState"]],""],null]]]]],null],[30,0,["change"]],[30,12]]],null],[1,"\\n "]],[]]]]],[1,"\\n"]],[11]]]],[2,3,4,5,6]]]]]],["@type","State","Guard","Action","dispatch","state","@value","@partition","@nspace","@dc","path","@onerror"],false,["state-chart","if","eq","let","uri","hash","or","data-source","concat","queue","action","mut","jwt-source"]]',moduleName:"consul-ui/components/token-source/index.hbs",isStrictMode:!1}) +let h=(a=class extends l.default{constructor(){super(...arguments),d(this,"provider",u,this),d(this,"jwt",s,this),this.chart=o.default}isSecret(){return"secret"===this.args.type}change(e){e.data.toJSON=function(){return function(e){for(var t=1;t{const n=parseFloat(t.getTotalLength()),l=t.getPointAtLength(Math.ceil(n/3)) +return{id:t.id,x:Math.round(l.x-e.x),y:Math.round(l.y-e.y)}}))}},s=p(u.prototype,"iconPositions",[r.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),c=p(u.prototype,"dom",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p(u.prototype,"getIconPositions",[i.action],Object.getOwnPropertyDescriptor(u.prototype,"getIconPositions"),u.prototype),u) +e.default=m,(0,t.setComponentTemplate)(f,m)})),define("consul-ui/components/topology-metrics/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@glimmer/tracking","@ember/object","@ember/service"],(function(e,t,n,l,r,i,o){var a,u,s,c,d,p,f,m,h,b,y +function v(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function g(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const O=(0,n.createTemplateFactory)({id:"iumWc6H2",block:'[[[1,"\\n"],[11,0],[24,0,"topology-container consul-topology-metrics"],[4,[38,0],[[30,0,["calculate"]]],null],[12],[1,"\\n"],[41,[28,[37,2],[[30,0,["downstreams","length"]],0],null],[[[1," "],[11,0],[24,1,"downstream-container"],[4,[38,3],[[30,0,["setHeight"]],"downstream-lines"],null],[4,[38,4],[[30,0,["setHeight"]],"downstream-lines",[30,0,["downstreams"]]],null],[12],[1,"\\n"],[41,[28,[37,5],[[30,0,["emptyColumn"]]],null],[[[1," "],[10,0],[12],[1,"\\n "],[10,2],[12],[1,[30,1,["Name"]]],[13],[1,"\\n "],[10,1],[12],[1,"\\n "],[8,[39,6],null,null,[["default"],[[[[1,"\\n Only showing downstreams within the current datacenter for "],[1,[30,2,["Service","Service"]]],[1,".\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[42,[28,[37,8],[[28,[37,8],[[30,0,["downstreams"]]],null]],null],null,[[[1," "],[8,[39,9],null,[["@nspace","@dc","@service","@item","@hasMetricsProvider","@noMetricsReason"],[[30,4],[30,1,["Name"]],[30,2,["Service"]],[30,3],[30,5],[30,0,["noMetricsReason"]]]],[["default"],[[[[1,"\\n"],[41,[28,[37,10],[[30,5],[30,0,["mainNotIngressService"]],[28,[37,11],[[30,3,["Kind"]],"ingress-gateway"],null],[30,0,["mainNotAPIGatewayService"]],[28,[37,11],[[30,3,["Kind"]],"api-gateway"],null]],null],[[[1," "],[8,[39,12],null,[["@nspace","@partition","@dc","@endpoint","@service","@item","@noMetricsReason"],[[28,[37,13],[[30,3,["Namespace"]],"default"],null],[28,[37,13],[[30,3,["Partition"]],"default"],null],[30,3,["Datacenter"]],"downstream-summary-for-service",[30,2,["Service","Service"]],[30,3,["Name"]],[30,0,["noMetricsReason"]]]],null],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n"]],[3]],null],[1," "],[13],[1,"\\n"]],[]],null],[1," "],[10,0],[14,1,"metrics-container"],[12],[1,"\\n "],[10,0],[14,0,"metrics-header"],[12],[1,"\\n "],[1,[30,2,["Service","Service"]]],[1,"\\n "],[13],[1,"\\n"],[41,[28,[37,5],[[28,[37,10],[[28,[37,14],[[30,2,["Service","Meta","external-source"]],"consul-api-gateway"],null],[28,[37,14],[[30,2,["Service","Kind"]],"ingress-gateway"],null]],null]],null],[[[41,[30,5],[[[1," "],[8,[39,15],null,[["@nspace","@partition","@dc","@service","@protocol","@noMetricsReason"],[[28,[37,13],[[30,2,["Service","Namespace"]],"default"],null],[28,[37,13],[[33,16,["Service","Partition"]],"default"],null],[30,1,["Name"]],[30,2,["Service","Service"]],[30,6,["Protocol"]],[30,0,["noMetricsReason"]]]],null],[1,"\\n"],[41,[28,[37,13],[[28,[30,0,["mainNotIngressService"]],null,null],[28,[30,0,["mainNotAPIGatewayService"]],null,null]],null],[[[1," "],[8,[39,12],null,[["@nspace","@partition","@dc","@endpoint","@service","@protocol","@noMetricsReason"],[[28,[37,13],[[30,2,["Service","Namespace"]],"default"],null],[28,[37,13],[[33,16,["Service","Partition"]],"default"],null],[30,1,["Name"]],"summary-for-service",[30,2,["Service","Service"]],[30,6,["Protocol"]],[30,0,["noMetricsReason"]]]],null],[1,"\\n"]],[]],null]],[]],null],[1," "],[10,0],[14,0,"link"],[12],[1,"\\n"],[41,[30,7],[[[1," "],[10,3],[14,0,"metrics-link"],[15,6,[30,7]],[14,"target","_blank"],[14,"rel","noopener noreferrer"],[12],[1,"Open dashboard"],[13],[1,"\\n"]],[]],[[[1," "],[10,3],[14,0,"config-link"],[15,6,[29,[[28,[37,17],["CONSUL_DOCS_URL"],null],"/connect/observability/ui-visualization"]]],[14,"target","_blank"],[14,"rel","noopener noreferrer"],[12],[1,"Configure dashboard"],[13],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n "],[10,0],[14,1,"downstream-lines"],[12],[1,"\\n "],[8,[39,18],null,[["@type","@service","@view","@center","@lines","@items","@oncreate"],["downstream",[30,2],[30,0,["downView"]],[30,0,["centerDimensions"]],[30,0,["downLines"]],[30,0,["downstreams"]],[28,[37,19],[[30,0],[30,8]],null]]],null],[1,"\\n "],[13],[1,"\\n"],[41,[28,[37,2],[[30,0,["upstreams","length"]],0],null],[[[1," "],[10,0],[14,1,"upstream-column"],[12],[1,"\\n"],[42,[28,[37,20],[[28,[37,21],["PeerOrDatacenter",[30,0,["upstreams"]]],null]],null],null,[[[1," "],[11,0],[24,1,"upstream-container"],[4,[38,3],[[30,0,["setHeight"]],"upstream-lines"],null],[4,[38,4],[[30,0,["setHeight"]],"upstream-lines",[30,0,["upstreams"]]],null],[12],[1,"\\n"],[41,[30,10],[[[1," "],[10,2],[12],[1,[30,10]],[13],[1,"\\n"]],[]],null],[42,[28,[37,8],[[28,[37,8],[[30,9]],null]],null],null,[[[1," "],[8,[39,9],null,[["@dc","@item","@service"],[[30,1,["Name"]],[30,11],[30,2,["Service"]]]],[["default"],[[[[1,"\\n"],[41,[28,[37,10],[[30,5],[30,0,["mainNotIngressService"]],[28,[37,11],[[30,11,["Kind"]],"ingress-gateway"],null]],null],[[[1," "],[8,[39,12],null,[["@nspace","@partition","@dc","@endpoint","@service","@item","@noMetricsReason"],[[28,[37,13],[[30,11,["Namespace"]],"default"],null],[28,[37,13],[[30,11,["Partition"]],"default"],null],[30,11,["Datacenter"]],"upstream-summary-for-service",[30,2,["Service","Service"]],[30,11,["Name"]],[30,0,["noMetricsReason"]]]],null],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n"]],[11]],null],[1," "],[13],[1,"\\n"]],[9,10]],null],[1," "],[13],[1,"\\n"]],[]],null],[1," "],[10,0],[14,1,"upstream-lines"],[12],[1,"\\n "],[8,[39,22],null,[["@type","@service","@view","@center","@lines","@items","@oncreate"],["upstream",[30,2],[30,0,["upView"]],[30,0,["centerDimensions"]],[30,0,["upLines"]],[30,0,["upstreams"]],[28,[37,19],[[30,0],[30,8]],null]]],null],[1,"\\n "],[13],[1,"\\n"],[13],[1,"\\n"]],["@dc","@service","item","@nspace","@hasMetricsProvider","@topology","@metricsHref","@oncreate","upstreams","dc","item"],false,["on-resize","if","gt","did-insert","did-update","not","tooltip","each","-track-array","topology-metrics/card","and","not-eq","topology-metrics/stats","or","eq","topology-metrics/series","service","env","topology-metrics/down-lines","action","-each-in","group-by","topology-metrics/up-lines"]]',moduleName:"consul-ui/components/topology-metrics/index.hbs",isStrictMode:!1}) +let P=(a=(0,o.inject)("env"),u=(0,o.inject)(),s=class extends l.default{constructor(){super(...arguments),v(this,"env",c,this),v(this,"abilities",d,this),v(this,"centerDimensions",p,this),v(this,"downView",f,this),v(this,"downLines",m,this),v(this,"upView",h,this),v(this,"upLines",b,this),v(this,"noMetricsReason",y,this)}drawDownLines(e){const t=["allow","deny"],n={x:this.centerDimensions.x-7,y:this.centerDimensions.y+this.centerDimensions.height/2} +return e.map((e=>{const t=e.getBoundingClientRect(),l={x:t.x+t.width,y:t.y+t.height/2} +return{id:e.id,permission:e.getAttribute("data-permission"),dest:n,src:l}})).sort(((e,n)=>t.indexOf(e.permission)-t.indexOf(n.permission)))}drawUpLines(e){const t=["allow","deny"],n={x:this.centerDimensions.x+5.5,y:this.centerDimensions.y+this.centerDimensions.height/2} +return e.map((e=>{const t=e.getBoundingClientRect(),l={x:t.x-t.width-25,y:t.y+t.height/2} +return{id:e.id,permission:e.getAttribute("data-permission"),dest:l,src:n}})).sort(((e,n)=>t.indexOf(e.permission)-t.indexOf(n.permission)))}emptyColumn(){const e=(0,i.get)(this.args.topology,"noDependencies") +return!this.env.var("CONSUL_ACLS_ENABLED")||e}get downstreams(){const e=(0,i.get)(this.args.topology,"Downstreams")||[],t=[...e],n=(0,i.get)(this.args.topology,"noDependencies") +if(!this.env.var("CONSUL_ACLS_ENABLED")&&n)t.push({Name:"Downstreams unknown.",Empty:!0,Datacenter:"",Namespace:""}) +else if(0===e.length){const e=this.abilities.can("use peers") +t.push({Name:e?"No downstreams, or the downstreams are imported services.":"No downstreams.",Datacenter:"",Namespace:""})}return t}get upstreams(){const e=(0,i.get)(this.args.topology,"Upstreams")||[] +e.forEach((e=>{e.PeerOrDatacenter=e.PeerName||e.Datacenter})) +const t=[...e],n=(0,i.get)(this.args.dc,"DefaultACLPolicy"),l=(0,i.get)(this.args.topology,"wildcardIntention"),r=(0,i.get)(this.args.topology,"noDependencies") +return!this.env.var("CONSUL_ACLS_ENABLED")&&r?t.push({Name:"Upstreams unknown.",Datacenter:"",PeerOrDatacenter:"",Namespace:""}):"allow"===n||l?t.push({Name:"* (All Services)",Datacenter:"",PeerOrDatacenter:"",Namespace:""}):0===e.length&&t.push({Name:"No upstreams.",Datacenter:"",PeerOrDatacenter:"",Namespace:""}),t}get mainNotIngressService(){return"ingress-gateway"!==((0,i.get)(this.args.service.Service,"Kind")||"")}get mainNotAPIGatewayService(){return"api-gateway"!==((0,i.get)(this.args.service.Service,"Kind")||"")}setHeight(e,t){if(e){const n=e.getBoundingClientRect() +document.getElementById(`${t[0]}`).setAttribute("style",`height:${n.height}px`)}this.calculate()}calculate(){this.args.isRemoteDC?this.noMetricsReason="remote-dc":"ingress-gateway"===this.args.service.Service.Kind?this.noMetricsReason="ingress-gateway":this.noMetricsReason=null +const e=document.getElementById("downstream-lines").getBoundingClientRect(),t=document.getElementById("upstream-lines").getBoundingClientRect(),n=document.getElementById("upstream-column") +this.emptyColumn?this.downView={x:e.x,y:e.y,width:e.width,height:e.height+10}:this.downView=e,n&&(this.upView={x:t.x,y:t.y,width:t.width,height:n.getBoundingClientRect().height+10}) +const l=[...document.querySelectorAll("#downstream-container .topology-metrics-card")],r=document.querySelector(".metrics-header"),i=[...document.querySelectorAll("#upstream-column .topology-metrics-card")] +this.centerDimensions=r.getBoundingClientRect(),this.downLines=this.drawDownLines(l),this.upLines=this.drawUpLines(i)}},c=g(s.prototype,"env",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),d=g(s.prototype,"abilities",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p=g(s.prototype,"centerDimensions",[r.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f=g(s.prototype,"downView",[r.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m=g(s.prototype,"downLines",[r.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return[]}}),h=g(s.prototype,"upView",[r.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=g(s.prototype,"upLines",[r.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return[]}}),y=g(s.prototype,"noMetricsReason",[r.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),g(s.prototype,"setHeight",[i.action],Object.getOwnPropertyDescriptor(s.prototype,"setHeight"),s.prototype),g(s.prototype,"calculate",[i.action],Object.getOwnPropertyDescriptor(s.prototype,"calculate"),s.prototype),s) +e.default=P,(0,t.setComponentTemplate)(O,P)})),define("consul-ui/components/topology-metrics/notifications/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"Qfu6ZA1U",block:'[[[1,"\\n"],[41,[28,[37,1],[[30,1],"create"],null],[[[41,[28,[37,1],[[30,2],"success"],null],[[[1," Your intention has been added.\\n"]],[]],[[[1," There was an error adding your intention.\\n"]],[]]]],[]],[[[41,[28,[37,1],[[30,1],"update"],null],[[[41,[28,[37,1],[[30,2],"success"],null],[[[1," Your intention has been saved.\\n"]],[]],[[[1," There was an error saving your intention.\\n"]],[]]]],[]],null]],[]]],[44,[[30,3,["errors","firstObject"]]],[[[41,[30,4,["detail"]],[[[1," "],[10,"br"],[12],[13],[1,[28,[35,3],["(",[52,[30,4,["status"]],[28,[37,3],[[30,4,["status"]],": "],null]],[30,4,["detail"]],")"],null]],[1,"\\n"]],[]],null]],[4]]],[1,"\\n"]],["@type","@status","@error","error"],false,["if","eq","let","concat"]]',moduleName:"consul-ui/components/topology-metrics/notifications/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/topology-metrics/popover/index",["exports","@ember/component","@ember/template-factory","@glimmer/component"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"IUnHpfA3",block:'[[[1,"\\n"],[11,0],[16,0,[29,["topology-metrics-popover ",[30,1]]]],[17,2],[12],[1,"\\n"],[44,[[28,[37,1],["top:",[30,3,["y"]],"px;left:",[30,3,["x"]],"px;"],null],[52,[28,[37,3],[[30,1],"deny"],null],"Add intention","View intention"]],[[[41,[28,[37,4],[[30,6]],null],[[[41,[28,[37,3],[[30,1],"deny"],null],[[[1," "],[8,[39,5],[[24,0,"dangerous"],[4,[38,6],[[28,[37,7],[[30,0],"popover"],null]],null]],null,[["header","body","actions"],[[[[1,"\\n "],[10,"h3"],[12],[1,"\\n "],[1,[28,[35,8],["components.consul.topology-metrics.popover.deny.header"],null]],[1,"\\n "],[13],[1,"\\n "]],[]],[[[1,"\\n "],[10,2],[12],[1,"\\n"],[41,[30,7,["Intention","HasExact"]],[[[1," "],[1,[28,[35,8],["components.consul.topology-metrics.popover.deny.body.isExact"],null]],[1,"\\n"]],[]],[[[1," "],[1,[28,[35,8],["components.consul.topology-metrics.popover.deny.body.notExact"],null]],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n "]],[]],[[[1,"\\n "],[8,[30,8,["Action"]],[[24,0,"action"]],null,[["default"],[[[[1,"\\n "],[11,"button"],[24,4,"button"],[4,[38,9],["click",[30,9]],null],[12],[1,"\\n"],[41,[30,7,["Intention","HasExact"]],[[[1," "],[1,[28,[35,8],["components.consul.topology-metrics.popover.deny.action.isExact"],null]],[1,"\\n"]],[]],[[[1," "],[1,[28,[35,8],["components.consul.topology-metrics.popover.deny.action.notExact"],null]],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,8,["Action"]],null,null,[["default"],[[[[1,"\\n "],[11,"button"],[24,0,"cancel"],[24,4,"button"],[4,[38,9],["click",[28,[37,10],[[28,[37,11],[[30,0,["popoverController","hide"]]],null]],null]],null],[12],[1,"\\n Cancel\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[8]]]]],[1,"\\n"]],[]],[[[41,[28,[37,3],[[30,1],"not-defined"],null],[[[1," "],[8,[39,5],[[24,0,"warning documentation"],[4,[38,6],[[28,[37,7],[[30,0],"popover"],null]],null]],null,[["header","body","actions"],[[[[1,"\\n "],[10,"h3"],[12],[1,"\\n "],[1,[28,[35,8],["components.consul.topology-metrics.popover.not-defined.header"],null]],[1,"\\n "],[13],[1,"\\n "]],[]],[[[1,"\\n "],[10,2],[12],[1,"\\n "],[1,[28,[35,8],["components.consul.topology-metrics.popover.not-defined.body"],[["downstream","upstream"],[[30,7,["Name"]],[30,10,["Name"]]]]]],[1,"\\n "],[13],[1,"\\n "]],[]],[[[1,"\\n "],[8,[30,11,["Action"]],[[24,0,"action"]],null,[["default"],[[[[1,"\\n "],[10,3],[15,6,[29,[[28,[37,12],["CONSUL_DOCS_URL"],null],"/connect/registration/service-registration#upstreams"]]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[1,"\\n "],[1,[28,[35,8],["components.consul.topology-metrics.popover.not-defined.action"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,11,["Action"]],null,null,[["default"],[[[[1,"\\n "],[11,"button"],[24,0,"cancel"],[24,4,"button"],[4,[38,9],["click",[28,[37,10],[[28,[37,11],[[30,0,["popoverController","hide"]]],null]],null]],null],[12],[1,"\\n Close\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[11]]]]],[1,"\\n"]],[]],[[[1," "],[8,[39,5],[[24,0,"info"],[4,[38,6],[[28,[37,7],[[30,0],"popover"],null]],null]],null,[["header","body","actions"],[[[[1,"\\n "],[10,"h3"],[12],[1,"\\n "],[1,[28,[35,8],["components.consul.topology-metrics.popover.l7.header"],null]],[1,"\\n "],[13],[1,"\\n "]],[]],[[[1,"\\n "],[10,2],[12],[1,"\\n "],[1,[28,[35,8],["components.consul.topology-metrics.popover.l7.body"],null]],[1,"\\n "],[13],[1,"\\n "]],[]],[[[1,"\\n "],[8,[30,12,["Action"]],[[24,0,"action"]],null,[["default"],[[[[1,"\\n "],[10,3],[15,6,[28,[37,13],["dc.services.show.intentions.edit",[28,[37,1],[[30,7,["Intention","ID"]]],null]],null]],[12],[1,"\\n "],[1,[28,[35,8],["components.consul.topology-metrics.popover.l7.action"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,12,["Action"]],null,null,[["default"],[[[[1,"\\n "],[11,"button"],[24,0,"cancel"],[24,4,"button"],[4,[38,9],["click",[28,[37,10],[[28,[37,11],[[30,0,["popoverController","hide"]]],null]],null]],null],[12],[1,"\\n Close\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[12]]]]],[1,"\\n "]],[]]]],[]]],[1," "],[11,"button"],[23,5,[30,4]],[16,"aria-label",[30,5]],[24,4,"button"],[4,[38,14],[[30,0,["popover"]]],[["options","returns"],[[28,[37,15],null,[["theme","placement"],["square-tail","bottom-start"]]],[28,[37,7],[[30,0],"popoverController"],null]]]],[4,[38,9],["click",[28,[37,10],[[28,[37,11],[[30,0,["popoverController","show"]]],null]],null]],null],[12],[1,"\\n "],[13],[1,"\\n"]],[]],[[[1," "],[11,"button"],[23,5,[30,4]],[16,"aria-label",[30,5]],[24,4,"button"],[4,[38,16],[true],null],[12],[1,"\\n "],[13],[1,"\\n"]],[]]]],[4,5]]],[13],[1,"\\n"]],["@type","&attrs","@position","style","label","@disabled","@item","Actions","@oncreate","@service","Actions","Actions"],false,["let","concat","if","eq","not","informed-action","did-insert","set","t","on","fn","optional","env","href-to","with-overlay","hash","disabled"]]',moduleName:"consul-ui/components/topology-metrics/popover/index.hbs",isStrictMode:!1}) +class i extends l.default{}e.default=i,(0,t.setComponentTemplate)(r,i)})),define("consul-ui/components/topology-metrics/series/index",["exports","@ember/component","@ember/template-factory","dayjs","dayjs/plugin/calendar","d3-selection","d3-scale","d3-scale-chromatic","d3-shape","d3-array","@ember/object"],(function(e,t,n,l,r,i,o,a,u,s,c){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const d=(0,n.createTemplateFactory)({id:"ICVZQmrA",block:'[[[1,"\\n"],[41,[28,[37,1],[[30,1]],null],[[[1," "],[8,[39,2],null,[["@src","@onchange","@onerror"],[[28,[37,3],["/${partition}/${nspace}/${dc}/metrics/summary-for-service/${service}/${protocol}",[28,[37,4],null,[["nspace","partition","dc","service","protocol"],[[30,2],[30,3],[30,4],[30,5],[30,6]]]]],null],[28,[37,5],[[30,0],"change"],null],[28,[37,5],[[30,0],[28,[37,6],[[33,7]],null]],[["value"],["error"]]]]],null],[1,"\\n"]],[]],null],[1,"\\n"],[1,[28,[35,8],["resize",[28,[37,5],[[30,0],"redraw"],null]],null]],[1,"\\n"],[1,[28,[35,9],[[28,[37,5],[[30,0],"redraw"],null]],null]],[1,"\\n\\n"],[41,[28,[37,1],[[33,10]],null],[[[41,[33,11,["labels"]],[[[1," "],[11,3],[24,0,"sparkline-key-link"],[4,[38,12],["click",[28,[37,13],[[30,0,["modal","open"]]],null]],null],[12],[1,"\\n Key\\n "],[13],[1,"\\n"]],[]],null]],[]],null],[1,"\\n"],[10,0],[14,0,"sparkline-wrapper"],[12],[1,"\\n "],[10,0],[14,0,"tooltip"],[12],[1,"\\n "],[10,0],[14,0,"sparkline-time"],[12],[1,"Timestamp"],[13],[1,"\\n "],[13],[1,"\\n"],[41,[33,10],[[[1," "],[8,[39,14],null,[["@noMetricsReason","@error"],[[30,1],[99,7,["@error"]]]],null],[1,"\\n"]],[]],null],[1," "],[10,"svg"],[14,0,"sparkline"],[12],[13],[1,"\\n"],[13],[1,"\\n\\n"],[8,[39,15],[[24,0,"sparkline-key"]],[["@aria"],[[28,[37,4],null,[["label"],["Metrics Key"]]]]],[["default"],[[[[1,"\\n "],[8,[39,16],null,[["@target","@name","@value"],[[30,0],"modal",[30,7]]],null],[1,"\\n "],[8,[39,17],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h3"],[12],[1,"Metrics Key"],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,17],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,0],[14,0,"sparkline-key-content"],[12],[1,"\\n "],[10,2],[12],[1,"This key describes the metrics corresponding to the graph tooltip labels in more detail."],[13],[1,"\\n "],[10,"dl"],[12],[1,"\\n"],[42,[28,[37,19],[[33,11,["labels"]]],null],null,[[[1," "],[10,"dt"],[12],[1,[30,9]],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,8]],[13],[1,"\\n"]],[8,9]],null],[1," "],[13],[1,"\\n"],[41,[51,[33,11,["labels"]]],[[[1," "],[10,1],[14,0,"no-data"],[12],[1,"No metrics loaded."],[13],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,17],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[10,"button"],[14,0,"type-cancel"],[15,"onclick",[28,[37,5],[[30,0],[30,7,["close"]]],null]],[14,4,"button"],[12],[1,"\\n Close\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[7]]]]]],["@noMetricsReason","@nspace","@partition","@dc","@service","@protocol","modal","desc","label"],false,["if","not","data-source","uri","hash","action","mut","error","on-window","did-insert","empty","data","on","optional","topology-metrics/status","modal-dialog","ref","block-slot","each","-each-in","unless"]]',moduleName:"consul-ui/components/topology-metrics/series/index.hbs",isStrictMode:!1}) +l.default.extend(r.default) +var p=(0,t.setComponentTemplate)(d,t.default.extend({data:null,empty:!1,actions:{redraw:function(e){this.drawGraphs()},change:function(e){this.set("data",e.data.series),this.drawGraphs(),this.rerender()}},drawGraphs:function(){if(!this.data)return void(0,c.set)(this,"empty",!0) +let e=this.svg=(0,i.select)(this.element.querySelector("svg.sparkline")) +e.on("mouseover mousemove mouseout",null),e.selectAll("path").remove(),e.selectAll("rect").remove() +let t=e.node().getBoundingClientRect(),n=t.width,l=t.height,r=this.data||{},d=r.data||[],p=r.labels||{},f=r.unitSuffix||"",m=Object.keys(p).filter((e=>"Total"!=e)) +if(0==d.length||0==m.length)return void(0,c.set)(this,"empty",!0);(0,c.set)(this,"empty",!1) +let h=(0,u.stack)().keys(m).order(u.stackOrderReverse)(d),b=d.map((e=>{let t=0 +return m.forEach((n=>{t+=e[n]})),t})),y=(0,o.scaleTime)().domain((0,s.extent)(d,(e=>e.time))).range([0,n]),v=(0,o.scaleLinear)().domain([0,(0,s.max)(b)]).range([l,0]),g=(0,u.area)().x((e=>y(e.data.time))).y1((e=>v(e[0]))).y0((e=>v(e[1]))),O=["#DCE0E6","#C73445"].concat(a.schemeTableau10) +m.includes("Outbound")&&(O=["#DCE0E6","#0E40A3"].concat(a.schemeTableau10)) +let P=(0,o.scaleOrdinal)(O).domain(m) +e.selectAll("path").data(h).join("path").attr("fill",(e=>{let{key:t}=e +return P(t)})).attr("stroke",(e=>{let{key:t}=e +return P(t)})).attr("d",g) +let w=e.append("rect").attr("class","cursor").style("visibility","hidden").attr("width",1).attr("height",l).attr("x",0).attr("y",0),x=(0,i.select)(this.element.querySelector(".tooltip")) +for(var j of(x.selectAll(".sparkline-tt-legend").remove(),x.selectAll(".sparkline-tt-sum").remove(),m)){let e=x.append("div").attr("class","sparkline-tt-legend") +e.append("div").attr("class","sparkline-tt-legend-color").style("background-color",P(j)),e.append("span").text(j).append("span").attr("class","sparkline-tt-legend-value")}let _=x.selectAll(".sparkline-tt-legend-value") +m.length>1&&x.append("div").attr("class","sparkline-tt-sum").append("span").text("Total").append("span").attr("class","sparkline-tt-sum-value") +let S=this +e.on("mouseover",(function(e){x.style("visibility","visible"),w.style("visibility","visible"),S.updateTooltip(e,d,h,b,f,y,x,_,w)})).on("mousemove",(function(e){S.updateTooltip(e,d,h,b,f,y,x,_,w)})).on("mouseout",(function(e){x.style("visibility","hidden"),w.style("visibility","hidden")}))},willDestroyElement:function(){this._super(...arguments),void 0!==this.svg&&this.svg.on("mouseover mousemove mouseout",null)},updateTooltip:function(e,t,n,r,o,a,u,c,d){let[p]=(0,i.pointer)(e) +d.attr("x",p) +let m=a.invert(p) +var h=(0,s.bisector)((function(e){return e.time})).left +let b=h(t,m) +var y +u.style("left",p-22+"px").select(".sparkline-time").text((y=m,(0,l.default)(y).calendar(null,{sameDay:"[Today at] h:mm:ss A",lastDay:"[Yesterday at] h:mm:ss A",lastWeek:"[Last] dddd at h:mm:ss A",sameElse:"MMM DD at h:mm:ss A"}))),u.select(".sparkline-tt-sum-value").text(`${f(r[b])}${o}`),c.nodes().forEach(((e,t)=>{let l=n[t][b][1]-n[t][b][0];(0,i.select)(e).text(`${f(l)}${o}`)})),d.attr("x",p)}})) +function f(e){return e<1e3?Number.isInteger(e)?""+e:Number(e>=100?e.toPrecision(3):e<1?e.toFixed(2):e.toPrecision(2)):e>=1e3&&e<1e6?+(e/1e3).toPrecision(3)+"k":e>=1e6&&e<1e9?+(e/1e6).toPrecision(3)+"m":e>=1e9&&e<1e12?+(e/1e9).toPrecision(3)+"g":e>=1e12?+(e/1e12).toFixed(0)+"t":void 0}e.default=p})),define("consul-ui/components/topology-metrics/source-type/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"gRMRAVqf",block:'[[[1,"\\n"],[11,1],[24,0,"topology-metrics-source-type"],[4,[38,0],[[28,[37,1],[[28,[37,2],["components.consul.topology-metrics.source-type.",[30,1],".tooltip"],null]],null]],null],[12],[1,"\\n "],[1,[28,[35,1],[[28,[37,2],["components.consul.topology-metrics.source-type.",[30,1],".text"],null]],null]],[1,"\\n"],[13]],["@source"],false,["tooltip","t","concat"]]',moduleName:"consul-ui/components/topology-metrics/source-type/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/topology-metrics/stats/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@glimmer/tracking","@ember/object"],(function(e,t,n,l,r,i){var o,a,u +function s(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function c(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const d=(0,n.createTemplateFactory)({id:"hkoroSIm",block:'[[[1,"\\n"],[41,[28,[37,1],[[30,1]],null],[[[1," "],[8,[39,2],null,[["@src","@onchange","@onerror"],[[28,[37,3],["/${partition}/${nspace}/${dc}/metrics/${endpoint}/${service}/${protocol}",[28,[37,4],null,[["nspace","partition","dc","endpoint","service","protocol"],[[30,2],[30,3],[30,4],[30,5],[30,6],[28,[37,5],[[30,7],""],null]]]]],null],[28,[37,6],[[30,0],"statsUpdate"],null],[28,[37,6],[[30,0],[28,[37,7],[[33,8]],null]],[["value"],["error"]]]]],null],[1,"\\n"]],[]],null],[1,"\\n"],[11,0],[17,8],[24,0,"topology-metrics-stats"],[12],[1,"\\n"],[41,[33,9],[[[42,[28,[37,11],[[28,[37,11],[[33,12]],null]],null],null,[[[1," "],[11,"dl"],[4,[38,13],[[30,9,["desc"]]],[["options"],[[28,[37,4],null,[["allowHTML"],[true]]]]]],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n "],[1,[30,9,["value"]]],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[30,9,["label"]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[9]],[[[1," "],[10,1],[12],[1,"No Metrics Available"],[13],[1,"\\n"]],[]]]],[]],[[[1," "],[8,[39,14],null,[["@noMetricsReason","@error"],[[30,1],[99,8,["@error"]]]],null],[1,"\\n"]],[]]],[13]],["@noMetricsReason","@nspace","@partition","@dc","@endpoint","@service","@protocol","&attrs","stat"],false,["if","not","data-source","uri","hash","or","action","mut","error","hasLoaded","each","-track-array","stats","tooltip","topology-metrics/status"]]',moduleName:"consul-ui/components/topology-metrics/stats/index.hbs",isStrictMode:!1}) +let p=(o=class extends l.default{constructor(){super(...arguments),s(this,"stats",a,this),s(this,"hasLoaded",u,this)}statsUpdate(e){if("summary-for-service"==this.args.endpoint)this.stats=e.data.stats +else{let t=this.args.nspace||"" +0===t.length&&(t="default") +let n=`${this.args.item}.${t}.${this.args.dc}` +this.stats=e.data.stats[n]}this.stats=(this.stats||[]).slice(0,4),this.hasLoaded=!0}},a=c(o.prototype,"stats",[r.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),u=c(o.prototype,"hasLoaded",[r.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return!1}}),c(o.prototype,"statsUpdate",[i.action],Object.getOwnPropertyDescriptor(o.prototype,"statsUpdate"),o.prototype),o) +e.default=p,(0,t.setComponentTemplate)(d,p)})),define("consul-ui/components/topology-metrics/status/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"sKBKTTRI",block:'[[[1,"\\n"],[41,[28,[37,1],[[30,1],[30,2]],null],[[[1," "],[10,1],[14,0,"topology-metrics-status-error"],[12],[1,"\\n"],[41,[28,[37,2],[[30,1],"ingress-gateway"],null],[[[1," "],[1,[28,[35,3],["components.consul.topology-metrics.status.ingress-gateway"],null]],[1,"\\n"]],[]],[[[41,[28,[37,2],[[30,1],"remote-dc"],null],[[[1," "],[1,[28,[35,3],["components.consul.topology-metrics.status.error"],null]],[1,"\\n "],[11,1],[4,[38,4],[[28,[37,3],["components.consul.topology-metrics.status.remote-dc"],null]],null],[12],[13],[1,"\\n"]],[]],[[[41,[30,2],[[[1," "],[1,[28,[35,3],["components.consul.topology-metrics.status.error"],null]],[1,"\\n "]],[]],null]],[]]]],[]]],[1," "],[13],[1,"\\n"]],[]],[[[1," "],[10,1],[14,0,"topology-metrics-status-loader"],[12],[1,[28,[35,3],["components.consul.topology-metrics.status.loading"],null]],[13],[1,"\\n"]],[]]]],["@noMetricsReason","@error"],false,["if","or","eq","t","tooltip"]]',moduleName:"consul-ui/components/topology-metrics/status/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/components/topology-metrics/up-lines/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@glimmer/tracking","@ember/object","@ember/service"],(function(e,t,n,l,r,i,o){var a,u,s,c +function d(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function p(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const f=(0,n.createTemplateFactory)({id:"F6bhXeuI",block:'[[[1,"\\n"],[41,[28,[37,1],[[30,1,["length"]],0],null],[[[1," "],[11,"svg"],[16,"viewBox",[28,[37,2],[[30,2,["x"]]," ",[30,3,["y"]]," ",[30,3,["width"]]," ",[30,3,["height"]]],null]],[24,"preserveAspectRatio","none"],[4,[38,3],[[30,0,["getIconPositions"]]],null],[4,[38,4],[[30,0,["getIconPositions"]],[30,1]],null],[12],[1,"\\n "],[10,"defs"],[12],[1,"\\n "],[10,"marker"],[15,1,[28,[37,2],[[30,0,["guid"]],"-allow-dot"],null]],[14,0,"allow-dot"],[14,"viewBox","-2 -2 15 15"],[14,"refX","6"],[14,"refY","6"],[14,"markerWidth","6"],[14,"markerHeight","6"],[12],[1,"\\n "],[10,"circle"],[14,"cx","6"],[14,"cy","6"],[14,"r","6"],[12],[13],[1,"\\n "],[13],[1,"\\n "],[10,"marker"],[15,1,[28,[37,2],[[30,0,["guid"]],"-allow-arrow"],null]],[14,0,"allow-arrow"],[14,"viewBox","-1 -1 12 12"],[14,"refX","5"],[14,"refY","5"],[14,"markerWidth","6"],[14,"markerHeight","6"],[14,"orient","auto-start-reverse"],[12],[1,"\\n "],[10,"polygon"],[14,"points","0 0 10 5 0 10"],[12],[13],[1,"\\n "],[13],[1,"\\n "],[10,"marker"],[15,1,[28,[37,2],[[30,0,["guid"]],"-deny-dot"],null]],[14,0,"deny-dot"],[14,"viewBox","-2 -2 15 15"],[14,"refX","6"],[14,"refY","6"],[14,"markerWidth","6"],[14,"markerHeight","6"],[12],[1,"\\n "],[10,"circle"],[14,"cx","6"],[14,"cy","6"],[14,"r","6"],[12],[13],[1,"\\n "],[13],[1,"\\n "],[10,"marker"],[15,1,[28,[37,2],[[30,0,["guid"]],"-deny-arrow"],null]],[14,0,"deny-arrow"],[14,"viewBox","-1 -1 12 12"],[14,"refX","5"],[14,"refY","5"],[14,"markerWidth","6"],[14,"markerHeight","6"],[14,"orient","auto-start-reverse"],[12],[1,"\\n "],[10,"polygon"],[14,"points","0 0 10 5 0 10"],[12],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"],[42,[28,[37,6],[[28,[37,6],[[30,1]],null]],null],null,[[[41,[28,[37,7],[[30,4,["permission"]],"deny"],null],[[[1," "],[10,"path"],[15,1,[28,[37,2],[[30,0,["guid"]],[30,4,["id"]]],null]],[15,"d",[28,[37,8],[[30,4,["dest"]]],[["src"],[[30,4,["src"]]]]]],[15,"marker-start",[28,[37,2],["url(#",[30,0,["guid"]],"-deny-dot)"],null]],[15,"marker-end",[28,[37,2],["url(#",[30,0,["guid"]],"-deny-arrow)"],null]],[15,"data-permission",[30,4,["permission"]]],[12],[13],[1,"\\n"]],[]],[[[1," "],[10,"path"],[15,1,[28,[37,2],[[30,0,["guid"]],[30,4,["id"]]],null]],[15,"d",[28,[37,8],[[30,4,["dest"]]],[["src"],[[30,4,["src"]]]]]],[15,"marker-start",[28,[37,2],["url(#",[30,0,["guid"]],"-allow-dot)"],null]],[15,"marker-end",[28,[37,2],["url(#",[30,0,["guid"]],"-allow-arrow)"],null]],[15,"data-permission",[30,4,["permission"]]],[12],[13],[1,"\\n"]],[]]]],[4]],null],[1," "],[13],[1,"\\n"]],[]],null],[42,[28,[37,6],[[28,[37,6],[[30,5]],null]],null],null,[[[41,[28,[37,9],[[28,[37,10],[[30,6,["Datacenter"]],""],null],[28,[37,11],[[28,[37,12],[[30,6,["Intention","Allowed"]]],null],[30,6,["Intention","HasPermissions"]]],null]],null],[[[1," "],[8,[39,13],null,[["@type","@position","@item","@disabled","@oncreate"],[[52,[30,6,["Intention","HasPermissions"]],"l7","deny"],[28,[37,14],["id",[28,[37,2],[[30,0,["guid"]],[30,6,["Namespace"]],[30,6,["Name"]]],null],[30,0,["iconPositions"]]],null],[30,6],false,[28,[37,15],[[30,0],[30,7],[30,8],[30,6]],null]]],null],[1,"\\n"]],[]],null]],[6]],null]],["@lines","@center","@view","line","@items","item","@oncreate","@service"],false,["if","gt","concat","did-insert","did-update","each","-track-array","eq","svg-curve","and","not-eq","or","not","topology-metrics/popover","find-by","action"]]',moduleName:"consul-ui/components/topology-metrics/up-lines/index.hbs",isStrictMode:!1}) +let m=(a=(0,o.inject)("dom"),u=class extends l.default{constructor(){super(...arguments),d(this,"iconPositions",s,this),d(this,"dom",c,this)}get guid(){return this.dom.guid(this)}getIconPositions(){const e=this.args.center,t=this.args.view,n=[...document.querySelectorAll("#upstream-lines path")] +this.iconPositions=n.map((n=>{const l=parseFloat(n.getTotalLength()),r=n.getPointAtLength(Math.ceil(.666*l)) +return{id:n.id,x:Math.round(r.x-e.x),y:Math.round(r.y-t.y)}}))}},s=p(u.prototype,"iconPositions",[r.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),c=p(u.prototype,"dom",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p(u.prototype,"getIconPositions",[i.action],Object.getOwnPropertyDescriptor(u.prototype,"getIconPositions"),u.prototype),u) +e.default=m,(0,t.setComponentTemplate)(f,m)})),define("consul-ui/components/torii-iframe-placeholder",["exports","torii/components/torii-iframe-placeholder"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=t.default +e.default=n})),define("consul-ui/components/vertical-collection",["exports","@html-next/vertical-collection/components/vertical-collection/component"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/watcher/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@ember/object","@glimmer/tracking","@ember/runloop","@ember/service"],(function(e,t,n,l,r,i,o,a){var u,s,c,d +function p(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function f(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const m=(0,n.createTemplateFactory)({id:"jSQtkZfW",block:'[[[1,"\\n"],[18,1,[[28,[37,1],null,[["fns"],[[28,[37,1],null,[["start","stop"],[[30,0,["start"]],[30,0,["stop"]]]]]]]]]],[1,"\\n"]],["&default"],false,["yield","hash"]]',moduleName:"consul-ui/components/watcher/index.hbs",isStrictMode:!1}) +let h=(u=class extends l.default{constructor(){super(...arguments),p(this,"env",s,this),p(this,"_isPolling",c,this),p(this,"cancel",d,this)}get timeout(){return this.isTesting?300:this.args.timeout||1e4}get isTesting(){return"testing"===this.env.var("environment")}get isPolling(){const{isTesting:e,_isPolling:t}=this +return!e&&t}start(){this._isPolling=!0,this.watchTask()}stop(){this._isPolling=!1,(0,o.cancel)(this.cancel)}watchTask(){const e=(0,o.later)(this,(()=>{var e,t +null===(e=(t=this.args).watch)||void 0===e||e.call(t),this.isPolling&&this.watchTask()}),this.timeout) +this.cancel=e}},s=f(u.prototype,"env",[a.inject],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),c=f(u.prototype,"_isPolling",[i.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return!1}}),d=f(u.prototype,"cancel",[i.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),f(u.prototype,"start",[r.action],Object.getOwnPropertyDescriptor(u.prototype,"start"),u.prototype),f(u.prototype,"stop",[r.action],Object.getOwnPropertyDescriptor(u.prototype,"stop"),u.prototype),u) +e.default=h,(0,t.setComponentTemplate)(m,h)})),define("consul-ui/components/yield-slot",["exports","block-slots/components/yield-slot"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/yield/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.createTemplateFactory)({id:"OlSTyydz",block:'[[[1,"\\n"],[18,1,null],[1,"\\n"]],["&default"],false,["yield"]]',moduleName:"consul-ui/components/yield/index.hbs",isStrictMode:!1}) +var i=(0,t.setComponentTemplate)(r,(0,l.default)()) +e.default=i})),define("consul-ui/controllers/_peered-resource",["exports","@ember/controller","@ember/service"],(function(e,t,n){var l,r +Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let i=(l=class extends t.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="abilities",l=this,(n=r)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}get _searchProperties(){const{searchProperties:e}=this +return this.abilities.can("use peers")?e:e.filter((e=>"PeerName"!==e))}},o=l.prototype,a="abilities",u=[n.inject],s={configurable:!0,enumerable:!0,writable:!0,initializer:null},d={},Object.keys(s).forEach((function(e){d[e]=s[e]})),d.enumerable=!!d.enumerable,d.configurable=!!d.configurable,("value"in d||d.initializer)&&(d.writable=!0),d=u.slice().reverse().reduce((function(e,t){return t(o,a,e)||e}),d),c&&void 0!==d.initializer&&(d.value=d.initializer?d.initializer.call(c):void 0,d.initializer=void 0),void 0===d.initializer&&(Object.defineProperty(o,a,d),d=null),r=d,l) +var o,a,u,s,c,d +e.default=i})),define("consul-ui/controllers/application",["exports","@ember/service","@ember/controller","@ember/application","@ember/object","consul-ui/utils/routing/transitionable"],(function(e,t,n,l,r,i){var o,a,u,s,c,d,p +function f(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function m(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let h=(o=(0,t.inject)("router"),a=(0,t.inject)("store"),u=(0,t.inject)("feedback"),s=class extends n.default{constructor(){super(...arguments),f(this,"router",c,this),f(this,"store",d,this),f(this,"feedback",p,this)}reauthorize(e){this.feedback.execute((()=>{this.store.invalidate() +const t={} +if(e.data){const n=e.data +if(void 0!==this.nspace){const e=(0,r.get)(n,"Namespace")||this.nspace.Name +e!==this.nspace.Name&&(t.nspace=`${e}`)}}const n=(0,l.getOwner)(this),o=this.router.currentRoute.name,a=n.lookup(`route:${o}`) +return n.lookup("route:application").refresh().promise.catch((function(e){})).then((e=>o!==this.router.currentRouteName||void 0!==t.nspace?a.transitionTo(...(0,i.default)(this.router.currentRoute,t,n)):e))}),e.type,(function(e,t){return e}),{})}},c=m(s.prototype,"router",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),d=m(s.prototype,"store",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p=m(s.prototype,"feedback",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m(s.prototype,"reauthorize",[r.action],Object.getOwnPropertyDescriptor(s.prototype,"reauthorize"),s.prototype),s) +e.default=h})),define("consul-ui/controllers/dc/acls/policies/create",["exports","consul-ui/controllers/dc/acls/policies/edit"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class n extends t.default{}e.default=n})) +define("consul-ui/controllers/dc/acls/policies/edit",["exports","@ember/service","@ember/controller"],(function(e,t,n){var l,r,i +Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let o=(l=(0,t.inject)("form"),r=class extends n.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="builder",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}init(){super.init(...arguments),this.form=this.builder.form("policy")}setProperties(e){super.setProperties(Object.keys(e).reduce(((e,t,n)=>{if("item"===t)e[t]=this.form.setData(e[t]).getData() +return e}),e))}},a=r.prototype,u="builder",s=[l],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},p={},Object.keys(c).forEach((function(e){p[e]=c[e]})),p.enumerable=!!p.enumerable,p.configurable=!!p.configurable,("value"in p||p.initializer)&&(p.writable=!0),p=s.slice().reverse().reduce((function(e,t){return t(a,u,e)||e}),p),d&&void 0!==p.initializer&&(p.value=p.initializer?p.initializer.call(d):void 0,p.initializer=void 0),void 0===p.initializer&&(Object.defineProperty(a,u,p),p=null),i=p,r) +var a,u,s,c,d,p +e.default=o})),define("consul-ui/controllers/dc/acls/roles/create",["exports","consul-ui/controllers/dc/acls/roles/edit"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class n extends t.default{}e.default=n})),define("consul-ui/controllers/dc/acls/roles/edit",["exports","@ember/service","@ember/controller"],(function(e,t,n){var l,r,i +Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let o=(l=(0,t.inject)("form"),r=class extends n.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="builder",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}init(){super.init(...arguments),this.form=this.builder.form("role")}setProperties(e){super.setProperties(Object.keys(e).reduce(((e,t,n)=>{if("item"===t)e[t]=this.form.setData(e[t]).getData() +return e}),e))}},a=r.prototype,u="builder",s=[l],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},p={},Object.keys(c).forEach((function(e){p[e]=c[e]})),p.enumerable=!!p.enumerable,p.configurable=!!p.configurable,("value"in p||p.initializer)&&(p.writable=!0),p=s.slice().reverse().reduce((function(e,t){return t(a,u,e)||e}),p),d&&void 0!==p.initializer&&(p.value=p.initializer?p.initializer.call(d):void 0,p.initializer=void 0),void 0===p.initializer&&(Object.defineProperty(a,u,p),p=null),i=p,r) +var a,u,s,c,d,p +e.default=o})),define("consul-ui/controllers/dc/acls/tokens/create",["exports","consul-ui/controllers/dc/acls/tokens/edit"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class n extends t.default{}e.default=n})),define("consul-ui/controllers/dc/acls/tokens/edit",["exports","@ember/controller","@ember/service"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var l=t.default.extend({dom:(0,n.inject)("dom"),builder:(0,n.inject)("form"),isScoped:!1,init:function(){this._super(...arguments),this.form=this.builder.form("token")},setProperties:function(e){this._super(Object.keys(e).reduce(((e,t,n)=>{if("item"===t)e[t]=this.form.setData(e[t]).getData() +return e}),e))},actions:{change:function(e,t,n){const l=this.dom.normalizeEvent(e,t),r=this.form +try{r.handleEvent(l)}catch(i){throw l.target.name,i}}}}) +e.default=l})),define("consul-ui/controllers/dc/nodes/index",["exports","consul-ui/controllers/_peered-resource"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class n extends t.default{}e.default=n})),define("consul-ui/controllers/dc/peers/index",["exports","@ember/controller","@ember/service"],(function(e,t,n){var l,r +function i(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let o=(l=class extends t.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="router",l=this,(n=r)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0}),i(this,"redirectToPeerShow",((e,t)=>{null==e||e(),this.router.transitionTo("dc.peers.show",t.Name)}))}},a=l.prototype,u="router",s=[n.inject],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},p={},Object.keys(c).forEach((function(e){p[e]=c[e]})),p.enumerable=!!p.enumerable,p.configurable=!!p.configurable,("value"in p||p.initializer)&&(p.writable=!0),p=s.slice().reverse().reduce((function(e,t){return t(a,u,e)||e}),p),d&&void 0!==p.initializer&&(p.value=p.initializer?p.initializer.call(d):void 0,p.initializer=void 0),void 0===p.initializer&&(Object.defineProperty(a,u,p),p=null),r=p,l) +var a,u,s,c,d,p +e.default=o})),define("consul-ui/controllers/dc/peers/show/exported",["exports","@ember/controller","@glimmer/tracking","@ember/object"],(function(e,t,n,l){var r,i +function o(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let u=(r=class extends t.default{constructor(){var e,t,n,l +super(...arguments),o(this,"queryParams",{search:{as:"filter"}}),e=this,t="search",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}updateSearch(e){this.search=e}},i=a(r.prototype,"search",[n.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return""}}),a(r.prototype,"updateSearch",[l.action],Object.getOwnPropertyDescriptor(r.prototype,"updateSearch"),r.prototype),r) +e.default=u})),define("consul-ui/controllers/dc/peers/show/index",["exports","@ember/controller","@ember/service","@ember/object"],(function(e,t,n,l){var r,i +function o(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let a=(r=class extends t.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="router",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}transitionToImported(){this.router.replaceWith("dc.peers.show.imported")}},i=o(r.prototype,"router",[n.inject],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),o(r.prototype,"transitionToImported",[l.action],Object.getOwnPropertyDescriptor(r.prototype,"transitionToImported"),r.prototype),r) +e.default=a})),define("consul-ui/controllers/dc/services/index",["exports","consul-ui/controllers/_peered-resource"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class n extends t.default{}e.default=n})),define("consul-ui/controllers/dc/services/instance/healthchecks",["exports","@ember/controller","@ember/object"],(function(e,t,n){var l +function r(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let i=(r((l=class extends t.default{syntheticNodeSearchPropertyFilter(e,t){var n +return!(null!==(n=e.Node.Meta)&&void 0!==n&&n["synthetic-node"]&&"Node"===t)}syntheticNodeHealthCheckFilter(e,t,n,l){var r +return!(null!==(r=e.Node.Meta)&&void 0!==r&&r["synthetic-node"]&&"node"===(null==t?void 0:t.Kind))}}).prototype,"syntheticNodeSearchPropertyFilter",[n.action],Object.getOwnPropertyDescriptor(l.prototype,"syntheticNodeSearchPropertyFilter"),l.prototype),r(l.prototype,"syntheticNodeHealthCheckFilter",[n.action],Object.getOwnPropertyDescriptor(l.prototype,"syntheticNodeHealthCheckFilter"),l.prototype),l) +e.default=i})),define("consul-ui/data-adapter",["exports","@ember-data/debug"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/decorators/data-source",["exports","@ember/debug","wayfarer"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.match=e.default=void 0 +const l=(0,n.default)(),r={} +e.default=e=>(n,i,o)=>((0,t.runInDebug)((()=>{r[e]={cls:n,method:i}})),l.on(e,(function(e,t,l){const r=t.lookup("service:container").get(n) +return t=>o.value.apply(r,[e,t,l])})),o) +e.match=e=>l.match(e),(0,t.runInDebug)((()=>{window.DataSourceRoutes=()=>{const e=window.ConsulUi.__container__.lookup("service:container"),t=window.open("","_blank") +t.document.write(`\n\n
      \n${Object.entries(r).map((t=>{let[n,l]=t,r=e.keyForClass(l.cls).split("/").pop()
      +return r=r.split("-").map((e=>`${e[0].toUpperCase()}${e.substr(1)}`)).join(""),`${n}\n      ${r}Repository.${l.method}(params)\n\n`})).join("")}\n  
      \n\n `),t.focus()}}))})),define("consul-ui/decorators/replace",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.replace=e.nullValue=e.default=void 0 +const t=(e,t)=>(n,l,r)=>({get:function(){const n=r.get.apply(this,arguments) +return n===e?t:n},set:function(){return r.set.apply(this,arguments)}}) +e.replace=t +e.nullValue=function(e){return t(null,e)} +var n=t +e.default=n})),define("consul-ui/env",["exports","consul-ui/config/environment","consul-ui/utils/get-environment"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.env=void 0 +const l=(0,n.default)(t.default,window,document) +e.env=l})),define("consul-ui/filter/predicates/auth-method",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default={kind:{kubernetes:(e,t)=>e.Type===t,jwt:(e,t)=>e.Type===t,oidc:(e,t)=>e.Type===t},source:{local:(e,t)=>e.TokenLocality===t,global:(e,t)=>e.TokenLocality===t}}})),define("consul-ui/filter/predicates/health-check",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default={status:{passing:(e,t)=>e.Status===t,warning:(e,t)=>e.Status===t,critical:(e,t)=>e.Status===t},kind:{service:(e,t)=>e.Kind===t,node:(e,t)=>e.Kind===t},check:{serf:(e,t)=>e.Type===t,script:(e,t)=>e.Type===t,http:(e,t)=>e.Type===t,tcp:(e,t)=>e.Type===t,ttl:(e,t)=>e.Type===t,docker:(e,t)=>e.Type===t,grpc:(e,t)=>e.Type===t,alias:(e,t)=>e.Type===t}}})),define("consul-ui/filter/predicates/intention",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default={access:{allow:(e,t)=>e.Action===t,deny:(e,t)=>e.Action===t,"app-aware":(e,t)=>void 0===e.Action}}})),define("consul-ui/filter/predicates/kv",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default={kind:{folder:(e,t)=>e.isFolder,key:(e,t)=>!e.isFolder}}})),define("consul-ui/filter/predicates/node",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default={status:{passing:(e,t)=>e.Status===t,warning:(e,t)=>e.Status===t,critical:(e,t)=>e.Status===t},version:(e,t)=>{for(const n of t)if(e.Version.includes(n+"."))return!0 +return!1}}})),define("consul-ui/filter/predicates/peer",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default={state:{pending:(e,t)=>e.State.toLowerCase()===t,establishing:(e,t)=>e.State.toLowerCase()===t,active:(e,t)=>e.State.toLowerCase()===t,failing:(e,t)=>e.State.toLowerCase()===t,terminated:(e,t)=>e.State.toLowerCase()===t,deleting:(e,t)=>e.State.toLowerCase()===t}}})),define("consul-ui/filter/predicates/policy",["exports","mnemonist/set"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n={kind:{"global-management":(e,t)=>e.isGlobalManagement,standard:(e,t)=>!e.isGlobalManagement},datacenter:(e,n)=>void 0===e.Datacenters||t.default.intersectionSize(n,new Set(e.Datacenters))>0} +e.default=n})),define("consul-ui/filter/predicates/service-instance",["exports","mnemonist/set"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n={status:{passing:(e,t)=>e.Status===t,warning:(e,t)=>e.Status===t,critical:(e,t)=>e.Status===t,empty:(e,t)=>0===e.ServiceChecks.length},source:(e,n)=>0!==t.default.intersectionSize(n,new Set(e.ExternalSources||[]))} +e.default=n})),define("consul-ui/filter/predicates/service",["exports","mnemonist/set"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n={kind:{"api-gateway":(e,t)=>e.Kind===t,"ingress-gateway":(e,t)=>e.Kind===t,"terminating-gateway":(e,t)=>e.Kind===t,"mesh-gateway":(e,t)=>e.Kind===t,service:(e,t)=>!e.Kind,"in-mesh":(e,t)=>e.InMesh,"not-in-mesh":(e,t)=>!e.InMesh},status:{passing:(e,t)=>e.MeshStatus===t,warning:(e,t)=>e.MeshStatus===t,critical:(e,t)=>e.MeshStatus===t,empty:(e,t)=>0===e.MeshChecksTotal,unknown:e=>e.peerIsFailing||e.isZeroCountButPeered},instance:{registered:(e,t)=>e.InstanceCount>0,"not-registered":(e,t)=>0===e.InstanceCount},source:(e,n)=>{let l=!1 +return n.includes("consul")&&(l=!e.ExternalSources||0===e.ExternalSources.length||1===e.ExternalSources.length&&""===e.ExternalSources[0]||e.PeerName),0!==t.default.intersectionSize(n,new Set(e.ExternalSources||[]))||n.includes(e.Partition)||l}} +e.default=n})),define("consul-ui/filter/predicates/token",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default={kind:{"global-management":(e,t)=>e.isGlobalManagement,global:(e,t)=>!e.Local,local:(e,t)=>e.Local}}})),define("consul-ui/flash/object",["exports","ember-cli-flash/flash/object"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/formats",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default={time:{hhmmss:{hour:"numeric",minute:"numeric",second:"numeric"}},date:{hhmmss:{hour:"numeric",minute:"numeric",second:"numeric"}},number:{compact:{notation:"compact"},EUR:{style:"currency",currency:"EUR",minimumFractionDigits:2,maximumFractionDigits:2},USD:{style:"currency",currency:"USD",minimumFractionDigits:2,maximumFractionDigits:2}}}})),define("consul-ui/forms/intention",["exports","consul-ui/validations/intention","consul-ui/utils/form/builder"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.default,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:l +return i(n,{}).setValidators(r)} +const l=(0,n.default)()})),define("consul-ui/forms/kv",["exports","consul-ui/validations/kv","consul-ui/utils/form/builder"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.default,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:l +return i(n,{}).setValidators(r)} +const l=(0,n.default)()})),define("consul-ui/forms/policy",["exports","consul-ui/validations/policy","consul-ui/utils/form/builder"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"policy",r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.default,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:l +return i(n,{Datacenters:{type:"array"}}).setValidators(r)} +const l=(0,n.default)()})) +define("consul-ui/forms/role",["exports","consul-ui/validations/role","consul-ui/utils/form/builder"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"role",r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.default,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:l +return i(n,{}).setValidators(r).add(e.form("policy"))} +const l=(0,n.default)()})),define("consul-ui/forms/token",["exports","consul-ui/validations/token","consul-ui/utils/form/builder"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.default,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:l +return i(n,{}).setValidators(r).add(e.form("policy")).add(e.form("role"))} +const l=(0,n.default)()})),define("consul-ui/helpers/-element",["exports","ember-element-helper/helpers/-element"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/abs",["exports","ember-math-helpers/helpers/abs"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"abs",{enumerable:!0,get:function(){return t.abs}}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/acos",["exports","ember-math-helpers/helpers/acos"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"acos",{enumerable:!0,get:function(){return t.acos}}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/acosh",["exports","ember-math-helpers/helpers/acosh"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"acosh",{enumerable:!0,get:function(){return t.acosh}}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/add",["exports","ember-math-helpers/helpers/add"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"add",{enumerable:!0,get:function(){return t.add}}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/adopt-styles",["exports","@ember/component/helper","@ember/debug","@lit/reactive-element"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class r extends t.default{compute(e,t){let[n,r]=e +Array.isArray(r)||(r=[r]),(0,l.adoptStyles)(n,r)}}e.default=r})),define("consul-ui/helpers/and",["exports","ember-truth-helpers/helpers/and"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"and",{enumerable:!0,get:function(){return t.and}}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/app-version",["exports","@ember/component/helper","consul-ui/config/environment","ember-cli-app-version/utils/regexp"],(function(e,t,n,l){function r(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} +const r=n.default.APP.version +let i=t.versionOnly||t.hideSha,o=t.shaOnly||t.hideVersion,a=null +return i&&(t.showExtended&&(a=r.match(l.versionExtendedRegExp)),a||(a=r.match(l.versionRegExp))),o&&(a=r.match(l.shaRegExp)),a?a[0]:r}Object.defineProperty(e,"__esModule",{value:!0}),e.appVersion=r,e.default=void 0 +var i=(0,t.helper)(r) +e.default=i})),define("consul-ui/helpers/append",["exports","ember-composable-helpers/helpers/append"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"append",{enumerable:!0,get:function(){return t.append}}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/array-concat",["exports","ember-array-fns/helpers/array-concat"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"arrayConcat",{enumerable:!0,get:function(){return t.arrayConcat}}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/array-every",["exports","ember-array-fns/helpers/array-every"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"arrayEvery",{enumerable:!0,get:function(){return t.arrayEvery}}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/array-filter",["exports","ember-array-fns/helpers/array-filter"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"arrayFilter",{enumerable:!0,get:function(){return t.arrayFilter}}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/array-find-index",["exports","ember-array-fns/helpers/array-find-index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"arrayFindIndex",{enumerable:!0,get:function(){return t.arrayFindIndex}}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/array-find",["exports","ember-array-fns/helpers/array-find"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"arrayFind",{enumerable:!0,get:function(){return t.arrayFind}}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/array-includes",["exports","ember-array-fns/helpers/array-includes"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"arrayIncludes",{enumerable:!0,get:function(){return t.arrayIncludes}}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/array-index-of",["exports","ember-array-fns/helpers/array-index-of"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"arrayIndexOf",{enumerable:!0,get:function(){return t.arrayIndexOf}}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/array-is-array",["exports","ember-array-fns/helpers/array-is-array"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"arrayIsArray",{enumerable:!0,get:function(){return t.arrayIsArray}}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/array-is-first-element",["exports","ember-array-fns/helpers/array-is-first-element"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"arrayIsFirstElement",{enumerable:!0,get:function(){return t.arrayIsFirstElement}}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/array-is-last-element",["exports","ember-array-fns/helpers/array-is-last-element"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"arrayIsLastElement",{enumerable:!0,get:function(){return t.arrayIsLastElement}}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/array-join",["exports","ember-array-fns/helpers/array-join"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"arrayJoin",{enumerable:!0,get:function(){return t.arrayJoin}}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/array-last-index-of",["exports","ember-array-fns/helpers/array-last-index-of"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"arrayLastIndexOf",{enumerable:!0,get:function(){return t.arrayLastIndexOf}}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/array-map",["exports","ember-array-fns/helpers/array-map"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"arrayMap",{enumerable:!0,get:function(){return t.arrayMap}}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/array-reduce",["exports","ember-array-fns/helpers/array-reduce"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"arrayReduce",{enumerable:!0,get:function(){return t.arrayReduce}}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/array-reverse",["exports","ember-array-fns/helpers/array-reverse"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"arrayReverse",{enumerable:!0,get:function(){return t.arrayReverse}}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/array-slice",["exports","ember-array-fns/helpers/array-slice"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"arraySlice",{enumerable:!0,get:function(){return t.arraySlice}}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/array-some",["exports","ember-array-fns/helpers/array-some"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"arraySome",{enumerable:!0,get:function(){return t.arraySome}}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/array-sort",["exports","ember-array-fns/helpers/array-sort"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"arraySort",{enumerable:!0,get:function(){return t.arraySort}}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/array-splice",["exports","ember-array-fns/helpers/array-splice"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"arraySplice",{enumerable:!0,get:function(){return t.arraySplice}}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})) +define("consul-ui/helpers/asin",["exports","ember-math-helpers/helpers/asin"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"asin",{enumerable:!0,get:function(){return t.asin}}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/asinh",["exports","ember-math-helpers/helpers/asinh"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"asinh",{enumerable:!0,get:function(){return t.asinh}}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/assign",["exports","ember-assign-helper/helpers/assign"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"assign",{enumerable:!0,get:function(){return t.assign}}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/atan",["exports","ember-math-helpers/helpers/atan"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"atan",{enumerable:!0,get:function(){return t.atan}}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/atan2",["exports","ember-math-helpers/helpers/atan2"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"atan2",{enumerable:!0,get:function(){return t.atan2}}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/atanh",["exports","ember-math-helpers/helpers/atanh"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"atanh",{enumerable:!0,get:function(){return t.atanh}}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/atob",["exports","@ember/component/helper","consul-ui/utils/atob"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var l=(0,t.helper)((function(e){let[t=""]=e +return(0,n.default)(t)})) +e.default=l})),define("consul-ui/helpers/block-params",["exports","block-slots/helpers/block-params"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/cached-model",["exports","@ember/component/helper","@ember/application"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class l extends t.default{compute(e,t){let[l,r]=e +return(0,n.getOwner)(this).lookup(`service:repository/${l}`).cached(r)}}e.default=l})),define("consul-ui/helpers/call",["exports","ember-composable-helpers/helpers/call"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"call",{enumerable:!0,get:function(){return t.call}}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/can",["exports","ember-can/helpers/can"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/cancel-all",["exports","ember-concurrency/helpers/cancel-all"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/cannot",["exports","ember-can/helpers/cannot"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/capitalize",["exports","ember-cli-string-helpers/helpers/capitalize"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"capitalize",{enumerable:!0,get:function(){return t.capitalize}}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/cbrt",["exports","ember-math-helpers/helpers/cbrt"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"cbrt",{enumerable:!0,get:function(){return t.cbrt}}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/ceil",["exports","ember-math-helpers/helpers/ceil"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"ceil",{enumerable:!0,get:function(){return t.ceil}}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/changeset-get",["exports","ember-changeset/helpers/changeset-get"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/changeset-set",["exports","ember-changeset/helpers/changeset-set"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"changesetSet",{enumerable:!0,get:function(){return t.changesetSet}}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/changeset",["exports","ember-changeset-validations/helpers/changeset"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"changeset",{enumerable:!0,get:function(){return t.changeset}}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/chunk",["exports","ember-composable-helpers/helpers/chunk"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"chunk",{enumerable:!0,get:function(){return t.chunk}}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/class-map",["exports","@ember/component/helper"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.helper)((e=>{const t=e.filter(Boolean).filter((e=>"string"==typeof e||e[e.length-1])).map((e=>"string"==typeof e?e:e[0])).join(" ") +return t.length>0?t:void 0})) +e.default=n})),define("consul-ui/helpers/classify",["exports","ember-cli-string-helpers/helpers/classify"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"classify",{enumerable:!0,get:function(){return t.classify}}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/clz32",["exports","ember-math-helpers/helpers/clz32"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"clz32",{enumerable:!0,get:function(){return t.clz32}}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/collection",["exports","@ember/component/helper","@ember/object","consul-ui/models/service","consul-ui/models/service-instance"],(function(e,t,n,l,r){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const i={service:l.Collection,"service-instance":r.Collection} +class o{}class a extends t.default{compute(e,t){let[l,r]=e +if(l.length>0){const e=(0,n.get)(l,"firstObject")._internalModel.modelName +return new(0,i[e])(l)}return new o}}e.default=a})),define("consul-ui/helpers/compact",["exports","ember-composable-helpers/helpers/compact"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/compute",["exports","ember-composable-helpers/helpers/compute"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"compute",{enumerable:!0,get:function(){return t.compute}}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/contains",["exports","ember-composable-helpers/helpers/contains"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"contains",{enumerable:!0,get:function(){return t.contains}}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/cos",["exports","ember-math-helpers/helpers/cos"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"cos",{enumerable:!0,get:function(){return t.cos}}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/cosh",["exports","ember-math-helpers/helpers/cosh"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"cosh",{enumerable:!0,get:function(){return t.cosh}}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/css-map",["exports","@ember/component/helper","@lit/reactive-element"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var l=(0,t.helper)((e=>e.filter((e=>e instanceof n.CSSResult||e[e.length-1])).map((e=>e instanceof n.CSSResult?e:e[0])))) +e.default=l})) +define("consul-ui/helpers/css",["exports","@ember/component/helper","@lit/reactive-element"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class l extends t.default{compute(e,t){let[l]=e +return(0,n.css)([l])}}e.default=l})),define("consul-ui/helpers/dec",["exports","ember-composable-helpers/helpers/dec"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"dec",{enumerable:!0,get:function(){return t.dec}}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/did-insert",["exports","ember-render-helpers/helpers/did-insert"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/did-update",["exports","ember-render-helpers/helpers/did-update"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/div",["exports","ember-math-helpers/helpers/div"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"div",{enumerable:!0,get:function(){return t.div}})})),define("consul-ui/helpers/document-attrs",["exports","@ember/component/helper","@ember/service","@ember/debug","mnemonist/multi-map"],(function(e,t,n,l,r){var i,o,a +Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const u=new Map,s=new WeakMap +let c=(i=(0,n.inject)("-document"),o=class extends t.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="document",l=this,(n=a)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}compute(e,t){this.synchronize(this.document.documentElement,t)}willDestroy(){this.synchronize(this.document.documentElement),s.delete(this)}synchronize(e,t){const n=s.get(this) +return n&&Object.entries(n).forEach((e=>{let[t,n]=e,l=u.get(t) +void 0!==l&&[...new Set(n.split(" "))].map((e=>l.remove(e,this)))})),t&&(s.set(this,t),[...Object.entries(t)].forEach((e=>{let[t,n]=e,l=u.get(t) +void 0===l&&(l=new r.default(Set),u.set(t,l)),[...new Set(n.split(" "))].map((e=>{0===l.count(e)&&l.set(e,null),l.set(e,this)}))}))),[...u.entries()].forEach((t=>{let[n,r]=t,i="attr" +"class"===n?i=n:n.startsWith("data-")&&(i="data"),[...r.keys()].forEach((t=>{if(1===r.count(t)){if("class"===i)e.classList.remove(t) +else(0,l.runInDebug)((()=>{throw new Error(`${i} is not implemented yet`)})) +r.delete(t),0===r.size&&u.delete(n)}else if("class"===i)e.classList.add(t) +else(0,l.runInDebug)((()=>{throw new Error(`${i} is not implemented yet`)}))}))})),u}},d=o.prototype,p="document",f=[i],m={configurable:!0,enumerable:!0,writable:!0,initializer:null},b={},Object.keys(m).forEach((function(e){b[e]=m[e]})),b.enumerable=!!b.enumerable,b.configurable=!!b.configurable,("value"in b||b.initializer)&&(b.writable=!0),b=f.slice().reverse().reduce((function(e,t){return t(d,p,e)||e}),b),h&&void 0!==b.initializer&&(b.value=b.initializer?b.initializer.call(h):void 0,b.initializer=void 0),void 0===b.initializer&&(Object.defineProperty(d,p,b),b=null),a=b,o) +var d,p,f,m,h,b +e.default=c})),define("consul-ui/helpers/dom-position",["exports","@ember/component/helper"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class n extends t.default{compute(e,t){let[n]=e,{from:l,offset:r=!1}=t +return e=>{if("function"==typeof n){let t,i +if(r)i=e.currentTarget,t={width:i.offsetWidth,left:i.offsetLeft,height:i.offsetHeight,top:i.offsetTop} +else if(i=e.target,t=i.getBoundingClientRect(),void 0!==l){const e=l.getBoundingClientRect() +t.x=t.x-e.x,t.y=t.y-e.y}return n(t)}{const t=e.target,l=t.getBoundingClientRect() +n.forEach((e=>{let[n,r]=e +t.style[r]=`${l[n]}px`}))}}}}e.default=n})),define("consul-ui/helpers/drop",["exports","ember-composable-helpers/helpers/drop"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/duration-from",["exports","@ember/component/helper","@ember/service"],(function(e,t,n){var l,r,i +Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let o=(l=(0,n.inject)("temporal"),r=class extends t.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="temporal",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}compute(e,t){let[n]=e +return this.temporal.durationFrom(n)}},a=r.prototype,u="temporal",s=[l],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},p={},Object.keys(c).forEach((function(e){p[e]=c[e]})),p.enumerable=!!p.enumerable,p.configurable=!!p.configurable,("value"in p||p.initializer)&&(p.writable=!0),p=s.slice().reverse().reduce((function(e,t){return t(a,u,e)||e}),p),d&&void 0!==p.initializer&&(p.value=p.initializer?p.initializer.call(d):void 0,p.initializer=void 0),void 0===p.initializer&&(Object.defineProperty(a,u,p),p=null),i=p,r) +var a,u,s,c,d,p +e.default=o})),define("consul-ui/helpers/element",["exports","ember-element-helper/helpers/element"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/ember-power-select-is-group",["exports","ember-power-select/helpers/ember-power-select-is-group"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"emberPowerSelectIsGroup",{enumerable:!0,get:function(){return t.emberPowerSelectIsGroup}})})),define("consul-ui/helpers/ember-power-select-is-selected",["exports","ember-power-select/helpers/ember-power-select-is-selected"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"emberPowerSelectIsSelected",{enumerable:!0,get:function(){return t.emberPowerSelectIsSelected}})})),define("consul-ui/helpers/ensure-safe-component",["exports","@embroider/util"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.EnsureSafeComponentHelper}})})),define("consul-ui/helpers/entries",["exports","ember-composable-helpers/helpers/entries"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"entries",{enumerable:!0,get:function(){return t.entries}})})),define("consul-ui/helpers/env",["exports","@ember/component/helper","@ember/service"],(function(e,t,n){var l,r,i +Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let o=(l=(0,n.inject)("env"),r=class extends t.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="env",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}compute(e,t){let[n,l=""]=e +const r=this.env.var(n) +return null!=r?r:l}},a=r.prototype,u="env",s=[l],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},p={},Object.keys(c).forEach((function(e){p[e]=c[e]})),p.enumerable=!!p.enumerable,p.configurable=!!p.configurable,("value"in p||p.initializer)&&(p.writable=!0),p=s.slice().reverse().reduce((function(e,t){return t(a,u,e)||e}),p),d&&void 0!==p.initializer&&(p.value=p.initializer?p.initializer.call(d):void 0,p.initializer=void 0),void 0===p.initializer&&(Object.defineProperty(a,u,p),p=null),i=p,r) +var a,u,s,c,d,p +e.default=o})),define("consul-ui/helpers/eq",["exports","ember-truth-helpers/helpers/eq"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"equal",{enumerable:!0,get:function(){return t.equal}})})),define("consul-ui/helpers/exp",["exports","ember-math-helpers/helpers/exp"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"exp",{enumerable:!0,get:function(){return t.exp}})})),define("consul-ui/helpers/expm1",["exports","ember-math-helpers/helpers/expm1"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"expm1",{enumerable:!0,get:function(){return t.expm1}})})),define("consul-ui/helpers/filter-by",["exports","ember-composable-helpers/helpers/filter-by"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/filter",["exports","ember-composable-helpers/helpers/filter"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/find-by",["exports","ember-composable-helpers/helpers/find-by"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/fixed-grid-layout",["exports","@ember/component/helper","ember-collection/layouts/grid"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var l=(0,t.helper)((function(e){return new n.default(e[0],e[1])})) +e.default=l})),define("consul-ui/helpers/flatten-property",["exports","@ember/component/helper"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.helper)((function e(t,n){let[l,r]=t +const i=n.pages||[] +return i.push(...l.pages),l.children.forEach((t=>e([t],{pages:i}))),i})) +e.default=n})),define("consul-ui/helpers/flatten",["exports","ember-composable-helpers/helpers/flatten"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"flatten",{enumerable:!0,get:function(){return t.flatten}})})),define("consul-ui/helpers/floor",["exports","ember-math-helpers/helpers/floor"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"floor",{enumerable:!0,get:function(){return t.floor}})})),define("consul-ui/helpers/format-date",["exports","ember-intl/helpers/format-date"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/format-message",["exports","ember-intl/helpers/format-message"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/format-number",["exports","ember-intl/helpers/format-number"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/format-relative",["exports","ember-intl/helpers/format-relative"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/format-short-time",["exports","@ember/component/helper"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.helper)((function(e,t){let n,l,r,i,[o]=e +i=Math.floor(o/1e3),r=Math.floor(i/60),i%=60,l=Math.floor(r/60),r%=60,n=Math.floor(l/24),l%=24 +const a=n,u=l,s=r,c=i +switch(!0){case 0!==a:return a+"d" +case 0!==u:return u+"h" +case 0!==s:return s+"m" +default:return c+"s"}})) +e.default=n})) +define("consul-ui/helpers/format-time",["exports","ember-intl/helpers/format-time"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/from-entries",["exports","ember-composable-helpers/helpers/from-entries"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"fromEntries",{enumerable:!0,get:function(){return t.fromEntries}})})),define("consul-ui/helpers/fround",["exports","ember-math-helpers/helpers/fround"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"fround",{enumerable:!0,get:function(){return t.fround}})})),define("consul-ui/helpers/gcd",["exports","ember-math-helpers/helpers/gcd"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"gcd",{enumerable:!0,get:function(){return t.gcd}})})),define("consul-ui/helpers/group-by",["exports","ember-composable-helpers/helpers/group-by"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/gt",["exports","ember-truth-helpers/helpers/gt"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"gt",{enumerable:!0,get:function(){return t.gt}})})),define("consul-ui/helpers/gte",["exports","ember-truth-helpers/helpers/gte"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"gte",{enumerable:!0,get:function(){return t.gte}})})),define("consul-ui/helpers/has-next",["exports","ember-composable-helpers/helpers/has-next"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"hasNext",{enumerable:!0,get:function(){return t.hasNext}})})),define("consul-ui/helpers/has-previous",["exports","ember-composable-helpers/helpers/has-previous"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"hasPrevious",{enumerable:!0,get:function(){return t.hasPrevious}})})),define("consul-ui/helpers/hds-link-to-models",["exports","@hashicorp/design-system-components/helpers/hds-link-to-models"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/hds-link-to-query",["exports","@hashicorp/design-system-components/helpers/hds-link-to-query"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/href-to",["exports","@ember/component/helper","@ember/service","@ember/object","@ember/application","consul-ui/utils/routing/transitionable","consul-ui/utils/routing/wildcard","consul-ui/router"],(function(e,t,n,l,r,i,o,a){var u,s,c +function d(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.hrefTo=e.default=void 0 +const p=(0,o.default)(a.routes),f=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{} +const l=e.lookup("router:main").location,r=e.lookup("service:router") +let o=t.slice(0),a=o.shift(),u=n.params||{} +"."===a&&(o=(0,i.default)(r.currentRoute,u,e),a=o.shift()) +try{return p(a)&&(o=o.map(((e,t)=>e.split("/").map(encodeURIComponent).join("/")))),l.hrefTo(a,o,u)}catch(s){throw s.constructor===Error&&(s.message=`${s.message} For "${t[0]}:${JSON.stringify(t.slice(1))}"`),s}} +e.hrefTo=f +let m=(u=(0,n.inject)("router"),s=class extends t.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="router",l=this,(n=c)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}init(){super.init(...arguments),this.router.on("routeWillChange",this.routeWillChange)}compute(e,t){return f((0,r.getOwner)(this),e,t)}routeWillChange(e){this.recompute()}willDestroy(){this.router.off("routeWillChange",this.routeWillChange),super.willDestroy()}},c=d(s.prototype,"router",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),d(s.prototype,"routeWillChange",[l.action],Object.getOwnPropertyDescriptor(s.prototype,"routeWillChange"),s.prototype),s) +e.default=m})),define("consul-ui/helpers/humanize",["exports","ember-cli-string-helpers/helpers/humanize"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"humanize",{enumerable:!0,get:function(){return t.humanize}})})),define("consul-ui/helpers/hypot",["exports","ember-math-helpers/helpers/hypot"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"hypot",{enumerable:!0,get:function(){return t.hypot}})})),define("consul-ui/helpers/icon-mapping",["exports","@ember/component/helper"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const n={kubernetes:"kubernetes-color",terraform:"terraform-color",nomad:"nomad-color",consul:"consul-color","consul-api-gateway":"consul-color",vault:"vault",aws:"aws-color","aws-iam":"aws-color",lambda:"aws-lambda-color"} +var l=(0,t.helper)((function(e){let[t]=e +return n[t]})) +e.default=l})),define("consul-ui/helpers/if-key",["exports","ember-keyboard/helpers/if-key.js"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/imul",["exports","ember-math-helpers/helpers/imul"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"imul",{enumerable:!0,get:function(){return t.imul}})})),define("consul-ui/helpers/inc",["exports","ember-composable-helpers/helpers/inc"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"inc",{enumerable:!0,get:function(){return t.inc}})})),define("consul-ui/helpers/includes",["exports","ember-composable-helpers/helpers/includes"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"includes",{enumerable:!0,get:function(){return t.includes}})})),define("consul-ui/helpers/intersect",["exports","ember-composable-helpers/helpers/intersect"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/invoke",["exports","ember-composable-helpers/helpers/invoke"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"invoke",{enumerable:!0,get:function(){return t.invoke}})})),define("consul-ui/helpers/is-active",["exports","ember-router-helpers/helpers/is-active"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"isActive",{enumerable:!0,get:function(){return t.isActive}})})),define("consul-ui/helpers/is-array",["exports","ember-truth-helpers/helpers/is-array"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"isArray",{enumerable:!0,get:function(){return t.isArray}})})),define("consul-ui/helpers/is-empty",["exports","ember-truth-helpers/helpers/is-empty"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/is-equal",["exports","ember-truth-helpers/helpers/is-equal"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"isEqual",{enumerable:!0,get:function(){return t.isEqual}})})),define("consul-ui/helpers/is-href",["exports","@ember/component/helper","@ember/service","@ember/object"],(function(e,t,n,l){var r,i,o +function a(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let u=(r=(0,n.inject)("router"),i=class extends t.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="router",l=this,(n=o)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}init(){super.init(...arguments),this.router.on("routeWillChange",this.routeWillChange)}compute(e){let[t,...n]=e +return this.router.currentRouteName.startsWith("nspace.")&&t.startsWith("dc.")&&(t=`nspace.${t}`),void 0!==this.next&&"loading"!==this.next?this.next.startsWith(t):this.router.isActive(t,...n)}routeWillChange(e){this.next=e.to.name.replace(".index",""),this.recompute()}willDestroy(){this.router.off("routeWillChange",this.routeWillChange),super.willDestroy()}},o=a(i.prototype,"router",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),a(i.prototype,"routeWillChange",[l.action],Object.getOwnPropertyDescriptor(i.prototype,"routeWillChange"),i.prototype),i) +e.default=u})),define("consul-ui/helpers/is",["exports","ember-can/helpers/can","@ember/object","@ember/string"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.is=e.default=void 0 +const r=(e,t,r)=>{let[i,o]=t,{abilityName:a,propertyName:u}=e.abilities.parse(i),s=e.abilities.abilityFor(a,o,r) +return u="function"==typeof s.getCharacteristicProperty?s.getCharacteristicProperty(u):(0,l.camelize)(`is-${u}`),(0,n.get)(s,u)} +e.is=r +class i extends t.default{compute(e,t){let[n,l]=e +return r(this,[n,l],t)}}e.default=i})),define("consul-ui/helpers/join",["exports","ember-composable-helpers/helpers/join"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/json-stringify",["exports","@ember/component/helper"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.helper)((function(e,t){try{return JSON.stringify(...e)}catch(n){return e[0].map((t=>JSON.stringify(t,e[1],e[2])))}})) +e.default=n})),define("consul-ui/helpers/keys",["exports","ember-composable-helpers/helpers/keys"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"keys",{enumerable:!0,get:function(){return t.keys}})})) +define("consul-ui/helpers/last",["exports","@ember/component/helper"],(function(e,t){function n(e,t){let[n=""]=e +if(!0==("string"==typeof n))return n.substr(-1)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.last=n +var l=(0,t.helper)(n) +e.default=l})),define("consul-ui/helpers/lcm",["exports","ember-math-helpers/helpers/lcm"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"lcm",{enumerable:!0,get:function(){return t.lcm}})})),define("consul-ui/helpers/left-trim",["exports","@ember/component/helper","consul-ui/utils/left-trim"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var l=(0,t.helper)((function(e,t){let[l="",r=""]=e +return(0,n.default)(l,r)})) +e.default=l})),define("consul-ui/helpers/log-e",["exports","ember-math-helpers/helpers/log-e"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"logE",{enumerable:!0,get:function(){return t.logE}})})),define("consul-ui/helpers/log10",["exports","ember-math-helpers/helpers/log10"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"log10",{enumerable:!0,get:function(){return t.log10}})})),define("consul-ui/helpers/log1p",["exports","ember-math-helpers/helpers/log1p"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"log1p",{enumerable:!0,get:function(){return t.log1p}})})),define("consul-ui/helpers/log2",["exports","ember-math-helpers/helpers/log2"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"log2",{enumerable:!0,get:function(){return t.log2}})})),define("consul-ui/helpers/lowercase",["exports","ember-cli-string-helpers/helpers/lowercase"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"lowercase",{enumerable:!0,get:function(){return t.lowercase}})})),define("consul-ui/helpers/lt",["exports","ember-truth-helpers/helpers/lt"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"lt",{enumerable:!0,get:function(){return t.lt}})})),define("consul-ui/helpers/lte",["exports","ember-truth-helpers/helpers/lte"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"lte",{enumerable:!0,get:function(){return t.lte}})})),define("consul-ui/helpers/map-by",["exports","ember-composable-helpers/helpers/map-by"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/map",["exports","ember-composable-helpers/helpers/map"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/max",["exports","ember-math-helpers/helpers/max"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"max",{enumerable:!0,get:function(){return t.max}})})),define("consul-ui/helpers/merge-checks",["exports","@ember/component/helper","consul-ui/utils/merge-checks"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var l=(0,t.helper)((function(e,t){let[l,r]=e +return(0,n.default)(l,r)})) +e.default=l})),define("consul-ui/helpers/min",["exports","ember-math-helpers/helpers/min"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"min",{enumerable:!0,get:function(){return t.min}})})),define("consul-ui/helpers/mixed-grid-layout",["exports","@ember/component/helper","ember-collection/layouts/mixed-grid"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var l=(0,t.helper)((function(e){return new n.default(e[0])})) +e.default=l})),define("consul-ui/helpers/mod",["exports","ember-math-helpers/helpers/mod"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"mod",{enumerable:!0,get:function(){return t.mod}})})),define("consul-ui/helpers/mult",["exports","ember-math-helpers/helpers/mult"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"mult",{enumerable:!0,get:function(){return t.mult}})})),define("consul-ui/helpers/next",["exports","ember-composable-helpers/helpers/next"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"next",{enumerable:!0,get:function(){return t.next}})})),define("consul-ui/helpers/noop",["exports","ember-composable-helpers/helpers/noop"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"noop",{enumerable:!0,get:function(){return t.noop}})})),define("consul-ui/helpers/not-eq",["exports","ember-truth-helpers/helpers/not-eq"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"notEqualHelper",{enumerable:!0,get:function(){return t.notEqualHelper}})})),define("consul-ui/helpers/not",["exports","ember-truth-helpers/helpers/not"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"not",{enumerable:!0,get:function(){return t.not}})})),define("consul-ui/helpers/object-at",["exports","ember-composable-helpers/helpers/object-at"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"objectAt",{enumerable:!0,get:function(){return t.objectAt}})})),define("consul-ui/helpers/on-document",["exports","ember-on-helper/helpers/on-document"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/on-key",["exports","ember-keyboard/helpers/on-key.js"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/on-window",["exports","ember-on-helper/helpers/on-window"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/on",["exports","ember-on-helper/helpers/on"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/optional",["exports","ember-composable-helpers/helpers/optional"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"optional",{enumerable:!0,get:function(){return t.optional}})})),define("consul-ui/helpers/or",["exports","ember-truth-helpers/helpers/or"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"or",{enumerable:!0,get:function(){return t.or}})})),define("consul-ui/helpers/page-title",["exports","ember-page-title/helpers/page-title"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=t.default +e.default=n})) +define("consul-ui/helpers/percentage-columns-layout",["exports","@ember/component/helper","ember-collection/layouts/percentage-columns"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var l=(0,t.helper)((function(e){return new n.default(e[0],e[1],e[2])})) +e.default=l})),define("consul-ui/helpers/percentage-of",["exports","@ember/component/helper"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.helper)((function(e,t){let[n,l]=e +const r=n/l*100 +return isNaN(r)?0:r.toFixed(2)})) +e.default=n})),define("consul-ui/helpers/perform",["exports","ember-concurrency/helpers/perform"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/pick",["exports","ember-composable-helpers/helpers/pick"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"pick",{enumerable:!0,get:function(){return t.pick}})})),define("consul-ui/helpers/pipe-action",["exports","ember-composable-helpers/helpers/pipe-action"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/pipe",["exports","ember-composable-helpers/helpers/pipe"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"pipe",{enumerable:!0,get:function(){return t.pipe}})})),define("consul-ui/helpers/pluralize",["exports","ember-inflector/lib/helpers/pluralize"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=t.default +e.default=n})),define("consul-ui/helpers/policy/datacenters",["exports","@ember/component/helper","@ember/object"],(function(e,t,n){function l(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} +const l=(0,n.get)(e[0],"Datacenters") +return Array.isArray(l)&&0!==l.length?(0,n.get)(e[0],"Datacenters"):[t.global||"All"]}Object.defineProperty(e,"__esModule",{value:!0}),e.datacenters=l,e.default=void 0 +var r=(0,t.helper)(l) +e.default=r})),define("consul-ui/helpers/policy/group",["exports","@ember/component/helper","@ember/object","consul-ui/models/policy"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var r=(0,t.helper)((function(e){let[t]=e +return t.reduce((function(e,t){let r +switch(!0){case(0,n.get)(t,"ID")===l.MANAGEMENT_ID:r="management" +break +case""!==(0,n.get)(t,"template"):r="identities" +break +default:r="policies"}return e[r].push(t),e}),{management:[],identities:[],policies:[]})})) +e.default=r})),define("consul-ui/helpers/policy/typeof",["exports","@ember/component/helper","@ember/object"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.typeOf=i +const l="00000000-0000-0000-0000-000000000001",r="00000000-0000-0000-0000-000000000002" +function i(e,t){const i=e[0],o=(0,n.get)(i,"template") +switch(!0){case void 0===o:return"role" +case"service-identity"===o:return"policy-service-identity" +case"node-identity"===o:return"policy-node-identity" +case(0,n.get)(i,"ID")===l:return"policy-management" +case(0,n.get)(i,"ID")===r:return"read-only" +default:return"policy"}}var o=(0,t.helper)(i) +e.default=o})),define("consul-ui/helpers/pow",["exports","ember-math-helpers/helpers/pow"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"pow",{enumerable:!0,get:function(){return t.pow}})})),define("consul-ui/helpers/previous",["exports","ember-composable-helpers/helpers/previous"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"previous",{enumerable:!0,get:function(){return t.previous}})})),define("consul-ui/helpers/queue",["exports","ember-composable-helpers/helpers/queue"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"queue",{enumerable:!0,get:function(){return t.queue}})})),define("consul-ui/helpers/random",["exports","ember-math-helpers/helpers/random"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"random",{enumerable:!0,get:function(){return t.random}})})),define("consul-ui/helpers/range",["exports","ember-composable-helpers/helpers/range"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"range",{enumerable:!0,get:function(){return t.range}})})),define("consul-ui/helpers/reduce",["exports","ember-composable-helpers/helpers/reduce"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/ref-to",["exports","ember-ref-bucket/helpers/ref-to"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"refTo",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/refresh-route",["exports","@ember/component/helper","@ember/service","@ember/application"],(function(e,t,n,l){var r,i,o +Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let a=(r=(0,n.inject)("router"),i=class extends t.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="router",l=this,(n=o)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}compute(e,t){return()=>{const e=(0,l.getOwner)(this),t=this.router.currentRoute.name +return e.lookup(`route:${t}`).refresh()}}},u=i.prototype,s="router",c=[r],d={configurable:!0,enumerable:!0,writable:!0,initializer:null},f={},Object.keys(d).forEach((function(e){f[e]=d[e]})),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=c.slice().reverse().reduce((function(e,t){return t(u,s,e)||e}),f),p&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(p):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(u,s,f),f=null),o=f,i) +var u,s,c,d,p,f +e.default=a})),define("consul-ui/helpers/reject-by",["exports","ember-composable-helpers/helpers/reject-by"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/render-template",["exports","@ember/component/helper","@ember/service"],(function(e,t,n){var l,r,i +Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const o=/{{([A-Za-z.0-9_-]+)}}/g +let a,u=(l=(0,n.inject)("encoder"),r=class extends t.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="encoder",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0}),"function"!=typeof a&&(a=this.encoder.createRegExpEncoder(o,encodeURIComponent,!1))}compute(e){let[t,n]=e +return a(t,n)}},s=r.prototype,c="encoder",d=[l],p={configurable:!0,enumerable:!0,writable:!0,initializer:null},m={},Object.keys(p).forEach((function(e){m[e]=p[e]})),m.enumerable=!!m.enumerable,m.configurable=!!m.configurable,("value"in m||m.initializer)&&(m.writable=!0),m=d.slice().reverse().reduce((function(e,t){return t(s,c,e)||e}),m),f&&void 0!==m.initializer&&(m.value=m.initializer?m.initializer.call(f):void 0,m.initializer=void 0),void 0===m.initializer&&(Object.defineProperty(s,c,m),m=null),i=m,r) +var s,c,d,p,f,m +e.default=u})),define("consul-ui/helpers/repeat",["exports","ember-composable-helpers/helpers/repeat"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"repeat",{enumerable:!0,get:function(){return t.repeat}})})),define("consul-ui/helpers/require",["exports","@ember/component/helper","require","@lit/reactive-element","consul-ui/utils/path/resolve"],(function(e,t,n,l,r){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const i="consul-ui",o=new Map +var a=(0,t.helper)(((e,t)=>{let a,[u=""]=e,s=(0,r.default)(`${i}${t.from}`,u) +if("/"===u.charAt(0)&&(s=`${i}${s}`),!n.default.has(s))throw new Error(`Unable to resolve '${s}' does the file exist?`) +switch(a=(0,n.default)(s)[t.export||"default"],!0){case s.endsWith(".css"):return a(l.css) +case s.endsWith(".xstate"):return a +case s.endsWith(".element"):{if(o.has(s))return o.get(s) +const e=a(HTMLElement) +return o.set(s,e),e}default:return a}})) +e.default=a})),define("consul-ui/helpers/reverse",["exports","ember-composable-helpers/helpers/reverse"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/right-trim",["exports","@ember/component/helper","consul-ui/utils/right-trim"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var l=(0,t.helper)((function(e,t){let[l="",r=""]=e +return(0,n.default)(l,r)})) +e.default=l})),define("consul-ui/helpers/root-url",["exports","ember-router-helpers/helpers/root-url"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"rootUrl",{enumerable:!0,get:function(){return t.rootUrl}})})),define("consul-ui/helpers/round",["exports","ember-math-helpers/helpers/round"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"round",{enumerable:!0,get:function(){return t.round}})})),define("consul-ui/helpers/route-action",["exports","ember-route-action-helper/helpers/route-action"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/route-match",["exports","@ember/component/helper"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.helper)((function(e,t){let[n]=e +switch(["Present","Exact","Prefix","Suffix","Regex"].find((e=>void 0!==n[e]))){case"Present":return(n.Invert?"NOT ":"")+"present" +case"Exact":return`${n.Invert?"NOT ":""}exactly matching "${n.Exact}"` +case"Prefix":return`${n.Invert?"NOT ":""}prefixed by "${n.Prefix}"` +case"Suffix":return`${n.Invert?"NOT ":""}suffixed by "${n.Suffix}"` +case"Regex":return`${n.Invert?"NOT ":""}matching the regex "${n.Regex}"`}return""})) +e.default=n})),define("consul-ui/helpers/route-params",["exports","ember-router-helpers/helpers/route-params"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"routeParams",{enumerable:!0,get:function(){return t.routeParams}})})),define("consul-ui/helpers/service/card-permissions",["exports","@ember/component/helper"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.helper)((function(e){let[t]=e +if(""===t.Datacenter)return"empty" +{const e=t.Intention.HasPermissions,n=t.Intention.Allowed,l="specific-intention"===t.Source&&!t.TransparentProxy +switch(!0){case e:return"allow" +case!n&&!e:return"deny" +case n&&l:return"not-defined" +default:return"allow"}}})) +e.default=n})) +define("consul-ui/helpers/service/external-source",["exports","@ember/component/helper","@ember/object"],(function(e,t,n){function l(e,t){let l=(0,n.get)(e[0],"ExternalSources.firstObject") +l||(l=(0,n.get)(e[0],"Meta.external-source")) +const r=void 0===t.prefix?"":t.prefix +if(l&&["consul-api-gateway","vault","kubernetes","terraform","nomad","consul","aws","lambda"].includes(l))return`${r}${l}`}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.serviceExternalSource=l +var r=(0,t.helper)(l) +e.default=r})),define("consul-ui/helpers/service/health-percentage",["exports","@ember/component/helper"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.helper)((function(e){let[t]=e +const n=t.ChecksCritical+t.ChecksPassing+t.ChecksWarning +return 0===n?"":{passing:Math.round(t.ChecksPassing/n*100),warning:Math.round(t.ChecksWarning/n*100),critical:Math.round(t.ChecksCritical/n*100)}})) +e.default=n})),define("consul-ui/helpers/set",["exports","ember-set-helper/helpers/set"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/shuffle",["exports","ember-composable-helpers/helpers/shuffle"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"shuffle",{enumerable:!0,get:function(){return t.shuffle}})})),define("consul-ui/helpers/sign",["exports","ember-math-helpers/helpers/sign"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"sign",{enumerable:!0,get:function(){return t.sign}})})),define("consul-ui/helpers/sin",["exports","ember-math-helpers/helpers/sin"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"sin",{enumerable:!0,get:function(){return t.sin}})})),define("consul-ui/helpers/singularize",["exports","ember-inflector/lib/helpers/singularize"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=t.default +e.default=n})),define("consul-ui/helpers/slice",["exports","ember-composable-helpers/helpers/slice"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/slugify",["exports","@ember/component/helper"],(function(e,t){function n(e,t){let[n=""]=e +return n.replace(/ /g,"-").toLowerCase()}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.slugify=n +var l=(0,t.helper)(n) +e.default=l})),define("consul-ui/helpers/smart-date-format",["exports","@ember/component/helper","@ember/service"],(function(e,t,n){var l,r,i +function o(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function a(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const u=6048e5 +function s(e){const t=new Date +return e>=+t-u&&e<=+t+u}let c=(l=class extends t.default{constructor(){super(...arguments),o(this,"temporal",r,this),o(this,"intl",i,this)}compute(e,t){let[n]=e +return{isNearDate:s(n),relative:`${this.temporal.format(n)} ago`,friendly:this.intl.formatTime(n,{month:"short",day:"numeric",year:"numeric",hour:"numeric",minute:"numeric",second:"numeric",hourCycle:"h24"})}}},r=a(l.prototype,"temporal",[n.inject],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),i=a(l.prototype,"intl",[n.inject],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),l) +e.default=c})),define("consul-ui/helpers/sort-by",["exports","ember-composable-helpers/helpers/sort-by"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/split",["exports","@ember/component/helper"],(function(e,t){function n(e,t){let[n="",l=","]=e +return n.split(l)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.split=n +var l=(0,t.helper)(n) +e.default=l})),define("consul-ui/helpers/sqrt",["exports","ember-math-helpers/helpers/sqrt"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"sqrt",{enumerable:!0,get:function(){return t.sqrt}})})),define("consul-ui/helpers/state-chart",["exports","@ember/component/helper","@ember/service"],(function(e,t,n){var l,r,i +Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let o=(l=(0,n.inject)("state"),r=class extends t.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="state",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}compute(e,t){let[n]=e +return this.state.stateChart(n)}},a=r.prototype,u="state",s=[l],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},p={},Object.keys(c).forEach((function(e){p[e]=c[e]})),p.enumerable=!!p.enumerable,p.configurable=!!p.configurable,("value"in p||p.initializer)&&(p.writable=!0),p=s.slice().reverse().reduce((function(e,t){return t(a,u,e)||e}),p),d&&void 0!==p.initializer&&(p.value=p.initializer?p.initializer.call(d):void 0,p.initializer=void 0),void 0===p.initializer&&(Object.defineProperty(a,u,p),p=null),i=p,r) +var a,u,s,c,d,p +e.default=o})),define("consul-ui/helpers/state-matches",["exports","@ember/component/helper","@ember/service"],(function(e,t,n){var l,r,i +Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let o=(l=(0,n.inject)("state"),r=class extends t.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="state",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}compute(e,t){let[n,l]=e +return this.state.matches(n,l)}},a=r.prototype,u="state",s=[l],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},p={},Object.keys(c).forEach((function(e){p[e]=c[e]})),p.enumerable=!!p.enumerable,p.configurable=!!p.configurable,("value"in p||p.initializer)&&(p.writable=!0),p=s.slice().reverse().reduce((function(e,t){return t(a,u,e)||e}),p),d&&void 0!==p.initializer&&(p.value=p.initializer?p.initializer.call(d):void 0,p.initializer=void 0),void 0===p.initializer&&(Object.defineProperty(a,u,p),p=null),i=p,r) +var a,u,s,c,d,p +e.default=o})),define("consul-ui/helpers/string-char-at",["exports","ember-string-fns/helpers/string-char-at"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringCharAt",{enumerable:!0,get:function(){return t.stringCharAt}})})),define("consul-ui/helpers/string-char-code-at",["exports","ember-string-fns/helpers/string-char-code-at"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringCharCodeAt",{enumerable:!0,get:function(){return t.stringCharCodeAt}})})),define("consul-ui/helpers/string-code-point-at",["exports","ember-string-fns/helpers/string-code-point-at"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringCodePointAt",{enumerable:!0,get:function(){return t.stringCodePointAt}})})),define("consul-ui/helpers/string-concat",["exports","ember-string-fns/helpers/string-concat"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringConcat",{enumerable:!0,get:function(){return t.stringConcat}})})),define("consul-ui/helpers/string-ends-with",["exports","ember-string-fns/helpers/string-ends-with"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringEndsWith",{enumerable:!0,get:function(){return t.stringEndsWith}})})),define("consul-ui/helpers/string-equals",["exports","ember-string-fns/helpers/string-equals"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringEquals",{enumerable:!0,get:function(){return t.stringEquals}})})),define("consul-ui/helpers/string-from-char-code",["exports","ember-string-fns/helpers/string-from-char-code"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringFromCharCode",{enumerable:!0,get:function(){return t.stringFromCharCode}})})),define("consul-ui/helpers/string-from-code-point",["exports","ember-string-fns/helpers/string-from-code-point"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringFromCodePoint",{enumerable:!0,get:function(){return t.stringFromCodePoint}})})),define("consul-ui/helpers/string-html-safe",["exports","@ember/component/helper","@ember/string"],(function(e,t,n){function l(e){let[t=""]=e +return(0,n.htmlSafe)(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.stringHtmlSafe=l +var r=(0,t.helper)(l) +e.default=r})),define("consul-ui/helpers/string-includes",["exports","ember-string-fns/helpers/string-includes"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringIncludes",{enumerable:!0,get:function(){return t.stringIncludes}})})),define("consul-ui/helpers/string-index-of",["exports","ember-string-fns/helpers/string-index-of"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringIndexOf",{enumerable:!0,get:function(){return t.stringIndexOf}})})),define("consul-ui/helpers/string-last-index-of",["exports","ember-string-fns/helpers/string-last-index-of"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringLastIndexOf",{enumerable:!0,get:function(){return t.stringLastIndexOf}})})),define("consul-ui/helpers/string-not-equals",["exports","ember-string-fns/helpers/string-not-equals"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringNotEquals",{enumerable:!0,get:function(){return t.stringNotEquals}})})),define("consul-ui/helpers/string-pad-end",["exports","ember-string-fns/helpers/string-pad-end"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringPadEnd",{enumerable:!0,get:function(){return t.stringPadEnd}})})),define("consul-ui/helpers/string-pad-start",["exports","ember-string-fns/helpers/string-pad-start"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringPadStart",{enumerable:!0,get:function(){return t.stringPadStart}})})) +define("consul-ui/helpers/string-repeat",["exports","ember-string-fns/helpers/string-repeat"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringRepeat",{enumerable:!0,get:function(){return t.stringRepeat}})})),define("consul-ui/helpers/string-replace-all",["exports","ember-string-fns/helpers/string-replace-all"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringReplaceAll",{enumerable:!0,get:function(){return t.stringReplaceAll}})})),define("consul-ui/helpers/string-replace",["exports","ember-string-fns/helpers/string-replace"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringReplace",{enumerable:!0,get:function(){return t.stringReplace}})})),define("consul-ui/helpers/string-slice",["exports","ember-string-fns/helpers/string-slice"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringSlice",{enumerable:!0,get:function(){return t.stringSlice}})})),define("consul-ui/helpers/string-split",["exports","ember-string-fns/helpers/string-split"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringSplit",{enumerable:!0,get:function(){return t.stringSplit}})})),define("consul-ui/helpers/string-starts-with",["exports","ember-string-fns/helpers/string-starts-with"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringStartsWith",{enumerable:!0,get:function(){return t.stringStartsWith}})})),define("consul-ui/helpers/string-substring",["exports","ember-string-fns/helpers/string-substring"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringSubstring",{enumerable:!0,get:function(){return t.stringSubstring}})})),define("consul-ui/helpers/string-to-camel-case",["exports","ember-string-fns/helpers/string-to-camel-case"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringToCamelCase",{enumerable:!0,get:function(){return t.stringToCamelCase}})})),define("consul-ui/helpers/string-to-kebab-case",["exports","ember-string-fns/helpers/string-to-kebab-case"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringToKebabCase",{enumerable:!0,get:function(){return t.stringToKebabCase}})})),define("consul-ui/helpers/string-to-lower-case",["exports","ember-string-fns/helpers/string-to-lower-case"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringToLowerCase",{enumerable:!0,get:function(){return t.stringToLowerCase}})})),define("consul-ui/helpers/string-to-pascal-case",["exports","ember-string-fns/helpers/string-to-pascal-case"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringToPascalCase",{enumerable:!0,get:function(){return t.stringToPascalCase}})})),define("consul-ui/helpers/string-to-sentence-case",["exports","ember-string-fns/helpers/string-to-sentence-case"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringToSentenceCase",{enumerable:!0,get:function(){return t.stringToSentenceCase}})})),define("consul-ui/helpers/string-to-snake-case",["exports","ember-string-fns/helpers/string-to-snake-case"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringToSnakeCase",{enumerable:!0,get:function(){return t.stringToSnakeCase}})})),define("consul-ui/helpers/string-to-title-case",["exports","ember-string-fns/helpers/string-to-title-case"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringToTitleCase",{enumerable:!0,get:function(){return t.stringToTitleCase}})})),define("consul-ui/helpers/string-to-upper-case",["exports","ember-string-fns/helpers/string-to-upper-case"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringToUpperCase",{enumerable:!0,get:function(){return t.stringToUpperCase}})})),define("consul-ui/helpers/string-trim-end",["exports","ember-string-fns/helpers/string-trim-end"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringTrimEnd",{enumerable:!0,get:function(){return t.stringTrimEnd}})})),define("consul-ui/helpers/string-trim-start",["exports","ember-string-fns/helpers/string-trim-start"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringTrimStart",{enumerable:!0,get:function(){return t.stringTrimStart}})})),define("consul-ui/helpers/string-trim",["exports","ember-string-fns/helpers/string-trim"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringTrim",{enumerable:!0,get:function(){return t.stringTrim}})})),define("consul-ui/helpers/style-map",["exports","@ember/component/helper"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.helper)((function(e){const t=e.reduce(((e,t)=>{let[n,l,r=""]=t +return null==l?e:`${e}${n}:${l.toString()}${r};`}),"") +return t.length>0?t:void 0})) +e.default=n})),define("consul-ui/helpers/sub",["exports","ember-math-helpers/helpers/sub"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"sub",{enumerable:!0,get:function(){return t.sub}})})),define("consul-ui/helpers/substr",["exports","@ember/component/helper"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.helper)((function(e,t){let[n="",l=0,r]=e +return n.substr(l,r)})) +e.default=n})),define("consul-ui/helpers/sum",["exports","ember-math-helpers/helpers/sum"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"sum",{enumerable:!0,get:function(){return t.sum}})})),define("consul-ui/helpers/svg-curve",["exports","@ember/component/helper"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.helper)((function(e,t){let[n]=e +const l=t.src||{x:0,y:0},r=t.type||"cubic" +let i=[n,{x:(l.x+n.x)/2,y:l.y}] +return"cubic"===r&&i.push({x:i[1].x,y:n.y}),`${o=l,`\n M ${o.x} ${o.y}\n `}${function(){const e=[...arguments] +return`${arguments.length>2?"C":"Q"} ${e.concat(e.shift()).map((e=>Object.values(e).join(" "))).join(",")}`}(...i)}` +var o})) +e.default=n})),define("consul-ui/helpers/t",["exports","ember-intl/helpers/t"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/take",["exports","ember-composable-helpers/helpers/take"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/tan",["exports","ember-math-helpers/helpers/tan"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"tan",{enumerable:!0,get:function(){return t.tan}})})),define("consul-ui/helpers/tanh",["exports","ember-math-helpers/helpers/tanh"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"tanh",{enumerable:!0,get:function(){return t.tanh}})})),define("consul-ui/helpers/task",["exports","ember-concurrency/helpers/task"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/temporal-format",["exports","@ember/component/helper","@ember/service"],(function(e,t,n){var l,r,i +Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let o=(l=(0,n.inject)("temporal"),r=class extends t.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="temporal",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}compute(e,t){let[n]=e +return this.temporal.format(n,t)}},a=r.prototype,u="temporal",s=[l],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},p={},Object.keys(c).forEach((function(e){p[e]=c[e]})),p.enumerable=!!p.enumerable,p.configurable=!!p.configurable,("value"in p||p.initializer)&&(p.writable=!0),p=s.slice().reverse().reduce((function(e,t){return t(a,u,e)||e}),p),d&&void 0!==p.initializer&&(p.value=p.initializer?p.initializer.call(d):void 0,p.initializer=void 0),void 0===p.initializer&&(Object.defineProperty(a,u,p),p=null),i=p,r) +var a,u,s,c,d,p +e.default=o})),define("consul-ui/helpers/temporal-within",["exports","@ember/component/helper","@ember/service"],(function(e,t,n){var l,r,i +Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let o=(l=(0,n.inject)("temporal"),r=class extends t.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="temporal",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}compute(e,t){return this.temporal.within(e,t)}},a=r.prototype,u="temporal",s=[l],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},p={},Object.keys(c).forEach((function(e){p[e]=c[e]})),p.enumerable=!!p.enumerable,p.configurable=!!p.configurable,("value"in p||p.initializer)&&(p.writable=!0),p=s.slice().reverse().reduce((function(e,t){return t(a,u,e)||e}),p),d&&void 0!==p.initializer&&(p.value=p.initializer?p.initializer.call(d):void 0,p.initializer=void 0),void 0===p.initializer&&(Object.defineProperty(a,u,p),p=null),i=p,r) +var a,u,s,c,d,p +e.default=o})) +define("consul-ui/helpers/test",["exports","consul-ui/helpers/can","consul-ui/helpers/is"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class l extends t.default{compute(e,t){let[l,r]=e +switch(!0){case l.startsWith("can "):return super.compute([l.substr(4),r],t) +case l.startsWith("is "):return(0,n.is)(this,[l.substr(3),r],t)}throw new Error(`${l} is not supported by the 'test' helper.`)}}e.default=l})),define("consul-ui/helpers/titleize",["exports","ember-cli-string-helpers/helpers/titleize"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"titleize",{enumerable:!0,get:function(){return t.titleize}})})),define("consul-ui/helpers/to-hash",["exports","@ember/component/helper","@ember/object"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var l=(0,t.helper)(((e,t)=>{let[l=[],r]=e +return Array.isArray(l)||(l=l.toArray()),l.reduce(((e,t,l)=>(e[(0,n.get)(t,r)]=t,e)),{})})) +e.default=l})),define("consul-ui/helpers/to-route",["exports","@ember/component/helper","@ember/service"],(function(e,t,n){var l,r,i,o,a +function u(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function s(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let c=(l=(0,n.inject)("router"),r=(0,n.inject)("env"),i=class extends t.default{constructor(){super(...arguments),u(this,"router",o,this),u(this,"env",a,this)}compute(e){let[t]=e +return this.router.recognize(`${this.env.var("rootURL")}${t}`).name}},o=s(i.prototype,"router",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),a=s(i.prototype,"env",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),i) +e.default=c})),define("consul-ui/helpers/toggle-action",["exports","ember-composable-helpers/helpers/toggle-action"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/toggle",["exports","ember-composable-helpers/helpers/toggle"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"toggle",{enumerable:!0,get:function(){return t.toggle}})})),define("consul-ui/helpers/token/is-anonymous",["exports","@ember/component/helper","@ember/object"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.isAnonymous=r +const l="00000000-0000-0000-0000-000000000002" +function r(e,t){return(0,n.get)(e[0],"AccessorID")===l}var i=(0,t.helper)(r) +e.default=i})),define("consul-ui/helpers/token/is-legacy",["exports","@ember/component/helper","@ember/object"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.isLegacy=r +const l=function(e){const t=(0,n.get)(e,"Rules") +if(null!=t)return""!==t.trim() +const l=(0,n.get)(e,"Legacy") +return void 0!==l&&l} +function r(e,t){const n=e[0] +return void 0!==n.length?n.find((function(e){return l(e)})):l(n)}var i=(0,t.helper)(r) +e.default=i})),define("consul-ui/helpers/transition-to",["exports","ember-router-helpers/helpers/transition-to"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"transitionTo",{enumerable:!0,get:function(){return t.transitionTo}})})),define("consul-ui/helpers/trunc",["exports","ember-math-helpers/helpers/trunc"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"trunc",{enumerable:!0,get:function(){return t.trunc}})})),define("consul-ui/helpers/truncate",["exports","ember-cli-string-helpers/helpers/truncate"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"truncate",{enumerable:!0,get:function(){return t.truncate}})})),define("consul-ui/helpers/tween-to",["exports","@ember/component/helper","@ember/service"],(function(e,t,n){var l,r,i +Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let o=(l=(0,n.inject)("ticker"),r=class extends t.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="ticker",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}compute(e,t){let[n,l]=e +return this.ticker.tweenTo(n,l)}},a=r.prototype,u="ticker",s=[l],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},p={},Object.keys(c).forEach((function(e){p[e]=c[e]})),p.enumerable=!!p.enumerable,p.configurable=!!p.configurable,("value"in p||p.initializer)&&(p.writable=!0),p=s.slice().reverse().reduce((function(e,t){return t(a,u,e)||e}),p),d&&void 0!==p.initializer&&(p.value=p.initializer?p.initializer.call(d):void 0,p.initializer=void 0),void 0===p.initializer&&(Object.defineProperty(a,u,p),p=null),i=p,r) +var a,u,s,c,d,p +e.default=o})),define("consul-ui/helpers/union",["exports","ember-composable-helpers/helpers/union"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/uniq-by",["exports","@ember/component/helper","@ember/utils","@ember/array"],(function(e,t,n,l){function r(e){let[t,r]=e +return(0,n.isEmpty)(t)?[]:(0,l.A)(r).uniqBy(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.uniqBy=r +var i=(0,t.helper)(r) +e.default=i})),define("consul-ui/helpers/unique-id",["exports","@ember/component/helper","@ember/service"],(function(e,t,n){var l,r,i +Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let o=(l=(0,n.inject)("dom"),r=class extends t.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="dom",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}compute(e,t){return this.dom.guid({})}},a=r.prototype,u="dom",s=[l],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},p={},Object.keys(c).forEach((function(e){p[e]=c[e]})),p.enumerable=!!p.enumerable,p.configurable=!!p.configurable,("value"in p||p.initializer)&&(p.writable=!0),p=s.slice().reverse().reduce((function(e,t){return t(a,u,e)||e}),p),d&&void 0!==p.initializer&&(p.value=p.initializer?p.initializer.call(d):void 0,p.initializer=void 0),void 0===p.initializer&&(Object.defineProperty(a,u,p),p=null),i=p,r) +var a,u,s,c,d,p +e.default=o})),define("consul-ui/helpers/uppercase",["exports","ember-cli-string-helpers/helpers/uppercase"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"uppercase",{enumerable:!0,get:function(){return t.uppercase}})})),define("consul-ui/helpers/uri",["exports","@ember/component/helper","@ember/service"],(function(e,t,n){var l,r,i,o,a +function u(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function s(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const c=/\${([A-Za-z.0-9_-]+)}/g +let d,p=(l=(0,n.inject)("encoder"),r=(0,n.inject)("data-source/service"),i=class extends t.default{constructor(){super(...arguments),u(this,"encoder",o,this),u(this,"data",a,this),"function"!=typeof d&&(d=this.encoder.createRegExpEncoder(c,encodeURIComponent))}compute(e){let[t,n]=e +return this.data.uri(d(t,n))}},o=s(i.prototype,"encoder",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),a=s(i.prototype,"data",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),i) +e.default=p})),define("consul-ui/helpers/url-for",["exports","ember-router-helpers/helpers/url-for"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"urlFor",{enumerable:!0,get:function(){return t.urlFor}})})),define("consul-ui/helpers/values",["exports","ember-composable-helpers/helpers/values"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"values",{enumerable:!0,get:function(){return t.values}})})),define("consul-ui/helpers/will-destroy",["exports","ember-render-helpers/helpers/will-destroy"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/without",["exports","ember-composable-helpers/helpers/without"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"without",{enumerable:!0,get:function(){return t.without}})})),define("consul-ui/helpers/xor",["exports","ember-truth-helpers/helpers/xor"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"xor",{enumerable:!0,get:function(){return t.xor}})})),define("consul-ui/initializers/app-version",["exports","ember-cli-app-version/initializer-factory","consul-ui/config/environment"],(function(e,t,n){let l,r +Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,n.default.APP&&(l=n.default.APP.name,r=n.default.APP.version) +var i={name:"App Version",initialize:(0,t.default)(l,r)} +e.default=i})),define("consul-ui/initializers/container-debug-adapter",["exports","ember-resolver/resolvers/classic/container-debug-adapter"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n={name:"container-debug-adapter",initialize(){(arguments[1]||arguments[0]).register("container-debug-adapter:main",t.default)}} +e.default=n})),define("consul-ui/initializers/ember-data-data-adapter",["exports","@ember-data/debug/setup"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/initializers/ember-data",["exports","ember-data","ember-data/setup-container"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var l={name:"ember-data",initialize:n.default} +e.default=l})),define("consul-ui/initializers/export-application-global",["exports","ember","consul-ui/config/environment"],(function(e,t,n){function l(){var e=arguments[1]||arguments[0] +if(!1!==n.default.exportApplicationGlobal){var l +if("undefined"!=typeof window)l=window +else if("undefined"!=typeof global)l=global +else{if("undefined"==typeof self)return +l=self}var r,i=n.default.exportApplicationGlobal +r="string"==typeof i?i:t.default.String.classify(n.default.modulePrefix),l[r]||(l[r]=e,e.reopen({willDestroy:function(){this._super.apply(this,arguments),delete l[r]}}))}}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.initialize=l +var r={name:"export-application-global",initialize:l} +e.default=r})),define("consul-ui/initializers/flash-messages",["exports","consul-ui/config/environment","@ember/debug","ember-cli-flash/utils/flash-message-options"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.initialize=r +function r(){const e=arguments[1]||arguments[0],{flashMessageDefaults:n}=t.default||{},{injectionFactories:r}=n||[],i=(0,l.default)(n) +r&&r.length +i.injectionFactories.forEach((t=>{e.inject(t,"flashMessages","service:flash-messages")}))}var i={name:"flash-messages",initialize:r} +e.default=i})),define("consul-ui/initializers/initialize-torii-callback",["exports","consul-ui/config/environment","torii/redirect-handler"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var l={name:"torii-callback",before:"torii",initialize(e){arguments[1]&&(e=arguments[1]),t.default.torii&&t.default.torii.disableRedirectInitializer||(e.deferReadiness(),n.default.handle(window).catch((function(){e.advanceReadiness()})))}} +e.default=l})),define("consul-ui/initializers/initialize-torii-session",["exports","torii/bootstrap/session","torii/configuration"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var l={name:"torii-session",after:"torii",initialize(e){arguments[1]&&(e=arguments[1]) +const l=(0,n.getConfiguration)() +l.sessionServiceName&&(0,t.default)(e,l.sessionServiceName)}} +e.default=l})) +define("consul-ui/initializers/initialize-torii",["exports","torii/bootstrap/torii","torii/configuration","consul-ui/config/environment"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var r={name:"torii",initialize(e){arguments[1]&&(e=arguments[1]),(0,n.configure)(l.default.torii||{}),(0,t.default)(e)}},i=r +e.default=i})),define("consul-ui/initializers/model-fragments",["exports","ember-data-model-fragments","ember-data-model-fragments/ext"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var l={name:"fragmentTransform",after:"ember-data",initialize(){}} +e.default=l})),define("consul-ui/initializers/setup-ember-can",["exports","ember-can/initializers/setup-ember-can"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"initialize",{enumerable:!0,get:function(){return t.initialize}})})),define("consul-ui/instance-initializers/container",["exports","@ember/debug","require","deepmerge"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.services=e.default=void 0 +const r=document,i=l.default.all([...r.querySelectorAll("script[data-services]")].map((e=>JSON.parse(e.dataset.services)))) +e.services=i +var o={name:"container",initialize(e){(function(e,t){Object.entries(t).forEach((t=>{let[l,r]=t +if(1==("string"==typeof r.class)){if(!n.default.has(r.class))throw new Error(`Unable to locate '${r.class}'`) +e.register(l.replace("auth-provider:","torii-provider:"),(0,n.default)(r.class).default)}}))})(e,i) +const l=e.lookup("service:container") +let r=l.get("container-debug-adapter:main").catalogEntriesByType("service").filter((e=>e.startsWith("repository/")||"ui-config"===e));(0,t.runInDebug)((()=>r=r.filter((e=>!e.endsWith("-test"))))),r.push("repository/service"),r.forEach((e=>{const t=`service:${e}` +l.set(t,l.resolveRegistration(t))}))}} +e.default=o})),define("consul-ui/instance-initializers/ember-data",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var t={name:"ember-data",initialize(){}} +e.default=t})),define("consul-ui/instance-initializers/href-to",["exports","@ember/routing/link-component"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.HrefTo=void 0 +class n{constructor(e,t){this.applicationInstance=e,this.target=t +const n=this.target.attributes.href +this.url=n&&n.value}handle(e){this.shouldHandle(e)&&(e.preventDefault(),this.applicationInstance.lookup("router:main").location.transitionTo(this.url))}shouldHandle(e){return this.isUnmodifiedLeftClick(e)&&!this.isIgnored(this.target)&&!this.isExternal(this.target)&&!this.hasActionHelper(this.target)&&!this.hasDownload(this.target)&&!this.isLinkComponent(this.target)}isUnmodifiedLeftClick(e){return!(void 0!==e.which&&1!==e.which||e.ctrlKey||e.metaKey)}isExternal(e){return"_blank"===e.getAttribute("target")}isIgnored(e){return e.dataset.nativeHref}hasActionHelper(e){return e.dataset.emberAction}hasDownload(e){return e.hasAttribute("download")}isLinkComponent(e){let n=!1 +const l=e.id +if(l){const e=this.applicationInstance.lookup("-view-registry:main")[l] +n=e&&e instanceof t.default}return n}recognizeUrl(e){let t=!1 +if(e){const n=this._getRouter(),l=this._getRootUrl(),r=0===e.indexOf(l),i=this.getUrlWithoutRoot(),o=n._router._routerMicrolib||n._router.router +t=r&&o.recognizer.recognize(i)}return t}getUrlWithoutRoot(){const e=this.applicationInstance.lookup("router:main").location +let t=e.getURL.apply({getHash:()=>"",location:{pathname:this.url},baseURL:e.baseURL,rootURL:e.rootURL,env:e.env},[]) +const n=t.indexOf("?") +return-1!==n&&(t=t.substr(0,n-1)),t}_getRouter(){return this.applicationInstance.lookup("service:router")}_getRootUrl(){let e=this._getRouter().get("rootURL") +return"/"!==e.charAt(e.length-1)&&(e+="/"),e}}e.HrefTo=n +var l={name:"href-to",initialize(e){if("undefined"==typeof FastBoot){const t=e.lookup("service:dom").document(),l=t=>{const l="A"===t.target.tagName?t.target:function(e){if(e.closest)return e.closest("a") +for(e=e.parentElement;e&&"A"!==e.tagName;)e=e.parentElement +return e}(t.target) +if(l){new n(e,l).handle(t)}} +t.body.addEventListener("click",l),e.reopen({willDestroy(){return t.body.removeEventListener("click",l),this._super(...arguments)}})}}} +e.default=l})),define("consul-ui/instance-initializers/ivy-codemirror",["exports"],(function(e){function t(e){const t=e.application.name,n=e.lookup("service:-document"),l=new Map(Object.entries(JSON.parse(n.querySelector(`[data-${t}-fs]`).textContent))) +CodeMirror.modeURL={replace:function(e,t){switch(t.trim()){case"javascript":return l.get(["codemirror","mode","javascript","javascript.js"].join("/")) +case"ruby":return l.get(["codemirror","mode","ruby","ruby.js"].join("/")) +case"yaml":return l.get(["codemirror","mode","yaml","yaml.js"].join("/")) +case"xml":return l.get(["codemirror","mode","xml","xml.js"].join("/"))}}} +e.resolveRegistration("component:ivy-codemirror").reopen({attributeBindings:["name"]})}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.initialize=t +var n={initialize:t} +e.default=n})),define("consul-ui/instance-initializers/load-sprite",["exports","@hashicorp/ember-flight-icons/instance-initializers/load-sprite"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"initialize",{enumerable:!0,get:function(){return t.initialize}})})),define("consul-ui/instance-initializers/selection",["exports","consul-ui/env"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n={name:"selection",initialize(e){if((0,t.env)("CONSUL_UI_DISABLE_ANCHOR_SELECTION"))return +const n=e.lookup("service:dom"),l=n.document(),r=l.getElementsByTagName("html")[0],i=function(e){return"A"===e.tagName?e:n.closest("a",e)},o=function(e){if(r.classList.contains("is-debug"))return +const t=i(e.target) +if(t){if(void 0!==e.button&&2===e.button){const e=t.dataset.href +return void(e&&t.setAttribute("href",e))}const n=t.getAttribute("href") +n&&(t.dataset.href=n,t.removeAttribute("href"))}},a=function(e){if(r.classList.contains("is-debug"))return +const t=i(e.target) +if(t){const n=t.dataset.href +!function(){const t=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:window).getSelection() +let n=!1 +try{n="isCollapsed"in t&&!t.isCollapsed&&t.toString().length>1}catch(e){}return n}()&&n&&t.setAttribute("href",n)}} +l.body.addEventListener("mousedown",o),l.body.addEventListener("mouseup",a),e.reopen({willDestroy:function(){return l.body.removeEventListener("mousedown",o),l.body.removeEventListener("mouseup",a),this._super(...arguments)}})}} +e.default=n})),define("consul-ui/instance-initializers/setup-routes",["exports","ember","torii/bootstrap/routing","torii/configuration","torii/compat/get-router-instance","torii/compat/get-router-lib","torii/router-dsl-ext"],(function(e,t,n,l,r,i,o){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var a={name:"torii-setup-routes",initialize(e){if(!(0,l.getConfiguration)().sessionServiceName)return +let o=(0,r.default)(e) +const a=e.lookup("service:router") +var u=function(){var l=(0,i.default)(o).authenticatedRoutes +!t.default.isEmpty(l)&&(0,n.default)(e,l),a.off("routeWillChange",u)} +a.on("routeWillChange",u)}} +e.default=a})),define("consul-ui/instance-initializers/walk-providers",["exports","torii/lib/container-utils","torii/configuration"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var l={name:"torii-walk-providers",initialize(e){let l=(0,n.getConfiguration)() +for(var r in l.providers)l.providers.hasOwnProperty(r)&&(0,t.lookup)(e,"torii-provider:"+r)}} +e.default=l})),define("consul-ui/locations/fsm-with-optional-test",["exports","consul-ui/locations/fsm-with-optional","consul-ui/locations/fsm","@ember/test-helpers"],(function(e,t,n,l){function r(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class i extends t.default{static create(){return new this(...arguments)}constructor(){super(...arguments),r(this,"implementation","fsm-with-optional-test"),this.location=new n.Location,this.machine=new n.FSM(this.location),this.doc={defaultView:{addEventListener:(e,t)=>{this.machine=new n.FSM(this.location,t)},removeEventListener:(e,t)=>{this.machine=new n.FSM}}}}visit(e){const t=this.container,n=this.container.lookup("router:main"),r=async e=>(await(0,l.settled)(),new Promise((e=>setTimeout(e(t),0)))),i=e=>{if(e.error)throw e.error +if("TransitionAborted"===e.name&&n._routerMicrolib.activeTransition)return n._routerMicrolib.activeTransition.then(r,i) +throw"TransitionAborted"===e.name?new Error(e.message):e} +return""===this.location.pathname?(this.rootURL=n.rootURL.replace(/\/$/,""),this.machine.state.path=this.location.pathname=`${this.rootURL}${e}`,this.path=this.getURL(),t.handleURL(`${this.path}`).then(r,i)):this.transitionTo(e).then(r,i)}}e.default=i})),define("consul-ui/locations/fsm-with-optional",["exports","consul-ui/env"],(function(e,t){function n(e,t){var n=Object.keys(e) +if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) +t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function l(e){for(var t=1;t{if(t<4){let t=!1 +return Object.entries(i).reduce(((n,l)=>{let[r,i]=l +const o=i.exec(e) +return null!==o&&(n[r]={value:e,match:o[1]},t=!0),n}),this.optional),!t}return!0})).join("/")}optionalParams(){let e=this.optional||{} +return["partition","nspace","peer"].reduce(((t,n)=>{let l="" +return void 0!==e[n]&&(l=e[n].match),t[n]=l,t}),{})}visit(){return this.transitionTo(...arguments)}hrefTo(e,n,r){const i=l({},r) +void 0!==i.dc&&delete i.dc,void 0!==i.nspace&&(i.nspace=`~${i.nspace}`),void 0!==i.partition&&(i.partition=`_${i.partition}`),void 0!==i.peer&&(i.peer=`:${i.peer}`),void 0===this.router&&(this.router=this.container.lookup("router:main")) +let o=!0 +switch(!0){case"settings"===e:case e.startsWith("docs."):o=!1}if(this.router.currentRouteName.startsWith("docs.")&&(n.unshift((0,t.env)("CONSUL_DATACENTER_PRIMARY")),e.startsWith("dc")))return`console://${e} <= ${JSON.stringify(n)}` +const a=this.router._routerMicrolib +let u +try{u=a.generate(e,...n,{queryParams:{}})}catch(s){n=Object.values(a.oldState.params).reduce(((e,t)=>e.concat(Object.keys(t).length>0?t:[])),[]),u=a.generate(e,...n)}return this.formatURL(u,i,o)}transitionTo(e){if(void 0===this.router&&(this.router=this.container.lookup("router:main")),this.router.currentRouteName.startsWith("docs")&&e.startsWith("console://"))return console.info(`location.transitionTo: ${e.substr(10)}`),!0 +const t=Object.entries(this.optionalParams()),n=this.getURLForTransition(e) +if(this._previousURL===n)return this.dispatch("push",e),Promise.resolve() +{const l=this.optionalParams() +return t.some((e=>{let[t,n]=e +return l[t]!==n}))&&this.dispatch("push",e),this.container.lookup("router:main").transitionTo(n)}}getURL(){const e=this.location.search||"" +let t="" +void 0!==this.location.hash&&(t=this.location.hash.substr(0)) +return`${this.getURLForTransition(this.location.pathname)}${e}${t}`}formatURL(e,t){let n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2] +if(""!==e?(this.rootURL=this.rootURL.replace(o,""),this.baseURL=this.baseURL.replace(o,"")):"/"===this.baseURL[0]&&"/"===this.rootURL[0]&&(this.baseURL=this.baseURL.replace(o,"")),n){const n=e.split("/") +t=l(l({},this.optional),t||{}),t=Object.values(t).filter((e=>Boolean(e))).map((e=>e.value||e),[]),n.splice(...[1,0].concat(t)),e=n.join("/")}return`${this.baseURL}${this.rootURL}${e}`}changeURL(e,t){this.path=t +const n=this.machine.state +t=this.formatURL(t),n&&n.path===t||this.dispatch(e,t)}setURL(e){this.changeURL("push",e)}replaceURL(e){this.changeURL("replace",e)}onUpdateURL(e){this.callback=e}dispatch(e,t){const n={path:t,uuid:"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(e=>{const t=16*Math.random()|0 +return("x"===e?t:3&t|8).toString(16)}))} +this.machine[`${e}State`](n,null,t),this.route({state:n})}willDestroy(){this.doc.defaultView.removeEventListener("popstate",this.route)}}})),define("consul-ui/locations/fsm",["exports"],(function(e){function t(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.Location=e.FSM=void 0 +e.FSM=class{constructor(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:()=>{} +t(this,"state",{}),this.listener=n,this.location=e}pushState(e,t,n){this.state=e,this.location.pathname=n,this.listener({state:this.state})}replaceState(){return this.pushState(...arguments)}} +e.Location=class{constructor(){t(this,"pathname",""),t(this,"search",""),t(this,"hash","")}} +e.default=class{static create(){return new this(...arguments)}constructor(e){t(this,"implementation","fsm"),this.container=Object.entries(e)[0][1]}visit(){return this.transitionTo(...arguments)}hrefTo(){}transitionTo(){}}})),define("consul-ui/machines/boolean.xstate",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default={id:"boolean",initial:"false",states:{true:{on:{TOGGLE:[{target:"false"}],FALSE:[{target:"false"}]}},false:{on:{TOGGLE:[{target:"true"}],TRUE:[{target:"true"}]}}}}})),define("consul-ui/machines/validate.xstate",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default={id:"form",initial:"idle",on:{RESET:[{target:"idle"}]},states:{idle:{on:{SUCCESS:[{target:"success"}],ERROR:[{target:"error"}]}},success:{},error:{}}}})),define("consul-ui/mixins/policy/as-many",["exports","@ember/object/mixin","@ember/object","consul-ui/utils/minimizeModel"],(function(e,t,n,l){function r(e,t){var n=Object.keys(e) +if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) +t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function i(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const o=function(e,t,n,l){return(e||[]).map((function(e){const r={template:t,Name:e[n]} +return void 0!==e[l]&&(r[l]=e[l]),r}))},a=function(e){return(e||[]).map((function(e){return function(e){for(var t=1;t(n.Policies=a(n.Policies).concat(o(n.ServiceIdentities,"service-identity","ServiceName","Datacenters")).concat(o(n.NodeIdentities,"node-identity","NodeName","Datacenter")),t(e,n))))}),t)},respondForQuery:function(e,t){return this._super((function(t){return e((function(e,n){return t(e,n.map((function(e){return e.Policies=a(e.Policies).concat(o(e.ServiceIdentities,"service-identity","ServiceName","Datacenters")).concat(o(e.NodeIdentities,"node-identity","NodeName","Datacenter")),e})))}))}),t)},serialize:function(e,t){const r=this._super(...arguments) +return r.ServiceIdentities=u(r.Policies,"service-identity","ServiceName","Datacenters"),r.NodeIdentities=u(r.Policies,"node-identity","NodeName","Datacenter"),r.Policies=(0,l.default)(r.Policies.filter((function(e){return""===(0,n.get)(e,"template")}))),r}}) +e.default=s})),define("consul-ui/mixins/role/as-many",["exports","@ember/object/mixin","consul-ui/utils/minimizeModel"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var l=t.default.create({respondForQueryRecord:function(e,t){return this._super((function(t){return e(((e,n)=>(n.Roles=void 0===n.Roles||null===n.Roles?[]:n.Roles,t(e,n))))}),t)},respondForQuery:function(e,t){return this._super((function(t){return e((function(e,n){return t(e,n.map((function(e){return e.Roles=void 0===e.Roles||null===e.Roles?[]:e.Roles,e})))}))}),t)},serialize:function(e,t){const l=this._super(...arguments) +return l.Roles=(0,n.default)(l.Roles),l}}) +e.default=l})),define("consul-ui/mixins/slots",["exports","block-slots/mixins/slots"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/mixins/with-blocking-actions",["exports","@ember/object/mixin","@ember/service","@ember/object","ember-inflector"],(function(e,t,n,l,r){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var i=t.default.create({_feedback:(0,n.inject)("feedback"),settings:(0,n.inject)("settings"),init:function(){this._super(...arguments) +const e=this._feedback,t=this;(0,l.set)(this,"feedback",{execute:function(n,l,i){const o=t.routeName.split(".") +o.pop() +const a=(0,r.singularize)(o.pop()) +return e.execute(n,l,i,a)}})},afterCreate:function(e){return this.afterUpdate(...arguments)},afterUpdate:function(e){const t=this.routeName.split(".") +return t.pop(),this.transitionTo(t.join("."))},afterDelete:function(e){const t=this.routeName.split(".") +return"index"===t.pop()?this.refresh():this.transitionTo(t.join("."))},errorCreate:function(e,t){return e},errorUpdate:function(e,t){return e},errorDelete:function(e,t){return e},actions:{cancel:function(){return this.afterUpdate(...arguments)},create:function(e,t){return t.preventDefault(),this.feedback.execute((()=>this.repo.persist(e).then((e=>this.afterCreate(...arguments)))),"create",((e,t)=>this.errorCreate(e,t)))},update:function(e,t){return t.preventDefault(),this.feedback.execute((()=>this.repo.persist(e).then((()=>this.afterUpdate(...arguments)))),"update",((e,t)=>this.errorUpdate(e,t)))},delete:function(e){return this.feedback.execute((()=>this.repo.remove(e).then((()=>this.afterDelete(...arguments)))),"delete",((e,t)=>this.errorDelete(e,t)))},use:function(e){return this.repo.findBySlug({dc:(0,l.get)(e,"Datacenter"),ns:(0,l.get)(e,"Namespace"),partition:(0,l.get)(e,"Partition"),id:(0,l.get)(e,"AccessorID")}).then((e=>this.settings.persist({token:{AccessorID:(0,l.get)(e,"AccessorID"),SecretID:(0,l.get)(e,"SecretID"),Namespace:(0,l.get)(e,"Namespace"),Partition:(0,l.get)(e,"Partition")}})))},logout:function(e){return this.settings.delete("token")},clone:function(e){let t +return this.feedback.execute((()=>this.repo.clone(e).then((e=>(t=e,this.afterDelete(...arguments)))).then((function(){return t}))),"clone")}}}) +e.default=i})),define("consul-ui/models/auth-method",["exports","@ember-data/model","@ember/object/computed","parse-duration","@ember/object"],(function(e,t,n,l,r){var i,o,a,u,s,c,d,p,f,m,h,b,y,v,g,O,P,w,x,j,_,S,k,N,C,z,M,D,T,E,L,A,R,I,$,F +function U(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function B(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.PRIMARY_KEY=void 0 +e.PRIMARY_KEY="uid" +e.SLUG_KEY="Name" +let q=(i=(0,t.attr)("string"),o=(0,t.attr)("string"),a=(0,t.attr)("string"),u=(0,t.attr)("string"),s=(0,t.attr)("string"),c=(0,t.attr)("string",{defaultValue:()=>""}),d=(0,t.attr)("string",{defaultValue:()=>""}),p=(0,t.attr)("string",{defaultValue:()=>"local"}),f=(0,t.attr)("string"),m=(0,t.attr)(),h=(0,n.or)("DisplayName","Name"),b=(0,t.attr)(),y=(0,t.attr)("string"),v=(0,t.attr)("number"),g=(0,t.attr)("number"),O=(0,t.attr)(),P=(0,t.attr)(),w=(0,r.computed)("MaxTokenTTL"),x=class extends t.default{constructor(){super(...arguments),U(this,"uid",j,this),U(this,"Name",_,this),U(this,"Datacenter",S,this),U(this,"Namespace",k,this),U(this,"Partition",N,this),U(this,"Description",C,this),U(this,"DisplayName",z,this),U(this,"TokenLocality",M,this),U(this,"Type",D,this),U(this,"NamespaceRules",T,this),U(this,"MethodName",E,this),U(this,"Config",L,this),U(this,"MaxTokenTTL",A,this),U(this,"CreateIndex",R,this),U(this,"ModifyIndex",I,this),U(this,"Datacenters",$,this),U(this,"meta",F,this)}get TokenTTL(){return(0,l.default)(this.MaxTokenTTL)}},j=B(x.prototype,"uid",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),_=B(x.prototype,"Name",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),S=B(x.prototype,"Datacenter",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),k=B(x.prototype,"Namespace",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),N=B(x.prototype,"Partition",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),C=B(x.prototype,"Description",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),z=B(x.prototype,"DisplayName",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),M=B(x.prototype,"TokenLocality",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),D=B(x.prototype,"Type",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),T=B(x.prototype,"NamespaceRules",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),E=B(x.prototype,"MethodName",[h],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),L=B(x.prototype,"Config",[b],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),A=B(x.prototype,"MaxTokenTTL",[y],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),R=B(x.prototype,"CreateIndex",[v],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),I=B(x.prototype,"ModifyIndex",[g],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),$=B(x.prototype,"Datacenters",[O],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),F=B(x.prototype,"meta",[P],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),B(x.prototype,"TokenTTL",[w],Object.getOwnPropertyDescriptor(x.prototype,"TokenTTL"),x.prototype),x) +e.default=q})),define("consul-ui/models/binding-rule",["exports","@ember-data/model"],(function(e,t){var n,l,r,i,o,a,u,s,c,d,p,f,m,h,b,y,v,g,O,P,w,x,j,_,S +function k(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function N(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.PRIMARY_KEY=void 0 +e.PRIMARY_KEY="uid" +e.SLUG_KEY="ID" +let C=(n=(0,t.attr)("string"),l=(0,t.attr)("string"),r=(0,t.attr)("string"),i=(0,t.attr)("string"),o=(0,t.attr)("string"),a=(0,t.attr)("string",{defaultValue:()=>""}),u=(0,t.attr)("string"),s=(0,t.attr)("string",{defaultValue:()=>""}),c=(0,t.attr)("string"),d=(0,t.attr)("string"),p=(0,t.attr)("number"),f=(0,t.attr)("number"),m=class extends t.default{constructor(){super(...arguments),k(this,"uid",h,this),k(this,"ID",b,this),k(this,"Datacenter",y,this),k(this,"Namespace",v,this),k(this,"Partition",g,this),k(this,"Description",O,this),k(this,"AuthMethod",P,this),k(this,"Selector",w,this),k(this,"BindType",x,this),k(this,"BindName",j,this),k(this,"CreateIndex",_,this),k(this,"ModifyIndex",S,this)}},h=N(m.prototype,"uid",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=N(m.prototype,"ID",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),y=N(m.prototype,"Datacenter",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),v=N(m.prototype,"Namespace",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),g=N(m.prototype,"Partition",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),O=N(m.prototype,"Description",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),P=N(m.prototype,"AuthMethod",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),w=N(m.prototype,"Selector",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),x=N(m.prototype,"BindType",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),j=N(m.prototype,"BindName",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),_=N(m.prototype,"CreateIndex",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),S=N(m.prototype,"ModifyIndex",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m) +e.default=C})),define("consul-ui/models/coordinate",["exports","@ember-data/model"],(function(e,t){var n,l,r,i,o,a,u,s,c,d,p,f,m,h,b +function y(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function v(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.PRIMARY_KEY=void 0 +e.PRIMARY_KEY="uid" +e.SLUG_KEY="Node" +let g=(n=(0,t.attr)("string"),l=(0,t.attr)("string"),r=(0,t.attr)(),i=(0,t.attr)("string"),o=(0,t.attr)("string"),a=(0,t.attr)("string"),u=(0,t.attr)("number"),s=class extends t.default{constructor(){super(...arguments),y(this,"uid",c,this),y(this,"Node",d,this),y(this,"Coord",p,this),y(this,"Segment",f,this),y(this,"Datacenter",m,this),y(this,"Partition",h,this),y(this,"SyncTime",b,this)}},c=v(s.prototype,"uid",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),d=v(s.prototype,"Node",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p=v(s.prototype,"Coord",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f=v(s.prototype,"Segment",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m=v(s.prototype,"Datacenter",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=v(s.prototype,"Partition",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=v(s.prototype,"SyncTime",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),s) +e.default=g})),define("consul-ui/models/dc",["exports","@ember-data/model"],(function(e,t){var n,l,r,i,o,a,u,s,c,d,p,f,m,h,b,y,v,g,O,P,w,x,j,_,S,k,N,C,z,M,D +function T(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function E(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.PRIMARY_KEY=e.FOREIGN_KEY=void 0 +e.PRIMARY_KEY="uid" +e.FOREIGN_KEY="Datacenter" +e.SLUG_KEY="Name" +let L=(n=(0,t.attr)("string"),l=(0,t.attr)("string"),r=(0,t.attr)("boolean"),i=(0,t.attr)("number"),o=(0,t.attr)("number"),a=(0,t.attr)("string"),u=(0,t.attr)(),s=(0,t.attr)(),c=(0,t.attr)(),d=(0,t.attr)(),p=(0,t.attr)(),f=(0,t.attr)("boolean"),m=(0,t.attr)("boolean"),h=(0,t.attr)("string"),b=(0,t.attr)("boolean",{defaultValue:()=>!0}),y=class extends t.default{constructor(){super(...arguments),T(this,"uri",v,this),T(this,"Name",g,this),T(this,"Healthy",O,this),T(this,"FailureTolerance",P,this),T(this,"OptimisticFailureTolerance",w,this),T(this,"Leader",x,this),T(this,"Voters",j,this),T(this,"Servers",_,this),T(this,"RedundancyZones",S,this),T(this,"Default",k,this),T(this,"ReadReplicas",N,this),T(this,"Local",C,this),T(this,"Primary",z,this),T(this,"DefaultACLPolicy",M,this),T(this,"MeshEnabled",D,this)}},v=E(y.prototype,"uri",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),g=E(y.prototype,"Name",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),O=E(y.prototype,"Healthy",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),P=E(y.prototype,"FailureTolerance",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),w=E(y.prototype,"OptimisticFailureTolerance",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),x=E(y.prototype,"Leader",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),j=E(y.prototype,"Voters",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),_=E(y.prototype,"Servers",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),S=E(y.prototype,"RedundancyZones",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),k=E(y.prototype,"Default",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),N=E(y.prototype,"ReadReplicas",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),C=E(y.prototype,"Local",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),z=E(y.prototype,"Primary",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),M=E(y.prototype,"DefaultACLPolicy",[h],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),D=E(y.prototype,"MeshEnabled",[b],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),y) +e.default=L})),define("consul-ui/models/discovery-chain",["exports","@ember-data/model"],(function(e,t){var n,l,r,i,o,a,u,s,c,d,p,f,m,h,b +function y(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function v(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.PRIMARY_KEY=void 0 +e.PRIMARY_KEY="uid" +e.SLUG_KEY="ServiceName" +let g=(n=(0,t.attr)("string"),l=(0,t.attr)("string"),r=(0,t.attr)("string"),i=(0,t.attr)("string"),o=(0,t.attr)("string"),a=(0,t.attr)(),u=(0,t.attr)(),s=class extends t.default{constructor(){super(...arguments),y(this,"uid",c,this),y(this,"ServiceName",d,this),y(this,"Datacenter",p,this),y(this,"Partition",f,this),y(this,"Namespace",m,this),y(this,"Chain",h,this),y(this,"meta",b,this)}},c=v(s.prototype,"uid",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),d=v(s.prototype,"ServiceName",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p=v(s.prototype,"Datacenter",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f=v(s.prototype,"Partition",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m=v(s.prototype,"Namespace",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=v(s.prototype,"Chain",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=v(s.prototype,"meta",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),s) +e.default=g})),define("consul-ui/models/gateway-config",["exports","ember-data-model-fragments/fragment","ember-data-model-fragments/attributes","@ember-data/model"],(function(e,t,n,l){var r,i,o,a,u +function s(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function c(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let d=(r=(0,l.attr)("number",{defaultValue:()=>0}),i=(0,n.array)("string",{defaultValue:()=>[]}),o=class extends t.default{constructor(){super(...arguments),s(this,"AssociatedServiceCount",a,this),s(this,"Addresses",u,this)}},a=c(o.prototype,"AssociatedServiceCount",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),u=c(o.prototype,"Addresses",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),o) +e.default=d})),define("consul-ui/models/health-check",["exports","ember-data-model-fragments/fragment","ember-data-model-fragments/attributes","@ember-data/model","@ember/object","consul-ui/decorators/replace"],(function(e,t,n,l,r,i){var o,a,u,s,c,d,p,f,m,h,b,y,v,g,O,P,w,x,j,_,S,k,N,C,z,M,D,T,E +function L(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function A(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.schema=e.default=void 0 +e.schema={Status:{allowedValues:["passing","warning","critical"]},Type:{allowedValues:["serf","script","http","tcp","ttl","docker","grpc","alias"]}} +let R=(o=(0,l.attr)("string"),a=(0,l.attr)("string"),u=(0,i.replace)("","serf"),s=(0,l.attr)("string"),c=(0,l.attr)("string"),d=(0,l.attr)("string"),p=(0,l.attr)("string"),f=(0,l.attr)("string"),m=(0,l.attr)("string"),h=(0,l.attr)("string"),b=(0,i.nullValue)([]),y=(0,n.array)("string"),v=(0,l.attr)(),g=(0,l.attr)("boolean"),O=(0,r.computed)("ServiceID"),P=(0,r.computed)("Type"),w=class extends t.default{constructor(){super(...arguments),L(this,"Name",x,this),L(this,"CheckID",j,this),L(this,"Type",_,this),L(this,"Status",S,this),L(this,"Notes",k,this),L(this,"Output",N,this),L(this,"ServiceName",C,this),L(this,"ServiceID",z,this),L(this,"Node",M,this),L(this,"ServiceTags",D,this),L(this,"Definition",T,this),L(this,"Exposed",E,this)}get Kind(){return""===this.ServiceID?"node":"service"}get Exposable(){return["http","grpc"].includes(this.Type)}},x=A(w.prototype,"Name",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),j=A(w.prototype,"CheckID",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),_=A(w.prototype,"Type",[u,s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),S=A(w.prototype,"Status",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),k=A(w.prototype,"Notes",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),N=A(w.prototype,"Output",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),C=A(w.prototype,"ServiceName",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),z=A(w.prototype,"ServiceID",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),M=A(w.prototype,"Node",[h],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),D=A(w.prototype,"ServiceTags",[b,y],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),T=A(w.prototype,"Definition",[v],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),E=A(w.prototype,"Exposed",[g],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),A(w.prototype,"Kind",[O],Object.getOwnPropertyDescriptor(w.prototype,"Kind"),w.prototype),A(w.prototype,"Exposable",[P],Object.getOwnPropertyDescriptor(w.prototype,"Exposable"),w.prototype),w) +e.default=R})),define("consul-ui/models/intention-permission-http-header",["exports","ember-data-model-fragments/fragment","@ember-data/model","@ember/object","@ember/object/computed"],(function(e,t,n,l,r){var i,o,a,u,s,c,d,p,f,m,h,b,y,v,g,O +function P(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function w(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.schema=e.default=void 0 +const x={Name:{required:!0},HeaderType:{allowedValues:["Exact","Prefix","Suffix","Regex","Present"]}} +e.schema=x +let j=(i=(0,n.attr)("string"),o=(0,n.attr)("string"),a=(0,n.attr)("string"),u=(0,n.attr)("string"),s=(0,n.attr)("string"),c=(0,n.attr)(),d=(0,r.or)(...x.HeaderType.allowedValues),p=(0,l.computed)(...x.HeaderType.allowedValues),f=class extends t.default{constructor(){super(...arguments),P(this,"Name",m,this),P(this,"Exact",h,this),P(this,"Prefix",b,this),P(this,"Suffix",y,this),P(this,"Regex",v,this),P(this,"Present",g,this),P(this,"Value",O,this)}get HeaderType(){return x.HeaderType.allowedValues.find((e=>void 0!==this[e]))}},m=w(f.prototype,"Name",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=w(f.prototype,"Exact",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=w(f.prototype,"Prefix",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),y=w(f.prototype,"Suffix",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),v=w(f.prototype,"Regex",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),g=w(f.prototype,"Present",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),O=w(f.prototype,"Value",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),w(f.prototype,"HeaderType",[p],Object.getOwnPropertyDescriptor(f.prototype,"HeaderType"),f.prototype),f) +e.default=j})),define("consul-ui/models/intention-permission-http",["exports","ember-data-model-fragments/fragment","ember-data-model-fragments/attributes","@ember-data/model","@ember/object","@ember/object/computed"],(function(e,t,n,l,r,i){var o,a,u,s,c,d,p,f,m,h,b,y,v,g +function O(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function P(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.schema=e.default=void 0 +const w={PathType:{allowedValues:["PathPrefix","PathExact","PathRegex"]},Methods:{allowedValues:["GET","HEAD","POST","PUT","DELETE","CONNECT","OPTIONS","TRACE","PATCH"]}} +e.schema=w +let x=(o=(0,l.attr)("string"),a=(0,l.attr)("string"),u=(0,l.attr)("string"),s=(0,n.fragmentArray)("intention-permission-http-header"),c=(0,n.array)("string"),d=(0,i.or)(...w.PathType.allowedValues),p=(0,r.computed)(...w.PathType.allowedValues),f=class extends t.default{constructor(){super(...arguments),O(this,"PathExact",m,this),O(this,"PathPrefix",h,this),O(this,"PathRegex",b,this),O(this,"Header",y,this),O(this,"Methods",v,this),O(this,"Path",g,this)}get PathType(){return w.PathType.allowedValues.find((e=>"string"==typeof this[e]))}},m=P(f.prototype,"PathExact",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=P(f.prototype,"PathPrefix",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=P(f.prototype,"PathRegex",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),y=P(f.prototype,"Header",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),v=P(f.prototype,"Methods",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),g=P(f.prototype,"Path",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),P(f.prototype,"PathType",[p],Object.getOwnPropertyDescriptor(f.prototype,"PathType"),f.prototype),f) +e.default=x})),define("consul-ui/models/intention-permission",["exports","ember-data-model-fragments/fragment","ember-data-model-fragments/attributes","@ember-data/model"],(function(e,t,n,l){var r,i,o,a,u +function s(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function c(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.schema=e.default=void 0 +const d={Action:{defaultValue:"allow",allowedValues:["allow","deny"]}} +e.schema=d +let p=(r=(0,l.attr)("string",{defaultValue:()=>d.Action.defaultValue}),i=(0,n.fragment)("intention-permission-http"),o=class extends t.default{constructor(){super(...arguments),s(this,"Action",a,this),s(this,"HTTP",u,this)}},a=c(o.prototype,"Action",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),u=c(o.prototype,"HTTP",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),o) +e.default=p})) +define("consul-ui/models/intention",["exports","@ember-data/model","@ember/object","ember-data-model-fragments/attributes","consul-ui/decorators/replace"],(function(e,t,n,l,r){var i,o,a,u,s,c,d,p,f,m,h,b,y,v,g,O,P,w,x,j,_,S,k,N,C,z,M,D,T,E,L,A,R,I,$,F,U,B,q,K,H,Y,G,V,W,Z,Q,J,X,ee,te,ne +function le(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function re(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.PRIMARY_KEY=void 0 +e.PRIMARY_KEY="uid" +e.SLUG_KEY="ID" +let ie=(i=(0,t.attr)("string"),o=(0,t.attr)("string"),a=(0,t.attr)("string"),u=(0,t.attr)("string"),s=(0,r.default)("",void 0),c=(0,t.attr)("string"),d=(0,t.attr)("string",{defaultValue:()=>"*"}),p=(0,t.attr)("string",{defaultValue:()=>"*"}),f=(0,t.attr)("string",{defaultValue:()=>"default"}),m=(0,t.attr)("string",{defaultValue:()=>"default"}),h=(0,t.attr)("string",{defaultValue:()=>"default"}),b=(0,t.attr)("string",{defaultValue:()=>"default"}),y=(0,t.attr)("number"),v=(0,t.attr)("string",{defaultValue:()=>"consul"}),g=(0,r.nullValue)(void 0),O=(0,t.attr)("string"),P=(0,t.attr)("string"),w=(0,t.attr)("boolean",{defaultValue:()=>!0}),x=(0,t.attr)("number"),j=(0,t.attr)("date"),_=(0,t.attr)("date"),S=(0,t.attr)("number"),k=(0,t.attr)("number"),N=(0,t.attr)(),C=(0,t.attr)({defaultValue:()=>[]}),z=(0,l.fragmentArray)("intention-permission"),M=(0,n.computed)("Meta"),D=class extends t.default{constructor(){super(...arguments),le(this,"uid",T,this),le(this,"ID",E,this),le(this,"Datacenter",L,this),le(this,"Description",A,this),le(this,"SourcePeer",R,this),le(this,"SourceName",I,this),le(this,"DestinationName",$,this),le(this,"SourceNS",F,this),le(this,"DestinationNS",U,this),le(this,"SourcePartition",B,this),le(this,"DestinationPartition",q,this),le(this,"Precedence",K,this),le(this,"SourceType",H,this),le(this,"Action",Y,this),le(this,"LegacyID",G,this),le(this,"Legacy",V,this),le(this,"SyncTime",W,this),le(this,"CreatedAt",Z,this),le(this,"UpdatedAt",Q,this),le(this,"CreateIndex",J,this),le(this,"ModifyIndex",X,this),le(this,"Meta",ee,this),le(this,"Resources",te,this),le(this,"Permissions",ne,this)}get IsManagedByCRD(){return void 0!==Object.entries(this.Meta||{}).find((e=>{let[t,n]=e +return"external-source"===t&&"kubernetes"===n}))}},T=re(D.prototype,"uid",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),E=re(D.prototype,"ID",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),L=re(D.prototype,"Datacenter",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),A=re(D.prototype,"Description",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),R=re(D.prototype,"SourcePeer",[s,c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),I=re(D.prototype,"SourceName",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),$=re(D.prototype,"DestinationName",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),F=re(D.prototype,"SourceNS",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),U=re(D.prototype,"DestinationNS",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),B=re(D.prototype,"SourcePartition",[h],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),q=re(D.prototype,"DestinationPartition",[b],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),K=re(D.prototype,"Precedence",[y],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),H=re(D.prototype,"SourceType",[v],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Y=re(D.prototype,"Action",[g,O],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),G=re(D.prototype,"LegacyID",[P],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),V=re(D.prototype,"Legacy",[w],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),W=re(D.prototype,"SyncTime",[x],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Z=re(D.prototype,"CreatedAt",[j],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Q=re(D.prototype,"UpdatedAt",[_],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),J=re(D.prototype,"CreateIndex",[S],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),X=re(D.prototype,"ModifyIndex",[k],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ee=re(D.prototype,"Meta",[N],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),te=re(D.prototype,"Resources",[C],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ne=re(D.prototype,"Permissions",[z],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),re(D.prototype,"IsManagedByCRD",[M],Object.getOwnPropertyDescriptor(D.prototype,"IsManagedByCRD"),D.prototype),D) +e.default=ie})),define("consul-ui/models/kv",["exports","@ember-data/model","@ember/object","consul-ui/utils/isFolder","consul-ui/decorators/replace"],(function(e,t,n,l,r){var i,o,a,u,s,c,d,p,f,m,h,b,y,v,g,O,P,w,x,j,_,S,k,N,C,z,M,D,T,E,L,A +function R(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function I(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.PRIMARY_KEY=void 0 +e.PRIMARY_KEY="uid" +e.SLUG_KEY="Key" +let $=(i=(0,t.attr)("string"),o=(0,t.attr)("string"),a=(0,t.attr)("number"),u=(0,t.attr)(),s=(0,t.attr)("string"),c=(0,t.attr)("string"),d=(0,t.attr)("string"),p=(0,t.attr)("number"),f=(0,t.attr)("number"),m=(0,r.nullValue)(void 0),h=(0,t.attr)("string"),b=(0,t.attr)("number"),y=(0,t.attr)("number"),v=(0,t.attr)("string"),g=(0,t.attr)({defaultValue:()=>[]}),O=(0,n.computed)("isFolder"),P=(0,n.computed)("Key"),w=class extends t.default{constructor(){super(...arguments),R(this,"uid",x,this),R(this,"Key",j,this),R(this,"SyncTime",_,this),R(this,"meta",S,this),R(this,"Datacenter",k,this),R(this,"Namespace",N,this),R(this,"Partition",C,this),R(this,"LockIndex",z,this),R(this,"Flags",M,this),R(this,"Value",D,this),R(this,"CreateIndex",T,this),R(this,"ModifyIndex",E,this),R(this,"Session",L,this),R(this,"Resources",A,this)}get Kind(){return this.isFolder?"folder":"key"}get isFolder(){return(0,l.default)(this.Key||"")}},x=I(w.prototype,"uid",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),j=I(w.prototype,"Key",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),_=I(w.prototype,"SyncTime",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),S=I(w.prototype,"meta",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),k=I(w.prototype,"Datacenter",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),N=I(w.prototype,"Namespace",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),C=I(w.prototype,"Partition",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),z=I(w.prototype,"LockIndex",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),M=I(w.prototype,"Flags",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),D=I(w.prototype,"Value",[m,h],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),T=I(w.prototype,"CreateIndex",[b],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),E=I(w.prototype,"ModifyIndex",[y],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),L=I(w.prototype,"Session",[v],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),A=I(w.prototype,"Resources",[g],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),I(w.prototype,"Kind",[O],Object.getOwnPropertyDescriptor(w.prototype,"Kind"),w.prototype),I(w.prototype,"isFolder",[P],Object.getOwnPropertyDescriptor(w.prototype,"isFolder"),w.prototype),w) +e.default=$})),define("consul-ui/models/license",["exports","@ember-data/model"],(function(e,t){var n,l,r,i,o,a,u,s,c,d,p,f,m,h,b,y,v +function g(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function O(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.PRIMARY_KEY=void 0 +e.PRIMARY_KEY="uri" +let P=(n=(0,t.attr)("string"),l=(0,t.attr)("boolean"),r=(0,t.attr)("number"),i=(0,t.attr)(),o=(0,t.attr)("string"),a=(0,t.attr)("string"),u=(0,t.attr)("string"),s=(0,t.attr)(),c=class extends t.default{constructor(){super(...arguments),g(this,"uri",d,this),g(this,"Valid",p,this),g(this,"SyncTime",f,this),g(this,"meta",m,this),g(this,"Datacenter",h,this),g(this,"Namespace",b,this),g(this,"Partition",y,this),g(this,"License",v,this)}},d=O(c.prototype,"uri",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p=O(c.prototype,"Valid",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f=O(c.prototype,"SyncTime",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m=O(c.prototype,"meta",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=O(c.prototype,"Datacenter",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=O(c.prototype,"Namespace",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),y=O(c.prototype,"Partition",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),v=O(c.prototype,"License",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),c) +e.default=P})),define("consul-ui/models/node",["exports","@ember-data/model","@ember/object","@ember/object/computed","ember-data-model-fragments/attributes"],(function(e,t,n,l,r){var i,o,a,u,s,c,d,p,f,m,h,b,y,v,g,O,P,w,x,j,_,S,k,N,C,z,M,D,T,E,L,A,R,I,$,F,U,B,q,K,H,Y,G,V +function W(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function Z(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.PRIMARY_KEY=void 0 +e.PRIMARY_KEY="uid" +e.SLUG_KEY="ID" +let Q=(i=(0,t.attr)("string"),o=(0,t.attr)("string"),a=(0,t.attr)("string"),u=(0,t.attr)("string"),s=(0,t.attr)("string"),c=(0,t.attr)("string"),d=(0,t.attr)("string"),p=(0,t.attr)("number"),f=(0,t.attr)("number"),m=(0,t.attr)("number"),h=(0,t.attr)(),b=(0,t.attr)(),y=(0,t.attr)(),v=(0,t.attr)({defaultValue:()=>[]}),g=(0,t.hasMany)("service-instance"),O=(0,r.fragmentArray)("health-check"),P=(0,l.filter)("Services",(e=>"connect-proxy"!==e.Service.Kind)),w=(0,l.filter)("Services",(e=>"connect-proxy"===e.Service.Kind)),x=(0,l.filter)("Checks",(e=>""===e.ServiceID)),j=(0,n.computed)("ChecksCritical","ChecksPassing","ChecksWarning"),_=(0,n.computed)("NodeChecks.[]"),S=(0,n.computed)("NodeChecks.[]"),k=(0,n.computed)("NodeChecks.[]"),N=(0,n.computed)("Meta"),C=class extends t.default{constructor(){super(...arguments),W(this,"uid",z,this),W(this,"ID",M,this),W(this,"Datacenter",D,this),W(this,"PeerName",T,this),W(this,"Partition",E,this),W(this,"Address",L,this),W(this,"Node",A,this),W(this,"SyncTime",R,this),W(this,"CreateIndex",I,this),W(this,"ModifyIndex",$,this),W(this,"meta",F,this),W(this,"Meta",U,this),W(this,"TaggedAddresses",B,this),W(this,"Resources",q,this),W(this,"Services",K,this),W(this,"Checks",H,this),W(this,"MeshServiceInstances",Y,this),W(this,"ProxyServiceInstances",G,this),W(this,"NodeChecks",V,this)}get Status(){switch(!0){case 0!==this.ChecksCritical:return"critical" +case 0!==this.ChecksWarning:return"warning" +case 0!==this.ChecksPassing:return"passing" +default:return"empty"}}get ChecksCritical(){return this.NodeChecks.filter((e=>"critical"===e.Status)).length}get ChecksPassing(){return this.NodeChecks.filter((e=>"passing"===e.Status)).length}get ChecksWarning(){return this.NodeChecks.filter((e=>"warning"===e.Status)).length}get Version(){var e,t +return null!==(e=null===(t=this.Meta)||void 0===t?void 0:t["consul-version"])&&void 0!==e?e:""}},z=Z(C.prototype,"uid",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),M=Z(C.prototype,"ID",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),D=Z(C.prototype,"Datacenter",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),T=Z(C.prototype,"PeerName",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),E=Z(C.prototype,"Partition",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),L=Z(C.prototype,"Address",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),A=Z(C.prototype,"Node",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),R=Z(C.prototype,"SyncTime",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),I=Z(C.prototype,"CreateIndex",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),$=Z(C.prototype,"ModifyIndex",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),F=Z(C.prototype,"meta",[h],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),U=Z(C.prototype,"Meta",[b],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),B=Z(C.prototype,"TaggedAddresses",[y],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),q=Z(C.prototype,"Resources",[v],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),K=Z(C.prototype,"Services",[g],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),H=Z(C.prototype,"Checks",[O],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Y=Z(C.prototype,"MeshServiceInstances",[P],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),G=Z(C.prototype,"ProxyServiceInstances",[w],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),V=Z(C.prototype,"NodeChecks",[x],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Z(C.prototype,"Status",[j],Object.getOwnPropertyDescriptor(C.prototype,"Status"),C.prototype),Z(C.prototype,"ChecksCritical",[_],Object.getOwnPropertyDescriptor(C.prototype,"ChecksCritical"),C.prototype),Z(C.prototype,"ChecksPassing",[S],Object.getOwnPropertyDescriptor(C.prototype,"ChecksPassing"),C.prototype),Z(C.prototype,"ChecksWarning",[k],Object.getOwnPropertyDescriptor(C.prototype,"ChecksWarning"),C.prototype),Z(C.prototype,"Version",[N],Object.getOwnPropertyDescriptor(C.prototype,"Version"),C.prototype),C) +e.default=Q})),define("consul-ui/models/nspace",["exports","@ember-data/model"],(function(e,t){var n,l,r,i,o,a,u,s,c,d,p,f,m,h,b,y,v,g,O,P,w +function x(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function j(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.PRIMARY_KEY=e.NSPACE_KEY=void 0 +e.PRIMARY_KEY="uid" +e.SLUG_KEY="Name" +e.NSPACE_KEY="Namespace" +let _=(n=(0,t.attr)("string"),l=(0,t.attr)("string"),r=(0,t.attr)("string"),i=(0,t.attr)("string"),o=(0,t.attr)("string"),a=(0,t.attr)("number"),u=(0,t.attr)("string",{defaultValue:()=>""}),s=(0,t.attr)({defaultValue:()=>[]}),c=(0,t.attr)("string"),d=(0,t.attr)({defaultValue:()=>({PolicyDefaults:[],RoleDefaults:[]})}),p=class extends t.default{constructor(){super(...arguments),x(this,"uid",f,this),x(this,"Name",m,this),x(this,"Datacenter",h,this),x(this,"Partition",b,this),x(this,"Namespace",y,this),x(this,"SyncTime",v,this),x(this,"Description",g,this),x(this,"Resources",O,this),x(this,"DeletedAt",P,this),x(this,"ACLs",w,this)}},f=j(p.prototype,"uid",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m=j(p.prototype,"Name",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=j(p.prototype,"Datacenter",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=j(p.prototype,"Partition",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),y=j(p.prototype,"Namespace",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),v=j(p.prototype,"SyncTime",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),g=j(p.prototype,"Description",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),O=j(p.prototype,"Resources",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),P=j(p.prototype,"DeletedAt",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),w=j(p.prototype,"ACLs",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p) +e.default=_})),define("consul-ui/models/oidc-provider",["exports","@ember-data/model"],(function(e,t){var n,l,r,i,o,a,u,s,c,d,p,f,m,h,b,y,v,g,O +function P(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function w(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.PRIMARY_KEY=void 0 +e.PRIMARY_KEY="uid" +e.SLUG_KEY="Name" +let x=(n=(0,t.attr)("string"),l=(0,t.attr)("string"),r=(0,t.attr)("string"),i=(0,t.attr)("string"),o=(0,t.attr)("string"),a=(0,t.attr)("string"),u=(0,t.attr)("string"),s=(0,t.attr)("string"),c=(0,t.attr)(),d=class extends t.default{constructor(){super(...arguments),P(this,"uid",p,this),P(this,"Name",f,this),P(this,"Datacenter",m,this),P(this,"Namespace",h,this),P(this,"Partition",b,this),P(this,"Kind",y,this),P(this,"AuthURL",v,this),P(this,"DisplayName",g,this),P(this,"meta",O,this)}},p=w(d.prototype,"uid",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f=w(d.prototype,"Name",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m=w(d.prototype,"Datacenter",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=w(d.prototype,"Namespace",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=w(d.prototype,"Partition",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),y=w(d.prototype,"Kind",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),v=w(d.prototype,"AuthURL",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),g=w(d.prototype,"DisplayName",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),O=w(d.prototype,"meta",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),d) +e.default=x})),define("consul-ui/models/partition",["exports","@ember-data/model"],(function(e,t){var n,l,r,i,o,a,u,s,c,d,p,f,m,h,b,y,v,g,O +function P(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function w(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.PRIMARY_KEY=e.PARTITION_KEY=void 0 +e.PRIMARY_KEY="uid" +e.SLUG_KEY="Name" +e.PARTITION_KEY="Partition" +let x=(n=(0,t.attr)("string"),l=(0,t.attr)("string"),r=(0,t.attr)("string"),i=(0,t.attr)("string"),o=(0,t.attr)("string"),a=(0,t.attr)("string"),u=(0,t.attr)("string"),s=(0,t.attr)("number"),c=(0,t.attr)(),d=class extends t.default{constructor(){super(...arguments),P(this,"uid",p,this),P(this,"Name",f,this),P(this,"Description",m,this),P(this,"DeletedAt",h,this),P(this,"Datacenter",b,this),P(this,"Namespace",y,this),P(this,"Partition",v,this),P(this,"SyncTime",g,this),P(this,"meta",O,this)}},p=w(d.prototype,"uid",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f=w(d.prototype,"Name",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m=w(d.prototype,"Description",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=w(d.prototype,"DeletedAt",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=w(d.prototype,"Datacenter",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),y=w(d.prototype,"Namespace",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),v=w(d.prototype,"Partition",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),g=w(d.prototype,"SyncTime",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),O=w(d.prototype,"meta",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),d) +e.default=x})),define("consul-ui/models/peer",["exports","@ember-data/model","consul-ui/decorators/replace"],(function(e,t,n){var l,r,i,o,a,u,s,c,d,p,f,m,h,b,y,v,g,O,P,w,x,j,_,S,k,N,C,z,M,D,T,E,L,A,R,I +function $(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function F(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.schema=e.default=void 0 +e.schema={State:{defaultValue:"PENDING",allowedValues:["PENDING","ESTABLISHING","ACTIVE","FAILING","TERMINATED","DELETING"]}} +let U=(l=(0,t.attr)("string"),r=(0,t.attr)(),i=(0,t.attr)("string"),o=(0,t.attr)("string"),a=(0,t.attr)("string"),u=(0,t.attr)("string"),s=(0,t.attr)("string"),c=(0,t.attr)("string"),d=(0,n.nullValue)([]),p=(0,t.attr)(),f=(0,t.attr)("string"),m=(0,t.attr)(),h=(0,n.nullValue)([]),b=(0,t.attr)(),y=(0,n.nullValue)([]),v=(0,t.attr)(),g=(0,t.attr)("date"),O=(0,t.attr)("date"),P=(0,t.attr)("date"),w=class extends t.default{constructor(){super(...arguments),$(this,"uri",x,this),$(this,"meta",j,this),$(this,"Datacenter",_,this),$(this,"Partition",S,this),$(this,"Name",k,this),$(this,"State",N,this),$(this,"ID",C,this),$(this,"ServerExternalAddresses",z,this),$(this,"ServerExternalAddresses",M,this),$(this,"PeerID",D,this),$(this,"PeerServerAddresses",T,this),$(this,"ImportedServices",E,this),$(this,"ExportedServices",L,this),$(this,"LastHeartbeat",A,this),$(this,"LastReceive",R,this),$(this,"LastSend",I,this)}get ImportedServiceCount(){return this.ImportedServices.length}get ExportedServiceCount(){return this.ExportedServices.length}get isReceiver(){return this.PeerID}get isDialer(){return!this.isReceiver}},x=F(w.prototype,"uri",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),j=F(w.prototype,"meta",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),_=F(w.prototype,"Datacenter",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),S=F(w.prototype,"Partition",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),k=F(w.prototype,"Name",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),N=F(w.prototype,"State",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),C=F(w.prototype,"ID",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),z=F(w.prototype,"ServerExternalAddresses",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),M=F(w.prototype,"ServerExternalAddresses",[d,p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),D=F(w.prototype,"PeerID",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),T=F(w.prototype,"PeerServerAddresses",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),E=F(w.prototype,"ImportedServices",[h,b],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),L=F(w.prototype,"ExportedServices",[y,v],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),A=F(w.prototype,"LastHeartbeat",[g],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),R=F(w.prototype,"LastReceive",[O],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),I=F(w.prototype,"LastSend",[P],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),w) +e.default=U})),define("consul-ui/models/permission",["exports","@ember-data/model"],(function(e,t){var n,l,r,i,o,a,u,s,c +function d(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function p(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let f=(n=(0,t.attr)("string"),l=(0,t.attr)("string"),r=(0,t.attr)("string"),i=(0,t.attr)("boolean"),o=class extends t.default{constructor(){super(...arguments),d(this,"Resource",a,this),d(this,"Segment",u,this),d(this,"Access",s,this),d(this,"Allow",c,this)}},a=p(o.prototype,"Resource",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),u=p(o.prototype,"Segment",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),s=p(o.prototype,"Access",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),c=p(o.prototype,"Allow",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),o) +e.default=f})),define("consul-ui/models/policy",["exports","@ember-data/model","@ember/object"],(function(e,t,n){var l,r,i,o,a,u,s,c,d,p,f,m,h,b,y,v,g,O,P,w,x,j,_,S,k,N,C,z,M,D,T,E +function L(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function A(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.PRIMARY_KEY=e.MANAGEMENT_ID=void 0 +const R="00000000-0000-0000-0000-000000000001" +e.MANAGEMENT_ID=R +e.PRIMARY_KEY="uid" +e.SLUG_KEY="ID" +let I=(l=(0,t.attr)("string"),r=(0,t.attr)("string"),i=(0,t.attr)("string"),o=(0,t.attr)("string"),a=(0,t.attr)("string"),u=(0,t.attr)("string",{defaultValue:()=>""}),s=(0,t.attr)("string",{defaultValue:()=>""}),c=(0,t.attr)("string",{defaultValue:()=>""}),d=(0,t.attr)("number"),p=(0,t.attr)("number"),f=(0,t.attr)("number"),m=(0,t.attr)(),h=(0,t.attr)(),b=(0,t.attr)("string",{defaultValue:()=>""}),y=(0,t.attr)("number",{defaultValue:()=>(new Date).getTime()}),v=(0,n.computed)("ID"),g=class extends t.default{constructor(){super(...arguments),L(this,"uid",O,this),L(this,"ID",P,this),L(this,"Datacenter",w,this),L(this,"Namespace",x,this),L(this,"Partition",j,this),L(this,"Name",_,this),L(this,"Description",S,this),L(this,"Rules",k,this),L(this,"SyncTime",N,this),L(this,"CreateIndex",C,this),L(this,"ModifyIndex",z,this),L(this,"Datacenters",M,this),L(this,"meta",D,this),L(this,"template",T,this),L(this,"CreateTime",E,this)}get isGlobalManagement(){return this.ID===R}},O=A(g.prototype,"uid",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),P=A(g.prototype,"ID",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),w=A(g.prototype,"Datacenter",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),x=A(g.prototype,"Namespace",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),j=A(g.prototype,"Partition",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),_=A(g.prototype,"Name",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),S=A(g.prototype,"Description",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),k=A(g.prototype,"Rules",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),N=A(g.prototype,"SyncTime",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),C=A(g.prototype,"CreateIndex",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),z=A(g.prototype,"ModifyIndex",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),M=A(g.prototype,"Datacenters",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),D=A(g.prototype,"meta",[h],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),T=A(g.prototype,"template",[b],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),E=A(g.prototype,"CreateTime",[y],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),A(g.prototype,"isGlobalManagement",[v],Object.getOwnPropertyDescriptor(g.prototype,"isGlobalManagement"),g.prototype),g) +e.default=I})),define("consul-ui/models/proxy",["exports","@ember-data/model","consul-ui/models/service-instance"],(function(e,t,n){var l,r,i,o,a,u,s,c,d,p,f,m,h,b,y,v,g,O,P,w,x +function j(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function _(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.PRIMARY_KEY=void 0 +e.PRIMARY_KEY="uid" +e.SLUG_KEY="Node,ServiceID" +let S=(l=(0,t.attr)("string"),r=(0,t.attr)("string"),i=(0,t.attr)("string"),o=(0,t.attr)("string"),a=(0,t.attr)("string"),u=(0,t.attr)("string"),s=(0,t.attr)("string"),c=(0,t.attr)("string"),d=(0,t.attr)("number"),p=(0,t.attr)(),f=class extends n.default{constructor(){super(...arguments),j(this,"uid",m,this),j(this,"ID",h,this),j(this,"Datacenter",b,this),j(this,"Namespace",y,this),j(this,"Partition",v,this),j(this,"ServiceName",g,this),j(this,"ServiceID",O,this),j(this,"NodeName",P,this),j(this,"SyncTime",w,this),j(this,"ServiceProxy",x,this)}},m=_(f.prototype,"uid",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=_(f.prototype,"ID",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=_(f.prototype,"Datacenter",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),y=_(f.prototype,"Namespace",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),v=_(f.prototype,"Partition",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),g=_(f.prototype,"ServiceName",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),O=_(f.prototype,"ServiceID",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),P=_(f.prototype,"NodeName",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),w=_(f.prototype,"SyncTime",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),x=_(f.prototype,"ServiceProxy",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f) +e.default=S})),define("consul-ui/models/role",["exports","@ember-data/model"],(function(e,t){var n,l,r,i,o,a,u,s,c,d,p,f,m,h,b,y,v,g,O,P,w,x,j,_,S,k,N,C,z,M,D,T,E +function L(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function A(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.PRIMARY_KEY=void 0 +e.PRIMARY_KEY="uid" +e.SLUG_KEY="ID" +let R=(n=(0,t.attr)("string"),l=(0,t.attr)("string"),r=(0,t.attr)("string"),i=(0,t.attr)("string"),o=(0,t.attr)("string"),a=(0,t.attr)("string",{defaultValue:()=>""}),u=(0,t.attr)("string",{defaultValue:()=>""}),s=(0,t.attr)({defaultValue:()=>[]}),c=(0,t.attr)({defaultValue:()=>[]}),d=(0,t.attr)({defaultValue:()=>[]}),p=(0,t.attr)("number"),f=(0,t.attr)("number"),m=(0,t.attr)("number"),h=(0,t.attr)("number"),b=(0,t.attr)(),y=(0,t.attr)("string"),v=class extends t.default{constructor(){super(...arguments),L(this,"uid",g,this),L(this,"ID",O,this),L(this,"Datacenter",P,this),L(this,"Namespace",w,this),L(this,"Partition",x,this),L(this,"Name",j,this),L(this,"Description",_,this),L(this,"Policies",S,this),L(this,"ServiceIdentities",k,this),L(this,"NodeIdentities",N,this),L(this,"SyncTime",C,this),L(this,"CreateIndex",z,this),L(this,"ModifyIndex",M,this),L(this,"CreateTime",D,this),L(this,"Datacenters",T,this),L(this,"Hash",E,this)}},g=A(v.prototype,"uid",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),O=A(v.prototype,"ID",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),P=A(v.prototype,"Datacenter",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),w=A(v.prototype,"Namespace",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),x=A(v.prototype,"Partition",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),j=A(v.prototype,"Name",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),_=A(v.prototype,"Description",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),S=A(v.prototype,"Policies",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),k=A(v.prototype,"ServiceIdentities",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),N=A(v.prototype,"NodeIdentities",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),C=A(v.prototype,"SyncTime",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),z=A(v.prototype,"CreateIndex",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),M=A(v.prototype,"ModifyIndex",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),D=A(v.prototype,"CreateTime",[h],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),T=A(v.prototype,"Datacenters",[b],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),E=A(v.prototype,"Hash",[y],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),v) +e.default=R})),define("consul-ui/models/service-instance",["exports","@ember-data/model","ember-data-model-fragments/attributes","@ember/object","@ember/object/computed","@glimmer/tracking"],(function(e,t,n,l,r,i){var o,a,u,s,c,d,p,f,m,h,b,y,v,g,O,P,w,x,j,_,S,k,N,C,z,M,D,T,E,L,A,R,I,$,F,U,B,q,K,H,Y,G,V,W,Z,Q,J,X,ee,te,ne,le +function re(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function ie(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.PRIMARY_KEY=e.Collection=void 0 +e.PRIMARY_KEY="uid" +e.SLUG_KEY="Node.Node,Service.ID" +const oe=(a=ie((o=class{constructor(e){re(this,"items",a,this),this.items=e}get ExternalSources(){const e=this.items.reduce((function(e,t){return e.concat(t.ExternalSources||[])}),[]) +return[...new Set(e)].filter(Boolean).sort()}}).prototype,"items",[i.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),o) +e.Collection=oe +let ae=(u=(0,t.attr)("string"),s=(0,t.attr)("string"),c=(0,t.attr)(),d=(0,t.attr)(),p=(0,t.attr)(),f=(0,n.fragmentArray)("health-check"),m=(0,t.attr)("number"),h=(0,t.attr)(),b=(0,t.attr)({defaultValue:()=>[]}),y=(0,r.alias)("Service.Service"),v=(0,r.or)("Service.{ID,Service}"),g=(0,r.or)("Service.Address","Node.Service"),O=(0,t.attr)("string"),P=(0,r.alias)("Service.Tags"),w=(0,r.alias)("Service.Meta"),x=(0,r.alias)("Service.Namespace"),j=(0,r.alias)("Service.Partition"),_=(0,r.filter)("Checks.@each.Kind",((e,t,n)=>"service"===e.Kind)),S=(0,r.filter)("Checks.@each.Kind",((e,t,n)=>"node"===e.Kind)),k=(0,l.computed)("Service.Meta"),N=(0,l.computed)("Service.Kind"),C=(0,l.computed)("Service.Kind"),z=(0,l.computed)("IsOrigin"),M=(0,l.computed)("ChecksPassing","ChecksWarning","ChecksCritical"),D=(0,l.computed)("Checks.[]"),T=(0,l.computed)("Checks.[]"),E=(0,l.computed)("Checks.[]"),L=(0,l.computed)("Checks.[]","ChecksPassing"),A=(0,l.computed)("Checks.[]","ChecksWarning"),R=(0,l.computed)("Checks.[]","ChecksCritical"),I=class extends t.default{constructor(){super(...arguments),re(this,"uid",$,this),re(this,"Datacenter",F,this),re(this,"Proxy",U,this),re(this,"Node",B,this),re(this,"Service",q,this),re(this,"Checks",K,this),re(this,"SyncTime",H,this),re(this,"meta",Y,this),re(this,"Resources",G,this),re(this,"Name",V,this),re(this,"ID",W,this),re(this,"Address",Z,this),re(this,"SocketPath",Q,this),re(this,"Tags",J,this),re(this,"Meta",X,this),re(this,"Namespace",ee,this),re(this,"Partition",te,this),re(this,"ServiceChecks",ne,this),re(this,"NodeChecks",le,this)}get ExternalSources(){const e=Object.entries(this.Service.Meta||{}).filter((e=>{let[t,n]=e +return"external-source"===t})).map((e=>{let[t,n]=e +return n})) +return[...new Set(e)]}get IsProxy(){return["connect-proxy","mesh-gateway","ingress-gateway","terminating-gateway","api-gateway"].includes(this.Service.Kind)}get IsOrigin(){return!["connect-proxy","mesh-gateway"].includes(this.Service.Kind)}get IsMeshOrigin(){return this.IsOrigin&&!["terminating-gateway"].includes(this.Service.Kind)}get Status(){switch(!0){case 0!==this.ChecksCritical.length:return"critical" +case 0!==this.ChecksWarning.length:return"warning" +case 0!==this.ChecksPassing.length:return"passing" +default:return"empty"}}get ChecksPassing(){return this.Checks.filter((e=>"passing"===e.Status))}get ChecksWarning(){return this.Checks.filter((e=>"warning"===e.Status))}get ChecksCritical(){return this.Checks.filter((e=>"critical"===e.Status))}get PercentageChecksPassing(){return this.ChecksPassing.length/this.Checks.length*100}get PercentageChecksWarning(){return this.ChecksWarning.length/this.Checks.length*100}get PercentageChecksCritical(){return this.ChecksCritical.length/this.Checks.length*100}},$=ie(I.prototype,"uid",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),F=ie(I.prototype,"Datacenter",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),U=ie(I.prototype,"Proxy",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),B=ie(I.prototype,"Node",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),q=ie(I.prototype,"Service",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),K=ie(I.prototype,"Checks",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),H=ie(I.prototype,"SyncTime",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Y=ie(I.prototype,"meta",[h],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),G=ie(I.prototype,"Resources",[b],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),V=ie(I.prototype,"Name",[y],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),W=ie(I.prototype,"ID",[v],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Z=ie(I.prototype,"Address",[g],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Q=ie(I.prototype,"SocketPath",[O],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),J=ie(I.prototype,"Tags",[P],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),X=ie(I.prototype,"Meta",[w],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ee=ie(I.prototype,"Namespace",[x],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),te=ie(I.prototype,"Partition",[j],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ne=ie(I.prototype,"ServiceChecks",[_],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),le=ie(I.prototype,"NodeChecks",[S],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ie(I.prototype,"ExternalSources",[k],Object.getOwnPropertyDescriptor(I.prototype,"ExternalSources"),I.prototype),ie(I.prototype,"IsProxy",[N],Object.getOwnPropertyDescriptor(I.prototype,"IsProxy"),I.prototype),ie(I.prototype,"IsOrigin",[C],Object.getOwnPropertyDescriptor(I.prototype,"IsOrigin"),I.prototype),ie(I.prototype,"IsMeshOrigin",[z],Object.getOwnPropertyDescriptor(I.prototype,"IsMeshOrigin"),I.prototype),ie(I.prototype,"Status",[M],Object.getOwnPropertyDescriptor(I.prototype,"Status"),I.prototype),ie(I.prototype,"ChecksPassing",[D],Object.getOwnPropertyDescriptor(I.prototype,"ChecksPassing"),I.prototype),ie(I.prototype,"ChecksWarning",[T],Object.getOwnPropertyDescriptor(I.prototype,"ChecksWarning"),I.prototype),ie(I.prototype,"ChecksCritical",[E],Object.getOwnPropertyDescriptor(I.prototype,"ChecksCritical"),I.prototype),ie(I.prototype,"PercentageChecksPassing",[L],Object.getOwnPropertyDescriptor(I.prototype,"PercentageChecksPassing"),I.prototype),ie(I.prototype,"PercentageChecksWarning",[A],Object.getOwnPropertyDescriptor(I.prototype,"PercentageChecksWarning"),I.prototype),ie(I.prototype,"PercentageChecksCritical",[R],Object.getOwnPropertyDescriptor(I.prototype,"PercentageChecksCritical"),I.prototype),I) +e.default=ae})),define("consul-ui/models/service",["exports","@ember-data/model","@ember/object","@glimmer/tracking","ember-data-model-fragments/attributes","consul-ui/decorators/replace"],(function(e,t,n,l,r,i){var o,a,u,s,c,d,p,f,m,h,b,y,v,g,O,P,w,x,j,_,S,k,N,C,z,M,D,T,E,L,A,R,I,$,F,U,B,q,K,H,Y,G,V,W,Z,Q,J,X,ee,te,ne,le,re,ie,oe,ae,ue,se,ce,de,pe,fe,me,he,be,ye,ve +function ge(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function Oe(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.PRIMARY_KEY=e.Collection=void 0 +e.PRIMARY_KEY="uid" +e.SLUG_KEY="Name,PeerName" +const Pe=(a=Oe((o=class{constructor(e){ge(this,"items",a,this),this.items=e}get ExternalSources(){const e=this.items.reduce((function(e,t){return e.concat(t.ExternalSources||[])}),[]) +return[...new Set(e)].filter(Boolean).sort()}get Partitions(){return[...new Set(this.items.map((e=>e.Partition)))].sort()}}).prototype,"items",[l.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),o) +e.Collection=Pe +let we=(u=(0,t.attr)("string"),s=(0,t.attr)("string"),c=(0,t.attr)("string"),d=(0,t.attr)("string"),p=(0,t.attr)("string"),f=(0,t.attr)("string"),m=(0,i.default)("",void 0),h=(0,t.attr)("string"),b=(0,t.attr)("number"),y=(0,t.attr)("number"),v=(0,t.attr)("number"),g=(0,t.attr)("number"),O=(0,t.attr)("boolean"),P=(0,t.attr)("boolean"),w=(0,t.attr)({defaultValue:()=>[]}),x=(0,t.attr)("number"),j=(0,t.attr)("number"),_=(0,t.attr)("number"),S=(0,i.nullValue)([]),k=(0,t.attr)({defaultValue:()=>[]}),N=(0,t.attr)(),C=(0,t.attr)(),z=(0,r.fragment)("gateway-config"),M=(0,i.nullValue)([]),D=(0,t.attr)(),T=(0,t.attr)(),E=(0,t.attr)(),L=(0,t.belongsTo)({async:!1}),A=(0,n.computed)("peer","InstanceCount"),R=(0,n.computed)("peer.State"),I=(0,n.computed)("ChecksPassing","ChecksWarning","ChecksCritical"),$=(0,n.computed)("MeshChecksPassing","MeshChecksWarning","MeshChecksCritical"),F=(0,n.computed)("ConnectedWithProxy","ConnectedWithGateway"),U=(0,n.computed)("MeshEnabled","Kind"),B=(0,n.computed)("MeshChecksPassing","MeshChecksWarning","MeshChecksCritical","isZeroCountButPeered","peerIsFailing"),q=(0,n.computed)("isZeroCountButPeered","peerIsFailing","MeshStatus"),K=(0,n.computed)("ChecksPassing","Proxy.ChecksPassing"),H=(0,n.computed)("ChecksWarning","Proxy.ChecksWarning"),Y=(0,n.computed)("ChecksCritical","Proxy.ChecksCritical"),G=class extends t.default{constructor(){super(...arguments),ge(this,"uid",V,this),ge(this,"Name",W,this),ge(this,"Datacenter",Z,this),ge(this,"Namespace",Q,this),ge(this,"Partition",J,this),ge(this,"Kind",X,this),ge(this,"PeerName",ee,this),ge(this,"ChecksPassing",te,this),ge(this,"ChecksCritical",ne,this),ge(this,"ChecksWarning",le,this),ge(this,"InstanceCount",re,this),ge(this,"ConnectedWithGateway",ie,this),ge(this,"ConnectedWithProxy",oe,this),ge(this,"Resources",ae,this),ge(this,"SyncTime",ue,this),ge(this,"CreateIndex",se,this),ge(this,"ModifyIndex",ce,this),ge(this,"Tags",de,this),ge(this,"Nodes",pe,this),ge(this,"Proxy",fe,this),ge(this,"GatewayConfig",me,this),ge(this,"ExternalSources",he,this),ge(this,"Meta",be,this),ge(this,"meta",ye,this),ge(this,"peer",ve,this)}get isZeroCountButPeered(){return this.peer&&0===this.InstanceCount}get peerIsFailing(){return this.peer&&"FAILING"===this.peer.State}get ChecksTotal(){return this.ChecksPassing+this.ChecksWarning+this.ChecksCritical}get MeshChecksTotal(){return this.MeshChecksPassing+this.MeshChecksWarning+this.MeshChecksCritical}get MeshEnabled(){return this.ConnectedWithProxy||this.ConnectedWithGateway}get InMesh(){return this.MeshEnabled||(this.Kind||"").length>0}get MeshStatus(){switch(!0){case this.isZeroCountButPeered:case this.peerIsFailing:return"unknown" +case 0!==this.MeshChecksCritical:return"critical" +case 0!==this.MeshChecksWarning:return"warning" +case 0!==this.MeshChecksPassing:return"passing" +default:return"empty"}}get healthTooltipText(){const{MeshStatus:e,isZeroCountButPeered:t,peerIsFailing:n}=this +return t?"This service currently has 0 instances. Check with the operator of its peer to make sure this is expected behavior.":n?"This peer is out of sync, so the current health statuses of its services are unknown.":"critical"===e?"At least one health check on one instance is failing.":"warning"===e?"At least one health check on one instance has a warning.":"passing"==e?"All health checks are passing.":"There are no health checks"}get MeshChecksPassing(){let e=0 +return void 0!==this.Proxy&&(e=this.Proxy.ChecksPassing),this.ChecksPassing+e}get MeshChecksWarning(){let e=0 +return void 0!==this.Proxy&&(e=this.Proxy.ChecksWarning),this.ChecksWarning+e}get MeshChecksCritical(){let e=0 +return void 0!==this.Proxy&&(e=this.Proxy.ChecksCritical),this.ChecksCritical+e}},V=Oe(G.prototype,"uid",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),W=Oe(G.prototype,"Name",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Z=Oe(G.prototype,"Datacenter",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Q=Oe(G.prototype,"Namespace",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),J=Oe(G.prototype,"Partition",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),X=Oe(G.prototype,"Kind",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ee=Oe(G.prototype,"PeerName",[m,h],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),te=Oe(G.prototype,"ChecksPassing",[b],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ne=Oe(G.prototype,"ChecksCritical",[y],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),le=Oe(G.prototype,"ChecksWarning",[v],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),re=Oe(G.prototype,"InstanceCount",[g],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ie=Oe(G.prototype,"ConnectedWithGateway",[O],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),oe=Oe(G.prototype,"ConnectedWithProxy",[P],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ae=Oe(G.prototype,"Resources",[w],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ue=Oe(G.prototype,"SyncTime",[x],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),se=Oe(G.prototype,"CreateIndex",[j],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ce=Oe(G.prototype,"ModifyIndex",[_],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),de=Oe(G.prototype,"Tags",[S,k],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),pe=Oe(G.prototype,"Nodes",[N],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),fe=Oe(G.prototype,"Proxy",[C],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),me=Oe(G.prototype,"GatewayConfig",[z],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),he=Oe(G.prototype,"ExternalSources",[M,D],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),be=Oe(G.prototype,"Meta",[T],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ye=Oe(G.prototype,"meta",[E],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ve=Oe(G.prototype,"peer",[L],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Oe(G.prototype,"isZeroCountButPeered",[A],Object.getOwnPropertyDescriptor(G.prototype,"isZeroCountButPeered"),G.prototype),Oe(G.prototype,"peerIsFailing",[R],Object.getOwnPropertyDescriptor(G.prototype,"peerIsFailing"),G.prototype),Oe(G.prototype,"ChecksTotal",[I],Object.getOwnPropertyDescriptor(G.prototype,"ChecksTotal"),G.prototype),Oe(G.prototype,"MeshChecksTotal",[$],Object.getOwnPropertyDescriptor(G.prototype,"MeshChecksTotal"),G.prototype),Oe(G.prototype,"MeshEnabled",[F],Object.getOwnPropertyDescriptor(G.prototype,"MeshEnabled"),G.prototype),Oe(G.prototype,"InMesh",[U],Object.getOwnPropertyDescriptor(G.prototype,"InMesh"),G.prototype),Oe(G.prototype,"MeshStatus",[B],Object.getOwnPropertyDescriptor(G.prototype,"MeshStatus"),G.prototype),Oe(G.prototype,"healthTooltipText",[q],Object.getOwnPropertyDescriptor(G.prototype,"healthTooltipText"),G.prototype),Oe(G.prototype,"MeshChecksPassing",[K],Object.getOwnPropertyDescriptor(G.prototype,"MeshChecksPassing"),G.prototype),Oe(G.prototype,"MeshChecksWarning",[H],Object.getOwnPropertyDescriptor(G.prototype,"MeshChecksWarning"),G.prototype),Oe(G.prototype,"MeshChecksCritical",[Y],Object.getOwnPropertyDescriptor(G.prototype,"MeshChecksCritical"),G.prototype),G) +e.default=we})),define("consul-ui/models/session",["exports","@ember-data/model","@ember/object","consul-ui/decorators/replace"],(function(e,t,n,l){var r,i,o,a,u,s,c,d,p,f,m,h,b,y,v,g,O,P,w,x,j,_,S,k,N,C,z,M,D,T,E,L,A,R,I,$ +function F(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function U(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.PRIMARY_KEY=void 0 +e.PRIMARY_KEY="uid" +e.SLUG_KEY="ID" +let B=(r=(0,t.attr)("string"),i=(0,t.attr)("string"),o=(0,t.attr)("string"),a=(0,t.attr)("string"),u=(0,t.attr)("string"),s=(0,t.attr)("string"),c=(0,t.attr)("string"),d=(0,t.attr)("string"),p=(0,t.attr)("string"),f=(0,t.attr)("number"),m=(0,t.attr)("number"),h=(0,t.attr)("number"),b=(0,t.attr)("number"),y=(0,l.nullValue)([]),v=(0,t.attr)({defaultValue:()=>[]}),g=(0,l.nullValue)([]),O=(0,t.attr)({defaultValue:()=>[]}),P=(0,t.attr)({defaultValue:()=>[]}),w=(0,n.computed)("NodeChecks","ServiceChecks"),x=class extends t.default{constructor(){super(...arguments),F(this,"uid",j,this),F(this,"ID",_,this),F(this,"Name",S,this),F(this,"Datacenter",k,this),F(this,"Namespace",N,this),F(this,"Partition",C,this),F(this,"Node",z,this),F(this,"Behavior",M,this),F(this,"TTL",D,this),F(this,"LockDelay",T,this),F(this,"SyncTime",E,this),F(this,"CreateIndex",L,this),F(this,"ModifyIndex",A,this),F(this,"NodeChecks",R,this),F(this,"ServiceChecks",I,this),F(this,"Resources",$,this)}get checks(){return[...this.NodeChecks,...this.ServiceChecks.map((e=>{let{ID:t}=e +return t}))]}},j=U(x.prototype,"uid",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),_=U(x.prototype,"ID",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),S=U(x.prototype,"Name",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),k=U(x.prototype,"Datacenter",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),N=U(x.prototype,"Namespace",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),C=U(x.prototype,"Partition",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),z=U(x.prototype,"Node",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),M=U(x.prototype,"Behavior",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),D=U(x.prototype,"TTL",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),T=U(x.prototype,"LockDelay",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),E=U(x.prototype,"SyncTime",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),L=U(x.prototype,"CreateIndex",[h],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),A=U(x.prototype,"ModifyIndex",[b],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),R=U(x.prototype,"NodeChecks",[y,v],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),I=U(x.prototype,"ServiceChecks",[g,O],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),$=U(x.prototype,"Resources",[P],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),U(x.prototype,"checks",[w],Object.getOwnPropertyDescriptor(x.prototype,"checks"),x.prototype),x) +e.default=B})),define("consul-ui/models/token",["exports","@ember-data/model","@ember/object","consul-ui/models/policy"],(function(e,t,n,l){var r,i,o,a,u,s,c,d,p,f,m,h,b,y,v,g,O,P,w,x,j,_,S,k,N,C,z,M,D,T,E,L,A,R,I,$,F,U,B,q,K,H,Y,G,V,W,Z +function Q(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function J(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.PRIMARY_KEY=void 0 +e.PRIMARY_KEY="uid" +e.SLUG_KEY="AccessorID" +let X=(r=(0,t.attr)("string"),i=(0,t.attr)("string"),o=(0,t.attr)("string"),a=(0,t.attr)("string"),u=(0,t.attr)("string"),s=(0,t.attr)("string"),c=(0,t.attr)("string"),d=(0,t.attr)("boolean"),p=(0,t.attr)("boolean"),f=(0,t.attr)("string",{defaultValue:()=>""}),m=(0,t.attr)(),h=(0,t.attr)({defaultValue:()=>[]}),b=(0,t.attr)({defaultValue:()=>[]}),y=(0,t.attr)({defaultValue:()=>[]}),v=(0,t.attr)({defaultValue:()=>[]}),g=(0,t.attr)("date"),O=(0,t.attr)("string"),P=(0,t.attr)("number"),w=(0,t.attr)("number"),x=(0,t.attr)("string"),j=(0,t.attr)("string",{defaultValue:()=>""}),_=(0,t.attr)("string"),S=(0,n.computed)("Policies.[]"),k=(0,n.computed)("SecretID"),N=class extends t.default{constructor(){super(...arguments),Q(this,"uid",C,this),Q(this,"AccessorID",z,this),Q(this,"Datacenter",M,this),Q(this,"Namespace",D,this),Q(this,"Partition",T,this),Q(this,"IDPName",E,this),Q(this,"SecretID",L,this),Q(this,"Legacy",A,this),Q(this,"Local",R,this),Q(this,"Description",I,this),Q(this,"meta",$,this),Q(this,"Policies",F,this),Q(this,"Roles",U,this),Q(this,"ServiceIdentities",B,this),Q(this,"NodeIdentities",q,this),Q(this,"CreateTime",K,this),Q(this,"Hash",H,this),Q(this,"CreateIndex",Y,this),Q(this,"ModifyIndex",G,this),Q(this,"Type",V,this),Q(this,"Name",W,this),Q(this,"Rules",Z,this)}get isGlobalManagement(){return(this.Policies||[]).find((e=>e.ID===l.MANAGEMENT_ID))}get hasSecretID(){return""!==this.SecretID&&""!==this.SecretID}},C=J(N.prototype,"uid",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),z=J(N.prototype,"AccessorID",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),M=J(N.prototype,"Datacenter",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),D=J(N.prototype,"Namespace",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),T=J(N.prototype,"Partition",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),E=J(N.prototype,"IDPName",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),L=J(N.prototype,"SecretID",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),A=J(N.prototype,"Legacy",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),R=J(N.prototype,"Local",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),I=J(N.prototype,"Description",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),$=J(N.prototype,"meta",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),F=J(N.prototype,"Policies",[h],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),U=J(N.prototype,"Roles",[b],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),B=J(N.prototype,"ServiceIdentities",[y],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),q=J(N.prototype,"NodeIdentities",[v],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),K=J(N.prototype,"CreateTime",[g],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),H=J(N.prototype,"Hash",[O],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Y=J(N.prototype,"CreateIndex",[P],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),G=J(N.prototype,"ModifyIndex",[w],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),V=J(N.prototype,"Type",[x],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),W=J(N.prototype,"Name",[j],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Z=J(N.prototype,"Rules",[_],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),J(N.prototype,"isGlobalManagement",[S],Object.getOwnPropertyDescriptor(N.prototype,"isGlobalManagement"),N.prototype),J(N.prototype,"hasSecretID",[k],Object.getOwnPropertyDescriptor(N.prototype,"hasSecretID"),N.prototype),N) +e.default=X})),define("consul-ui/models/topology",["exports","@ember-data/model","@ember/object"],(function(e,t,n){var l,r,i,o,a,u,s,c,d,p,f,m,h,b,y,v,g,O,P,w,x,j,_,S,k,N,C,z +function M(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function D(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.PRIMARY_KEY=void 0 +e.PRIMARY_KEY="uid" +e.SLUG_KEY="ServiceName" +let T=(l=(0,t.attr)("string"),r=(0,t.attr)("string"),i=(0,t.attr)("string"),o=(0,t.attr)("string"),a=(0,t.attr)("string"),u=(0,t.attr)("string"),s=(0,t.attr)("boolean"),c=(0,t.attr)("boolean"),d=(0,t.attr)("boolean"),p=(0,t.attr)(),f=(0,t.attr)(),m=(0,t.attr)(),h=(0,n.computed)("Downstreams"),b=(0,n.computed)("Downstreams","Upstreams"),y=(0,n.computed)("Downstreams","Upstreams"),v=class extends t.default{constructor(){super(...arguments),M(this,"uid",g,this),M(this,"ServiceName",O,this),M(this,"Datacenter",P,this),M(this,"Namespace",w,this),M(this,"Partition",x,this),M(this,"Protocol",j,this),M(this,"FilteredByACLs",_,this),M(this,"TransparentProxy",S,this),M(this,"ConnectNative",k,this),M(this,"Upstreams",N,this),M(this,"Downstreams",C,this),M(this,"meta",z,this)}get notDefinedIntention(){let e=!1 +return e=0!==this.Downstreams.filter((e=>"specific-intention"===e.Source&&!e.TransparentProxy&&!e.ConnectNative&&e.Intention.Allowed)).length,e}get wildcardIntention(){const e=0!==this.Downstreams.filter((e=>!e.Intention.HasExact&&e.Intention.Allowed)).length,t=0!==this.Upstreams.filter((e=>!e.Intention.HasExact&&e.Intention.Allowed)).length +return e||t}get noDependencies(){return 0===this.Upstreams.length&&0===this.Downstreams.length}},g=D(v.prototype,"uid",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),O=D(v.prototype,"ServiceName",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),P=D(v.prototype,"Datacenter",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),w=D(v.prototype,"Namespace",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),x=D(v.prototype,"Partition",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),j=D(v.prototype,"Protocol",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),_=D(v.prototype,"FilteredByACLs",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),S=D(v.prototype,"TransparentProxy",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),k=D(v.prototype,"ConnectNative",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),N=D(v.prototype,"Upstreams",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),C=D(v.prototype,"Downstreams",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),z=D(v.prototype,"meta",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),D(v.prototype,"notDefinedIntention",[h],Object.getOwnPropertyDescriptor(v.prototype,"notDefinedIntention"),v.prototype),D(v.prototype,"wildcardIntention",[b],Object.getOwnPropertyDescriptor(v.prototype,"wildcardIntention"),v.prototype),D(v.prototype,"noDependencies",[y],Object.getOwnPropertyDescriptor(v.prototype,"noDependencies"),v.prototype),v) +e.default=T})),define("consul-ui/modifiers/aria-menu",["exports","ember-modifier","@ember/service","@ember/object","@ember/destroyable"],(function(e,t,n,l,r){var i,o,a +function u(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const c={vertical:{40:function(e){return((arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1)+1)%e.length},38:function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0 +return 0===t?e.length-1:t-1},36:(e,t)=>0,35:(e,t)=>e.length-1},horizontal:{}} +function d(e){var t +e&&(null==e||null===(t=e.doc)||void 0===t||t.removeEventListener("keydown",null==e?void 0:e.keydown))}let p=(i=(0,n.inject)("-document"),o=class extends t.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="doc",l=this,(n=a)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0}),u(this,"orientation","vertical")}async keydown(e){var t,n +if(27===e.keyCode)return this.options.onclose(e),void(null===(n=this.$trigger)||void 0===n||n.focus()) +const l=[...this.element.querySelectorAll('[role^="menuitem"]')],r=l.findIndex((e=>e===this.doc.activeElement)) +var i +9!==e.keyCode?void 0!==c[this.orientation][e.keyCode]&&(null===(t=l[c[this.orientation][e.keyCode](l,r)])||void 0===t||t.focus(),e.stopPropagation(),e.preventDefault()):e.shiftKey?0===r&&(this.options.onclose(e),null===(i=this.$trigger)||void 0===i||i.focus()):r===l.length-1&&(await new Promise((e=>setTimeout(e,0))),this.options.onclose(e))}async focus(e){""===e.pointerType&&(await Promise.resolve(),this.keydown({keyCode:36,stopPropagation:()=>{},preventDefault:()=>{}}))}modify(e,t,n){this.params=t,this.options=n,this.$trigger||(this.element=e,this.$trigger=this.doc.getElementById(e.getAttribute("aria-labelledby")),void 0!==n.openEvent&&this.focus(n.openEvent),this.doc.addEventListener("keydown",this.keydown)),(0,r.registerDestructor)(this,d)}},a=s(o.prototype,"doc",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),s(o.prototype,"keydown",[l.action],Object.getOwnPropertyDescriptor(o.prototype,"keydown"),o.prototype),s(o.prototype,"focus",[l.action],Object.getOwnPropertyDescriptor(o.prototype,"focus"),o.prototype),o) +e.default=p})),define("consul-ui/modifiers/create-ref",["exports","ember-ref-bucket/modifiers/create-ref"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/modifiers/css-prop",["exports","ember-modifier","@ember/service"],(function(e,t,n){var l,r,i +Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let o=(l=(0,n.inject)("-document"),r=class extends t.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="doc",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}modify(e,t,n){(t[1]||(null==n?void 0:n.returns))(this.doc.defaultView.getComputedStyle(e).getPropertyValue(t[0]))}},a=r.prototype,u="doc",s=[l],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},p={},Object.keys(c).forEach((function(e){p[e]=c[e]})),p.enumerable=!!p.enumerable,p.configurable=!!p.configurable,("value"in p||p.initializer)&&(p.writable=!0),p=s.slice().reverse().reduce((function(e,t){return t(a,u,e)||e}),p),d&&void 0!==p.initializer&&(p.value=p.initializer?p.initializer.call(d):void 0,p.initializer=void 0),void 0===p.initializer&&(Object.defineProperty(a,u,p),p=null),i=p,r) +var a,u,s,c,d,p +e.default=o})),define("consul-ui/modifiers/css-props",["exports","ember-modifier"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const n=Object.fromEntries([...document.styleSheets].reduce(((e,t)=>e.concat([...t.cssRules].filter((e=>1===e.type)).reduce(((e,t)=>[...e,...[...t.style].filter((e=>e.startsWith("--"))).map((e=>[e.trim(),t.style.getPropertyValue(e).trim()]))]),[]))),[])) +var l=(0,t.modifier)((function(e,t,l){let[r]=t +const i=new RegExp(`^--${l.prefix||"."}${l.group||""}+`),o={} +Object.entries(n).forEach((e=>{let[t,n]=e +const r=t.match(i) +if(r){let e=r[0] +"-"===e.charAt(e.length-1)&&(e=e.substr(0,e.length-1)),l.group?(void 0===o[e]&&(o[e]={}),o[e][t]=n):o[t]=n}})),r(o)})) +e.default=l})),define("consul-ui/modifiers/did-insert",["exports","@ember/render-modifiers/modifiers/did-insert"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/modifiers/did-update",["exports","@ember/render-modifiers/modifiers/did-update"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/modifiers/did-upsert",["exports","ember-modifier"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class n extends t.default{modify(e,t,n){this.element=e +const[l,...r]=t +var i +l({target:(i=this).element,currentTarget:i.element},r,n)}}e.default=n})),define("consul-ui/modifiers/disabled",["exports","ember-modifier"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.modifier)((function(e,t,n){let[l=!0]=t +if(["input","textarea","select","button"].includes(e.nodeName.toLowerCase()))l?(e.setAttribute("disabled",l),e.setAttribute("aria-disabled",l)):(e.dataset.disabled=!1,e.removeAttribute("disabled"),e.removeAttribute("aria-disabled")) +else for(const r of e.querySelectorAll("input,textarea,button"))l&&"false"!==r.dataset.disabled?(e.setAttribute("disabled",l),e.setAttribute("aria-disabled",l)):(e.removeAttribute("disabled"),e.removeAttribute("aria-disabled"))})) +e.default=n})),define("consul-ui/modifiers/focus-trap",["exports","ember-focus-trap/modifiers/focus-trap.js"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/modifiers/hds-clipboard",["exports","@hashicorp/design-system-components/modifiers/hds-clipboard"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/modifiers/hds-tooltip",["exports","@hashicorp/design-system-components/modifiers/hds-tooltip"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/modifiers/notification",["exports","ember-modifier","@ember/service","@ember/destroyable"],(function(e,t,n,l){var r,i,o +function a(e,t){var n=Object.keys(e) +if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) +t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function u(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e){var t,n +e&&null!=e&&null!==(t=e.named)&&void 0!==t&&t.sticky&&(null===(n=e.notify)||void 0===n||n.clearMessages())}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let c=(r=(0,n.inject)("flashMessages"),i=class extends t.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="notify",l=this,(n=o)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}modify(e,t,n){this.named=n,e.setAttribute("role","alert"),e.dataset.notification=null +const r=function(e){for(var t=1;tr.after())).catch((e=>{if("TransitionAborted"!==e.name)throw e})).then((e=>{this.notify.add(r)})):this.notify.add(r),(0,l.registerDestructor)(this,s)}},d=i.prototype,p="notify",f=[r],m={configurable:!0,enumerable:!0,writable:!0,initializer:null},b={},Object.keys(m).forEach((function(e){b[e]=m[e]})),b.enumerable=!!b.enumerable,b.configurable=!!b.configurable,("value"in b||b.initializer)&&(b.writable=!0),b=f.slice().reverse().reduce((function(e,t){return t(d,p,e)||e}),b),h&&void 0!==b.initializer&&(b.value=b.initializer?b.initializer.call(h):void 0,b.initializer=void 0),void 0===b.initializer&&(Object.defineProperty(d,p,b),b=null),o=b,i) +var d,p,f,m,h,b +e.default=c})),define("consul-ui/modifiers/on-key",["exports","ember-keyboard/modifiers/on-key.js"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})) +define("consul-ui/modifiers/on-outside",["exports","ember-modifier","@ember/object","@ember/service","@ember/destroyable"],(function(e,t,n,l,r){var i,o,a +function u(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}function s(e){var t +e&&(null===(t=e.doc)||void 0===t||t.removeEventListener("click",e.listen))}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let c=(i=(0,l.inject)("dom"),o=class extends t.default{constructor(e,t){var n,l,i,o +super(e,t),n=this,l="dom",o=this,(i=a)&&Object.defineProperty(n,l,{enumerable:i.enumerable,configurable:i.configurable,writable:i.writable,value:i.initializer?i.initializer.call(o):void 0}),this.doc=this.dom.document(),(0,r.registerDestructor)(this,s)}async modify(e,t,n){s.call(this),this.params=t,this.options=n,this.element=e,await new Promise((e=>setTimeout(e,0))) +try{this.doc.addEventListener(t[0],this.listen)}catch(l){}}listen(e){if(this.element&&this.dom.isOutside(this.element,e.target)){("function"==typeof this.params[1]?this.params[1]:e=>{}).apply(this.element,[e])}}},a=u(o.prototype,"dom",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),u(o.prototype,"listen",[n.action],Object.getOwnPropertyDescriptor(o.prototype,"listen"),o.prototype),o) +e.default=c})),define("consul-ui/modifiers/on-resize",["exports","ember-on-resize-modifier/modifiers/on-resize"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/modifiers/style",["exports","ember-modifier","@ember/debug"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class l extends t.default{setStyles(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[] +const t=this._oldStyles||new Set +Array.isArray(e)||(e=Object.entries(e)),e.forEach((e=>{let[n,l]=e,r="" +l.length>0&&l.includes("!important")&&(r="important",l=l.replace("!important","")),this.element.style.setProperty(n,l,r),t.delete(n)})),t.forEach((e=>this.element.style.removeProperty(e))),this._oldStyles=new Set(e.map((e=>e[0])))}modify(e,t,n){this.element=e,void 0!==n.delay?setTimeout((e=>{typeof this!==t[0]&&this.setStyles(t[0])}),null==n?void 0:n.delay):this.setStyles(t[0])}}e.default=l})),define("consul-ui/modifiers/tooltip",["exports","ember-modifier","tippy.js"],(function(e,t,n){function l(e,t){var n=Object.keys(e) +if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) +t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function r(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var i=(0,t.modifier)((function(e,t){let[i]=t,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{} +if("string"==typeof i&&""===i.trim())return +const a=o.options||{} +let u,s=e +if("string"==typeof a.triggerTarget){const e=s +if("parentNode"===a.triggerTarget)s=s.parentNode +else s=s.querySelectorAll(a.triggerTarget) +i=s.cloneNode(!0),e.remove(),o.options.triggerTarget=void 0}if(void 0===i&&(i=s.innerHTML,s.innerHTML=""),"manual"===a.trigger){const e=a.delay||[] +void 0!==e[1]&&(o.options.onShown=t=>{clearInterval(u),u=setTimeout((()=>{t.hide()}),e[1])})}let c=s,d=!1 +c.hasAttribute("tabindex")||(d=!0,c.setAttribute("tabindex","0")) +const p=(0,n.default)(s,function(e){for(var t=1;ti,plugins:[void 0!==a.followCursor?n.followCursor:void 0].filter((e=>Boolean(e)))},o.options)) +return()=>{d&&c.removeAttribute("tabindex"),clearInterval(u),p.destroy()}})) +e.default=i})),define("consul-ui/modifiers/validate",["exports","ember-modifier","@ember/object","@ember/destroyable"],(function(e,t,n,l){var r +function i(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class a extends Error{}function u(e){var t,n +e&&null!=e&&e.element&&(null==e||null===(t=e.element)||void 0===t||t.removeEventListener("input",null==e?void 0:e.listen),null==e||null===(n=e.element)||void 0===n||n.removeEventListener("blur",null==e?void 0:e.reset))}let s=(r=class extends t.default{validate(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} +if(0===Object.keys(t).length)return +const n={} +Object.entries(this.hash.validations).filter((e=>{let[t,n]=e +return"string"!=typeof n})).forEach((t=>{let[l,r]=t +this.item&&(this.item[l]=e),(r||[]).forEach((t=>{new RegExp(t.test).test(e)||(n[l]=new a(t.error))}))})) +const l=this.hash.chart.state||{} +null==l.context&&(l.context={}),Object.keys(n).length>0?(l.context.errors=n,this.hash.chart.dispatch("ERROR",l.context)):(l.context.errors=null,this.hash.chart.dispatch("RESET",l.context))}reset(e){if(0===e.target.value.length){const e=this.hash.chart.state +e.context||(e.context={}),e.context.errors||(e.context.errors={}),Object.entries(this.hash.validations).filter((e=>{let[t,n]=e +return"string"!=typeof n})).forEach((t=>{let[n,l]=t +void 0!==e.context.errors[n]&&delete e.context.errors[n]})),0===Object.keys(e.context.errors).length&&(e.context.errors=null,this.hash.chart.dispatch("RESET",e.context))}}listen(e){this.validate(e.target.value,this.hash.validations)}constructor(e,t){super(e,t),i(this,"item",null),i(this,"hash",null),(0,l.registerDestructor)(this,u)}async modify(e,t,n){u.call(this),this.element=e,this.hash=n,this.item=t[0],void 0===this.hash.chart&&(this.hash.chart={state:{context:{}},dispatch:e=>{switch(e){case"ERROR":this.hash.onchange(this.hash.chart.state.context.errors) +break +case"RESET":this.hash.onchange()}}}),this.element.addEventListener("input",this.listen),this.element.addEventListener("blur",this.reset),this.element.value.length>0&&(await Promise.resolve(),this&&this.element&&this.validate(this.element.value,this.hash.validations))}},o(r.prototype,"reset",[n.action],Object.getOwnPropertyDescriptor(r.prototype,"reset"),r.prototype),o(r.prototype,"listen",[n.action],Object.getOwnPropertyDescriptor(r.prototype,"listen"),r.prototype),r) +e.default=s})),define("consul-ui/modifiers/will-destroy",["exports","@ember/render-modifiers/modifiers/will-destroy"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/modifiers/with-copyable",["exports","ember-modifier","@ember/service","@ember/debug","@ember/destroyable"],(function(e,t,n,l,r){var i,o,a +function u(e,t){var n=Object.keys(e) +if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) +t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function s(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const c=(e,t,n)=>typeof t===e?t:n +function d(e){var t,n,l +e&&null!=e&&e.source&&null!=e&&e.hash&&(null===(t=e.source)||void 0===t||null===(n=t.off("success",e.hash.success))||void 0===n||n.off("error",e.hash.error),null===(l=e.source)||void 0===l||l.destroy(),e.hash=null,e.source=null)}let p=(i=(0,n.inject)("clipboard/os"),o=class extends t.default{connect(e,t){let[n]=e +n=c("string",n,this.element.innerText) +const r={success:e=>((0,l.runInDebug)((e=>console.info(`with-copyable: Copied \`${n}\``))),c("function",t.success,(()=>{}))(e)),error:e=>((0,l.runInDebug)((e=>console.info(`with-copyable: Error copying \`${n}\``))),c("function",t.error,(()=>{}))(e))} +this.source=this.clipboard.execute(this.element,function(e){for(var t=1;tn,container:this.element},r.options)).on("success",r.success).on("error",r.error),this.hash=r}constructor(){var e,t,n,l +super(...arguments),e=this,t="clipboard",l=this,(n=a)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0}),s(this,"hash",null),s(this,"source",null),(0,r.registerDestructor)(this,d)}modify(e,t,n){this.element=e,this.disconnect(),this.connect(t,n)}disconnect(){d.call(this)}},f=o.prototype,m="clipboard",h=[i],b={configurable:!0,enumerable:!0,writable:!0,initializer:null},v={},Object.keys(b).forEach((function(e){v[e]=b[e]})),v.enumerable=!!v.enumerable,v.configurable=!!v.configurable,("value"in v||v.initializer)&&(v.writable=!0),v=h.slice().reverse().reduce((function(e,t){return t(f,m,e)||e}),v),y&&void 0!==v.initializer&&(v.value=v.initializer?v.initializer.call(y):void 0,v.initializer=void 0),void 0===v.initializer&&(Object.defineProperty(f,m,v),v=null),a=v,o) +var f,m,h,b,y,v +e.default=p})),define("consul-ui/modifiers/with-overlay",["exports","ember-modifier","tippy.js"],(function(e,t,n){function l(e,t){var n=Object.keys(e) +if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) +t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function r(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var i=(0,t.modifier)((function(e,t){let[i]=t,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{} +const a=o.options||{} +let u,s=e +if("string"==typeof a.triggerTarget){const e=s +if("parentNode"===a.triggerTarget)s=s.parentNode +else s=s.querySelectorAll(a.triggerTarget) +i=s.cloneNode(!0),e.remove(),o.options.triggerTarget=void 0}if(void 0===i&&(i=s.innerHTML,s.innerHTML=""),o.returns&&(a.trigger="manual"),"manual"===a.trigger){const e=a.delay||[] +void 0!==e[1]&&(a.onShown=t=>{clearInterval(u),u=setTimeout((()=>{t.hide()}),e[1])})}let c=s +const d=(0,n.default)(s,function(e){for(var t=1;ti,interactive:!0,plugins:[void 0!==a.followCursor?n.followCursor:void 0].filter((e=>Boolean(e)))},a)) +return o.returns&&o.returns(d),()=>{clearInterval(u),d.destroy()}})) +e.default=i})),define("consul-ui/router",["exports","@ember/routing/router","consul-ui/config/environment","@ember/debug","deepmerge","consul-ui/env","consul-ui/utils/routing/walk"],(function(e,t,n,l,r,i,o){function a(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.routes=e.default=void 0 +const u=document,s=n.default.modulePrefix,c=r.default.all([...u.querySelectorAll("script[data-routes]")].map((e=>JSON.parse(e.dataset.routes)))) +e.routes=c,(0,l.runInDebug)((()=>{const e=requirejs.entries[`${s}/docfy-output`] +if(void 0!==e){const t={} +e.callback(t),function e(t,n){"/"!==n.name&&(t=t[n.name]={_options:{path:n.name}}),n.pages.forEach((e=>{const n=e.relativeUrl +"string"==typeof n&&""!==n&&(t[n]={_options:{path:n}})})),n.children.forEach((n=>{e(t,n)}))}(c,t.default.nested)}})),(0,l.runInDebug)((()=>{window.Routes=function(){let e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:(0,i.env)("DEBUG_ROUTES_ENDPOINT") +t||(t="data:,%s") +const n=(0,o.dump)(c) +t.startsWith("data:,")?(e=window.open("","_blank"),e.document.write(`
      ${n}
      `)):e=window.open(t.replace("%s",encodeURIComponent(n)),"_blank"),e.focus()}})) +class d extends t.default{constructor(){super(...arguments),a(this,"location",(0,i.env)("locationType")),a(this,"rootURL",(0,i.env)("rootURL"))}}e.default=d,d.map((0,o.default)(c))})),define("consul-ui/routes/application",["exports","consul-ui/routing/route","@ember/object","@ember/service","consul-ui/mixins/with-blocking-actions"],(function(e,t,n,l,r){var i,o,a,u,s,c,d +function p(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function f(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function m(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let h=(i=(0,l.inject)("client/http"),o=(0,l.inject)("env"),a=(0,l.inject)(),u=class extends(t.default.extend(r.default)){constructor(){super(...arguments),p(this,"client",s,this),p(this,"env",c,this),p(this,"hcp",d,this),f(this,"data",void 0)}async model(){return this.env.var("CONSUL_ACLS_ENABLED")&&await this.hcp.updateTokenIfNecessary(this.env.var("CONSUL_HTTP_TOKEN")),{}}onClientChanged(e){let t=e.data +""===t&&(t={blocking:!0}),void 0!==this.data?(!0===this.data.blocking&&!1===t.blocking&&this.client.abort(),this.data=Object.assign({},t)):this.data=Object.assign({},t)}error(e,t){let n={status:e.code||e.statusCode||"",message:e.message||e.detail||"Error"} +return e.errors&&e.errors[0]&&(n=e.errors[0],n.message=n.message||n.title||n.detail||"Error"),""===n.status&&(n.message="Error"),this.controllerFor("application").setProperties({error:n}),!0}},s=m(u.prototype,"client",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),c=m(u.prototype,"env",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),d=m(u.prototype,"hcp",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m(u.prototype,"onClientChanged",[n.action],Object.getOwnPropertyDescriptor(u.prototype,"onClientChanged"),u.prototype),m(u.prototype,"error",[n.action],Object.getOwnPropertyDescriptor(u.prototype,"error"),u.prototype),u) +e.default=h})),define("consul-ui/routes/dc",["exports","@ember/service","consul-ui/routing/route"],(function(e,t,n){var l,r,i +Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let o=(l=(0,t.inject)("repository/permission"),r=class extends n.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="permissionsRepo",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}async model(e){const t=await this.permissionsRepo.findAll({dc:e.dc,ns:this.optionalParams().nspace,partition:this.optionalParams().partition}) +return this.controllerFor("application").setProperties({permissions:t}),{permissions:t}}},a=r.prototype,u="permissionsRepo",s=[l],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},p={},Object.keys(c).forEach((function(e){p[e]=c[e]})),p.enumerable=!!p.enumerable,p.configurable=!!p.configurable,("value"in p||p.initializer)&&(p.writable=!0),p=s.slice().reverse().reduce((function(e,t){return t(a,u,e)||e}),p),d&&void 0!==p.initializer&&(p.value=p.initializer?p.initializer.call(d):void 0,p.initializer=void 0),void 0===p.initializer&&(Object.defineProperty(a,u,p),p=null),i=p,r) +var a,u,s,c,d,p +e.default=o})),define("consul-ui/routes/dc/acls/auth-methods/index",["exports","consul-ui/routing/route"],(function(e,t){function n(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class l extends t.default{constructor(){super(...arguments),n(this,"queryParams",{sortBy:"sort",source:"source",kind:"kind",searchproperty:{as:"searchproperty",empty:[["Name","DisplayName"]]},search:{as:"filter",replace:!0}})}}e.default=l})),define("consul-ui/routes/dc/acls/auth-methods/show/index",["exports","consul-ui/routing/route","consul-ui/utils/routing/redirect-to"],(function(e,t,n){function l(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class r extends t.default{constructor(){super(...arguments),l(this,"redirect",(0,n.default)("auth-method"))}}e.default=r})),define("consul-ui/routes/dc/acls/policies/create",["exports","consul-ui/routes/dc/acls/policies/edit"],(function(e,t){function n(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class l extends t.default{constructor(){super(...arguments),n(this,"templateName","dc/acls/policies/edit")}}e.default=l})),define("consul-ui/routes/dc/acls/policies/edit",["exports","@ember/service","consul-ui/routing/route","consul-ui/mixins/with-blocking-actions"],(function(e,t,n,l){var r,i,o +Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let a=(r=(0,t.inject)("repository/policy"),i=class extends(n.default.extend(l.default)){constructor(){var e,t,n,l +super(...arguments),e=this,t="repo",l=this,(n=o)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}},u=i.prototype,s="repo",c=[r],d={configurable:!0,enumerable:!0,writable:!0,initializer:null},f={},Object.keys(d).forEach((function(e){f[e]=d[e]})),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=c.slice().reverse().reduce((function(e,t){return t(u,s,e)||e}),f),p&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(p):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(u,s,f),f=null),o=f,i) +var u,s,c,d,p,f +e.default=a})),define("consul-ui/routes/dc/acls/policies/index",["exports","consul-ui/routing/route","@ember/service","consul-ui/mixins/with-blocking-actions"],(function(e,t,n,l){var r,i,o +function a(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let u=(r=(0,n.inject)("repository/policy"),i=class extends(t.default.extend(l.default)){constructor(){var e,t,n,l +super(...arguments),e=this,t="repo",l=this,(n=o)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0}),a(this,"queryParams",{sortBy:"sort",datacenter:{as:"dc"},kind:"kind",searchproperty:{as:"searchproperty",empty:[["Name","Description"]]},search:{as:"filter",replace:!0}})}},s=i.prototype,c="repo",d=[r],p={configurable:!0,enumerable:!0,writable:!0,initializer:null},m={},Object.keys(p).forEach((function(e){m[e]=p[e]})),m.enumerable=!!m.enumerable,m.configurable=!!m.configurable,("value"in m||m.initializer)&&(m.writable=!0),m=d.slice().reverse().reduce((function(e,t){return t(s,c,e)||e}),m),f&&void 0!==m.initializer&&(m.value=m.initializer?m.initializer.call(f):void 0,m.initializer=void 0),void 0===m.initializer&&(Object.defineProperty(s,c,m),m=null),o=m,i) +var s,c,d,p,f,m +e.default=u})),define("consul-ui/routes/dc/acls/roles/create",["exports","consul-ui/routes/dc/acls/roles/edit"],(function(e,t){function n(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class l extends t.default{constructor(){super(...arguments),n(this,"templateName","dc/acls/roles/edit")}}e.default=l})),define("consul-ui/routes/dc/acls/roles/edit",["exports","@ember/service","consul-ui/routing/route","consul-ui/mixins/with-blocking-actions"],(function(e,t,n,l){var r,i,o +Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let a=(r=(0,t.inject)("repository/role"),i=class extends(n.default.extend(l.default)){constructor(){var e,t,n,l +super(...arguments),e=this,t="repo",l=this,(n=o)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}},u=i.prototype,s="repo",c=[r],d={configurable:!0,enumerable:!0,writable:!0,initializer:null},f={},Object.keys(d).forEach((function(e){f[e]=d[e]})),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=c.slice().reverse().reduce((function(e,t){return t(u,s,e)||e}),f),p&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(p):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(u,s,f),f=null),o=f,i) +var u,s,c,d,p,f +e.default=a})),define("consul-ui/routes/dc/acls/roles/index",["exports","consul-ui/routing/route","@ember/service","consul-ui/mixins/with-blocking-actions"],(function(e,t,n,l){var r,i,o +function a(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let u=(r=(0,n.inject)("repository/role"),i=class extends(t.default.extend(l.default)){constructor(){var e,t,n,l +super(...arguments),e=this,t="repo",l=this,(n=o)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0}),a(this,"queryParams",{sortBy:"sort",searchproperty:{as:"searchproperty",empty:[["Name","Description","Policy"]]},search:{as:"filter",replace:!0}})}},s=i.prototype,c="repo",d=[r],p={configurable:!0,enumerable:!0,writable:!0,initializer:null},m={},Object.keys(p).forEach((function(e){m[e]=p[e]})),m.enumerable=!!m.enumerable,m.configurable=!!m.configurable,("value"in m||m.initializer)&&(m.writable=!0),m=d.slice().reverse().reduce((function(e,t){return t(s,c,e)||e}),m),f&&void 0!==m.initializer&&(m.value=m.initializer?m.initializer.call(f):void 0,m.initializer=void 0),void 0===m.initializer&&(Object.defineProperty(s,c,m),m=null),o=m,i) +var s,c,d,p,f,m +e.default=u})),define("consul-ui/routes/dc/acls/tokens/create",["exports","consul-ui/routes/dc/acls/tokens/edit"],(function(e,t){function n(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class l extends t.default{constructor(){super(...arguments),n(this,"templateName","dc/acls/tokens/edit")}}e.default=l})),define("consul-ui/routes/dc/acls/tokens/edit",["exports","@ember/service","consul-ui/routing/route","consul-ui/mixins/with-blocking-actions"],(function(e,t,n,l){var r,i,o,a,u +function s(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function c(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let d=(r=(0,t.inject)("repository/token"),i=(0,t.inject)("settings"),o=class extends(n.default.extend(l.default)){constructor(){super(...arguments),s(this,"repo",a,this),s(this,"settings",u,this)}async model(e,t){return{token:await this.settings.findBySlug("token")}}},a=c(o.prototype,"repo",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),u=c(o.prototype,"settings",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),o) +e.default=d})),define("consul-ui/routes/dc/acls/tokens/index",["exports","consul-ui/routing/route","@ember/service","consul-ui/mixins/with-blocking-actions"],(function(e,t,n,l){var r,i,o +function a(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let u=(r=(0,n.inject)("repository/token"),i=class extends(t.default.extend(l.default)){constructor(){var e,t,n,l +super(...arguments),e=this,t="repo",l=this,(n=o)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0}),a(this,"queryParams",{sortBy:"sort",kind:"kind",searchproperty:{as:"searchproperty",empty:[["AccessorID","Description","Role","Policy"]]},search:{as:"filter",replace:!0}})}},s=i.prototype,c="repo",d=[r],p={configurable:!0,enumerable:!0,writable:!0,initializer:null},m={},Object.keys(p).forEach((function(e){m[e]=p[e]})),m.enumerable=!!m.enumerable,m.configurable=!!m.configurable,("value"in m||m.initializer)&&(m.writable=!0),m=d.slice().reverse().reduce((function(e,t){return t(s,c,e)||e}),m),f&&void 0!==m.initializer&&(m.value=m.initializer?m.initializer.call(f):void 0,m.initializer=void 0),void 0===m.initializer&&(Object.defineProperty(s,c,m),m=null),o=m,i) +var s,c,d,p,f,m +e.default=u})),define("consul-ui/routes/dc/kv/folder",["exports","consul-ui/routes/dc/kv/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class n extends t.default{beforeModel(e){super.beforeModel(...arguments) +const t=this.paramsFor("dc.kv.folder") +if("/"===t.key||null==t.key)return this.transitionTo("dc.kv.index")}}e.default=n})),define("consul-ui/routes/dc/kv/index",["exports","consul-ui/routing/route","@ember/object","consul-ui/utils/isFolder"],(function(e,t,n,l){var r +Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let i=(r=class extends t.default{beforeModel(){const e=this.paramsFor(this.routeName).key||"/" +if(!(0,l.default)(e))return this.replaceWith(this.routeName,e+"/")}error(e){return!e.errors||!e.errors[0]||"404"!=e.errors[0].status||this.transitionTo("dc.kv.index")}},o=r.prototype,a="error",u=[n.action],s=Object.getOwnPropertyDescriptor(r.prototype,"error"),c=r.prototype,d={},Object.keys(s).forEach((function(e){d[e]=s[e]})),d.enumerable=!!d.enumerable,d.configurable=!!d.configurable,("value"in d||d.initializer)&&(d.writable=!0),d=u.slice().reverse().reduce((function(e,t){return t(o,a,e)||e}),d),c&&void 0!==d.initializer&&(d.value=d.initializer?d.initializer.call(c):void 0,d.initializer=void 0),void 0===d.initializer&&(Object.defineProperty(o,a,d),d=null),r) +var o,a,u,s,c,d +e.default=i})),define("consul-ui/routes/dc/services/notfound",["exports","consul-ui/routing/route"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class n extends t.default{redirect(e,t){this.replaceWith("dc.services.instance",e.name,e.node,e.id)}}e.default=n})),define("consul-ui/routes/dc/services/show/topology",["exports","consul-ui/routing/route","@ember/service","@ember/object"],(function(e,t,n,l){var r,i,o,a,u,s,c +function d(e,t){var n=Object.keys(e) +if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) +t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function p(e){for(var t=1;tn.Datacenter===e.Datacenter&&n.SourceName===e.Name&&n.SourceNS===e.Namespace&&n.SourcePartition===e.Partition&&n.DestinationName===t.Name&&n.DestinationNS===t.Namespace&&n.DestinationPartition===t.Partition)) +void 0===r?r=this.repo.create({Datacenter:e.Datacenter,SourceName:e.Name,SourceNS:e.Namespace||"default",SourcePartition:e.Partition||"default",DestinationName:t.Name,DestinationNS:t.Namespace||"default",DestinationPartition:t.Partition||"default"}):n=this.feedback.notification("update","intention"),(0,l.set)(r,"Action","allow"),await this.repo.persist(r),n.success(r)}catch(r){n.error(r)}this.refresh()}afterModel(e,t){const n=p(p(p({},this.optionalParams()),this.paramsFor("dc")),this.paramsFor("dc.services.show")) +this.intentions=this.data.source((e=>e`/${n.partition}/${n.nspace}/${n.dc}/intentions/for-service/${n.name}`))}async deactivate(e){(await this.intentions).destroy()}},u=h(a.prototype,"data",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),s=h(a.prototype,"repo",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),c=h(a.prototype,"feedback",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h(a.prototype,"createIntention",[l.action],Object.getOwnPropertyDescriptor(a.prototype,"createIntention"),a.prototype),a) +e.default=b})),define("consul-ui/routing/route",["exports","@ember/routing/route","@ember/object","@ember/service","consul-ui/utils/path/resolve","consul-ui/router"],(function(e,t,n,l,r,i){var o,a,u,s,c,d,p,f,m,h,b +function y(e,t){var n=Object.keys(e) +if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) +t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function v(e){for(var t=1;t!n.includes(e))).length&&(e=void 0)}}return e}model(){const e={} +return void 0!==this.queryParams&&void 0!==this.queryParams.searchproperty&&(e.searchProperties=this.queryParams.searchproperty.empty[0]),e}setupController(e,t){(0,n.setProperties)(e,v(v({},t),{},{routeName:this.routeName})),super.setupController(...arguments)}optionalParams(){return this.container.get(`location:${this.env.var("locationType")}`).optionalParams()}paramsFor(e){return this.routlet.normalizeParamsFor(this.routeName,super.paramsFor(...arguments))}async replaceWith(e,t){await Promise.resolve() +let n=[] +return"string"==typeof t&&(n=[t]),void 0===t||Array.isArray(t)||"string"==typeof t||(n=Object.values(t)),super.replaceWith(e,...n)}async transitionTo(e,t){await Promise.resolve() +let n=[] +return"string"==typeof t&&(n=[t]),void 0===t||Array.isArray(t)||"string"==typeof t||(n=Object.values(t)),this.router.transitionTo(e,...n)}},p=P(d.prototype,"container",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f=P(d.prototype,"env",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m=P(d.prototype,"permissions",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=P(d.prototype,"router",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=P(d.prototype,"routlet",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),P(d.prototype,"replaceWith",[n.action],Object.getOwnPropertyDescriptor(d.prototype,"replaceWith"),d.prototype),P(d.prototype,"transitionTo",[n.action],Object.getOwnPropertyDescriptor(d.prototype,"transitionTo"),d.prototype),d) +e.default=w})),define("consul-ui/routing/single",["exports","consul-ui/routing/route","@ember/debug","rsvp"],(function(e,t,n,l){function r(e,t){var n=Object.keys(e) +if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) +t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function i(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var o=t.default.extend({isCreate:function(e,t){return"create"===t.targetName.split(".").pop()},model:function(e,t){const n=this.repo,o=this.modelFor("dc").dc.Name,a=this.optionalParams().nspace,u=this.optionalParams().partition,s=this.isCreate(...arguments) +return(0,l.hash)(function(e){for(var t=1;te.ID,Name:e=>e.Name}})),define("consul-ui/search/predicates/auth-method",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default={Name:e=>e.Name,DisplayName:e=>e.DisplayName}})) +define("consul-ui/search/predicates/health-check",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var t={Name:e=>e.Name,Node:e=>e.Node,Service:e=>e.ServiceName,CheckID:e=>e.CheckID||"",ID:e=>e.Service.ID||"",Notes:e=>e.Notes,Output:e=>e.Output,ServiceTags:e=>{return t=e.ServiceTags,Array.isArray(t)?t:t.toArray() +var t}} +e.default=t})),define("consul-ui/search/predicates/intention",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const t="All Services (*)" +var n={SourceName:e=>[e.SourceName,"*"===e.SourceName?t:void 0].filter(Boolean),DestinationName:e=>[e.DestinationName,"*"===e.DestinationName?t:void 0].filter(Boolean)} +e.default=n})),define("consul-ui/search/predicates/kv",["exports","consul-ui/utils/right-trim"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n={Key:e=>(0,t.default)(e.Key.toLowerCase()).split("/").filter((e=>Boolean(e))).pop()} +e.default=n})),define("consul-ui/search/predicates/node",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var t={Node:e=>e.Node,Address:e=>e.Address,PeerName:e=>e.PeerName,Meta:e=>Object.entries(e.Meta||{}).reduce(((e,t)=>e.concat(t)),[])} +e.default=t})),define("consul-ui/search/predicates/nspace",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default={Name:e=>e.Name,Description:e=>e.Description,Role:e=>((e.ACLs||{}).RoleDefaults||[]).map((e=>e.Name)),Policy:e=>((e.ACLs||{}).PolicyDefaults||[]).map((e=>e.Name))}})),define("consul-ui/search/predicates/peer",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default={Name:e=>e.Name,ID:e=>e.ID}})),define("consul-ui/search/predicates/policy",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default={Name:e=>e.Name,Description:e=>e.Description}})),define("consul-ui/search/predicates/role",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default={Name:e=>e.Name,Description:e=>e.Description,Policy:e=>(e.Policies||[]).map((e=>e.Name)).concat((e.ServiceIdentities||[]).map((e=>e.ServiceName))).concat((e.NodeIdentities||[]).map((e=>e.NodeName)))}})),define("consul-ui/search/predicates/service-instance",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var t={Name:e=>e.Name,Node:e=>e.Node.Node,Tags:e=>e.Service.Tags||[],ID:e=>e.Service.ID||"",Address:e=>e.Address||"",Port:e=>(e.Service.Port||"").toString(),"Service.Meta":e=>Object.entries(e.Service.Meta||{}).reduce(((e,t)=>e.concat(t)),[]),"Node.Meta":e=>Object.entries(e.Node.Meta||{}).reduce(((e,t)=>e.concat(t)),[])} +e.default=t})),define("consul-ui/search/predicates/service",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default={Name:e=>e.Name,Tags:e=>e.Tags||[],PeerName:e=>e.PeerName,Partition:e=>e.Partition}})),define("consul-ui/search/predicates/token",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default={Name:e=>e.Name,Description:e=>e.Description,AccessorID:e=>e.AccessorID,Role:e=>(e.Roles||[]).map((e=>e.Name)),Policy:e=>(e.Policies||[]).map((e=>e.Name)).concat((e.ServiceIdentities||[]).map((e=>e.ServiceName))).concat((e.NodeIdentities||[]).map((e=>e.NodeName)))}})),define("consul-ui/search/predicates/upstream-instance",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default={DestinationName:(e,t)=>e.DestinationName,LocalBindAddress:(e,t)=>e.LocalBindAddress,LocalBindPort:(e,t)=>e.LocalBindPort.toString()}})),define("consul-ui/serializers/-default",["exports","@ember-data/serializer/json"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/serializers/-json-api",["exports","@ember-data/serializer/json-api"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/serializers/-rest",["exports","@ember-data/serializer/rest"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/serializers/application",["exports","consul-ui/serializers/http","@ember/object","consul-ui/utils/http/consul","consul-ui/utils/http/headers","consul-ui/models/dc","consul-ui/models/nspace","consul-ui/models/partition","consul-ui/utils/create-fingerprinter"],(function(e,t,n,l,r,i,o,a,u){function s(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const c=function(e,t){const n={} +return Object.keys(e).forEach((function(t){n[t.toLowerCase()]=e[t]})),t[l.HEADERS_SYMBOL]=n,t} +class d extends t.default{constructor(){super(...arguments),s(this,"attachHeaders",c),s(this,"fingerprint",(0,u.default)(i.FOREIGN_KEY,o.NSPACE_KEY,a.PARTITION_KEY))}respondForQuery(e,t){return e(((e,n)=>{return c(e,(r=n,i=this.fingerprint(this.primaryKey,this.slugKey,t.dc,e[l.HEADERS_NAMESPACE],e[l.HEADERS_PARTITION]),Array.isArray(r)?r.map(i):[r].map(i)[0]),t) +var r,i}))}respondForQueryRecord(e,t){return e(((e,n)=>c(e,this.fingerprint(this.primaryKey,this.slugKey,t.dc,e[l.HEADERS_NAMESPACE],e[l.HEADERS_PARTITION])(n),t)))}respondForCreateRecord(e,t,n){const r=this.slugKey,o=this.primaryKey +return e(((e,t)=>(!0===t&&(t=n),this.fingerprint(o,r,n[i.FOREIGN_KEY],e[l.HEADERS_NAMESPACE],n.Partition)(t))))}respondForUpdateRecord(e,t,n){const r=this.slugKey,o=this.primaryKey +return e(((e,t)=>(!0===t&&(t=n),this.fingerprint(o,r,n[i.FOREIGN_KEY],e[l.HEADERS_NAMESPACE],e[l.HEADERS_PARTITION])(t))))}respondForDeleteRecord(e,t,n){const r=this.slugKey,u=this.primaryKey +return e(((e,t)=>({[u]:this.fingerprint(u,r,n[i.FOREIGN_KEY],e[l.HEADERS_NAMESPACE],e[l.HEADERS_PARTITION])({[r]:n[r],[o.NSPACE_KEY]:n[o.NSPACE_KEY],[a.PARTITION_KEY]:n[a.PARTITION_KEY]})[u]})))}normalizeResponse(e,t,n,l,r){const i=this.normalizePayload(n,l,r),o=this.normalizeMeta(e,t,i,l,r) +"node"===t.modelName&&"query"===r&&(o.versions=this.getDistinctConsulVersions(i)),"query"!==r&&(i.meta=o) +const a=super.normalizeResponse(e,t,{meta:o,[t.modelName]:i},l,r) +return void 0===a?n:a}timestamp(){return(new Date).getTime()}normalizeMeta(e,t,i,o,a){const u=i[l.HEADERS_SYMBOL]||{} +delete i[l.HEADERS_SYMBOL] +const s={cacheControl:u[r.CACHE_CONTROL.toLowerCase()],cursor:u[l.HEADERS_INDEX.toLowerCase()],dc:u[l.HEADERS_DATACENTER.toLowerCase()],nspace:u[l.HEADERS_NAMESPACE.toLowerCase()],partition:u[l.HEADERS_PARTITION.toLowerCase()]} +return void 0!==u["x-range"]&&(s.range=u["x-range"]),void 0!==u.refresh&&(s.interval=1e3*u.refresh),"query"===a&&(s.date=this.timestamp(),i.forEach((function(e){(0,n.set)(e,"SyncTime",s.date)}))),s}normalizePayload(e,t,n){return e}getDistinctConsulVersions(e){let t=new Set +e.forEach((function(e){if(e.Meta&&e.Meta["consul-version"]){const n=e.Meta["consul-version"].split(".") +t.add(n[0]+"."+n[1])}})) +const n=Array.from(t) +return n.sort(((e,t)=>{const n=e.split(".").map((e=>{const t=Number(e) +return isNaN(t)?0:t})),l=t.split(".").map((e=>{const t=Number(e) +return isNaN(t)?0:t})),r=Math.min(n.length,l.length) +for(let i=0;it))}respondForQueryRecord(e,t){return e(((e,t)=>t))}respondForFindAll(e,t){return e(((e,t)=>t))}respondForCreateRecord(e,t){return e(((e,t)=>t))}respondForUpdateRecord(e,t){return e(((e,t)=>t))}respondForDeleteRecord(e,t){return e(((e,t)=>t))}}e.default=n})),define("consul-ui/serializers/intention",["exports","consul-ui/serializers/application","@ember/service","@ember/object","consul-ui/models/intention"],(function(e,t,n,l,r){var i,o,a +function u(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let s=(i=(0,n.inject)("encoder"),o=class extends t.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="encoder",l=this,(n=a)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0}),u(this,"primaryKey",r.PRIMARY_KEY),u(this,"slugKey",r.SLUG_KEY)}init(){super.init(...arguments),this.uri=this.encoder.uriTag()}ensureID(e){return(0,l.get)(e,"ID.length")?(e.Legacy=!0,e.LegacyID=e.ID):e.Legacy=!1,e.SourcePeer?e.ID=this.uri`peer:${e.SourcePeer}:${e.SourceNS}:${e.SourceName}:${e.DestinationPartition}:${e.DestinationNS}:${e.DestinationName}`:e.ID=this.uri`${e.SourcePartition}:${e.SourceNS}:${e.SourceName}:${e.DestinationPartition}:${e.DestinationNS}:${e.DestinationName}`,e}respondForQuery(e,t){return super.respondForQuery((t=>e(((e,n)=>t(e,n.map((e=>this.ensureID(e))))))),t)}respondForQueryRecord(e,t){return super.respondForQueryRecord((t=>e(((e,n)=>(n=this.ensureID(n),t(e,n))))),t)}respondForCreateRecord(e,t,n){const l=this.slugKey,r=this.primaryKey +return e(((e,i)=>((i=n).ID=this.uri`${t.SourcePartition}:${t.SourceNS}:${t.SourceName}:${t.DestinationPartition}:${t.DestinationNS}:${t.DestinationName}`,this.fingerprint(r,l,i.Datacenter)(i))))}respondForUpdateRecord(e,t,n){const l=this.slugKey,r=this.primaryKey +return e(((e,i)=>((i=n).LegacyID=i.ID,i.ID=t.ID,this.fingerprint(r,l,i.Datacenter)(i))))}},c=o.prototype,d="encoder",p=[i],f={configurable:!0,enumerable:!0,writable:!0,initializer:null},h={},Object.keys(f).forEach((function(e){h[e]=f[e]})),h.enumerable=!!h.enumerable,h.configurable=!!h.configurable,("value"in h||h.initializer)&&(h.writable=!0),h=p.slice().reverse().reduce((function(e,t){return t(c,d,e)||e}),h),m&&void 0!==h.initializer&&(h.value=h.initializer?h.initializer.call(m):void 0,h.initializer=void 0),void 0===h.initializer&&(Object.defineProperty(c,d,h),h=null),a=h,o) +var c,d,p,f,m,h +e.default=s})),define("consul-ui/serializers/kv",["exports","consul-ui/serializers/application","@ember/service","consul-ui/models/kv"],(function(e,t,n,l){var r,i,o +function a(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let u=(r=(0,n.inject)("atob"),i=class extends t.default{constructor(){var e,t,n,r +super(...arguments),e=this,t="decoder",r=this,(n=o)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0}),a(this,"primaryKey",l.PRIMARY_KEY),a(this,"slugKey",l.SLUG_KEY)}serialize(e,t){const n=e.attr("Value") +return"string"==typeof n?this.decoder.execute(n):null}respondForQueryRecord(e,t){return super.respondForQueryRecord((t=>e(((e,n)=>(void 0===n[0].Session&&(n[0].Session=""),t(e,n[0]))))),t)}respondForQuery(e,t){return super.respondForQuery((t=>e(((e,n)=>t(e,n.map((e=>({[this.slugKey]:e}))))))),t)}},s=i.prototype,c="decoder",d=[r],p={configurable:!0,enumerable:!0,writable:!0,initializer:null},m={},Object.keys(p).forEach((function(e){m[e]=p[e]})),m.enumerable=!!m.enumerable,m.configurable=!!m.configurable,("value"in m||m.initializer)&&(m.writable=!0),m=d.slice().reverse().reduce((function(e,t){return t(s,c,e)||e}),m),f&&void 0!==m.initializer&&(m.value=m.initializer?m.initializer.call(f):void 0,m.initializer=void 0),void 0===m.initializer&&(Object.defineProperty(s,c,m),m=null),o=m,i) +var s,c,d,p,f,m +e.default=u})),define("consul-ui/serializers/node",["exports","consul-ui/serializers/application","@ember-data/serializer/rest","consul-ui/models/node","@ember/string"],(function(e,t,n,l,r){function i(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const o=function(e){return""===e[l.SLUG_KEY]&&(e[l.SLUG_KEY]=e.Node),e} +class a extends(t.default.extend(n.EmbeddedRecordsMixin)){constructor(){super(...arguments),i(this,"primaryKey",l.PRIMARY_KEY),i(this,"slugKey",l.SLUG_KEY),i(this,"attrs",{Services:{embedded:"always"}})}transformHasManyResponse(e,t,n){let l,r={} +return"Services"===t.key?((n.Checks||[]).filter((e=>""!==e.ServiceID)).forEach((e=>{void 0===r[e.ServiceID]&&(r[e.ServiceID]=[]),r[e.ServiceID].push(e)})),""===n.PeerName&&(n.PeerName=void 0),l=this.store.serializerFor(t.type),n.Services=n.Services.map((e=>l.transformHasManyResponseFromNode(n,e,r))),n):super.transformHasManyResponse(...arguments)}respondForQuery(e,t,n,l){const i=super.respondForQuery((t=>e(((e,n)=>t(e,n.map(o))))),t) +return l.eachRelationship(((e,t)=>{i.forEach((e=>this[`transform${(0,r.classify)(t.kind)}Response`](this.store,t,e,i)))})),i}respondForQueryRecord(e,t,n,l){const i=super.respondForQueryRecord((t=>e(((e,n)=>t(e,o(n))))),t) +return l.eachRelationship(((e,t)=>{this[`transform${(0,r.classify)(t.kind)}Response`](this.store,t,i)})),i}respondForQueryLeader(e,t){return e(((e,n)=>{const l=n.split(":"),r=l.pop(),i=l.join(":") +return this.attachHeaders(e,{Address:i,Port:r},t)}))}}e.default=a})),define("consul-ui/serializers/nspace",["exports","consul-ui/serializers/application","@ember/object","consul-ui/models/nspace"],(function(e,t,n,l){function r(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const i=e=>((0,n.get)(e,"ACLs.PolicyDefaults")&&(e.ACLs.PolicyDefaults=e.ACLs.PolicyDefaults.map((function(e){return void 0===e.template&&(e.template=""),e}))),["PolicyDefaults","RoleDefaults"].forEach((function(t){void 0===e.ACLs&&(e.ACLs=[]),void 0===e.ACLs[t]&&(e.ACLs[t]=[])})),e) +class o extends t.default{constructor(){super(...arguments),r(this,"primaryKey",l.PRIMARY_KEY),r(this,"slugKey",l.SLUG_KEY)}respondForQuery(e,t,n,l){return super.respondForQuery((n=>e(((e,l)=>n(e,l.map((function(e){return e.Namespace="*",e.Datacenter=t.dc,i(e)})))))),t)}respondForQueryRecord(e,t,n){return super.respondForQuery((n=>e(((e,l)=>(l.Datacenter=t.dc,l.Namespace="*",n(e,i(l)))))),t,n)}respondForCreateRecord(e,t,n){return super.respondForCreateRecord((n=>e(((e,l)=>(l.Datacenter=t.dc,l.Namespace="*",n(e,i(l)))))),t,n)}respondForUpdateRecord(e,t,n){return e(((e,t)=>i(t)))}}e.default=o})),define("consul-ui/serializers/oidc-provider",["exports","consul-ui/serializers/application","consul-ui/models/oidc-provider"],(function(e,t,n){function l(e,t){var n=Object.keys(e) +if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) +t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function r(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class i extends t.default{constructor(){super(...arguments),r(this,"primaryKey",n.PRIMARY_KEY),r(this,"slugKey",n.SLUG_KEY)}respondForAuthorize(e,t,n){return e(((e,t)=>this.attachHeaders(e,t,n)))}respondForQueryRecord(e,t){return super.respondForQueryRecord((n=>e(((e,i)=>n(e,function(e){for(var t=1;te(((e,n)=>t(e,n.map((e=>(e.Partition="*",e.Namespace="*",e))))))),t)}}e.default=r})),define("consul-ui/serializers/permission",["exports","consul-ui/serializers/application"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class n extends t.default{}e.default=n})),define("consul-ui/serializers/policy",["exports","consul-ui/serializers/application","consul-ui/models/policy"],(function(e,t,n){function l(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class r extends t.default{constructor(){super(...arguments),l(this,"primaryKey",n.PRIMARY_KEY),l(this,"slugKey",n.SLUG_KEY)}}e.default=r})),define("consul-ui/serializers/proxy",["exports","consul-ui/serializers/application","consul-ui/models/proxy"],(function(e,t,n){function l(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class r extends t.default{constructor(){super(...arguments),l(this,"primaryKey",n.PRIMARY_KEY),l(this,"slugKey",n.SLUG_KEY),l(this,"attrs",{NodeName:"Node"})}}e.default=r})) +define("consul-ui/serializers/role",["exports","consul-ui/serializers/application","consul-ui/models/role","consul-ui/mixins/policy/as-many"],(function(e,t,n,l){function r(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class i extends(t.default.extend(l.default)){constructor(){super(...arguments),r(this,"primaryKey",n.PRIMARY_KEY),r(this,"slugKey",n.SLUG_KEY)}}e.default=i})),define("consul-ui/serializers/service-instance",["exports","consul-ui/serializers/application","consul-ui/models/service-instance"],(function(e,t,n){function l(e,t){var n=Object.keys(e) +if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) +t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function r(e){for(var t=1;t{switch(t.Status){case"passing":e.ChecksPassing.push(t) +break +case"warning":e.ChecksWarning.push(t) +break +case"critical":e.ChecksCritical.push(t)}return e}),{ChecksPassing:[],ChecksWarning:[],ChecksCritical:[]}),o=r(r({},i),{},{Service:t,Checks:l,Node:{Datacenter:e.Datacenter,Namespace:e.Namespace,Partition:e.Partition,ID:e.ID,Node:e.Node,Address:e.Address,TaggedAddresses:e.TaggedAddresses,Meta:e.Meta}}) +return o.uid=this.extractUid(o),o}respondForQuery(e,t){return super.respondForQuery((n=>e(((e,l)=>{if(0===l.length){const e=new Error +throw e.errors=[{status:"404",title:"Not found"}],e}return l.forEach((e=>{e.Datacenter=t.dc,e.Namespace=t.ns||"default",e.Partition=t.partition||"default",e.uid=this.extractUid(e)})),n(e,l)}))),t)}respondForQueryRecord(e,t){return super.respondForQueryRecord((n=>e(((e,l)=>{if(l.forEach((e=>{e.Datacenter=t.dc,e.Namespace=t.ns||"default",e.Partition=t.partition||"default",e.uid=this.extractUid(e)})),void 0===(l=l.find((function(e){return e.Node.Node===t.node&&e.Service.ID===t.serviceId})))){const e=new Error +throw e.errors=[{status:"404",title:"Not found"}],e}return l.Namespace=l.Service.Namespace,l.Partition=l.Service.Partition,n(e,l)}))),t)}}e.default=o})),define("consul-ui/serializers/service",["exports","consul-ui/serializers/application","consul-ui/models/service","@ember/object","consul-ui/utils/http/consul"],(function(e,t,n,l,r){function i(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class o extends t.default{constructor(){super(...arguments),i(this,"primaryKey",n.PRIMARY_KEY),i(this,"slugKey",n.SLUG_KEY)}respondForQuery(e,t){return super.respondForQuery((t=>e(((e,n)=>t(e,this._transformServicesPayload(n))))),t)}respondForQueryRecord(e,t){return super.respondForQueryRecord((n=>e(((e,r)=>n(e,{Name:t.id,Namespace:(0,l.get)(r,"firstObject.Service.Namespace"),Nodes:r})))),t)}createJSONApiDocumentFromServicesPayload(e,t,n){const{primaryKey:l,slugKey:i,fingerprint:o}=this +return{data:this._transformServicesPayload(t).map(o(l,i,n,e[r.HEADERS_NAMESPACE],e[r.HEADERS_PARTITION])).map((e=>({id:e.uid,type:"service",attributes:e})))}}_transformServicesPayload(e){const t={} +return e.filter((function(e){return"connect-proxy"!==e.Kind})).forEach((e=>{t[e.Name]=e})),e.filter((function(e){return"connect-proxy"===e.Kind})).forEach((e=>{e.ProxyFor&&e.ProxyFor.forEach((n=>{void 0!==t[n]&&(t[n].Proxy=e)}))})),e}}e.default=o})),define("consul-ui/serializers/session",["exports","consul-ui/serializers/application","consul-ui/models/session"],(function(e,t,n){function l(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class r extends t.default{constructor(){super(...arguments),l(this,"primaryKey",n.PRIMARY_KEY),l(this,"slugKey",n.SLUG_KEY)}respondForQueryRecord(e,t){return super.respondForQueryRecord((t=>e(((e,n)=>{if(0===n.length){const e=new Error +throw e.errors=[{status:"404",title:"Not found"}],e}return t(e,n[0])}))),t)}}e.default=r})),define("consul-ui/serializers/token",["exports","consul-ui/serializers/application","@ember/object","consul-ui/models/token","consul-ui/mixins/policy/as-many","consul-ui/mixins/role/as-many"],(function(e,t,n,l,r,i){function o(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class a extends(t.default.extend(r.default,i.default)){constructor(){super(...arguments),o(this,"primaryKey",l.PRIMARY_KEY),o(this,"slugKey",l.SLUG_KEY)}serialize(e,t){let n=super.serialize(...arguments) +return null!==n.Rules&&(n={ID:n.SecretID,Name:n.Description,Type:n.Type,Rules:n.Rules}),n&&delete n.SecretID,n}respondForSelf(e,t){return this.respondForQueryRecord(e,t)}respondForUpdateRecord(e,t,l){return super.respondForUpdateRecord((t=>e(((e,l)=>{if(void 0!==l.Policies&&null!==l.Policies||(l.Policies=[]),void 0!==l.ID){const e=this.store.peekAll("token").findBy("SecretID",l.ID) +e&&(l.SecretID=l.ID,l.AccessorID=(0,n.get)(e,"AccessorID"))}return t(e,l)}))),t,l)}}e.default=a})),define("consul-ui/serializers/topology",["exports","consul-ui/serializers/application","consul-ui/models/topology","@ember/service"],(function(e,t,n,l){var r,i,o +function a(e,t){var n=Object.keys(e) +if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) +t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function u(e){for(var t=1;t{e.Intention.SourceName=e.Name,e.Intention.SourceNS=e.Namespace,e.Intention.DestinationName=t.id,e.Intention.DestinationNS=t.ns||"default",l.ensureID(e.Intention)})),i.Upstreams.forEach((e=>{e.Intention.SourceName=t.id,e.Intention.SourceNS=t.ns||"default",e.Intention.DestinationName=e.Name,e.Intention.DestinationNS=e.Namespace,l.ensureID(e.Intention)})),r(e,u(u({},i),{},{[n.SLUG_KEY]:t.id}))}))}),t)}},d=i.prototype,p="store",f=[r],m={configurable:!0,enumerable:!0,writable:!0,initializer:null},b={},Object.keys(m).forEach((function(e){b[e]=m[e]})),b.enumerable=!!b.enumerable,b.configurable=!!b.configurable,("value"in b||b.initializer)&&(b.writable=!0),b=f.slice().reverse().reduce((function(e,t){return t(d,p,e)||e}),b),h&&void 0!==b.initializer&&(b.value=b.initializer?b.initializer.call(h):void 0,b.initializer=void 0),void 0===b.initializer&&(Object.defineProperty(d,p,b),b=null),o=b,i) +var d,p,f,m,h,b +e.default=c})),define("consul-ui/services/-ensure-registered",["exports","@embroider/util/services/ensure-registered"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/services/-portal",["exports","ember-stargate/services/-portal"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/services/abilities",["exports","ember-can/services/can"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class n extends t.default{parse(e){return super.parse(e.replace("use SSO","use authMethods").replace("service","zervice"))}}e.default=n})),define("consul-ui/services/atob",["exports","@ember/service","consul-ui/utils/atob"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class l extends t.default{execute(){return(0,n.default)(...arguments)}}e.default=l})),define("consul-ui/services/auth-providers/oauth2-code-with-url-provider",["exports","torii/providers/oauth2-code","@ember/debug"],(function(e,t,n){function l(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class r extends t.default{constructor(){super(...arguments),l(this,"name","oidc-with-url")}buildUrl(){return this.baseUrl}open(e){const t=this.name,l=this.buildUrl() +return this.popup.open(l,["state","code"],e).then((function(e){const l={authorizationState:e.state,authorizationCode:decodeURIComponent(e.code),provider:t} +return(0,n.runInDebug)((e=>console.info("Retrieved the following creds from the OAuth Provider",l))),l}))}close(){const e=this.get("popup.remote")||{} +if("function"==typeof e.close)return e.close()}}e.default=r})),define("consul-ui/services/btoa",["exports","@ember/service","consul-ui/utils/btoa"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class l extends t.default{execute(){return(0,n.default)(...arguments)}}e.default=l})),define("consul-ui/services/can",["exports","ember-can/services/abilities"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/services/change",["exports","@ember/service","ember-changeset-validations","ember-changeset","consul-ui/utils/form/changeset","consul-ui/validations/intention-permission","consul-ui/validations/intention-permission-http-header"],(function(e,t,n,l,r,i,o){var a,u,s +Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const c={"intention-permission":i.default,"intention-permission-http-header":o.default} +let d=(a=(0,t.inject)("schema"),u=class extends t.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="schema",l=this,(n=s)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}init(){super.init(...arguments),this._validators=new Map}willDestroy(){this._validators=null}changesetFor(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{} +const o=this.validatorFor(e,i) +let a +if(o){let e=o +"function"!=typeof o&&(e=(0,n.default)(o)),a=(0,l.Changeset)(t,e,o,{changeset:r.default})}else a=(0,l.Changeset)(t) +return a}validatorFor(e){if(!this._validators.has(e)){const t=c[e] +let n +void 0!==t&&(n=t(this.schema)),this._validators.set(e,n)}return this._validators.get(e)}},p=u.prototype,f="schema",m=[a],h={configurable:!0,enumerable:!0,writable:!0,initializer:null},y={},Object.keys(h).forEach((function(e){y[e]=h[e]})),y.enumerable=!!y.enumerable,y.configurable=!!y.configurable,("value"in y||y.initializer)&&(y.writable=!0),y=m.slice().reverse().reduce((function(e,t){return t(p,f,e)||e}),y),b&&void 0!==y.initializer&&(y.value=y.initializer?y.initializer.call(b):void 0,y.initializer=void 0),void 0===y.initializer&&(Object.defineProperty(p,f,y),y=null),s=y,u) +var p,f,m,h,b,y +e.default=d})),define("consul-ui/services/client/connections",["exports","@ember/service"],(function(e,t){var n,l,r,i,o,a,u +function s(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function c(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let d=(n=(0,t.inject)("dom"),l=(0,t.inject)("env"),r=(0,t.inject)("data-source/service"),i=class extends t.default{constructor(){super(...arguments),s(this,"dom",o,this),s(this,"env",a,this),s(this,"data",u,this)}init(){super.init(...arguments),this._listeners=this.dom.listeners(),this.connections=new Set,this.addVisibilityChange()}willDestroy(){this._listeners.remove(),this.purge(),super.willDestroy(...arguments)}addVisibilityChange(){this._listeners.add(this.dom.document(),{visibilitychange:e=>{e.target.hidden&&this.purge(-1)}})}whenAvailable(e){const t=this.dom.document() +return t.hidden?new Promise((n=>{const l=this._listeners.add(t,{visibilitychange:function(t){l(),n(e)}})})):Promise.resolve(e)}purge(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;[...this.connections].forEach((function(t){t.abort(e)})),this.connections=new Set}acquire(e){if(this.connections.size>=this.env.var("CONSUL_HTTP_MAX_CONNECTIONS")){const t=this.data.closed() +let n=[...this.connections].find((e=>!!e.headers()["x-request-id"]&&t.includes(e.headers()["x-request-id"]))) +void 0===n&&"text/event-stream"===e.headers()["content-type"]&&(n=this.connections.values().next().value),void 0!==n&&(this.release(n),n.abort(429))}this.connections.add(e)}release(e){this.connections.delete(e)}},o=c(i.prototype,"dom",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),a=c(i.prototype,"env",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),u=c(i.prototype,"data",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),i) +e.default=d})),define("consul-ui/services/client/http",["exports","@ember/service","@ember/object","@ember/runloop","consul-ui/utils/http/headers","consul-ui/utils/http/consul","consul-ui/utils/http/create-url","consul-ui/utils/http/create-headers","consul-ui/utils/http/create-query-params"],(function(e,t,n,l,r,i,o,a,u){var s,c,d,p,f,m,h,b,y,v,g,O,P,w,x +function j(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function _(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}function S(e,t){var n=Object.keys(e) +if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) +t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function k(e){for(var t=1;tC.stringify(this.sanitize(e)))) +const e=this.encoder.uriTag() +this.cache=(t,n)=>(t.uri=n(e),t.SyncTime=(new Date).getTime(),this.store.push({data:{id:t.uri,type:new URL(t.uri).protocol.slice(0,-1),attributes:t}}))}sanitize(e){return this.env.var("CONSUL_NSPACES_ENABLED")&&void 0!==e.ns&&null!==e.ns&&""!==e.ns||delete e.ns,this.env.var("CONSUL_PARTITIONS_ENABLED")&&void 0!==e.partition&&null!==e.partition&&""!==e.partition||delete e.partition,e}willDestroy(){this._listeners.remove(),super.willDestroy(...arguments)}url(){return this.parseURL(...arguments)}body(){const e=function(e){let t={} +const n=e.reduce((function(e,t,n){return-1!==(t=t.split("\n").map((e=>e.trim())).join("\n")).indexOf("\n\n")?n:e}),-1) +for(var l=arguments.length,r=new Array(l>1?l-1:0),i=1;i1?t-1:0),l=1;l0||Object.keys(d.data).length>0)&&(d.body=d.data) +else{const e=C.stringify(d.data) +e.length>0&&(-1!==d.url.indexOf("?")?d.url=`${d.url}&${e}`:d.url=`${d.url}?${e}`)}return d.headers[r.CONTENT_TYPE]="application/json; charset=utf-8",d.url=`${this.env.var("CONSUL_API_PREFIX")}${d.url}`,d}fetchWithToken(e,t){return this.settings.findBySlug("token").then((n=>fetch(`${this.env.var("CONSUL_API_PREFIX")}${e}`,k(k({},t),{},{credentials:"include",headers:k({"X-Consul-Token":void 0===n.SecretID?"":n.SecretID},t.headers)}))))}request(e){const t=this,n=this.cache +return e((function(e){for(var r=arguments.length,o=new Array(r>1?r-1:0),a=1;a{const r=k(k({},u),{},{headers:k({[i.HEADERS_TOKEN]:void 0===e.SecretID?"":e.SecretID},u.headers)}),o=t.transport.request(r) +return new Promise(((r,a)=>{const s=t._listeners.add(o,{open:e=>{t.acquire(e.target)},message:t=>{const o=k(k(k({},Object.entries(t.data.headers).reduce((function(e,t,n){let[l,r]=t +return M.includes(l)||(e[l]=r),e}),{})),u.clientHeaders),{},{[i.HEADERS_DATACENTER]:u.data.dc,[i.HEADERS_NAMESPACE]:u.data.ns||e.Namespace||"default",[i.HEADERS_PARTITION]:u.data.partition||e.Partition||"default"}),a=function(e){let l=e(o,t.data.response,n) +const r=l.meta||{} +return 2===r.version&&(Array.isArray(l.body)?l=new Proxy(l.body,{get:(e,t)=>"meta"===t?r:e[t]}):(l=l.body,l.meta=r)),l};(0,l.next)((()=>r(a)))},error:e=>{(0,l.next)((()=>a(e.error)))},close:e=>{t.release(e.target),s()}}) +o.fetch()}))}))}))}whenAvailable(e){return this.connections.whenAvailable(e)}abort(){return this.connections.purge(...arguments)}acquire(){return this.connections.acquire(...arguments)}release(){return this.connections.release(...arguments)}},y=_(b.prototype,"dom",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),v=_(b.prototype,"env",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),g=_(b.prototype,"connections",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),O=_(b.prototype,"transport",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),P=_(b.prototype,"settings",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),w=_(b.prototype,"encoder",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),x=_(b.prototype,"store",[h],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b) +e.default=D})),define("consul-ui/services/client/transports/xhr",["exports","@ember/service","consul-ui/utils/http/create-headers","consul-ui/utils/http/xhr","consul-ui/utils/http/request","consul-ui/utils/http/error"],(function(e,t,n,l,r,i){function o(e,t){var n=Object.keys(e) +if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) +t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function a(e){for(var t=1;t(this.xhr(n),t),t}}e.default=c})),define("consul-ui/services/clipboard/local-storage",["exports","@ember/service","clipboard"],(function(e,t,n){var l,r,i +function o(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class a extends n.default{constructor(e,t,n){super(e,t),this._cb=n}onClick(e){this._cb(this.text(e.delegateTarget||e.currentTarget)),this.emit("success",{})}}let u=(l=(0,t.inject)("-document"),r=class extends t.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="doc",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0}),o(this,"key","clipboard")}execute(e,t){return new a(e,t,(e=>{this.doc.defaultView.localStorage.setItem(this.key,e)}))}},s=r.prototype,c="doc",d=[l],p={configurable:!0,enumerable:!0,writable:!0,initializer:null},m={},Object.keys(p).forEach((function(e){m[e]=p[e]})),m.enumerable=!!m.enumerable,m.configurable=!!m.configurable,("value"in m||m.initializer)&&(m.writable=!0),m=d.slice().reverse().reduce((function(e,t){return t(s,c,e)||e}),m),f&&void 0!==m.initializer&&(m.value=m.initializer?m.initializer.call(f):void 0,m.initializer=void 0),void 0===m.initializer&&(Object.defineProperty(s,c,m),m=null),i=m,r) +var s,c,d,p,f,m +e.default=u})),define("consul-ui/services/clipboard/os",["exports","@ember/service","clipboard"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class l extends t.default{execute(){return new n.default(...arguments)}}e.default=l})),define("consul-ui/services/code-mirror",["exports","ivy-codemirror/services/code-mirror"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/services/code-mirror/linter",["exports","@ember/service","consul-ui/utils/editor/lint"],(function(e,t,n){var l,r,i +Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const o=[{name:"JSON",mime:"application/json",mode:"javascript",ext:["json","map"],alias:["json5"]},{name:"HCL",mime:"text/x-ruby",mode:"ruby",ext:["rb"],alias:["jruby","macruby","rake","rb","rbx"]},{name:"YAML",mime:"text/x-yaml",mode:"yaml",ext:["yaml","yml"],alias:["yml"]},{name:"XML",mime:"application/xml",mode:"xml",htmlMode:!1,matchClosing:!0,alignCDATA:!1,ext:["xml"],alias:["xml"]}] +let a=(l=(0,t.inject)("dom"),r=class extends t.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="dom",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}modes(){return o}lint(){return(0,n.default)(...arguments)}getEditor(e){return this.dom.element("textarea + div",e).CodeMirror}},u=r.prototype,s="dom",c=[l],d={configurable:!0,enumerable:!0,writable:!0,initializer:null},f={},Object.keys(d).forEach((function(e){f[e]=d[e]})),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=c.slice().reverse().reduce((function(e,t){return t(u,s,e)||e}),f),p&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(p):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(u,s,f),f=null),i=f,r) +var u,s,c,d,p,f +e.default=a})),define("consul-ui/services/container",["exports","@ember/service"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class n extends t.default{constructor(e){super(...arguments),this._owner=e,this._wm=new WeakMap}set(e,t){this._wm.set(t,e)}keyForClass(e){return this._wm.get(e)}get(e){return"string"!=typeof e&&(e=this.keyForClass(e)),this.lookup(e)}lookup(e){return this._owner.lookup(e)}resolveRegistration(e){return this._owner.resolveRegistration(e).prototype}}e.default=n})),define("consul-ui/services/data-sink/protocols/http",["exports","@ember/service","@ember/object"],(function(e,t,n){var l,r,i,o,a,u,s,c,d,p,f,m,h,b,y,v,g +function O(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function P(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let w=(l=(0,t.inject)("client/http"),r=(0,t.inject)("settings"),i=(0,t.inject)("repository/intention"),o=(0,t.inject)("repository/kv"),a=(0,t.inject)("repository/nspace"),u=(0,t.inject)("repository/partition"),s=(0,t.inject)("repository/peer"),c=(0,t.inject)("repository/session"),d=class extends t.default{constructor(){super(...arguments),O(this,"client",p,this),O(this,"settings",f,this),O(this,"intention",m,this),O(this,"kv",h,this),O(this,"nspace",b,this),O(this,"partition",y,this),O(this,"peer",v,this),O(this,"session",g,this)}prepare(e,t,l){return(0,n.setProperties)(l,t)}persist(e,t){const[,,,,n]=e.split("/"),l=this[n] +return this.client.request((e=>l.persist(t,e)))}remove(e,t){const[,,,,n]=e.split("/"),l=this[n] +return this.client.request((e=>l.remove(t,e)))}},p=P(d.prototype,"client",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f=P(d.prototype,"settings",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m=P(d.prototype,"intention",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=P(d.prototype,"kv",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=P(d.prototype,"nspace",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),y=P(d.prototype,"partition",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),v=P(d.prototype,"peer",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),g=P(d.prototype,"session",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),d) +e.default=w})),define("consul-ui/services/data-sink/protocols/local-storage",["exports","@ember/service","@ember/object"],(function(e,t,n){var l,r,i +Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let o=(l=(0,t.inject)("settings"),r=class extends t.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="settings",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}prepare(e,t){let l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{} +return null===t||""===t?l:(0,n.setProperties)(l,t)}persist(e,t){const n=e.split(":").pop() +return this.settings.persist({[n]:t})}remove(e,t){const n=e.split(":").pop() +return this.settings.delete(n)}},a=r.prototype,u="settings",s=[l],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},p={},Object.keys(c).forEach((function(e){p[e]=c[e]})),p.enumerable=!!p.enumerable,p.configurable=!!p.configurable,("value"in p||p.initializer)&&(p.writable=!0),p=s.slice().reverse().reduce((function(e,t){return t(a,u,e)||e}),p),d&&void 0!==p.initializer&&(p.value=p.initializer?p.initializer.call(d):void 0,p.initializer=void 0),void 0===p.initializer&&(Object.defineProperty(a,u,p),p=null),i=p,r) +var a,u,s,c,d,p +e.default=o})),define("consul-ui/services/data-sink/service",["exports","@ember/service"],(function(e,t){var n,l,r,i,o +function a(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function u(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const s=function(e){return-1===(e=e.toString()).indexOf("://")&&(e=`consul://${e}`),e.split("://")} +let c=(n=(0,t.inject)("data-sink/protocols/http"),l=(0,t.inject)("data-sink/protocols/local-storage"),r=class extends t.default{constructor(){super(...arguments),a(this,"consul",i,this),a(this,"settings",o,this)}prepare(e,t,n){const[l,r]=s(e) +return this[l].prepare(r,t,n)}persist(e,t){const[n,l]=s(e) +return this[n].persist(l,t)}remove(e,t){const[n,l]=s(e) +return this[n].remove(l,t)}},i=u(r.prototype,"consul",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),o=u(r.prototype,"settings",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),r) +e.default=c})),define("consul-ui/services/data-source/protocols/http",["exports","@ember/service","@ember/application","consul-ui/decorators/data-source"],(function(e,t,n,l){var r,i,o,a,u +function s(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function c(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let d=(r=(0,t.inject)("client/http"),i=(0,t.inject)("data-source/protocols/http/blocking"),o=class extends t.default{constructor(){super(...arguments),s(this,"client",a,this),s(this,"type",u,this)}source(e,t){const r=(0,l.match)(e) +let i +return this.client.request((e=>{i=r.cb(r.params,(0,n.getOwner)(this),e)})),this.type.source(i,t)}},a=c(o.prototype,"client",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),u=c(o.prototype,"type",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),o) +e.default=d})),define("consul-ui/services/data-source/protocols/http/blocking",["exports","@ember/service","@ember/object","consul-ui/utils/dom/event-source","consul-ui/services/settings","consul-ui/services/client/http","consul-ui/utils/maybe-call"],(function(e,t,n,l,r,i,o){var a,u,s,c,d +function p(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function f(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let m=(a=(0,t.inject)("client/http"),u=(0,t.inject)("settings"),s=class extends t.default{constructor(){super(...arguments),p(this,"client",c,this),p(this,"settings",d,this)}source(e,t){return new l.BlockingEventSource(((t,l)=>{const a=l.close.bind(l) +return(0,o.default)((()=>t.cursor=void 0),(0,r.ifNotBlocking)(this.settings))().then((()=>e(t).then((0,o.default)(a,(0,r.ifNotBlocking)(this.settings))).then((function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{} +const t=(0,n.get)(e,"meta")||{} +return void 0===t.cursor&&void 0===t.interval&&a(),e})).catch((0,i.restartWhenAvailable)(this.client))))}),t)}},c=f(s.prototype,"client",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),d=f(s.prototype,"settings",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),s) +e.default=m})),define("consul-ui/services/data-source/protocols/http/promise",["exports","@ember/service","consul-ui/utils/dom/event-source"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class l extends t.default{source(e,t){return(0,n.once)(e,t)}}e.default=l})),define("consul-ui/services/data-source/protocols/local-storage",["exports","@ember/service","consul-ui/utils/dom/event-source"],(function(e,t,n){var l,r,i +Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let o=(l=(0,t.inject)("settings"),r=class extends t.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="repo",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}source(e,t){const l=e.split(":").pop() +return new n.StorageEventSource((e=>this.repo.findBySlug(l)),{key:e,uri:t.uri})}},a=r.prototype,u="repo",s=[l],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},p={},Object.keys(c).forEach((function(e){p[e]=c[e]})),p.enumerable=!!p.enumerable,p.configurable=!!p.configurable,("value"in p||p.initializer)&&(p.writable=!0),p=s.slice().reverse().reduce((function(e,t){return t(a,u,e)||e}),p),d&&void 0!==p.initializer&&(p.value=p.initializer?p.initializer.call(d):void 0,p.initializer=void 0),void 0===p.initializer&&(Object.defineProperty(a,u,p),p=null),i=p,r) +var a,u,s,c,d,p +e.default=o})),define("consul-ui/services/data-source/service",["exports","@ember/service","@ember/debug","consul-ui/utils/dom/event-source","@ember/runloop","mnemonist/multi-map"],(function(e,t,n,l,r,i){var o,a,u,s,c,d,p,f,m +function h(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function b(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let y=null,v=null,g=null +class O{constructor(e){this.uri=e}toString(){return this.uri}}let P=(o=(0,t.inject)("dom"),a=(0,t.inject)("encoder"),u=(0,t.inject)("data-source/protocols/http"),s=(0,t.inject)("data-source/protocols/local-storage"),c=class extends t.default{constructor(){super(...arguments),h(this,"dom",d,this),h(this,"encoder",p,this),h(this,"consul",f,this),h(this,"settings",m,this)}init(){super.init(...arguments),y=new Map,v=new Map,g=new i.default(Set),this._listeners=this.dom.listeners()}resetCache(){y=new Map}willDestroy(){(0,r.schedule)("afterRender",(()=>{this._listeners.remove(),v.forEach((function(e){e.close()})),y=null,v=null,g.clear(),g=null}))}source(e,t){const n=e(this.encoder.uriTag()) +return new Promise(((e,t)=>{const r={},i=this.open(n,r,!0) +i.configuration.ref=r +const o=this._listeners.add(i,{message:t=>{o(),e((0,l.proxy)(t.target,t.data))},error:e=>{o(),this.close(i,r),t(e.error)}}) +void 0!==i.getCurrentEvent()&&i.dispatchEvent(i.getCurrentEvent())}))}unwrap(e,t){const n=e._source +return g.set(n,t),g.remove(n,n.configuration.ref),delete n.configuration.ref,n}uri(e){return new O(e)}open(e,t){let l,r=arguments.length>2&&void 0!==arguments[2]&&arguments[2] +if(!(e instanceof O)&&"string"!=typeof e)return this.unwrap(e,t);(0,n.runInDebug)((t=>{e instanceof O||console.error(new Error(`DataSource '${e}' does not use the uri helper. Please ensure you use the uri helper to ensure correct encoding`))})),-1===(e=e.toString()).indexOf("://")&&(e=`consul://${e}`) +let[i,o]=e.split("://") +const a=this[i] +if(v.has(e))l=v.get(e),v.delete(e),v.set(e,l) +else{let t={} +y.has(e)&&(t=y.get(e)),t.uri=e,l=a.source(o,t) +const n=this._listeners.add(l,{close:t=>{const l=t.target,r=l.getCurrentEvent(),i=l.configuration.cursor +void 0!==r&&void 0!==i&&t.errors&&"401"!==t.errors[0].status&&y.set(e,{currentEvent:r,cursor:i}),g.has(l)||v.delete(e),n()}}) +v.set(e,l)}return(!g.has(l)||l.readyState>1||r)&&l.open(),g.set(l,t),l}close(e,t){e&&(g.remove(e,t),g.has(e)||(e.close(),2===e.readyState&&v.delete(e.configuration.uri)))}closed(){return[...v.entries()].filter((e=>{let[t,n]=e +return n.readyState>1})).map((e=>e[0]))}},d=b(c.prototype,"dom",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p=b(c.prototype,"encoder",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f=b(c.prototype,"consul",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m=b(c.prototype,"settings",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),c) +e.default=P})) +define("consul-ui/services/data-structs",["exports","@ember/service","ngraph.graph"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class l extends t.default{graph(){return(0,n.default)()}}e.default=l})),define("consul-ui/services/dom",["exports","@ember/service","@ember/object/internals","consul-ui/utils/dom/qsa-factory","consul-ui/utils/dom/sibling","consul-ui/utils/dom/closest","consul-ui/utils/dom/is-outside","consul-ui/utils/dom/get-component-factory","consul-ui/utils/dom/normalize-event","consul-ui/utils/dom/create-listeners","consul-ui/utils/dom/click-first-anchor"],(function(e,t,n,l,r,i,o,a,u,s,c){var d,p,f +function m(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const h=(0,l.default)() +let b,y +const v=(0,c.default)(i.default) +let g=(d=(0,t.inject)("-document"),p=class extends t.default{constructor(e){var t,n,l,c +super(...arguments),t=this,n="doc",c=this,(l=f)&&Object.defineProperty(t,n,{enumerable:l.enumerable,configurable:l.configurable,writable:l.writable,value:l.initializer?l.initializer.call(c):void 0}),m(this,"clickFirstAnchor",v),m(this,"closest",i.default),m(this,"sibling",r.default),m(this,"isOutside",o.default),m(this,"normalizeEvent",u.default),m(this,"listeners",s.default),y=new WeakMap,b=(0,a.default)(e)}willDestroy(){super.willDestroy(...arguments),y=null,b=null}document(){return this.doc}viewport(){return this.doc.defaultView}guid(e){return(0,n.guidFor)(e)}focus(e){if("string"==typeof e&&(e=this.element(e)),void 0!==e){let t=e.getAttribute("tabindex") +e.setAttribute("tabindex","0"),e.focus(),null===t?e.removeAttribute("tabindex"):e.setAttribute("tabindex",t)}}setEventTargetProperty(e,t,n){const l=e.target +return new Proxy(e,{get:function(r,i,o){return"target"===i?new Proxy(l,{get:function(r,i,o){return i===t?n(e.target[t]):l[i]}}):Reflect.get(...arguments)}})}setEventTargetProperties(e,t){const n=e.target +return new Proxy(e,{get:function(l,r,i){return"target"===r?new Proxy(n,{get:function(l,r,i){return void 0!==t[r]?t[r](e.target):n[r]}}):Reflect.get(...arguments)}})}root(){return this.doc.documentElement}elementById(e){return this.doc.getElementById(e)}elementsByTagName(e,t){return(t=void 0===t?this.doc:t).getElementsByTagName(e)}elements(e,t){return h(e,t)}element(e,t){return"#"===e.substr(0,1)?this.elementById(e.substr(1)):[...h(e,t)][0]}component(e,t){return b("string"!=typeof e?e:this.element(e,t))}components(e,t){return[...this.elements(e,t)].map((function(e){return b(e)})).filter((function(e){return null!=e}))}isInViewport(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0 +y.set(e,t) +let l=new IntersectionObserver(((e,t)=>{e.map((e=>{const t=y.get(e.target) +"function"==typeof t&&t(e.isIntersecting)}))}),{rootMargin:"0px",threshold:n}) +return l.observe(e),()=>{l.unobserve(e),y&&y.delete(e),l.disconnect(),l=null}}},O=p.prototype,P="doc",w=[d],x={configurable:!0,enumerable:!0,writable:!0,initializer:null},_={},Object.keys(x).forEach((function(e){_[e]=x[e]})),_.enumerable=!!_.enumerable,_.configurable=!!_.configurable,("value"in _||_.initializer)&&(_.writable=!0),_=w.slice().reverse().reduce((function(e,t){return t(O,P,e)||e}),_),j&&void 0!==_.initializer&&(_.value=_.initializer?_.initializer.call(j):void 0,_.initializer=void 0),void 0===_.initializer&&(Object.defineProperty(O,P,_),_=null),f=_,p) +var O,P,w,x,j,_ +e.default=g})),define("consul-ui/services/encoder",["exports","@ember/service","@ember/object","@ember/debug","consul-ui/utils/atob","consul-ui/utils/btoa"],(function(e,t,n,l,r,i){function o(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class a extends t.default{constructor(){super(...arguments),o(this,"uriComponent",encodeURIComponent),o(this,"joiner",(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"" +return(l,r)=>(r||Array(l.length).fill(t)).reduce(((t,r,i)=>`${t}${r}${e(l[i]||n)}`),"")}))}createRegExpEncoder(e,t){return function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e=>e,r=!(arguments.length>2&&void 0!==arguments[2])||arguments[2] +return function(){let i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} +return""!==i?i.replace(e,((e,a)=>{const u=(0,n.get)(o,a) +return(0,l.runInDebug)((()=>{r&&void 0===u&&console.error(new Error(`${a} is undefined in ${i}`))})),t(u||"")})):""}}(e,t)}atob(){return(0,r.default)(...arguments)}btoa(){return(0,i.default)(...arguments)}uriJoin(){return this.joiner(this.uriComponent,"/","")(...arguments)}uriTag(){return this.tag(this.uriJoin.bind(this))}tag(e){return function(t){for(var n=arguments.length,l=new Array(n>1?n-1:0),r=1;rthis.success(n,e,void 0,t),error:n=>this.error(n,e,void 0,t)}}success(e,t){let l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:m,r=arguments.length>3?arguments[3]:void 0 +const i=(0,n.default)(t),o=(0,n.default)(l) +!1!==e&&(this.notify.clearMessages(),this.notify.add(s(s({},{timeout:6e3,extendedTimeout:300,destroyOnClick:!0}),{},{type:o(f),action:i(),item:e,model:r})))}error(e,t){let l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:m,r=arguments.length>3?arguments[3]:void 0 +const i=(0,n.default)(t),o=(0,n.default)(l) +this.notify.clearMessages(),this.logger.execute(e),"TransitionAborted"===e.name?this.notify.add(s(s({},{timeout:6e3,extendedTimeout:300,destroyOnClick:!0}),{},{type:o(f),action:i(),model:r})):this.notify.add(s(s({},{timeout:6e3,extendedTimeout:300,destroyOnClick:!0}),{},{type:o("error",e),action:i(),error:e,model:r}))}async execute(e,t,n,l){let r +try{r=await e(),this.success(r,t,n,l)}catch(i){this.error(i,t,n,l)}}},o=p(i.prototype,"notify",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),a=p(i.prototype,"logger",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),i) +e.default=h})),define("consul-ui/services/filter",["exports","@ember/service","consul-ui/utils/filter","consul-ui/filter/predicates/service","consul-ui/filter/predicates/service-instance","consul-ui/filter/predicates/health-check","consul-ui/filter/predicates/node","consul-ui/filter/predicates/kv","consul-ui/filter/predicates/intention","consul-ui/filter/predicates/token","consul-ui/filter/predicates/policy","consul-ui/filter/predicates/auth-method","consul-ui/filter/predicates/peer"],(function(e,t,n,l,r,i,o,a,u,s,c,d,p){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const f={service:(0,n.andOr)(l.default),"service-instance":(0,n.andOr)(r.default),"health-check":(0,n.andOr)(i.default),"auth-method":(0,n.andOr)(d.default),node:(0,n.andOr)(o.default),kv:(0,n.andOr)(a.default),intention:(0,n.andOr)(u.default),token:(0,n.andOr)(s.default),policy:(0,n.andOr)(c.default),peer:(0,n.andOr)(p.default)} +class m extends t.default{predicate(e){return f[e]}}e.default=m})),define("consul-ui/services/flash-messages",["exports","ember-cli-flash/services/flash-messages"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/services/form",["exports","@ember/service","consul-ui/utils/form/builder","consul-ui/forms/kv","consul-ui/forms/token","consul-ui/forms/policy","consul-ui/forms/role","consul-ui/forms/intention"],(function(e,t,n,l,r,i,o,a){var u,s,c,d,p +function f(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function m(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function h(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const b=(0,n.default)(),y={kv:l.default,token:r.default,policy:i.default,role:o.default,intention:a.default} +let v=(u=(0,t.inject)("repository/role"),s=(0,t.inject)("repository/policy"),c=class extends t.default{constructor(){super(...arguments),f(this,"role",d,this),f(this,"policy",p,this),m(this,"forms",[])}build(e,t){return b(...arguments)}form(e){let t=this.forms[e] +if(void 0===t&&(t=this.forms[e]=y[e](this),"role"===e||"policy"===e)){const n=this[e] +t.clear((function(e){return n.create(e)})),t.submit((function(e){return n.persist(e)}))}return t}},d=h(c.prototype,"role",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p=h(c.prototype,"policy",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),c) +e.default=v})),define("consul-ui/services/hcp",["exports","@ember/service","@ember/debug"],(function(e,t,n){var l,r,i,o,a,u,s +function c(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function d(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let p=(l=(0,t.inject)("env"),r=(0,t.inject)("repository/token"),i=(0,t.inject)("settings"),o=class extends t.default{constructor(){super(...arguments),c(this,"env",a,this),c(this,"tokenRepo",u,this),c(this,"settings",s,this)}async updateTokenIfNecessary(e){if(e){const l=await this.settings.findBySlug("token") +if(e&&e!==l.SecretID)try{const t=await this.tokenRepo.self({secret:e,dc:this.env.var("CONSUL_DATACENTER_LOCAL")}) +await this.settings.persist({token:{AccessorID:t.AccessorID,SecretID:t.SecretID,Namespace:t.Namespace,Partition:t.Partition}})}catch(t){(0,n.runInDebug)((e=>console.error(t)))}}}},a=d(o.prototype,"env",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),u=d(o.prototype,"tokenRepo",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),s=d(o.prototype,"settings",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),o) +e.default=p})),define("consul-ui/services/i18n",["exports","ember-intl/services/intl","@ember/service"],(function(e,t,n){var l,r,i +function o(e,t){var n=Object.keys(e) +if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) +t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function a(e){for(var t=1;t(e[t]=this.env.var(t),e)),{}) +return a(a({},e),t)}},d=r.prototype,p="env",f=[l],m={configurable:!0,enumerable:!0,writable:!0,initializer:null},b={},Object.keys(m).forEach((function(e){b[e]=m[e]})),b.enumerable=!!b.enumerable,b.configurable=!!b.configurable,("value"in b||b.initializer)&&(b.writable=!0),b=f.slice().reverse().reduce((function(e,t){return t(d,p,e)||e}),b),h&&void 0!==b.initializer&&(b.value=b.initializer?b.initializer.call(h):void 0,b.initializer=void 0),void 0===b.initializer&&(Object.defineProperty(d,p,b),b=null),i=b,r) +var d,p,f,m,h,b +e.default=c})),define("consul-ui/services/intl",["exports","ember-intl/services/intl"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/services/keyboard",["exports","ember-keyboard/services/keyboard.js"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/services/local-storage",["exports","@ember/service","@ember/application","consul-ui/config/environment"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.storageFor=function(e){return function(){return{get(){return(0,n.getOwner)(this).lookup("service:localStorage").getBucket(e)}}}} +class r{constructor(){this.data=new Map}getItem(e){return this.data.get(e)}setItem(e,t){return this.data.set(e,t.toString())}seed(e){const t=new Map +Object.keys(e).forEach((n=>{t.set(n,e[n].toString())})),this.data=t}}class i extends t.default{constructor(){super(...arguments),this.storage="test"===l.default.environment?new r:window.localStorage,this.buckets=new Map}getBucket(e){const t=this.buckets.get(e) +return t||this._setupBucket(e)}_setupBucket(e){const t=new(0,(0,n.getOwner)(this).factoryFor(`storage:${e}`).class)(e,this.storage) +return this.buckets.set(e,t),t}}e.default=i})),define("consul-ui/services/logger",["exports","@ember/service","@ember/debug"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class l extends t.default{execute(e){(0,n.runInDebug)((()=>{(e=void 0!==e.error?e.error:e)instanceof Error?console.error(e):console.log(e)}))}}e.default=l})),define("consul-ui/services/page-title-list",["exports","ember-page-title/services/page-title-list"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/services/page-title",["exports","ember-page-title/services/page-title"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/services/popup",["exports","torii/services/popup"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/services/repository",["exports","@ember/service","@ember/debug","@ember/utils","@ember/object","validated-changeset","consul-ui/utils/http/error","consul-ui/abilities/base"],(function(e,t,n,l,r,i,o,a){var u,s,c,d,p,f,m +function h(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function b(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.softDelete=e.default=void 0 +e.softDelete=(e,t)=>e.store.adapterFor(e.getModelName()).rpc(((e,t,n,l)=>e.requestForDeleteRecord(t,n,l)),((e,n,l,r)=>t),t,e.getModelName()) +let y=(u=(0,t.inject)("store"),s=(0,t.inject)("env"),c=(0,t.inject)("repository/permission"),d=class extends t.default{constructor(){super(...arguments),h(this,"store",p,this),h(this,"env",f,this),h(this,"permissions",m,this)}getModelName(){}getPrimaryKey(){}getSlugKey(){}async authorizeBySlug(e,t,n){return n.resources=await this.permissions.findBySlug(n,this.getModelName()),this.validatePermissions(e,t,n)}async authorizeByPermissions(e,t,n){return n.resources=await this.permissions.authorize(n),this.validatePermissions(e,t,n)}async validatePermissions(e,t,n){if(n.resources.length>0){const e=n.resources.find((e=>e.Access===t)) +if(e&&!1===e.Allow){const e=new o.default(403) +throw e.errors=[{status:"403"}],e}}const l=await e(n.resources) +return(0,r.get)(l,"Resources")&&(0,r.set)(l,"Resources",n.resources),l}shouldReconcile(e,t){if((0,r.get)(e,"Datacenter")!==t.dc)return!1 +if(this.env.var("CONSUL_NSPACES_ENABLED")){const n=(0,r.get)(e,"Namespace") +if(void 0!==n&&n!==t.ns)return!1}if(this.env.var("CONSUL_PARTITIONS_ENABLED")){const n=(0,r.get)(e,"Partition") +if(void 0!==n&&n!==t.partition)return!1}return!0}reconcile(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} +void 0!==e.date&&this.store.peekAll(this.getModelName()).forEach((n=>{const l=(0,r.get)(n,"SyncTime") +!n.isDeleted&&void 0!==l&&l!=e.date&&this.shouldReconcile(n,t)&&this.store.unloadRecord(n)}))}peekOne(e){return this.store.peekRecord(this.getModelName(),e)}peekAll(){return this.store.peekAll(this.getModelName())}cached(e){const t=Object.entries(e) +return this.store.peekAll(this.getModelName()).filter((e=>t.every((t=>{let[n,l]=t +return e[n]===l}))))}async findAllByDatacenter(e){return this.findAll(...arguments)}async findAll(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} +return void 0!==t.cursor&&(e.index=t.cursor,e.uri=t.uri),this.query(e)}async query(){let e,t,n,l=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} +try{n=await this.store.query(this.getModelName(),l),t=n.meta}catch(o){switch((0,r.get)(o,"errors.firstObject.status")){case"404":case"403":t={date:Number.POSITIVE_INFINITY},e=o +break +default:throw o}}if(void 0!==t&&this.reconcile(t,l,i),void 0!==e)throw e +return n}async findBySlug(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} +return""===e.id?this.create({Datacenter:e.dc,Namespace:e.ns,Partition:e.partition}):(void 0!==t.cursor&&(e.index=t.cursor,e.uri=t.uri),this.authorizeBySlug((()=>this.store.queryRecord(this.getModelName(),e)),a.ACCESS_READ,e))}create(e){return this.store.createRecord(this.getModelName(),e)}persist(e){return(0,i.isChangeset)(e)&&(e.execute(),e=e.data),(0,r.set)(e,"SyncTime",void 0),e.save()}remove(e){let t=e +return void 0===e.destroyRecord&&(t=e.get("data")),"object"===(0,l.typeOf)(t)&&(t=this.store.peekRecord(this.getModelName(),t[this.getPrimaryKey()])),t.destroyRecord().then((e=>this.store.unloadRecord(e)))}invalidate(){this.store.unloadAll(this.getModelName())}},p=b(d.prototype,"store",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f=b(d.prototype,"env",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m=b(d.prototype,"permissions",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),d) +e.default=y})),define("consul-ui/services/repository/auth-method",["exports","consul-ui/services/repository","consul-ui/models/auth-method","consul-ui/decorators/data-source"],(function(e,t,n,l){var r,i,o +function a(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let u=(r=(0,l.default)("/:partition/:ns/:dc/auth-methods"),i=(0,l.default)("/:partition/:ns/:dc/auth-method/:id"),o=class extends t.default{getModelName(){return"auth-method"}getPrimaryKey(){return n.PRIMARY_KEY}getSlugKey(){return n.SLUG_KEY}async findAllByDatacenter(){return super.findAllByDatacenter(...arguments)}async findBySlug(){return super.findBySlug(...arguments)}},a(o.prototype,"findAllByDatacenter",[r],Object.getOwnPropertyDescriptor(o.prototype,"findAllByDatacenter"),o.prototype),a(o.prototype,"findBySlug",[i],Object.getOwnPropertyDescriptor(o.prototype,"findBySlug"),o.prototype),o) +e.default=u})),define("consul-ui/services/repository/binding-rule",["exports","consul-ui/services/repository","consul-ui/models/binding-rule","consul-ui/decorators/data-source"],(function(e,t,n,l){var r,i +Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let o=(r=(0,l.default)("/:partition/:ns/:dc/binding-rules/for-auth-method/:authmethod"),i=class extends t.default{getModelName(){return"binding-rule"}getPrimaryKey(){return n.PRIMARY_KEY}getSlugKey(){return n.SLUG_KEY}async findAllByAuthMethod(){return super.findAll(...arguments)}},a=i.prototype,u="findAllByAuthMethod",s=[r],c=Object.getOwnPropertyDescriptor(i.prototype,"findAllByAuthMethod"),d=i.prototype,p={},Object.keys(c).forEach((function(e){p[e]=c[e]})),p.enumerable=!!p.enumerable,p.configurable=!!p.configurable,("value"in p||p.initializer)&&(p.writable=!0),p=s.slice().reverse().reduce((function(e,t){return t(a,u,e)||e}),p),d&&void 0!==p.initializer&&(p.value=p.initializer?p.initializer.call(d):void 0,p.initializer=void 0),void 0===p.initializer&&(Object.defineProperty(a,u,p),p=null),i) +var a,u,s,c,d,p +e.default=o})),define("consul-ui/services/repository/coordinate",["exports","consul-ui/services/repository","consul-ui/decorators/data-source","consul-ui/utils/tomography","consul-ui/utils/distance"],(function(e,t,n,l,r){var i,o,a +function u(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const s=(0,l.default)(r.default) +let c=(i=(0,n.default)("/:partition/:ns/:dc/coordinates"),o=(0,n.default)("/:partition/:ns/:dc/coordinates/for-node/:id"),a=class extends t.default{getModelName(){return"coordinate"}async findAllByDatacenter(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} +return void 0!==t.cursor&&(e.index=t.cursor,e.uri=t.uri),this.store.query(this.getModelName(),e)}async findAllByNode(e,t){const n=await this.findAllByDatacenter(e,t) +let l={} +return n.length>1&&(l=s(e.id,n)),l.meta=n.meta,l}},u(a.prototype,"findAllByDatacenter",[i],Object.getOwnPropertyDescriptor(a.prototype,"findAllByDatacenter"),a.prototype),u(a.prototype,"findAllByNode",[o],Object.getOwnPropertyDescriptor(a.prototype,"findAllByNode"),a.prototype),a) +e.default=c})),define("consul-ui/services/repository/dc",["exports","@ember/error","@ember/service","consul-ui/services/repository","consul-ui/decorators/data-source","consul-ui/utils/http/consul"],(function(e,t,n,l,r,i){var o,a,u,s,c,d,p +function f(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}function m(e,t){var n=Object.keys(e) +if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) +t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function h(e){for(var t=1;t{const l=Object.entries(e).find((e=>{let[t,n]=e +return t.toLowerCase()===i.HEADERS_DEFAULT_ACL_POLICY.toLowerCase()}))[1]||"allow" +return{meta:{version:2,uri:a},body:t.map((e=>n({Name:e,Datacenter:"",Local:e===u,Primary:e===s,DefaultACLPolicy:l},(t=>t`${y}:///${""}/${""}/${e}/datacenter`))))}}))}async fetch(e,t,n){let{partition:l,ns:r,dc:i}=e,{uri:o}=t +return(await(n` + GET /v1/operator/autopilot/state?${{dc:i}} + X-Request-ID: ${o} + `))(((e,t,n)=>{const l=Object.values(t.Servers),r=[] +return{meta:{version:2,uri:o},body:n(h(h({},t),{},{Servers:l,RedundancyZones:Object.entries(t.RedundancyZones||{}).map((e=>{let[n,l]=e +return h(h({},l),{},{Name:n,Healthy:!0,Servers:l.Servers.reduce(((e,n)=>{const l=t.Servers[n] +return r.push(l.ID),e.push(l),e}),[])})})),ReadReplicas:(t.ReadReplicas||[]).map((e=>(r.push(e),t.Servers[e]))),Default:{Servers:l.filter((e=>!r.includes(e.ID)))}}),(e=>e`${y}:///${""}/${""}/${i}/datacenter`))}}))}async fetchCatalogHealth(e,t,n){let{partition:l,ns:r,dc:i}=e,{uri:o}=t +return(await(n` + GET /v1/internal/ui/catalog-overview?${{dc:i,stale:null}} + X-Request-ID: ${o} + `))(((e,t,n)=>{const l=["Nodes","Services","Checks"].reduce(((e,n)=>((e,t,n)=>t[n].reduce(((e,t)=>(["Partition","Namespace"].forEach((l=>{let r=e[l][t[l]] +void 0===r&&(r=e[l][t[l]]={Name:t[l]}),void 0===r[n]&&(r[n]=h({},v)),r[n].Total+=t.Total,r[n].Passing+=t.Passing,r[n].Warning+=t.Warning,r[n].Critical+=t.Critical})),e.Datacenter[n].Total+=t.Total,e.Datacenter[n].Passing+=t.Passing,e.Datacenter[n].Warning+=t.Warning,e.Datacenter[n].Critical+=t.Critical,e)),e))(e,t,n)),{Datacenter:{Name:i,Nodes:h({},v),Services:h({},v),Checks:h({},v)},Partition:{},Namespace:{}}) +return{meta:{version:2,uri:o,interval:3e4},body:h({Datacenter:l.Datacenter,Partitions:Object.values(l.Partition),Namespaces:Object.values(l.Namespace)},t)}}))}async find(e){const n=this.store.peekAll("dc").findBy("Name",e.name) +if(void 0===n){const e=new t.default("Page not found") +throw e.status="404",{errors:[e]}}return n}},p=f(d.prototype,"env",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f(d.prototype,"fetchAll",[a],Object.getOwnPropertyDescriptor(d.prototype,"fetchAll"),d.prototype),f(d.prototype,"fetch",[u],Object.getOwnPropertyDescriptor(d.prototype,"fetch"),d.prototype),f(d.prototype,"fetchCatalogHealth",[s],Object.getOwnPropertyDescriptor(d.prototype,"fetchCatalogHealth"),d.prototype),f(d.prototype,"find",[c],Object.getOwnPropertyDescriptor(d.prototype,"find"),d.prototype),d) +e.default=g})),define("consul-ui/services/repository/discovery-chain",["exports","@ember/service","@ember/object","consul-ui/services/repository","consul-ui/decorators/data-source"],(function(e,t,n,l,r){var i,o,a,u +function s(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let c=(i=(0,t.inject)("repository/dc"),o=(0,r.default)("/:partition/:ns/:dc/discovery-chain/:id"),a=class extends l.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="dcs",l=this,(n=u)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}getModelName(){return"discovery-chain"}findBySlug(e){const t=this.dcs.peekAll().findBy("Name",e.dc) +return void 0===t||(0,n.get)(t,"MeshEnabled")?super.findBySlug(...arguments).catch((e=>{const l=(0,n.get)(e,"errors.firstObject.status"),r=((0,n.get)(e,"errors.firstObject.detail")||"").trim() +if("500"!==l)throw e +void 0!==t&&r.endsWith("Connect must be enabled in order to use this endpoint")&&(0,n.set)(t,"MeshEnabled",!1)})):Promise.resolve()}},u=s(a.prototype,"dcs",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),s(a.prototype,"findBySlug",[o],Object.getOwnPropertyDescriptor(a.prototype,"findBySlug"),a.prototype),a) +e.default=c})),define("consul-ui/services/repository/intention-permission-http-header",["exports","consul-ui/services/repository"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class n extends t.default{getModelName(){return"intention-permission-http-header"}create(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{} +return this.store.createFragment(this.getModelName(),e)}persist(e){return e.execute()}}e.default=n})),define("consul-ui/services/repository/intention-permission",["exports","consul-ui/services/repository"],(function(e,t){function n(e,t){var n=Object.keys(e) +if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) +t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function l(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:{} +return this.store.createFragment(this.getModelName(),l(l({},e),{},{HTTP:this.store.createFragment("intention-permission-http",e.HTTP||{})}))}persist(e){return e.execute()}}e.default=i})),define("consul-ui/services/repository/intention",["exports","@ember/object","@ember/service","consul-ui/services/repository","consul-ui/models/intention","consul-ui/decorators/data-source"],(function(e,t,n,l,r,i){var o,a,u,s,c,d +function p(e,t){var n=Object.keys(e) +if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) +t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function f(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function m(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let h=(o=(0,n.inject)("env"),a=(0,i.default)("/:partition/:ns/:dc/intentions"),u=(0,i.default)("/:partition/:ns/:dc/intention/:id"),s=(0,i.default)("/:partition/:ns/:dc/intentions/for-service/:id"),c=class extends l.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="env",l=this,(n=d)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0}),f(this,"managedByCRDs",!1)}getModelName(){return"intention"}getPrimaryKey(){return r.PRIMARY_KEY}create(e){return delete e.Namespace,super.create(function(e){for(var t=1;te.IsManagedByCRD))),this.managedByCRDs}async authorizeBySlug(e,t,n){const[,l,,r]=n.id.split(":"),i=this.permissions.abilityFor(this.getModelName()) +return n.resources=i.generateForSegment(l).concat(i.generateForSegment(r)),this.authorizeByPermissions(e,t,n)}async persist(e){const n=await super.persist(...arguments) +return(0,t.get)(n,"Action.length")&&(0,t.set)(n,"Permissions",[]),n}async findAll(){return super.findAll(...arguments)}async findBySlug(e){let t +if(""===e.id){const n=this.env.var("CONSUL_NSPACES_ENABLED")?"*":"default",l="default" +t=await this.create({SourceNS:e.nspace||n,DestinationNS:e.nspace||n,SourcePartition:e.partition||l,DestinationPartition:e.partition||l,Datacenter:e.dc,Partition:e.partition})}else t=super.findBySlug(...arguments) +return t}async findByService(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} +const n={dc:e.dc,nspace:e.nspace,filter:`SourceName == "${e.id}" or DestinationName == "${e.id}" or SourceName == "*" or DestinationName == "*"`} +return void 0!==t.cursor&&(n.index=t.cursor,n.uri=t.uri),this.store.query(this.getModelName(),n)}},d=m(c.prototype,"env",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m(c.prototype,"findAll",[a],Object.getOwnPropertyDescriptor(c.prototype,"findAll"),c.prototype),m(c.prototype,"findBySlug",[u],Object.getOwnPropertyDescriptor(c.prototype,"findBySlug"),c.prototype),m(c.prototype,"findByService",[s],Object.getOwnPropertyDescriptor(c.prototype,"findByService"),c.prototype),c) +e.default=h})),define("consul-ui/services/repository/kv",["exports","consul-ui/services/repository","consul-ui/utils/isFolder","@ember/object","consul-ui/models/kv","consul-ui/decorators/data-source"],(function(e,t,n,l,r,i){var o,a,u +function s(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let c=(o=(0,i.default)("/:partition/:ns/:dc/kv/:id"),a=(0,i.default)("/:partition/:ns/:dc/kvs/:id"),u=class extends t.default{getModelName(){return"kv"}getPrimaryKey(){return r.PRIMARY_KEY}shouldReconcile(e,t){return super.shouldReconcile(...arguments)&&e.Key.startsWith(t.id)}async findBySlug(e){let t +if((0,n.default)(e.id)){const n=JSON.stringify([e.partition,e.ns,e.dc,e.id]) +t=this.store.peekRecord(this.getModelName(),n),t||(t=await this.create({Key:e.id,Datacenter:e.dc,Namespace:e.ns,Partition:e.partition}))}else t=""===e.id?await this.create({Datacenter:e.dc,Namespace:e.ns,Partition:e.partition}):await super.findBySlug(...arguments) +return t}async findAllBySlug(e){e.separator="/","/"===e.id&&(e.id="") +let t=await this.findAll(...arguments) +const n=t.meta +return t=t.filter((t=>e.id!==(0,l.get)(t,"Key"))),t.meta=n,t}},s(u.prototype,"findBySlug",[o],Object.getOwnPropertyDescriptor(u.prototype,"findBySlug"),u.prototype),s(u.prototype,"findAllBySlug",[a],Object.getOwnPropertyDescriptor(u.prototype,"findAllBySlug"),u.prototype),u) +e.default=c})),define("consul-ui/services/repository/license",["exports","consul-ui/services/repository","consul-ui/decorators/data-source"],(function(e,t,n){var l,r +function i(e,t){var n=Object.keys(e) +if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) +t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function o(e){for(var t=1;t({meta:{version:2,uri:o,interval:3e4},body:n(u(t,{dc:i}),(e=>e`${"license"}:///${l}/${r}/${i}/license/${t.License.license_id}`))})))}},c=r.prototype,d="find",p=[l],f=Object.getOwnPropertyDescriptor(r.prototype,"find"),m=r.prototype,h={},Object.keys(f).forEach((function(e){h[e]=f[e]})),h.enumerable=!!h.enumerable,h.configurable=!!h.configurable,("value"in h||h.initializer)&&(h.writable=!0),h=p.slice().reverse().reduce((function(e,t){return t(c,d,e)||e}),h),m&&void 0!==h.initializer&&(h.value=h.initializer?h.initializer.call(m):void 0,h.initializer=void 0),void 0===h.initializer&&(Object.defineProperty(c,d,h),h=null),r) +var c,d,p,f,m,h +e.default=s})),define("consul-ui/services/repository/metrics",["exports","@ember/service","consul-ui/services/repository","consul-ui/decorators/data-source"],(function(e,t,n,l){var r,i,o,a,u,s,c,d,p,f +function m(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function h(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function b(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let y=(r=(0,t.inject)("ui-config"),i=(0,t.inject)("env"),o=(0,t.inject)("client/http"),a=(0,l.default)("/:partition/:ns/:dc/metrics/summary-for-service/:slug/:protocol"),u=(0,l.default)("/:partition/:ns/:dc/metrics/upstream-summary-for-service/:slug/:protocol"),s=(0,l.default)("/:partition/:ns/:dc/metrics/downstream-summary-for-service/:slug/:protocol"),c=class extends n.default{constructor(){super(...arguments),m(this,"config",d,this),m(this,"env",p,this),m(this,"client",f,this),h(this,"error",null)}getModelName(){return"metrics"}init(){super.init(...arguments) +const e=this.config.getSync(),t=e.metrics_provider_options||{} +t.metrics_proxy_enabled=e.metrics_proxy_enabled +const n=e.metrics_provider||"prometheus" +t.fetch=(e,t)=>this.client.fetchWithToken(`/v1/internal/ui/metrics-proxy${e}`,t) +try{this.provider=window.consul.getMetricsProvider(n,t)}catch(l){this.error=new Error(`metrics provider not initialized: ${l}`),console.error(this.error)}}findServiceSummary(e){if(this.error)return Promise.reject(this.error) +const t=[this.provider.serviceRecentSummarySeries(e.slug,e.dc,e.ns,e.protocol,{}),this.provider.serviceRecentSummaryStats(e.slug,e.dc,e.ns,e.protocol,{})] +return Promise.all(t).then((e=>({meta:{interval:this.env.var("CONSUL_METRICS_POLL_INTERVAL")||1e4},series:e[0],stats:e[1].stats})))}findUpstreamSummary(e){return this.error?Promise.reject(this.error):this.provider.upstreamRecentSummaryStats(e.slug,e.dc,e.ns,{}).then((e=>(e.meta={interval:this.env.var("CONSUL_METRICS_POLL_INTERVAL")||1e4},e)))}findDownstreamSummary(e){return this.error?Promise.reject(this.error):this.provider.downstreamRecentSummaryStats(e.slug,e.dc,e.ns,{}).then((e=>(e.meta={interval:this.env.var("CONSUL_METRICS_POLL_INTERVAL")||1e4},e)))}},d=b(c.prototype,"config",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p=b(c.prototype,"env",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f=b(c.prototype,"client",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b(c.prototype,"findServiceSummary",[a],Object.getOwnPropertyDescriptor(c.prototype,"findServiceSummary"),c.prototype),b(c.prototype,"findUpstreamSummary",[u],Object.getOwnPropertyDescriptor(c.prototype,"findUpstreamSummary"),c.prototype),b(c.prototype,"findDownstreamSummary",[s],Object.getOwnPropertyDescriptor(c.prototype,"findDownstreamSummary"),c.prototype),c) +e.default=y})),define("consul-ui/services/repository/node",["exports","consul-ui/services/repository","consul-ui/decorators/data-source"],(function(e,t,n){var l,r,i,o +function a(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let u=(l=(0,n.default)("/:partition/:ns/:dc/nodes"),r=(0,n.default)("/:partition/:ns/:dc/node/:id/:peer"),i=(0,n.default)("/:partition/:ns/:dc/leader"),o=class extends t.default{getModelName(){return"node"}async findAllByDatacenter(){return super.findAllByDatacenter(...arguments)}async findBySlug(){return super.findBySlug(...arguments)}findLeader(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} +return void 0!==t.refresh&&(e.uri=t.uri),this.store.queryLeader(this.getModelName(),e)}},a(o.prototype,"findAllByDatacenter",[l],Object.getOwnPropertyDescriptor(o.prototype,"findAllByDatacenter"),o.prototype),a(o.prototype,"findBySlug",[r],Object.getOwnPropertyDescriptor(o.prototype,"findBySlug"),o.prototype),a(o.prototype,"findLeader",[i],Object.getOwnPropertyDescriptor(o.prototype,"findLeader"),o.prototype),o) +e.default=u})) +define("consul-ui/services/repository/nspace",["exports","@ember/service","@ember/debug","consul-ui/services/repository","consul-ui/models/nspace","consul-ui/decorators/data-source","consul-ui/utils/form/builder"],(function(e,t,n,l,r,i,o){var a,u,s,c,d,p,f,m,h,b,y,v,g,O,P +function w(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function x(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let j=(a=(0,t.inject)("router"),u=(0,t.inject)("container"),s=(0,t.inject)("env"),c=(0,t.inject)("form"),d=(0,t.inject)("settings"),p=(0,t.inject)("repository/permission"),f=(0,i.default)("/:partition/:ns/:dc/namespaces"),m=(0,i.default)("/:partition/:ns/:dc/namespace/:id"),h=class extends l.default{constructor(){super(...arguments),w(this,"router",b,this),w(this,"container",y,this),w(this,"env",v,this),w(this,"form",g,this),w(this,"settings",O,this),w(this,"permissions",P,this)}getPrimaryKey(){return r.PRIMARY_KEY}getSlugKey(){return r.SLUG_KEY}getModelName(){return"nspace"}async findAll(){return this.permissions.can("use nspaces")?super.findAll(...arguments).catch((()=>[])):[]}async findBySlug(e){let t +return t=""===e.id?await this.create({Datacenter:e.dc,Partition:e.partition,ACLs:{PolicyDefaults:[],RoleDefaults:[]}}):await super.findBySlug(...arguments),(0,o.defaultChangeset)(t)}remove(e){return(0,l.softDelete)(this,e)}authorize(e,t){return this.env.var("CONSUL_ACLS_ENABLED")?this.store.authorize(this.getModelName(),{dc:e,ns:t}).catch((function(e){return[]})):Promise.resolve([{Resource:"operator",Access:"write",Allow:!0}])}async getActive(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"" +if(this.permissions.can("use nspaces"))return{Name:"default"} +const t=this.store.peekAll("nspace").toArray() +if(0===e.length){e=(await this.settings.findBySlug("token")).Namespace||"default"}return 1===t.length?t[0]:function(e,t){let l=e.find((function(e){return e.Name===t.Name})) +return void 0===l&&((0,n.runInDebug)((n=>console.info(`${t.Name} not found in [${e.map((e=>e.Name)).join(", ")}]`))),l=e.find((function(e){return"default"===e.Name})),void 0===l&&(l=e[0])),l}(t,{Name:e})}},b=x(h.prototype,"router",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),y=x(h.prototype,"container",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),v=x(h.prototype,"env",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),g=x(h.prototype,"form",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),O=x(h.prototype,"settings",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),P=x(h.prototype,"permissions",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),x(h.prototype,"findAll",[f],Object.getOwnPropertyDescriptor(h.prototype,"findAll"),h.prototype),x(h.prototype,"findBySlug",[m],Object.getOwnPropertyDescriptor(h.prototype,"findBySlug"),h.prototype),h) +e.default=j})),define("consul-ui/services/repository/oidc-provider",["exports","@ember/service","consul-ui/services/repository","@ember/application","@ember/object","consul-ui/decorators/data-source"],(function(e,t,n,l,r,i){var o,a,u,s,c,d,p,f +function m(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function h(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const b="oidc-with-url" +let y=(o=(0,t.inject)("torii"),a=(0,t.inject)("settings"),u=(0,i.default)("/:partition/:ns/:dc/oidc/providers"),s=(0,i.default)("/:partition/:ns/:dc/oidc/provider/:id"),c=(0,i.default)("/:partition/:ns/:dc/oidc/authorize/:id/:code/:state"),d=class extends n.default{constructor(){super(...arguments),m(this,"manager",p,this),m(this,"settings",f,this)}init(){super.init(...arguments),this.provider=(0,l.getOwner)(this).lookup(`torii-provider:${b}`)}getModelName(){return"oidc-provider"}async findAllByDatacenter(){const e=await super.findAllByDatacenter(...arguments) +if(0===e.length){const e=new Error("Not found") +return e.statusCode=404,void this.store.adapterFor(this.getModelName()).error(e)}return e}async findBySlug(e){const t=await this.settings.findBySlug("token")||{} +return super.findBySlug({ns:e.ns||t.Namespace||"default",partition:e.partition||t.Partition||"default",dc:e.dc,id:e.id})}authorize(e){return this.store.authorize(this.getModelName(),e)}logout(e,t,n,l,r){const i={id:e} +return this.store.logout(this.getModelName(),i)}close(){this.manager.close(b)}findCodeByURL(e){return(0,r.set)(this.provider,"baseUrl",e),this.manager.open(b,{}).catch((e=>{let t +if(!0===e.message.startsWith("remote was closed"))t=new Error("Remote was closed"),t.statusCode=499 +else t=new Error(e.message),t.statusCode=500 +this.store.adapterFor(this.getModelName()).error(t)}))}},p=h(d.prototype,"manager",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f=h(d.prototype,"settings",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h(d.prototype,"findAllByDatacenter",[u],Object.getOwnPropertyDescriptor(d.prototype,"findAllByDatacenter"),d.prototype),h(d.prototype,"findBySlug",[s],Object.getOwnPropertyDescriptor(d.prototype,"findBySlug"),d.prototype),h(d.prototype,"authorize",[c],Object.getOwnPropertyDescriptor(d.prototype,"authorize"),d.prototype),d) +e.default=y})),define("consul-ui/services/repository/partition",["exports","@ember/service","@ember/debug","consul-ui/services/repository","consul-ui/models/partition","consul-ui/decorators/data-source","consul-ui/utils/form/builder"],(function(e,t,n,l,r,i,o){var a,u,s,c,d,p,f,m,h +function b(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function y(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let v=(a=(0,t.inject)("settings"),u=(0,t.inject)("form"),s=(0,t.inject)("repository/permission"),c=(0,i.default)("/:partition/:ns/:dc/partitions"),d=(0,i.default)("/:partition/:ns/:dc/partition/:id"),p=class extends l.default{constructor(){super(...arguments),b(this,"settings",f,this),b(this,"form",m,this),b(this,"permissions",h,this)}getModelName(){return"partition"}getPrimaryKey(){return r.PRIMARY_KEY}getSlugKey(){return r.SLUG_KEY}async findAll(){return this.permissions.can("use partitions")?super.findAll(...arguments).catch((()=>[])):[]}async findBySlug(e){let t +return t=""===e.id?await this.create({Datacenter:e.dc,Partition:""}):await super.findBySlug(...arguments),(0,o.defaultChangeset)(t)}remove(e){return(0,l.softDelete)(this,e)}async getActive(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"" +const t=this.store.peekAll("partition").toArray() +if(0===e.length){e=(await this.settings.findBySlug("token")).Partition||"default"}return 1===t.length?t[0]:function(e,t){let l=e.find((function(e){return e.Name===t.Name})) +return void 0===l&&((0,n.runInDebug)((n=>console.info(`${t.Name} not found in [${e.map((e=>e.Name)).join(", ")}]`))),l=e.find((function(e){return"default"===e.Name})),void 0===l&&(l=e[0])),l}(t,{Name:e})}},f=y(p.prototype,"settings",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m=y(p.prototype,"form",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=y(p.prototype,"permissions",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),y(p.prototype,"findAll",[c],Object.getOwnPropertyDescriptor(p.prototype,"findAll"),p.prototype),y(p.prototype,"findBySlug",[d],Object.getOwnPropertyDescriptor(p.prototype,"findBySlug"),p.prototype),p) +e.default=v})),define("consul-ui/services/repository/peer",["exports","consul-ui/services/repository","consul-ui/decorators/data-source","@ember/service"],(function(e,t,n,l){var r,i,o,a,u,s,c,d +function p(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}function f(e,t){var n=Object.keys(e) +if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) +t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function m(e){for(var t=1;t{const r=this.store.serializerFor("service") +return this.store.push(r.createJSONApiDocumentFromServicesPayload(e,t,l))}))}async fetchToken(e,t,n){let{dc:l,ns:r,partition:i,name:o,externalAddresses:a}=e +const u=(null==a?void 0:a.length)>0?a.split(","):[] +return(await(n` + POST /v1/peering/token + + ${{PeerName:o,Partition:i||void 0,ServerExternalAddresses:u}} + `))(((e,t,n)=>t))}async fetchAll(e,t,n){let{dc:l,ns:r,partition:i}=e,{uri:o}=t +return(await(n` + GET /v1/peerings + + ${{partition:i}} + `))(((e,t,n)=>({meta:{version:2,interval:1e4,uri:o},body:t.map((e=>n(b(e,l,i),(t=>t`peer:///${i}/${r}/${l}/peer/${e.Name}`))))})))}async fetchOne(e,t,n){let{partition:l,ns:r,dc:i,name:o}=e,{uri:a}=t +if(void 0===o||""===o){const e=this.create({Datacenter:i,Namespace:"",Partition:l}) +return e.meta={cacheControl:"no-store"},e}return(await(n` + GET /v1/peering/${o} + + ${{partition:l}} + `))(((e,t,n)=>{const{StreamStatus:o}=t +return o&&(o.LastHeartbeat&&(o.LastHeartbeat=new Date(o.LastHeartbeat)),o.LastReceive&&(o.LastReceive=new Date(o.LastReceive)),o.LastSend&&(o.LastSend=new Date(o.LastSend))),{meta:{version:2,interval:1e4,uri:a},body:n(b(t,i,l),(e=>e`peer:///${l}/${r}/${i}/peer/${t.Name}`))}}))}async persist(e,t){return(await(t` + POST /v1/peering/establish + + ${{PeerName:e.Name,PeeringToken:e.PeeringToken,Partition:e.Partition||void 0}} + `))(((t,n,l)=>{const r=e.Partition,i=e.Namespace,o=e.Datacenter +return{meta:{version:2},body:l(m(m({},e),{},{State:"ESTABLISHING"}),(t=>t`peer:///${r}/${i}/${o}/peer/${e.Name}`))}}))}async remove(e,t){return(await(t` + DELETE /v1/peering/${e.Name} + `))(((t,n,l)=>{const r=e.Partition,i=e.Namespace,o=e.Datacenter +return{meta:{version:2},body:l(m(m({},e),{},{State:"DELETING"}),(t=>t`peer:///${r}/${i}/${o}/peer/${e.Name}`))}}))}},d=p(c.prototype,"store",[l.inject],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p(c.prototype,"fetchExportedServices",[r],Object.getOwnPropertyDescriptor(c.prototype,"fetchExportedServices"),c.prototype),p(c.prototype,"fetchToken",[i],Object.getOwnPropertyDescriptor(c.prototype,"fetchToken"),c.prototype),p(c.prototype,"fetchAll",[o],Object.getOwnPropertyDescriptor(c.prototype,"fetchAll"),c.prototype),p(c.prototype,"fetchOne",[a,u,s],Object.getOwnPropertyDescriptor(c.prototype,"fetchOne"),c.prototype),c) +e.default=y})),define("consul-ui/services/repository/permission",["exports","consul-ui/services/repository","@ember/service","@glimmer/tracking","@ember/debug","consul-ui/decorators/data-source"],(function(e,t,n,l,r,i){var o,a,u,s,c,d,p +function f(e,t){var n=Object.keys(e) +if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) +t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function m(e){for(var t=1;tt.every((t=>n[t]===e[t]))&&!0===n.Allow))}can(e){return this._can.can(e)}abilityFor(e){return this._can.abilityFor(e)}generate(e,t,n){const l={Resource:e,Access:t} +return void 0!==n&&(l.Segment=n),l}async authorize(e){if(this.env.var("CONSUL_ACLS_ENABLED")){let n=[] +try{n=await this.store.authorize("permission",e)}catch(t){(0,r.runInDebug)((()=>console.error(t)))}return n}return e.resources.map((e=>m(m({},e),{},{Allow:!0})))}async findBySlug(e,t){let n +try{n=this._can.abilityFor(t)}catch(r){return[]}const l=n.generateForSegment(e.id.toString()) +return 0===l.length?[]:(e.resources=l,this.authorize(e))}async findByPermissions(e){return this.authorize(e)}async findAll(e){return e.resources=this.permissionsToRequest,this.permissions=await this.findByPermissions(e),this.permissions.forEach((e=>{["key","node","service","intention","session"].includes(e.Resource)&&(e.Allow=!0)})),this.permissions}get permissionsToRequest(){return this._can.can("use peers")?[...v,...g]:v}},c=y(s.prototype,"env",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),d=y(s.prototype,"_can",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p=y(s.prototype,"permissions",[l.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return[]}}),y(s.prototype,"findAll",[u],Object.getOwnPropertyDescriptor(s.prototype,"findAll"),s.prototype),s) +e.default=O})),define("consul-ui/services/repository/policy",["exports","consul-ui/services/repository","@ember/object","@ember/service","consul-ui/models/policy","consul-ui/decorators/data-source"],(function(e,t,n,l,r,i){var o,a,u,s,c +function d(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let p=(o=(0,l.inject)("form"),a=(0,i.default)("/:partition/:ns/:dc/policies"),u=(0,i.default)("/:partition/:ns/:dc/policy/:id"),s=class extends t.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="form",l=this,(n=c)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}getModelName(){return"policy"}getPrimaryKey(){return r.PRIMARY_KEY}getSlugKey(){return r.SLUG_KEY}async findAllByDatacenter(){return super.findAllByDatacenter(...arguments)}async findBySlug(e){let t +return t=""===e.id?await this.create({Datacenter:e.dc,Partition:e.partition,Namespace:e.ns}):await super.findBySlug(...arguments),this.form.form(this.getModelName()).setData(t).getData()}persist(e){return""===(0,n.get)(e,"template")?e.save():Promise.resolve(e)}translate(e){return this.store.translate("policy",(0,n.get)(e,"Rules"))}},c=d(s.prototype,"form",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),d(s.prototype,"findAllByDatacenter",[a],Object.getOwnPropertyDescriptor(s.prototype,"findAllByDatacenter"),s.prototype),d(s.prototype,"findBySlug",[u],Object.getOwnPropertyDescriptor(s.prototype,"findBySlug"),s.prototype),s) +e.default=p})),define("consul-ui/services/repository/proxy",["exports","consul-ui/services/repository","consul-ui/models/proxy","@ember/object","consul-ui/decorators/data-source"],(function(e,t,n,l,r){var i,o,a +function u(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let s=(i=(0,r.default)("/:partition/:ns/:dc/proxies/for-service/:id"),o=(0,r.default)("/:partition/:ns/:dc/proxy-instance/:serviceId/:node/:id"),a=class extends t.default{getModelName(){return"proxy"}getPrimaryKey(){return n.PRIMARY_KEY}findAllBySlug(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} +return void 0!==t.cursor&&(e.index=t.cursor,e.uri=t.uri),this.store.query(this.getModelName(),e).then((e=>(e.forEach((e=>{const t=JSON.parse(e.uid) +t.pop(),t.push(e.ServiceProxy.DestinationServiceID) +const n=this.store.peekRecord("service-instance",JSON.stringify(t)) +n&&(0,l.set)(n,"ProxyInstance",e)})),e)))}async findInstanceBySlug(e,t){const n=await this.findAllBySlug(e,t) +let r={} +if((0,l.get)(n,"length")>0){let t=n.filterBy("ServiceProxy.DestinationServiceID",e.serviceId).findBy("NodeName",e.node) +t?r=t:(t=n.findBy("ServiceProxy.DestinationServiceName",e.id),t&&(r=t))}return(0,l.set)(r,"meta",(0,l.get)(n,"meta")),r}},u(a.prototype,"findAllBySlug",[i],Object.getOwnPropertyDescriptor(a.prototype,"findAllBySlug"),a.prototype),u(a.prototype,"findInstanceBySlug",[o],Object.getOwnPropertyDescriptor(a.prototype,"findInstanceBySlug"),a.prototype),a) +e.default=s})),define("consul-ui/services/repository/role",["exports","consul-ui/services/repository","@ember/service","consul-ui/models/role","consul-ui/decorators/data-source"],(function(e,t,n,l,r){var i,o,a,u,s +function c(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let d=(i=(0,n.inject)("form"),o=(0,r.default)("/:partition/:ns/:dc/roles"),a=(0,r.default)("/:partition/:ns/:dc/role/:id"),u=class extends t.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="form",l=this,(n=s)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}getModelName(){return"role"}getPrimaryKey(){return l.PRIMARY_KEY}getSlugKey(){return l.SLUG_KEY}async findAll(){return super.findAll(...arguments)}async findBySlug(e){let t +return t=""===e.id?await this.create({Datacenter:e.dc,Partition:e.partition,Namespace:e.ns}):await super.findBySlug(...arguments),this.form.form(this.getModelName()).setData(t).getData()}},s=c(u.prototype,"form",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),c(u.prototype,"findAll",[o],Object.getOwnPropertyDescriptor(u.prototype,"findAll"),u.prototype),c(u.prototype,"findBySlug",[a],Object.getOwnPropertyDescriptor(u.prototype,"findBySlug"),u.prototype),u) +e.default=d})),define("consul-ui/services/repository/service-instance",["exports","consul-ui/services/repository","@ember/object","consul-ui/abilities/base","consul-ui/decorators/data-source"],(function(e,t,n,l,r){var i,o,a +function u(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let s=(i=(0,r.default)("/:partition/:ns/:dc/service-instances/for-service/:id/:peer"),o=(0,r.default)("/:partition/:ns/:dc/service-instance/:serviceId/:node/:id/:peer"),a=class extends t.default{getModelName(){return"service-instance"}shouldReconcile(e,t){return super.shouldReconcile(...arguments)&&e.Service.Service===t.id}async findByService(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} +return void 0!==t.cursor&&(e.index=t.cursor,e.uri=t.uri),this.authorizeBySlug((async t=>{const l=await this.query(e) +return(0,n.set)(l,"firstObject.Service.Resources",t),l}),l.ACCESS_READ,e)}async findBySlug(e){return super.findBySlug(...arguments)}},u(a.prototype,"findByService",[i],Object.getOwnPropertyDescriptor(a.prototype,"findByService"),a.prototype),u(a.prototype,"findBySlug",[o],Object.getOwnPropertyDescriptor(a.prototype,"findBySlug"),a.prototype),a) +e.default=s})),define("consul-ui/services/repository/service",["exports","consul-ui/services/repository","consul-ui/decorators/data-source","@ember/service"],(function(e,t,n,l){var r,i,o,a,u +function s(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let c=(r=(0,n.default)("/:partition/:ns/:dc/services"),i=(0,n.default)("/:partition/:ns/:dc/services/:peer/:peerId"),o=(0,n.default)("/:partition/:ns/:dc/gateways/for-service/:gateway"),a=class extends t.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="store",l=this,(n=u)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}getModelName(){return"service"}async findAllByDatacenter(){return super.findAll(...arguments)}async findAllImportedServices(e,t){const{peerId:n}=e +return delete e.peerId,super.findAll(e,t).then((e=>{const t=this.store.peekRecord("peer",n) +return e.forEach((e=>e.peer=t)),e}))}findGatewayBySlug(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} +return void 0!==t.cursor&&(e.index=t.cursor,e.uri=t.uri),this.store.query(this.getModelName(),e)}},u=s(a.prototype,"store",[l.inject],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),s(a.prototype,"findAllByDatacenter",[r],Object.getOwnPropertyDescriptor(a.prototype,"findAllByDatacenter"),a.prototype),s(a.prototype,"findAllImportedServices",[i],Object.getOwnPropertyDescriptor(a.prototype,"findAllImportedServices"),a.prototype),s(a.prototype,"findGatewayBySlug",[o],Object.getOwnPropertyDescriptor(a.prototype,"findGatewayBySlug"),a.prototype),a) +e.default=c})),define("consul-ui/services/repository/session",["exports","@ember/service","consul-ui/services/repository","consul-ui/decorators/data-source"],(function(e,t,n,l){var r,i,o,a,u +function s(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let c=(r=(0,t.inject)("store"),i=(0,l.default)("/:partition/:ns/:dc/sessions/for-node/:id"),o=(0,l.default)("/:partition/:ns/:dc/sessions/for-key/:id"),a=class extends n.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="store",l=this,(n=u)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}getModelName(){return"session"}findByNode(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} +return void 0!==t.cursor&&(e.index=t.cursor,e.uri=t.uri),this.store.query(this.getModelName(),e)}findByKey(e){return this.findBySlug(...arguments)}},u=s(a.prototype,"store",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),s(a.prototype,"findByNode",[i],Object.getOwnPropertyDescriptor(a.prototype,"findByNode"),a.prototype),s(a.prototype,"findByKey",[o],Object.getOwnPropertyDescriptor(a.prototype,"findByKey"),a.prototype),a) +e.default=c})),define("consul-ui/services/repository/token",["exports","consul-ui/services/repository","@ember/object","@ember/service","consul-ui/models/token","consul-ui/decorators/data-source"],(function(e,t,n,l,r,i){var o,a,u,s,c,d,p,f +function m(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let h=(o=(0,l.inject)("form"),a=(0,i.default)("/:partition/:ns/:dc/tokens"),u=(0,i.default)("/:partition/:ns/:dc/token/:id"),s=(0,i.default)("/:partition/:ns/:dc/token/self/:secret"),c=(0,i.default)("/:partition/:ns/:dc/tokens/for-policy/:policy"),d=(0,i.default)("/:partition/:ns/:dc/tokens/for-role/:role"),p=class extends t.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="form",l=this,(n=f)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}getModelName(){return"token"}getPrimaryKey(){return r.PRIMARY_KEY}getSlugKey(){return r.SLUG_KEY}async findAll(){return super.findAll(...arguments)}async findBySlug(e){let t +return t=""===e.id?await this.create({Datacenter:e.dc,Partition:e.partition,Namespace:e.ns}):await super.findBySlug(...arguments),this.form.form(this.getModelName()).setData(t).getData()}self(e){return this.store.self(this.getModelName(),{secret:e.secret,dc:e.dc}).catch((e=>Promise.reject(e)))}clone(e){return this.store.clone(this.getModelName(),(0,n.get)(e,r.PRIMARY_KEY))}findByPolicy(e){return this.findAll(...arguments)}findByRole(){return this.findAll(...arguments)}},f=m(p.prototype,"form",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m(p.prototype,"findAll",[a],Object.getOwnPropertyDescriptor(p.prototype,"findAll"),p.prototype),m(p.prototype,"findBySlug",[u],Object.getOwnPropertyDescriptor(p.prototype,"findBySlug"),p.prototype),m(p.prototype,"self",[s],Object.getOwnPropertyDescriptor(p.prototype,"self"),p.prototype),m(p.prototype,"findByPolicy",[c],Object.getOwnPropertyDescriptor(p.prototype,"findByPolicy"),p.prototype),m(p.prototype,"findByRole",[d],Object.getOwnPropertyDescriptor(p.prototype,"findByRole"),p.prototype),p) +e.default=h})),define("consul-ui/services/repository/topology",["exports","@ember/service","consul-ui/services/repository","@ember/object","consul-ui/decorators/data-source"],(function(e,t,n,l,r){var i,o,a,u +function s(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let c=(i=(0,t.inject)("repository/dc"),o=(0,r.default)("/:partition/:ns/:dc/topology/:id/:kind"),a=class extends n.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="dcs",l=this,(n=u)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}getModelName(){return"topology"}findBySlug(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} +const n=this.dcs.peekOne(e.dc) +return null===n||(0,l.get)(n,"MeshEnabled")?(void 0!==t.cursor&&(e.index=t.cursor,e.uri=t.uri),this.store.queryRecord(this.getModelName(),e).catch((e=>{const t=(0,l.get)(e,"errors.firstObject.status"),r=((0,l.get)(e,"errors.firstObject.detail")||"").trim() +if("500"!==t)throw e +null!==n&&r.endsWith("Connect must be enabled in order to use this endpoint")&&(0,l.set)(n,"MeshEnabled",!1)}))):Promise.resolve()}},u=s(a.prototype,"dcs",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),s(a.prototype,"findBySlug",[o],Object.getOwnPropertyDescriptor(a.prototype,"findBySlug"),a.prototype),a) +e.default=c})),define("consul-ui/services/resize-observer",["exports","ember-resize-observer-service/services/resize-observer"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/services/routlet",["exports","@ember/service","@ember/runloop","@ember/object","consul-ui/utils/routing/wildcard","consul-ui/router"],(function(e,t,n,l,r,i){var o,a,u,s,c,d,p,f,m +function h(e,t){var n=Object.keys(e) +if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) +t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function b(e){for(var t=1;t{if("application"===e)return 1 +if("application"===t)return-1 +const n=e.split(".").length,l=t.split(".").length +switch(!0){case n>l:return-1 +case n0&&!t.every((e=>this.permissions.can(e))))}transition(){let e +return this._transition=new Promise((t=>{e=t})),e}findOutlet(e){return[...P.keys()].find((t=>-1!==e.indexOf(t)))}outletFor(e){const t=[...P.keys()],n=t.indexOf(e)+1 +return P.get(t[n])}normalizeParamsFor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} +return O(e)?Object.keys(t).reduce((function(e,n){return void 0!==t[n]?e[n]=decodeURIComponent(t[n]):e[n]=t[n],e}),{}):t}paramsFor(e){let t={} +const n=P.get(e) +void 0!==n&&void 0!==n.args.params&&(t=n.args.params) +let l=this.router.currentRoute +null===l&&(l=this.container.lookup("route:application")) +let r,i=l,o=this.normalizeParamsFor(e,i.params) +for(;r=i.parent;)o=b(b({},this.normalizeParamsFor(r.name,r.params)),o),i=r +return b(b(b({},this.container.get(`location:${this.env.var("locationType")}`).optionalParams()),o),t)}modelFor(e){const t=P.get(e) +if(void 0!==t)return t.model}addRoute(e,t){const l=this.outletFor(e) +void 0!==l&&(l.route=t,(0,n.schedule)("afterRender",(()=>{l.routeName=e})))}removeRoute(e,t){const l=this.outletFor(e) +t._model=void 0,void 0!==l&&(0,n.schedule)("afterRender",(()=>{l.route=void 0}))}addOutlet(e,t){P.set(e,t)}removeOutlet(e){(0,n.schedule)("afterRender",(()=>{P.delete(e)}))}},d=g(c.prototype,"container",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p=g(c.prototype,"env",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f=g(c.prototype,"router",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m=g(c.prototype,"permissions",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),c) +e.default=w})),define("consul-ui/services/schema",["exports","@ember/service","consul-ui/models/intention-permission","consul-ui/models/intention-permission-http","consul-ui/models/intention-permission-http-header"],(function(e,t,n,l,r){function i(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class o extends t.default{constructor(){super(...arguments),i(this,"intention-permission",n.schema),i(this,"intention-permission-http",l.schema),i(this,"intention-permission-http-header",r.schema)}}e.default=o})),define("consul-ui/services/search",["exports","@ember/service","consul-ui/utils/search/exact","consul-ui/search/predicates/intention","consul-ui/search/predicates/upstream-instance","consul-ui/search/predicates/service-instance","consul-ui/search/predicates/health-check","consul-ui/search/predicates/acl","consul-ui/search/predicates/service","consul-ui/search/predicates/node","consul-ui/search/predicates/kv","consul-ui/search/predicates/token","consul-ui/search/predicates/role","consul-ui/search/predicates/policy","consul-ui/search/predicates/auth-method","consul-ui/search/predicates/nspace","consul-ui/search/predicates/peer"],(function(e,t,n,l,r,i,o,a,u,s,c,d,p,f,m,h,b){function y(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const v={intention:l.default,service:u.default,"service-instance":i.default,"upstream-instance":r.default,"health-check":o.default,"auth-method":m.default,node:s.default,kv:c.default,acl:a.default,token:d.default,role:p.default,policy:f.default,nspace:h.default,peer:b.default} +class g extends t.default{constructor(){super(...arguments),y(this,"searchables",{exact:n.default})}predicate(e){return v[e]}}e.default=g})),define("consul-ui/services/settings",["exports","@ember/service","consul-ui/utils/storage/local-storage"],(function(e,t,n){function l(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.ifNotBlocking=e.default=void 0 +const r=(0,n.default)("consul") +e.ifNotBlocking=function(e){return e.findBySlug("client").then((function(e){return void 0!==e.blocking&&!e.blocking}))} +class i extends t.default{constructor(){super(...arguments),l(this,"storage",r)}findAll(e){return Promise.resolve(this.storage.all())}findBySlug(e){return Promise.resolve(this.storage.getValue(e))}persist(e){const t=this.storage +return Object.keys(e).forEach(((n,l)=>{t.setValue(n,e[n])})),Promise.resolve(e)}delete(e){Array.isArray(e)||(e=[e]) +const t=this.storage,n=e.reduce((function(e,n,l,r){return t.removeValue(n),e}),{}) +return Promise.resolve(n)}}e.default=i})),define("consul-ui/services/sort",["exports","@ember/service","consul-ui/sort/comparators/service","consul-ui/sort/comparators/service-instance","consul-ui/sort/comparators/upstream-instance","consul-ui/sort/comparators/kv","consul-ui/sort/comparators/health-check","consul-ui/sort/comparators/intention","consul-ui/sort/comparators/token","consul-ui/sort/comparators/role","consul-ui/sort/comparators/policy","consul-ui/sort/comparators/auth-method","consul-ui/sort/comparators/nspace","consul-ui/sort/comparators/peer","consul-ui/sort/comparators/node"],(function(e,t,n,l,r,i,o,a,u,s,c,d,p,f,m){Object.defineProperty(e,"__esModule",{value:!0}),e.properties=e.default=void 0 +const h=e=>e.reduce(((e,t)=>e.concat([`${t}:asc`,`${t}:desc`])),[]),b=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[] +return t=>{const n=h(e) +return[n.find((e=>e===t))||n[0]]}} +e.properties=b +const y={properties:b,directionify:h},v={service:(0,n.default)(y),"service-instance":(0,l.default)(y),"upstream-instance":(0,r.default)(y),"health-check":(0,o.default)(y),"auth-method":(0,d.default)(y),kv:(0,i.default)(y),intention:(0,a.default)(y),token:(0,u.default)(y),role:(0,s.default)(y),policy:(0,c.default)(y),nspace:(0,p.default)(y),peer:(0,f.default)(y),node:(0,m.default)(y)} +class g extends t.default{comparator(e){return v[e]}}e.default=g})),define("consul-ui/services/state-with-charts",["exports","consul-ui/services/state","consul-ui/machines/validate.xstate","consul-ui/machines/boolean.xstate"],(function(e,t,n,l){function r(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class i extends t.default{constructor(){super(...arguments),r(this,"stateCharts",{validate:n.default,boolean:l.default})}}e.default=i})),define("consul-ui/services/state",["exports","@ember/service","@ember/object","flat","@xstate/fsm"],(function(e,t,n,l,r){var i,o,a +function u(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var n=e[Symbol.toPrimitive] +if(void 0!==n){var l=n.call(e,t||"default") +if("object"!=typeof l)return l +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let s=(i=(0,t.inject)("logger"),o=class extends t.default{constructor(){var e,t,n,l +super(...arguments),u(this,"stateCharts",{}),e=this,t="logger",l=this,(n=a)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}log(e,t){}stateChart(e){return this.stateCharts[e]}addGuards(e,t){return this.guards(e).forEach((function(l){let[r,i]=l;(0,n.set)(e,r,(function(){return!!t.onGuard(i,...arguments)}))})),[e,t]}machine(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} +return(0,r.createMachine)(...this.addGuards(e,t))}prepareChart(e){return void 0!==(e=JSON.parse(JSON.stringify(e))).on&&Object.values(e.states).forEach((function(t){void 0===t.on?t.on=e.on:Object.keys(e.on).forEach((function(n){void 0===t.on[n]&&(t.on[n]=e.on[n])}))})),e}matches(e,t){if(void 0===e)return!1 +return(Array.isArray(t)?t:[t]).some((t=>e.matches(t)))}state(e){return{matches:e}}interpret(e,t){e=this.prepareChart(e) +const n=(0,r.interpret)(this.machine(e,t)) +return n.subscribe((n=>{n.changed&&(this.log(e,n),t.onTransition(n))})),n}guards(e){return Object.entries((0,l.default)(e)).filter((e=>{let[t]=e +return t.endsWith(".cond")}))}},c=o.prototype,d="logger",p=[i],f={configurable:!0,enumerable:!0,writable:!0,initializer:null},h={},Object.keys(f).forEach((function(e){h[e]=f[e]})),h.enumerable=!!h.enumerable,h.configurable=!!h.configurable,("value"in h||h.initializer)&&(h.writable=!0),h=p.slice().reverse().reduce((function(e,t){return t(c,d,e)||e}),h),m&&void 0!==h.initializer&&(h.value=h.initializer?h.initializer.call(m):void 0,h.initializer=void 0),void 0===h.initializer&&(Object.defineProperty(c,d,h),h=null),a=h,o) +var c,d,p,f,m,h +e.default=s})),define("consul-ui/services/store",["exports","@ember/service","@ember-data/store"],(function(e,t,n){var l,r,i,o,a +function u(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function s(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let c=(l=(0,t.inject)("data-source/service"),r=(0,t.inject)("client/http"),i=class extends n.default{constructor(){super(...arguments),u(this,"dataSource",o,this),u(this,"client",a,this)}invalidate(){this.client.abort(401),this.dataSource.resetCache(),this.init()}clear(){this.invalidate(0)}clone(e,t){return this.adapterFor(e).clone(this,{modelName:e},t,this._internalModelForId(e,t).createSnapshot({}))}self(e,t){const n=this.adapterFor(e),l=this.serializerFor(e),r={modelName:e} +return n.self(this,r,t.secret,t).then((e=>l.normalizeResponse(this,r,e,t,"self")))}queryLeader(e,t){const n=this.adapterFor(e),l=this.serializerFor(e),r={modelName:e} +return n.queryLeader(this,r,null,t).then((e=>(e.meta=l.normalizeMeta(this,r,e,null,"leader"),e)))}authorize(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} +const n=this.adapterFor(e),l=this.serializerFor(e),r={modelName:e} +return n.authorize(this,r,null,t).then((e=>l.normalizeResponse(this,r,e,void 0,"authorize")))}logout(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} +const n={modelName:e} +return this.adapterFor(e).logout(this,n,t.id,t)}},o=s(i.prototype,"dataSource",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),a=s(i.prototype,"client",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),i) +e.default=c})),define("consul-ui/services/temporal",["exports","pretty-ms","parse-duration","@ember/debug","dayjs","dayjs/plugin/relativeTime","@ember/service"],(function(e,t,n,l,r,i,o){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,r.default.extend(i.default) +class a extends o.default{format(e,t){const n=(0,r.default)(e) +return(0,r.default)().isBefore(n)?(0,r.default)().to(n,!0):(0,r.default)().from(n,!0)}within(e,t){let[n,l]=e +return(0,r.default)(n).isBefore((0,r.default)().add(l,"ms"))}parse(e,t){return(0,n.default)(e)}durationFrom(e){return!0==("number"==typeof e)?0===e?"0":(0,t.default)(e/1e6,{formatSubMilliseconds:!0}).split(" ").join(""):e}}e.default=a})),define("consul-ui/services/text-measurer",["exports","ember-text-measurer/services/text-measurer"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/services/ticker",["exports","@ember/service","consul-ui/utils/ticker"],(function(e,t,n){let l +Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class r extends t.default{init(){super.init(...arguments),this.reset()}tweenTo(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",r=arguments.length>2?arguments[2]:void 0,i=arguments.length>3?arguments[3]:void 0 +const o=t +return l.has(o)?(t=l.get(o),t instanceof n.Tween&&(t=t.stop().getTarget()),l.set(o,n.Tween.to(t,e,r,i)),t):(l.set(o,e),e)}destroy(e){return this.reset(),n.Tween.destroy()}reset(){l=new Map}}e.default=r})),define("consul-ui/services/timeout",["exports","@ember/service","consul-ui/utils/promisedTimeout","@ember/runloop"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const r=(0,n.default)(Promise) +class i extends t.default{execute(e,t){return r(e,t)}tick(){return new Promise((function(e,t){(0,l.next)(e)}))}}e.default=i})),define("consul-ui/services/torii-session",["exports","torii/services/torii-session"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/services/torii",["exports","torii/services/torii"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/services/ui-config",["exports","@ember/service","@ember/object","consul-ui/decorators/data-source"],(function(e,t,n,l){var r,i,o,a,u,s +function c(e,t,n,l,r){var i={} +return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +let d=(r=(0,t.inject)("env"),i=(0,l.default)("/:partition/:nspace/:dc/ui-config/:path"),o=(0,l.default)("/:partition/:nspace/:dc/notfound/:path"),a=(0,l.default)("/:partition/:nspace/:dc/ui-config"),u=class extends t.default{constructor(){var e,t,n,l +super(...arguments),e=this,t="env",l=this,(n=s)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}async findByPath(e){return(0,n.get)(this.get(),e.path)}async parsePath(e){return e.path.split("/").reduce(((e,t,n)=>{switch(!0){case t.startsWith("~"):e.nspace=t.substr(1) +break +case t.startsWith("_"):e.partition=t.substr(1) +break +case void 0===e.dc:e.dc=t}return e}),{})}async get(){return this.env.var("CONSUL_UI_CONFIG")}getSync(){return this.env.var("CONSUL_UI_CONFIG")}},s=c(u.prototype,"env",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),c(u.prototype,"findByPath",[i],Object.getOwnPropertyDescriptor(u.prototype,"findByPath"),u.prototype),c(u.prototype,"parsePath",[o],Object.getOwnPropertyDescriptor(u.prototype,"parsePath"),u.prototype),c(u.prototype,"get",[a],Object.getOwnPropertyDescriptor(u.prototype,"get"),u.prototype),u) +e.default=d})),define("consul-ui/sort/comparators/auth-method",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default=e=>{let{properties:t}=e +return function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"MethodName:asc" +return t(["MethodName","TokenTTL"])(e)}}})) +define("consul-ui/sort/comparators/health-check",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default=e=>{let{properties:t}=e +return function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"Status:asc" +return e.startsWith("Status:")?function(t,n){const[,l]=e.split(":") +let r,i +"asc"===l?(r=t,i=n):(i=t,r=n) +const o=r.Status,a=i.Status +switch(o){case"passing":return"passing"===a?0:1 +case"critical":return"critical"===a?0:-1 +case"warning":switch(a){case"passing":return-1 +case"critical":return 1 +default:return 0}}return 0}:t(["Name","Kind"])(e)}}})),define("consul-ui/sort/comparators/intention",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default=()=>e=>[e]})),define("consul-ui/sort/comparators/kv",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default=e=>{let{properties:t}=e +return e=>t(["Key","Kind"])(e)}})),define("consul-ui/sort/comparators/node",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default=e=>{let{properties:t}=e +return function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"Name:asc" +return e.startsWith("Status:")?function(t,n){const[,l]=e.split(":") +let r,i +switch("asc"===l?(i=t,r=n):(r=t,i=n),!0){case r.ChecksCritical>i.ChecksCritical:return 1 +case r.ChecksCriticali.ChecksWarning:return 1 +case r.ChecksWarningi.ChecksPassing:return-1}}return 0}}:e.startsWith("Version:")?function(t,n){const[,l]=e.split(":") +let r,i +"asc"===l?(r=t,i=n):(i=t,r=n) +const o=r.Version.split(".").map((e=>{const t=Number(e) +return isNaN(t)?0:t})),a=i.Version.split(".").map((e=>{const t=Number(e) +return isNaN(t)?0:t})),u=Math.min(o.length,a.length) +for(let e=0;e0:return 1 +case t<0:return-1}}return o.length-a.length}:t(["Node"])(e)}}})),define("consul-ui/sort/comparators/nspace",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default=e=>{let{properties:t}=e +return e=>t(["Name"])(e)}})),define("consul-ui/sort/comparators/partition",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default=e=>{let{properties:t}=e +return e=>t(["Name"])(e)}})),define("consul-ui/sort/comparators/peer",["exports","consul-ui/models/peer"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default=e=>{let{properties:n}=e +return function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"State:asc" +return e.startsWith("State:")?function(n,l){const[,r]=e.split(":") +let i,o +switch("asc"===r?(o=n,i=l):(i=n,o=l),!0){case t.schema.State.allowedValues.indexOf(i.State)t.schema.State.allowedValues.indexOf(o.State):return-1 +case t.schema.State.allowedValues.indexOf(i.State)===t.schema.State.allowedValues.indexOf(o.State):return 0}}:n(["Name"])(e)}}})),define("consul-ui/sort/comparators/policy",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default=e=>{let{properties:t}=e +return function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"Name:asc" +return t(["Name"])(e)}}})),define("consul-ui/sort/comparators/role",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default=e=>{let{properties:t}=e +return function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"Name:asc" +return t(["Name","CreateIndex"])(e)}}})),define("consul-ui/sort/comparators/service-instance",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default=e=>{let{properties:t}=e +return e=>{if(e.startsWith("Status:")){const[,t]=e.split(":"),n=["PercentageChecksPassing","PercentageChecksWarning","PercentageChecksCritical"] +return"asc"===t&&n.reverse(),function(e,t){for(let l in n){let r=n[l] +if(e[r]!==t[r])return e[r]>t[r]?-1:1}}}return t(["Name"])(e)}}})),define("consul-ui/sort/comparators/service",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default=e=>{let{properties:t}=e +return function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"Status:asc" +return e.startsWith("Status:")?function(t,n){const[,l]=e.split(":") +let r,i +switch("asc"===l?(i=t,r=n):(r=t,i=n),!0){case r.MeshChecksCritical>i.MeshChecksCritical:return 1 +case r.MeshChecksCriticali.MeshChecksWarning:return 1 +case r.MeshChecksWarningi.MeshChecksPassing:return-1}}return 0}}:t(["Name"])(e)}}})),define("consul-ui/sort/comparators/token",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default=e=>{let{properties:t}=e +return e=>t(["CreateTime"])(e)}})),define("consul-ui/sort/comparators/upstream-instance",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default=e=>{let{properties:t}=e +return function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"DestinationName:asc" +return t(["DestinationName"])(e)}}})),define("consul-ui/storages/base",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default=class{constructor(e,t){this.key=e,this.storage=t,this.state=this.initState(this.key,this.storage)}initState(){const{key:e,storage:t}=this +return t.getItem(e)}}})),define("consul-ui/storages/notices",["exports","tracked-built-ins","consul-ui/storages/base"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class l extends n.default{initState(){const{key:e,storage:n}=this,l=n.getItem(e) +return l?new t.TrackedArray(l.split(",")):new t.TrackedArray}add(e){const{key:t,storage:n,state:l}=this +l.push(e),n.setItem(t,[...l])}}e.default=l})),define("consul-ui/styles/base/decoration/visually-hidden.css",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default=e=>e` + @keyframes visually-hidden { + 100% { + position: absolute; + overflow: hidden; + clip: rect(0 0 0 0); + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + border: 0; + } + } + `})),define("consul-ui/styles/base/icons/base-keyframes.css",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default=e=>e` + *::before, + *::after { + display: inline-block; + animation-play-state: paused; + animation-fill-mode: forwards; + animation-iteration-count: var(--icon-resolution, 1); + vertical-align: text-top; + } + *::before { + animation-name: var(--icon-name-start, var(--icon-name)), + var(--icon-size-start, var(--icon-size, icon-000)); + background-color: var(--icon-color-start, var(--icon-color)); + } + *::after { + animation-name: var(--icon-name-end, var(--icon-name)), + var(--icon-size-end, var(--icon-size, icon-000)); + background-color: var(--icon-color-end, var(--icon-color)); + } + + [style*='--icon-color-start']::before { + color: var(--icon-color-start); + } + [style*='--icon-color-end']::after { + color: var(--icon-color-end); + } + [style*='--icon-name-start']::before, + [style*='--icon-name-end']::after { + content: ''; + } + + @keyframes icon-000 { + 100% { + width: 1.2em; + height: 1.2em; + } + } + @keyframes icon-100 { + 100% { + width: 0.625rem; /* 10px */ + height: 0.625rem; /* 10px */ + } + } + @keyframes icon-200 { + 100% { + width: 0.75rem; /* 12px */ + height: 0.75rem; /* 12px */ + } + } + @keyframes icon-300 { + 100% { + width: 1rem; /* 16px */ + height: 1rem; /* 16px */ + } + } + @keyframes icon-400 { + 100% { + width: 1.125rem; /* 18px */ + height: 1.125rem; /* 18px */ + } + } + @keyframes icon-500 { + 100% { + width: 1.25rem; /* 20px */ + height: 1.25rem; /* 20px */ + } + } + @keyframes icon-600 { + 100% { + width: 1.375rem; /* 22px */ + height: 1.375rem; /* 22px */ + } + } + @keyframes icon-700 { + 100% { + width: 1.5rem; /* 24px */ + height: 1.5rem; /* 24px */ + } + } + @keyframes icon-800 { + 100% { + width: 1.625rem; /* 26px */ + height: 1.625rem; /* 26px */ + } + } + @keyframes icon-900 { + 100% { + width: 1.75rem; /* 28px */ + height: 1.75rem; /* 28px */ + } + } +`})),define("consul-ui/templates/application",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"p3hjSYtO",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n\\n"],[1," "],[8,[30,1,["Announcer"]],null,[["@title"],["Consul"]],null],[1,"\\n"],[41,[28,[37,3],["use acls"],null],[[[1," "],[1,[28,[35,4],null,[["class"],["has-acls"]]]],[1,"\\n"]],[]],null],[41,[28,[37,3],["use nspaces"],null],[[[1," "],[1,[28,[35,4],null,[["class"],["has-nspaces"]]]],[1,"\\n"]],[]],null],[41,[28,[37,3],["use partitions"],null],[[[1," "],[1,[28,[35,4],null,[["class"],["has-partitions"]]]],[1,"\\n"]],[]],null],[1,"\\n"],[1," "],[8,[39,5],null,[["@src","@onchange"],[[28,[37,6],["settings://consul:client"],null],[28,[37,7],["onClientChanged"],null]]],null],[1,"\\n\\n"],[1," "],[8,[39,5],null,[["@src"],[[28,[37,6],["settings://consul:theme"],null]]],[["default"],[[[[1,"\\n"],[42,[28,[37,9],[[30,2,["data"]]],null],null,[[[41,[28,[37,10],[[30,3],[28,[37,11],[[30,4],[28,[37,12],["color-scheme","contrast"],null]],null]],null],[[[1," "],[1,[28,[35,4],null,[["class"],[[28,[37,13],["prefers-",[30,4],"-",[30,3]],null]]]]],[1,"\\n"]],[]],null]],[3,4]],null],[1," "]],[2]]]]],[1,"\\n\\n"],[41,[28,[37,3],["use acls"],null],[[[1," "],[8,[39,5],null,[["@src","@onchange"],[[28,[37,6],["settings://consul:token"],null],[28,[37,14],[[30,0],[28,[37,15],[[33,16]],null]],[["value"],["data"]]]]],null],[1,"\\n"]],[]],null],[1,"\\n"],[41,[28,[37,17],[[30,1,["currentName"]],"oauth-provider-debug"],null],[[[1,"\\n"],[41,[28,[37,18],[[30,1,["currentName"]],"index"],null],[[[1,"\\n"],[1," "],[1,[28,[35,19],[[28,[37,7],["replaceWith","dc.services.index",[28,[37,20],null,[["dc"],[[28,[37,21],["CONSUL_DATACENTER_LOCAL"],null]]]]],null]],null]],[1,"\\n"]],[]],[[[41,[28,[37,18],[[30,1,["currentName"]],"notfound"],null],[[[1," "],[8,[39,5],null,[["@src","@onchange"],[[28,[37,6],["/*/*/*/notfound/${path}",[28,[37,20],null,[["path"],[[30,1,["params","notfound"]]]]]],null],[28,[37,14],[[30,0],[28,[37,15],[[33,22]],null]],[["value"],["data"]]]]],null],[1,"\\n"]],[]],null],[1,"\\n"],[44,[[52,[28,[37,3],["use partitions"],null],[28,[37,24],[[30,1,["params","partition"]],[33,22,["partition"]],[33,16,["Partition"]],""],null],""],[52,[28,[37,3],["use nspaces"],null],[28,[37,24],[[30,1,["params","nspace"]],[33,22,["nspace"]],[33,16,["Namespace"]],""],null],""]],[[[1,"\\n"],[1," "],[8,[39,5],null,[["@src"],[[28,[37,6],["/*/*/*/datacenters"],null]]],[["default"],[[[[1,"\\n"],[44,[[28,[37,24],[[52,[33,25,["dc"]],[28,[37,26],[0,[28,[37,27],["dc",[28,[37,20],null,[["Name"],[[33,22,["dc"]]]]]],null]],null]],[28,[37,26],[0,[28,[37,27],["dc",[28,[37,20],null,[["Name"],[[30,1,["params","dc"]]]]]],null]],null],[28,[37,20],null,[["Name"],[[28,[37,21],["CONSUL_DATACENTER_LOCAL"],null]]]]],null],[30,7,["data"]]],[[[41,[28,[37,10],[[28,[37,28],[[30,8,["Name","length"]],0],null],[30,9]],null],[[[1,"\\n"],[1," "],[8,[39,5],null,[["@src"],[[28,[37,6],["/${partition}/*/${dc}/datacenter-cache/${name}",[28,[37,20],null,[["dc","partition","name"],[[30,8,["Name"]],[30,5],[30,8,["Name"]]]]]],null]]],[["default"],[[[[1,"\\n"],[41,[30,10,["data"]],[[[1," "],[8,[39,29],[[24,1,"wrapper"]],[["@dcs","@dc","@partition","@nspace","@user","@onchange"],[[30,9],[30,10,["data"]],[30,5],[30,6],[28,[37,20],null,[["token"],[[33,16]]]],[28,[37,14],[[30,0],"reauthorize"],null]]],[["default"],[[[[1,"\\n\\n"],[41,[33,30],[[[1," "],[8,[39,31],null,[["@error","@login"],[[99,30,["@error"]],[30,11,["login","open"]]]],null],[1,"\\n"]],[]],[[[1," "],[8,[39,32],null,[["@name","@model"],["application",[28,[37,20],null,[["app","user","dc","dcs"],[[30,11],[28,[37,20],null,[["token"],[[33,16]]]],[30,10,["data"]],[30,9]]]]]],[["default"],[[[[1,"\\n "],[46,[28,[37,34],null,null],null,null,null],[1,"\\n "]],[12]]]]],[1,"\\n\\n"],[1," "],[8,[39,35],[[24,0,"view-loader"]],null,null],[1,"\\n"]],[]]],[1,"\\n "]],[11]]]]],[1,"\\n"]],[]],null],[1," "]],[10]]]]],[1,"\\n"]],[]],null]],[8,9]]],[1," "]],[7]]]]],[1,"\\n"]],[5,6]]]],[]]]],[]],[[[1," "],[8,[39,32],null,[["@name","@model"],["application",[28,[37,20],null,[["user"],[[28,[37,20],null,[["token"],[[33,16]]]]]]]]],[["default"],[[[[1,"\\n "],[46,[28,[37,34],null,null],null,null,null],[1,"\\n "]],[13]]]]],[1,"\\n"]],[]]]],[1]]]]],[1,"\\n"]],["route","source","value","key","partition","nspace","dcs","dc","dcs","dc","consul","o","o"],false,["route","routeName","if","can","document-attrs","data-source","uri","route-action","each","-each-in","and","includes","array","concat","action","mut","token","not-eq","eq","did-insert","hash","env","notfound","let","or","nofound","object-at","cached-model","gt","hashicorp-consul","error","app-error","outlet","component","-outlet","consul/loader"]]',moduleName:"consul-ui/templates/application.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/components/basic-dropdown-content",["exports","ember-basic-dropdown/templates/components/basic-dropdown-content"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/templates/components/basic-dropdown-optional-tag",["exports","ember-basic-dropdown/templates/components/basic-dropdown-optional-tag"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/templates/components/basic-dropdown-trigger",["exports","ember-basic-dropdown/templates/components/basic-dropdown-trigger"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/templates/components/basic-dropdown",["exports","ember-basic-dropdown/templates/components/basic-dropdown"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/templates/dc",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"ex21k2WB",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@name","@model"],[[99,1,["@name"]],[30,1,["model"]]]],[["default"],[[[[1,"\\n "],[46,[28,[37,4],null,null],null,null,null],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","o"],false,["route","routeName","outlet","component","-outlet"]]',moduleName:"consul-ui/templates/dc.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/acls",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"QsSsujkj",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@name","@model"],[[99,1,["@name"]],[30,1,["model"]]]],[["default"],[[[[1,"\\n "],[46,[28,[37,4],null,null],null,null,null],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","o"],false,["route","routeName","outlet","component","-outlet"]]',moduleName:"consul-ui/templates/dc/acls.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/acls/auth-methods/index",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"G0S4rRqt",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/auth-methods",[28,[37,4],null,[["partition","nspace","dc"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,5],null,[["@name"],["error"]],[["default"],[[[[1,"\\n"],[41,[28,[37,7],[[30,2,["error","status"]],"401"],null],[[[1," "],[8,[39,8],null,null,null],[1,"\\n"]],[]],[[[1," "],[8,[39,9],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n"]],[]]],[1," "]],[]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[28,[37,4],null,[["value","change"],[[28,[37,11],[[33,12],"MethodName:asc"],null],[28,[37,13],[[30,0],[28,[37,14],[[33,12]],null]],[["value"],["target.selected"]]]]]],[28,[37,4],null,[["kind","source","searchproperty"],[[28,[37,4],null,[["value","change"],[[52,[33,15],[28,[37,16],[[33,15],","],null],[27]],[28,[37,13],[[30,0],[28,[37,14],[[33,15]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,4],null,[["value","change"],[[52,[33,17],[28,[37,16],[[33,17],","],null],[27]],[28,[37,13],[[30,0],[28,[37,14],[[33,17]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,4],null,[["value","change","default"],[[52,[28,[37,18],[[33,19],[27]],null],[28,[37,16],[[33,19],","],null],[33,20]],[28,[37,13],[[30,0],[28,[37,14],[[33,19]],null]],[["value"],["target.selectedItems"]]],[33,20]]]]]]],[30,2,["data"]]],[[[1,"\\n\\n "],[8,[39,21],null,[["@login"],[[30,1,["model","app","login","open"]]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n "],[8,[30,1,["Title"]],null,[["@title"],["Auth Methods"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["toolbar"]],[["default"],[[[[1,"\\n"],[41,[28,[37,22],[[30,5,["length"]],0],null],[[[1," "],[8,[39,23],null,[["@search","@onsearch","@sort","@filter"],[[99,24,["@search"]],[28,[37,13],[[30,0],[28,[37,14],[[33,24]],null]],[["value"],["target.value"]]],[30,3],[30,4]]],null],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,25],null,[["@type","@sort","@filters","@search","@items"],["auth-method",[30,3,["value"]],[30,4],[99,24,["@search"]],[30,5]]],[["default"],[[[[1,"\\n "],[8,[30,6,["Collection"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,26],null,[["@items"],[[30,6,["items"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,6,["Empty"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,27],null,[["@login"],[[30,1,["model","app","login","open"]]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,28],["routes.dc.acls.auth-methods.index.empty.header"],[["items"],[[30,5,["length"]]]]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[1,[28,[35,28],["routes.dc.acls.auth-methods.index.empty.body"],[["items","htmlSafe"],[[30,5,["length"]],true]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,29],null,[["@text","@href","@icon","@iconPosition","@size"],["Documentation on auth methods",[29,[[28,[37,30],["CONSUL_DOCS_URL"],null],"/security/acl/auth-methods"]],"docs-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,29],null,[["@text","@href","@icon","@iconPosition","@size"],["Read the API Docs",[29,[[28,[37,30],["CONSUL_DOCS_API_URL"],null],"/acl/auth-methods.html"]],"learn-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[3,4,5]]],[1," "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","loader","sort","filters","items","collection"],false,["route","routeName","data-loader","uri","hash","block-slot","if","eq","consul/acl/disabled","app-error","let","or","sortBy","action","mut","kind","split","source","not-eq","searchproperty","searchProperties","app-view","gt","consul/auth-method/search-bar","search","data-collection","consul/auth-method/list","empty-state","t","hds/link/standalone","env"]]',moduleName:"consul-ui/templates/dc/acls/auth-methods/index.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/acls/auth-methods/show",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"wumVrj9i",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/auth-method/${name}",[28,[37,4],null,[["partition","nspace","dc","name"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[30,1,["params","id"]]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,5],null,[["@name"],["error"]],[["default"],[[[[1,"\\n"],[41,[28,[37,7],[[30,2,["error","status"]],"401"],null],[[[1," "],[8,[39,8],null,null,null],[1,"\\n"]],[]],[[[1," "],[8,[39,9],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n"]],[]]],[1," "]],[]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[30,2,["data"]]],[[[1," "],[8,[39,11],null,null,[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["breadcrumbs"]],[["default"],[[[[1,"\\n "],[10,"ol"],[12],[1,"\\n "],[10,"li"],[12],[10,3],[15,6,[28,[37,12],["dc.acls.auth-methods"],null]],[12],[1,"All Auth Methods"],[13],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n "],[8,[30,1,["Title"]],null,[["@title"],[[30,3,["Name"]]]],null],[1,"\\n "],[13],[1,"\\n "],[8,[39,13],null,[["@item"],[[30,3]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["nav"]],[["default"],[[[[1,"\\n "],[8,[39,14],null,[["@items"],[[28,[37,15],[[28,[37,16],[[28,[37,4],null,[["label","href","selected"],["General info",[28,[37,12],["dc.acls.auth-methods.show.auth-method"],null],[28,[37,17],["dc.acls.auth-methods.show.auth-method"],null]]]],[52,[28,[37,18],["use nspaces"],null],[28,[37,4],null,[["label","href","selected"],["Namespace rules",[28,[37,12],["dc.acls.auth-methods.show.nspace-rules"],null],[28,[37,17],["dc.acls.auth-methods.show.nspace-rules"],null]]]],""],[28,[37,4],null,[["label","href","selected"],["Binding rules",[28,[37,12],["dc.acls.auth-methods.show.binding-rules"],null],[28,[37,17],["dc.acls.auth-methods.show.binding-rules"],null]]]]],null]],null]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,19],null,[["@name","@model"],[[99,1,["@name"]],[28,[37,4],null,[["item"],[[30,3]]]]]],[["default"],[[[[1,"\\n "],[46,[28,[37,21],null,null],null,null,null],[1,"\\n "]],[4]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[3]]],[1," "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]]],["route","loader","item","o"],false,["route","routeName","data-loader","uri","hash","block-slot","if","eq","consul/acl/disabled","app-error","let","app-view","href-to","consul/auth-method/type","tab-nav","compact","array","is-href","can","outlet","component","-outlet"]]',moduleName:"consul-ui/templates/dc/acls/auth-methods/show.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/acls/auth-methods/show/auth-method",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"AwEeTFr9",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[10,0],[14,0,"tab-section"],[12],[1,"\\n "],[8,[39,2],null,[["@item"],[[30,1,["model","item"]]]],null],[1,"\\n "],[13],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route"],false,["route","routeName","consul/auth-method/view"]]',moduleName:"consul-ui/templates/dc/acls/auth-methods/show/auth-method.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/acls/auth-methods/show/binding-rules",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"lp1F+P1r",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/binding-rules/for-auth-method/${name}",[28,[37,4],null,[["partition","nspace","dc","name"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[30,1,["params","id"]]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,5],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[30,2,["data"]]],[[[1,"\\n "],[10,0],[14,0,"tab-section"],[12],[1,"\\n"],[41,[28,[37,9],[[30,3,["length"]],0],null],[[[1," "],[10,2],[12],[1,"\\n Binding rules allow an operator to express a systematic way of automatically linking roles and service identities to newly created tokens without operator intervention.\\n "],[13],[1,"\\n "],[10,2],[12],[1,"\\n Successful authentication with an auth method returns a set of trusted identity attributes corresponding to the authenticated identity. Those attributes are matched against all configured binding rules for that auth method to determine what privileges to grant the Consul ACL token it will ultimately create.\\n "],[13],[1,"\\n "],[10,"hr"],[12],[13],[1,"\\n"],[42,[28,[37,11],[[28,[37,11],[[30,3]],null]],null],null,[[[1," "],[8,[39,12],null,[["@item"],[[30,4]]],null],[1,"\\n "],[10,"hr"],[12],[13],[1,"\\n"]],[4]],null]],[]],[[[1," "],[8,[39,13],null,null,[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,14],["routes.dc.acls.auth-methods.show.binding-rules.index.empty.header"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[1,[28,[35,14],["routes.dc.acls.auth-methods.show.binding-rules.index.empty.body"],[["htmlSafe"],[true]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[10,"li"],[14,0,"docs-link"],[12],[1,"\\n "],[10,3],[15,6,[29,[[28,[37,15],["CONSUL_DOCS_API_URL"],null],"/acl/binding-rules"]]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[1,"Read the documentation"],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n"]],[3]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","loader","items","item"],false,["route","routeName","data-loader","uri","hash","block-slot","app-error","let","if","gt","each","-track-array","consul/auth-method/binding-list","empty-state","t","env"]]',moduleName:"consul-ui/templates/dc/acls/auth-methods/show/binding-rules.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/acls/auth-methods/show/nspace-rules",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"B9VyTw0K",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n"],[44,[[30,1,["model","item"]]],[[[1," "],[10,0],[14,0,"tab-section"],[12],[1,"\\n"],[41,[28,[37,4],[[30,2,["NamespaceRules","length"]],0],null],[[[1," "],[10,2],[12],[1,"\\n A set of rules that can control which namespace tokens created via this auth method will be created within. Unlike binding rules, the first matching namespace rule wins.\\n "],[13],[1,"\\n "],[8,[39,5],null,[["@items"],[[30,2,["NamespaceRules"]]]],null],[1,"\\n"]],[]],[[[1," "],[8,[39,6],null,null,[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,8],[[28,[37,9],[[30,1,["t"]],"empty.header"],null]],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[1,[28,[35,8],[[28,[37,9],[[30,1,["t"]],"empty.body",[28,[37,10],null,[["htmlSafe"],[true]]]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[10,"li"],[14,0,"docs-link"],[12],[1,"\\n "],[10,3],[15,6,[29,[[28,[37,11],["CONSUL_DOCS_API_URL"],null],"/acl/auth-methods#namespacerules"]]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[1,"Read the documentation"],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n"]],[2]]]],[1]]]]],[1,"\\n"]],["route","item"],false,["route","routeName","let","if","gt","consul/auth-method/nspace-list","empty-state","block-slot","compute","fn","hash","env"]]',moduleName:"consul-ui/templates/dc/acls/auth-methods/show/nspace-rules.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/acls/index",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"u49Giiy6",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["replaceWith","dc.acls.tokens"],null]],null]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route"],false,["route","routeName","did-insert","route-action"]]',moduleName:"consul-ui/templates/dc/acls/index.hbs",isStrictMode:!1}) +e.default=n})) +define("consul-ui/templates/dc/acls/policies/-form",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"HeHpiPG6",block:'[[[1,"\\n"],[10,"form"],[12],[1,"\\n "],[8,[39,0],null,[["@form","@partition","@nspace","@item"],[[99,1,["@form"]],[99,2,["@partition"]],[99,3,["@nspace"]],[99,4,["@item"]]]],[["default"],[[[[1,"\\n"],[1," "],[8,[39,5],null,[["@name"],["template"]],null],[1,"\\n "]],[]]]]],[1,"\\n"],[41,[28,[37,7],[[33,8]],null],[[[1," "],[8,[39,9],null,[["@src","@onchange"],[[28,[37,10],["/${partition}/${nspace}/${dc}/tokens/for-policy/${id}",[28,[37,11],null,[["partition","nspace","dc","id"],[[33,2],[33,3],[33,12],[28,[37,13],[[33,14],""],null]]]]],null],[28,[37,15],[[30,0],[28,[37,16],[[33,17]],null]],[["value"],["data"]]]]],null],[1,"\\n"],[41,[28,[37,18],[[33,17,["length"]],0],null],[[[1," "],[8,[39,19],null,[["@caption","@items"],["Applied to the following tokens:",[99,17,["@items"]]]],null],[1,"\\n"]],[]],null]],[]],null],[1," "],[10,0],[12],[1,"\\n "],[8,[39,20],null,null,[["default"],[[[[1,"\\n"],[41,[28,[37,21],[[33,8],[28,[37,22],["create tokens"],null]],null],[[[1," "],[8,[39,23],[[16,"disabled",[52,[28,[37,13],[[33,4,["isPristine"]],[33,4,["isInvalid"]],[28,[37,24],[[33,4,["Name"]],""],null]],null],"disabled"]],[24,4,"submit"],[4,[38,25],["click",[28,[37,26],["create",[33,4]],null]],null]],[["@text"],["Save"]],null],[1,"\\n"]],[]],[[[41,[28,[37,22],["write policy"],[["item"],[[33,4]]]],[[[1," "],[8,[39,23],[[16,"disabled",[52,[33,4,["isInvalid"]],"disabled"]],[24,4,"submit"],[4,[38,25],["click",[28,[37,26],["update",[33,4]],null]],null]],[["@text"],["Save"]],null],[1,"\\n"]],[]],null]],[]]],[1," "],[8,[39,23],[[24,4,"reset"],[4,[38,15],[[30,0],"cancel",[33,4]],null]],[["@text","@color"],["Cancel","secondary"]],null],[1,"\\n"],[41,[28,[37,21],[[28,[37,7],[[33,8]],null],[28,[37,22],["delete policy"],[["item"],[[33,4]]]]],null],[[[1," "],[8,[39,27],null,[["@message"],["Are you sure you want to delete this Policy?"]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["action"]],[["default"],[[[[1,"\\n "],[8,[39,23],[[4,[38,15],[[30,0],[30,1],"delete",[33,4]],null]],[["@text","@color"],["Delete","critical"]],null],[1,"\\n "]],[1]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["dialog"]],[["default"],[[[[1,"\\n"],[41,[28,[37,18],[[33,17,["length"]],0],null],[[[1," "],[8,[39,28],null,[["@onclose","@open","@aria"],[[28,[37,15],[[30,0],[30,3]],null],true,[28,[37,11],null,[["label"],["Policy in Use"]]]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"Policy in Use"],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n This Policy is currently in use. If you choose to delete this Policy, it will be removed from the\\n following "],[10,"strong"],[12],[1,[33,17,["length"]]],[1," Tokens"],[13],[1,":\\n "],[13],[1,"\\n "],[8,[39,19],null,[["@items","@target"],[[99,17,["@items"]],"_blank"]],null],[1,"\\n "],[10,2],[12],[1,"\\n This action cannot be undone. "],[1,[30,4]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[8,[39,20],null,null,[["default"],[[[[1,"\\n "],[8,[39,23],[[4,[38,15],[[30,0],[30,2]],null]],[["@text","@color"],["Yes, Delete","critical"]],null],[1,"\\n "],[8,[39,23],[[4,[38,15],[[30,0],[30,5]],null]],[["@text","@color"],["Cancel","secondary"]],null],[1,"\\n "]],[]]]]],[1,"\\n "]],[5]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],[[[1," "],[8,[39,29],null,[["@message","@execute","@cancel"],[[30,4],[30,2],[30,3]]],null],[1,"\\n"]],[]]],[1," "]],[2,3,4]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[13],[1,"\\n"],[13],[1,"\\n"]],["confirm","execute","cancel","message","close"],false,["policy-form","form","partition","nspace","item","block-slot","if","not","create","data-source","uri","hash","dc","or","id","action","mut","items","gt","token-list","hds/button-set","and","can","hds/button","eq","on","route-action","confirmation-dialog","modal-dialog","delete-confirmation"]]',moduleName:"consul-ui/templates/dc/acls/policies/-form.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/acls/policies/edit",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"ZeBYu7Wq",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/policy/${id}",[28,[37,4],null,[["partition","nspace","dc","id"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[28,[37,5],[[30,1,["params","id"]],""],null]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,6],null,[["@name"],["error"]],[["default"],[[[[1,"\\n"],[41,[28,[37,8],[[30,2,["error","status"]],"401"],null],[[[1," "],[8,[39,9],null,null,null],[1,"\\n"]],[]],[[[1," "],[8,[39,10],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n"]],[]]],[1," "]],[]]]]],[1,"\\n\\n "],[8,[39,6],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[30,1,["params","dc"]],[30,1,["params","partition"]],[30,1,["params","nspace"]],[28,[37,5],[[30,1,["params","id"]],""],null],[30,2,["data"]],[30,2,["data","isNew"]]],[[[1," "],[8,[39,12],null,[["@login"],[[30,1,["model","app","login","open"]]]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["breadcrumbs"]],[["default"],[[[[1,"\\n "],[10,"ol"],[12],[1,"\\n "],[10,"li"],[12],[10,3],[15,6,[28,[37,13],["dc.acls.policies"],null]],[12],[1,"All Policies"],[13],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n"],[41,[30,8],[[[1," "],[8,[30,1,["Title"]],null,[["@title"],["New Policy"]],null],[1,"\\n"]],[]],[[[41,[28,[37,14],["write policy"],[["item"],[[30,7]]]],[[[1," "],[8,[30,1,["Title"]],null,[["@title"],["Edit Policy"]],null],[1,"\\n"]],[]],[[[1," "],[8,[30,1,["Title"]],null,[["@title"],["View Policy"]],null],[1,"\\n"]],[]]]],[]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["content"]],[["default"],[[[[1,"\\n"],[41,[28,[37,15],[[30,8]],null],[[[1," "],[10,0],[14,0,"definition-table"],[12],[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"Policy ID"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,16],null,[["@value","@name"],[[30,7,["ID"]],"Policy ID"]],null],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[28,[37,5],[[28,[37,8],[[28,[37,17],[[30,7]],null],"policy-management"],null],[28,[37,8],[[28,[37,17],[[30,7]],null],"read-only"],null]],null],[[[1," "],[8,[39,18],[[24,0,"mb-3 mt-2"]],[["@type","@icon"],["inline","star-fill"]],[["default"],[[[[1,"\\n "],[8,[30,9,["Title"]],null,null,[["default"],[[[[1,"Built-in policy"]],[]]]]],[1,"\\n "],[8,[30,9,["Description"]],null,null,[["default"],[[[[1,"This policy is built into Consul\'s ACL system. You can use this special policy by adding it to a token. This policy is not editable or removable, but can be ignored by not applying it to any tokens.\\n "]],[]]]]],[1,"\\n "],[8,[30,9,["Link::Standalone"]],null,[["@text","@href","@icon","@iconPosition"],["Learn more",[29,[[28,[37,19],["CONSUL_DOCS_URL"],null],"/guides/acl.html#builtin-policies"]],"docs-link","trailing"]],null],[1,"\\n "]],[9]]]]],[1,"\\n "],[10,0],[14,0,"definition-table"],[12],[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"Name"],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,7,["Name"]]],[13],[1,"\\n "],[10,"dt"],[12],[1,"Valid Datacenters"],[13],[1,"\\n "],[10,"dd"],[12],[1,[28,[35,20],[", ",[28,[37,21],[[30,7]],null]],null]],[13],[1,"\\n "],[10,"dt"],[12],[1,"Description"],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,7,["Description"]]],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[8,[39,22],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/tokens/for-policy/${id}",[28,[37,4],null,[["partition","nspace","dc","id"],[[30,4],[30,5],[30,3],[30,6]]]]],null]]],[["default"],[[[[1,"\\n"],[41,[28,[37,23],[[30,10,["data","length"]],0],null],[[[1," "],[8,[39,24],null,[["@caption","@items"],["Applied to the following tokens:",[30,10,["data"]]]],null],[1,"\\n"]],[]],null],[1," "]],[10]]]]],[1,"\\n"]],[]],[[[1," "],[19,"dc/acls/policies/form",[1,2,3,4,5,6,7,8]],[1,"\\n"]],[]]],[1," "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[3,4,5,6,7,8]]],[1," "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]]],["route","loader","dc","partition","nspace","id","item","create","A","loader"],true,["route","routeName","data-loader","uri","hash","or","block-slot","if","eq","consul/acl/disabled","app-error","let","app-view","href-to","can","not","copyable-code","policy/typeof","hds/alert","env","join","policy/datacenters","data-source","gt","token-list","partial"]]',moduleName:"consul-ui/templates/dc/acls/policies/edit.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/acls/policies/index",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"fHN/RQtj",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/policies",[28,[37,4],null,[["partition","nspace","dc"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,5],null,[["@name"],["error"]],[["default"],[[[[1,"\\n"],[41,[28,[37,7],[[30,2,["error","status"]],"401"],null],[[[1," "],[8,[39,8],null,null,null],[1,"\\n"]],[]],[[[1," "],[8,[39,9],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n"]],[]]],[1," "]],[]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[28,[37,4],null,[["value","change"],[[28,[37,11],[[33,12],"Name:asc"],null],[28,[37,13],[[30,0],[28,[37,14],[[33,12]],null]],[["value"],["target.selected"]]]]]],[28,[37,4],null,[["kind","datacenter","searchproperty"],[[28,[37,4],null,[["value","change"],[[52,[33,15],[28,[37,16],[[33,15],","],null],[27]],[28,[37,13],[[30,0],[28,[37,14],[[33,15]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,4],null,[["value","change"],[[52,[33,17],[28,[37,16],[[33,17],","],null],[27]],[28,[37,13],[[30,0],[28,[37,14],[[33,17]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,4],null,[["value","change","default"],[[52,[28,[37,18],[[33,19],[27]],null],[28,[37,16],[[33,19],","],null],[33,20]],[28,[37,13],[[30,0],[28,[37,14],[[33,19]],null]],[["value"],["target.selectedItems"]]],[33,20]]]]]]],[30,2,["data"]]],[[[1," "],[8,[39,21],null,[["@login"],[[30,1,["model","app","login","open"]]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n "],[8,[30,1,["Title"]],null,[["@title"],["Policies"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n"],[41,[28,[37,22],["create policies"],null],[[[1," "],[8,[39,23],null,[["@text","@route"],["Create","dc.acls.policies.create"]],null],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["toolbar"]],[["default"],[[[[1,"\\n"],[41,[28,[37,24],[[30,5,["length"]],0],null],[[[1," "],[8,[39,25],null,[["@partition","@search","@onsearch","@sort","@filter"],[[30,1,["params","partition"]],[99,26,["@search"]],[28,[37,13],[[30,0],[28,[37,14],[[33,26]],null]],[["value"],["target.value"]]],[30,3],[30,4]]],null],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,27],null,[["@type","@sort","@filters","@search","@items"],["policy",[30,3,["value"]],[30,4],[99,26,["@search"]],[30,5]]],[["default"],[[[[1,"\\n "],[8,[30,6,["Collection"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,28],null,[["@items","@ondelete"],[[30,6,["items"]],[28,[37,29],["delete"],null]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,6,["Empty"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,30],null,[["@login"],[[30,1,["model","app","login","open"]]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,31],["routes.dc.acls.policies.index.empty.header"],[["items"],[[30,5,["length"]]]]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[1,[28,[35,31],["routes.dc.acls.policies.index.empty.body"],[["items","htmlSafe"],[[30,5,["length"]],true]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,32],null,[["@text","@href","@icon","@iconPosition","@size"],["Documentation on policies",[29,[[28,[37,33],["CONSUL_DOCS_URL"],null],"/commands/acl/policy"]],"docs-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,32],null,[["@text","@href","@icon","@iconPosition","@size"],["Take the tutorial",[29,[[28,[37,33],["CONSUL_LEARN_URL"],null],"/consul/security-networking/managing-acl-policies"]],"learn-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n\\n"]],[3,4,5]]],[1," "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]]],["route","loader","sort","filters","items","collection"],false,["route","routeName","data-loader","uri","hash","block-slot","if","eq","consul/acl/disabled","app-error","let","or","sortBy","action","mut","kind","split","datacenter","not-eq","searchproperty","searchProperties","app-view","can","hds/button","gt","consul/policy/search-bar","search","data-collection","consul/policy/list","route-action","empty-state","t","hds/link/standalone","env"]]',moduleName:"consul-ui/templates/dc/acls/policies/index.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/acls/roles/-form",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"xSvLYGJe",block:'[[[1,"\\n"],[10,"form"],[12],[1,"\\n "],[8,[39,0],null,[["@form","@item","@dc","@nspace","@partition"],[[99,1,["@form"]],[99,2,["@item"]],[99,3,["@dc"]],[99,4,["@nspace"]],[99,5,["@partition"]]]],null],[1,"\\n"],[41,[28,[37,7],[[33,8]],null],[[[1," "],[8,[39,9],null,[["@src"],[[28,[37,10],["/${partition}/${nspace}/${dc}/tokens/for-role/${id}",[28,[37,11],null,[["partition","nspace","dc","id"],[[33,5],[33,4],[33,3],[28,[37,12],[[33,13],""],null]]]]],null]]],[["default"],[[[[1,"\\n"],[41,[28,[37,14],[[30,1,["data","length"]],0],null],[[[1," "],[10,"h2"],[12],[1,"Where is this role used?"],[13],[1,"\\n "],[10,2],[12],[1,"\\n We\'re only able to show information for the primary datacenter and the current datacenter. This list may not\\n show every case where this role is applied.\\n "],[13],[1,"\\n "],[8,[39,15],null,[["@caption","@items"],["Tokens",[30,1,["data"]]]],null],[1,"\\n"]],[]],null],[1," "]],[1]]]]],[1,"\\n"]],[]],null],[1," "],[10,0],[12],[1,"\\n "],[8,[39,16],null,null,[["default"],[[[[1,"\\n"],[41,[28,[37,17],[[33,8],[28,[37,18],["create roles"],null]],null],[[[1," "],[8,[39,19],[[16,"disabled",[28,[37,12],[[33,2,["isPristine"]],[33,2,["isInvalid"]],[28,[37,20],[[33,2,["Name"]],""],null]],null]],[24,4,"submit"],[4,[38,21],["click",[28,[37,22],["create",[33,2]],null]],null]],[["@text"],["Save"]],null],[1,"\\n"]],[]],[[[41,[28,[37,18],["write role"],[["item"],[[33,2]]]],[[[1," "],[8,[39,19],[[16,"disabled",[33,2,["isInvalid"]]],[24,4,"submit"],[4,[38,21],["click",[28,[37,22],["update",[33,2]],null]],null]],[["@text"],["Save"]],null],[1,"\\n"]],[]],null]],[]]],[1," "],[8,[39,19],[[24,4,"reset"],[4,[38,23],[[30,0],"cancel",[33,2]],null]],[["@text","@color"],["Cancel","secondary"]],null],[1,"\\n\\n"],[41,[28,[37,17],[[28,[37,7],[[33,8]],null],[28,[37,18],["delete role"],[["item"],[[33,2]]]]],null],[[[1," "],[8,[39,24],null,[["@message"],["Are you sure you want to delete this Role?"]],[["default"],[[[[1,"\\n "],[8,[39,25],null,[["@name"],["action"]],[["default"],[[[[1,"\\n "],[8,[39,19],[[4,[38,23],[[30,0],[30,2],"delete",[33,2]],null]],[["@text","@color"],["Delete","critical"]],null],[1,"\\n "]],[2]]]]],[1,"\\n "],[8,[39,25],null,[["@name"],["dialog"]],[["default"],[[[[1,"\\n"],[41,[28,[37,14],[[33,26,["length"]],0],null],[[[1," "],[8,[39,27],null,[["@onclose","@aria"],[[28,[37,23],[[30,0],[30,4]],null],[28,[37,11],null,[["label"],["Role in Use"]]]]],[["default"],[[[[1,"\\n "],[8,[39,25],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"Role in Use"],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,25],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n This Role is currently in use. If you choose to delete this Role, it will be removed from the\\n following "],[10,"strong"],[12],[1,[33,26,["length"]]],[1," Tokens"],[13],[1,":\\n "],[13],[1,"\\n "],[8,[39,15],null,[["@items","@target"],[[99,26,["@items"]],"_blank"]],null],[1,"\\n "],[10,2],[12],[1,"\\n This action cannot be undone. "],[1,[30,5]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,25],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[8,[39,16],null,null,[["default"],[[[[1,"\\n "],[8,[39,19],[[4,[38,23],[[30,0],[30,3]],null]],[["@text","@color"],["Yes, Delete","critical"]],null],[1,"\\n "],[8,[39,19],[[4,[38,23],[[30,0],[30,6]],null]],[["@text","@color"],["Cancel","secondary"]],null],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],[[[1," "],[8,[39,28],null,[["@message","@execute","@cancel"],[[30,5],[30,3],[30,4]]],null],[1,"\\n"]],[]]],[1," "]],[3,4,5]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[13],[1,"\\n"],[13],[1,"\\n"]],["loader","confirm","execute","cancel","message","close"],false,["role-form","form","item","dc","nspace","partition","if","not","create","data-source","uri","hash","or","id","gt","token-list","hds/button-set","and","can","hds/button","eq","on","route-action","action","confirmation-dialog","block-slot","items","modal-dialog","delete-confirmation"]]',moduleName:"consul-ui/templates/dc/acls/roles/-form.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/acls/roles/edit",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"B1T3t9iM",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/role/${id}",[28,[37,4],null,[["partition","nspace","dc","id"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[28,[37,5],[[30,1,["params","id"]],""],null]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,6],null,[["@name"],["error"]],[["default"],[[[[1,"\\n"],[41,[28,[37,8],[[30,2,["error","status"]],"401"],null],[[[1," "],[8,[39,9],null,null,null],[1,"\\n"]],[]],[[[1," "],[8,[39,10],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n"]],[]]],[1," "]],[]]]]],[1,"\\n\\n "],[8,[39,6],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[30,1,["params","dc"]],[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,2,["data"]],[30,2,["data","isNew"]]],[[[1," "],[8,[39,12],null,[["@login"],[[30,1,["model","app","login","open"]]]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["breadcrumbs"]],[["default"],[[[[1,"\\n "],[10,"ol"],[12],[1,"\\n "],[10,"li"],[12],[10,3],[15,6,[28,[37,13],["dc.acls.roles"],null]],[12],[1,"All Roles"],[13],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n"],[41,[30,7],[[[1," "],[8,[30,1,["Title"]],null,[["@title"],["New Role"]],null],[1,"\\n"]],[]],[[[1," "],[8,[30,1,["Title"]],null,[["@title"],["Edit Role"]],null],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["content"]],[["default"],[[[[1,"\\n"],[41,[28,[37,14],[[30,7]],null],[[[1," "],[10,0],[14,0,"definition-table"],[12],[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"Role ID"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,15],null,[["@value","@name"],[[30,6,["ID"]],"Role ID"]],null],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1," "],[19,"dc/acls/roles/form",[1,2,3,4,5,6,7]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[3,4,5,6,7]]],[1," "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]]],["route","loader","dc","partition","nspace","item","create"],true,["route","routeName","data-loader","uri","hash","or","block-slot","if","eq","consul/acl/disabled","app-error","let","app-view","href-to","not","copyable-code","partial"]]',moduleName:"consul-ui/templates/dc/acls/roles/edit.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/acls/roles/index",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"viN7dfZy",block:'[[[1,"\\n"],[8,[39,0],null,[["@name","@title"],[[99,1,["@name"]],"Roles"]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/roles",[28,[37,4],null,[["partition","nspace","dc"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,5],null,[["@name"],["error"]],[["default"],[[[[1,"\\n"],[41,[28,[37,7],[[30,2,["error","status"]],"401"],null],[[[1," "],[8,[39,8],null,null,null],[1,"\\n"]],[]],[[[1," "],[8,[39,9],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n"]],[]]],[1," "]],[]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[28,[37,4],null,[["value","change"],[[28,[37,11],[[33,12],"Name:asc"],null],[28,[37,13],[[30,0],[28,[37,14],[[33,12]],null]],[["value"],["target.selected"]]]]]],[28,[37,4],null,[["searchproperty"],[[28,[37,4],null,[["value","change","default"],[[52,[28,[37,15],[[33,16],[27]],null],[28,[37,17],[[33,16],","],null],[33,18]],[28,[37,13],[[30,0],[28,[37,14],[[33,16]],null]],[["value"],["target.selectedItems"]]],[33,18]]]]]]],[30,2,["data"]]],[[[1,"\\n "],[8,[39,19],null,[["@login"],[[30,1,["model","app","login","open"]]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n "],[8,[30,1,["Title"]],null,[["@title"],["Roles"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n"],[41,[28,[37,20],["create roles"],null],[[[1," "],[8,[39,21],null,[["@text","@route"],["Create","dc.acls.roles.create"]],null],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["toolbar"]],[["default"],[[[[1,"\\n"],[41,[28,[37,22],[[30,5,["length"]],0],null],[[[1," "],[8,[39,23],null,[["@search","@onsearch","@sort","@filter"],[[99,24,["@search"]],[28,[37,13],[[30,0],[28,[37,14],[[33,24]],null]],[["value"],["target.value"]]],[30,3],[30,4]]],null],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,25],null,[["@type","@sort","@filters","@search","@items"],["role",[30,3,["value"]],[30,4],[99,24,["@search"]],[30,5]]],[["default"],[[[[1,"\\n "],[8,[30,6,["Collection"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,26],null,[["@items","@ondelete"],[[30,6,["items"]],[28,[37,27],["delete"],null]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,6,["Empty"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,28],null,[["@login"],[[30,1,["model","app","login","open"]]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,29],["routes.dc.acls.roles.index.empty.header"],[["items"],[[30,5,["length"]]]]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[1,[28,[35,29],["routes.dc.acls.roles.index.empty.body"],[["items","htmlSafe"],[[30,5,["length"]],true]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,30],null,[["@text","@href","@icon","@iconPosition","@size"],["Documentation on roles",[29,[[28,[37,31],["CONSUL_DOCS_URL"],null],"/commands/acl/role"]],"docs-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,30],null,[["@text","@href","@icon","@iconPosition","@size"],["Read the API Docs",[29,[[28,[37,31],["CONSUL_DOCS_API_URL"],null],"/acl/roles.html"]],"learn-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[3,4,5]]],[1," "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]]],["route","loader","sort","filters","items","collection"],false,["route","routeName","data-loader","uri","hash","block-slot","if","eq","consul/acl/disabled","app-error","let","or","sortBy","action","mut","not-eq","searchproperty","split","searchProperties","app-view","can","hds/button","gt","consul/role/search-bar","search","data-collection","consul/role/list","route-action","empty-state","t","hds/link/standalone","env"]]',moduleName:"consul-ui/templates/dc/acls/roles/index.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/acls/tokens/-fieldsets-legacy",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"YGXEadog",block:'[[[1,"\\n "],[10,"fieldset"],[15,"disabled",[52,[28,[37,1],[[28,[37,2],["write token"],[["item"],[[33,3]]]]],null],"disabled"]],[12],[1,"\\n "],[10,"label"],[15,0,[29,["type-text",[52,[33,3,["error","Name"]]," has-error"]]]],[12],[1,"\\n "],[10,1],[12],[1,"Name"],[13],[1,"\\n "],[8,[39,4],null,[["@value","@name","@autofocus"],[[33,3,["Description"]],"name","autofocus"]],null],[1,"\\n "],[13],[1,"\\n"],[41,false,[[[1," "],[10,0],[14,"role","radiogroup"],[15,0,[52,[33,3,["error","Type"]]," has-error"]],[12],[1,"\\n"],[42,[28,[37,6],[[28,[37,6],[[28,[37,7],["management","client"],null]],null]],null],null,[[[1," "],[10,"label"],[12],[1,"\\n "],[10,1],[12],[1,[28,[35,8],[[30,1]],null]],[13],[1,"\\n "],[10,"input"],[14,3,"Type"],[15,2,[29,[[30,1]]]],[15,"checked",[52,[28,[37,9],[[33,3,["Type"]],[30,1]],null],"checked"]],[15,"onchange",[28,[37,10],[[30,0],"change"],null]],[14,4,"radio"],[12],[13],[1,"\\n "],[13],[1,"\\n"]],[1]],null],[1," "],[13],[1,"\\n"]],[]],null],[1," "],[10,"label"],[14,0,"type-text"],[12],[1,"\\n "],[8,[39,11],null,[["@class","@name","@syntax","@value","@onkeyup"],[[52,[33,3,["error","Rules"]],"error"],"Rules","hcl",[33,3,["Rules"]],[28,[37,10],[[30,0],"change","Rules"],null]]],[["label"],[[[[1,"\\n Rules "],[10,3],[15,6,[29,[[28,[37,12],["CONSUL_DOCS_URL"],null],"/guides/acl.html#rule-specification"]]],[14,"rel","help noopener noreferrer"],[14,"target","_blank"],[12],[1,"(HCL Format)"],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n"],[41,[33,13],[[[1," "],[10,"label"],[14,0,"type-text"],[12],[1,"\\n "],[10,1],[12],[1,"ID"],[13],[1,"\\n "],[8,[39,4],null,[["@value"],[[33,3,["ID"]]]],null],[1,"\\n "],[10,"em"],[12],[1,"We\'ll generate a UUID if this field is left empty."],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n\\n"]],["type"],false,["if","not","can","item","input","each","-track-array","array","capitalize","eq","action","code-editor","env","create"]]',moduleName:"consul-ui/templates/dc/acls/tokens/-fieldsets-legacy.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/acls/tokens/-fieldsets",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"MnuX4JE7",block:'[[[1,"\\n"],[10,"fieldset"],[15,"disabled",[52,[28,[37,1],[[28,[37,2],["write token"],[["item"],[[33,3]]]]],null],"disabled"]],[12],[1,"\\n"],[41,[33,4],[[[1," "],[10,0],[14,0,"type-toggle"],[12],[1,"\\n "],[10,"label"],[12],[1,"\\n "],[10,"input"],[14,3,"Local"],[15,"checked",[52,[33,5],"checked"]],[15,"onchange",[28,[37,6],[[30,0],"change"],null]],[14,4,"checkbox"],[12],[13],[1,"\\n "],[10,1],[12],[1,"Restrict this token to a local datacenter?"],[13],[1,"\\n "],[13],[1,"\\n "],[10,"em"],[12],[1,"Local tokens get set in the Raft store of the local DC and do not ever get transmitted to the primary DC or replicated to any other DC."],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1," "],[10,"label"],[14,0,"type-text validate-optional"],[12],[1,"\\n "],[10,1],[12],[1,"Description (Optional)"],[13],[1,"\\n "],[10,"textarea"],[14,3,"Description"],[15,"oninput",[28,[37,6],[[30,0],"change"],null]],[12],[1,[33,3,["Description"]]],[13],[1,"\\n "],[13],[1,"\\n"],[13],[1,"\\n"],[10,"fieldset"],[14,1,"roles"],[12],[1,"\\n "],[10,"h2"],[12],[1,"Roles"],[13],[1,"\\n "],[8,[39,7],null,[["@disabled","@dc","@partition","@nspace","@items"],[[28,[37,1],[[28,[37,2],["write token"],[["item"],[[33,3]]]]],null],[99,8,["@dc"]],[99,9,["@partition"]],[99,10,["@nspace"]],[33,3,["Roles"]]]],null],[1,"\\n"],[13],[1,"\\n"],[10,"fieldset"],[14,1,"policies"],[12],[1,"\\n "],[10,"h2"],[12],[1,"Policies"],[13],[1,"\\n "],[8,[39,11],null,[["@disabled","@dc","@partition","@nspace","@items"],[[28,[37,1],[[28,[37,2],["write token"],[["item"],[[33,3]]]]],null],[99,8,["@dc"]],[99,9,["@partition"]],[99,10,["@nspace"]],[33,3,["Policies"]]]],null],[1,"\\n"],[13],[1,"\\n"]],[],false,["if","not","can","item","create","Local","action","role-selector","dc","partition","nspace","policy-selector"]]',moduleName:"consul-ui/templates/dc/acls/tokens/-fieldsets.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/acls/tokens/-form",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"m4QMWXr7",block:'[[[1,"\\n"],[10,"form"],[12],[1,"\\n"],[41,[28,[37,1],[[28,[37,2],[[33,3]],null]],null],[[[1," "],[19,"dc/acls/tokens/fieldsets",[]],[1,"\\n"]],[]],[[[1," "],[19,"dc/acls/tokens/fieldsets-legacy",[]],[1,"\\n"]],[]]],[1," "],[10,0],[12],[1,"\\n "],[8,[39,5],null,null,[["default"],[[[[1,"\\n"],[41,[28,[37,6],[[33,7],[28,[37,8],["create tokens"],null]],null],[[[1," "],[8,[39,9],[[16,"disabled",[52,[28,[37,10],[[28,[37,6],[[28,[37,2],[[33,3]],null],[33,3,["isPristine"]]],null],[33,3,["isInvalid"]]],null],"disabled"]],[24,4,"submit"],[4,[38,11],["click",[28,[37,12],["create",[33,3]],null]],null]],[["@text"],["Save"]],null],[1,"\\n"]],[]],[[[41,[28,[37,8],["write token"],[["item"],[[33,3]]]],[[[1," "],[8,[39,9],[[16,"disabled",[52,[33,3,["isInvalid"]],"disabled"]],[24,4,"submit"],[4,[38,11],["click",[28,[37,12],["update",[33,3]],null]],null]],[["@text"],["Save"]],null],[1,"\\n"]],[]],null]],[]]],[1," "],[8,[39,9],[[24,4,"reset"],[4,[38,13],[[30,0],"cancel",[33,3]],null]],[["@text","@color"],["Cancel","secondary"]],null],[1,"\\n"],[41,[28,[37,6],[[28,[37,1],[[33,7]],null],[28,[37,8],["delete token"],[["item","token"],[[33,3],[33,14]]]]],null],[[[1," "],[8,[39,15],null,[["@message"],["Are you sure you want to delete this Token?"]],[["default"],[[[[1,"\\n "],[8,[39,16],null,[["@name"],["action"]],[["default"],[[[[1,"\\n "],[8,[39,9],[[4,[38,13],[[30,0],[30,1],"delete",[33,3]],null]],[["@text","@color"],["Delete","critical"]],null],[1,"\\n "]],[1]]]]],[1,"\\n "],[8,[39,16],null,[["@name"],["dialog"]],[["default"],[[[[1,"\\n "],[8,[39,17],null,[["@message","@execute","@cancel"],[[30,4],[30,2],[30,3]]],null],[1,"\\n "]],[2,3,4]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[13],[1,"\\n"],[13],[1,"\\n"]],["confirm","execute","cancel","message"],true,["if","not","token/is-legacy","item","partial","hds/button-set","and","create","can","hds/button","or","on","route-action","action","token","confirmation-dialog","block-slot","delete-confirmation"]]',moduleName:"consul-ui/templates/dc/acls/tokens/-form.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/acls/tokens/edit",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"YoJWnwjp",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/token/${id}",[28,[37,4],null,[["partition","nspace","dc","id"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[28,[37,5],[[30,1,["params","id"]],""],null]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,6],null,[["@name"],["error"]],[["default"],[[[[1,"\\n"],[41,[28,[37,8],[[30,2,["error","status"]],"401"],null],[[[1," "],[8,[39,9],null,null,null],[1,"\\n"]],[]],[[[1," "],[8,[39,10],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n"]],[]]],[1," "]],[]]]]],[1,"\\n\\n "],[8,[39,6],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[30,1,["params","dc"]],[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,2,["data"]],[30,2,["data","isNew"]]],[[[1," "],[8,[39,12],null,[["@login"],[[30,1,["model","app","login","open"]]]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["breadcrumbs"]],[["default"],[[[[1,"\\n "],[10,"ol"],[12],[1,"\\n "],[10,"li"],[12],[10,3],[15,6,[28,[37,13],["dc.acls.tokens"],null]],[12],[1,"All Tokens"],[13],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n"],[41,[30,7],[[[1," "],[8,[30,1,["Title"]],null,[["@title"],["New Token"]],null],[1,"\\n"]],[]],[[[1," "],[8,[30,1,["Title"]],null,[["@title"],["Edit Token"]],null],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n"],[41,[28,[37,14],[[30,7]],null],[[[1," "],[8,[39,15],null,null,[["default"],[[[[1,"\\n"],[41,[28,[37,16],[[30,6,["AccessorID"]],[33,17,["AccessorID"]]],null],[[[1," "],[8,[39,18],null,[["@message"],["Are you sure you want to use this ACL token?"]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["action"]],[["default"],[[[[1,"\\n "],[8,[39,19],[[4,[38,20],[[30,0],[30,8],"use",[30,6]],null]],[["@text","@color"],["Use","secondary"]],null],[1,"\\n "]],[8]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["dialog"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n "],[1,[30,11]],[1,"\\n "],[13],[1,"\\n "],[8,[39,15],null,null,[["default"],[[[[1,"\\n "],[8,[39,19],[[4,[38,20],[[30,0],[30,9]],null]],[["@text","@color"],["Confirm Use","critical"]],null],[1,"\\n "],[8,[39,19],[[4,[38,20],[[30,0],[30,10]],null]],[["@text","@color"],["Cancel","secondary"]],null],[1,"\\n "]],[]]]]],[1,"\\n "]],[9,10,11]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[41,[28,[37,21],["duplicate token"],[["item"],[[30,6]]]],[[[1," "],[8,[39,19],[[4,[38,20],[[30,0],"clone",[30,6]],null]],[["@text","@color"],["Duplicate","secondary"]],null],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["content"]],[["default"],[[[[1,"\\n"],[41,[28,[37,22],[[30,6]],null],[[[1," "],[8,[39,23],[[24,0,"mb-6"]],[["@type"],["inline"]],[["default"],[[[[1,"\\n "],[8,[30,12,["Title"]],null,null,[["default"],[[[[1,"Update"]],[]]]]],[1,"\\n "],[8,[30,12,["Description"]],null,null,[["default"],[[[[1,"We have upgraded our ACL system by allowing you to create reusable policies which you can then apply to tokens. Don\'t worry, even though this token was written in the old style, it is still valid. However, we do recommend upgrading your old tokens to the new style."]],[]]]]],[1,"\\n "],[8,[30,12,["Link::Standalone"]],null,[["@text","@href","@icon","@iconPosition"],["Learn more",[29,[[28,[37,24],["CONSUL_DOCS_URL"],null],"/guides/acl-migrate-tokens.html"]],"docs-link","trailing"]],null],[1,"\\n "]],[12]]]]],[1,"\\n"]],[]],null],[41,[28,[37,14],[[30,7]],null],[[[1," "],[10,0],[14,0,"definition-table"],[12],[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"AccessorID"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,25],null,[["@value","@name"],[[30,6,["AccessorID"]],"AccessorID"]],null],[1,"\\n "],[13],[1,"\\n "],[10,"dt"],[12],[1,"Token"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,25],null,[["@obfuscated","@value","@name"],[true,[30,6,["SecretID"]],"Token"]],null],[1,"\\n "],[13],[1,"\\n"],[41,[28,[37,26],[[28,[37,14],[[28,[37,22],[[30,6]],null]],null],[28,[37,14],[[30,7]],null]],null],[[[1," "],[10,"dt"],[12],[1,"Scope"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[52,[30,6,["Local"]],"local","global"]],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1," "],[19,"dc/acls/tokens/form",[1,2,3,4,5,6,7]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[3,4,5,6,7]]],[1," "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]]],["route","loader","dc","partition","nspace","item","create","confirm","execute","cancel","message","A"],true,["route","routeName","data-loader","uri","hash","or","block-slot","if","eq","consul/acl/disabled","app-error","let","app-view","href-to","not","hds/button-set","not-eq","token","confirmation-dialog","hds/button","action","can","token/is-legacy","hds/alert","env","copyable-code","and","partial"]]',moduleName:"consul-ui/templates/dc/acls/tokens/edit.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/acls/tokens/index",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"nM/xLeTH",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/tokens",[28,[37,4],null,[["partition","nspace","dc"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,5],null,[["@name"],["error"]],[["default"],[[[[1,"\\n"],[41,[28,[37,7],[[30,2,["error","status"]],"401"],null],[[[1," "],[8,[39,8],null,null,null],[1,"\\n"]],[]],[[[1," "],[8,[39,9],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n"]],[]]],[1," "]],[]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[28,[37,4],null,[["value","change"],[[28,[37,11],[[33,12],"CreateTime:desc"],null],[28,[37,13],[[30,0],[28,[37,14],[[33,12]],null]],[["value"],["target.selected"]]]]]],[28,[37,4],null,[["kind","searchproperty"],[[28,[37,4],null,[["value","change"],[[52,[33,15],[28,[37,16],[[33,15],","],null],[27]],[28,[37,13],[[30,0],[28,[37,14],[[33,15]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,4],null,[["value","change","default"],[[52,[28,[37,17],[[33,18],[27]],null],[28,[37,16],[[33,18],","],null],[33,19]],[28,[37,13],[[30,0],[28,[37,14],[[33,18]],null]],[["value"],["target.selectedItems"]]],[33,19]]]]]]],[30,2,["data"]]],[[[1,"\\n "],[8,[39,20],null,[["@login"],[[30,1,["model","app","login","open"]]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n "],[8,[30,1,["Title"]],null,[["@title"],["Tokens"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n"],[41,[28,[37,21],["create tokens"],null],[[[1," "],[8,[39,22],null,[["@text","@route"],["Create","dc.acls.tokens.create"]],null],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["toolbar"]],[["default"],[[[[1,"\\n"],[41,[28,[37,23],[[30,5,["length"]],0],null],[[[1," "],[8,[39,24],null,[["@search","@onsearch","@sort","@filter"],[[99,25,["@search"]],[28,[37,13],[[30,0],[28,[37,14],[[33,25]],null]],[["value"],["target.value"]]],[30,3],[30,4]]],null],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["content"]],[["default"],[[[[1,"\\n"],[41,[28,[37,26],[[30,5]],null],[[[1," "],[8,[39,27],[[24,0,"mb-3 mt-3"]],[["@type"],["inline"]],[["default"],[[[[1,"\\n "],[8,[30,6,["Title"]],null,null,[["default"],[[[[1,"Update"]],[]]]]],[1,"\\n "],[8,[30,6,["Description"]],null,null,[["default"],[[[[1,"We have upgraded our ACL System to allow the creation of reusable policies that can be applied to tokens. Read more about the changes and how to upgrade legacy tokens."]],[]]]]],[1,"\\n "],[8,[30,6,["Link::Standalone"]],null,[["@text","@href","@icon","@iconPosition"],["Learn more",[29,[[28,[37,28],["CONSUL_DOCS_URL"],null],"/guides/acl-migrate-tokens.html"]],"docs-link","trailing"]],null],[1,"\\n "]],[6]]]]],[1,"\\n"]],[]],null],[1," "],[8,[39,29],null,[["@type","@sort","@filters","@search","@items"],["token",[30,3,["value"]],[30,4],[99,25,["@search"]],[30,5]]],[["default"],[[[[1,"\\n "],[8,[30,7,["Collection"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,30],null,[["@items","@token","@onuse","@ondelete","@onlogout","@onclone"],[[30,7,["items"]],[30,1,["model","user","token"]],[28,[37,31],["use"],null],[28,[37,31],["delete"],null],[28,[37,31],["logout"],null],[28,[37,31],["clone"],null]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,7,["Empty"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,32],null,[["@login"],[[30,1,["model","app","login","open"]]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,33],["routes.dc.acls.tokens.index.empty.header"],[["items"],[[30,5,["length"]]]]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[1,[28,[35,33],["routes.dc.acls.tokens.index.empty.body"],[["items","htmlSafe"],[[30,5,["length"]],true]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[7]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[3,4,5]]],[1," "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","loader","sort","filters","items","A","collection"],false,["route","routeName","data-loader","uri","hash","block-slot","if","eq","consul/acl/disabled","app-error","let","or","sortBy","action","mut","kind","split","not-eq","searchproperty","searchProperties","app-view","can","hds/button","gt","consul/token/search-bar","search","token/is-legacy","hds/alert","env","data-collection","consul/token/list","route-action","empty-state","t"]]',moduleName:"consul-ui/templates/dc/acls/tokens/index.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/intentions/edit",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"eGHzHT1F",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/intention/${id}",[28,[37,4],null,[["partition","nspace","dc","id"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[28,[37,5],[[30,1,["params","intention_id"]],""],null]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,6],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,6],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[30,2,["data"]],[28,[37,9],[[28,[37,10],["write intention"],[["item"],[[30,2,["data"]]]]]],null]],[[[1," "],[8,[39,11],null,null,[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["breadcrumbs"]],[["default"],[[[[1,"\\n "],[10,"ol"],[12],[1,"\\n "],[10,"li"],[12],[10,3],[15,6,[28,[37,12],["dc.intentions"],null]],[12],[1,"All Intentions"],[13],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n"],[41,[28,[37,9],[[30,4]],null],[[[41,[30,3,["ID"]],[[[1," "],[8,[30,1,["Title"]],null,[["@title"],["Edit Intention"]],null],[1,"\\n"]],[]],[[[1," "],[8,[30,1,["Title"]],null,[["@title"],["New Intention"]],null],[1,"\\n"]],[]]]],[]],[[[1," "],[8,[30,1,["Title"]],null,[["@title"],["View Intention"]],null],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,14],null,[["@readonly","@item","@dc","@nspace","@partition","@onsubmit"],[[30,4],[30,3],[30,1,["model","dc"]],[30,1,["params","nspace"]],[30,1,["params","partition"]],[28,[37,15],["transitionTo","dc.intentions.index",[28,[37,4],null,[["dc"],[[30,1,["params","dc"]]]]]],null]]],null],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[3,4]]],[1," "]],[]]]]],[1,"\\n"]],[2]]]]],[1,"\\n"]],[1]]]]]],["route","loader","item","readOnly"],false,["route","routeName","data-loader","uri","hash","or","block-slot","app-error","let","not","can","app-view","href-to","if","consul/intention/form","route-action"]]',moduleName:"consul-ui/templates/dc/intentions/edit.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/intentions/index",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"uhPF61cB",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/intentions",[28,[37,4],null,[["partition","nspace","dc"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,5],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[28,[37,4],null,[["value","change"],[[28,[37,8],[[33,9],"Action:asc"],null],[28,[37,10],[[30,0],[28,[37,11],[[33,9]],null]],[["value"],["target.selected"]]]]]],[28,[37,4],null,[["access","searchproperty"],[[28,[37,4],null,[["value","change"],[[52,[33,13],[28,[37,14],[[33,13],","],null],[27]],[28,[37,10],[[30,0],[28,[37,11],[[33,13]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,4],null,[["value","change","default"],[[52,[28,[37,15],[[33,16],[27]],null],[28,[37,14],[[33,16],","],null],[33,17]],[28,[37,10],[[30,0],[28,[37,11],[[33,16]],null]],[["value"],["target.selectedItems"]]],[33,17]]]]]]],[30,2,["data"]]],[[[1,"\\n "],[8,[39,18],null,null,[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n "],[8,[30,1,["Title"]],null,[["@title"],["Intentions"]],null],[1," "],[10,"em"],[12],[1,[28,[35,19],[[30,5,["length"]]],null]],[1," total"],[13],[1,"\\n "],[13],[1,"\\n "],[10,"label"],[14,"for","toolbar-toggle"],[12],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n"],[41,[28,[37,20],["create intentions"],null],[[[1," "],[8,[39,21],null,[["@text","@route"],["Create","dc.intentions.create"]],null],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["toolbar"]],[["default"],[[[[1,"\\n\\n"],[41,[28,[37,22],[[30,5,["length"]],0],null],[[[1," "],[8,[39,23],null,[["@search","@onsearch","@sort","@filter"],[[99,24,["@search"]],[28,[37,10],[[30,0],[28,[37,11],[[33,24]],null]],[["value"],["target.value"]]],[30,3],[30,4]]],null],[1,"\\n"]],[]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,25],null,[["@sink","@type","@ondelete"],[[28,[37,3],["/${partition}/${dc}/${nspace}/intention/",[28,[37,4],null,[["partition","nspace","dc"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]]]]]],null],"intention",[99,26,["@ondelete"]]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,27],null,[["@type","@sort","@filters","@search","@items"],["intention",[30,3,["value"]],[30,4],[99,24,["@search"]],[30,5]]],[["default"],[[[[1,"\\n "],[8,[30,7,["Collection"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,28],null,[["@items","@delete"],[[30,7,["items"]],[30,6,["delete"]]]],[["default"],[[[[1,"\\n "],[8,[30,8,["CustomResourceNotice"]],null,null,null],[1,"\\n "],[8,[30,8,["Table"]],null,null,null],[1,"\\n "]],[8]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,7,["Empty"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,29],null,[["@login"],[[30,1,["model","app","login","open"]]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,30],["routes.dc.intentions.index.empty.header"],[["items"],[[30,5,["length"]]]]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[1,[28,[35,30],["routes.dc.intentions.index.empty.body"],[["items","canUseACLs","htmlSafe"],[[30,5,["length"]],[28,[37,20],["use acls"],null],true]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,31],null,[["@text","@href","@icon","@iconPosition","@size"],["Documentation on intentions",[29,[[28,[37,32],["CONSUL_DOCS_URL"],null],"/commands/intention"]],"docs-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,31],null,[["@text","@href","@icon","@iconPosition","@size"],["Take the tutorial",[29,[[28,[37,32],["CONSUL_DOCS_LEARN_URL"],null],"/consul/getting-started/connect"]],"learn-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[7]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n\\n"]],[3,4,5]]],[1," "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]]],["route","api","sort","filters","items","writer","collection","list"],false,["route","routeName","data-loader","uri","hash","block-slot","app-error","let","or","sortBy","action","mut","if","access","split","not-eq","searchproperty","searchProperties","app-view","format-number","can","hds/button","gt","consul/intention/search-bar","search","data-writer","refresh-route","data-collection","consul/intention/list","empty-state","t","hds/link/standalone","env"]]',moduleName:"consul-ui/templates/dc/intentions/index.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/kv/edit",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"gAVZYavj",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n\\n"],[44,["/"],[[[1,"\\n"],[44,[[28,[37,3],[[28,[37,4],[[30,2],[28,[37,5],[0,-1,[28,[37,6],[[30,1,["params","key"]],[30,2]],null]],null]],null],[30,2]],null]],[[[1,"\\n "],[8,[39,7],null,[["@src"],[[28,[37,8],["/${partition}/${nspace}/${dc}/kv/${key}",[28,[37,9],null,[["partition","nspace","dc","key"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[52,[28,[37,11],[[33,1],"create"],null],"",[30,1,["params","key"]]]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,12],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,13],null,[["@error","@login"],[[30,4,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,12],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[30,1,["params","dc"]],[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,4,["data"]]],[[[1,"\\n "],[8,[39,14],null,null,[["default"],[[[[1,"\\n\\n "],[8,[39,12],null,[["@name"],["breadcrumbs"]],[["default"],[[[[1,"\\n "],[10,"ol"],[12],[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,15],null,[["@href"],[[28,[37,16],["dc.kv.index"],null]]],[["default"],[[[[1,"\\n Key / Values\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n"],[41,[28,[37,17],[[30,3],[30,2]],null],[[[1,"\\n"],[44,[[28,[37,6],[[30,3],[30,2]],null]],[[[1,"\\n"],[42,[28,[37,19],[[28,[37,19],[[30,9]],null]],null],null,[[[41,[28,[37,20],[[30,10,["length"]],0],null],[[[1," "],[10,"li"],[12],[1,"\\n "],[8,[39,15],[[4,[38,15],[[30,0],[30,10]],null]],[["@href"],[[28,[37,16],["dc.kv.folder",[28,[37,4],["/",[28,[37,21],[[28,[37,5],[0,[28,[37,22],[[30,11],1],null],[30,9]],null],""],null]],null]],null]]],[["default"],[[[[1,"\\n "],[1,[30,10]],[1,"\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n"]],[]],null]],[10,11]],null]],[9]]],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,12],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n"],[41,[28,[37,23],[[30,8,["Key"]],[28,[37,17],[[30,8,["Key"]],[30,3]],null]],null],[[[1," "],[8,[30,1,["Title"]],null,[["@title","@render"],["Edit Key / Value",false]],null],[1,"\\n "],[1,[28,[35,24],[[30,8,["Key"]],[30,3]],null]],[1,"\\n"]],[]],[[[1," "],[8,[30,1,["Title"]],null,[["@title","@render"],["New Key / Value",true]],null],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,12],null,[["@name"],["content"]],[["default"],[[[[1,"\\n\\n"],[41,[30,8,["Session"]],[[[1," "],[8,[39,25],null,[["@type"],["kv"]],null],[1,"\\n"]],[]],null],[1,"\\n "],[8,[39,26],null,[["@item","@dc","@nspace","@partition","@onsubmit","@parent"],[[30,8],[30,1,["params","dc"]],[30,1,["params","nspace"]],[30,1,["params","partition"]],[52,[28,[37,27],[[30,3],[30,2]],null],[28,[37,28],["dc.kv.index"],null],[28,[37,28],["dc.kv.folder",[30,3]],null]],[30,3]]],null],[1,"\\n\\n\\n"],[41,[28,[37,23],[[30,8,["Session"]]],null],[[[1," "],[8,[39,29],null,[["@src","@onchange"],[[28,[37,8],["/${partition}/${nspace}/${dc}/sessions/for-key/${id}",[28,[37,9],null,[["partition","nspace","dc","id"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[30,8,["Session"]]]]]],null],[28,[37,15],[[30,0],[28,[37,30],[[33,31]],null]],[["value"],["data"]]]]],null],[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[8,[39,15],[[24,"rel","help"]],[["@href","@external"],[[28,[37,3],[[28,[37,32],["CONSUL_DOCS_URL"],null],"/internals/sessions.html#session-design"],null],true]],[["default"],[[[[1,"\\n Lock Session\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n"],[41,[33,31,["ID"]],[[[1," "],[8,[39,33],null,[["@item","@ondelete"],[[99,31,["@item"]],[30,4,["invalidate"]]]],null],[1,"\\n"]],[]],null]],[]],null],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[5,6,7,8]]],[1," "]],[]]]]],[1,"\\n "]],[4]]]]],[1,"\\n"]],[3]]]],[2]]]],[1]]]]],[1,"\\n"]],["route","separator","parentKey","loader","dc","partition","nspace","item","parts","breadcrumb","index"],false,["route","routeName","let","concat","join","slice","split","data-loader","uri","hash","if","string-ends-with","block-slot","app-error","app-view","action","href-to","not-eq","each","-track-array","gt","append","add","and","left-trim","consul/lock-session/notifications","consul/kv/form","eq","transition-to","data-source","mut","session","env","consul/lock-session/form"]]',moduleName:"consul-ui/templates/dc/kv/edit.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/kv/index",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"EqbwXwSB",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src","@onchange"],[[28,[37,3],["/${partition}/${nspace}/${dc}/kv/${key}",[28,[37,4],null,[["partition","nspace","dc","key"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[28,[37,5],[[30,1,["params","key"]],"/"],null]]]]],null],[28,[37,6],[[30,0],[28,[37,7],[[33,8]],null]],[["value"],["data"]]]]],null],[1,"\\n "],[8,[39,9],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/kvs/${key}",[28,[37,4],null,[["partition","nspace","dc","key"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[28,[37,5],[[30,1,["params","key"]],"/"],null]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,10],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,11],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,10],null,[["@name"],["disconnected"]],[["default"],[[[[1,"\\n"],[41,[28,[37,13],[[30,2,["error","status"]],"404"],null],[[[1," "],[8,[39,14],[[4,[38,15],null,[["sticky"],[true]]]],[["@color"],["warning"]],[["default"],[[[[1,"\\n "],[8,[30,4,["Title"]],null,null,[["default"],[[[[1,"Warning!"]],[]]]]],[1,"\\n "],[8,[30,4,["Description"]],null,null,[["default"],[[[[1,"\\n This KV or parent of this KV was deleted.\\n "]],[]]]]],[1,"\\n "]],[4]]]]],[1,"\\n"]],[]],[[[41,[28,[37,13],[[30,2,["error","status"]],"403"],null],[[[1," "],[8,[39,14],[[4,[38,15],null,[["sticky"],[true]]]],[["@color"],["critical"]],[["default"],[[[[1,"\\n "],[8,[30,5,["Title"]],null,null,[["default"],[[[[1,"Error!"]],[]]]]],[1,"\\n "],[8,[30,5,["Description"]],null,null,[["default"],[[[[1,"\\n You no longer have access to this KV.\\n "]],[]]]]],[1,"\\n "]],[5]]]]],[1,"\\n"]],[]],[[[1," "],[8,[39,14],[[4,[38,15],null,[["sticky"],[true]]]],[["@color"],["warning"]],[["default"],[[[[1,"\\n "],[8,[30,6,["Title"]],null,null,[["default"],[[[[1,"Warning!"]],[]]]]],[1,"\\n "],[8,[30,6,["Description"]],null,null,[["default"],[[[[1,"\\n An error was returned whilst loading this data, refresh to try again.\\n "]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n "]],[]]]],[]]],[1," "]],[3]]]]],[1,"\\n\\n "],[8,[39,10],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[28,[37,4],null,[["value","change"],[[28,[37,5],[[33,17],"Kind:asc"],null],[28,[37,6],[[30,0],[28,[37,7],[[33,17]],null]],[["value"],["target.selected"]]]]]],[28,[37,4],null,[["kind"],[[28,[37,4],null,[["value","change"],[[52,[33,18],[28,[37,19],[[33,18],","],null],[27]],[28,[37,6],[[30,0],[28,[37,7],[[33,18]],null]],[["value"],["target.selectedItems"]]]]]]]]],[33,8],[30,2,["data"]]],[[[1," "],[8,[39,20],null,null,[["default"],[[[[1,"\\n"],[41,[28,[37,21],[[30,9,["Key"]],"/"],null],[[[1," "],[8,[39,10],null,[["@name"],["breadcrumbs"]],[["default"],[[[[1,"\\n "],[10,"ol"],[12],[1,"\\n "],[10,"li"],[12],[10,3],[15,6,[28,[37,22],["dc.kv"],null]],[12],[1,"Key / Values"],[13],[13],[1,"\\n"],[42,[28,[37,24],[[28,[37,24],[[28,[37,25],[0,-2,[28,[37,19],[[30,9,["Key"]],"/"],null]],null]],null]],null],null,[[[1," "],[10,"li"],[12],[11,3],[16,6,[28,[37,22],["dc.kv.folder",[28,[37,26],["/",[28,[37,27],[[28,[37,25],[0,[28,[37,28],[[30,12],1],null],[28,[37,19],[[30,9,["Key"]],"/"],null]],null],""],null]],null]],null]],[4,[38,29],[[30,11]],null],[12],[1,[30,11]],[13],[13],[1,"\\n"]],[11,12]],null],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[1," "],[8,[39,10],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n"],[41,[28,[37,13],[[30,9,["Key"]],"/"],null],[[[1," "],[8,[30,1,["Title"]],null,[["@title"],["Key / Value"]],null],[1,"\\n"]],[]],[[[1," "],[8,[30,1,["Title"]],null,[["@title"],[[28,[37,30],[1,[28,[37,31],[1,[28,[37,32],[[28,[37,19],[[30,9,["Key"]],"/"],null]],null]],null]],null]]],null],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n "],[10,"label"],[14,"for","toolbar-toggle"],[12],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,10],null,[["@name"],["toolbar"]],[["default"],[[[[1,"\\n"],[41,[28,[37,33],[[30,10,["length"]],0],null],[[[1," "],[8,[39,34],null,[["@search","@onsearch","@sort","@filter"],[[99,35,["@search"]],[28,[37,6],[[30,0],[28,[37,7],[[33,35]],null]],[["value"],["target.value"]]],[30,7],[30,8]]],null],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[8,[39,10],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n"],[41,[28,[37,36],["create kvs"],null],[[[41,[28,[37,37],[[30,9,["Key"]],[28,[37,21],[[30,9,["Key"]],"/"],null]],null],[[[1," "],[8,[39,38],null,[["@text","@isHrefExternal","@href"],["Create",false,[29,[[28,[37,22],["dc.kv.create",[30,9,["Key"]]],null]]]]],null],[1,"\\n"]],[]],[[[1," "],[8,[39,38],null,[["@text","@route"],["Create","dc.kv.root-create"]],null],[1,"\\n"]],[]]]],[]],null],[1," "]],[]]]]],[1,"\\n "],[8,[39,10],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,39],null,[["@sink","@type","@label","@ondelete"],[[28,[37,3],["/${partition}/${nspace}/${dc}/kv/",[28,[37,4],null,[["partition","nspace","dc"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]]]]]],null],"kv","key",[99,40,["@ondelete"]]]],[["default"],[[[[1,"\\n "],[8,[39,10],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,41],null,[["@type","@sort","@filters","@search","@items"],["kv",[30,7,["value"]],[30,8],[99,35,["@search"]],[30,10]]],[["default"],[[[[1,"\\n "],[8,[30,14,["Collection"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,42],null,[["@items","@parent","@delete"],[[30,14,["items"]],[30,9],[30,13,["delete"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,14,["Empty"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,43],null,[["@login"],[[30,1,["model","app","login","open"]]]],[["default"],[[[[1,"\\n "],[8,[39,10],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,44],["routes.dc.kv.index.empty.header"],[["items"],[[30,10,["length"]]]]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,10],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[1,[28,[35,44],["routes.dc.kv.index.empty.body"],[["items","canUseACLs","htmlSafe"],[[30,10,["length"]],[28,[37,36],["use acls"],null],true]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,10],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,45],null,[["@text","@href","@icon","@iconPosition","@size"],["Documentation on K/V",[29,[[28,[37,46],["CONSUL_DOCS_URL"],null],"/agent/kv"]],"docs-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,45],null,[["@text","@href","@icon","@iconPosition","@size"],["Take the tutorial",[29,[[28,[37,46],["CONSUL_DOCS_LEARN_URL"],null],"/consul/getting-started/kv"]],"learn-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[14]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[13]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[7,8,9,10]]],[1," "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","loader","after","T","T","T","sort","filters","parent","items","breadcrumb","index","writer","collection"],false,["route","routeName","data-source","uri","hash","or","action","mut","parent","data-loader","block-slot","app-error","if","eq","hds/toast","notification","let","sortBy","kind","split","app-view","not-eq","href-to","each","-track-array","slice","join","append","add","tooltip","take","drop","reverse","gt","consul/kv/search-bar","search","can","and","hds/button","data-writer","refresh-route","data-collection","consul/kv/list","empty-state","t","hds/link/standalone","env"]]',moduleName:"consul-ui/templates/dc/kv/index.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/nodes/index",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"M0ePlJBh",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/leader",[28,[37,4],null,[["partition","nspace","dc"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,5],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/nodes",[28,[37,4],null,[["partition","nspace","dc"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,6],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@error","@login"],[[30,3,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,6],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[28,[37,4],null,[["value","change"],[[28,[37,9],[[33,10],"Status:asc"],null],[28,[37,11],[[30,0],[28,[37,12],[[33,10]],null]],[["value"],["target.selected"]]]]]],[28,[37,4],null,[["status","searchproperty","version"],[[28,[37,4],null,[["value","change"],[[52,[33,14],[28,[37,15],[[33,14],","],null],[27]],[28,[37,11],[[30,0],[28,[37,12],[[33,14]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,4],null,[["value","change","default"],[[52,[28,[37,16],[[33,17],[27]],null],[28,[37,15],[[33,17],","],null],[30,0,["_searchProperties"]]],[28,[37,11],[[30,0],[28,[37,12],[[33,17]],null]],[["value"],["target.selectedItems"]]],[30,0,["_searchProperties"]]]]],[28,[37,4],null,[["value","change"],[[52,[30,0,["version"]],[28,[37,15],[[30,0,["version"]],","],null],[27]],[28,[37,11],[[30,0],[28,[37,12],[[30,0,["version"]]],null]],[["value"],["target.selectedItems"]]]]]]]]],[30,3,["data"]],[30,2,["data"]],[30,3,["data","meta","versions"]]],[[[44,[[28,[37,18],["Meta.synthetic-node",[30,6]],null]],[[[1," "],[8,[39,19],null,null,[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n "],[8,[30,1,["Title"]],null,[["@title"],["Nodes"]],null],[1,"\\n "],[10,"em"],[12],[1,[28,[35,20],[[30,6,["length"]]],null]],[1," total"],[13],[1,"\\n "],[13],[1,"\\n "],[10,"label"],[14,"for","toolbar-toggle"],[12],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["toolbar"]],[["default"],[[[[1,"\\n"],[41,[28,[37,21],[[30,9,["length"]],0],null],[[[1," "],[8,[39,22],null,[["@search","@onsearch","@sort","@filter","@versions"],[[99,23,["@search"]],[28,[37,11],[[30,0],[28,[37,12],[[33,23]],null]],[["value"],["target.value"]]],[30,4],[30,5],[30,8]]],null],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,24],null,[["@items","@filteredItems","@postfix"],[[30,6],[30,9],[28,[37,25],[[30,1,["params","partition"]],[30,1,["params","dc"]]],null]]],null],[1,"\\n "],[8,[39,26],null,[["@type","@sort","@filters","@search","@items"],["node",[30,4,["value"]],[30,5],[99,23,["@search"]],[30,9]]],[["default"],[[[[1,"\\n "],[8,[30,10,["Collection"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,27],null,[["@items","@leader"],[[30,10,["items"]],[30,7]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,10,["Empty"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,28],null,[["@login"],[[30,1,["model","app","login","open"]]]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,29],["routes.dc.nodes.index.empty.header"],[["items"],[[30,6,["length"]]]]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[1,[28,[35,29],["routes.dc.nodes.index.empty.body"],[["items","canUseACLs","htmlSafe"],[[30,6,["length"]],[28,[37,30],["use acls"],null],true]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,31],null,[["@text","@href","@color","@icon","@iconPosition","@size"],[[28,[37,29],["routes.dc.nodes.index.empty.documentation"],null],[29,[[28,[37,32],["CONSUL_DOCS_DEVELOPER_URL"],null],"/agent"]],"tertiary","docs-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,31],null,[["@text","@href","@color","@icon","@iconPosition","@size"],[[28,[37,29],["routes.dc.nodes.index.empty.learn"],null],[29,[[28,[37,32],["CONSUL_DOCS_LEARN_URL"],null],"/tutorials/consul/deployment-guide?in=consul/production-deploy#configure-consul-agents"]],"tertiary","learn-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[10]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[9]]]],[4,5,6,7,8]]],[1," "]],[]]]]],[1,"\\n "]],[3]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","leader","api","sort","filters","items","leader","versions","filtered","collection"],false,["route","routeName","data-source","uri","hash","data-loader","block-slot","app-error","let","or","sortBy","action","mut","if","status","split","not-eq","searchproperty","reject-by","app-view","format-number","gt","consul/node/search-bar","search","consul/node/agentless-notice","concat","data-collection","consul/node/list","empty-state","t","can","hds/button","env"]]',moduleName:"consul-ui/templates/dc/nodes/index.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/nodes/show",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"h4OruvTV",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/coordinates/for-node/${name}",[28,[37,4],null,[["partition","nspace","dc","name"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[30,1,["params","name"]]]]]],null]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/node/${name}/${peer}",[28,[37,4],null,[["partition","nspace","dc","name","peer"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[30,1,["params","name"]],[30,1,["params","peer"]]]]]],null]]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@error","@login"],[[30,3,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,6],null,[["@name"],["disconnected"]],[["default"],[[[[1,"\\n"],[41,[28,[37,9],[[30,3,["error","status"]],"404"],null],[[[1," "],[8,[39,10],[[4,[38,11],null,[["sticky"],[true]]]],[["@color"],["warning"]],[["default"],[[[[1,"\\n "],[8,[30,5,["Title"]],null,null,[["default"],[[[[1,"Warning!"]],[]]]]],[1,"\\n "],[8,[30,5,["Description"]],null,null,[["default"],[[[[1,"This node no longer exists in the catalog."]],[]]]]],[1,"\\n "]],[5]]]]],[1,"\\n"]],[]],[[[41,[28,[37,9],[[30,3,["error","status"]],"403"],null],[[[1," "],[8,[39,10],[[4,[38,11],null,[["sticky"],[true]]]],[["@color"],["critical"]],[["default"],[[[[1,"\\n "],[8,[30,6,["Title"]],null,null,[["default"],[[[[1,"Error!"]],[]]]]],[1,"\\n "],[8,[30,6,["Description"]],null,null,[["default"],[[[[1,"You no longer have access to this node."]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n"]],[]],[[[1," "],[8,[39,10],[[4,[38,11],null,[["sticky"],[true]]]],[["@color"],["warning"]],[["default"],[[[[1,"\\n "],[8,[30,7,["Title"]],null,null,[["default"],[[[[1,"Warning!"]],[]]]]],[1,"\\n "],[8,[30,7,["Description"]],null,null,[["default"],[[[[1,"An error was returned whilst loading this data, refresh to try again."]],[]]]]],[1,"\\n "]],[7]]]]],[1,"\\n "]],[]]]],[]]],[1," "]],[4]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[30,3,["data"]],[30,2,["data"]]],[[[1," "],[8,[39,13],null,null,[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["notification"]],[["default"],[[[[1,"\\n "],[8,[39,14],null,[["@type","@status"],[[30,11],[30,10]]],null],[1,"\\n "]],[10,11]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["breadcrumbs"]],[["default"],[[[[1,"\\n "],[10,"ol"],[12],[1,"\\n "],[10,"li"],[12],[10,3],[15,6,[28,[37,15],["dc.nodes"],[["params"],[[28,[37,4],null,[["peer"],[[27]]]]]]]],[12],[1,"All Nodes"],[13],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n "],[8,[30,1,["Title"]],null,[["@title"],[[30,8,["Node"]]]],null],[1,"\\n "],[13],[1,"\\n "],[10,"label"],[14,"for","toolbar-toggle"],[12],[13],[1,"\\n "],[8,[39,16],null,[["@item"],[[30,8]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["nav"]],[["default"],[[[[1,"\\n "],[8,[39,17],null,[["@items"],[[28,[37,18],[[28,[37,19],[[28,[37,4],null,[["label","href","selected"],[[28,[37,20],["routes.dc.nodes.show.healthchecks.title"],null],[28,[37,15],["dc.nodes.show.healthchecks"],null],[28,[37,21],["dc.nodes.show.healthchecks"],null]]]],[28,[37,4],null,[["label","href","selected"],[[28,[37,20],["routes.dc.nodes.show.services.title"],null],[28,[37,15],["dc.nodes.show.services"],null],[28,[37,21],["dc.nodes.show.services"],null]]]],[52,[30,9,["distances"]],[28,[37,4],null,[["label","href","selected"],[[28,[37,20],["routes.dc.nodes.show.rtt.title"],null],[28,[37,15],["dc.nodes.show.rtt"],null],[28,[37,21],["dc.nodes.show.rtt"],null]]]],""],[52,[28,[37,22],["read sessions"],null],[28,[37,4],null,[["label","href","selected"],[[28,[37,20],["routes.dc.nodes.show.sessions.title"],null],[28,[37,15],["dc.nodes.show.sessions"],null],[28,[37,21],["dc.nodes.show.sessions"],null]]]],""],[28,[37,4],null,[["label","href","selected"],[[28,[37,20],["routes.dc.nodes.show.metadata.title"],null],[28,[37,15],["dc.nodes.show.metadata"],null],[28,[37,21],["dc.nodes.show.metadata"],null]]]]],null]],null]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[8,[39,23],null,[["@value","@name"],[[30,8,["Address"]],"Address"]],[["default"],[[[[1,[30,8,["Address"]]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,24],null,[["@name","@model"],[[99,1,["@name"]],[28,[37,25],[[28,[37,4],null,[["item","tomography"],[[30,8],[30,9]]]],[30,1,["model"]]],null]]],[["default"],[[[[1,"\\n "],[46,[28,[37,27],null,null],null,null,null],[1,"\\n "]],[12]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[8,9]]],[1," "]],[]]]]],[1,"\\n "]],[3]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","tomography","loader","after","T","T","T","item","tomography","status","type","o"],false,["route","routeName","data-source","uri","hash","data-loader","block-slot","app-error","if","eq","hds/toast","notification","let","app-view","consul/lock-session/notifications","href-to","consul/peer/info","tab-nav","compact","array","t","is-href","can","consul-copy-button","outlet","assign","component","-outlet"]]',moduleName:"consul-ui/templates/dc/nodes/show.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/nodes/show/healthchecks",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"Pjg8DJiZ",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n"],[44,[[28,[37,3],null,[["value","change"],[[28,[37,4],[[33,5],"Status:asc"],null],[28,[37,6],[[30,0],[28,[37,7],[[33,5]],null]],[["value"],["target.selected"]]]]]],[28,[37,3],null,[["status","kind","check","searchproperty"],[[28,[37,3],null,[["value","change"],[[52,[33,9],[28,[37,10],[[33,9],","],null],[27]],[28,[37,6],[[30,0],[28,[37,7],[[33,9]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,3],null,[["value","change"],[[52,[33,11],[28,[37,10],[[33,11],","],null],[27]],[28,[37,6],[[30,0],[28,[37,7],[[33,11]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,3],null,[["value","change"],[[52,[33,12],[28,[37,10],[[33,12],","],null],[27]],[28,[37,6],[[30,0],[28,[37,7],[[33,12]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,3],null,[["value","change","default"],[[52,[28,[37,13],[[33,14],[27]],null],[28,[37,10],[[33,14],","],null],[33,15]],[28,[37,6],[[30,0],[28,[37,7],[[33,14]],null]],[["value"],["target.selectedItems"]]],[33,15]]]]]]],[30,1,["model","item","Checks"]]],[[[1," "],[10,0],[14,0,"tab-section"],[12],[1,"\\n"],[41,[28,[37,16],[[30,4,["length"]],0],null],[[[1," "],[10,"input"],[14,1,"toolbar-toggle"],[14,4,"checkbox"],[12],[13],[1,"\\n "],[8,[39,17],null,[["@search","@onsearch","@sort","@filter"],[[99,18,["@search"]],[28,[37,6],[[30,0],[28,[37,7],[[33,18]],null]],[["value"],["target.value"]]],[30,2],[30,3]]],null],[1,"\\n"]],[]],null],[44,[[28,[37,19],["Type","serf",[30,4]],null]],[[[41,[28,[37,20],[[30,5],[28,[37,21],[[30,5,["Status"]],"critical"],null]],null],[[[1," "],[8,[39,22],[[24,0,"mb-3 mt-2"]],[["@type","@color"],["inline","warning"]],[["default"],[[[[1,"\\n "],[8,[30,6,["Title"]],null,null,[["default"],[[[[1,[28,[35,23],["routes.dc.nodes.show.healthchecks.critical-serf-notice.header"],null]]],[]]]]],[1,"\\n "],[8,[30,6,["Description"]],null,null,[["default"],[[[[1,[28,[35,23],["routes.dc.nodes.show.healthchecks.critical-serf-notice.body"],null]]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n"]],[]],null]],[5]]],[1," "],[8,[39,24],null,[["@type","@sort","@filters","@search","@items"],["health-check",[30,2,["value"]],[30,3],[99,18,["@search"]],[30,4]]],[["default"],[[[[1,"\\n "],[8,[30,7,["Collection"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,25],null,[["@items"],[[30,7,["items"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,7,["Empty"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,26],null,null,[["default"],[[[[1,"\\n "],[8,[39,27],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[1,[28,[35,23],["routes.dc.nodes.show.healthchecks.empty"],[["items","htmlSafe"],[[30,4,["length"]],true]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[7]]]]],[1,"\\n "],[13],[1,"\\n"]],[2,3,4]]]],[1]]]]]],["route","sort","filters","items","serf","A","collection"],false,["route","routeName","let","hash","or","sortBy","action","mut","if","status","split","kind","check","not-eq","searchproperty","searchProperties","gt","consul/health-check/search-bar","search","find-by","and","eq","hds/alert","t","data-collection","consul/health-check/list","empty-state","block-slot"]]',moduleName:"consul-ui/templates/dc/nodes/show/healthchecks.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/nodes/show/index",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"D2F2tcWD",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n"],[41,[28,[37,3],[[30,1,["model","item","Checks","length"]],0],null],[[[1," "],[1,[28,[35,4],[[28,[37,5],["replaceWith","dc.nodes.show.services"],null]],null]],[1,"\\n"]],[]],[[[1," "],[1,[28,[35,4],[[28,[37,5],["replaceWith","dc.nodes.show.healthchecks"],null]],null]],[1,"\\n"]],[]]]],[1]]]]],[1,"\\n"]],["route"],false,["route","routeName","if","eq","did-insert","route-action"]]',moduleName:"consul-ui/templates/dc/nodes/show/index.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/nodes/show/metadata",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"ywB5UQap",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[10,0],[14,0,"tab-section"],[12],[1,"\\n"],[41,[30,1,["model","item","Meta"]],[[[1," "],[8,[39,3],null,[["@items"],[[28,[37,4],[[30,1,["model","item","Meta"]]],null]]],null],[1,"\\n"]],[]],[[[1," "],[8,[39,5],null,null,[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n This node has no metadata.\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route"],false,["route","routeName","if","consul/metadata/list","entries","empty-state","block-slot"]]',moduleName:"consul-ui/templates/dc/nodes/show/metadata.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/nodes/show/rtt",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"NmAMHd68",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n"],[44,[[30,1,["model","tomography"]]],[[[41,[28,[37,4],[[30,2,["distances"]]],null],[[[1," "],[1,[28,[35,5],[[28,[37,6],["replaceWith","dc.nodes.show"],null]],null]],[1,"\\n"]],[]],[[[1," "],[10,0],[14,0,"tab-section"],[12],[1,"\\n "],[10,0],[14,0,"definition-table"],[12],[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n Minimum\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[28,[35,7],[[30,2,["min"]]],[["maximumFractionDigits"],[2]]]],[1,"ms\\n "],[13],[1,"\\n "],[10,"dt"],[12],[1,"\\n Median\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[28,[35,7],[[30,2,["median"]]],[["maximumFractionDigits"],[2]]]],[1,"ms\\n "],[13],[1,"\\n "],[10,"dt"],[12],[1,"\\n Maximum\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[28,[35,7],[[30,2,["max"]]],[["maximumFractionDigits"],[2]]]],[1,"ms\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[8,[39,8],null,[["@distances"],[[30,2,["distances"]]]],null],[1,"\\n "],[13],[1,"\\n"]],[]]]],[2]]]],[1]]]]],[1,"\\n"]],["route","tomography"],false,["route","routeName","let","if","not","did-insert","route-action","format-number","consul/tomography/graph"]]',moduleName:"consul-ui/templates/dc/nodes/show/rtt.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/nodes/show/services",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"uy3XQkE0",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n"],[44,[[28,[37,3],null,[["value","change"],[[28,[37,4],[[33,5],"Status:asc"],null],[28,[37,6],[[30,0],[28,[37,7],[[33,5]],null]],[["value"],["target.selected"]]]]]],[28,[37,3],null,[["status","source","searchproperty"],[[28,[37,3],null,[["value","change"],[[52,[33,9],[28,[37,10],[[33,9],","],null],[27]],[28,[37,6],[[30,0],[28,[37,7],[[33,9]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,3],null,[["value","change"],[[52,[33,11],[28,[37,10],[[33,11],","],null],[27]],[28,[37,6],[[30,0],[28,[37,7],[[33,11]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,3],null,[["value","change","default"],[[52,[28,[37,12],[[33,13],[27]],null],[28,[37,10],[[33,13],","],null],[33,14]],[28,[37,6],[[30,0],[28,[37,7],[[33,13]],null]],[["value"],["target.selectedItems"]]],[33,14]]]]]]],[30,1,["model","item","MeshServiceInstances"]],[30,1,["model","item","ProxyServiceInstances"]]],[[[1," "],[10,0],[14,0,"tab-section"],[12],[1,"\\n"],[41,[28,[37,15],[[30,4,["length"]],0],null],[[[1," "],[10,"input"],[14,1,"toolbar-toggle"],[14,4,"checkbox"],[12],[13],[1,"\\n "],[8,[39,16],null,[["@sources","@search","@onsearch","@searchproperties","@sort","@filter"],[[28,[37,17],[[28,[37,18],[[30,4]],null],"ExternalSources"],null],[99,19,["@search"]],[28,[37,6],[[30,0],[28,[37,7],[[33,19]],null]],[["value"],["target.value"]]],[99,14,["@searchproperties"]],[30,2],[30,3]]],null],[1,"\\n"]],[]],null],[1," "],[8,[39,20],null,[["@type","@sort","@filters","@search","@items"],["service-instance",[30,2,["value"]],[30,3],[99,19,["@search"]],[30,4]]],[["default"],[[[[1,"\\n "],[8,[30,6,["Collection"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,21],null,[["@node","@routeName","@items","@proxies"],[[30,1,["model","item"]],"dc.services.show",[30,6,["items"]],[30,5]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,6,["Empty"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,22],null,null,[["default"],[[[[1,"\\n "],[8,[39,23],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[1,[28,[35,24],["routes.dc.nodes.show.services.empty"],[["items","htmlSafe"],[[30,4,["length"]],true]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n "],[13],[1,"\\n"]],[2,3,4,5]]]],[1]]]]]],["route","sort","filters","items","proxies","collection"],false,["route","routeName","let","hash","or","sortBy","action","mut","if","status","split","source","not-eq","searchproperty","searchProperties","gt","consul/service-instance/search-bar","get","collection","search","data-collection","consul/service-instance/list","empty-state","block-slot","t"]]',moduleName:"consul-ui/templates/dc/nodes/show/services.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/nodes/show/sessions",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"ZmABt/J1",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/sessions/for-node/${node}",[28,[37,4],null,[["partition","nspace","dc","node"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[30,1,["params","name"]]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,5],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[30,2,["data"]]],[[[1," "],[10,0],[14,0,"tab-section"],[12],[1,"\\n "],[8,[39,8],null,[["@sink","@type","@label","@ondelete"],[[28,[37,3],["/${partition}/${dc}/${nspace}/session/",[28,[37,4],null,[["partition","nspace","dc"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]]]]]],null],"session","Lock Session",[99,9,["@ondelete"]]]],[["default"],[[[[1,"\\n\\n "],[8,[39,5],null,[["@name"],["removed"]],[["default"],[[[[1,"\\n "],[8,[39,10],[[4,[38,11],null,[["after"],[[28,[37,12],[[30,0],[30,5]],null]]]]],[["@type"],["remove"]],null],[1,"\\n "]],[5]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,10],[[4,[38,11],null,[["after"],[[28,[37,12],[[30,0],[30,6]],null]]]]],[["@type","@error"],["remove",[30,7]]],null],[1,"\\n "]],[6,7]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["content"]],[["default"],[[[[1,"\\n\\n "],[8,[39,13],null,[["@type","@items"],["session",[30,3]]],[["default"],[[[[1,"\\n\\n "],[8,[30,8,["Collection"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,14],null,[["@items","@ondelete"],[[30,8,["items"]],[30,4,["delete"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[30,8,["Empty"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,15],null,[["@login"],[[30,1,["model","app","login","open"]]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,16],["routes.dc.nodes.show.sessions.empty.header"],[["items"],[[30,3,["length"]]]]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[1,[28,[35,16],["routes.dc.nodes.show.sessions.empty.body"],[["canUseACLs","htmlSafe"],[[28,[37,17],["use acls"],null],true]]]],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,18],null,[["@text","@href","@icon","@iconPosition","@size"],["Documentation on Lock Sessions",[29,[[28,[37,19],["CONSUL_DOCS_URL"],null],"/internals/sessions.html"]],"docs-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,18],null,[["@text","@href","@icon","@iconPosition","@size"],["Take the tutorial",[29,[[28,[37,19],["CONSUL_DOCS_LEARN_URL"],null],"/tutorials/consul/distributed-semaphore"]],"learn-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n\\n "]],[8]]]]],[1,"\\n\\n "]],[]]]]],[1,"\\n "]],[4]]]]],[1,"\\n "],[13],[1,"\\n"]],[3]]],[1," "]],[]]]]],[1,"\\n"]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","api","items","writer","after","after","error","collection"],false,["route","routeName","data-loader","uri","hash","block-slot","app-error","let","data-writer","refresh-route","consul/lock-session/notifications","notification","action","data-collection","consul/lock-session/list","empty-state","t","can","hds/link/standalone","env"]]',moduleName:"consul-ui/templates/dc/nodes/show/sessions.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/nspaces/edit",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"1lxBXjI3",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/namespace/${id}",[28,[37,4],null,[["partition","nspace","dc","id"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[28,[37,5],[[30,1,["params","name"]],""],null]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,6],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,6],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[30,1,["params","dc"]],[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,2,["data"]],[30,2,["data","isNew"]]],[[[1," "],[8,[39,9],null,null,[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["breadcrumbs"]],[["default"],[[[[1,"\\n "],[10,"ol"],[12],[1,"\\n "],[10,"li"],[12],[10,3],[15,6,[28,[37,10],["dc.nspaces"],null]],[12],[1,"All Namespaces"],[13],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n "],[8,[30,1,["Title"]],null,[["@title"],[[52,[30,7],"New Namespace",[28,[37,12],["Edit ",[30,6,["Name"]]],null]]]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,13],null,[["@item","@dc","@nspace","@partition","@onsubmit"],[[30,6],[30,1,["params","dc"]],[30,1,["params","nspace"]],[30,1,["params","partition"]],[28,[37,14],["dc.nspaces.index"],null]]],null],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[3,4,5,6,7]]],[1," "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","loader","dc","partition","nspace","item","create"],false,["route","routeName","data-loader","uri","hash","or","block-slot","app-error","let","app-view","href-to","if","concat","consul/nspace/form","transition-to"]]',moduleName:"consul-ui/templates/dc/nspaces/edit.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/nspaces/index",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"+WFNzwTw",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/namespaces",[28,[37,4],null,[["partition","nspace","dc"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,5],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[28,[37,4],null,[["value","change"],[[28,[37,8],[[33,9],"Name:asc"],null],[28,[37,10],[[30,0],[28,[37,11],[[33,9]],null]],[["value"],["target.selected"]]]]]],[28,[37,4],null,[["searchproperty"],[[28,[37,4],null,[["value","change","default"],[[52,[28,[37,13],[[33,14],[27]],null],[28,[37,15],[[33,14],","],null],[33,16]],[28,[37,10],[[30,0],[28,[37,11],[[33,14]],null]],[["value"],["target.selectedItems"]]],[33,16]]]]]]],[30,2,["data"]]],[[[1,"\\n "],[8,[39,17],null,null,[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n "],[8,[30,1,["Title"]],null,[["@title"],["Namespaces"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n"],[41,[28,[37,18],["create nspaces"],null],[[[1," "],[8,[39,19],null,[["@text","@route"],["Create","dc.nspaces.create"]],null],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["toolbar"]],[["default"],[[[[1,"\\n"],[41,[28,[37,20],[[30,5,["length"]],0],null],[[[1," "],[8,[39,21],null,[["@search","@onsearch","@sort","@filter"],[[99,22,["@search"]],[28,[37,10],[[30,0],[28,[37,11],[[33,22]],null]],[["value"],["target.value"]]],[30,3],[30,4]]],null],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,23],null,[["@sink","@type","@label","@ondelete"],[[28,[37,3],["/${partition}/${dc}/${nspace}/nspace/",[28,[37,4],null,[["partition","nspace","dc"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]]]]]],null],"nspace","Namespace",[99,24,["@ondelete"]]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["removed"]],[["default"],[[[[1,"\\n "],[8,[39,25],[[4,[38,26],null,[["after"],[[28,[37,10],[[30,0],[30,7]],null]]]]],[["@type"],["remove"]],null],[1,"\\n "]],[7]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,27],null,[["@type","@sort","@filters","@search","@items"],["nspace",[30,3,["value"]],[30,4],[99,22,["@search"]],[30,5]]],[["default"],[[[[1,"\\n "],[8,[30,8,["Collection"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,28],null,[["@items","@ondelete"],[[30,8,["items"]],[30,6,["delete"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,8,["Empty"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,29],null,[["@login"],[[30,1,["model","app","login","open"]]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,30],["routes.dc.namespaces.index.empty.header"],[["items"],[[30,5,["length"]]]]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n "],[1,[28,[35,30],["routes.dc.namespaces.index.empty.body"],[["items","canUseACLs"],[[30,5,["length"]],[28,[37,18],["use acls"],null]]]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,31],null,[["@text","@href","@icon","@iconPosition","@size"],["Documentation on namespaces",[29,[[28,[37,32],["CONSUL_DOCS_URL"],null],"/commands/namespace"]],"docs-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,31],null,[["@text","@href","@icon","@iconPosition","@size"],["Read the guide",[29,[[28,[37,32],["CONSUL_DOCS_LEARN_URL"],null],"/consul/namespaces/secure-namespaces"]],"learn-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[8]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[3,4,5]]],[1," "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","loader","sort","filters","items","writer","after","collection"],false,["route","routeName","data-loader","uri","hash","block-slot","app-error","let","or","sortBy","action","mut","if","not-eq","searchproperty","split","searchProperties","app-view","can","hds/button","gt","consul/nspace/search-bar","search","data-writer","refresh-route","consul/nspace/notifications","notification","data-collection","consul/nspace/list","empty-state","t","hds/link/standalone","env"]]',moduleName:"consul-ui/templates/dc/nspaces/index.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/partitions/edit",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"jnt72m+Q",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/partition/${id}",[28,[37,4],null,[["partition","nspace","dc","id"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[28,[37,5],[[30,1,["params","name"]],""],null]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,6],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,6],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[30,1,["params","dc"]],[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,2,["data"]]],[[[1," "],[8,[39,9],null,null,[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["breadcrumbs"]],[["default"],[[[[1,"\\n "],[10,"ol"],[12],[1,"\\n "],[10,"li"],[12],[10,3],[15,6,[28,[37,10],["dc.partitions"],null]],[12],[1,"All Admin Partitions"],[13],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n "],[8,[30,1,["Title"]],null,[["@title"],[[52,[28,[37,12],["new partition"],[["item"],[[30,6]]]],"New Partition",[28,[37,13],["Edit ",[30,6,["Name"]]],null]]]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["content"]],[["default"],[[[[1,"\\n\\n "],[8,[39,14],null,[["@item","@dc","@nspace","@partition","@onsubmit"],[[30,6],[30,1,["params","dc"]],[30,1,["params","nspace"]],[30,1,["params","partition"]],[28,[37,15],["dc.partitions.index"],null]]],null],[1,"\\n\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[3,4,5,6]]],[1," "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","loader","dc","partition","nspace","item"],false,["route","routeName","data-loader","uri","hash","or","block-slot","app-error","let","app-view","href-to","if","is","concat","consul/partition/form","transition-to"]]',moduleName:"consul-ui/templates/dc/partitions/edit.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/partitions/index",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"OueAvJB/",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/partitions",[28,[37,4],null,[["partition","nspace","dc"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,5],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[28,[37,4],null,[["value","change"],[[28,[37,8],[[33,9],"Name:asc"],null],[28,[37,10],[[30,0],[28,[37,11],[[33,9]],null]],[["value"],["target.selected"]]]]]],[28,[37,4],null,[["searchproperty"],[[28,[37,4],null,[["value","change","default"],[[52,[28,[37,13],[[33,14],[27]],null],[28,[37,15],[[33,14],","],null],[33,16]],[28,[37,10],[[30,0],[28,[37,11],[[33,14]],null]],[["value"],["target.selectedItems"]]],[33,16]]]]]]],[30,2,["data"]]],[[[1,"\\n "],[8,[39,17],null,null,[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n "],[8,[30,1,["Title"]],null,[["@title"],["Admin Partitions"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n"],[41,[28,[37,18],["create partitions"],null],[[[1," "],[8,[39,19],null,[["@text","@route"],["Create","dc.partitions.create"]],null],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["toolbar"]],[["default"],[[[[1,"\\n"],[41,[28,[37,20],[[30,5,["length"]],0],null],[[[1," "],[8,[39,21],null,[["@search","@onsearch","@sort","@filter"],[[99,22,["@search"]],[28,[37,10],[[30,0],[28,[37,11],[[33,22]],null]],[["value"],["target.value"]]],[30,3],[30,4]]],null],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,23],null,[["@sink","@type","@label","@ondelete"],[[28,[37,3],["/${partition}/${dc}/${nspace}/partition/",[28,[37,4],null,[["partition","nspace","dc"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]]]]]],null],"partition","Partition",[99,24,["@ondelete"]]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["removed"]],[["default"],[[[[1,"\\n "],[8,[39,25],[[4,[38,26],null,[["after"],[[28,[37,10],[[30,0],[30,7]],null]]]]],[["@type"],["remove"]],null],[1,"\\n "]],[7]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,27],null,[["@type","@sort","@filters","@search","@items"],["nspace",[30,3,["value"]],[30,4],[99,22,["@search"]],[30,5]]],[["default"],[[[[1,"\\n "],[8,[30,8,["Collection"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,28],null,[["@items","@ondelete"],[[30,8,["items"]],[30,6,["delete"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,8,["Empty"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,29],null,[["@login"],[[30,1,["model","app","login","open"]]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,30],["routes.dc.partitions.index.empty.header"],[["items"],[[30,5,["length"]]]]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n "],[1,[28,[35,30],["routes.dc.partitions.index.empty.body"],[["items","canUseACLs"],[[30,5,["length"]],[28,[37,18],["use acls"],null]]]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[10,"li"],[14,0,"docs-link"],[12],[1,"\\n "],[8,[39,10],null,[["@href","@external"],[[29,[[28,[37,31],["CONSUL_DOCS_URL"],null],"/enterprise/admin-partitions"]],true]],[["default"],[[[[1,"\\n Documentation on Admin Partitions\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[8]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[3,4,5]]],[1," "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","loader","sort","filters","items","writer","after","collection"],false,["route","routeName","data-loader","uri","hash","block-slot","app-error","let","or","sortBy","action","mut","if","not-eq","searchproperty","split","searchProperties","app-view","can","hds/button","gt","consul/partition/search-bar","search","data-writer","refresh-route","consul/partition/notifications","notification","data-collection","consul/partition/list","empty-state","t","env"]]',moduleName:"consul-ui/templates/dc/partitions/index.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/peers/index",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"uPTWAtBk",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/peers",[28,[37,4],null,[["partition","nspace","dc"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,5],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[28,[37,4],null,[["value","change"],[[28,[37,8],[[33,9],"State:asc"],null],[28,[37,10],[[30,0],[28,[37,11],[[33,9]],null]],[["value"],["target.selected"]]]]]],[28,[37,4],null,[["state","searchproperty"],[[28,[37,4],null,[["value","change"],[[52,[33,13],[28,[37,14],[[33,13],","],null],[27]],[28,[37,10],[[30,0],[28,[37,11],[[33,13]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,4],null,[["value","change","default"],[[52,[28,[37,15],[[33,16],[27]],null],[28,[37,14],[[33,16],","],null],[33,17]],[28,[37,10],[[30,0],[28,[37,11],[[33,16]],null]],[["value"],["target.selectedItems"]]],[33,17]]]]]]],[30,2,["data"]]],[[[1," "],[8,[39,18],null,null,[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n "],[8,[30,1,["Title"]],null,[["@title"],["Peers"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["toolbar"]],[["default"],[[[[1,"\\n\\n"],[41,[28,[37,19],[[30,5,["length"]],0],null],[[[1," "],[8,[39,20],null,[["@search","@onsearch","@sort","@filter"],[[99,21,["@search"]],[28,[37,10],[[30,0],[28,[37,11],[[33,21]],null]],[["value"],["target.value"]]],[30,3],[30,4]]],null],[1,"\\n"]],[]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n\\n "],[8,[39,22],[[24,0,"peer-create-modal"]],[["@aria"],[[28,[37,4],null,[["label"],["Add peer connection"]]]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[1,[28,[35,23],[[28,[37,24],[[30,0],"create",[30,6]],null]],null]],[1,"\\n "],[10,"h2"],[12],[1,"\\n Add peer connection\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["body"]],[["default"],[[[[1,"\\n\\n"],[41,[30,6,["opened"]],[[[1," "],[8,[39,25],null,[["@params"],[[30,1,["params"]]]],[["default"],[[[[1,"\\n "],[8,[30,7,["Form"]],null,[["@onchange","@onsubmit"],[[30,2,["invalidate"]],[28,[37,26],[[30,0,["redirectToPeerShow"]],[30,6,["close"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,23],[[28,[37,24],[[30,0],"form",[30,8]],null]],null]],[1,"\\n "],[8,[30,8,["Fieldsets"]],null,null,null],[1,"\\n "]],[8]]]]],[1,"\\n "]],[7]]]]],[1,"\\n"]],[]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[8,[30,0,["form","Actions"]],null,[["@onclose"],[[30,0,["create","close"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n "],[8,[39,27],[[4,[38,28],["click",[28,[37,29],[[30,0,["create","open"]]],null]],null]],[["@color","@text"],["primary","Add peer connection"]],null],[1,"\\n\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["content"]],[["default"],[[[[1,"\\n\\n "],[8,[39,30],null,[["@sink","@type","@label"],[[28,[37,3],["/${partition}/${dc}/${nspace}/peer/",[28,[37,4],null,[["partition","nspace","dc"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]]]]]],null],"peer","Peer"]],[["default"],[[[[1,"\\n\\n "],[8,[39,5],null,[["@name"],["removed"]],[["default"],[[[[1,"\\n "],[8,[39,31],[[4,[38,32],null,[["after"],[[28,[37,10],[[30,0],[30,10]],null]]]]],[["@type"],["remove"]],null],[1,"\\n "]],[10]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["content"]],[["default"],[[[[1,"\\n\\n "],[8,[39,22],null,[["@aria","@onclose"],[[28,[37,4],null,[["label"],["Regenerate token"]]],[28,[37,24],[[30,0],"item",[27]],null]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[1,[28,[35,23],[[28,[37,24],[[30,0],"regenerate",[30,11]],null]],null]],[1,"\\n "],[10,"h2"],[12],[1,"\\n Regenerate token\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["body"]],[["default"],[[[[1,"\\n"],[41,[30,0,["item"]],[[[1," "],[8,[39,33],null,[["@item","@onchange","@regenerate"],[[30,0,["item"]],[30,2,["invalidate"]],true]],[["default"],[[[[1,"\\n "],[1,[28,[35,23],[[28,[37,24],[[30,0],"regenerateForm",[30,12]],null]],null]],[1,"\\n "],[8,[30,12,["Fieldsets"]],null,null,null],[1,"\\n "]],[12]]]]],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[8,[30,0,["regenerateForm","Actions"]],null,[["@onclose"],[[30,0,["regenerate","close"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n "]],[11]]]]],[1,"\\n\\n "],[8,[39,34],null,[["@type","@sort","@filters","@search","@items"],["peer",[30,3,["value"]],[30,4],[99,21,["@search"]],[30,5]]],[["default"],[[[[1,"\\n "],[8,[30,13,["Collection"]],null,null,[["default"],[[[[1,"\\n\\n "],[8,[39,35],null,[["@items","@onedit","@ondelete"],[[30,13,["items"]],[28,[37,36],[[28,[37,24],[[30,0],"item"],null],[30,0,["regenerate","open"]]],null],[30,9,["delete"]]]],null],[1,"\\n\\n "]],[]]]]],[1,"\\n "],[8,[30,13,["Empty"]],null,null,[["default"],[[[[1,"\\n"],[1," "],[8,[39,37],null,[["@login"],[[30,1,["model","app","login","open"]]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,38],["routes.dc.peers.index.empty.header"],[["items"],[[30,5,["length"]]]]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n "],[1,[28,[35,38],["routes.dc.peers.index.empty.body"],[["items","canUsePartitions","canUseACLs","htmlSafe"],[[30,5,["length"]],[28,[37,39],["use partitions"],null],[28,[37,39],["use acls"],null],true]]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[10,"li"],[12],[1,"\\n"],[1," "],[8,[39,40],null,[["@text","@href","@icon","@iconPosition","@size"],["Documentation on Peers",[29,[[28,[37,41],["CONSUL_DOCS_URL"],null],"/connect/cluster-peering"]],"docs-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,40],null,[["@text","@href","@icon","@iconPosition","@size"],["Take the tutorial",[29,[[28,[37,41],["CONSUL_DOCS_URL"],null],"/connect/cluster-peering/create-manage-peering"]],"learn-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[13]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[9]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[3,4,5]]],[1," "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]]],["route","loader","sort","filters","items","modal","form","form","writer","after","modal","form","collection"],false,["route","routeName","data-loader","uri","hash","block-slot","app-error","let","or","sortBy","action","mut","if","state","split","not-eq","searchproperty","searchProperties","app-view","gt","consul/peer/search-bar","search","modal-dialog","did-insert","set","consul/peer/form","fn","hds/button","on","optional","data-writer","consul/peer/notifications","notification","consul/peer/form/generate","data-collection","consul/peer/list","queue","empty-state","t","can","hds/link/standalone","env"]]',moduleName:"consul-ui/templates/dc/peers/index.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/peers/show",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"AvoaCEAO",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/peer/${name}",[28,[37,4],null,[["partition","nspace","dc","name"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[30,1,["params","name"]]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,5],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[30,1,["params","dc"]],[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,2,["data"]]],[[[1," "],[8,[39,8],null,null,[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["breadcrumbs"]],[["default"],[[[[1,"\\n "],[10,"ol"],[12],[1,"\\n "],[10,"li"],[12],[10,3],[15,6,[28,[37,9],["dc.peers"],null]],[12],[1,"All Peers"],[13],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n "],[8,[30,1,["Title"]],null,[["@title"],[[30,6,["Name"]]]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,10],null,[["@peering"],[[30,6]]],null],[1,"\\n "],[8,[39,11],null,[["@peer"],[[30,6]]],[["default"],[[[[1,"\\n "],[8,[39,12],null,[["@items"],[[30,7,["data","tabs"]]]],null],[1,"\\n\\n "]],[7]]]]],[1,"\\n "],[8,[39,13],null,[["@name","@model"],[[99,1,["@name"]],[28,[37,14],[[28,[37,4],null,[["items","peer"],[[30,6,["PeerServerAddresses"]],[30,6]]]],[30,1,["model"]]],null]]],[["default"],[[[[1,"\\n "],[46,[28,[37,16],null,null],null,null,null],[1,"\\n "]],[8]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[3,4,5,6]]],[1," "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]]],["route","loader","dc","partition","nspace","item","peering","o"],false,["route","routeName","data-loader","uri","hash","block-slot","app-error","let","app-view","href-to","consul/peer/bento-box","peerings/provider","tab-nav","outlet","assign","component","-outlet"]]',moduleName:"consul-ui/templates/dc/peers/show.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/peers/show/addresses",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"3k5sOecZ",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n"],[41,[28,[37,3],[[30,1,["model","items","length"]],0],null],[[[1," "],[8,[39,4],null,[["@items"],[[30,1,["model","items"]]]],null],[1,"\\n"]],[]],[[[1," "],[8,[39,5],null,[["@login"],[[30,1,["model","app","login","open"]]]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,7],["routes.dc.peers.show.addresses.empty.header"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[1,[28,[35,7],["routes.dc.peers.show.addresses.empty.body"],[["htmlSafe"],[true]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,8],null,[["@text","@href","@icon","@iconPosition","@size"],["Documentation on Peers",[29,[[28,[37,9],["CONSUL_DOCS_URL"],null],"/connect/cluster-peering"]],"docs-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,8],null,[["@text","@href","@icon","@iconPosition","@size"],["Take the tutorial",[29,[[28,[37,9],["CONSUL_DOCS_URL"],null],"/connect/cluster-peering/create-manage-peering"]],"learn-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]]]],[1]]]]]],["route"],false,["route","routeName","if","gt","consul/peer/address/list","empty-state","block-slot","t","hds/link/standalone","env"]]',moduleName:"consul-ui/templates/dc/peers/show/addresses.hbs",isStrictMode:!1}) +e.default=n})) +define("consul-ui/templates/dc/peers/show/exported",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"Z0gVGZWd",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/exported-services/${name}",[28,[37,4],null,[["partition","nspace","dc","name"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[30,1,["model","peer","Name"]]]]]],null]]],[["default"],[[[[1,"\\n"],[44,[[28,[37,6],[[30,1,["params","partition"]],[30,1,["model","user","token","Partition"]],"default"],null],[30,2,["data"]]],[[[1,"\\n "],[8,[39,7],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,8],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,7],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[41,[30,4,["length"]],[[[1," "],[10,0],[14,0,"search-bar"],[12],[1,"\\n "],[10,"form"],[14,0,"filter-bar"],[12],[1,"\\n "],[8,[39,10],[[24,0,"!w-80"]],[["@onsearch","@value","@placeholder"],[[28,[37,11],["target.value",[30,0,["updateSearch"]]],null],[30,0,["search"]],"Search"]],null],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1," "],[8,[39,12],null,[["@items","@search","@searchProperties"],[[30,4],[30,0,["search"]],[28,[37,13],["Name"],null]]],[["default"],[[[[1,"\\n "],[8,[39,14],null,null,[["default"],[[[[1,"\\n"],[41,[30,6,["data","height"]],[[[1," "],[10,0],[15,5,[30,6,["data","fillRemainingHeightStyle"]]],[14,0,"overflow-y-scroll"],[12],[1,"\\n"],[41,[30,5,["data","items","length"]],[[[1," "],[8,[39,15],null,[["@tagName","@estimateHeight","@items"],["ul",[30,6,["data","height"]],[30,5,["data","items"]]]],[["default"],[[[[1,"\\n "],[10,"li"],[14,0,"px-3 h-12 border-bottom-primary"],[12],[1,"\\n "],[10,3],[14,0,"hds-typography-display-300 hds-foreground-strong hds-font-weight-semibold h-full w-full flex items-center"],[15,6,[28,[37,16],["dc.services.show.index",[30,7,["Name"]]],[["params"],[[52,[28,[37,17],[[30,7,["Partition"]],[30,3]],null],[28,[37,4],null,[["partition","nspace","peer"],[[30,7,["Partition"]],[30,7,["Namespace"]],[30,7,["PeerName"]]]]],[28,[37,4],null,[["peer"],[[30,7,["PeerName"]]]]]]]]]],[12],[1,"\\n "],[1,[30,7,["Name"]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "]],[7,8]]]]],[1,"\\n"]],[]],[[[1," "],[8,[39,18],null,[["@login"],[[30,1,["model","app","login","open"]]]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,19],["routes.dc.peers.show.exported.empty.header"],[["name"],[[30,1,["model","peer","Name"]]]]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[1,[28,[35,19],["routes.dc.peers.show.exported.empty.body"],[["items","name","htmlSafe"],[[30,4,["length"]],[30,1,["model","peer","Name"]],true]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,20],null,[["@text","@href","@icon","@iconPosition","@size"],["Documentation on Peers",[29,[[28,[37,21],["CONSUL_DOCS_URL"],null],"/connect/cluster-peering"]],"docs-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,20],null,[["@text","@href","@icon","@iconPosition","@size"],["Take the tutorial",[29,[[28,[37,21],["CONSUL_DOCS_URL"],null],"/connect/cluster-peering/create-manage-peering"]],"learn-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n"]],[]],null],[1," "]],[6]]]]],[1,"\\n\\n "]],[5]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[3,4]]],[1," "]],[2]]]]],[1,"\\n\\n"]],[1]]]]]],["route","api","partition","items","search","p","service","index"],false,["route","routeName","data-loader","uri","hash","let","or","block-slot","app-error","if","freetext-filter","pick","providers/search","array","providers/dimension","vertical-collection","href-to","not-eq","empty-state","t","hds/link/standalone","env"]]',moduleName:"consul-ui/templates/dc/peers/show/exported.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/peers/show/imported",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"Ioh7AUof",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/services/${peer}/${peerId}",[28,[37,4],null,[["partition","nspace","dc","peer","peerId"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[30,1,["model","peer","Name"]],[30,1,["model","peer","id"]]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,5],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[28,[37,4],null,[["value","change"],[[28,[37,8],[[33,9],"Status:asc"],null],[28,[37,10],[[30,0],[28,[37,11],[[33,9]],null]],[["value"],["target.selected"]]]]]],[28,[37,4],null,[["status","kind","source","searchproperty"],[[28,[37,4],null,[["value","change"],[[52,[33,13],[28,[37,14],[[33,13],","],null],[27]],[28,[37,10],[[30,0],[28,[37,11],[[33,13]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,4],null,[["value","change"],[[52,[33,15],[28,[37,14],[[33,15],","],null],[27]],[28,[37,10],[[30,0],[28,[37,11],[[33,15]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,4],null,[["value","change"],[[52,[33,16],[28,[37,14],[[33,16],","],null],[27]],[28,[37,10],[[30,0],[28,[37,11],[[33,16]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,4],null,[["value","change","default"],[[52,[28,[37,17],[[33,18],[27]],null],[28,[37,14],[[33,18],","],null],[30,0,["searchProperties"]]],[28,[37,10],[[30,0],[28,[37,11],[[33,18]],null]],[["value"],["target.selectedItems"]]],[30,0,["searchProperties"]]]]]]]],[28,[37,19],["Kind","connect-proxy",[30,2,["data"]]],null],[28,[37,8],[[30,1,["params","partition"]],[30,1,["model","user","token","Partition"]],"default"],null],[28,[37,8],[[30,1,["params","nspace"]],[30,1,["model","user","token","Namespace"]],"default"],null]],[[[1,"\\n"],[41,[28,[37,20],[[30,5,["length"]],0],null],[[[44,[[28,[37,21],[[30,5]],null]],[[[1," "],[8,[39,22],null,[["@sources","@partitions","@partition","@search","@onsearch","@sort","@filter","@peer"],[[28,[37,23],[[30,8],"ExternalSources"],null],[28,[37,23],[[30,8],"Partitions"],null],[30,6],[99,24,["@search"]],[28,[37,10],[[30,0],[28,[37,11],[[33,24]],null]],[["value"],["target.value"]]],[30,3],[30,4],[30,1,["model","peer"]]]],null],[1,"\\n"]],[8]]]],[]],null],[1," "],[8,[39,25],null,[["@type","@sort","@filters","@search","@items"],["service",[30,3,["value"]],[30,4],[99,24,["@search"]],[30,5]]],[["default"],[[[[1,"\\n "],[8,[30,9,["Collection"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,26],null,[["@items","@partition","@nspace","@isPeerDetail"],[[30,9,["items"]],[30,6],[30,7],true]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,9,["Empty"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,27],null,[["@login"],[[30,1,["model","app","login","open"]]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,28],["routes.dc.peers.show.imported.empty.header"],[["name"],[[30,1,["model","peer","Name"]]]]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[1,[28,[35,28],["routes.dc.peers.show.imported.empty.body"],[["items","name","htmlSafe"],[[30,5,["length"]],[30,1,["model","peer","Name"]],true]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[10,"li"],[12],[1,"\\n"],[1," "],[8,[39,29],null,[["@text","@href","@icon","@iconPosition","@size"],["Documentation on Peers",[29,[[28,[37,30],["CONSUL_DOCS_URL"],null],"/connect/cluster-peering"]],"docs-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,29],null,[["@text","@href","@icon","@iconPosition","@size"],["Take the tutorial",[29,[[28,[37,30],["CONSUL_DOCS_URL"],null],"/connect/cluster-peering/create-manage-peering"]],"learn-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[9]]]]],[1,"\\n"]],[3,4,5,6,7]]],[1," "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]]],["route","api","sort","filters","items","partition","nspace","items","collection"],false,["route","routeName","data-loader","uri","hash","block-slot","app-error","let","or","sortBy","action","mut","if","status","split","kind","source","not-eq","searchproperty","reject-by","gt","collection","consul/service/search-bar","get","search","data-collection","consul/service/list","empty-state","t","hds/link/standalone","env"]]',moduleName:"consul-ui/templates/dc/peers/show/imported.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/peers/show/index",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"IJMk41B8",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[30,0,["transitionToImported"]]],null]],[1,"\\n"]],[1]]]]]],["route"],false,["route","routeName","did-insert"]]',moduleName:"consul-ui/templates/dc/peers/show/index.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/routing-config",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"ag2giQ2I",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/discovery-chain/${name}",[28,[37,4],null,[["partition","nspace","dc","name"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[30,1,["params","name"]]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,5],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[30,2,["data"]]],[[[8,[39,8],null,null,[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["breadcrumbs"]],[["default"],[[[[1,"\\n "],[10,"ol"],[12],[1,"\\n "],[10,"li"],[12],[10,3],[15,6,[28,[37,9],["dc.services"],null]],[12],[1,"All Services"],[13],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n "],[8,[30,1,["Title"]],null,[["@title"],[[30,3,["Chain","ServiceName"]]]],null],[1,"\\n "],[13],[1,"\\n "],[8,[39,10],null,[["@source","@withInfo"],[[28,[37,11],["routes.dc.routing-config.source"],null],true]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[10,0],[14,0,"container"],[12],[1,"\\n "],[8,[39,12],null,[["@chain"],[[30,3,["Chain"]]]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[]]]]],[1,"\\n"]],[3]]],[1," "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","loader","item"],false,["route","routeName","data-loader","uri","hash","block-slot","app-error","let","app-view","href-to","consul/source","t","consul/discovery-chain"]]',moduleName:"consul-ui/templates/dc/routing-config.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/services/index",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"k/tlhz7S",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/services",[28,[37,4],null,[["partition","nspace","dc"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,5],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n\\n"],[44,[[28,[37,4],null,[["value","change"],[[28,[37,8],[[33,9],"Status:asc"],null],[28,[37,10],[[30,0],[28,[37,11],[[33,9]],null]],[["value"],["target.selected"]]]]]],[28,[37,4],null,[["status","kind","source","searchproperty"],[[28,[37,4],null,[["value","change"],[[52,[33,13],[28,[37,14],[[33,13],","],null],[27]],[28,[37,10],[[30,0],[28,[37,11],[[33,13]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,4],null,[["value","change"],[[52,[33,15],[28,[37,14],[[33,15],","],null],[27]],[28,[37,10],[[30,0],[28,[37,11],[[33,15]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,4],null,[["value","change"],[[52,[33,16],[28,[37,14],[[33,16],","],null],[27]],[28,[37,10],[[30,0],[28,[37,11],[[33,16]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,4],null,[["value","change","default"],[[52,[28,[37,17],[[33,18],[27]],null],[28,[37,14],[[33,18],","],null],[30,0,["_searchProperties"]]],[28,[37,10],[[30,0],[28,[37,11],[[33,18]],null]],[["value"],["target.selectedItems"]]],[30,0,["_searchProperties"]]]]]]]],[28,[37,19],["Kind","connect-proxy",[30,2,["data"]]],null],[28,[37,8],[[30,1,["params","partition"]],[30,1,["model","user","token","Partition"]],"default"],null],[28,[37,8],[[30,1,["params","nspace"]],[30,1,["model","user","token","Namespace"]],"default"],null]],[[[1,"\\n "],[8,[39,20],null,null,[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n "],[8,[30,1,["Title"]],null,[["@title"],["Services"]],null],[1," "],[10,"em"],[12],[1,[28,[35,21],[[30,5,["length"]]],null]],[1," total"],[13],[1,"\\n "],[13],[1,"\\n "],[10,"label"],[14,"for","toolbar-toggle"],[12],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["toolbar"]],[["default"],[[[[1,"\\n"],[41,[28,[37,22],[[30,5,["length"]],0],null],[[[44,[[28,[37,23],[[30,5]],null]],[[[1," "],[8,[39,24],null,[["@sources","@partitions","@partition","@search","@onsearch","@sort","@filter"],[[28,[37,25],[[30,8],"ExternalSources"],null],[28,[37,25],[[30,8],"Partitions"],null],[30,6],[99,26,["@search"]],[28,[37,10],[[30,0],[28,[37,11],[[33,26]],null]],[["value"],["target.value"]]],[30,3],[30,4]]],null],[1,"\\n"]],[8]]]],[]],null],[1," "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,27],null,[["@type","@sort","@filters","@search","@items"],["service",[30,3,["value"]],[30,4],[99,26,["@search"]],[30,5]]],[["default"],[[[[1,"\\n "],[8,[30,9,["Collection"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,28],null,[["@items","@partition","@nspace"],[[30,9,["items"]],[30,6],[30,7]]],[["default"],[[[[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,9,["Empty"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,29],null,[["@login"],[[30,1,["model","app","login","open"]]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,30],["routes.dc.services.index.empty.header"],[["items"],[[30,5,["length"]]]]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[1,[28,[35,30],["routes.dc.services.index.empty.body"],[["items","canUseACLs","htmlSafe"],[[30,5,["length"]],[28,[37,31],["use acls"],null],true]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,32],null,[["@text","@href","@icon","@iconPosition","@size"],["Documentation on Services",[29,[[28,[37,33],["CONSUL_DOCS_URL"],null],"/commands/services"]],"docs-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,32],null,[["@text","@href","@icon","@iconPosition","@size"],["Take the tutorial",[29,[[28,[37,33],["CONSUL_DOCS_LEARN_URL"],null],"/consul/getting-started/services"]],"learn-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[9]]]]],[1,"\\n "]],[]]]]],[1,"\\n\\n "]],[]]]]],[1,"\\n\\n"]],[3,4,5,6,7]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","api","sort","filters","items","partition","nspace","items","collection"],false,["route","routeName","data-loader","uri","hash","block-slot","app-error","let","or","sortBy","action","mut","if","status","split","kind","source","not-eq","searchproperty","reject-by","app-view","format-number","gt","collection","consul/service/search-bar","get","search","data-collection","consul/service/list","empty-state","t","can","hds/link/standalone","env"]]',moduleName:"consul-ui/templates/dc/services/index.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/services/instance",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"UwadJzgF",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/service-instance/${id}/${node}/${name}/${peer}",[28,[37,4],null,[["partition","nspace","dc","id","node","name","peer"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[30,1,["params","id"]],[30,1,["params","node"]],[30,1,["params","name"]],[30,1,["params","peer"]]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,5],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["disconnected"]],[["default"],[[[[1,"\\n"],[41,[28,[37,8],[[30,2,["error","status"]],"404"],null],[[[1," "],[8,[39,9],[[4,[38,10],null,[["sticky"],[true]]]],[["@color"],["warning"]],[["default"],[[[[1,"\\n "],[8,[30,4,["Title"]],null,null,[["default"],[[[[1,"Warning!"]],[]]]]],[1,"\\n "],[8,[30,4,["Description"]],null,null,[["default"],[[[[1,"\\n This service has been deregistered and no longer exists in the catalog.\\n "]],[]]]]],[1,"\\n "]],[4]]]]],[1,"\\n"]],[]],[[[41,[28,[37,8],[[30,2,["error","status"]],"403"],null],[[[1," "],[8,[39,9],[[4,[38,10],null,[["sticky"],[true]]]],[["@color"],["critical"]],[["default"],[[[[1,"\\n "],[8,[30,5,["Title"]],null,null,[["default"],[[[[1,"Error!"]],[]]]]],[1,"\\n "],[8,[30,5,["Description"]],null,null,[["default"],[[[[1,"\\n You no longer have access to this service.\\n "]],[]]]]],[1,"\\n "]],[5]]]]],[1,"\\n"]],[]],[[[1," "],[8,[39,9],[[4,[38,10],null,[["sticky"],[true]]]],[["@color"],["critical"]],[["default"],[[[[1,"\\n "],[8,[30,6,["Title"]],null,null,[["default"],[[[[1,"Warning!"]],[]]]]],[1,"\\n "],[8,[30,6,["Description"]],null,null,[["default"],[[[[1,"\\n An error was returned whilst loading this data, refresh to try again.\\n "]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n "]],[]]]],[]]],[1," "]],[3]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[30,2,["data"]]],[[[41,[30,7,["IsOrigin"]],[[[1," "],[8,[39,12],null,[["@src","@onchange"],[[28,[37,3],["/${partition}/${nspace}/${dc}/proxy-instance/${id}/${node}/${name}",[28,[37,4],null,[["partition","nspace","dc","id","node","name"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[30,1,["params","id"]],[30,1,["params","node"]],[30,1,["params","name"]]]]]],null],[28,[37,13],[[30,0],[28,[37,14],[[33,15]],null]],[["value"],["data"]]]]],[["default"],[[[[1,"\\n"],[41,[30,8,["data","ServiceID"]],[[[1," "],[8,[39,12],null,[["@src","@onchange"],[[28,[37,3],["/${partition}/${nspace}/${dc}/service-instance/${id}/${node}/${name}/${peer}",[28,[37,4],null,[["partition","nspace","dc","id","node","name","peer"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[30,8,["data","ServiceID"]],[30,8,["data","NodeName"]],[30,8,["data","ServiceName"]],[30,1,["params","peer"]]]]]],null],[28,[37,13],[[30,0],[28,[37,14],[[33,16]],null]],[["value"],["data"]]]]],null],[1,"\\n"]],[]],null],[1," "]],[8]]]]],[1,"\\n"]],[]],null],[1," "],[8,[39,17],null,null,[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["breadcrumbs"]],[["default"],[[[[1,"\\n "],[10,"ol"],[12],[1,"\\n "],[10,"li"],[12],[10,3],[15,6,[28,[37,18],["dc.services"],[["params"],[[28,[37,4],null,[["peer"],[[27]]]]]]]],[12],[1,"All Services"],[13],[13],[1,"\\n "],[10,"li"],[12],[11,3],[16,6,[28,[37,18],["dc.services.show"],null]],[4,[38,19],[[28,[37,20],["Service (",[30,7,["Service","Service"]],")"],null]],null],[12],[1,"\\n Service ("],[1,[30,7,["Service","Service"]]],[1,")\\n "],[13],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n "],[8,[30,1,["Title"]],null,[["@title"],[[30,7,["Service","ID"]]]],null],[1,"\\n "],[13],[1,"\\n "],[8,[39,21],null,[["@item","@withInfo"],[[30,7],true]],null],[1,"\\n "],[8,[39,22],null,[["@item","@withInfo"],[[30,7],true]],null],[1,"\\n"],[41,[28,[37,8],[[33,15,["ServiceProxy","Mode"]],"transparent"],null],[[[1," "],[8,[39,23],null,null,null],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["nav"]],[["default"],[[[[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"Service Name"],[13],[1,"\\n "],[10,"dd"],[12],[10,3],[15,6,[29,[[28,[37,18],["dc.services.show",[30,7,["Service","Service"]]],null]]]],[12],[1,[30,7,["Service","Service"]]],[13],[13],[1,"\\n "],[13],[1,"\\n"],[41,[51,[30,7,["Node","Meta","synthetic-node"]]],[[[1," "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"Node Name"],[13],[1,"\\n "],[10,"dd"],[12],[10,3],[15,6,[29,[[28,[37,18],["dc.nodes.show",[30,7,["Node","Node"]]],null]]]],[12],[1,[30,7,["Node","Node"]]],[13],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[30,7,["Service","PeerName"]],[[[1," "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"Peer Name"],[13],[1,"\\n "],[10,"dd"],[12],[10,3],[15,6,[28,[37,18],["dc.peers.show",[30,7,["Service","PeerName"]]],[["params"],[[28,[37,4],null,[["peer"],[[27]]]]]]]],[12],[1,[30,7,["Service","PeerName"]]],[13],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n"],[44,[[28,[37,25],[[30,7,["Service","Address"]],[30,7,["Node","Address"]]],null]],[[[1," "],[8,[39,26],null,[["@value","@name"],[[30,9],"Address"]],[["default"],[[[[1,[30,9]]],[]]]]],[1,"\\n"]],[9]]],[1," "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,27],null,[["@items"],[[28,[37,28],[[28,[37,29],[[28,[37,4],null,[["label","href","selected"],["Health Checks",[28,[37,18],["dc.services.instance.healthchecks"],null],[28,[37,30],["dc.services.instance.healthchecks"],null]]]],[52,[28,[37,8],[[30,7,["Service","Kind"]],"mesh-gateway"],null],[28,[37,4],null,[["label","href","selected"],["Addresses",[28,[37,18],["dc.services.instance.addresses"],null],[28,[37,30],["dc.services.instance.addresses"],null]]]]],[52,[33,16],[28,[37,4],null,[["label","href","selected"],["Upstreams",[28,[37,18],["dc.services.instance.upstreams"],null],[28,[37,30],["dc.services.instance.upstreams"],null]]]]],[52,[33,16],[28,[37,4],null,[["label","href","selected"],["Exposed Paths",[28,[37,18],["dc.services.instance.exposedpaths"],null],[28,[37,30],["dc.services.instance.exposedpaths"],null]]]]],[28,[37,4],null,[["label","href","selected"],["Tags & Meta",[28,[37,18],["dc.services.instance.metadata"],null],[28,[37,30],["dc.services.instance.metadata"],null]]]]],null]],null]]],null],[1,"\\n "],[8,[39,31],null,[["@name","@model"],[[99,1,["@name"]],[28,[37,32],[[28,[37,4],null,[["proxy","meta","item"],[[33,16],[33,15],[30,7]]]],[30,1,["model"]]],null]]],[["default"],[[[[1,"\\n "],[46,[28,[37,34],null,null],null,null,null],[1,"\\n "]],[10]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[7]]],[1," "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]]],["route","loader","after","T","T","T","item","meta","address","o"],false,["route","routeName","data-loader","uri","hash","block-slot","app-error","if","eq","hds/toast","notification","let","data-source","action","mut","meta","proxy","app-view","href-to","tooltip","concat","consul/external-source","consul/kind","consul/transparent-proxy","unless","or","consul-copy-button","tab-nav","compact","array","is-href","outlet","assign","component","-outlet"]]',moduleName:"consul-ui/templates/dc/services/instance.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/services/instance/addresses",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"Uyz1biFQ",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n"],[44,[[28,[37,3],[[30,1,["model","item","Service","TaggedAddresses"]]],null]],[[[1," "],[10,0],[14,0,"tab-section"],[12],[1,"\\n"],[41,[28,[37,5],[[30,2,["length"]],0],null],[[[1," "],[8,[39,6],[[24,0,"consul-tagged-addresses"]],[["@items"],[[30,2]]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"th"],[12],[1,"Tag"],[13],[1,"\\n "],[10,"th"],[12],[1,"Address"],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["row"]],[["default"],[[[[1,"\\n"],[44,[[28,[37,8],[1,[30,3]],null]],[[[41,[30,5],[[[1," "],[10,"td"],[12],[1,"\\n "],[1,[28,[35,8],[0,[30,3]],null]],[41,[28,[37,9],[[28,[37,10],[[30,5,["Address"]],[33,11,["Address"]]],null],[28,[37,10],[[30,5,["Port"]],[33,11,["Port"]]],null]],null],[[[1," "],[10,"em"],[12],[1,"(default)"],[13]],[]],null],[1,"\\n "],[13],[1,"\\n "],[10,"td"],[12],[1,"\\n "],[1,[30,5,["Address"]]],[1,":"],[1,[30,5,["Port"]]],[1,"\\n "],[13],[1,"\\n"]],[]],null]],[5]]],[1," "]],[]]]]],[1,"\\n "]],[3,4]]]]],[1,"\\n"]],[]],[[[1," "],[10,2],[12],[1,"\\n There are no additional addresses.\\n "],[13],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n"]],[2]]]],[1]]]]],[1,"\\n"]],["route","items","taggedAddress","index","address"],false,["route","routeName","let","entries","if","gt","tabular-collection","block-slot","object-at","and","eq","item"]]',moduleName:"consul-ui/templates/dc/services/instance/addresses.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/services/instance/exposedpaths",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"2ZHEMt/5",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n"],[44,[[30,1,["model","proxy"]],[30,1,["model","meta"]]],[[[1," "],[10,0],[14,0,"tab-section"],[12],[1,"\\n"],[41,[28,[37,4],[[30,3,["ServiceProxy","Expose","Paths","length"]],0],null],[[[1," "],[1,[28,[35,5],["routes.dc.services.instance.exposedpaths.intro"],[["htmlSafe"],[true]]]],[1,"\\n "],[8,[39,6],null,[["@items","@address"],[[30,3,["ServiceProxy","Expose","Paths"]],[28,[37,7],[[30,2,["Service","Address"]],[30,2,["Node","Address"]]],null]]],null],[1,"\\n"]],[]],[[[1," "],[8,[39,8],null,null,[["default"],[[[[1,"\\n "],[8,[39,9],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[1,[28,[35,5],["routes.dc.services.instance.exposedpaths.empty.body"],[["htmlSafe"],[true]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n"]],[2,3]]]],[1]]]]]],["route","item","proxy"],false,["route","routeName","let","if","gt","t","consul/exposed-path/list","or","empty-state","block-slot"]]',moduleName:"consul-ui/templates/dc/services/instance/exposedpaths.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/services/instance/healthchecks",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"VEYB4gr9",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n"],[44,[[28,[37,3],[[28,[37,4],[[30,0],"syntheticNodeSearchPropertyFilter",[30,1,["model","item"]]],null],[33,5]],null]],[[[44,[[28,[37,6],null,[["value","change"],[[28,[37,7],[[33,8],"Status:asc"],null],[28,[37,4],[[30,0],[28,[37,9],[[33,8]],null]],[["value"],["target.selected"]]]]]],[28,[37,6],null,[["status","check","searchproperty"],[[28,[37,6],null,[["value","change"],[[52,[33,11],[28,[37,12],[[33,11],","],null],[27]],[28,[37,4],[[30,0],[28,[37,9],[[33,11]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,6],null,[["value","change"],[[52,[33,13],[28,[37,12],[[33,13],","],null],[27]],[28,[37,4],[[30,0],[28,[37,9],[[33,13]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,6],null,[["value","change","default"],[[52,[28,[37,14],[[33,15],[27]],null],[28,[37,12],[[33,15],","],null],[30,2]],[28,[37,4],[[30,0],[28,[37,9],[[33,15]],null]],[["value"],["target.selectedItems"]]],[30,2]]]]]]],[28,[37,3],[[28,[37,4],[[30,0],"syntheticNodeHealthCheckFilter",[30,1,["model","item"]]],null],[28,[37,16],[[28,[37,17],[[30,1,["model","item","Checks"]],[30,1,["model","proxy","Checks"]]],null],[30,1,["model","proxy","ServiceProxy","Expose","Checks"]]],null]],null]],[[[1," "],[10,0],[14,0,"tab-section"],[12],[1,"\\n\\n"],[41,[28,[37,18],[[30,5,["length"]],0],null],[[[1," "],[10,"input"],[14,1,"toolbar-toggle"],[14,4,"checkbox"],[12],[13],[1,"\\n "],[8,[39,19],null,[["@search","@onsearch","@sort","@filter"],[[99,20,["@search"]],[28,[37,4],[[30,0],[28,[37,9],[[33,20]],null]],[["value"],["target.value"]]],[30,3],[30,4]]],null],[1,"\\n"]],[]],null],[1,"\\n"],[44,[[28,[37,21],["Type","serf",[30,5]],null]],[[[41,[28,[37,22],[[30,6],[28,[37,23],[[30,6,["Status"]],"critical"],null]],null],[[[1," "],[8,[39,24],[[24,0,"mb-3 mt-2"]],[["@type","@color"],["inline","warning"]],[["default"],[[[[1,"\\n "],[8,[30,7,["Title"]],null,null,[["default"],[[[[1,[28,[35,25],["routes.dc.services.instance.healthchecks.critical-serf-notice.header"],null]]],[]]]]],[1,"\\n "],[8,[30,7,["Description"]],null,null,[["default"],[[[[1,[28,[35,25],["routes.dc.services.instance.healthchecks.critical-serf-notice.body"],[["htmlSafe"],[true]]]]],[]]]]],[1,"\\n "]],[7]]]]],[1,"\\n"]],[]],null]],[6]]],[1," "],[8,[39,26],null,[["@type","@sort","@filters","@search","@items"],["health-check",[30,3,["value"]],[30,4],[99,20,["@search"]],[30,5]]],[["default"],[[[[1,"\\n "],[8,[30,8,["Collection"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,27],null,[["@items"],[[30,8,["items"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,8,["Empty"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,28],null,null,[["default"],[[[[1,"\\n "],[8,[39,29],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[1,[28,[35,25],["routes.dc.services.instance.healthchecks.empty"],[["items","htmlSafe"],[[30,5,["length"]],true]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[8]]]]],[1,"\\n\\n "],[13],[1,"\\n"]],[3,4,5]]]],[2]]]],[1]]]]],[1,"\\n"]],["route","filteredSearchProperties","sort","filters","items","serf","A","collection"],false,["route","routeName","let","filter","action","searchProperties","hash","or","sortBy","mut","if","status","split","check","not-eq","searchproperty","merge-checks","array","gt","consul/health-check/search-bar","search","find-by","and","eq","hds/alert","t","data-collection","consul/health-check/list","empty-state","block-slot"]]',moduleName:"consul-ui/templates/dc/services/instance/healthchecks.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/services/instance/metadata",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"TXVP9+3G",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n"],[44,[[30,1,["model","item"]]],[[[1," "],[10,0],[14,0,"tab-section"],[12],[1,"\\n "],[10,"section"],[14,0,"tags"],[12],[1,"\\n "],[10,"h2"],[12],[1,"Tags"],[13],[1,"\\n"],[41,[28,[37,4],[[30,2,["Tags","length"]],0],null],[[[1," "],[8,[39,5],null,[["@item"],[[30,2]]],null],[1,"\\n"]],[]],[[[1," "],[8,[39,6],null,null,[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n There are no tags.\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n "],[10,"section"],[14,0,"metadata"],[12],[1,"\\n "],[10,"h2"],[12],[1,"Meta"],[13],[1,"\\n"],[41,[30,2,["Meta"]],[[[1," "],[8,[39,8],null,[["@items"],[[28,[37,9],[[30,2,["Meta"]]],null]]],null],[1,"\\n"]],[]],[[[1," "],[8,[39,6],null,null,[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n This instance has no metadata.\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n "],[13],[1,"\\n"]],[2]]]],[1]]]]],[1,"\\n"]],["route","item"],false,["route","routeName","let","if","gt","tag-list","empty-state","block-slot","consul/metadata/list","entries"]]',moduleName:"consul-ui/templates/dc/services/instance/metadata.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/services/instance/upstreams",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"uuOJKl7x",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[10,0],[14,0,"tab-section"],[12],[1,"\\n"],[44,[[28,[37,3],null,[["value","change"],[[28,[37,4],[[33,5],"DestinationName:asc"],null],[28,[37,6],[[30,0],[28,[37,7],[[33,5]],null]],[["value"],["target.selected"]]]]]],[28,[37,3],null,[["searchproperty"],[[28,[37,3],null,[["value","change","default"],[[52,[28,[37,9],[[33,10],[27]],null],[28,[37,11],[[33,10],","],null],[33,12]],[28,[37,6],[[30,0],[28,[37,7],[[33,10]],null]],[["value"],["target.selectedItems"]]],[33,12]]]]]]],[28,[37,4],[[30,1,["params","partition"]],[30,1,["model","user","token","Partition"]],"default"],null],[28,[37,4],[[30,1,["params","nspace"]],[30,1,["model","user","token","Namespace"]],"default"],null],[30,1,["params","dc"]],[30,1,["model","proxy"]],[30,1,["model","meta"]],[30,1,["model","proxy","Service","Proxy","Upstreams"]]],[[[41,[28,[37,13],[[30,9,["length"]],0],null],[[[1," "],[10,"input"],[14,1,"toolbar-toggle"],[14,4,"checkbox"],[12],[13],[1,"\\n "],[8,[39,14],null,[["@search","@onsearch","@searchproperties","@sort","@filter"],[[99,15,["@search"]],[28,[37,6],[[30,0],[28,[37,7],[[33,15]],null]],[["value"],["target.value"]]],[99,12,["@searchproperties"]],[30,2],[30,3]]],null],[1,"\\n"]],[]],null],[41,[28,[37,16],[[30,8,["ServiceProxy","Mode"]],"transparent"],null],[[[1," "],[8,[39,17],[[24,0,"mb-3 mt-2"]],[["@type","@color"],["inline","warning"]],[["default"],[[[[1,"\\n "],[8,[30,10,["Title"]],null,null,[["default"],[[[[1,[28,[35,18],["routes.dc.services.instance.upstreams.tproxy-mode.header"],null]]],[]]]]],[1,"\\n "],[8,[30,10,["Description"]],null,null,[["default"],[[[[1,"\\n "],[1,[28,[35,18],["routes.dc.services.instance.upstreams.tproxy-mode.body"],null]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,10,["Link::Standalone"]],null,[["@text","@href","@icon","@iconPosition","@size"],[[28,[37,18],["routes.dc.services.instance.upstreams.tproxy-mode.footer.text"],null],[29,[[28,[37,19],[[28,[37,20],["CONSUL_DOCS_URL"],null],[28,[37,18],["routes.dc.services.instance.upstreams.tproxy-mode.footer.link"],null]],null]]],"docs-link","trailing","small"]],null],[1,"\\n "]],[10]]]]],[1,"\\n"]],[]],null],[1," "],[8,[39,21],null,[["@type","@sort","@filters","@search","@items"],["upstream-instance",[30,2,["value"]],[30,3],[99,15,["@search"]],[30,9]]],[["default"],[[[[1,"\\n "],[8,[30,11,["Collection"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,22],null,[["@items","@dc","@nspace","@partition"],[[30,11,["items"]],[30,6],[30,5],[30,4]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,11,["Empty"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,23],null,null,[["default"],[[[[1,"\\n "],[8,[39,24],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[1,[28,[35,18],["routes.dc.services.instance.upstreams.empty"],[["items","htmlSafe"],[[30,9,["length"]],true]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[11]]]]],[1,"\\n"]],[2,3,4,5,6,7,8,9]]],[1," "],[13],[1,"\\n"]],[1]]]]]],["route","sort","filters","partition","nspace","dc","proxy","meta","items","A","collection"],false,["route","routeName","let","hash","or","sortBy","action","mut","if","not-eq","searchproperty","split","searchProperties","gt","consul/upstream-instance/search-bar","search","eq","hds/alert","t","concat","env","data-collection","consul/upstream-instance/list","empty-state","block-slot"]]',moduleName:"consul-ui/templates/dc/services/instance/upstreams.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/services/show",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"Y0GMHKaI",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/service-instances/for-service/${name}/${peer}",[28,[37,4],null,[["partition","nspace","dc","name","peer"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[30,1,["params","name"]],[30,1,["params","peer"]]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,5],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["disconnected"]],[["default"],[[[[1,"\\n"],[41,[28,[37,8],[[30,2,["error","status"]],"404"],null],[[[1," "],[8,[39,9],[[4,[38,10],null,[["sticky"],[true]]]],[["@color"],["warning"]],[["default"],[[[[1,"\\n "],[8,[30,4,["Title"]],null,null,[["default"],[[[[1,"Warning!"]],[]]]]],[1,"\\n "],[8,[30,4,["Description"]],null,null,[["default"],[[[[1,"This service has been deregistered and no longer exists in the catalog."]],[]]]]],[1,"\\n "]],[4]]]]],[1,"\\n"]],[]],[[[41,[28,[37,8],[[30,2,["error","status"]],"403"],null],[[[1," "],[8,[39,9],[[4,[38,10],null,[["sticky"],[true]]]],[["@color"],["critical"]],[["default"],[[[[1,"\\n "],[8,[30,5,["Title"]],null,null,[["default"],[[[[1,"Error!"]],[]]]]],[1,"\\n "],[8,[30,5,["Description"]],null,null,[["default"],[[[[1,"You no longer have access to this service."]],[]]]]],[1,"\\n "]],[5]]]]],[1,"\\n"]],[]],[[[1," "],[8,[39,9],[[4,[38,10],null,[["sticky"],[true]]]],[["@color"],["warning"]],[["default"],[[[[1,"\\n "],[8,[30,6,["Title"]],null,null,[["default"],[[[[1,"Warning!"]],[]]]]],[1,"\\n "],[8,[30,6,["Description"]],null,null,[["default"],[[[[1,"An error was returned whilst loading this data, refresh to try again."]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n "]],[]]]],[]]],[1," "]],[3]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[30,2,["data"]],[30,2,["data","firstObject"]],[30,1,["model","dc"]]],[[[1,"\\n"],[41,[30,8,["IsOrigin"]],[[[1," "],[8,[39,12],null,[["@src","@onchange"],[[28,[37,3],["/${partition}/${nspace}/${dc}/proxies/for-service/${name}",[28,[37,4],null,[["partition","nspace","dc","name"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[30,1,["params","name"]]]]]],null],[28,[37,13],[[30,0],[28,[37,14],[[33,15]],null]],[["value"],["data"]]]]],null],[1,"\\n"],[41,[28,[37,16],[[33,17]],null],[[[1," "],[8,[39,12],null,[["@src","@onchange"],[[28,[37,3],["/${partition}/${nspace}/${dc}/discovery-chain/${name}",[28,[37,4],null,[["partition","nspace","dc","name"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[30,1,["params","name"]]]]]],null],[28,[37,13],[[30,0],[28,[37,14],[[33,17]],null]],[["value"],["data"]]]]],null],[1,"\\n"]],[]],null],[1," "],[1,[28,[35,18],[[28,[37,19],[[30,0],"chain",[27]],null],[30,1,["params","dc"]]],null]],[1,"\\n"]],[]],null],[44,[[28,[37,4],null,[["topology","services","upstreams","instances","intentions","routing","tags"],[[28,[37,20],[[30,9,["MeshEnabled"]],[30,8,["IsMeshOrigin"]],[28,[37,21],[[28,[37,22],[[33,15,["length"]],0],null],[28,[37,8],[[30,8,["Service","Kind"]],"ingress-gateway"],null],[28,[37,8],[[30,8,["Service","Kind"]],"api-gateway"],null]],null],[28,[37,16],[[30,8,["Service","PeerName"]]],null]],null],[28,[37,20],[[28,[37,8],[[30,8,["Service","Kind"]],"terminating-gateway"],null],[28,[37,16],[[30,8,["Service","PeerName"]]],null]],null],[28,[37,20],[[28,[37,8],[[30,8,["Service","Kind"]],"ingress-gateway"],null],[28,[37,16],[[30,8,["Service","PeerName"]]],null]],null],true,[28,[37,20],[[28,[37,23],[[30,8,["Service","Kind"]],"terminating-gateway"],null],[28,[37,24],["read intention for service"],[["item"],[[30,8,["Service"]]]]],[28,[37,16],[[30,8,["Service","PeerName"]]],null]],null],[28,[37,20],[[30,9,["MeshEnabled"]],[30,8,["IsOrigin"]],[28,[37,16],[[30,8,["Service","PeerName"]]],null]],null],true]]]],[[[1," "],[8,[39,25],null,null,[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["notification"]],[["default"],[[[[1,"\\n "],[8,[39,26],null,[["@type","@status","@error"],[[30,12],[30,11],[30,14]]],null],[1,"\\n "]],[11,12,13,14]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["breadcrumbs"]],[["default"],[[[[1,"\\n "],[10,"ol"],[12],[1,"\\n "],[10,"li"],[12],[10,3],[15,6,[28,[37,27],["dc.services"],[["params"],[[28,[37,4],null,[["peer"],[[27]]]]]]]],[12],[1,"All Services"],[13],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n "],[8,[30,1,["Title"]],null,[["@title"],[[30,8,["Service","Service"]]]],null],[1,"\\n "],[13],[1,"\\n "],[8,[39,28],null,[["@item","@withInfo"],[[30,8,["Service"]],true]],null],[1,"\\n "],[8,[39,29],null,[["@item","@withInfo"],[[30,8,["Service"]],true]],null],[1,"\\n "],[8,[39,30],null,[["@item"],[[30,8,["Service"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["nav"]],[["default"],[[[[1,"\\n"],[41,[28,[37,23],[[30,8,["Service","Kind"]],"mesh-gateway"],null],[[[1," "],[8,[39,31],null,[["@items"],[[28,[37,32],[[28,[37,33],[[52,[30,10,["topology"]],[28,[37,4],null,[["label","href","selected"],["Topology",[28,[37,27],["dc.services.show.topology"],null],[28,[37,34],["dc.services.show.topology"],null]]]],""],[52,[30,10,["services"]],[28,[37,4],null,[["label","href","selected"],["Linked Services",[28,[37,27],["dc.services.show.services"],null],[28,[37,34],["dc.services.show.services"],null]]]],""],[52,[30,10,["upstreams"]],[28,[37,4],null,[["label","href","selected"],["Upstreams",[28,[37,27],["dc.services.show.upstreams"],null],[28,[37,34],["dc.services.show.upstreams"],null]]]],""],[52,[30,10,["instances"]],[28,[37,4],null,[["label","href","selected"],["Instances",[28,[37,27],["dc.services.show.instances"],null],[28,[37,34],["dc.services.show.instances"],null]]]],""],[52,[30,10,["intentions"]],[28,[37,4],null,[["label","href","selected"],["Intentions",[28,[37,27],["dc.services.show.intentions"],null],[28,[37,34],["dc.services.show.intentions"],null]]]],""],[52,[30,10,["routing"]],[28,[37,4],null,[["label","href","selected"],["Routing",[28,[37,27],["dc.services.show.routing"],null],[28,[37,34],["dc.services.show.routing"],null]]]],""],[52,[30,10,["tags"]],[28,[37,4],null,[["label","href","selected"],["Tags",[28,[37,27],["dc.services.show.tags"],null],[28,[37,34],["dc.services.show.tags"],null]]]],""]],null]],null]]],null],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[8,[39,12],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/ui-config",[28,[37,4],null,[["partition","nspace","dc"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]]]]]],null]]],[["default"],[[[[1,"\\n"],[41,[30,15,["data","dashboard_url_templates","service"]],[[[1," "],[8,[39,13],[[24,0,"external-dashboard"]],[["@href","@external"],[[28,[37,35],[[30,15,["data","dashboard_url_templates","service"]],[28,[37,4],null,[["Datacenter","Service"],[[30,9,["Name"]],[28,[37,4],null,[["Name","Namespace","Partition"],[[30,8,["Service","Service"]],[28,[37,21],[[30,8,["Service","Namespace"]],""],null],[28,[37,21],[[30,8,["Service","Partition"]],""],null]]]]]]]],null],true]],[["default"],[[[[1,"\\n Open dashboard\\n "]],[]]]]],[1,"\\n"]],[]],null],[1," "]],[15]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["content"]],[["default"],[[[[1,"\\n"],[41,[28,[37,21],[[28,[37,16],[[30,8,["IsOrigin"]]],null],[33,17]],null],[[[1," "],[8,[39,36],null,[["@name","@model"],[[99,1,["@name"]],[28,[37,37],[[28,[37,4],null,[["items","proxies","item","tabs"],[[30,7],[33,15],[30,8],[30,10]]]],[30,1,["model"]]],null]]],[["default"],[[[[1,"\\n "],[46,[28,[37,39],null,null],null,null,null],[1,"\\n "]],[16]]]]],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[10]]]],[7,8,9]]],[1," "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]]],["route","loader","after","T","T","T","items","item","dc","tabs","status","type","item","error","config","o"],false,["route","routeName","data-loader","uri","hash","block-slot","app-error","if","eq","hds/toast","notification","let","data-source","action","mut","proxies","not","chain","did-insert","set","and","or","gt","not-eq","can","app-view","topology-metrics/notifications","href-to","consul/external-source","consul/kind","consul/peer/info","tab-nav","compact","array","is-href","render-template","outlet","assign","component","-outlet"]]',moduleName:"consul-ui/templates/dc/services/show.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/services/show/index",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"eJ7jOopO",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n"],[41,[30,1,["model","tabs","topology"]],[[[1," "],[1,[28,[35,3],[[28,[37,4],["replaceWith","dc.services.show.topology"],null]],null]],[1,"\\n"]],[]],[[[41,[30,1,["model","tabs","upstreams"]],[[[1," "],[1,[28,[35,3],[[28,[37,4],["replaceWith","dc.services.show.upstreams"],null]],null]],[1,"\\n"]],[]],[[[41,[30,1,["model","tabs","services"]],[[[1," "],[1,[28,[35,3],[[28,[37,4],["replaceWith","dc.services.show.services"],null]],null]],[1,"\\n"]],[]],[[[1," "],[1,[28,[35,3],[[28,[37,4],["replaceWith","dc.services.show.instances"],null]],null]],[1,"\\n"]],[]]]],[]]]],[]]]],[1]]]]],[1,"\\n"]],["route"],false,["route","routeName","if","did-insert","route-action"]]',moduleName:"consul-ui/templates/dc/services/show/index.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/services/show/instances",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"MHlhY9We",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n"],[10,0],[14,0,"tab-section"],[12],[1,"\\n"],[44,[[28,[37,3],null,[["value","change"],[[28,[37,4],[[33,5],"Status:asc"],null],[28,[37,6],[[30,0],[28,[37,7],[[33,5]],null]],[["value"],["target.selected"]]]]]],[28,[37,3],null,[["status","source","searchproperty"],[[28,[37,3],null,[["value","change"],[[52,[33,9],[28,[37,10],[[33,9],","],null],[27]],[28,[37,6],[[30,0],[28,[37,7],[[33,9]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,3],null,[["value","change"],[[52,[33,11],[28,[37,10],[[33,11],","],null],[27]],[28,[37,6],[[30,0],[28,[37,7],[[33,11]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,3],null,[["value","change","default"],[[52,[28,[37,12],[[33,13],[27]],null],[28,[37,10],[[33,13],","],null],[33,14]],[28,[37,6],[[30,0],[28,[37,7],[[33,13]],null]],[["value"],["target.selectedItems"]]],[33,14]]]]]]],[30,1,["model","items"]],[30,1,["model","proxies","firstObject"]]],[[[41,[28,[37,15],[[30,4,["length"]],0],null],[[[1," "],[10,"input"],[14,1,"toolbar-toggle"],[14,4,"checkbox"],[12],[13],[1,"\\n "],[8,[39,16],null,[["@sources","@search","@onsearch","@sort","@filter"],[[28,[37,17],[[28,[37,18],[[30,4]],null],"ExternalSources"],null],[99,19,["@search"]],[28,[37,6],[[30,0],[28,[37,7],[[33,19]],null]],[["value"],["target.value"]]],[30,2],[30,3]]],null],[1,"\\n"]],[]],null],[41,[30,5,["ServiceName"]],[[[1," "],[8,[39,20],null,[["@src","@onchange"],[[28,[37,21],["/${partition}/${nspace}/${dc}/service-instances/for-service/${name}/${peer}",[28,[37,3],null,[["partition","nspace","dc","name","peer"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[30,5,["ServiceName"]],[30,1,["params","peer"]]]]]],null],[28,[37,6],[[30,0],[28,[37,7],[[33,22]],null]],[["value"],["data"]]]]],null],[1,"\\n"]],[]],null],[1," "],[8,[39,23],null,[["@type","@sort","@filters","@search","@items"],["service-instance",[30,2,["value"]],[30,3],[99,19,["@search"]],[30,4]]],[["default"],[[[[1,"\\n "],[8,[30,6,["Collection"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,24],null,[["@routeName","@items","@proxies"],["dc.services.instance",[30,6,["items"]],[99,22,["@proxies"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,6,["Empty"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,25],null,null,[["default"],[[[[1,"\\n "],[8,[39,26],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[1,[28,[35,27],["routes.dc.services.show.instances.empty"],[["items","htmlSafe"],[[30,4,["length"]],true]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n"]],[2,3,4,5]]],[13],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","sort","filters","items","proxyMeta","collection"],false,["route","routeName","let","hash","or","sortBy","action","mut","if","status","split","source","not-eq","searchproperty","searchProperties","gt","consul/service-instance/search-bar","get","collection","search","data-source","uri","proxies","data-collection","consul/service-instance/list","empty-state","block-slot","t"]]',moduleName:"consul-ui/templates/dc/services/show/instances.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/services/show/intentions",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"NPdMmDjz",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@name","@model"],[[99,1,["@name"]],[30,1,["model"]]]],[["default"],[[[[1,"\\n "],[46,[28,[37,4],null,null],null,null,null],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","o"],false,["route","routeName","outlet","component","-outlet"]]',moduleName:"consul-ui/templates/dc/services/show/intentions.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/services/show/intentions/edit",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"p1PxhBqH",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n"],[44,[[28,[37,3],[[28,[37,4],["write intention for service"],[["item"],[[33,5,["Service"]]]]]],null]],[[[1," "],[8,[39,6],null,[["@src"],[[28,[37,7],["/${partition}/${nspace}/${dc}/intention/${id}",[28,[37,8],null,[["partition","nspace","dc","id"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[28,[37,9],[[30,1,["params","intention_id"]],""],null]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,10],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,11],null,[["@error","@login"],[[30,3,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,10],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[30,3,["data"]]],[[[1," "],[8,[39,12],null,[["@readonly","@item","@dc","@nspace","@partition","@autofill","@onsubmit"],[[30,2],[30,4],[30,1,["model","dc"]],[30,1,["params","nspace"]],[30,1,["params","partition"]],[28,[37,8],null,[["DestinationName"],[[30,1,["params","name"]]]]],[28,[37,13],["dc.services.show.intentions.index"],null]]],null],[1,"\\n"]],[4]]],[1," "]],[]]]]],[1,"\\n"]],[3]]]]],[1,"\\n"]],[2]]]],[1]]]]],[1,"\\n"]],["route","readOnly","loader","item"],false,["route","routeName","let","not","can","item","data-loader","uri","hash","or","block-slot","error-state","consul/intention/form","transition-to"]]',moduleName:"consul-ui/templates/dc/services/show/intentions/edit.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/services/show/intentions/index",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"wTdxLnel",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/intentions/for-service/${slug}",[28,[37,4],null,[["partition","nspace","dc","slug"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[30,1,["params","name"]]]]]],null]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@error"],[[30,2,["error"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[28,[37,4],null,[["value","change"],[[28,[37,8],[[33,9],"Action:asc"],null],[28,[37,10],[[30,0],[28,[37,11],[[33,9]],null]],[["value"],["target.selected"]]]]]],[28,[37,4],null,[["access","searchproperty"],[[28,[37,4],null,[["value","change"],[[52,[33,13],[28,[37,14],[[33,13],","],null],[27]],[28,[37,10],[[30,0],[28,[37,11],[[33,13]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,4],null,[["value","change","default"],[[52,[28,[37,15],[[33,16],[27]],null],[28,[37,14],[[33,16],","],null],[33,17]],[28,[37,10],[[30,0],[28,[37,11],[[33,16]],null]],[["value"],["target.selectedItems"]]],[33,17]]]]]]],[30,2,["data"]],[30,1,["model","item"]]],[[[1," "],[10,0],[14,0,"tab-section"],[12],[1,"\\n"],[41,[28,[37,18],["create intention for service"],[["item"],[[30,6,["Service"]]]]],[[[1," "],[8,[39,19],null,[["@target"],["app-view-actions"]],[["default"],[[[[1,"\\n "],[8,[39,20],null,[["@text","@route"],["Create","dc.services.show.intentions.create"]],null],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[41,[28,[37,21],[[30,5,["length"]],0],null],[[[1," "],[8,[39,22],null,[["@search","@onsearch","@sort","@filter"],[[99,23,["@search"]],[28,[37,10],[[30,0],[28,[37,11],[[33,23]],null]],[["value"],["target.value"]]],[30,3],[30,4]]],null],[1,"\\n"]],[]],null],[1," "],[8,[39,24],null,[["@sink","@type","@ondelete"],[[28,[37,3],["/${partition}/${dc}/${nspace}/intention/",[28,[37,4],null,[["partition","nspace","dc"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]]]]]],null],"intention",[99,25,["@ondelete"]]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,26],null,[["@type","@sort","@filters","@search","@items"],["intention",[30,3,["value"]],[30,4],[99,23,["@search"]],[30,5]]],[["default"],[[[[1,"\\n "],[8,[30,8,["Collection"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,27],null,[["@items","@check","@delete"],[[30,8,["items"]],[99,23,["@check"]],[30,7,["delete"]]]],[["default"],[[[[1,"\\n "],[8,[30,9,["CustomResourceNotice"]],null,null,null],[1,"\\n "],[8,[30,9,["CheckNotice"]],null,null,null],[1,"\\n "],[8,[30,9,["Table"]],null,[["@routeName"],["dc.services.show.intentions.edit"]],null],[1,"\\n "]],[9]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,8,["Empty"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,28],null,[["@login"],[[30,1,["model","app","login","open"]]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,29],["routes.dc.services.show.intentions.index.empty.header"],[["items"],[[30,5,["length"]]]]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[1,[28,[35,29],["routes.dc.services.show.intentions.index.empty.body"],[["items","canUseACLs","htmlSafe"],[[30,5,["length"]],[28,[37,18],["use acls"],null],true]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,30],null,[["@text","@href","@icon","@iconPosition","@size"],["Documentation on intentions",[29,[[28,[37,31],["CONSUL_DOCS_URL"],null],"/commands/intention"]],"docs-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,30],null,[["@text","@href","@icon","@iconPosition","@size"],["Take the tutorial",[29,[[28,[37,31],["CONSUL_DOCS_LEARN_URL"],null],"/consul/getting-started/connect"]],"learn-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[8]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[7]]]]],[1,"\\n "],[13],[1,"\\n"]],[3,4,5,6]]],[1," "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","api","sort","filters","items","item","writer","collection","list"],false,["route","routeName","data-loader","uri","hash","block-slot","error-state","let","or","sortBy","action","mut","if","access","split","not-eq","searchproperty","searchProperties","can","portal","hds/button","gt","consul/intention/search-bar","search","data-writer","refresh-route","data-collection","consul/intention/list","empty-state","t","hds/link/standalone","env"]]',moduleName:"consul-ui/templates/dc/services/show/intentions/index.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/services/show/routing",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"l1rtBpJx",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/discovery-chain/${name}",[28,[37,4],null,[["partition","nspace","dc","name"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[30,1,["params","name"]]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,5],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n "],[10,0],[14,0,"tab-section"],[12],[1,"\\n "],[8,[39,7],null,[["@chain"],[[30,2,["data","Chain"]]]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","loader"],false,["route","routeName","data-loader","uri","hash","block-slot","app-error","consul/discovery-chain"]]',moduleName:"consul-ui/templates/dc/services/show/routing.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/services/show/services",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"dmCrfo63",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/gateways/for-service/${name}",[28,[37,4],null,[["partition","nspace","dc","name"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[30,1,["params","name"]]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,5],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n "],[10,0],[14,0,"tab-section"],[12],[1,"\\n"],[44,[[28,[37,4],null,[["value","change"],[[28,[37,8],[[33,9],"Status:asc"],null],[28,[37,10],[[30,0],[28,[37,11],[[33,9]],null]],[["value"],["target.selected"]]]]]],[28,[37,4],null,[["instance","searchproperty"],[[28,[37,4],null,[["value","change"],[[52,[33,13],[28,[37,14],[[33,13],","],null],[27]],[28,[37,10],[[30,0],[28,[37,11],[[33,13]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,4],null,[["value","change","default"],[[52,[28,[37,15],[[33,16],[27]],null],[28,[37,14],[[33,16],","],null],[33,17]],[28,[37,10],[[30,0],[28,[37,11],[[33,16]],null]],[["value"],["target.selectedItems"]]],[33,17]]]]]]],[30,2,["data"]]],[[[41,[28,[37,18],[[30,5,["length"]],0],null],[[[1," "],[10,"input"],[14,1,"toolbar-toggle"],[14,4,"checkbox"],[12],[13],[1,"\\n "],[8,[39,19],null,[["@search","@onsearch","@sort","@filter"],[[99,20,["@search"]],[28,[37,10],[[30,0],[28,[37,11],[[33,20]],null]],[["value"],["target.value"]]],[30,3],[30,4]]],null],[1,"\\n"]],[]],null],[1," "],[8,[39,21],null,[["@type","@sort","@filters","@search","@items"],["service",[30,3,["value"]],[30,4],[99,20,["@search"]],[30,5]]],[["default"],[[[[1,"\\n "],[8,[30,6,["Collection"]],null,null,[["default"],[[[[1,"\\n "],[1,[28,[35,22],["routes.dc.services.show.services.intro"],[["htmlSafe"],[true]]]],[1,"\\n "],[8,[39,23],null,[["@nspace","@partition","@items"],[[28,[37,8],[[30,1,["params","nspace"]],[30,1,["model","user","token","Namespace"]],"default"],null],[28,[37,8],[[30,1,["params","partition"]],[30,1,["model","user","token","Partition"]],"default"],null],[30,6,["items"]]]],[["default"],[[[[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,6,["Empty"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,24],null,null,[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[1,[28,[35,22],["routes.dc.services.show.services.empty"],[["items","htmlSafe"],[[30,5,["length"]],true]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n"]],[3,4,5]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","loader","sort","filters","items","collection"],false,["route","routeName","data-loader","uri","hash","block-slot","app-error","let","or","sortBy","action","mut","if","instance","split","not-eq","searchproperty","searchProperties","gt","consul/upstream/search-bar","search","data-collection","t","consul/service/list","empty-state"]]',moduleName:"consul-ui/templates/dc/services/show/services.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/services/show/tags",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"dY7xSJxb",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[10,0],[14,0,"tab-section"],[12],[1,"\\n"],[44,[[28,[37,3],[[28,[37,4],["Tags",[30,1,["model","items"]]],null]],null]],[[[41,[28,[37,6],[[30,2,["length"]],0],null],[[[1," "],[8,[39,7],null,[["@item"],[[28,[37,8],null,[["Tags"],[[30,2]]]]]],null],[1,"\\n"]],[]],[[[1," "],[8,[39,9],null,null,[["default"],[[[[1,"\\n "],[8,[39,10],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,11],["routes.dc.services.show.tags.empty.header"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,10],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[1,[28,[35,11],["routes.dc.services.show.tags.empty.body"],[["htmlSafe"],[true]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]]]],[2]]],[1," "],[13],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","tags"],false,["route","routeName","let","flatten","map-by","if","gt","tag-list","hash","empty-state","block-slot","t"]]',moduleName:"consul-ui/templates/dc/services/show/tags.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/services/show/topology",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"ezCjemo1",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/topology/${name}/${kind}",[28,[37,4],null,[["partition","nspace","dc","name","kind"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[30,1,["params","name"]],[28,[37,5],[[30,1,["model","items","firstObject","Service","Kind"]],""],null]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,6],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,6],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[30,1,["params","nspace"]],[30,1,["model","dc"]],[30,1,["model","items"]],[30,2,["data"]]],[[[1," "],[10,0],[14,0,"tab-section"],[12],[1,"\\n\\n "],[10,0],[14,0,"topology-notices"],[12],[1,"\\n "],[8,[39,9],null,[["@expanded"],[true]],[["default"],[[[[1,"\\n"],[44,[[28,[37,10],[[28,[37,11],[[28,[37,11],["filtered-by-acls",[28,[37,5],[false,[30,6,["FilteredByACLs"]]],null]],null],[28,[37,11],["default-allow",[28,[37,5],[false,[28,[37,12],[[30,4,["DefaultACLPolicy"]],"allow"],null]],null]],null],[28,[37,11],["wildcard-intention",[28,[37,5],[false,[30,6,["wildcardIntention"]]],null]],null],[28,[37,11],["not-defined-intention",[28,[37,5],[false,[30,6,["notDefinedIntention"]]],null]],null],[28,[37,11],["no-dependencies",[28,[37,5],[false,[28,[37,13],[[30,6,["noDependencies"]],[28,[37,14],["use acls"],null]],null]],null]],null],[28,[37,11],["acls-disabled",[28,[37,5],[false,[28,[37,13],[[30,6,["noDependencies"]],[28,[37,15],[[28,[37,14],["use acls"],null]],null]],null]],null]],null]],null]],null]],[[[1,"\\n"],[44,[[28,[37,16],[false,[28,[37,17],[[30,8]],null]],null]],[[[1,"\\n"],[42,[28,[37,19],[[30,8]],null],null,[[[41,[30,10],[[[1," "],[8,[30,7,["Details"]],null,[["@auto"],[false]],[["default"],[[[[1,"\\n "],[8,[39,21],[[16,1,[30,12,["id"]]],[24,0,"mb-3 mt-2 topology-metrics-notice"]],[["@type","@color"],["inline",[52,[28,[37,22],[[30,11],[28,[37,11],["filtered-by-acls","no-dependencies"],null]],null],"neutral","warning"]]],[["default"],[[[[1,"\\n "],[8,[30,13,["Title"]],null,null,[["default"],[[[[1,"\\n "],[1,[28,[35,23],[[28,[37,24],[[30,1,["t"]],"notice.${prop}.header",[28,[37,4],null,[["prop"],[[30,11]]]]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n"],[41,[30,7,["expanded"]],[[[1," "],[8,[30,13,["Description"]],null,null,[["default"],[[[[1,"\\n "],[1,[28,[35,23],[[28,[37,24],[[30,1,["t"]],"notice.${prop}.body",[28,[37,4],null,[["prop"],[[30,11]]]]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[41,[28,[37,13],[[30,7,["expanded"]],[28,[37,25],[[30,11],"filtered-by-acls"],null]],null],[[[41,[28,[37,22],[[30,11],[28,[37,11],["wildcard-intention","default-allow","no-intentions"],null]],null],[[[1," "],[8,[30,13,["Button"]],null,[["@color","@size","@route","@text","@icon"],["secondary","small","dc.services.show.intentions",[28,[37,23],[[28,[37,24],[[30,1,["t"]],"notice.${prop}.footer.link-text",[28,[37,4],null,[["prop"],[[30,11]]]]],null]],null],[28,[37,23],[[28,[37,24],[[30,1,["t"]],"notice.${prop}.footer.icon",[28,[37,4],null,[["prop"],[[30,11]]]]],null]],null]]],null],[1,"\\n"]],[]],[[[1," "],[8,[30,13,["Link::Standalone"]],null,[["@text","@href","@icon","@iconPosition"],[[28,[37,23],[[28,[37,24],[[30,1,["t"]],"notice.${prop}.footer.link-text",[28,[37,4],null,[["prop"],[[30,11]]]]],null]],null],[28,[37,23],[[28,[37,24],[[30,1,["t"]],"notice.${prop}.footer.link",[28,[37,4],null,[["prop"],[[30,11]]]]],null]],null],"docs-link","trailing"]],null],[1,"\\n"]],[]]]],[]],null],[1," "]],[13]]]]],[1,"\\n "]],[12]]]]],[1,"\\n"]],[]],null]],[10,11]],null],[1,"\\n"],[41,[28,[37,26],[[30,9,["length"]],2],null],[[[1," "],[8,[30,7,["Action"]],[[4,[38,27],["click",[30,7,["toggle"]]],null]],null,[["default"],[[[[1,"\\n "],[1,[28,[35,23],[[28,[37,24],[[30,1,["t"]],"notices.${expanded}",[28,[37,4],null,[["expanded"],[[52,[30,7,["expanded"]],"close","open"]]]]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[1,"\\n"]],[9]]]],[8]]],[1," "]],[7]]]]],[1,"\\n\\n "],[13],[1,"\\n\\n\\n "],[8,[39,28],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/ui-config",[28,[37,4],null,[["partition","nspace","dc"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]]]]]],null]]],[["default"],[[[[1,"\\n"],[41,[30,14,["data"]],[[[1,"\\n "],[8,[39,29],null,[["@nspace","@dc","@service","@topology","@metricsHref","@isRemoteDC","@hasMetricsProvider","@oncreate"],[[30,3],[30,4],[30,5,["firstObject"]],[30,6],[28,[37,30],[[30,14,["data","dashboard_url_templates","service"]],[28,[37,4],null,[["Datacenter","Service"],[[30,4,["Name"]],[28,[37,4],null,[["Name","Namespace","Partition"],[[30,5,["firstObject","Name"]],[28,[37,5],[[30,5,["firstObject","Namespace"]],""],null],[28,[37,5],[[30,5,["firstObject","Partition"]],""],null]]]]]]]],null],[28,[37,15],[[30,4,["Local"]]],null],[28,[37,26],[[30,14,["data","metrics_provider","length"]],0],null],[28,[37,31],["createIntention"],null]]],null],[1,"\\n\\n"]],[]],null],[1," "]],[14]]]]],[1,"\\n "],[13],[1,"\\n"]],[3,4,5,6]]],[1," "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","loader","nspace","dc","items","topology","disclosure","notices","noticesEnabled","enabled","prop","details","A","config"],false,["route","routeName","data-loader","uri","hash","or","block-slot","app-error","let","disclosure","from-entries","array","eq","and","can","not","without","values","each","-each-in","if","hds/alert","includes","compute","fn","not-eq","gt","on","data-source","topology-metrics","render-template","route-action"]]',moduleName:"consul-ui/templates/dc/services/show/topology.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/services/show/upstreams",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"Mpl+Le50",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/gateways/for-service/${name}",[28,[37,4],null,[["partition","nspace","dc","name"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[30,1,["params","name"]]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,5],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n "],[10,0],[14,0,"tab-section"],[12],[1,"\\n"],[44,[[28,[37,4],null,[["value","change"],[[28,[37,8],[[33,9],"Status:asc"],null],[28,[37,10],[[30,0],[28,[37,11],[[33,9]],null]],[["value"],["target.selected"]]]]]],[28,[37,4],null,[["instance","searchproperty"],[[28,[37,4],null,[["value","change"],[[52,[33,13],[28,[37,14],[[33,13],","],null],[27]],[28,[37,10],[[30,0],[28,[37,11],[[33,13]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,4],null,[["value","change","default"],[[52,[28,[37,15],[[33,16],[27]],null],[28,[37,14],[[33,16],","],null],[33,17]],[28,[37,10],[[30,0],[28,[37,11],[[33,16]],null]],[["value"],["target.selectedItems"]]],[33,17]]]]]]],[28,[37,8],[[30,1,["params","partition"]],[30,1,["model","user","token","Partition"]],"default"],null],[28,[37,8],[[30,1,["params","nspace"]],[30,1,["model","user","token","Namespace"]],"default"],null],[30,1,["params","dc"]],[30,2,["data"]]],[[[41,[28,[37,18],[[30,8,["length"]],0],null],[[[1," "],[10,"input"],[14,1,"toolbar-toggle"],[14,4,"checkbox"],[12],[13],[1,"\\n "],[8,[39,19],null,[["@search","@onsearch","@sort","@filter"],[[99,20,["@search"]],[28,[37,10],[[30,0],[28,[37,11],[[33,20]],null]],[["value"],["target.value"]]],[30,3],[30,4]]],null],[1,"\\n"]],[]],null],[1," "],[1,[28,[35,21],["routes.dc.services.show.upstreams.intro"],[["htmlSafe"],[true]]]],[1,"\\n "],[8,[39,22],null,[["@type","@sort","@filters","@search","@items"],["service",[30,3,["value"]],[30,4],[99,20,["@search"]],[30,8]]],[["default"],[[[[1,"\\n "],[8,[30,9,["Collection"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,23],null,[["@items","@dc","@nspace","@partition"],[[30,9,["items"]],[30,7],[30,6],[30,5]]],[["default"],[[[[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,9,["Empty"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,24],null,null,[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[1,[28,[35,21],["routes.dc.services.show.upstreams.empty"],[["items","htmlSafe"],[[30,8,["length"]],true]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[9]]]]],[1,"\\n"]],[3,4,5,6,7,8]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","loader","sort","filters","partition","nspace","dc","items","collection"],false,["route","routeName","data-loader","uri","hash","block-slot","app-error","let","or","sortBy","action","mut","if","instance","split","not-eq","searchproperty","searchProperties","gt","consul/upstream/search-bar","search","t","data-collection","consul/upstream/list","empty-state"]]',moduleName:"consul-ui/templates/dc/services/show/upstreams.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/show",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"cTe8wXVf",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,null,[["default"],[[[[1,"\\n "],[8,[39,3],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n "],[8,[30,1,["Title"]],null,[["@title"],[[28,[37,4],[[28,[37,5],[[30,1,["t"]],"title"],null]],null]]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,3],null,[["@name"],["toolbar"]],[["default"],[[[[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,3],null,[["@name"],["nav"]],[["default"],[[[[1,"\\n\\n"],[44,[[28,[37,7],[[28,[37,8],[[28,[37,8],["serverstatus",[28,[37,4],[[28,[37,5],[[30,1,["exists"]],"serverstatus"],null]],null]],null],[28,[37,8],["cataloghealth",false],null],[28,[37,8],["license",[28,[37,4],[[28,[37,5],[[30,1,["exists"]],"license"],null]],null]],null]],null]],null]],[[[1,"\\n"],[44,[[28,[37,9],[false,[28,[37,10],[[30,2]],null]],null]],[[[1,"\\n"],[41,[28,[37,12],[[30,3,["length"]],1],null],[[[1," "],[8,[39,13],null,[["@items"],[[28,[37,14],[[28,[37,8],[[52,[30,2,["serverstatus"]],[28,[37,15],null,[["label","href","selected"],[[28,[37,4],[[28,[37,5],[[30,1,["t"]],"serverstatus.title"],null]],null],[28,[37,16],["dc.show.serverstatus"],null],[28,[37,17],["dc.show.serverstatus"],null]]]],""],[52,[30,2,["cataloghealth"]],[28,[37,15],null,[["label","href","selected"],[[28,[37,4],[[28,[37,5],[[30,1,["t"]],"cataloghealth.title"],null]],null],[28,[37,16],["dc.show.cataloghealth"],null],[28,[37,17],["dc.show.cataloghealth"],null]]]],""],[52,[30,2,["license"]],[28,[37,15],null,[["label","href","selected"],[[28,[37,4],[[28,[37,5],[[30,1,["t"]],"license.title"],null]],null],[28,[37,16],["dc.show.license"],null],[28,[37,17],["dc.show.license"],null]]]]],""],null]],null]]],null],[1,"\\n"]],[]],null],[1,"\\n"]],[3]]]],[2]]],[1," "]],[]]]]],[1,"\\n "],[8,[39,3],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,18],null,[["@name","@model"],[[99,1,["@name"]],[30,1,["model"]]]],[["default"],[[[[1,"\\n "],[46,[28,[37,20],null,null],null,null,null],[1,"\\n "]],[4]]]]],[1,"\\n "]],[]]]]],[1,"\\n\\n "]],[]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","tabs","tabsEnabled","o"],false,["route","routeName","app-view","block-slot","compute","fn","let","from-entries","array","without","values","if","gt","tab-nav","compact","hash","href-to","is-href","outlet","component","-outlet"]]',moduleName:"consul-ui/templates/dc/show.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/show/index",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"vE8aBvmc",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["replaceWith",[52,[28,[37,5],["access overview"],null],"dc.show.serverstatus","dc.services.index"]],null]],null]],[1,"\\n"]],[1]]]]],[1,"\\n\\n"]],["route"],false,["route","routeName","did-insert","route-action","if","can"]]',moduleName:"consul-ui/templates/dc/show/index.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/show/license",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"IQuLUg96",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/license",[28,[37,4],null,[["partition","nspace","dc"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]]]]]],null]]],[["default"],[[[[1,"\\n\\n"],[44,[[30,2,["data"]]],[[[1," "],[8,[39,6],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,6],null,[["@name"],["disconnected"]],[["default"],[[[[1,"\\n"],[41,[28,[37,9],[[30,2,["error","status"]],"404"],null],[[[1," "],[8,[39,10],[[4,[38,11],null,[["sticky"],[true]]]],[["@color"],["warning"]],[["default"],[[[[1,"\\n "],[8,[30,5,["Title"]],null,null,[["default"],[[[[1,"Warning!"]],[]]]]],[1,"\\n "],[8,[30,5,["Description"]],null,null,[["default"],[[[[1,"This service has been deregistered and no longer exists in the catalog."]],[]]]]],[1,"\\n "]],[5]]]]],[1,"\\n"]],[]],[[[41,[28,[37,9],[[30,2,["error","status"]],"403"],null],[[[1," "],[8,[39,10],[[4,[38,11],null,[["sticky"],[true]]]],[["@color"],["critical"]],[["default"],[[[[1,"\\n "],[8,[30,6,["Title"]],null,null,[["default"],[[[[1,"Error!"]],[]]]]],[1,"\\n "],[8,[30,6,["Description"]],null,null,[["default"],[[[[1,"You no longer have access to this service."]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n"]],[]],[[[1," "],[8,[39,10],[[4,[38,11],null,[["sticky"],[true]]]],[["@color"],["warning"]],[["default"],[[[[1,"\\n "],[8,[30,7,["Title"]],null,null,[["default"],[[[[1,"Warning!"]],[]]]]],[1,"\\n "],[8,[30,7,["Description"]],null,null,[["default"],[[[[1,"An error was returned whilst loading this data, refresh to try again."]],[]]]]],[1,"\\n "]],[7]]]]],[1,"\\n "]],[]]]],[]]],[1," "]],[4]]]]],[1,"\\n\\n "],[8,[39,6],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n "],[10,0],[14,0,"tab-section"],[12],[1,"\\n "],[10,"section"],[15,0,[28,[37,12],["validity",[28,[37,13],["valid",[30,3,["Valid"]]],null]],null]],[12],[1,"\\n "],[10,"header"],[12],[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,14],[[28,[37,15],[[30,1,["t"]],"expiry.header"],null]],null]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n\\n "],[10,2],[12],[1,"\\n "],[1,[28,[35,14],[[28,[37,15],[[30,1,["t"]],"expiry.${type}.body",[28,[37,4],null,[["type","date","time","htmlSafe"],[[52,[30,3,["Valid"]],"valid","expired"],[28,[37,16],[[30,3,["License","expiration_time"]]],[["year","month","day"],["numeric","long","numeric"]]],[28,[37,16],[[30,3,["License","expiration_time"]]],[["hour12","hour","hourCycle","minute","second","timeZoneName"],[true,"numeric","h12","numeric","numeric","short"]]],true]]]],null]],null]],[1,"\\n "],[13],[1,"\\n\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[15,0,[28,[37,12],[[28,[37,13],["valid",[30,3,["Valid"]]],null],[28,[37,13],["expired",[28,[37,17],[[30,3,["Valid"]]],null]],null],[28,[37,13],["warning",[28,[37,18],[[30,3,["License","expiration_time"]],2629800000],null]],null]],null]],[12],[1,"\\n "],[1,[28,[35,14],[[28,[37,15],[[30,1,["t"]],"expiry.${type}.header",[28,[37,4],null,[["type"],[[52,[30,3,["Valid"]],"valid","expired"]]]]],null]],null]],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[28,[35,19],[[30,3,["License","expiration_time"]]],null]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n\\n "],[10,"aside"],[12],[1,"\\n "],[10,"header"],[12],[1,"\\n "],[10,"h3"],[12],[1,"\\n "],[1,[28,[35,14],[[28,[37,15],[[30,1,["t"]],"documentation.title"],null]],null]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[10,0],[14,0,"flex gap-1.5 flex-col"],[12],[1,"\\n "],[8,[39,20],null,[["@text","@href","@icon","@iconPosition"],[[28,[37,14],[[28,[37,15],[[30,1,["t"]],"documentation.links.license-expiration.text"],null]],null],[29,[[28,[37,21],[[28,[37,22],["CONSUL_DOCS_URL"],null],[28,[37,14],[[28,[37,15],[[30,1,["t"]],"documentation.links.license-expiration.link"],null]],null]],null]]],"docs-link","trailing"]],null],[1,"\\n "],[8,[39,20],null,[["@text","@href","@icon","@iconPosition"],[[28,[37,14],[[28,[37,15],[[30,1,["t"]],"documentation.links.renewing-license.text"],null]],null],[29,[[28,[37,21],[[28,[37,22],["CONSUL_DOCS_URL"],null],[28,[37,14],[[28,[37,15],[[30,1,["t"]],"documentation.links.renewing-license.link"],null]],null]],null]]],"docs-link","trailing"]],null],[1,"\\n "],[8,[39,20],null,[["@text","@href","@icon","@iconPosition"],[[28,[37,14],[[28,[37,15],[[30,1,["t"]],"documentation.links.applying-new-license.text"],null]],null],[29,[[28,[37,21],[[28,[37,22],["CONSUL_DOCS_URL"],null],[28,[37,14],[[28,[37,15],[[30,1,["t"]],"documentation.links.applying-new-license.link"],null]],null]],null]]],"docs-link","trailing"]],null],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n\\n "],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[3]]],[1," "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n\\n"]],["route","loader","item","after","T","T","T"],false,["route","routeName","data-loader","uri","hash","let","block-slot","error-state","if","eq","hds/toast","notification","class-map","array","compute","fn","format-time","not","temporal-within","temporal-format","hds/link/standalone","concat","env"]]',moduleName:"consul-ui/templates/dc/show/license.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/dc/show/serverstatus",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"eg4Biu8u",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/datacenter",[28,[37,4],null,[["partition","nspace","dc"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]]]]]],null]]],[["default"],[[[[1,"\\n\\n"],[44,[[30,2,["data"]]],[[[1," "],[8,[39,6],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,6],null,[["@name"],["disconnected"]],[["default"],[[[[1,"\\n"],[41,[28,[37,9],[[30,2,["error","status"]],"404"],null],[[[1," "],[8,[39,10],[[4,[38,11],null,[["sticky"],[true]]]],[["@color"],["warning"]],[["default"],[[[[1,"\\n "],[8,[30,5,["Title"]],null,null,[["default"],[[[[1,"Warning!"]],[]]]]],[1,"\\n "],[8,[30,5,["Description"]],null,null,[["default"],[[[[1,"This service has been deregistered and no longer exists in the catalog."]],[]]]]],[1,"\\n "]],[5]]]]],[1,"\\n"]],[]],[[[41,[28,[37,9],[[30,2,["error","status"]],"403"],null],[[[1," "],[8,[39,10],[[4,[38,11],null,[["sticky"],[true]]]],[["@color"],["critical"]],[["default"],[[[[1,"\\n "],[8,[30,6,["Title"]],null,null,[["default"],[[[[1,"Error!"]],[]]]]],[1,"\\n "],[8,[30,6,["Description"]],null,null,[["default"],[[[[1,"You no longer have access to this service."]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n"]],[]],[[[1," "],[8,[39,10],[[4,[38,11],null,[["sticky"],[true]]]],[["@color"],["warning"]],[["default"],[[[[1,"\\n "],[8,[30,7,["Title"]],null,null,[["default"],[[[[1,"Warning!"]],[]]]]],[1,"\\n "],[8,[30,7,["Description"]],null,null,[["default"],[[[[1,"An error was returned whilst loading this data, refresh to try again."]],[]]]]],[1,"\\n "]],[7]]]]],[1,"\\n "]],[]]]],[]]],[1," "]],[4]]]]],[1,"\\n\\n "],[8,[39,6],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n "],[10,0],[14,0,"tab-section"],[12],[1,"\\n\\n "],[10,"section"],[15,0,[28,[37,12],["server-failure-tolerance"],null]],[12],[1,"\\n\\n "],[10,"header"],[12],[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,13],[[28,[37,14],[[30,1,["t"]],"tolerance.header"],null]],null]],[1,"\\n "],[13],[1,"\\n "],[8,[39,15],null,[["@icon","@iconPosition","@text","@href"],["docs-link","trailing",[28,[37,13],[[28,[37,14],[[30,1,["t"]],"tolerance.link-text"],null]],null],[29,[[28,[37,16],[[28,[37,17],["CONSUL_DOCS_URL"],null],[28,[37,13],[[28,[37,14],[[30,1,["t"]],"tolerance.link"],null]],null]],null]]]]],null],[1,"\\n "],[13],[1,"\\n\\n "],[10,"section"],[15,0,[28,[37,12],[[28,[37,18],["immediate-tolerance"],null]],null]],[12],[1,"\\n "],[10,"header"],[12],[1,"\\n "],[10,"h3"],[12],[1,"\\n "],[1,[28,[35,13],[[28,[37,14],[[30,1,["t"]],"tolerance.immediate.header"],null]],null]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[10,"dl"],[15,0,[28,[37,12],[[28,[37,18],["warning",[28,[37,19],[[28,[37,9],[[30,3,["FailureTolerance"]],0],null],[28,[37,9],[[30,3,["OptimisticFailureTolerance"]],0],null]],null]],null]],null]],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n "],[1,[28,[35,13],[[28,[37,14],[[30,1,["t"]],"tolerance.immediate.body"],null]],null]],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[30,3,["FailureTolerance"]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n\\n"],[41,[28,[37,20],["read zones"],null],[[[1," "],[10,"section"],[15,0,[28,[37,12],[[28,[37,18],["optimistic-tolerance"],null]],null]],[12],[1,"\\n "],[10,"header"],[12],[1,"\\n "],[10,"h3"],[12],[1,"\\n "],[1,[28,[35,13],[[28,[37,14],[[30,1,["t"]],"tolerance.optimistic.header"],null]],null]],[1,"\\n "],[11,1],[4,[38,21],["With > 30 seconds between server failures, Consul can restore the Immediate Fault Tolerance by replacing failed active voters with healthy back-up voters when using redundancy zones."],null],[12],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[10,"dl"],[15,0,[28,[37,12],[[28,[37,18],["warning",[28,[37,9],[[30,3,["OptimisticFailureTolerance"]],0],null]],null]],null]],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n "],[1,[28,[35,13],[[28,[37,14],[[30,1,["t"]],"tolerance.optimistic.body"],null]],null]],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[30,3,["OptimisticFailureTolerance"]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n\\n "],[13],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n\\n"],[41,[28,[37,22],[[30,3,["RedundancyZones","length"]],0],null],[[[1," "],[10,"section"],[15,0,[28,[37,12],["redundancy-zones"],null]],[12],[1,"\\n "],[10,"header"],[12],[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,23],[[28,[37,24],["common.consul.redundancyzone"],null]],null]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n\\n"],[42,[28,[37,26],[[28,[37,26],[[30,3,["RedundancyZones"]]],null]],null],null,[[[41,[28,[37,22],[[30,8,["Servers","length"]],0],null],[[[1," "],[10,"section"],[12],[1,"\\n "],[10,"header"],[12],[1,"\\n "],[10,"h3"],[12],[1,"\\n "],[1,[30,8,["Name"]]],[1,"\\n "],[13],[1,"\\n "],[10,"dl"],[15,0,[28,[37,12],[[28,[37,18],["warning",[28,[37,9],[[30,8,["FailureTolerance"]],0],null]],null]],null]],[12],[1,"\\n "],[10,"dt"],[12],[1,[28,[35,24],["common.consul.failuretolerance"],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,8,["FailureTolerance"]]],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[8,[39,27],null,[["@items"],[[30,8,["Servers"]]]],null],[1,"\\n "],[13],[1,"\\n"]],[]],null]],[8]],null],[1,"\\n"],[41,[28,[37,22],[[30,3,["Default","Servers","length"]],0],null],[[[1," "],[10,"section"],[12],[1,"\\n "],[10,"header"],[12],[1,"\\n "],[10,"h3"],[12],[1,"\\n "],[1,[28,[35,13],[[28,[37,14],[[30,1,["t"]],"unassigned"],null]],null]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[8,[39,27],null,[["@items"],[[30,3,["Default","Servers"]]]],null],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1,"\\n "],[13],[1,"\\n"]],[]],[[[1," "],[10,"section"],[12],[1,"\\n "],[10,"header"],[12],[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,13],[[28,[37,14],[[30,1,["t"]],"servers"],null]],null]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[8,[39,27],null,[["@items"],[[30,3,["Default","Servers"]]]],null],[1,"\\n "],[13],[1,"\\n"]],[]]],[1,"\\n"],[41,[28,[37,22],[[30,3,["ReadReplicas","length"]],0],null],[[[1," "],[10,"section"],[12],[1,"\\n "],[10,"header"],[12],[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,23],[[28,[37,24],["common.consul.readreplica"],null]],null]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n\\n "],[8,[39,27],null,[["@items"],[[30,3,["ReadReplicas"]]]],null],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[3]]],[1," "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n\\n"]],["route","loader","item","after","T","T","T","item"],false,["route","routeName","data-loader","uri","hash","let","block-slot","error-state","if","eq","hds/toast","notification","class-map","compute","fn","hds/link/standalone","concat","env","array","and","can","tooltip","gt","pluralize","t","each","-track-array","consul/server/list"]]',moduleName:"consul-ui/templates/dc/show/serverstatus.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/error",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"bZdlAt9b",block:'[[[1,"\\n"],[41,[33,1],[[[8,[39,2],null,[["@error"],[[99,1,["@error"]]]],null],[1,"\\n"]],[]],null]],[],false,["if","error","app-error"]]',moduleName:"consul-ui/templates/error.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/index",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"CJ8DiXUS",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@name","@model"],[[99,1,["@name"]],[30,1,["model"]]]],[["default"],[[[[1,"\\n "],[46,[28,[37,4],null,null],null,null,null],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","o"],false,["route","routeName","outlet","component","-outlet"]]',moduleName:"consul-ui/templates/index.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/loading",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"5kbK/dah",block:'[[[1,"\\n"]],[],false,[]]',moduleName:"consul-ui/templates/loading.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/notfound",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"qt+16XBx",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@login","@error"],[[30,1,["model","app","login","open"]],[28,[37,3],null,[["status","message"],[404,"Unable to find that page"]]]]],null],[1,"\\n"]],[1]]]]],[1,"\\n\\n"]],["route"],false,["route","routeName","app-error","hash"]]',moduleName:"consul-ui/templates/notfound.hbs",isStrictMode:!1}) +e.default=n})) +define("consul-ui/templates/oauth-provider-debug",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"Lxy3wDlI",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n"],[10,0],[14,5,"width: 50%;margin: 0 auto;"],[12],[1,"\\n "],[10,"h1"],[12],[8,[30,1,["Title"]],null,[["@title"],["Mock OAuth Provider"]],null],[13],[1,"\\n "],[10,"main"],[12],[1,"\\n "],[10,"form"],[14,"method","GET"],[15,"action",[36,2]],[12],[1,"\\n"],[44,[[28,[37,4],null,[["state","code"],["state-123456789/abcdefghijklmnopqrstuvwxyz","code-abcdefghijklmnopqrstuvwxyz/123456789"]]]],[[[1," "],[8,[39,5],null,[["@name","@label","@item","@help"],["state","State",[30,2],"The OIDC state value that will get passed through to Consul"]],null],[1,"\\n "],[8,[39,5],null,[["@name","@label","@item","@help"],["code","Code",[30,2],"The OIDC code value that will get passed through to Consul"]],null],[1,"\\n"]],[2]]],[1," "],[8,[39,6],null,[["@type"],["submit"]],[["default"],[[[[1,"\\n Login\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"],[13],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","item"],false,["route","routeName","redirect_uri","let","hash","text-input","action"]]',moduleName:"consul-ui/templates/oauth-provider-debug.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/templates/settings",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=(0,t.createTemplateFactory)({id:"GXqC0vCH",block:'[[[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["settings://consul:client"],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,4],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,4],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[28,[37,7],[[30,2,["data"]],[28,[37,8],null,[["blocking"],[true]]]],null]],[[[1," "],[8,[39,9],null,null,[["default"],[[[[1,"\\n "],[8,[39,4],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n "],[8,[30,1,["Title"]],null,[["@title"],["Settings"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,4],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,10],[[24,0,"mb-3 mt-2"]],[["@type"],["inline"]],[["default"],[[[[1,"\\n "],[8,[30,4,["Title"]],null,null,[["default"],[[[[1,"Local Storage"]],[]]]]],[1,"\\n "],[8,[30,4,["Description"]],null,null,[["default"],[[[[1,"These settings are immediately saved to local storage and persisted through browser usage."]],[]]]]],[1,"\\n "]],[4]]]]],[1,"\\n "],[10,"form"],[12],[1,"\\n"],[41,[28,[37,12],[[28,[37,13],["CONSUL_UI_DISABLE_REALTIME"],null]],null],[[[1," "],[8,[39,14],null,null,[["default"],[[[[1,"\\n "],[8,[30,5,["Details"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,15],null,[["@data","@sink","@onchange"],[[30,3],"settings://consul:client",[28,[37,16],[[30,0],[28,[37,17],[[30,5,["close"]]],null]],null]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[10,"fieldset"],[12],[1,"\\n "],[10,"h2"],[12],[1,"Blocking Queries"],[13],[1,"\\n "],[10,2],[12],[1,"Keep catalog info up-to-date without refreshing the page. Any changes made to services, nodes and intentions would be reflected in real time."],[13],[1,"\\n "],[10,0],[14,0,"type-toggle"],[12],[1,"\\n "],[10,"label"],[12],[1,"\\n "],[11,"input"],[24,3,"client[blocking]"],[16,"checked",[52,[30,3,["blocking"]],"checked"]],[24,4,"checkbox"],[4,[38,18],["change",[28,[37,19],[[28,[37,20],[[30,3],"blocking",[28,[37,12],[[30,3,["blocking"]]],null]],null],[28,[37,17],[[30,5,["open"]]],null]],null]],null],[12],[13],[1,"\\n "],[10,1],[12],[1,[52,[30,3,["blocking"]],"On","Off"]],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "]],[5]]]]],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[3]]],[1," "]],[]]]]],[1,"\\n"]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","loader","item","A","disclosure"],false,["route","routeName","data-loader","uri","block-slot","app-error","let","or","hash","app-view","hds/alert","if","not","env","disclosure","data-sink","action","fn","on","queue","set"]]',moduleName:"consul-ui/templates/settings.hbs",isStrictMode:!1}) +e.default=n})),define("consul-ui/transforms/array",["exports","ember-data-model-fragments/transforms/array"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=t.default +e.default=n})),define("consul-ui/transforms/boolean",["exports","@ember-data/serializer/-private"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.BooleanTransform}})})),define("consul-ui/transforms/date",["exports","@ember-data/serializer/-private"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.DateTransform}})})),define("consul-ui/transforms/fragment-array",["exports","ember-data-model-fragments/transforms/fragment-array"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=t.default +e.default=n})),define("consul-ui/transforms/fragment",["exports","ember-data-model-fragments/transforms/fragment"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n=t.default +e.default=n})),define("consul-ui/transforms/number",["exports","@ember-data/serializer/-private"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.NumberTransform}})})),define("consul-ui/transforms/string",["exports","@ember-data/serializer/-private"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.StringTransform}})})),define("consul-ui/utils/ascend",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,t){const n=e.split("/") +return n.length>t?n.slice(0,-t).concat("").join("/"):""}})),define("consul-ui/utils/atob",["exports","base64-js"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"utf-8" +const l=t.default.toByteArray(e) +return new TextDecoder(n).decode(l)}})),define("consul-ui/utils/btoa",["exports","base64-js"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){const n=(new TextEncoder).encode(e) +return t.default.fromByteArray(n)}})),define("consul-ui/utils/calculate-position",["exports","ember-basic-dropdown/utils/calculate-position"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/utils/callable-type",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){return"function"!=typeof e?function(){return e}:e}})),define("consul-ui/utils/create-fingerprinter",["exports","@ember/object","@ember/utils"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,l,r){let i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:JSON.stringify +return function(o,a,u,s,c){return function(d){if(null==(u=null==u?d[e]:u))throw new Error(`Unable to create fingerprint, missing foreignKey value. Looking for value in \`${e}\` got \`${u}\``) +const p=a.split(",").map((function(e){const l=(0,t.get)(d,e) +if((0,n.isEmpty)(l)){if("PeerName"===e)return +throw new Error(`Unable to create fingerprint, missing slug. Looking for value in \`${e}\` got \`${l}\``)}return l})).compact() +return void 0===d[l]&&("*"===s&&(s="default"),d[l]=s),void 0===d[r]&&("*"===c&&(c="default"),d[r]=c),void 0===d[e]&&(d[e]=u),void 0===d[o]&&(d[o]=i([d[r],d[l],u].concat(p))),d}}}})),define("consul-ui/utils/distance",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,t){e=e.Coord,t=t.Coord +let n=0 +for(let o=0;o0&&(r=i) +return Math.round(1e5*r)/100}})),define("consul-ui/utils/dom/click-first-anchor",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t +return function(t){let l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"tr" +switch(t.target.nodeName.toLowerCase()){case"input":case"label":case"a":case"button":return}const r=e(l,t.target).querySelector("a") +r&&n(r)}} +const t=function(e){["mousedown","mouseup","click"].map((function(e){return new MouseEvent(e,{bubbles:!0,cancelable:!0,view:window})})).forEach((function(t){e.dispatchEvent(t)}))}})),define("consul-ui/utils/dom/closest",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,t){try{return t.closest(e)}catch(n){return}}})),define("consul-ui/utils/dom/create-listeners",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[] +return new t(e)} +class t{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[] +this.listeners=e}add(e,n,l){let r +if("function"==typeof e)r=e +else if(e instanceof t)r=e.remove.bind(e) +else{let t="addEventListener",i="removeEventListener" +void 0===e[t]&&(t="on",i="off") +let o=n +"string"==typeof o&&(o={[n]:l}) +const a=Object.keys(o).map((function(n){return function(n,l){return e[t](n,l),function(){return e[i](n,l),l}}(n,o[n])})) +r=()=>a.map((e=>e()))}return this.listeners.push(r),()=>{const e=this.listeners.findIndex((function(e){return e===r})) +return this.listeners.splice(e,1)[0]()}}remove(){const e=this.listeners.map((e=>e())) +return this.listeners.splice(0,this.listeners.length),e}}})),define("consul-ui/utils/dom/event-source/blocking",["exports","@ember/object"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.createErrorBackoff=void 0,e.default=function(e){let s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:i() +const c=function(i){let c=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} +const{currentEvent:d}=c,p=r(c,n) +e.apply(this,[e=>{const{createEvent:n}=e,c=r(e,l) +return i.apply(this,[c,this]).catch(s).then((l=>{if(l instanceof Error)return l +let r=("function"==typeof n?n:u)(l,e) +r.type||(r={type:"message",data:r}) +const i=(0,t.get)(r.data||{},"meta") +i&&(e.cursor=o(i.cursor,e.cursor),e.cacheControl=i.cacheControl,e.interval=i.interval),-1===(e.cacheControl||"").indexOf("no-store")&&(this.currentEvent=r),this.dispatchEvent(r) +const s=a(e,r,this.previousEvent) +return this.previousEvent=this.currentEvent,s(l)}))},p]),void 0!==d&&(this.currentEvent=d),this.addEventListener("open",(e=>{const t=e.target.getCurrentEvent() +void 0!==t&&this.dispatchEvent(t)}))} +return c.prototype=Object.assign(Object.create(e.prototype,{constructor:{value:e,configurable:!0,writable:!0}}),{getCurrentEvent:function(){return this.currentEvent},getPreviousEvent:function(){return this.previousEvent}}),c},e.validateCursor=void 0 +const n=["currentEvent"],l=["createEvent"] +function r(e,t){if(null==e)return{} +var n,l,r=function(e,t){if(null==e)return{} +var n,l,r={},i=Object.keys(e) +for(l=0;l=0||(r[n]=e[n]) +return r}(e,t) +if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e) +for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}const i=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:3e3,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Promise,l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:setTimeout +return function(r){let i=(0,t.get)(r,"errors.firstObject.status")||(0,t.get)(r,"statusCode") +if(void 0!==i)switch(i=i.toString(),!0){case 0===i.indexOf("5")&&3===i.length&&"500"!==i:case"0"===i:return new n((function(t){l((function(){t(r)}),e)}))}throw r}} +e.createErrorBackoff=i +const o=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=parseInt(e) +if(!isNaN(n))return null!==t&&n2&&void 0!==arguments[2]?arguments[2]:Promise +return function(l){return function(r,i){const o=i.key +if(void 0!==l[o]&&i.settings.enabled)return void 0===l[o].configuration&&(l[o].configuration={}),l[o].configuration.settings=i.settings,e(l[o]) +{const a=i.type||t,u=l[o]=new a(r,i) +return e(u).catch((function(e){return delete l[o],n.reject(e)})).then((function(e){return void 0===e.configuration.cursor&&(e.close(),delete l[o]),e}))}}}}})),define("consul-ui/utils/dom/event-source/callable",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Promise,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:n +const a=function(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} +e.call(this),this.readyState=2,this.source="function"!=typeof t?function(e,t){return this.close(),r.resolve()}:t,this.readyState=0,r.resolve().then((()=>{if(!(this.readyState>1))return this.readyState=1,this.dispatchEvent({type:"open"}),i(this,n,l)})).catch((e=>{this.dispatchEvent(o(e)),this.readyState=2,this.dispatchEvent({type:"close",error:e})})).then((()=>{this.readyState=2}))} +return a.prototype=Object.assign(Object.create(e.prototype,{constructor:{value:a,configurable:!0,writable:!0}}),{close:function(){switch(this.readyState){case 0:case 2:this.readyState=2 +break +default:this.readyState=3}return this}}),a},e.defaultRunner=void 0 +const t=function(e,n,l){if(!l(e))return e.source.bind(e)(n,e).then((function(r){return t(e,n,l)})) +e.dispatchEvent({type:"close"})} +e.defaultRunner=t +const n=function(e){return new ErrorEvent("error",{error:e,message:e.message})},l=function(e){switch(e.readyState){case 2:case 3:return!0}return!1}})),define("consul-ui/utils/dom/event-source/index",["exports","@ember/object/proxy","@ember/array/proxy","consul-ui/utils/dom/create-listeners","consul-ui/utils/dom/event-target/rsvp","consul-ui/utils/dom/event-source/cache","consul-ui/utils/dom/event-source/proxy","consul-ui/utils/dom/event-source/resolver","consul-ui/utils/dom/event-source/callable","consul-ui/utils/dom/event-source/openable","consul-ui/utils/dom/event-source/blocking","consul-ui/utils/dom/event-source/storage","@ember/object","ember-concurrency","consul-ui/env"],(function(e,t,n,l,r,i,o,a,u,s,c,d,p,f,m){let h +switch(Object.defineProperty(e,"__esModule",{value:!0}),e.toPromise=e.source=e.resolve=e.proxy=e.once=e.fromPromise=e.cache=e.StorageEventSource=e.OpenableEventSource=e.CallableEventSource=e.BlockingEventSource=void 0,(0,m.env)("CONSUL_UI_REALTIME_RUNNER")){case"ec":h=function(e,t,n){return p.default.extend({task:(0,f.task)((function*(){for(;!n(e);)yield e.source.bind(e)(t)}))}).create().get("task").perform()} +break +case"generator":h=async function(e,t,n){const l=function*(){for(;!n(e);)yield e.source.bind(e)(t)} +let r,i=l().next() +for(;!i.done;)r=await i.value,i=l().next() +return r} +break +case"async":h=async function(e,t,n){let l +for(;!n(e);)l=await e.source.bind(e)(t) +return l}}const b=(0,u.default)(r.default,Promise,h) +e.CallableEventSource=b +const y=(0,s.default)(b) +e.OpenableEventSource=y +const v=(0,c.default)(y) +e.BlockingEventSource=v +const g=(0,d.default)(r.default,Promise) +e.StorageEventSource=g +const O=(0,o.default)(t.default,n.default,l.default) +e.proxy=O +const P=(0,a.default)(Promise) +e.resolve=P +const w=function(e){return P(e,(0,l.default)()).then((function(t){return O(e,t)}))} +e.source=w +const x=(0,i.default)(w,v,Promise) +e.cache=x +e.fromPromise=function(e){return new b((function(t){const n=this.dispatchEvent.bind(this),l=()=>{this.close()} +return e.then((function(e){l(),n({type:"message",data:e})})).catch((function(e){l(),n(function(e){return new ErrorEvent("error",{error:e,message:e.message})}(e))}))}))} +e.toPromise=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"message",l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"error" +return new Promise((function(r,i){const o=function(e){r(e.data)},a=function(e){i(e.error)} +e.addEventListener(n,o),e.addEventListener(l,a),t((function(){"function"==typeof e.close&&e.close(),e.removeEventListener(n,o),e.removeEventListener(l,a)}))}))} +e.once=function(e,t){return new(arguments.length>2&&void 0!==arguments[2]?arguments[2]:y)((function(t,n){return e(t,n).then((function(e){n.dispatchEvent({type:"message",data:e}),n.close()})).catch((function(e){n.dispatchEvent({type:"error",error:e}),n.close()}))}),t)}})),define("consul-ui/utils/dom/event-source/openable",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:EventSource +const t=function(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} +e.apply(this,arguments),this.configuration=n} +return t.prototype=Object.assign(Object.create(e.prototype,{constructor:{value:t,configurable:!0,writable:!0}}),{open:function(){switch(this.readyState){case 3:this.readyState=1 +break +case 2:e.apply(this,[this.source,this.configuration])}return this}}),t}})),define("consul-ui/utils/dom/event-source/proxy",["exports","@ember/object"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,l,r){return function(i){let o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],a=e,u="object" +return"string"!=typeof o&&void 0!==(0,t.get)(o,"length")&&(a=l,u="array",o=o.filter((function(e){return!(0,t.get)(e,"isDestroyed")&&!(0,t.get)(e,"isDeleted")&&(0,t.get)(e,"isLoaded")}))),void 0===n[u]&&(n[u]=a.extend({init:function(){this.listeners=r(),this.listeners.add(this._source,"message",(e=>(0,t.set)(this,"content",e.data))),this._super(...arguments)},addEventListener:function(e,t){this.listeners.add(this._source,e,t)},getCurrentEvent:function(){return this._source.getCurrentEvent(...arguments)},removeEventListener:function(){return this._source.removeEventListener(...arguments)},dispatchEvent:function(){return this._source.dispatchEvent(...arguments)},close:function(){return this._source.close(...arguments)},open:function(){return this._source.open(...arguments)},willDestroy:function(){this._super(...arguments),this.close(),this.listeners.remove()}})),n[u].create({content:o,_source:i,configuration:i.configuration})}} +const n={}})),define("consul-ui/utils/dom/event-source/resolver",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Promise +return function(t,n){let l +return"function"==typeof t.getCurrentEvent&&(l=t.getCurrentEvent()),null!=l?e.resolve(l.data).then((function(e){return t.open(),e})):new e((function(e,l){n.add(t,"error",(function(e){n.remove(),e.target.close(),l(e.error)})),n.add(t,"message",(function(t){n.remove(),e(t.data)}))}))}}})),define("consul-ui/utils/dom/event-source/storage",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Promise +const n=function(e){if((void 0===e||e.key===this.configuration.key)&&1===this.readyState){const e=this.source(this.configuration) +t.resolve(e).then((e=>{this.configuration.cursor++,this._currentEvent={type:"message",data:e},this.dispatchEvent({type:"message",data:e})}))}} +return class extends e{constructor(e,t){super(...arguments),this.readyState=2,this.target=t.target||window,this.name="storage",this.source=e,this.handler=n.bind(this),this.configuration=t,this.configuration.cursor=1,this.open()}dispatchEvent(){if(1===this.readyState)return super.dispatchEvent(...arguments)}close(){this.target.removeEventListener(this.name,this.handler),this.readyState=2}getCurrentEvent(){return this._currentEvent}open(){const e=this.readyState +this.readyState=1,1!==e&&(this.target.addEventListener(this.name,this.handler),this.handler())}}}})),define("consul-ui/utils/dom/event-target/event-target-shim/event",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.isStopped=function(e){return l(e).immediateStopped},e.setCurrentTarget=function(e,t){l(e).currentTarget=t},e.setEventPhase=function(e,t){l(e).eventPhase=t},e.setPassiveListener=function(e,t){l(e).passiveListener=t},e.wrapEvent=function(e,t){return new(u(Object.getPrototypeOf(t)))(e,t)} +const t=new WeakMap,n=new WeakMap +function l(e){const n=t.get(e) +return console.assert(null!=n,"'this' is expected an Event object, but got",e),n}function r(e){null==e.passiveListener?e.event.cancelable&&(e.canceled=!0,"function"==typeof e.event.preventDefault&&e.event.preventDefault()):"undefined"!=typeof console&&"function"==typeof console.error&&console.error("Unable to preventDefault inside passive event listener invocation.",e.passiveListener)}function i(e,n){t.set(this,{eventTarget:e,event:n,eventPhase:2,currentTarget:e,canceled:!1,stopped:!1,immediateStopped:!1,passiveListener:null,timeStamp:n.timeStamp||Date.now()}),Object.defineProperty(this,"isTrusted",{value:!1,enumerable:!0}) +const l=Object.keys(n) +for(let t=0;t1&&void 0!==arguments[1]?arguments[1]:"-view-registry:main" +const n=e.lookup(t) +return function(e){const t=e.getAttribute("id") +if(t)return n[t]}}})) +define("consul-ui/utils/dom/is-outside",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:document +if(e){const l=!t||!n.contains(t),r=e===t||e.contains(t) +return!l&&!r}return!1}})),define("consul-ui/utils/dom/normalize-event",["exports"],(function(e){function t(e,t){var n=Object.keys(e) +if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) +t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function n(e){for(var n=1;n2&&void 0!==arguments[2]?arguments[2]:{} +if(void 0!==e.target)return e +return{target:n(n({},l),{name:e,value:t})}}})),define("consul-ui/utils/dom/qsa-factory",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:document +return function(t){return(arguments.length>1&&void 0!==arguments[1]?arguments[1]:e).querySelectorAll(t)}}})),define("consul-ui/utils/dom/sibling",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,t){let n=e +for(;n=n.nextSibling;)if(1===n.nodeType&&n.nodeName.toLowerCase()===t)return n}})),define("consul-ui/utils/editor/lint",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.createLoader=void 0,e.default=function(e,t){n(e,t,(function(){e.getValue().trim().length&&e.performLint()}))} +const t=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:document.getElementsByTagName.bind(document),t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:CodeMirror +return t.registerHelper("lint","ruby",(function(e){return[]})),function(n,l,r){let i=[...e("script")] +const o=i.find((function(e){return-1!==e.src.indexOf(`/codemirror/mode/${l}/${l}.js`)})) +t.autoLoadMode(n,l),o?r():(i=[...e("script")],t.on(i[0],"load",(function(){r()})))}} +e.createLoader=t +const n=t()})),define("consul-ui/utils/filter/index",["exports","mnemonist/set"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.andOr=void 0 +e.andOr=e=>{const n=function(e){return Object.entries(e).reduce(((e,t)=>{let[n,l]=t +return e[n]="function"!=typeof l?new Set(Object.keys(l)):null,e}),{})}(e) +return l=>(l=function(e,n){return Object.keys(n).reduce(((l,r)=>{const i=void 0===e[r]?[]:e[r] +return i.length>0&&(null!==n[r]?l[r]=[...t.default.intersection(n[r],new Set(i))]:l[r]=[...new Set(i)]),l}),{})}(l,n),t=>function(e,t,n){return Object.entries(t).every((t=>{let[l,r]=t,i=n[l] +return"function"==typeof i?i(e,r):r.some((t=>i[t](e,t)))}))}(t,l,e))}})),define("consul-ui/utils/form/builder",["exports","@ember/object","ember-changeset","consul-ui/utils/form/changeset","ember-changeset-validations","consul-ui/utils/get-form-name-property"],(function(e,t,n,l,r,i){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:o,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:i.default +return function(){let l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} +const r={} +let i=null +const o={data:null,name:arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",getName:function(){return this.name},setData:function(n){return i&&!Array.isArray(n)&&(n=e(n,i)),(0,t.set)(this,"data",n),this},getData:function(){return this.data},add:function(e){return r[e.getName()]=e,this},handleEvent:function(e,r){const i=e.target,o=n(r||i.name),a=o[0],u=o[1] +let s=l +if(a!==this.getName()){if(this.has(a))return this.form(a).handleEvent(e) +s=s[a]}const c=this.getData(),d="function"==typeof c.toJSON?c.toJSON():(0,t.get)(c,"data").toJSON() +if(!Object.keys(d).includes(u)){const e=new Error(`${u} property doesn't exist`) +throw e.target=i,e}let p=(0,t.get)(c,u) +if(Array.isArray(p)||void 0!==s[u]&&"string"==typeof s[u].type&&"array"===s[u].type.toLowerCase()){null==p&&(p=[]) +p[i.checked?"pushObject":"removeObject"](i.value),(0,t.set)(c,u,p)}else void 0===i.checked||"on"!==i.value.toLowerCase()&&"off"!==i.value.toLowerCase()?(0,t.set)(c,u,i.value):(0,t.set)(c,u,i.checked) +return this.validate()},reset:function(){return"function"==typeof this.getData().rollbackAttributes&&this.getData().rollbackAttributes(),this},clear:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{} +return"function"==typeof e?this.clearer=e:this.setData(this.clearer(e)).getData()},submit:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{} +if("function"==typeof e)return this.submitter=e +this.submitter(this.getData())},setValidators:function(e){return i=e,this},validate:function(){const e=this.getData() +return"function"==typeof e.validate&&e.validate(),this},addError:function(e,t){const n=this.getData() +"function"==typeof n.addError&&n.addError(...arguments)},form:function(e){return null==e?this:r[e]},has:function(e){return void 0!==r[e]}} +return o.submit=o.submit.bind(o),o.reset=o.reset.bind(o),o}},e.defaultChangeset=void 0 +const o=function(e,t){return(0,n.Changeset)(e,(0,r.default)(t),t,{changeset:l.default})} +e.defaultChangeset=o})),define("consul-ui/utils/form/changeset",["exports","@ember/object","ember-changeset"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const l="_changes" +class r extends n.EmberChangeset{pushObject(e,n){let r +void 0===(0,t.get)(this,`${l}.${e}`)?(r=(0,t.get)(this,`data.${e}`),r=r?r.toArray():[]):r=this.get(e).slice(0),r.push(n),this.set(`${e}`,r)}removeObject(e,n){let r +void 0===(0,t.get)(this,`${l}.${e}`)?(r=(0,t.get)(this,`data.${e}`),r=void 0===r?[]:r.toArray()):r=this.get(e).slice(0) +const i=r.indexOf(n);-1!==i&&r.splice(i,1),this.set(`${e}`,r)}}e.default=r})),define("consul-ui/utils/get-environment",["exports","@ember/debug"],(function(e,t){function n(e,t){var n=Object.keys(e) +if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) +t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function l(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:window,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:document;(0,t.runInDebug)((()=>{const e=function(e){return e.split(";").map((e=>e.trim())).filter((e=>""!==e)).filter((e=>e.split("=").shift().startsWith("CONSUL_")))} +n.Scenario=function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"" +if(t.length>0)e(t).forEach((e=>{if(e.startsWith("CONSUL_COLOR_SCHEME=")){const[,l]=e.split("=") +let r +try{r=JSON.parse(n.localStorage.getItem("consul:theme"))}catch(t){r={"color-scheme":"light"}}n.localStorage.setItem("consul:theme",`{"color-scheme": "${"!"===l?"light"===r["color-scheme"]?"dark":"light":l}"}`)}else r.cookie=`${e};Path=/`})),n.location.hash="",location.reload() +else{t=e(r.cookie).join(";") +n.open("","_blank").document.write(`
      ${location.href}#${t}

      Scenario`)}},void 0!==n.location&&"string"==typeof n.location.hash&&n.location.hash.length>0&&n.Scenario(n.location.hash.substr(1))})) +const i=function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:r.cookie).split(";").filter((e=>""!==e)).map((e=>{const[t,...n]=e.trim().split("=") +return[t,n.join("=")]}))},o=function(e){const t=n.localStorage.getItem(e) +return null===t?void 0:t},a=l(l({},e.operatorConfig),JSON.parse(r.querySelector(`[data-${e.modulePrefix}-config]`).textContent)),u=a.UIConfig||{},s=r.getElementsByTagName("script"),c=s[s.length-1].src +let d +const p=function(e,t){let l,r,i,o +switch(e){case"CONSUL_NSPACES_ENABLED":return void 0!==a.NamespacesEnabled&&a.NamespacesEnabled +case"CONSUL_SSO_ENABLED":return void 0!==a.SSOEnabled&&a.SSOEnabled +case"CONSUL_ACLS_ENABLED":return void 0!==a.ACLsEnabled&&a.ACLsEnabled +case"CONSUL_PARTITIONS_ENABLED":return void 0!==a.PartitionsEnabled&&a.PartitionsEnabled +case"CONSUL_PEERINGS_ENABLED":return void 0!==a.PeeringEnabled&&a.PeeringEnabled +case"CONSUL_HCP_ENABLED":return void 0!==a.HCPEnabled&&a.HCPEnabled +case"CONSUL_DATACENTER_LOCAL":return a.LocalDatacenter +case"CONSUL_DATACENTER_PRIMARY":return a.PrimaryDatacenter +case"CONSUL_HCP_MANAGED_RUNTIME":return a.HCPManagedRuntime +case"CONSUL_API_PREFIX":return a.APIPrefix +case"CONSUL_HCP_URL":return a.HCPURL +case"CONSUL_UI_CONFIG":return r={service:void 0},i=t("CONSUL_METRICS_PROVIDER"),o=t("CONSUL_METRICS_PROXY_ENABLED"),r.service=t("CONSUL_SERVICE_DASHBOARD_URL"),i&&(u.metrics_provider=i),o&&(u.metrics_proxy_enabled=o),r.service&&(u.dashboard_url_templates=r),u +case"CONSUL_BASE_UI_URL":return c.split("/").slice(0,-2).join("/") +case"CONSUL_HTTP_PROTOCOL":return void 0===d&&(d=function(e){try{return n.performance.getEntriesByType("resource").find((t=>"script"===t.initiatorType&&e===t.name))||{}}catch(t){return{}}}(c)),d.nextHopProtocol||"http/1.1" +case"CONSUL_HTTP_MAX_CONNECTIONS":switch(l=t("CONSUL_HTTP_PROTOCOL"),!0){case 0===l.indexOf("h2"):case 0===l.indexOf("hq"):case 0===l.indexOf("spdy"):return +default:return 5}}},f=function(t){let n={} +switch(e.environment){case"development":case"staging":case"coverage":case"test":n=i().reduce((function(e,t){let[n,l]=t +switch(n){case"CONSUL_INTL_LOCALE":e.CONSUL_INTL_LOCALE=String(l).toLowerCase() +break +case"CONSUL_INTL_DEBUG":e.CONSUL_INTL_DEBUG=!!JSON.parse(String(l).toLowerCase()) +break +case"CONSUL_ACLS_ENABLE":e.CONSUL_ACLS_ENABLED=!!JSON.parse(String(l).toLowerCase()) +break +case"CONSUL_AGENTLESS_ENABLE":e.CONSUL_AGENTLESS_ENABLED=!!JSON.parse(String(l).toLowerCase()) +break +case"CONSUL_NSPACES_ENABLE":e.CONSUL_NSPACES_ENABLED=!!JSON.parse(String(l).toLowerCase()) +break +case"CONSUL_SSO_ENABLE":e.CONSUL_SSO_ENABLED=!!JSON.parse(String(l).toLowerCase()) +break +case"CONSUL_PARTITIONS_ENABLE":e.CONSUL_PARTITIONS_ENABLED=!!JSON.parse(String(l).toLowerCase()) +break +case"CONSUL_METRICS_PROXY_ENABLE":e.CONSUL_METRICS_PROXY_ENABLED=!!JSON.parse(String(l).toLowerCase()) +break +case"CONSUL_PEERINGS_ENABLE":e.CONSUL_PEERINGS_ENABLED=!!JSON.parse(String(l).toLowerCase()) +break +case"CONSUL_HCP_ENABLE":e.CONSUL_HCP_ENABLED=!!JSON.parse(String(l).toLowerCase()) +break +case"CONSUL_UI_CONFIG":e.CONSUL_UI_CONFIG=JSON.parse(l) +break +case"TokenSecretID":e.CONSUL_HTTP_TOKEN=l +break +default:e[n]=l}return e}),{}) +break +case"production":n=i().reduce((function(e,t){let[n,l]=t +if("TokenSecretID"===n)e.CONSUL_HTTP_TOKEN=l +return e}),{})}return void 0!==n[t]?n[t]:e[t]} +return function e(t){switch(t){case"CONSUL_UI_DISABLE_REALTIME":case"CONSUL_UI_DISABLE_ANCHOR_SELECTION":return!!JSON.parse(String(o(t)||0).toLowerCase())||f(t) +case"CONSUL_UI_REALTIME_RUNNER":return o(t)||f(t) +case"CONSUL_UI_CONFIG":case"CONSUL_DATACENTER_LOCAL":case"CONSUL_DATACENTER_PRIMARY":case"CONSUL_HCP_MANAGED_RUNTIME":case"CONSUL_API_PREFIX":case"CONSUL_HCP_URL":case"CONSUL_ACLS_ENABLED":case"CONSUL_NSPACES_ENABLED":case"CONSUL_PEERINGS_ENABLED":case"CONSUL_AGENTLESS_ENABLED":case"CONSUL_HCP_ENABLED":case"CONSUL_SSO_ENABLED":case"CONSUL_PARTITIONS_ENABLED":case"CONSUL_METRICS_PROVIDER":case"CONSUL_METRICS_PROXY_ENABLE":case"CONSUL_SERVICE_DASHBOARD_URL":case"CONSUL_BASE_UI_URL":case"CONSUL_HTTP_PROTOCOL":case"CONSUL_HTTP_MAX_CONNECTIONS":{const n=f(t) +return void 0!==n?n:p(t,e)}default:return f(t)}}}})),define("consul-ui/utils/get-form-name-property",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){if(-1!==e.indexOf("["))return e.match(/(.*)\[(.*)\]/).slice(1) +return["",e]}})),define("consul-ui/utils/helpers/call-if-type",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){return function(t){return function(n){let l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} +return typeof n[0]!==e?n[0]:t(n[0],l)}}}})),define("consul-ui/utils/http/consul",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.HEADERS_TOKEN=e.HEADERS_SYMBOL=e.HEADERS_PARTITION=e.HEADERS_NAMESPACE=e.HEADERS_INDEX=e.HEADERS_DIGEST=e.HEADERS_DEFAULT_ACL_POLICY=e.HEADERS_DATACENTER=void 0 +e.HEADERS_PARTITION="X-Consul-Partition" +e.HEADERS_NAMESPACE="X-Consul-Namespace" +e.HEADERS_DATACENTER="X-Consul-Datacenter" +e.HEADERS_DEFAULT_ACL_POLICY="X-Consul-Default-Acl-Policy" +e.HEADERS_INDEX="X-Consul-Index" +e.HEADERS_TOKEN="X-Consul-Token" +e.HEADERS_DIGEST="X-Consul-ContentHash" +e.HEADERS_SYMBOL="__consul_ui_http_headers__"})),define("consul-ui/utils/http/create-headers",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){return function(e){return e.reduce((function(e,t){const[n,...l]=t.split(":") +return l.length>0&&(e[n.trim()]=l.join(":").trim()),e}),{})}}})),define("consul-ui/utils/http/create-query-params",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:encodeURIComponent +return function t(n,l){return Object.entries(n).reduce((function(n,r,i){let[o,a]=r +if(void 0===a)return n +let u=e(o) +return void 0!==l&&(u=`${l}[${u}]`),null===a?n.concat(u):"object"==typeof a?n.concat(t(a,u)):n.concat(`${u}=${e(a)}`)}),[]).join("&")}}})),define("consul-ui/utils/http/create-url",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,i){return function(o){for(var a=arguments.length,u=new Array(a>1?a-1:0),s=1;s0&&void 0!==arguments[0]?arguments[0]:0 +if("text/event-stream"===this.headers()["content-type"]){this.statusCode=e +const t=this.connection() +if(t.readyState)switch(t.readyState){case 0:case 1:t.abort()}}}}e.default=i})),define("consul-ui/utils/http/status",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.UNAUTHORIZED=e.OK=e.INTERNAL_SERVER_ERROR=e.FORBIDDEN=void 0 +e.OK=200 +e.UNAUTHORIZED=401 +e.FORBIDDEN=403 +e.INTERNAL_SERVER_ERROR=500})),define("consul-ui/utils/http/xhr",["exports"],(function(e){function t(e,t){var n=Object.keys(e) +if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) +t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function n(e){for(var n=1;n=200&&this.status<400){const e=l.converters["text json"](this.response) +l.success(t,e,this.status,this.statusText)}else l.error(t,this.responseText,this.status,this.statusText,this.error) +l.complete(this.status)}} +let i=l.url +i.endsWith("?")&&(i=i.substr(0,i.length-1)),r.open(l.method,i,!0),void 0===l.headers&&(l.headers={}) +const o=n(n({},l.headers),{},{"X-Requested-With":"XMLHttpRequest"}) +return Object.entries(o).forEach((e=>{let[t,n]=e +return r.setRequestHeader(t,n)})),l.beforeSend(r),r.withCredentials=!0,r.send(l.body),r}}})),define("consul-ui/utils/intl/missing-message",["exports","@ember/debug"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,n){(0,t.runInDebug)((t=>console.debug(`Translation key not found: ${e}`))) +const l=e.split(".").pop().split("-").join(" ") +return`${l.substr(0,1).toUpperCase()}${l.substr(1)}`}})),define("consul-ui/utils/isFolder",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"" +return"/"===e.slice(-1)}})),define("consul-ui/utils/keyToArray",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"/" +return(e===t?"":e).split(t)}})),define("consul-ui/utils/left-trim",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"" +return 0===e.indexOf(t)?e.substr(t.length):e}})),define("consul-ui/utils/maybe-call",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,t){return function(n){return t.then((function(t){return t&&e(),n}))}}})),define("consul-ui/utils/merge-checks",["exports","@ember/object","mnemonist/multi-map"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],l=arguments.length>1&&void 0!==arguments[1]&&arguments[1] +const r=new(arguments.length>2&&void 0!==arguments[2]?arguments[2]:n.default),i=e.shift().map((e=>(""===e.ServiceName&&r.set(e.Node,e.CheckID),e))).concat(e.reduce(((e,t)=>void 0===t?e:e.concat(t.reduce(((e,t)=>{if(""===t.ServiceName){if((r.get(t.Node)||[]).includes(t.CheckID))return e +r.set(t.Node,t.CheckID)}return e.push(t),e}),[]))),[])) +return l&&i.filter((e=>(0,t.get)(e,"Exposable"))).forEach((e=>{(0,t.set)(e,"Exposed",l)})),i}})),define("consul-ui/utils/minimizeModel",["exports","@ember/object"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){if(Array.isArray(e))return e.filter((function(e){return!(0,t.get)(e,"isNew")})).map((function(e){return{ID:(0,t.get)(e,"ID"),Name:(0,t.get)(e,"Name")}}))}})),define("consul-ui/utils/non-empty-set",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){return function(t){return null==t||""===t?{}:{[e]:t}}}})),define("consul-ui/utils/path/resolve",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default=(e,t)=>0===t.indexOf("/")?t:t.split("/").reduce(((e,t,n,l)=>("."!==t&&(".."===t?e.pop():""===t&&n!==l.length-1||e.push(t)),e)),e.split("/")).join("/")})) +define("consul-ui/utils/promisedTimeout",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Promise,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:setTimeout +return function(n){let l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(){} +return new e(((e,r)=>{l(t((function(){e(n)}),n))}))}}})),define("consul-ui/utils/right-trim",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"" +const n=e.length-t.length +if(n>=0)return e.lastIndexOf(t)===n?e.substr(0,n):e +return e}})),define("consul-ui/utils/routing/redirect-to",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,t){return function(t,n){const l=this.routeName.split(".").slice(0,-1).join(".") +this.replaceWith(`${l}.${e}`,t)}}})),define("consul-ui/utils/routing/transitionable",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){let l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2?arguments[2]:void 0 +null===e&&(e=r.lookup("route:application")) +let i,o=n(e,l),a=e +for(;i=a.parent;)o=o.concat(n(i,l)),a=i +return o.reverse(),t(e.name||"application",o,l)} +const t=function(e,t,n){return[e,...t]},n=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} +return(e.paramNames||[]).map((function(n){return void 0!==t[n]?t[n]:e.params[n]})).reverse()}})),define("consul-ui/utils/routing/walk",["exports","@ember/debug"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){return function(){n.apply(this,[e])}},e.walk=e.dump=void 0 +const n=function(e){Object.keys(e).forEach(((t,l)=>{if("_options"===t)return +if(null===e[t])return +const r=e[t]._options +let i +Object.keys(e[t]).length>1&&(i=function(){n.apply(this,[e[t]])}),this.route(t,r,i)})),void 0===e.index&&(e.index={_options:{path:""}})} +e.walk=n +let l=e=>{} +e.dump=l,(0,t.runInDebug)((()=>{const t=function(e){return Array(e).fill(" ",0,e).join("")} +e.dump=l=function(e){let l=2 +const r={out:"",route:function(e,n,r){this.out+=`${t(l)}this.route('${e}', ${JSON.stringify(n)}`,r?(l++,this.out+=", function() {\n",r.apply(this,[]),l--,this.out+=`${t(l)}});\n`):this.out+=");",this.out+="\n"}} +return n.apply(r,[e]),`Router.map(\n function() {\n${r.out}\n }\n);`}}))})),define("consul-ui/utils/routing/wildcard",["exports","@ember/object"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){return function(n){let l=!1 +try{l=-1!==(0,t.get)(e,n)._options.path.indexOf("*")}catch(r){}return l}}})),define("consul-ui/utils/search/exact",["exports","consul-ui/utils/search/predicate"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class n extends t.default{predicate(e){return e=e.toLowerCase(),function(){return-1!==(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString().toLowerCase().indexOf(e)}}}e.default=n})),define("consul-ui/utils/search/fuzzy",["exports","fuse.js"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default=class{constructor(e,n){this.fuse=new t.default(e,{includeMatches:!0,shouldSort:!1,threshold:.4,keys:Object.keys(n.finders)||[],getFn:(e,t)=>(n.finders[t[0]](e)||[]).toString()})}search(e){return this.fuse.search(e).map((e=>e.item))}}})),define("consul-ui/utils/search/predicate",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default=class{constructor(e,t){this.items=e,this.options=t}search(e){const t=this.predicate(e) +return this.items.filter((e=>Object.entries(this.options.finders).some((n=>{let[l,r]=n +const i=r(e) +return Array.isArray(i)?i.some(t):t(i)}))))}}})),define("consul-ui/utils/search/regexp",["exports","consul-ui/utils/search/predicate"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class n extends t.default{predicate(e){let t +try{t=new RegExp(e,"i")}catch(n){return()=>!1}return e=>t.test(e)}}e.default=n})),define("consul-ui/utils/storage/local-storage",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:window.localStorage,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:JSON.stringify,l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:JSON.parse,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:function(e){window.dispatchEvent(new StorageEvent("storage",{key:e}))} +const i=`${e}:` +return{getValue:function(e){let n=t.getItem(`${i}${e}`) +"string"!=typeof n&&(n='""') +try{n=l(n)}catch(r){n=""}return n},setValue:function(e,l){if(null===l)return this.removeValue(e) +try{l=n(l)}catch(a){l='""'}const o=t.setItem(`${i}${e}`,l) +return r(`${i}${e}`),o},removeValue:function(e){const n=t.removeItem(`${i}${e}`) +return r(`${i}${e}`),n},all:function(){return Object.keys(t).reduce(((e,t,n,l)=>{if(0===t.indexOf(`${i}`)){const n=t.substr(i.length) +e[n]=this.getValue(n)}return e}),{})}}}})),define("consul-ui/utils/templatize",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[] +return e.map((e=>`template-${e}`))}})),define("consul-ui/utils/ticker/index",["exports","consul-ui/utils/dom/event-target/rsvp","@ember/object"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.Tween=e.Ticker=void 0 +const l=class extends t.default{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1e3/60 +super(),this.setRate(e)}tick(){this.dispatchEvent({type:"tick",target:this})}setRate(e){clearInterval(this._interval),this._interval=setInterval((()=>this.tick()),e)}destroy(){clearInterval(this._interval)}},r=class extends t.default{static destroy(){void 0!==r.defaultTickerGroup&&(r.defaultTickerGroup.destroy(),delete r.defaultTickerGroup)}constructor(e){super(),this.setTickable(e)}tick(){this._tickable.tick()}setTickable(e){this._tickable=e,void 0===this._tickable.getTicker&&(this._tickable.getTicker=()=>this),this.tick=this._tickable.tick.bind(this._tickable)}getTickable(){return this._tickable}isAlive(){return this._isAlive}start(){this._isAlive=!0,this.getTickerGroup().addEventListener("tick",this.tick),this.dispatchEvent({type:"start",target:this})}stop(){this._isAlive=!1,this.getTickerGroup().removeEventListener("tick",this.tick),this.dispatchEvent({type:"stop",target:this})}activeCount(){return this.getTickerGroup().activeCount()}setTickerGroup(e){this._group=e}getTickerGroup(){return void 0===this._group&&(void 0===r.defaultTickerGroup&&(r.defaultTickerGroup=new a),this._group=r.defaultTickerGroup),this._group}} +e.Ticker=r +const i=class{constructor(){this._currentframe=1,this.setIncrement(1)}isAtStart(){return this._currentframe<=1}isAtEnd(){return this._currentframe>=this._totalframes}addEventListener(){return this.getTicker().addEventListener(...arguments)}removeEventListener(){return this.getTicker().removeEventListener(...arguments)}stop(){return this.gotoAndStop(this._currentframe)}play(){return this.gotoAndPlay(this._currentframe)}start(){return this.gotoAndPlay(this._currentframe)}gotoAndStop(e){this._currentframe=e +const t=this.getTicker() +return t.isAlive()&&t.stop(),this}gotoAndPlay(e){this._currentframe=e +const t=this.getTicker() +return t.isAlive()||t.start(),this}getTicker(){return void 0===this._ticker&&(this._ticker=new r(this)),this._ticker}setFrames(e){return this._totalframes=e,this}setIncrement(e){return this._increment=e,this}},o={easeOut:function(e,t,n,l){return e/=l,n*(--e*e*e+1)+t}},a=l,u=class extends i{static destroy(){r.destroy()}static to(e,t,n,l){return Object.keys(t).forEach((function(n){t[n]-=e[n]})),new u(e,t,n,l).play()}constructor(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:12,l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:o.easeOut +super(),this.setMethod(l),this.setProps(t),this.setTarget(e),this.setFrames(n),this.tick=this.forwards}_process(){Object.keys(this._props).forEach((e=>{const t=this._method(this._currentframe,this._initialstate[e],this._props[e],this._totalframes);(0,n.set)(this._target,e,t)}))}forwards(){this._currentframe<=this._totalframes?(this._process(),this._currentframe+=this._increment):(this._currentframe=this._totalframes,this.getTicker().stop())}backwards(){this._currentframe-=this._increment,this._currentframe>=0?this._process():(this.run=this.forwards,this._currentframe=1,this.getTicker().stop())}gotoAndPlay(){return void 0===this._initialstate&&(this._initialstate={},Object.keys(this._props).forEach((e=>{this._initialstate[e]=this._target[e]}))),super.gotoAndPlay(...arguments)}setTarget(e){this._target=e}getTarget(e){return this._target}setProps(e){return this._props=e,this}setMethod(e){this._method=e}} +e.Tween=u})),define("consul-ui/utils/titleize",["exports","ember-cli-string-helpers/utils/titleize"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/utils/tomography",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){return function(t,n){var l=999999999,r=-999999999,i=[] +n.forEach((function(o){if(t==o.Node){var a=o.Segment +n.forEach((function(t){if(o.Node!=t.Node&&t.Segment==a){var n=e(o,t) +i.push({node:t.Node,distance:n,segment:a}),nr&&(r=n)}})),i.sort((function(e,t){return e.distance-t.distance}))}})) +var o,a=i.length,u=Math.floor(a/2) +return a>0?o=a%2?i[u].distance:(i[u-1].distance+i[u].distance)/2:(o=0,l=0,r=0),{distances:i,min:Math.trunc(100*l)/100,median:Math.trunc(100*o)/100,max:Math.trunc(100*r)/100}}}})),define("consul-ui/utils/ucfirst",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){return`${e.substr(0,1).toUpperCase()}${e.substr(1)}`}})),define("consul-ui/utils/update-array-object",["exports","@ember/object","@ember/object/proxy"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,l,r,i){i=void 0===i?(0,t.get)(l,r):i +const o=e.findIndex((function(e){return(0,t.get)(e,r)===i}));-1!==o&&(l instanceof n.default&&(0,t.set)(l,"content",e.objectAt(o)),e.replace(o,1,[l])) +return l}})),define("consul-ui/validations/intention-permission-http-header",["exports","ember-changeset-validations/validators","consul-ui/validations/sometimes"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default=e=>({Name:[(0,t.validatePresence)(!0)],Value:[(0,n.default)((0,t.validatePresence)(!0),(function(){return"Present"!==this.get("HeaderType")}))]})})),define("consul-ui/validations/intention-permission",["exports","ember-changeset-validations/validators","consul-ui/validations/sometimes"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default=e=>({"*":[(0,n.default)((0,t.validatePresence)(!0),(function(){const e=this.get("HTTP.Methods")||[],t=this.get("HTTP.Header")||[],n=this.get("HTTP.PathType")||"NoPath",l=this.get("HTTP.Path")||"" +return![0!==e.length,0!==t.length,"NoPath"!==n&&""!==l].includes(!0)}))],Action:[(0,t.validateInclusion)({in:e["intention-permission"].Action.allowedValues})],HTTP:{Path:[(0,n.default)((0,t.validateFormat)({regex:/^\//}),(function(){const e=this.get("HTTP.PathType") +return void 0!==e&&"NoPath"!==e}))]}})})),define("consul-ui/validations/intention",["exports","ember-changeset-validations/validators","consul-ui/validations/sometimes"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var l={"*":[(0,n.default)((0,t.validatePresence)(!0),(function(){const e=this.get("Action")||"",t=this.get("Permissions")||[] +return""===e&&0===t.length}))],SourceName:[(0,t.validatePresence)(!0),(0,t.validateLength)({min:1})],DestinationName:[(0,t.validatePresence)(!0),(0,t.validateLength)({min:1})],Permissions:[(0,n.default)((0,t.validateLength)({min:1}),(function(e,t){return!this.get("Action")}))]} +e.default=l})),define("consul-ui/validations/kv",["exports","ember-changeset-validations/validators"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n={Key:[(0,t.validatePresence)(!0),(0,t.validateLength)({min:1})]} +e.default=n})),define("consul-ui/validations/policy",["exports","ember-changeset-validations/validators"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n={Name:(0,t.validateFormat)({regex:/^[A-Za-z0-9\-_]{1,128}$/})} +e.default=n})),define("consul-ui/validations/role",["exports","ember-changeset-validations/validators"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var n={Name:(0,t.validateFormat)({regex:/^[A-Za-z0-9\-_]{1,256}$/})} +e.default=n})),define("consul-ui/validations/sometimes",["exports","@ember/object"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,n){return function(e){return function(l,r,i,o,a){let u={get(e){if(e.includes(".")){let n=(0,t.get)(o,e) +if(void 0!==n)return n +let l=e.split("."),r=l.pop(),i=l.join("."),u=(0,t.get)(o,i) +return u&&u.hasOwnProperty&&u.hasOwnProperty(r)?n:(0,t.get)(a,e)}return o.hasOwnProperty(e)?(0,t.get)(o,e):(0,t.get)(a,e)}} +return!n.call(u,o,a)||e(l,r,i,o,a)}}(e)}})),define("consul-ui/validations/token",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default={}})),define("consul-ui/config/environment",[],(function(){try{var e="consul-ui/config/environment",t=document.querySelector('meta[name="'+e+'"]').getAttribute("content"),n={default:JSON.parse(decodeURIComponent(t))} +return Object.defineProperty(n,"__esModule",{value:!0}),n}catch(l){throw new Error('Could not read config from meta tag with name "'+e+'".')}})),runningTests||require("consul-ui/app").default.create({name:"consul-ui",version:"2.2.0+f7fad31c"}) diff --git a/agent/uiserver/dist/assets/consul-ui-7444626e95c5ba30e9097f92995f0238.js b/agent/uiserver/dist/assets/consul-ui-7444626e95c5ba30e9097f92995f0238.js deleted file mode 100644 index f965f9a32133c..0000000000000 --- a/agent/uiserver/dist/assets/consul-ui-7444626e95c5ba30e9097f92995f0238.js +++ /dev/null @@ -1,3938 +0,0 @@ -"use strict" -define("consul-ui/abilities/acl",["exports","consul-ui/abilities/base","@ember/service"],(function(e,t,n){var l,r,i -function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let a=(l=(0,n.inject)("env"),r=class extends t.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="env",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0}),o(this,"resource","acl"),o(this,"segmented",!1)}get canAccess(){return!this.env.var("CONSUL_ACLS_ENABLED")||this.canRead}get canRead(){return this.env.var("CONSUL_ACLS_ENABLED")&&super.canRead}get canDuplicate(){return this.env.var("CONSUL_ACLS_ENABLED")&&super.canWrite}get canDelete(){return this.env.var("CONSUL_ACLS_ENABLED")&&"anonymous"!==this.item.ID&&super.canWrite}get canUse(){return this.env.var("CONSUL_ACLS_ENABLED")}},u=r.prototype,s="env",c=[l],d={configurable:!0,enumerable:!0,writable:!0,initializer:null},f={},Object.keys(d).forEach((function(e){f[e]=d[e]})),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=c.slice().reverse().reduce((function(e,t){return t(u,s,e)||e}),f),p&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(p):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(u,s,f),f=null),i=f,r) -var u,s,c,d,p,f -e.default=a})),define("consul-ui/abilities/auth-method",["exports","consul-ui/abilities/base","@ember/service"],(function(e,t,n){var l,r,i -function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let a=(l=(0,n.inject)("env"),r=class extends t.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="env",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0}),o(this,"resource","acl"),o(this,"segmented",!1)}get canRead(){return this.env.var("CONSUL_ACLS_ENABLED")&&super.canRead}get canCreate(){return this.env.var("CONSUL_ACLS_ENABLED")&&super.canCreate}get canDelete(){return this.env.var("CONSUL_ACLS_ENABLED")&&super.canDelete}get canUse(){return this.env.var("CONSUL_SSO_ENABLED")}},u=r.prototype,s="env",c=[l],d={configurable:!0,enumerable:!0,writable:!0,initializer:null},f={},Object.keys(d).forEach((function(e){f[e]=d[e]})),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=c.slice().reverse().reduce((function(e,t){return t(u,s,e)||e}),f),p&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(p):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(u,s,f),f=null),i=f,r) -var u,s,c,d,p,f -e.default=a})),define("consul-ui/abilities/base",["exports","@ember/service","@ember/object","ember-can"],(function(e,t,n,l){var r,i,o -function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.ACCESS_LIST=e.ACCESS_WRITE=e.ACCESS_READ=void 0 -const u="read" -e.ACCESS_READ=u -const s="write" -e.ACCESS_WRITE=s -const c="list" -e.ACCESS_LIST=c -let d=(r=(0,t.inject)("repository/permission"),i=class extends l.Ability{constructor(){var e,t,n,l -super(...arguments),e=this,t="permissions",l=this,(n=o)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0}),a(this,"resource",""),a(this,"segmented",!0)}generate(e){return this.permissions.generate(this.resource,e)}generateForSegment(e){return this.segmented?[this.permissions.generate(this.resource,u,e),this.permissions.generate(this.resource,s,e)]:[]}get isLinkable(){return!0}get isNew(){return this.item.isNew}get isPristine(){return this.item.isPristine}get canRead(){if(void 0!==this.item){const e=((0,n.get)(this,"item.Resources")||[]).find((e=>e.Access===u)) -if(e)return e.Allow}return this.permissions.has(this.generate(u))}get canList(){if(void 0!==this.item){const e=((0,n.get)(this,"item.Resources")||[]).find((e=>e.Access===c)) -if(e)return e.Allow}return this.permissions.has(this.generate(c))}get canWrite(){if(void 0!==this.item){const e=((0,n.get)(this,"item.Resources")||[]).find((e=>e.Access===s)) -if(e)return e.Allow}return this.permissions.has(this.generate(s))}get canCreate(){return this.canWrite}get canDelete(){return this.canWrite}get canUpdate(){return this.canWrite}},p=i.prototype,f="permissions",m=[r],h={configurable:!0,enumerable:!0,writable:!0,initializer:null},y={},Object.keys(h).forEach((function(e){y[e]=h[e]})),y.enumerable=!!y.enumerable,y.configurable=!!y.configurable,("value"in y||y.initializer)&&(y.writable=!0),y=m.slice().reverse().reduce((function(e,t){return t(p,f,e)||e}),y),b&&void 0!==y.initializer&&(y.value=y.initializer?y.initializer.call(b):void 0,y.initializer=void 0),void 0===y.initializer&&(Object.defineProperty(p,f,y),y=null),o=y,i) -var p,f,m,h,b,y -e.default=d})),define("consul-ui/abilities/intention",["exports","consul-ui/abilities/base"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{constructor(){var e,t,n -super(...arguments),n="intention",(t="resource")in(e=this)?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n}get canWrite(){return(void 0===this.item||void 0===this.item.SourcePeer)&&(super.canWrite&&(void 0===this.item||!this.canViewCRD))}get canViewCRD(){return void 0!==this.item&&this.item.IsManagedByCRD}}e.default=n})),define("consul-ui/abilities/kv",["exports","consul-ui/abilities/base"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{constructor(){var e,t,n -super(...arguments),n="key",(t="resource")in(e=this)?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n}generateForSegment(e){let n=super.generateForSegment(e) -return e.endsWith("/")&&(n=n.concat(this.permissions.generate(this.resource,t.ACCESS_LIST,e))),n}get canRead(){return!0}get canList(){return!0}get canWrite(){return!0}}e.default=n})),define("consul-ui/abilities/license",["exports","consul-ui/abilities/base","@ember/service"],(function(e,t,n){var l,r,i -function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let a=(l=(0,n.inject)("env"),r=class extends t.default{constructor(){var e,t,n,l -super(...arguments),o(this,"resource","operator"),o(this,"segmented",!1),e=this,t="env",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}get canRead(){return this.env.var("CONSUL_NSPACES_ENABLED")&&super.canRead}},u=r.prototype,s="env",c=[l],d={configurable:!0,enumerable:!0,writable:!0,initializer:null},f={},Object.keys(d).forEach((function(e){f[e]=d[e]})),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=c.slice().reverse().reduce((function(e,t){return t(u,s,e)||e}),f),p&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(p):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(u,s,f),f=null),i=f,r) -var u,s,c,d,p,f -e.default=a})),define("consul-ui/abilities/node",["exports","consul-ui/abilities/base"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{constructor(){var e,t,n -super(...arguments),n="node",(t="resource")in(e=this)?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n}}e.default=n})),define("consul-ui/abilities/nspace",["exports","consul-ui/abilities/base","@ember/service"],(function(e,t,n){var l,r,i -function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let a=(l=(0,n.inject)("env"),r=class extends t.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="env",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0}),o(this,"resource","operator"),o(this,"segmented",!1)}get isLinkable(){return!this.item.DeletedAt}get canManage(){return this.canCreate}get canDelete(){return"default"!==this.item.Name&&super.canDelete}get canChoose(){return this.canUse}get canUse(){return this.env.var("CONSUL_NSPACES_ENABLED")}},u=r.prototype,s="env",c=[l],d={configurable:!0,enumerable:!0,writable:!0,initializer:null},f={},Object.keys(d).forEach((function(e){f[e]=d[e]})),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=c.slice().reverse().reduce((function(e,t){return t(u,s,e)||e}),f),p&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(p):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(u,s,f),f=null),i=f,r) -var u,s,c,d,p,f -e.default=a})),define("consul-ui/abilities/overview",["exports","consul-ui/abilities/base","@ember/service"],(function(e,t,n){var l,r,i -function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let a=(l=(0,n.inject)("env"),r=class extends t.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="env",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0}),o(this,"resource","operator"),o(this,"segmented",!1)}get canAccess(){return!this.env.var("CONSUL_HCP_ENABLED")&&this.canRead}},u=r.prototype,s="env",c=[l],d={configurable:!0,enumerable:!0,writable:!0,initializer:null},f={},Object.keys(d).forEach((function(e){f[e]=d[e]})),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=c.slice().reverse().reduce((function(e,t){return t(u,s,e)||e}),f),p&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(p):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(u,s,f),f=null),i=f,r) -var u,s,c,d,p,f -e.default=a})),define("consul-ui/abilities/partition",["exports","consul-ui/abilities/base","@ember/service"],(function(e,t,n){var l,r,i,o,a -function u(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function s(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function c(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let d=(l=(0,n.inject)("env"),r=(0,n.inject)("repository/dc"),i=class extends t.default{constructor(){super(...arguments),u(this,"env",o,this),u(this,"dcs",a,this),s(this,"resource","operator"),s(this,"segmented",!1)}get isLinkable(){return!this.item.DeletedAt}get canManage(){return this.canWrite}get canCreate(){return!(this.dcs.peekAll().length>1)&&super.canCreate}get canDelete(){return"default"!==this.item.Name&&super.canDelete}get canChoose(){return void 0!==this.dc&&(this.canUse&&this.dc.Primary)}get canUse(){return this.env.var("CONSUL_PARTITIONS_ENABLED")}},o=c(i.prototype,"env",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),a=c(i.prototype,"dcs",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),i) -e.default=d})),define("consul-ui/abilities/peer",["exports","consul-ui/abilities/base","@ember/service"],(function(e,t,n){var l,r,i -function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let a=(l=(0,n.inject)("env"),r=class extends t.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="env",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0}),o(this,"resource","peering"),o(this,"segmented",!1)}get isLinkable(){return this.canDelete}get canDelete(){return!["DELETING"].includes(this.item.State)&&super.canDelete}get canUse(){return this.env.var("CONSUL_PEERINGS_ENABLED")}},u=r.prototype,s="env",c=[l],d={configurable:!0,enumerable:!0,writable:!0,initializer:null},f={},Object.keys(d).forEach((function(e){f[e]=d[e]})),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=c.slice().reverse().reduce((function(e,t){return t(u,s,e)||e}),f),p&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(p):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(u,s,f),f=null),i=f,r) -var u,s,c,d,p,f -e.default=a})),define("consul-ui/abilities/permission",["exports","consul-ui/abilities/base"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{get canRead(){return this.permissions.permissions.length>0}}e.default=n})),define("consul-ui/abilities/policy",["exports","consul-ui/abilities/base","@ember/service","consul-ui/helpers/policy/typeof"],(function(e,t,n,l){var r,i,o -function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let u=(r=(0,n.inject)("env"),i=class extends t.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="env",l=this,(n=o)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0}),a(this,"resource","acl"),a(this,"segmented",!1)}get canRead(){return this.env.var("CONSUL_ACLS_ENABLED")&&super.canRead}get canWrite(){return this.env.var("CONSUL_ACLS_ENABLED")&&(void 0===this.item||"policy-management"!==(0,l.typeOf)([this.item]))&&super.canWrite}get canCreate(){return this.env.var("CONSUL_ACLS_ENABLED")&&super.canCreate}get canDelete(){return this.env.var("CONSUL_ACLS_ENABLED")&&(void 0===this.item||"policy-management"!==(0,l.typeOf)([this.item]))&&super.canDelete}},s=i.prototype,c="env",d=[r],p={configurable:!0,enumerable:!0,writable:!0,initializer:null},m={},Object.keys(p).forEach((function(e){m[e]=p[e]})),m.enumerable=!!m.enumerable,m.configurable=!!m.configurable,("value"in m||m.initializer)&&(m.writable=!0),m=d.slice().reverse().reduce((function(e,t){return t(s,c,e)||e}),m),f&&void 0!==m.initializer&&(m.value=m.initializer?m.initializer.call(f):void 0,m.initializer=void 0),void 0===m.initializer&&(Object.defineProperty(s,c,m),m=null),o=m,i) -var s,c,d,p,f,m -e.default=u})),define("consul-ui/abilities/role",["exports","consul-ui/abilities/base","@ember/service"],(function(e,t,n){var l,r,i -function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let a=(l=(0,n.inject)("env"),r=class extends t.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="env",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0}),o(this,"resource","acl"),o(this,"segmented",!1)}get canRead(){return this.env.var("CONSUL_ACLS_ENABLED")&&super.canRead}get canCreate(){return this.env.var("CONSUL_ACLS_ENABLED")&&super.canCreate}get canDelete(){return this.env.var("CONSUL_ACLS_ENABLED")&&super.canDelete}},u=r.prototype,s="env",c=[l],d={configurable:!0,enumerable:!0,writable:!0,initializer:null},f={},Object.keys(d).forEach((function(e){f[e]=d[e]})),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=c.slice().reverse().reduce((function(e,t){return t(u,s,e)||e}),f),p&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(p):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(u,s,f),f=null),i=f,r) -var u,s,c,d,p,f -e.default=a})),define("consul-ui/abilities/server",["exports","consul-ui/abilities/base"],(function(e,t){function n(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class l extends t.default{constructor(){super(...arguments),n(this,"resource","operator"),n(this,"segmented",!1)}}e.default=l})),define("consul-ui/abilities/service-instance",["exports","consul-ui/abilities/base"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{constructor(){var e,t,n -super(...arguments),n="service",(t="resource")in(e=this)?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n}generateForSegment(e){return super.generateForSegment(...arguments).concat([this.permissions.generate("intention",t.ACCESS_READ,e),this.permissions.generate("intention",t.ACCESS_WRITE,e)])}}e.default=n})),define("consul-ui/abilities/session",["exports","consul-ui/abilities/base"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{constructor(){var e,t,n -super(...arguments),n="session",(t="resource")in(e=this)?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n}}e.default=n})),define("consul-ui/abilities/token",["exports","consul-ui/abilities/base","@ember/service","consul-ui/helpers/token/is-legacy","consul-ui/helpers/token/is-anonymous"],(function(e,t,n,l,r){var i,o,a -function u(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let s=(i=(0,n.inject)("env"),o=class extends t.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="env",l=this,(n=a)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0}),u(this,"resource","acl"),u(this,"segmented",!1)}get canRead(){return this.env.var("CONSUL_ACLS_ENABLED")&&super.canRead}get canCreate(){return this.env.var("CONSUL_ACLS_ENABLED")&&super.canCreate}get canDelete(){return this.env.var("CONSUL_ACLS_ENABLED")&&!(0,r.isAnonymous)([this.item])&&this.item.AccessorID!==this.token.AccessorID&&super.canDelete}get canDuplicate(){return this.env.var("CONSUL_ACLS_ENABLED")&&!(0,l.isLegacy)([this.item])&&super.canWrite}},c=o.prototype,d="env",p=[i],f={configurable:!0,enumerable:!0,writable:!0,initializer:null},h={},Object.keys(f).forEach((function(e){h[e]=f[e]})),h.enumerable=!!h.enumerable,h.configurable=!!h.configurable,("value"in h||h.initializer)&&(h.writable=!0),h=p.slice().reverse().reduce((function(e,t){return t(c,d,e)||e}),h),m&&void 0!==h.initializer&&(h.value=h.initializer?h.initializer.call(m):void 0,h.initializer=void 0),void 0===h.initializer&&(Object.defineProperty(c,d,h),h=null),a=h,o) -var c,d,p,f,m,h -e.default=s})),define("consul-ui/abilities/upstream",["exports","consul-ui/abilities/base"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{constructor(){var e,t,n -super(...arguments),n="upstream",(t="resource")in(e=this)?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n}get isLinkable(){return this.item.InstanceCount>0}}e.default=n})),define("consul-ui/abilities/zervice",["exports","consul-ui/abilities/base"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{constructor(){var e,t,n -super(...arguments),n="service",(t="resource")in(e=this)?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n}get isLinkable(){return this.item.InstanceCount>0}get canReadIntention(){if(void 0===this.item||void 0===this.item.Resources)return!1 -return void 0!==this.item.Resources.find((e=>"intention"===e.Resource&&"read"===e.Access&&!0===e.Allow))}get canWriteIntention(){if(void 0===this.item||void 0===this.item.Resources)return!1 -return void 0!==this.item.Resources.find((e=>"intention"===e.Resource&&"write"===e.Access&&!0===e.Allow))}get canCreateIntention(){return this.canWriteIntention}get canUpdateIntention(){return this.canWriteIntention}}e.default=n})),define("consul-ui/abilities/zone",["exports","consul-ui/abilities/base","@ember/service"],(function(e,t,n){var l,r,i -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let o=(l=(0,n.inject)("env"),r=class extends t.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="env",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}get canRead(){return this.env.var("CONSUL_NSPACES_ENABLED")}},a=r.prototype,u="env",s=[l],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},p={},Object.keys(c).forEach((function(e){p[e]=c[e]})),p.enumerable=!!p.enumerable,p.configurable=!!p.configurable,("value"in p||p.initializer)&&(p.writable=!0),p=s.slice().reverse().reduce((function(e,t){return t(a,u,e)||e}),p),d&&void 0!==p.initializer&&(p.value=p.initializer?p.initializer.call(d):void 0,p.initializer=void 0),void 0===p.initializer&&(Object.defineProperty(a,u,p),p=null),i=p,r) -var a,u,s,c,d,p -e.default=o})),define("consul-ui/adapters/-json-api",["exports","@ember-data/adapter/json-api"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/adapters/application",["exports","consul-ui/adapters/http","@ember/service"],(function(e,t,n){var l,r,i,o,a -function u(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function s(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.NSPACE_QUERY_PARAM=e.DATACENTER_QUERY_PARAM=void 0 -e.DATACENTER_QUERY_PARAM="dc" -e.NSPACE_QUERY_PARAM="ns" -let c=(l=(0,n.inject)("client/http"),r=(0,n.inject)("env"),i=class extends t.default{constructor(){super(...arguments),u(this,"client",o,this),u(this,"env",a,this)}formatNspace(e){if(this.env.var("CONSUL_NSPACES_ENABLED"))return""!==e?{ns:e}:void 0}formatDatacenter(e){return{dc:e}}},o=s(i.prototype,"client",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),a=s(i.prototype,"env",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),i) -e.default=c})),define("consul-ui/adapters/auth-method",["exports","consul-ui/adapters/application"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{requestForQuery(e,t){let{dc:n,ns:l,partition:r,index:i,id:o}=t -return e` - GET /v1/acl/auth-methods?${{dc:n}} - - ${{ns:l,partition:r,index:i}} - `}requestForQueryRecord(e,t){let{dc:n,ns:l,partition:r,index:i,id:o}=t -if(void 0===o)throw new Error("You must specify an id") -return e` - GET /v1/acl/auth-method/${o}?${{dc:n}} - - ${{ns:l,partition:r,index:i}} - `}}e.default=n})),define("consul-ui/adapters/binding-rule",["exports","consul-ui/adapters/application"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{requestForQuery(e,t){let{dc:n,ns:l,partition:r,authmethod:i,index:o}=t -return e` - GET /v1/acl/binding-rules?${{dc:n,authmethod:i}} - - ${{ns:l,partition:r,index:o}} - `}}e.default=n})),define("consul-ui/adapters/coordinate",["exports","consul-ui/adapters/application"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{requestForQuery(e,t){let{dc:n,partition:l,index:r,uri:i}=t -return e` - GET /v1/coordinate/nodes?${{dc:n}} - X-Request-ID: ${i} - - ${{partition:l,index:r}} - `}}e.default=n})),define("consul-ui/adapters/discovery-chain",["exports","consul-ui/adapters/application"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{requestForQueryRecord(e,t){let{dc:n,ns:l,partition:r,index:i,id:o,uri:a}=t -if(void 0===o)throw new Error("You must specify an id") -return e` - GET /v1/discovery-chain/${o}?${{dc:n}} - X-Request-ID: ${a} - - ${{ns:l,partition:r,index:i}} - `}}e.default=n})),define("consul-ui/adapters/http",["exports","@ember/service","@ember-data/adapter","@ember-data/adapter/error"],(function(e,t,n,l){var r,i,o -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const a=function(e,t,n){let l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{} -return e.rpc((function(e){for(var t=arguments.length,l=new Array(t>1?t-1:0),r=1;r1?t-1:0),r=1;r1?t-1:0),r=1;r1?t-1:0),r=1;r=500?new l.ServerError(t,r):new l.default(t,r)}}catch(i){n=i}throw n}query(e,t,n){return a(this,t.modelName,"Query",n)}queryRecord(e,t,n){return a(this,t.modelName,"QueryRecord",n)}findAll(e,t){return a(this,t.modelName,"FindAll")}createRecord(e,t,n){return u(this,t.modelName,"CreateRecord",n)}updateRecord(e,t,n){return u(this,t.modelName,"UpdateRecord",n)}deleteRecord(e,t,n){return u(this,t.modelName,"DeleteRecord",n)}},c=i.prototype,d="client",p=[r],f={configurable:!0,enumerable:!0,writable:!0,initializer:null},h={},Object.keys(f).forEach((function(e){h[e]=f[e]})),h.enumerable=!!h.enumerable,h.configurable=!!h.configurable,("value"in h||h.initializer)&&(h.writable=!0),h=p.slice().reverse().reduce((function(e,t){return t(c,d,e)||e}),h),m&&void 0!==h.initializer&&(h.value=h.initializer?h.initializer.call(m):void 0,h.initializer=void 0),void 0===h.initializer&&(Object.defineProperty(c,d,h),h=null),o=h,i) -var c,d,p,f,m,h -e.default=s})),define("consul-ui/adapters/intention",["exports","consul-ui/adapters/application","@ember/object"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class l extends t.default{requestForQuery(e,t){let{dc:n,ns:l,partition:r,filter:i,index:o,uri:a}=t -return e` - GET /v1/connect/intentions?${{dc:n}} - X-Request-ID: ${a}${void 0!==i?`\n X-Range: ${i}`:""} - - ${{partition:r,ns:"*",index:o,filter:i}} - `}requestForQueryRecord(e,t){let{dc:n,index:l,id:r}=t -if(void 0===r)throw new Error("You must specify an id") -if(r.match(/^peer:/)){const[t,i,o,a,u,s,c]=r.split(":").map(decodeURIComponent) -return e` - GET /v1/connect/intentions/exact?${{source:`${t}:${i}/${o}/${a}`,destination:`${u}/${s}/${c}`,dc:n}} - Cache-Control: no-store - - ${{index:l}} - `}{const[t,i,o,a,u,s]=r.split(":").map(decodeURIComponent) -return e` - GET /v1/connect/intentions/exact?${{source:`${t}/${i}/${o}`,destination:`${a}/${u}/${s}`,dc:n}} - Cache-Control: no-store - - ${{index:l}} - `}}requestForCreateRecord(e,t,l){const r={SourceName:t.SourceName,DestinationName:t.DestinationName,SourceNS:t.SourceNS,DestinationNS:t.DestinationNS,SourcePartition:t.SourcePartition,DestinationPartition:t.DestinationPartition,SourceType:t.SourceType,Meta:t.Meta,Description:t.Description} -return(0,n.get)(t,"Action.length")?r.Action=t.Action:t.Permissions&&(r.Permissions=t.Permissions),e` - PUT /v1/connect/intentions/exact?${{source:`${l.SourcePartition}/${l.SourceNS}/${l.SourceName}`,destination:`${l.DestinationPartition}/${l.DestinationNS}/${l.DestinationName}`,dc:l.Datacenter}} - - ${r} - `}requestForUpdateRecord(e,t,n){return delete t.DestinationName,delete t.DestinationNS,delete t.DestinationPartition,this.requestForCreateRecord(...arguments)}requestForDeleteRecord(e,t,n){return e` - DELETE /v1/connect/intentions/exact?${{source:`${n.SourcePartition}/${n.SourceNS}/${n.SourceName}`,destination:`${n.DestinationPartition}/${n.DestinationNS}/${n.DestinationName}`,dc:n.Datacenter}} - `}}e.default=l})),define("consul-ui/adapters/kv",["exports","consul-ui/adapters/application","consul-ui/utils/isFolder","consul-ui/utils/keyToArray","consul-ui/models/kv"],(function(e,t,n,l,r){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class i extends t.default{async requestForQuery(e,t){let{dc:n,ns:r,partition:i,index:o,id:a,separator:u}=t -if(void 0===a)throw new Error("You must specify an id") -const s=await(e` - GET /v1/kv/${(0,l.default)(a)}?${{keys:null,dc:n,separator:u}} - - ${{ns:r,partition:i,index:o}} - `) -return await s(((e,t)=>delete e["x-consul-index"])),s}async requestForQueryRecord(e,t){let{dc:n,ns:r,partition:i,index:o,id:a}=t -if(void 0===a)throw new Error("You must specify an id") -const u=await(e` - GET /v1/kv/${(0,l.default)(a)}?${{dc:n}} - - ${{ns:r,partition:i,index:o}} - `) -return await u(((e,t)=>delete e["x-consul-index"])),u}requestForCreateRecord(e,t,n){const i={dc:n.Datacenter,ns:n.Namespace,partition:n.Partition} -return e` - PUT /v1/kv/${(0,l.default)(n[r.SLUG_KEY])}?${i} - Content-Type: text/plain; charset=utf-8 - - ${t} - `}requestForUpdateRecord(e,t,n){const i={dc:n.Datacenter,ns:n.Namespace,partition:n.Partition,flags:n.Flags} -return e` - PUT /v1/kv/${(0,l.default)(n[r.SLUG_KEY])}?${i} - Content-Type: text/plain; charset=utf-8 - - ${t} - `}requestForDeleteRecord(e,t,i){let o;(0,n.default)(i[r.SLUG_KEY])&&(o=null) -const a={dc:i.Datacenter,ns:i.Namespace,partition:i.Partition,recurse:o} -return e` - DELETE /v1/kv/${(0,l.default)(i[r.SLUG_KEY])}?${a} - `}}e.default=i})) -define("consul-ui/adapters/node",["exports","consul-ui/adapters/application"],(function(e,t){function n(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) -t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function l(e){for(var t=1;t({ID:e.ID}))),RoleDefaults:t.ACLs.RoleDefaults.map((e=>({ID:e.ID})))}}} - `}requestForUpdateRecord(e,t,l){return e` - PUT /v1/namespace/${l[n.SLUG_KEY]}?${{dc:l.Datacenter,partition:l.Partition}} - - ${{Description:t.Description,ACLs:{PolicyDefaults:t.ACLs.PolicyDefaults.map((e=>({ID:e.ID}))),RoleDefaults:t.ACLs.RoleDefaults.map((e=>({ID:e.ID})))}}} - `}requestForDeleteRecord(e,t,l){return e` - DELETE /v1/namespace/${l[n.SLUG_KEY]}?${{dc:l.Datacenter,partition:l.Partition}} - `}}e.default=l})),define("consul-ui/adapters/oidc-provider",["exports","consul-ui/adapters/application","@ember/service"],(function(e,t,n){var l,r,i -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let o=(l=(0,n.inject)("env"),r=class extends t.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="env",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}requestForQuery(e,t){let{dc:n,ns:l,partition:r,index:i,uri:o}=t -return e` - GET /v1/internal/ui/oidc-auth-methods?${{dc:n}} - X-Request-ID: ${o} - - ${{ns:l,partition:r,index:i}} - `}requestForQueryRecord(e,t){let{dc:n,ns:l,partition:r,id:i}=t -if(void 0===i)throw new Error("You must specify an id") -return e` - POST /v1/acl/oidc/auth-url?${{dc:n,ns:l,partition:r}} - Cache-Control: no-store - - ${{AuthMethod:i,RedirectURI:`${this.env.var("CONSUL_BASE_UI_URL")}/oidc/callback`}} - `}requestForAuthorize(e,t){let{dc:n,ns:l,partition:r,id:i,code:o,state:a}=t -if(void 0===i)throw new Error("You must specify an id") -if(void 0===o)throw new Error("You must specify an code") -if(void 0===a)throw new Error("You must specify an state") -return e` - POST /v1/acl/oidc/callback?${{dc:n,ns:l,partition:r}} - Cache-Control: no-store - - ${{AuthMethod:i,Code:o,State:a}} - `}requestForLogout(e,t){let{id:n}=t -if(void 0===n)throw new Error("You must specify an id") -return e` - POST /v1/acl/logout - Cache-Control: no-store - X-Consul-Token: ${n} - `}authorize(e,t,n,l){return this.rpc((function(e,t,n,l){return e.requestForAuthorize(t,n,l)}),(function(e,t,n,l){return e.respondForAuthorize(t,n,l)}),l,t.modelName)}logout(e,t,n,l){return this.rpc((function(e,t,n,l){return e.requestForLogout(t,n,l)}),(function(e,t,n,l){return{}}),l,t.modelName)}},a=r.prototype,u="env",s=[l],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},p={},Object.keys(c).forEach((function(e){p[e]=c[e]})),p.enumerable=!!p.enumerable,p.configurable=!!p.configurable,("value"in p||p.initializer)&&(p.writable=!0),p=s.slice().reverse().reduce((function(e,t){return t(a,u,e)||e}),p),d&&void 0!==p.initializer&&(p.value=p.initializer?p.initializer.call(d):void 0,p.initializer=void 0),void 0===p.initializer&&(Object.defineProperty(a,u,p),p=null),i=p,r) -var a,u,s,c,d,p -e.default=o})),define("consul-ui/adapters/partition",["exports","consul-ui/adapters/application","consul-ui/models/partition"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class l extends t.default{async requestForQuery(e,t){let{ns:n,dc:l,index:r}=t -const i=await(e` - GET /v1/partitions?${{dc:l}} - - ${{index:r}} - `) -return await i(((e,t)=>delete e["x-consul-index"])),i}async requestForQueryRecord(e,t){let{ns:n,dc:l,index:r,id:i}=t -if(void 0===i)throw new Error("You must specify an id") -const o=await(e` - GET /v1/partition/${i}?${{dc:l}} - - ${{index:r}} - `) -return await o(((e,t)=>delete e["x-consul-index"])),o}async requestForCreateRecord(e,t,l){return e` - PUT /v1/partition/${l[n.SLUG_KEY]}?${{dc:l.Datacenter}} - - ${{Name:t.Name,Description:t.Description}} - `}async requestForUpdateRecord(e,t,l){return e` - PUT /v1/partition/${l[n.SLUG_KEY]}?${{dc:l.Datacenter}} - - ${{Description:t.Description}} - `}async requestForDeleteRecord(e,t,l){return e` - DELETE /v1/partition/${l[n.SLUG_KEY]}?${{dc:l.Datacenter}} - `}}e.default=l})),define("consul-ui/adapters/permission",["exports","consul-ui/adapters/application","@ember/service"],(function(e,t,n){var l,r,i,o,a -function u(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) -t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function s(e){for(var t=1;ts(s({},e),{},{Namespace:l})))),this.env.var("CONSUL_PARTITIONS_ENABLED")&&(i=i.map((e=>s(s({},e),{},{Partition:r})))),e` - POST /v1/internal/acl/authorize?${{dc:n}} - - ${i} - `}authorize(e,t,n,l){return this.rpc((async(e,t,n,l)=>{const r=this.env.var("CONSUL_NSPACES_ENABLED"),i=this.env.var("CONSUL_PARTITIONS_ENABLED") -if(r||i){const e=await this.settings.findBySlug("token") -r&&(void 0!==n.ns&&0!==n.ns.length||(n.ns=e.Namespace)),i&&(void 0!==n.partition&&0!==n.partition.length||(n.partition=e.Partition))}return e.requestForAuthorize(t,n)}),(function(e,t,n,l){return t((function(e,t){return t}))}),l,t.modelName)}},o=p(i.prototype,"env",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),a=p(i.prototype,"settings",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),i) -e.default=f})),define("consul-ui/adapters/policy",["exports","consul-ui/adapters/application","consul-ui/models/policy"],(function(e,t,n){function l(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) -t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function r(e){for(var t=1;tdelete e["x-consul-index"])),a}requestForCreateRecord(e,t,n){return e` - PUT /v1/acl/token?${u(u({},this.formatDatacenter(n.Datacenter)),{},{ns:n.Namespace,partition:n.Partition})} - - ${{Description:t.Description,Policies:t.Policies,Roles:t.Roles,ServiceIdentities:t.ServiceIdentities,NodeIdentities:t.NodeIdentities,Local:t.Local}} - `}requestForUpdateRecord(e,t,n){if(void 0!==n.Rules)return e` - PUT /v1/acl/update?${this.formatDatacenter(n.Datacenter)} - - ${t} - ` -const r=u(u({},this.formatDatacenter(n.Datacenter)),{},{ns:n.Namespace,partition:n.Partition}) -return e` - PUT /v1/acl/token/${n[l.SLUG_KEY]}?${r} - - ${{Description:t.Description,Policies:t.Policies,Roles:t.Roles,ServiceIdentities:t.ServiceIdentities,NodeIdentities:t.NodeIdentities,Local:t.Local}} - `}requestForDeleteRecord(e,t,n){const r={dc:n.Datacenter,ns:n.Namespace,partition:n.Partition} -return e` - DELETE /v1/acl/token/${n[l.SLUG_KEY]}?${r} - `}requestForSelf(e,t,n){let{dc:l,index:r,secret:i}=n -return e` - GET /v1/acl/token/self?${{dc:l}} - X-Consul-Token: ${i} - Cache-Control: no-store - - ${{index:r}} - `}requestForCloneRecord(e,t,n){const r=n[l.SLUG_KEY] -if(void 0===r)throw new Error("You must specify an id") -return e` - PUT /v1/acl/token/${r}/clone?${{dc:n.Datacenter,ns:n.Namespace,partition:n.Partition}} - `}self(e,t,n,l){return this.rpc((function(e,t,n,l){return e.requestForSelf(t,n,l)}),(function(e,t,n,l){return e.respondForSelf(t,n,l)}),l,t.modelName)}clone(e,t,n,l){return this.rpc((function(e,t,n,l){return e.requestForCloneRecord(t,n,l)}),((e,t,n,l)=>{const r={dc:l.Datacenter,ns:l.Namespace,partition:l.Partition} -return e.respondForQueryRecord(t,r)}),l,t.modelName)}},d=i.prototype,p="store",f=[r],m={configurable:!0,enumerable:!0,writable:!0,initializer:null},b={},Object.keys(m).forEach((function(e){b[e]=m[e]})),b.enumerable=!!b.enumerable,b.configurable=!!b.configurable,("value"in b||b.initializer)&&(b.writable=!0),b=f.slice().reverse().reduce((function(e,t){return t(d,p,e)||e}),b),h&&void 0!==b.initializer&&(b.value=b.initializer?b.initializer.call(h):void 0,b.initializer=void 0),void 0===b.initializer&&(Object.defineProperty(d,p,b),b=null),o=b,i) -var d,p,f,m,h,b -e.default=c})),define("consul-ui/adapters/topology",["exports","consul-ui/adapters/application"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{requestForQueryRecord(e,t){let{dc:n,ns:l,partition:r,kind:i,index:o,id:a,uri:u}=t -if(void 0===a)throw new Error("You must specify an id") -return e` - GET /v1/internal/ui/service-topology/${a}?${{dc:n,kind:i}} - X-Request-ID: ${u} - - ${{ns:l,partition:r,index:o}} - `}}e.default=n})),define("consul-ui/app",["exports","@ember/application","ember-resolver","ember-load-initializers","consul-ui/config/environment"],(function(e,t,n,l,r){function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class o extends t.default{constructor(){super(...arguments),i(this,"modulePrefix",r.default.modulePrefix),i(this,"podModulePrefix",r.default.podModulePrefix),i(this,"Resolver",n.default)}}e.default=o,(0,l.default)(o,r.default.modulePrefix)})),define("consul-ui/component-managers/glimmer",["exports","@glimmer/component/-private/ember-component-manager"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/-dynamic-element-alt",["exports","@ember/component"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=t.default.extend() -e.default=n})),define("consul-ui/components/-dynamic-element",["exports","@ember/component"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=t.default.extend() -e.default=n})),define("consul-ui/components/action/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"YwHFpVZ2",block:'[[[41,[30,1],[[[11,"label"],[16,"for",[30,1]],[17,2],[12],[18,8,null],[13]],[]],[[[41,[30,3],[[[41,[30,4],[[[11,3],[16,6,[30,3]],[24,"target","_blank"],[24,"rel","noopener noreferrer"],[17,2],[12],[18,8,null],[13]],[]],[[[11,3],[16,6,[30,3]],[17,2],[12],[18,8,null],[13]],[]]]],[]],[[[11,"button"],[16,4,[28,[37,2],[[30,5],"button"],null]],[16,"tabindex",[30,6]],[17,2],[4,[38,3],["click",[28,[37,4],[[30,7]],null]],null],[12],[18,8,null],[13]],[]]]],[]]]],["@for","&attrs","@href","@external","@type","@tabindex","@onclick","&default"],false,["if","yield","or","on","optional"]]',moduleName:"consul-ui/components/action/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/anonymous/index",["exports","@ember/component","@ember/template-factory"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const l=(0,n.createTemplateFactory)({id:"RdtQ4WaT",block:'[[[18,1,null]],["&default"],false,["yield"]]',moduleName:"consul-ui/components/anonymous/index.hbs",isStrictMode:!1}) -var r=(0,t.setComponentTemplate)(l,t.default.extend({tagName:""})) -e.default=r})),define("consul-ui/components/app-error/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"4rDG/Mn1",block:'[[[8,[39,0],null,null,[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n Error "],[1,[30,1,["status"]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@error","@login"],[[30,1],[52,[28,[37,4],[[30,1,["status"]],"403"],null],[30,2]]]],null],[1,"\\n "]],[]]]]],[1,"\\n"]],[]]]]],[1,"\\n"]],["@error","@login"],false,["app-view","block-slot","error-state","if","eq"]]',moduleName:"consul-ui/components/app-error/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/app-view/index",["exports","@ember/component","@ember/template-factory","block-slots"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"JJpdEf6u",block:'[[[11,0],[24,0,"app-view"],[17,1],[12],[1,"\\n "],[18,2,null],[1,"\\n "],[10,"header"],[12],[1,"\\n "],[10,0],[12],[1,"\\n "],[10,0],[12],[1,"\\n "],[10,"nav"],[14,"aria-label","Breadcrumb"],[12],[1,"\\n "],[8,[39,1],null,[["@name"],["breadcrumbs"]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],null,[["class"],["with-breadcrumbs"]]]],[1,"\\n "],[18,2,null],[1,"\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[10,0],[14,0,"title"],[12],[1,"\\n "],[10,0],[14,0,"title-left-container"],[12],[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[18,2,null],[1,"\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[10,0],[14,0,"actions"],[12],[1,"\\n "],[8,[39,1],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[8,[39,3],null,[["@name"],["app-view-actions"]],null],[1,"\\n "],[18,2,null],[1,"\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[8,[39,1],null,[["@name"],["nav"]],[["default"],[[[[1,"\\n "],[18,2,null],[1,"\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[8,[39,1],null,[["@name"],["toolbar"]],[["default"],[[[[1,"\\n "],[10,"input"],[14,1,"toolbar-toggle"],[14,4,"checkbox"],[12],[13],[1,"\\n "],[18,2,null],[1,"\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[10,0],[12],[1,"\\n "],[8,[39,1],null,[["@name"],["content"]],[["default"],[[[[18,2,null]],[]]]]],[1,"\\n "],[13],[1,"\\n"],[13],[1,"\\n"]],["&attrs","&default"],false,["yield","yield-slot","document-attrs","portal-target"]]',moduleName:"consul-ui/components/app-view/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,t.default.extend(l.default,{tagName:""})) -e.default=i})),define("consul-ui/components/app/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@ember/service","@ember/object"],(function(e,t,n,l,r,i){var o,a,u -function s(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const c=(0,n.createTemplateFactory)({id:"OX4Ky14Q",block:'[[[44,[[28,[37,1],null,[["main","Notification"],[[28,[37,2],[[33,3],"-main"],null],[50,"app/notification",0,null,null]]]]],[[[1,"\\n"],[11,0],[24,0,"app"],[17,2],[12],[1,"\\n\\n "],[11,0],[24,0,"skip-links"],[4,[38,5],["click",[30,0,["focus"]]],null],[12],[1,"\\n "],[8,[39,6],null,[["@name","@multiple"],["app-before-skip-links",true]],[["default"],[[[],[]]]]],[1,"\\n "],[10,3],[15,6,[28,[37,2],["#",[30,1,["main"]]],null]],[12],[1,[28,[35,7],["components.app.skip_to_content"],null]],[13],[1,"\\n"],[1," "],[8,[39,6],null,[["@name","@multiple"],["app-after-skip-links",true]],[["default"],[[[],[]]]]],[1,"\\n "],[13],[1,"\\n\\n "],[8,[39,8],null,null,null],[1,"\\n\\n "],[10,"input"],[15,1,[28,[37,2],[[33,3],"-main-nav-toggle"],null]],[14,4,"checkbox"],[12],[13],[1,"\\n "],[10,"header"],[14,"role","banner"],[12],[1,"\\n "],[11,"label"],[24,"tabindex","0"],[16,"for",[28,[37,2],[[33,3],"-main-nav-toggle"],null]],[16,"aria-label",[28,[37,7],["components.app.toggle_menu"],null]],[4,[38,5],["keypress",[30,0,["keypressClick"]]],null],[4,[38,5],["mouseup",[30,0,["unfocus"]]],null],[12],[13],[1,"\\n "],[18,3,[[30,1]]],[1,"\\n "],[10,0],[12],[1,"\\n"],[1," "],[11,"nav"],[16,"aria-label",[28,[37,7],["components.app.main"],null]],[16,0,[52,[30,0,["navInViewport"]],"in-viewport"]],[4,[38,11],null,[["onEnter","onExit","viewportTolerance"],[[28,[37,12],[[30,0],"navInViewport",true],null],[28,[37,12],[[30,0],"navInViewport",false],null],[28,[37,1],null,[["top","bottom","left","right"],[-10,-10,-10,-10]]]]]],[12],[1,"\\n "],[18,4,[[30,1]]],[1,"\\n "],[13],[1,"\\n"],[1," "],[10,"nav"],[15,"aria-label",[28,[37,7],["components.app.complementary"],null]],[12],[1,"\\n "],[18,5,[[30,1]]],[1,"\\n "],[13],[1,"\\n\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[10,"main"],[15,1,[28,[37,2],[[33,3],"-main"],null]],[12],[1,"\\n "],[10,0],[14,0,"notifications"],[12],[1,"\\n "],[18,6,[[30,1]]],[1,"\\n "],[8,[39,6],null,[["@name","@multiple"],["app-notifications",true]],[["default"],[[[],[]]]]],[1,"\\n "],[13],[1,"\\n "],[18,7,[[30,1]]],[1,"\\n "],[13],[1,"\\n "],[10,"footer"],[14,"role","contentinfo"],[12],[1,"\\n "],[18,8,[[30,1]]],[1,"\\n "],[13],[1,"\\n"],[13],[1,"\\n\\n"]],[1]]]],["exported","&attrs","&home-nav","&main-nav","&complementary-nav","¬ifications","&main","&content-info"],false,["let","hash","concat","guid","component","on","portal-target","t","modal-layer","yield","if","in-viewport","set"]]',moduleName:"consul-ui/components/app/index.hbs",isStrictMode:!1}) -let d=(o=(0,r.inject)("dom"),a=class extends l.default{constructor(e,t){var n,l,r,i -super(...arguments),n=this,l="dom",i=this,(r=u)&&Object.defineProperty(n,l,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(i):void 0}),this.guid=this.dom.guid(this)}keypressClick(e){e.target.dispatchEvent(new MouseEvent("click"))}focus(e){const t=e.target.getAttribute("href") -t.startsWith("#")&&(e.preventDefault(),this.dom.focus(t))}unfocus(e){e.target.blur()}},u=s(a.prototype,"dom",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),s(a.prototype,"keypressClick",[i.action],Object.getOwnPropertyDescriptor(a.prototype,"keypressClick"),a.prototype),s(a.prototype,"focus",[i.action],Object.getOwnPropertyDescriptor(a.prototype,"focus"),a.prototype),s(a.prototype,"unfocus",[i.action],Object.getOwnPropertyDescriptor(a.prototype,"unfocus"),a.prototype),a) -e.default=d,(0,t.setComponentTemplate)(c,d)})),define("consul-ui/components/app/notification/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"OwV217Ed",block:'[[[11,0],[24,0,"app-notification"],[17,1],[4,[38,0],[[28,[37,1],[[28,[37,1],["opacity","1"],null],[28,[37,1],["transition-delay",[28,[37,2],[[30,2],"ms"],null]],null]],null]],null],[4,[38,0],[[28,[37,1],[[28,[37,1],["opacity",[52,[30,3],"1","0"]],null]],null]],[["delay"],[0]]],[12],[1,"\\n "],[18,4,null],[1,"\\n"],[13],[1,"\\n\\n"]],["&attrs","@delay","@sticky","&default"],false,["style","array","concat","if","yield"]]',moduleName:"consul-ui/components/app/notification/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/aria-menu/index",["exports","@ember/component","@ember/template-factory","@ember/service","@ember/object","@ember/runloop"],(function(e,t,n,l,r,i){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const o=(0,n.createTemplateFactory)({id:"W/2RN9qq",block:'[[[18,1,[[28,[37,1],[[30,0],"change"],null],[28,[37,1],[[30,0],"keypress"],null],[28,[37,1],[[30,0],"keypressClick"],null],[28,[37,2],null,[["labelledBy","controls","expanded"],[[28,[37,3],["component-aria-menu-trigger-",[33,4]],null],[28,[37,3],["component-aria-menu-menu-",[33,4]],null],[52,[33,6],"true",[27]]]]]]]],["&default"],false,["yield","action","hash","concat","guid","if","expanded"]]',moduleName:"consul-ui/components/aria-menu/index.hbs",isStrictMode:!1}),a=13,u=32,s=38,c=40,d={vertical:{[c]:function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1 -return(t+1)%e.length},[s]:function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0 -return 0===t?e.length-1:t-1},36:function(e,t){return 0},35:function(e,t){return e.length-1}},horizontal:{}},p='[role^="menuitem"]' -var f=(0,t.setComponentTemplate)(o,t.default.extend({tagName:"",dom:(0,l.inject)("dom"),guid:"",expanded:!1,orientation:"vertical",keyboardAccess:!0,init:function(){this._super(...arguments),(0,r.set)(this,"guid",this.dom.guid(this)),this._listeners=this.dom.listeners(),this._routelisteners=this.dom.listeners()},didInsertElement:function(){this.$menu=this.dom.element(`#component-aria-menu-menu-${this.guid}`) -const e=this.$menu.getAttribute("aria-labelledby") -this.$trigger=this.dom.element(`#${e}`)},willDestroyElement:function(){this._super(...arguments),this._listeners.remove(),this._routelisteners.remove()},actions:{keypressClick:function(e){e.target.dispatchEvent(new MouseEvent("click"))},keypress:function(e){if(![a,u,s,c].includes(e.keyCode))return -e.stopPropagation() -const t=[...this.dom.elements(p,this.$menu)] -if(e.keyCode===a||e.keyCode===u){let e=this.expanded?void 0:t[0];(0,i.next)((()=>{e=this.expanded?e:this.$trigger,void 0!==e&&e.focus()}))}if(void 0===d[this.orientation][e.keyCode])return -e.preventDefault() -const n=this.dom.element(`${p}:focus`,this.$menu) -let l -n&&(l=t.findIndex((function(e){return e===n}))) -t[d[this.orientation][e.keyCode](t,l)].focus()},change:function(e){e.target.checked?this.actions.open.apply(this,[e]):this.actions.close.apply(this,[e])},close:function(e){this._listeners.remove(),(0,r.set)(this,"expanded",!1),(0,i.next)((()=>{this.$trigger.removeAttribute("tabindex")}))},open:function(e){(0,r.set)(this,"expanded",!0) -0===[...this.dom.elements(p,this.$menu)].length&&this.dom.element('input[type="checkbox"]',this.$menu.parentElement).dispatchEvent(new MouseEvent("click")),this.$trigger.setAttribute("tabindex","-1"),this._listeners.add(this.dom.document(),{keydown:e=>{27===e.keyCode&&this.$trigger.focus(),9!==e.keyCode&&27!==e.keyCode?this.keyboardAccess&&this.actions.keypress.apply(this,[e]):this.$trigger.dispatchEvent(new MouseEvent("click"))}})}}})) -e.default=f})),define("consul-ui/components/auth-dialog/chart.xstate",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={id:"auth-dialog",initial:"idle",on:{CHANGE:[{target:"authorized",cond:"hasToken",actions:["login"]},{target:"unauthorized",actions:["logout"]}]},states:{idle:{on:{CHANGE:[{target:"authorized",cond:"hasToken"},{target:"unauthorized"}]}},unauthorized:{},authorized:{}}}})),define("consul-ui/components/auth-dialog/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@ember/service","@ember/object","consul-ui/components/auth-dialog/chart.xstate"],(function(e,t,n,l,r,i,o){var a,u,s -function c(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const d=(0,n.createTemplateFactory)({id:"Nh7efm+X",block:'[[[8,[39,0],null,[["@src"],[[99,1,["@src"]]]],[["default"],[[[[1,"\\n\\n "],[8,[30,2],null,[["@name","@cond"],["hasToken",[28,[37,2],[[30,0],"hasToken"],null]]],null],[1,"\\n "],[8,[30,3],null,[["@name","@exec"],["login",[28,[37,2],[[30,0],"login"],null]]],null],[1,"\\n "],[8,[30,3],null,[["@name","@exec"],["logout",[28,[37,2],[[30,0],"logout"],null]]],null],[1,"\\n\\n"],[1," "],[8,[39,3],null,[["@src","@onchange"],[[30,6],[28,[37,4],[[28,[37,2],[[30,0],[28,[37,5],[[33,6]],null]],[["value"],["data"]]],[28,[37,2],[[30,0],[30,4],"CHANGE"],null],[28,[37,2],[[30,0],[28,[37,5],[[33,7]],null]],[["value"],["data"]]]],null]]],null],[1,"\\n"],[1," "],[8,[39,8],null,[["@sink"],[[30,7]]],[["default"],[[[[1,"\\n"],[44,[[28,[37,10],null,[["login","logout","token"],[[28,[37,2],[[30,0],[30,8,["open"]]],null],[28,[37,2],[[30,0],[30,8,["open"]],null],null],[33,6]]]]],[[[1,"\\n "],[8,[30,1],null,[["@matches"],["authorized"]],[["default"],[[[[1,"\\n "],[18,10,[[30,9]]],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[30,1],null,[["@matches"],["unauthorized"]],[["default"],[[[[1,"\\n "],[18,11,[[30,9]]],[1,"\\n "]],[]]]]],[1,"\\n\\n"]],[9]]],[1," "]],[8]]]]],[1,"\\n"]],[1,2,3,4,5]]]]],[1,"\\n"]],["State","Guard","Action","dispatch","state","@src","@sink","sink","api","&authorized","&unauthorized"],false,["state-chart","chart","action","data-source","queue","mut","token","previousToken","data-sink","let","hash","yield"]]',moduleName:"consul-ui/components/auth-dialog/index.hbs",isStrictMode:!1}) -let p=(a=(0,r.inject)("repository/oidc-provider"),u=class extends l.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="repo",l=this,(n=s)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0}),this.chart=o.default}hasToken(){return void 0!==this.token.AccessorID}login(){let e=(0,i.get)(this,"previousToken.AccessorID"),t=(0,i.get)(this,"token.AccessorID") -null===e&&(e=(0,i.get)(this,"previousToken.SecretID")),null===t&&(t=(0,i.get)(this,"token.SecretID")) -let n="authorize" -void 0!==e&&e!==t&&(n="use"),this.args.onchange({data:(0,i.get)(this,"token"),type:n})}logout(){void 0!==(0,i.get)(this,"previousToken.AuthMethod")&&this.repo.logout((0,i.get)(this,"previousToken.SecretID")),this.previousToken=null,this.args.onchange({data:null,type:"logout"})}},s=c(u.prototype,"repo",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),c(u.prototype,"hasToken",[i.action],Object.getOwnPropertyDescriptor(u.prototype,"hasToken"),u.prototype),c(u.prototype,"login",[i.action],Object.getOwnPropertyDescriptor(u.prototype,"login"),u.prototype),c(u.prototype,"logout",[i.action],Object.getOwnPropertyDescriptor(u.prototype,"logout"),u.prototype),u) -e.default=p,(0,t.setComponentTemplate)(d,p)})),define("consul-ui/components/auth-form/chart.xstate",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={id:"auth-form",initial:"idle",on:{RESET:[{target:"idle"}],ERROR:[{target:"error"}]},states:{idle:{entry:["clearError"],on:{SUBMIT:[{target:"loading",cond:"hasValue"},{target:"error"}]}},loading:{},error:{exit:["clearError"],on:{TYPING:[{target:"idle"}],SUBMIT:[{target:"loading",cond:"hasValue"},{target:"error"}]}}}}})),define("consul-ui/components/auth-form/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@ember/object","consul-ui/components/auth-form/chart.xstate","consul-ui/components/auth-form/tabs.xstate"],(function(e,t,n,l,r,i,o){var a -function u(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const s=(0,n.createTemplateFactory)({id:"35JQNcNu",block:'[[[8,[39,0],null,[["@src"],[[30,0,["chart"]]]],[["default"],[[[[1,"\\n"],[44,[[28,[37,2],null,[["State","Guard","Action","dispatch","state"],[[30,1],[30,2],[30,3],[30,4],[30,5]]]]],[[[44,[[28,[37,2],null,[["reset","focus","disabled","error","submit"],[[28,[37,3],[[30,0],[30,4],"RESET"],null],[30,0,["focus"]],[28,[37,4],[[30,5],"loading"],null],[28,[37,5],[[28,[37,3],[[30,0],[30,4],"ERROR"],null],[28,[37,3],[[30,0],[28,[37,6],[[30,0,["error"]]],null]],[["value"],["error.errors.firstObject"]]]],null],[28,[37,5],[[28,[37,3],[[30,0],[28,[37,6],[[30,0,["value"]]],null]],null],[28,[37,3],[[30,0],[30,4],"SUBMIT"],null]],null]]]]],[[[1," "],[8,[30,2],null,[["@name","@cond"],["hasValue",[30,0,["hasValue"]]]],null],[1,"\\n"],[1," "],[8,[30,6,["Action"]],null,[["@name","@exec"],["clearError",[28,[37,5],[[28,[37,3],[[30,0],[28,[37,6],[[30,0,["error"]]],null],[27]],null],[28,[37,3],[[30,0],[28,[37,6],[[30,0,["secret"]]],null],[27]],null]],null]]],null],[1,"\\n "],[11,0],[24,0,"auth-form"],[17,8],[12],[1,"\\n "],[8,[39,0],null,[["@src"],[[30,0,["tabsChart"]]]],[["default"],[[[[1,"\\n"],[41,[28,[37,8],["use SSO"],null],[[[1," "],[8,[39,9],null,[["@items","@onclick"],[[28,[37,10],[[28,[37,2],null,[["label","selected"],["Token",[28,[37,4],[[30,13],"token"],null]]]],[28,[37,2],null,[["label","selected"],["SSO",[28,[37,4],[[30,13],"sso"],null]]]]],null],[28,[37,5],[[28,[37,3],[[30,0],[30,12]],null],[28,[37,3],[[30,0],[30,4],"RESET"],null]],null]]],null],[1,"\\n"]],[]],null],[1," "],[8,[30,1],null,[["@matches"],["error"]],[["default"],[[[[1,"\\n"],[41,[30,0,["error","status"]],[[[1," "],[8,[39,11],[[24,0,"mb-1 mt-2"]],[["@type","@color"],["inline","critical"]],[["default"],[[[[1,"\\n "],[8,[30,14,["Title"]],null,null,[["default"],[[[[1,"\\n"],[41,[30,0,["value","Name"]],[[[41,[28,[37,12],[[30,0,["error","status"]],"403"],null],[[[1," Consul login failed\\n"]],[]],[[[41,[28,[37,12],[[30,0,["error","status"]],"401"],null],[[[1," Could not log in to provider\\n"]],[]],[[[41,[28,[37,12],[[30,0,["error","status"]],"499"],null],[[[1," SSO log in window closed\\n"]],[]],[[[1," Error\\n "]],[]]]],[]]]],[]]]],[]],[[[41,[28,[37,12],[[30,0,["error","status"]],"403"],null],[[[1," Invalid token\\n"]],[]],[[[41,[28,[37,12],[[30,0,["error","status"]],"404"],null],[[[1," No providers\\n"]],[]],[[[1," Error\\n "]],[]]]],[]]]],[]]],[1," "]],[]]]]],[1,"\\n "],[8,[30,14,["Description"]],null,null,[["default"],[[[[1,"\\n"],[41,[30,0,["value","Name"]],[[[41,[28,[37,12],[[30,0,["error","status"]],"403"],null],[[[1," We received a token from your OIDC provider but could not log in to Consul\\n with it.\\n"]],[]],[[[41,[28,[37,12],[[30,0,["error","status"]],"401"],null],[[[1," The OIDC provider has rejected this access token. Please have an\\n administrator check your auth method configuration.\\n"]],[]],[[[41,[28,[37,12],[[30,0,["error","status"]],"499"],null],[[[1," The OIDC provider window was closed. Please try again.\\n"]],[]],[[[1," "],[1,[30,0,["error","detail"]]],[1,"\\n "]],[]]]],[]]]],[]]]],[]],[[[41,[28,[37,12],[[30,0,["error","status"]],"403"],null],[[[1," The token entered does not exist. Please enter a valid token to log in.\\n"]],[]],[[[41,[28,[37,12],[[30,0,["error","status"]],"404"],null],[[[1," No SSO providers are configured for that Partition.\\n"]],[]],[[[1," "],[1,[30,0,["error","detail"]]],[1,"\\n "]],[]]]],[]]]],[]]],[1," "]],[]]]]],[1,"\\n "]],[14]]]]],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[8,[30,9],null,[["@matches"],["token"]],[["default"],[[[[1,"\\n "],[10,"form"],[15,"onsubmit",[28,[37,3],[[30,0],[30,4],"SUBMIT"],null]],[12],[1,"\\n "],[10,"fieldset"],[12],[1,"\\n "],[10,"label"],[15,0,[28,[37,13],["type-password",[52,[28,[37,14],[[28,[37,4],[[30,5],"error"],null],[28,[37,15],[[30,0,["error","status"]]],null]],null]," has-error"]],null]],[12],[1,"\\n "],[10,1],[12],[1,"Log in with a token"],[13],[1,"\\n\\n"],[1," "],[11,"input"],[16,"disabled",[28,[37,4],[[30,5],"loading"],null]],[24,3,"auth[SecretID]"],[24,"placeholder","SecretID"],[16,2,[30,0,["secret"]]],[16,"oninput",[28,[37,5],[[28,[37,3],[[30,0],[28,[37,6],[[30,0,["secret"]]],null]],[["value"],["target.value"]]],[28,[37,3],[[30,0],[28,[37,6],[[30,0,["value"]]],null]],[["value"],["target.value"]]],[28,[37,3],[[30,0],[30,4],"TYPING"],null]],null]],[16,4,[52,[28,[37,12],[[28,[37,16],["environment"],null],"testing"],null],"text","password"]],[4,[38,17],[[28,[37,18],[[30,0],"input"],null]],null],[12],[13],[1,"\\n "],[8,[30,1],null,[["@matches"],["error"]],[["default"],[[[[1,"\\n"],[41,[28,[37,15],[[30,0,["error","status"]]],null],[[[1," "],[10,"strong"],[14,"role","alert"],[12],[1,"\\n Please enter your secret\\n "],[13],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[8,[39,19],[[16,"disabled",[28,[37,4],[[30,5],"loading"],null]],[24,4,"submit"]],[["@text"],["Log in"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[18,19,[[28,[37,21],[[30,7],[28,[37,2],null,[["Method"],[[30,9]]]]],null]]],[1,"\\n\\n "],[10,"em"],[12],[1,"\\n Contact your administrator for login credentials.\\n "],[13],[1,"\\n "]],[9,10,11,12,13]]]]],[1,"\\n\\n "],[13],[1,"\\n "],[8,[30,1],null,[["@matches"],["loading"]],[["default"],[[[[1,"\\n "],[8,[39,22],null,[["@dc","@nspace","@partition","@type","@value","@onchange","@onerror"],[[30,15],[28,[37,23],[[30,0,["value","Namespace"]],[30,16]],null],[28,[37,23],[[30,0,["value","Partition"]],[30,17]],null],[52,[30,0,["value","Name"]],"oidc","secret"],[30,0,["value"]],[28,[37,5],[[28,[37,3],[[30,0],[30,4],"RESET"],null],[30,18]],null],[28,[37,5],[[28,[37,3],[[30,0],[28,[37,6],[[30,0,["error"]]],null]],[["value"],["error.errors.firstObject"]]],[28,[37,3],[[30,0],[30,4],"ERROR"],null]],null]]],null],[1,"\\n "]],[]]]]],[1,"\\n"]],[7]]]],[6]]]],[1,2,3,4,5]]]]],[1,"\\n"]],["State","Guard","ChartAction","dispatch","state","chart","exported","&attrs","TabState","IgnoredGuard","IgnoredAction","tabDispatch","tabState","A","@dc","@nspace","@partition","@onsubmit","&default"],false,["state-chart","let","hash","action","state-matches","queue","mut","if","can","tab-nav","array","hds/alert","eq","concat","and","not","env","did-insert","set","hds/button","yield","assign","token-source","or"]]',moduleName:"consul-ui/components/auth-form/index.hbs",isStrictMode:!1}) -let c=(a=class extends l.default{constructor(){super(...arguments),this.chart=i.default,this.tabsChart=o.default}hasValue(e,t,n){return""!==this.value&&void 0!==this.value}focus(){this.input.focus()}},u(a.prototype,"hasValue",[r.action],Object.getOwnPropertyDescriptor(a.prototype,"hasValue"),a.prototype),u(a.prototype,"focus",[r.action],Object.getOwnPropertyDescriptor(a.prototype,"focus"),a.prototype),a) -e.default=c,(0,t.setComponentTemplate)(s,c)})),define("consul-ui/components/auth-form/tabs.xstate",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={id:"auth-form-tabs",initial:"token",on:{TOKEN:[{target:"token"}],SSO:[{target:"sso"}]},states:{token:{},sso:{}}}})),define("consul-ui/components/auth-profile/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"FSF8r1GE",block:'[[[11,"dl"],[24,0,"auth-profile"],[17,1],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n "],[10,1],[12],[1,"My ACL Token"],[13],[10,"br"],[12],[13],[1,"\\n AccessorID\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[28,[35,0],[[30,2,["AccessorID"]],[28,[37,1],[[30,2,["AccessorID","length"]],8],null]],null]],[1,"\\n "],[13],[1,"\\n"],[13]],["&attrs","@item"],false,["string-substring","sub"]]',moduleName:"consul-ui/components/auth-profile/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})) -define("consul-ui/components/basic-dropdown-content",["exports","ember-basic-dropdown/components/basic-dropdown-content"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/basic-dropdown-optional-tag",["exports","ember-basic-dropdown/components/basic-dropdown-optional-tag"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/basic-dropdown-trigger",["exports","ember-basic-dropdown/components/basic-dropdown-trigger"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/basic-dropdown",["exports","ember-basic-dropdown/components/basic-dropdown"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/block-slot",["exports","block-slots/components/block-slot"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/brand-loader/enterprise",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"DW5EhD40",block:'[[[10,"path"],[14,"data-enterprise-logo",""],[14,"d","M322.099,18.0445001 C319.225,18.0223001 316.427,18.9609001 314.148,20.7112001 L314.016,20.8179001 L313.68,18.5368001 L310.332,18.5368001 L310.332,53.0000001 L314.312,52.4338001 L314.312,42.3164001 L314.435,42.3164001 C316.705,42.7693001 319.012,43.0165001 321.327,43.0549001 C326.554,43.0549001 329.098,40.5029001 329.098,35.2432001 L329.098,25.3802001 C329.073,20.4569001 326.809,18.0445001 322.099,18.0445001 Z M264.971,11.9722001 L260.991,12.5466001 L260.991,18.5284001 L256.708,18.5284001 L256.708,21.8106001 L260.991,21.8106001 L260.991,37.6883001 L260.99344,37.9365729 C261.066744,41.6122056 262.7975,43.1124033 266.915,43.1124033 C268.591,43.1170001 270.255,42.8396001 271.839,42.2915001 L271.363,39.1817001 L270.896229,39.3066643 C269.803094,39.5806719 268.682875,39.7315001 267.555,39.7560001 C265.526625,39.7560001 265.081547,38.9674128 264.991981,37.7056542 L264.97743,37.4176027 L264.97159,37.1147428 L264.971,21.8188001 L271.494,21.8188001 L271.83,18.5366001 L264.971,18.5366001 L264.971,11.9722001 Z M283.556,18.0770001 C277.312,18.0770001 274.144,21.0884001 274.144,27.0374001 L274.144,34.3075001 C274.144,40.3140001 277.164,43.1124894 283.655,43.1124894 C286.526,43.1192001 289.38,42.6620001 292.106,41.7581001 L291.589,38.6154001 C289.116,39.3030001 286.566,39.6779001 283.999,39.7314001 C279.785843,39.7314001 278.500803,38.4772648 278.201322,35.860808 L278.165734,35.4868687 L278.141767,35.0951811 C278.138675,35.0284172 278.136019,34.9609111 278.133774,34.8926614 L278.125037,34.474229 L278.124,32.0756001 L292.582,32.0756001 L292.582,27.1031001 C292.582,21.0064001 289.636,18.0770001 283.556,18.0770001 Z M384.631,18.0768001 C378.412,18.0440001 375.22,21.0554001 375.22,27.0208001 L375.22,34.2909001 C375.22,40.2973001 378.239,43.0955988 384.73,43.0955988 C387.599,43.1033001 390.45,42.6460001 393.173,41.7415001 L392.665,38.5988001 C390.188,39.2815001 387.635,39.6509001 385.066,39.6983001 C380.852843,39.6983001 379.567803,38.4442359 379.268322,35.8278014 L379.232734,35.4538649 L379.208767,35.0621794 C379.205675,34.9954158 379.203019,34.9279099 379.200774,34.8596604 L379.192037,34.4412289 L379.191,32.0754001 L393.657,32.0754001 L393.657,27.1029001 C393.657,21.0062001 390.712,18.0768001 384.631,18.0768001 Z M364.634,18.0441001 C363.881125,18.0441001 363.18736,18.0712813 362.54969,18.1279834 L362.016783,18.1838695 C357.948857,18.6791301 356.371,20.5353768 356.371,24.4608001 L356.371522,24.7155013 L356.376145,25.2052033 L356.386527,25.669464 L356.403852,26.1092746 C356.407384,26.1805939 356.411254,26.2509357 356.415488,26.3203208 L356.445451,26.7253144 L356.485319,27.1083357 C356.756619,29.3425283 357.626845,30.4437319 360.247859,31.3753061 L360.701103,31.529163 C360.779411,31.5545991 360.85912,31.5799457 360.940253,31.6052232 L361.444353,31.7562266 L361.983836,31.9065664 L362.55989,32.0572338 L363.430663,32.2724269 L364.440153,32.5299129 L364.884369,32.6506971 L365.29049,32.7679922 L365.660213,32.8831607 L365.99523,32.9975651 C367.26815,33.4554713 367.748817,33.9277406 367.925217,34.806783 L367.963261,35.0352452 C367.974017,35.1143754 367.982943,35.1965576 367.990321,35.2820187 L368.008092,35.5484662 L368.018269,35.8359502 L368.023,36.3096001 C368.023,36.3683432 368.022674,36.4261667 368.021989,36.4830819 L368.013333,36.8137655 C368.008847,36.9204214 368.002676,37.0235359 367.994568,37.1232009 L367.964177,37.4119383 C367.774513,38.8512264 367.058626,39.4837671 364.875404,39.6510671 L364.43427,39.67773 L363.954974,39.6933243 C363.78868,39.6967387 363.615773,39.6984001 363.436,39.6984001 C361.126,39.6638001 358.83,39.3385001 356.601,38.7302001 L356.051,41.7908001 L356.619468,41.9710684 C358.900888,42.6645722 361.270923,43.0269154 363.658,43.0463001 C369.59355,43.0463001 371.402903,41.3625861 371.812159,38.0405419 L371.854011,37.6421573 C371.859965,37.574501 371.865421,37.5062155 371.870401,37.4373012 L371.894725,37.0162715 L371.908596,36.5801656 C371.911587,36.4322862 371.913,36.2818967 371.913,36.1290001 L371.914417,35.5317322 C371.901583,33.4289389 371.677,32.2649251 370.797,31.3698001 C370.053077,30.6022731 368.787947,30.0494771 366.870096,29.4840145 L366.242608,29.3047611 C366.13436,29.2747269 366.024265,29.2445914 365.912304,29.2143213 L365.218,29.0308209 L364.216102,28.7784328 L363.495981,28.593015 L363.068145,28.4733265 L362.67987,28.3551624 C361.018765,27.8247783 360.501056,27.2986662 360.340522,26.2094051 L360.310407,25.9578465 C360.306262,25.9142982 360.302526,25.8699197 360.29916,25.8246823 L360.283089,25.5427193 L360.273984,25.2387571 L360.269927,24.911412 L360.270221,24.3885398 L360.280627,24.0635689 C360.366727,22.3885604 360.966747,21.6370879 363.248047,21.4645754 L363.695778,21.4389299 L364.184625,21.426349 L364.445,21.4248001 C366.684,21.4608001 368.916,21.6859001 371.117,22.0976001 L371.396,18.8646001 L370.730951,18.7059457 C368.73071,18.2553391 366.686,18.0331201 364.634,18.0441001 Z M351.301,18.5363001 L347.321,18.5363001 L347.321,42.6112001 L351.301,42.6112001 L351.301,18.5363001 Z M307.335,18.0850001 L306.70097,18.3638937 C304.598769,19.3169298 302.610091,20.5031364 300.771,21.9005001 L300.623,22.0236001 L300.369,18.5363001 L296.931,18.5363001 L296.931,42.6112001 L300.91,42.6112001 L300.91,25.9048001 L301.641825,25.3925123 C303.604371,24.0427531 305.654445,22.8240667 307.778,21.7446001 L307.335,18.0850001 Z M344.318,18.0850001 L343.683947,18.3638937 C341.581595,19.3169298 339.592091,20.5031364 337.753,21.9005001 L337.606,22.0236001 L337.351,18.5363001 L333.946,18.5363001 L333.946,42.6112001 L337.926,42.6112001 L337.926,25.9048001 L337.967,25.9048001 L338.701162,25.3884311 C340.669963,24.0279284 342.726556,22.7996223 344.859,21.7118001 L344.318,18.0850001 Z M230.384,9.62500005 L211.109,9.62500005 L211.109,42.6112001 L230.466,42.6112001 L230.466,38.9597001 L215.146,38.9597001 L215.146,27.4720001 L229.293,27.4720001 L229.293,23.8698001 L215.146,23.8698001 L215.146,13.2600001 L230.384,13.2600001 L230.384,9.62500005 Z M248.763,18.0441001 C245.899,18.0441001 241.706,19.3323001 239.047,20.6124001 L238.924,20.6698001 L238.522,18.5282001 L235.322,18.5282001 L235.322,42.5704001 L239.302,42.5704001 L239.302,24.2885001 L239.359,24.2885001 C241.919,22.9674001 245.661,21.8268001 247.524,21.8268001 C249.165,21.8268001 249.985,22.5735001 249.985,24.1736001 L249.985,42.5868001 L253.965,42.5868001 L253.965,24.1161001 C253.932,20.0380001 252.25,18.0523001 248.763,18.0441001 Z M321.229,21.5564001 C323.526,21.5564001 325.061,22.2046001 325.061,25.3966001 L325.094,35.2760001 C325.094,38.3121001 323.887,39.6085001 321.057,39.6085001 C318.81,39.5533001 316.572,39.3035001 314.369,38.8618001 L314.287,38.8618001 L314.287,24.4694001 C316.198,22.7311001 318.649,21.7027001 321.229,21.5564001 Z M283.581,21.3264001 C287.372,21.3264001 288.758,22.8855001 288.758,26.7010001 L288.758,28.7934001 L278.149,28.7934001 L278.149,26.7010001 C278.149,22.9839001 279.79,21.3264001 283.581,21.3264001 Z M384.648,21.3262001 C388.431,21.3262001 389.834,22.8852001 389.834,26.7008001 L389.834,28.7932001 L379.224,28.7932001 L379.224,26.7008001 C379.224,22.9837001 380.865,21.3262001 384.648,21.3262001 Z M351.301,8.63220005 L347.321,8.63220005 L347.321,14.4499001 L351.301,14.4499001 L351.301,8.63220005 Z"],[14,"fill-rule","nonzero"],[12],[13],[1,"\\n\\n"]],[],false,[]]',moduleName:"consul-ui/components/brand-loader/enterprise.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/brand-loader/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"yNoyAgqg",block:'[[[10,0],[14,0,"brand-loader"],[15,5,[29,["margin-left: calc(-",[30,1],"px / 2)"]]],[12],[1,"\\n"],[10,"svg"],[15,"width",[29,[[30,1]]]],[14,"height","53"],[14,"xmlns","http://www.w3.org/2000/svg","http://www.w3.org/2000/xmlns/"],[15,"fill",[29,[[30,2]]]],[12],[1,"\\n "],[10,"path"],[14,"d","M32.7240001,0.866235051 C28.6239001,-0.218137949 24.3210001,-0.285465949 20.1890001,0.670096051 C16.0569001,1.62566005 12.2205001,3.57523005 9.01276015,6.34960005 C5.80499015,9.12397005 3.32280015,12.6393001 1.78161015,16.5905001 C0.240433148,20.5416001 -0.313157852,24.8092001 0.168892148,29.0228001 C0.650943148,33.2364001 2.15407015,37.2687001 4.54780015,40.7697001 C6.94153015,44.2707001 10.1535001,47.1346001 13.9050001,49.1128001 C17.6565001,51.0910001 21.8341001,52.1238001 26.0752001,52.1214409 C32.6125001,52.1281001 38.9121001,49.6698001 43.7170001,45.2370001 L37.5547001,38.7957001 C35.0952001,41.0133001 32.0454001,42.4701001 28.7748001,42.9898001 C25.5042001,43.5096001 22.1530001,43.0698001 19.1273001,41.7239001 C16.1015001,40.3779001 13.5308001,38.1835001 11.7267001,35.4064001 C9.92260015,32.6294001 8.96239015,29.3888001 8.96239015,26.0771001 C8.96239015,22.7655001 9.92260015,19.5249001 11.7267001,16.7478001 C13.5308001,13.9707001 16.1015001,11.7763001 19.1273001,10.4304001 C22.1530001,9.08444005 25.5042001,8.64470005 28.7748001,9.16441005 C32.0454001,9.68412005 35.0952001,11.1410001 37.5547001,13.3586001 L43.7170001,6.89263005 C40.5976001,4.01926005 36.8241001,1.95061005 32.7240001,0.866235051 Z M46.6320001,34.8572001 C46.2182001,34.9395001 45.8380001,35.1427001 45.5397001,35.4410001 C45.2413001,35.7394001 45.0381001,36.1195001 44.9558001,36.5334001 C44.8735001,36.9472001 44.9157001,37.3762001 45.0772001,37.7660001 C45.2387001,38.1559001 45.5121001,38.4891001 45.8630001,38.7235001 C46.2138001,38.9579001 46.6263001,39.0830001 47.0482001,39.0830001 C47.6141001,39.0830001 48.1567001,38.8583001 48.5568001,38.4582001 C48.9569001,38.0581001 49.1817001,37.5154001 49.1817001,36.9496001 C49.1817001,36.5276001 49.0565001,36.1152001 48.8221001,35.7643001 C48.5877001,35.4135001 48.2545001,35.1400001 47.8647001,34.9786001 C47.4748001,34.8171001 47.0459001,34.7748001 46.6320001,34.8572001 Z M49.0856001,27.5622001 C48.6718001,27.6446001 48.2916001,27.8477001 47.9933001,28.1461001 C47.6949001,28.4445001 47.4917001,28.8246001 47.4094001,29.2385001 C47.3271001,29.6523001 47.3693001,30.0813001 47.5308001,30.4711001 C47.6923001,30.8609001 47.9657001,31.1941001 48.3166001,31.4286001 C48.6674001,31.6630001 49.0799001,31.7881001 49.5018001,31.7881001 C50.0670001,31.7859001 50.6084001,31.5605001 51.0080001,31.1609001 C51.4076001,30.7612001 51.6331001,30.2198001 51.6353001,29.6547001 C51.6353001,29.2327001 51.5102001,28.8202001 51.2757001,28.4694001 C51.0413001,28.1186001 50.7081001,27.8451001 50.3183001,27.6836001 C49.9284001,27.5222001 49.4995001,27.4799001 49.0856001,27.5622001 Z M28.0728001,20.8457001 C27.0412001,20.4185001 25.9061001,20.3067001 24.8110001,20.5245001 C23.7159001,20.7423001 22.7100001,21.2800001 21.9205001,22.0695001 C21.1309001,22.8590001 20.5933001,23.8650001 20.3754001,24.9600001 C20.1576001,26.0551001 20.2694001,27.1902001 20.6967001,28.2218001 C21.1240001,29.2534001 21.8476001,30.1351001 22.7760001,30.7554001 C23.7043001,31.3757001 24.7958001,31.7068001 25.9124001,31.7068001 C27.4096001,31.7068001 28.8455001,31.1120001 29.9043001,30.0533001 C30.9630001,28.9946001 31.5578001,27.5587001 31.5578001,26.0614001 C31.5578001,24.9449001 31.2267001,23.8534001 30.6063001,22.9250001 C29.9860001,21.9966001 29.1043001,21.2730001 28.0728001,20.8457001 Z M43.9670001,27.4378001 C43.5772001,27.2763001 43.1482001,27.2341001 42.7344001,27.3164001 C42.3205001,27.3987001 41.9404001,27.6019001 41.6420001,27.9003001 C41.3437001,28.1986001 41.1405001,28.5788001 41.0581001,28.9926001 C40.9758001,29.4065001 41.0181001,29.8354001 41.1796001,30.2253001 C41.3410001,30.6151001 41.6145001,30.9483001 41.9653001,31.1827001 C42.3162001,31.4171001 42.7286001,31.5423001 43.1506001,31.5423001 C43.7164001,31.5423001 44.2591001,31.3175001 44.6592001,30.9174001 C45.0592001,30.5173001 45.2840001,29.9747001 45.2840001,29.4088001 C45.2840001,28.9869001 45.1589001,28.5744001 44.9245001,28.2236001 C44.6901001,27.8727001 44.3568001,27.5993001 43.9670001,27.4378001 Z M43.9670001,20.7503001 C43.5772001,20.5888001 43.1482001,20.5466001 42.7344001,20.6289001 C42.3205001,20.7112001 41.9404001,20.9144001 41.6420001,21.2128001 C41.3437001,21.5111001 41.1405001,21.8913001 41.0581001,22.3051001 C40.9758001,22.7190001 41.0181001,23.1479001 41.1796001,23.5378001 C41.3410001,23.9276001 41.6145001,24.2608001 41.9653001,24.4952001 C42.3162001,24.7296001 42.7286001,24.8548001 43.1506001,24.8548001 C43.7164001,24.8548001 44.2591001,24.6300001 44.6592001,24.2299001 C45.0592001,23.8298001 45.2840001,23.2871001 45.2840001,22.7213001 C45.2840001,22.2994001 45.1589001,21.8869001 44.9245001,21.5360001 C44.6901001,21.1852001 44.3568001,20.9118001 43.9670001,20.7503001 Z M49.0856001,20.3825001 C48.6718001,20.4649001 48.2916001,20.6681001 47.9933001,20.9664001 C47.6949001,21.2648001 47.4917001,21.6449001 47.4094001,22.0588001 C47.3271001,22.4726001 47.3693001,22.9016001 47.5308001,23.2914001 C47.6923001,23.6813001 47.9657001,24.0144001 48.3166001,24.2489001 C48.6674001,24.4833001 49.0799001,24.6084001 49.5018001,24.6084001 C50.0670001,24.6063001 50.6084001,24.3808001 51.0080001,23.9812001 C51.4076001,23.5815001 51.6331001,23.0401001 51.6353001,22.4750001 C51.6353001,22.0530001 51.5102001,21.6406001 51.2757001,21.2897001 C51.0413001,20.9389001 50.7081001,20.6654001 50.3183001,20.5040001 C49.9284001,20.3425001 49.4995001,20.3002001 49.0856001,20.3825001 Z M46.7554001,13.2026001 C46.3416001,13.2849001 45.9614001,13.4881001 45.6630001,13.7865001 C45.3647001,14.0849001 45.1615001,14.4650001 45.0792001,14.8788001 C44.9969001,15.2927001 45.0391001,15.7217001 45.2006001,16.1115001 C45.3621001,16.5013001 45.6355001,16.8345001 45.9863001,17.0689001 C46.3372001,17.3034001 46.7497001,17.4285001 47.1716001,17.4285001 C47.7374001,17.4285001 48.2801001,17.2037001 48.6802001,16.8036001 C49.0803001,16.4035001 49.3050001,15.8609001 49.3050001,15.2951001 C49.3050001,14.8731001 49.1799001,14.4606001 48.9455001,14.1098001 C48.7111001,13.7589001 48.3779001,13.4855001 47.9880001,13.3240001 C47.5982001,13.1625001 47.1692001,13.1203001 46.7554001,13.2026001 Z"],[14,"fill-rule","nonzero"],[12],[13],[1,"\\n "],[10,"path"],[14,"d","M83.5385001,9.02612084 C75.3002001,9.02612084 71.7718001,12.5545001 71.7718001,18.6102001 L71.7718001,33.5278001 L71.7744126,33.809806 C71.8842215,39.6928981 75.4612111,43.1118103 83.5385001,43.1118103 C86.5802001,43.1131001 89.6109001,42.7466001 92.5646001,42.0205001 L91.8671001,36.6049001 L90.9760579,36.7631811 C88.5964705,37.1629803 86.1899224,37.3844223 83.7765001,37.4254001 C79.4194001,37.4254001 78.0326001,35.9320001 78.0326001,32.4118001 L78.0326001,19.7261001 L78.0346281,19.4988781 C78.0956946,16.133828 79.5462067,14.7125001 83.7765001,14.7125001 C86.4916001,14.7587001 89.1980001,15.0332001 91.8671001,15.5331001 L92.5646001,10.1175001 L91.8246092,9.94345672 C89.1057071,9.33281156 86.3267251,9.02500229 83.5385001,9.02612084 Z M172.149,18.4131001 L166.094,18.4131001 L166.09588,36.2248122 C166.154955,40.3975255 167.61375,43.1117001 171.55,43.1117001 C174.919,42.9517001 178.218,42.0880001 181.233,40.5762001 L181.832,42.6112001 L186.443,42.6112001 L186.443,18.4131001 L180.388,18.4131001 L180.388,35.1934001 C178.188,36.3339001 175.481,37.2283001 174.086,37.2283001 C172.691,37.2283001 172.149,36.5801001 172.149,35.2918001 L172.149,18.4131001 Z M105.939,17.9127001 C98.2719471,17.9127001 95.7845671,21.8519543 95.4516942,26.3358062 L95.4257941,26.7784774 C95.4225999,26.8525088 95.4199581,26.9266566 95.4178553,27.0009059 L95.4116001,27.4475001 L95.4116001,33.5853001 L95.4178331,34.0318054 C95.5519456,38.7818866 97.886685,43.0872001 105.931,43.0872001 C113.716697,43.0872001 116.15821,39.0467642 116.432186,34.4757046 L116.45204,34.0318054 C116.456473,33.8833653 116.458758,33.734491 116.459,33.5853001 L116.459,27.4475001 L116.457455,27.2221358 C116.453317,26.9220505 116.440796,26.6236441 116.419035,26.3278463 L116.379357,25.8862225 C115.91894,21.5651129 113.355121,17.9127001 105.939,17.9127001 Z M154.345,17.8876515 C147.453,17.8876515 145.319,20.0214001 145.319,24.8873001 L145.319694,25.1343997 L145.325703,25.6107983 L145.338905,26.064173 C145.341773,26.1378641 145.344992,26.2106314 145.348588,26.2824927 L145.374889,26.7029295 C145.380095,26.7712375 145.385729,26.838675 145.391816,26.9052596 L145.433992,27.2946761 C145.714183,29.5082333 146.613236,30.7206123 149.232713,31.693068 L149.698825,31.8575665 C150.021076,31.9658547 150.36662,32.0715774 150.737101,32.1758709 L151.311731,32.3313812 C151.509646,32.3829554 151.714,32.4343143 151.925,32.4856001 L152.205551,32.5543061 L152.728976,32.6899356 L153.204098,32.8237311 L153.633238,32.9563441 C155.53221,33.5734587 156.004908,34.1732248 156.112605,35.0535762 L156.130482,35.2466262 L156.139507,35.448917 L156.142,35.6611001 L156.137247,35.9859786 L156.121298,36.2838969 C156.024263,37.5177444 155.540462,38.0172149 153.741624,38.1073495 L153.302742,38.1210314 L153.065,38.1227001 C150.631,38.0987001 148.21,37.7482001 145.869,37.0807001 L145.049,41.6922001 L145.672496,41.887484 C148.174444,42.639635 150.769923,43.0436231 153.385,43.0871001 C159.627887,43.0871001 161.583469,40.9824692 162.030289,37.4548504 L162.074576,37.049455 C162.087289,36.9123213 162.098004,36.7731979 162.106868,36.6321214 L162.128062,36.2030694 L162.139051,35.7625187 L162.141,35.5380001 C162.141,35.4566181 162.140828,35.3763299 162.14046,35.2971136 L162.131203,34.6125174 L162.117224,34.1865271 L162.095649,33.7836378 L162.065324,33.4027996 L162.025093,33.0429627 L161.973799,32.7030773 C161.659145,30.8866498 160.790109,29.9278873 158.501441,29.0408119 L158.069484,28.8801405 L157.605084,28.7199991 C157.524916,28.6932947 157.443348,28.6665687 157.360357,28.6397991 L156.845127,28.4784845 L156.294565,28.3150754 L155.707516,28.148522 L155.082823,27.9777746 L154.035614,27.7021396 L153.423677,27.5325226 L153.071612,27.4262327 C153.016479,27.4088193 152.963082,27.3915263 152.911366,27.3743086 L152.620815,27.2715428 C151.671458,26.912485 151.415595,26.5466416 151.348761,25.7543883 L151.334373,25.5160648 L151.327658,25.2523603 L151.327351,24.8244501 C151.355827,23.4390475 151.851313,22.8769001 154.403,22.8769001 C156.636,22.9360001 158.861,23.1692001 161.057,23.5744001 L161.591,18.7085001 L160.876597,18.5511522 C158.72872,18.1040608 156.5401,17.8816774 154.345,17.8876515 Z M197.71,7.71350005 L191.654,8.53405005 L191.654,42.6116001 L197.71,42.6116001 L197.71,7.71350005 Z M135.455,17.9211001 C132.086,18.0823001 128.788,18.9459001 125.772,20.4566001 L125.189,18.4135001 L120.57,18.4135001 L120.57,42.6115001 L126.625,42.6115001 L126.625,25.8066001 C128.833,24.6661001 131.549,23.7717001 132.936,23.7717001 C134.322,23.7717001 134.872,24.4199001 134.872,25.7082001 L134.872,42.6115001 L140.919,42.6115001 L140.919,25.0681001 C140.919,20.7520001 139.475,17.9211001 135.455,17.9211001 Z M105.931,23.0740001 C109.156,23.0740001 110.395,24.5592001 110.395,27.2506001 L110.395,33.7494001 L110.392134,33.9740961 C110.325067,36.5604698 109.074195,37.9178001 105.931,37.9178001 C102.698,37.9178001 101.459,36.4818001 101.459,33.7494001 L101.459,27.2506001 L101.461884,27.0258853 C101.529372,24.4390811 102.787806,23.0740001 105.931,23.0740001 Z"],[14,"fill-rule","nonzero"],[12],[13],[1,"\\n "],[1,[30,3]],[1,"\\n "],[18,4,null],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n\\n"]],["@width","@color","@subtitle","&default"],false,["yield"]]',moduleName:"consul-ui/components/brand-loader/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/child-selector/index",["exports","@ember/component","@ember/template-factory","@ember/object","@ember/object/computed","@ember/service","ember-concurrency","block-slots"],(function(e,t,n,l,r,i,o,a){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const u=(0,n.createTemplateFactory)({id:"rQwZ80hm",block:'[[[11,0],[16,0,[29,["child-selector ",[36,0],"-child-selector"]]],[17,1],[12],[1,"\\n"],[18,4,null],[1,"\\n"],[41,[28,[37,3],[[33,4]],null],[[[1," "],[8,[39,5],null,[["@name"],["create"]],[["default"],[[[[18,4,null]],[]]]]],[1,"\\n "],[10,"label"],[14,0,"type-text"],[12],[1,"\\n "],[10,1],[12],[8,[39,5],null,[["@name"],["label"]],[["default"],[[[[18,4,null]],[]]]]],[13],[1,"\\n"],[41,[33,6],[[[1," "],[8,[39,7],null,[["@src","@onchange"],[[28,[37,8],["/${partition}/${nspace}/${dc}/${type}",[28,[37,9],null,[["partition","nspace","dc","type"],[[33,10],[33,11],[33,12],[28,[37,13],[[33,0]],null]]]]],null],[28,[37,14],[[30,0],[28,[37,15],[[33,16]],null]],[["value"],["data"]]]]],null],[1,"\\n"]],[]],null],[1," "],[8,[39,17],null,[["@type","@sort","@filters","@items"],[[99,0,["@type"]],"Name:asc",[28,[37,9],null,[["searchproperties"],[[28,[37,18],["Name"],null]]]],[99,19,["@items"]]]],[["default"],[[[[1,"\\n "],[8,[39,20],null,[["@searchEnabled","@search","@options","@loadingMessage","@searchMessage","@searchPlaceholder","@onOpen","@onClose","@onChange"],[true,[28,[37,14],[[30,0],[30,2,["search"]]],null],[28,[37,21],["Name:asc",[33,19]],null],"Loading...","No possible options",[99,22,["@searchPlaceholder"]],[28,[37,14],[[30,0],[28,[37,15],[[33,6]],null],true],null],[28,[37,14],[[30,0],[28,[37,15],[[33,6]],null],false],null],[28,[37,14],[[30,0],"change","items[]",[33,23]],null]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name","@params"],["option",[28,[37,24],[[30,3]],null]]],[["default"],[[[[18,4,null]],[]]]]],[1,"\\n "]],[3]]]]],[1,"\\n "]],[2]]]]],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[28,[37,25],[[33,23,["length"]],0],null],[[[1," "],[8,[39,5],null,[["@name"],["set"]],[["default"],[[[[18,4,null]],[]]]]],[1,"\\n"]],[]],[[[1,"\\n"]],[]]],[13]],["&attrs","collection","item","&default"],false,["type","yield","if","not","disabled","yield-slot","isOpen","data-source","uri","hash","partition","nspace","dc","pluralize","action","mut","allOptions","data-collection","array","options","power-select","sort-by","placeholder","items","block-params","gt"]]',moduleName:"consul-ui/components/child-selector/index.hbs",isStrictMode:!1}) -var s=(0,t.setComponentTemplate)(u,t.default.extend(a.default,{onchange:function(){},tagName:"",error:function(){},type:"",dom:(0,i.inject)("dom"),formContainer:(0,i.inject)("form"),item:(0,r.alias)("form.data"),selectedOptions:(0,r.alias)("items"),init:function(){this._super(...arguments),this._listeners=this.dom.listeners(),(0,l.set)(this,"form",this.formContainer.form(this.type)),this.form.clear({Datacenter:this.dc,Namespace:this.nspace})},willDestroyElement:function(){this._super(...arguments),this._listeners.remove()},options:(0,l.computed)("selectedOptions.[]","allOptions.[]",(function(){let e=this.allOptions||[] -const t=this.selectedOptions||[] -return(0,l.get)(t,"length")>0&&(e=e.filter((e=>!t.findBy("ID",(0,l.get)(e,"ID"))))),e})),save:(0,o.task)((function*(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){} -const l=this.repo -try{e=yield l.persist(e),this.actions.change.apply(this,[{target:{name:"items[]",value:t}},t,e]),n()}catch(r){this.error({error:r})}})),actions:{reset:function(){this.form.clear({Datacenter:this.dc,Namespace:this.nspace,Partition:this.partition})},remove:function(e,t){const n=this.repo.getSlugKey(),r=(0,l.get)(e,n),i=t.findIndex((function(e){return(0,l.get)(e,n)===r})) -if(-1!==i)return t.removeAt(i,1) -this.onchange({target:this})},change:function(e,t,n){const r=this.dom.normalizeEvent(...arguments),i=t -if("items[]"===r.target.name)(0,l.set)(n,"CreateTime",(new Date).getTime()),i.pushObject(n),this.onchange({target:this})}}})) -e.default=s})),define("consul-ui/components/code-editor/index",["exports","@ember/component","@ember/template-factory","@ember/object","@ember/service"],(function(e,t,n,l,r){function i(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) -t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function o(e){for(var t=1;t{let[t]=e -this.oninput((0,l.set)(this,"value",t.target.wholeText))})),this.observer.observe(e,{attributes:!1,subtree:!0,childList:!1,characterData:!0}),(0,l.set)(this,"value",e.firstChild.wholeText)),(0,l.set)(this,"editor",this.helper.getEditor(this.element)),this.settings.findBySlug("code-editor").then((e=>{const t=this.modes,n=this.syntax -n&&(e=t.find((function(e){return e.name.toLowerCase()==n.toLowerCase()}))),e=e||t[0],this.setMode(e)}))},didAppear:function(){this.editor.refresh()},actions:{change:function(e){this.settings.persist({"code-editor":e}),this.setMode(e)}}})) -e.default=c})),define("consul-ui/components/confirmation-alert/index",["exports","@ember/component","@ember/template-factory"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const l=(0,n.createTemplateFactory)({id:"fpR2WXW3",block:'[[[18,5,null],[1,"\\n"],[8,[39,1],[[24,0,"confirmation-alert warning"],[17,1]],null,[["header","body","actions"],[[[[1,"\\n "],[8,[39,2],null,[["@name"],["header"]],[["default"],[[[[18,5,null]],[]]]]],[1,"\\n "]],[]],[[[1,"\\n "],[8,[39,2],null,[["@name"],["body"]],[["default"],[[[[18,5,null]],[]]]]],[1,"\\n "]],[]],[[[1,"\\n "],[8,[30,2,["Action"]],[[24,0,"dangerous"]],null,[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@name","@params"],["confirm",[28,[37,3],[[50,"action",0,null,[["onclick","tabindex"],[[28,[37,5],[[30,0],[30,3]],null],"-1"]]]],null]]],[["default"],[[[[1,"\\n "],[18,5,null],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,2,["Action"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@for"],[[30,4]]],[["default"],[[[[1,"\\n Cancel\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[2]]]]]],["&attrs","Actions","@onclick","@name","&default"],false,["yield","informed-action","yield-slot","block-params","component","action"]]',moduleName:"consul-ui/components/confirmation-alert/index.hbs",isStrictMode:!1}) -var r=(0,t.setComponentTemplate)(l,t.default.extend({tagName:""})) -e.default=r})),define("consul-ui/components/confirmation-dialog/index",["exports","@ember/component","@ember/template-factory","block-slots","@ember/object"],(function(e,t,n,l,r){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const i=(0,n.createTemplateFactory)({id:"JwnN2l0u",block:'[[[11,0],[16,0,[28,[37,0],["with-confirmation",[52,[33,2]," confirming",""]],null]],[17,1],[12],[1,"\\n"],[18,2,null],[1,"\\n"],[8,[39,4],null,[["@name","@params"],["action",[28,[37,5],[[28,[37,6],[[30,0],"confirm"],null],[28,[37,6],[[30,0],"cancel"],null]],null]]],[["default"],[[[[1,"\\n"],[41,[28,[37,7],[[33,8],[28,[37,9],[[33,2]],null]],null],[[[1," "],[18,2,null],[1,"\\n"]],[]],null]],[]]]]],[1,"\\n"],[8,[39,4],null,[["@name","@params"],["dialog",[28,[37,5],[[28,[37,6],[[30,0],"execute"],null],[28,[37,6],[[30,0],"cancel"],null],[33,10],[33,11]],null]]],[["default"],[[[[1,"\\n"],[41,[33,2],[[[1," "],[18,2,null],[1,"\\n"]],[]],null]],[]]]]],[1,"\\n"],[13]],["&attrs","&default"],false,["concat","if","confirming","yield","yield-slot","block-params","action","or","permanent","not","message","actionName"]]',moduleName:"consul-ui/components/confirmation-dialog/index.hbs",isStrictMode:!1}) -var o=(0,t.setComponentTemplate)(i,t.default.extend(l.default,{tagName:"",message:"Are you sure?",confirming:!1,permanent:!1,actions:{cancel:function(){(0,r.set)(this,"confirming",!1)},execute:function(){(0,r.set)(this,"confirming",!1),this.sendAction("actionName",...this.arguments)},confirm:function(){const[e,...t]=arguments;(0,r.set)(this,"actionName",e),(0,r.set)(this,"arguments",t),(0,r.set)(this,"confirming",!0)}}})) -e.default=o})),define("consul-ui/components/consul/acl/disabled/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"jFDvZrXB",block:'[[[8,[39,0],null,null,[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n Tokens\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,2],null,null,[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"Welcome to ACLs"],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n ACLs are not enabled in this Consul cluster. We strongly encourage the use of ACLs in production environments for the best security practices.\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,3],null,[["@text","@href","@icon","@iconPosition","@size"],["Read the documentation",[29,[[28,[37,4],["CONSUL_DOCS_URL"],null],"/acl/index.html"]],"docs-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,3],null,[["@text","@href","@icon","@iconPosition","@size"],["Follow the guide",[29,[[28,[37,4],["CONSUL_DOCS_LEARN_URL"],null],"/consul/security-networking/production-acls"]],"learn-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]]]]],[1,"\\n\\n"]],[],false,["app-view","block-slot","empty-state","hds/link/standalone","env"]]',moduleName:"consul-ui/components/consul/acl/disabled/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/acl/selector/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"uDHL3FS4",block:'[[[10,"li"],[14,0,"acls-separator"],[14,"role","separator"],[12],[1,"\\n Access Controls\\n"],[41,[28,[37,1],[[28,[37,2],["use acls"],null]],null],[[[1," "],[11,1],[4,[38,3],["ACLs are not currently enabled in this cluster"],null],[12],[13],[1,"\\n"]],[]],null],[13],[1,"\\n"],[10,"li"],[15,0,[52,[28,[37,4],["dc.acls.tokens",[30,1,["Name"]]],null],"is-active"]],[12],[1,"\\n "],[10,3],[15,6,[28,[37,5],["dc.acls.tokens",[30,1,["Name"]]],null]],[12],[1,"\\n Tokens\\n "],[13],[1,"\\n"],[13],[1,"\\n"],[41,[28,[37,2],["read acls"],null],[[[10,"li"],[15,0,[52,[28,[37,4],["dc.acls.policies",[30,1,["Name"]]],null],"is-active"]],[12],[1,"\\n "],[10,3],[15,6,[28,[37,5],["dc.acls.policies",[30,1,["Name"]]],null]],[12],[1,"\\n Policies\\n "],[13],[1,"\\n"],[13],[1,"\\n"],[10,"li"],[15,0,[52,[28,[37,4],["dc.acls.roles",[30,1,["Name"]]],null],"is-active"]],[12],[1,"\\n "],[10,3],[15,6,[28,[37,5],["dc.acls.roles",[30,1,["Name"]]],null]],[12],[1,"\\n Roles\\n "],[13],[1,"\\n"],[13],[1,"\\n"],[10,"li"],[15,0,[52,[28,[37,4],["dc.acls.auth-methods",[30,1,["Name"]]],null],"is-active"]],[12],[1,"\\n "],[10,3],[15,6,[28,[37,5],["dc.acls.auth-methods",[30,1,["Name"]]],null]],[12],[1,"\\n Auth Methods\\n "],[13],[1,"\\n"],[13],[1,"\\n"]],[]],[[[41,[28,[37,1],[[28,[37,2],["use acls"],null]],null],[[[10,"li"],[15,0,[52,[28,[37,4],["dc.acls.policies",[30,1,["Name"]]],null],"is-active"]],[12],[1,"\\n "],[10,1],[12],[1,"\\n Policies\\n "],[13],[1,"\\n"],[13],[1,"\\n"],[10,"li"],[15,0,[52,[28,[37,4],["dc.acls.roles",[30,1,["Name"]]],null],"is-active"]],[12],[1,"\\n "],[10,1],[12],[1,"\\n Roles\\n "],[13],[1,"\\n"],[13],[1,"\\n"],[10,"li"],[15,0,[52,[28,[37,4],["dc.acls.auth-methods",[30,1,["Name"]]],null],"is-active"]],[12],[1,"\\n "],[10,1],[12],[1,"\\n Auth Methods\\n "],[13],[1,"\\n"],[13],[1,"\\n"]],[]],null]],[]]],[1,"\\n"]],["@dc"],false,["if","not","can","tooltip","is-href","href-to"]]',moduleName:"consul-ui/components/consul/acl/selector/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/auth-method/binding-list/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"tIxrxpUS",block:'[[[10,0],[14,0,"consul-auth-method-binding-list"],[12],[1,"\\n "],[10,"h2"],[12],[1,[30,1,["BindName"]]],[13],[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[14,0,"type"],[12],[1,[28,[35,0],["models.binding-rule.BindType"],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[30,1,["BindType"]]],[1,"\\n "],[10,1],[12],[1,"\\n"],[41,[28,[37,2],[[30,1,["BindType"]],"service"],null],[[[1," "],[8,[39,3],null,null,[["default"],[[[[1,"\\n "],[1,[28,[35,0],["components.consul.auth-method.binding-list.bind-type.service"],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],[[[41,[28,[37,2],[[30,1,["BindType"]],"node"],null],[[[1," "],[8,[39,3],null,null,[["default"],[[[[1,"\\n "],[1,[28,[35,0],["components.consul.auth-method.binding-list.bind-type.node"],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],[[[41,[28,[37,2],[[30,1,["BindType"]],"role"],null],[[[1," "],[8,[39,3],null,null,[["default"],[[[[1,"\\n "],[1,[28,[35,0],["components.consul.auth-method.binding-list.bind-type.role"],null]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]],null]],[]]]],[]]],[1," "],[13],[1,"\\n "],[13],[1,"\\n "],[10,"dt"],[12],[1,[28,[35,0],["models.binding-rule.Selector"],null]],[13],[1,"\\n "],[10,"dd"],[12],[10,"code"],[12],[1,[30,1,["Selector"]]],[13],[13],[1,"\\n "],[10,"dt"],[12],[1,[28,[35,0],["models.binding-rule.Description"],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,1,["Description"]]],[13],[1,"\\n "],[13],[1,"\\n"],[13]],["@item"],false,["t","if","eq","tooltip"]]',moduleName:"consul-ui/components/consul/auth-method/binding-list/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/auth-method/list/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"klEqVgSZ",block:'[[[8,[39,0],[[24,0,"consul-auth-method-list"]],[["@items"],[[30,1]]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n"],[41,[28,[37,3],[[30,2,["DisplayName"]],""],null],[[[1," "],[10,3],[15,6,[28,[37,4],["dc.acls.auth-methods.show",[30,2,["Name"]]],null]],[12],[1,"\\n "],[1,[30,2,["DisplayName"]]],[1,"\\n "],[13],[1,"\\n"]],[]],[[[1," "],[10,3],[15,6,[28,[37,4],["dc.acls.auth-methods.show",[30,2,["Name"]]],null]],[12],[1,"\\n "],[1,[30,2,["Name"]]],[1,"\\n "],[13],[1,"\\n"]],[]]],[1," "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["details"]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@item"],[[30,2]]],null],[1,"\\n"],[41,[28,[37,3],[[30,2,["DisplayName"]],""],null],[[[1," "],[10,1],[12],[1,[30,2,["Name"]]],[13],[1,"\\n"]],[]],null],[41,[28,[37,6],[[30,2,["TokenLocality"]],"global"],null],[[[1," "],[10,1],[14,0,"locality"],[12],[1,"creates global tokens"],[13],[1,"\\n"]],[]],null],[41,[30,2,["MaxTokenTTL"]],[[[1," "],[10,"dl"],[14,0,"ttl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n "],[8,[39,7],null,null,[["default"],[[[[1,"\\n Maximum Time to Live: the maximum life of any token created by this auth method\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,2,["MaxTokenTTL"]]],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n"]],[2]]]]],[1,"\\n"]],["@items","item"],false,["list-collection","block-slot","if","not-eq","href-to","consul/auth-method/type","eq","tooltip"]]',moduleName:"consul-ui/components/consul/auth-method/list/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/auth-method/nspace-list/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"IaUtLqXB",block:'[[[10,0],[14,0,"consul-auth-method-nspace-list"],[12],[1,"\\n "],[10,"table"],[12],[1,"\\n "],[10,"thead"],[12],[1,"\\n "],[10,"tr"],[12],[1,"\\n "],[10,"td"],[12],[1,[28,[35,0],["models.auth-method.Selector"],null]],[13],[1,"\\n "],[10,"td"],[12],[1,[28,[35,0],["models.auth-method.BindNamespace"],null]],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[10,"tbody"],[12],[1,"\\n"],[42,[28,[37,2],[[28,[37,2],[[30,1]],null]],null],null,[[[1," "],[10,"tr"],[12],[1,"\\n "],[10,"td"],[12],[1,[30,2,["Selector"]]],[13],[1,"\\n "],[10,"td"],[12],[1,[30,2,["BindNamespace"]]],[13],[1,"\\n "],[13],[1,"\\n"]],[2]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n"],[13],[1,"\\n\\n"]],["@items","item"],false,["t","each","-track-array"]]',moduleName:"consul-ui/components/consul/auth-method/nspace-list/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/auth-method/search-bar/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"TX/eSrxH",block:'[[[8,[39,0],[[24,0,"consul-auth-method-search-bar"],[17,1]],[["@filter"],[[30,2]]],[["status","search","filter","sort"],[[[[1,"\\n\\n"],[44,[[28,[37,2],[[28,[37,3],["components.consul.auth-method.search-bar.",[30,3,["status","key"]],".name"],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","key"]]],null],[28,[37,3],["common.consul.",[30,3,["status","key"]]],null]],null]]]],[28,[37,2],[[28,[37,3],["components.consul.auth-method.search-bar.",[30,3,["status","key"]],".options.",[30,3,["status","value"]]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","value"]]],null],[28,[37,3],["common.consul.",[30,3,["status","value"]]],null],[28,[37,3],["common.brand.",[30,3,["status","value"]]],null]],null]]]]],[[[1," "],[8,[30,3,["RemoveFilter"]],[[16,"aria-label",[28,[37,2],["common.ui.remove"],[["item"],[[28,[37,3],[[30,4]," ",[30,5]],null]]]]]],null,[["default"],[[[[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,[30,4]],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,5]],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[4,5]]],[1,"\\n "]],[3]],[[[1,"\\n "],[8,[30,6,["Search"]],null,[["@onsearch","@value","@placeholder"],[[28,[37,5],[[30,0],[30,7]],null],[30,8],[28,[37,2],["common.search.search"],null]]],[["default"],[[[[1,"\\n "],[8,[30,6,["Select"]],[[24,0,"type-search-properties"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,2,["searchproperty","change"]]],null],true,true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["common.search.searchproperty"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,9,["Optgroup"]],[30,9,["Option"]]],[[[42,[28,[37,8],[[28,[37,8],[[30,2,["searchproperty","default"]]],null]],null],null,[[[1," "],[8,[30,11],null,[["@value","@selected"],[[30,12],[28,[37,9],[[30,12],[30,2,["searchproperty","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["common.consul.",[28,[37,10],[[30,12]],null]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[12]],null]],[10,11]]],[1," "]],[]]]]],[1,"\\n "]],[9]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]],[[[1,"\\n "],[8,[30,13,["Select"]],[[24,0,"type-kind"]],[["@position","@onchange","@multiple"],["left",[28,[37,5],[[30,0],[30,2,["kind","change"]]],null],true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["components.consul.auth-method.search-bar.kind.name"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,14,["Optgroup"]],[30,14,["Option"]]],[[[1," "],[8,[30,16],null,[["@value","@selected"],["kubernetes",[28,[37,9],["kubernetes",[30,2,["kind","value"]]],null]]],[["default"],[[[[1,"\\n "],[8,[39,11],[[24,0,"mr-2.5"]],[["@name"],["kubernetes-color"]],null],[1,"\\n Kubernetes\\n "]],[]]]]],[1,"\\n "],[8,[30,16],[[24,0,"jwt"]],[["@value","@selected"],["jwt",[28,[37,9],["jwt",[30,2,["kind","value"]]],null]]],[["default"],[[[[1,"JWT"]],[]]]]],[1,"\\n"],[41,[28,[37,13],["CONSUL_SSO_ENABLED"],null],[[[1," "],[8,[30,16],[[24,0,"oidc"]],[["@value","@selected"],["oidc",[28,[37,9],["oidc",[30,2,["kind","value"]]],null]]],[["default"],[[[[1,"OIDC"]],[]]]]],[1,"\\n"]],[]],null]],[15,16]]],[1," "]],[]]]]],[1,"\\n "]],[14]]]]],[1,"\\n "],[8,[30,13,["Select"]],[[24,0,"type-locality"]],[["@position","@onchange","@multiple"],["left",[28,[37,5],[[30,0],[30,2,["source","change"]]],null],true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["components.consul.auth-method.search-bar.locality.name"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,17,["Optgroup"]],[30,17,["Option"]]],[[[42,[28,[37,8],[[28,[37,8],[[28,[37,4],["local","global"],null]],null]],null],null,[[[1," "],[8,[30,19],[[16,0,[29,[[30,20]]]]],[["@value","@selected"],[[30,20],[28,[37,9],[[30,20],[30,2,["types"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["components.consul.auth-method.search-bar.locality.options.",[30,20]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[20]],null]],[18,19]]],[1," "]],[]]]]],[1,"\\n "]],[17]]]]],[1,"\\n "]],[13]],[[[1,"\\n "],[8,[30,21,["Select"]],[[24,0,"type-sort"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,22,["change"]]],null],false,true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n"],[44,[[28,[37,14],[[28,[37,4],[[28,[37,4],["MethodName:asc",[28,[37,2],["common.sort.alpha.asc"],null]],null],[28,[37,4],["MethodName:desc",[28,[37,2],["common.sort.alpha.desc"],null]],null],[28,[37,4],["TokenTTL:desc",[28,[37,2],["common.sort.duration.asc"],null]],null],[28,[37,4],["TokenTTL:asc",[28,[37,2],["common.sort.duration.desc"],null]],null]],null]],null]],[[[1," "],[1,[28,[35,15],[[30,24],[30,22,["value"]]],null]],[1,"\\n"]],[24]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,23,["Optgroup"]],[30,23,["Option"]]],[[[1," "],[8,[30,25],null,[["@label"],[[28,[37,2],["common.ui.name"],null]]],[["default"],[[[[1,"\\n "],[8,[30,26],null,[["@value","@selected"],["MethodName:asc",[28,[37,16],["MethodName:asc",[30,22,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,26],null,[["@value","@selected"],["MethodName:desc",[28,[37,16],["MethodName:desc",[30,22,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,25],null,[["@label"],[[28,[37,2],["common.ui.maxttl"],null]]],[["default"],[[[[1,"\\n "],[8,[30,26],null,[["@value","@selected"],["TokenTTL:desc",[28,[37,16],["TokenTTL:desc",[30,22,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.duration.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,26],null,[["@value","@selected"],["TokenTTL:asc",[28,[37,16],["TokenTTL:asc",[30,22,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.duration.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[25,26]]],[1," "]],[]]]]],[1,"\\n "]],[23]]]]],[1,"\\n "]],[21]]]]],[1,"\\n"]],["&attrs","@filter","search","key","value","search","@onsearch","@search","components","Optgroup","Option","prop","search","components","Optgroup","Option","components","Optgroup","Option","option","search","@sort","components","selectable","Optgroup","Option"],false,["search-bar","let","t","concat","array","action","block-slot","each","-track-array","includes","lowercase","flight-icon","if","env","from-entries","get","eq"]]',moduleName:"consul-ui/components/consul/auth-method/search-bar/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/auth-method/type/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"KzIxa15o",block:'[[[44,[[28,[37,1],[[30,1,["Type"]]],null]],[[[1," "],[10,1],[15,0,[29,["consul-auth-method-type ",[52,[51,[30,2]],[30,1,["Type"]]]]]],[12],[1,"\\n"],[41,[30,2],[[[1," "],[8,[39,4],[[24,0,"mr-1.5 w-4 h-4"]],[["@name"],[[30,2]]],null],[1,"\\n"]],[]],null],[1," "],[1,[28,[35,5],[[28,[37,6],["common.brand.",[30,1,["Type"]]],null]],null]],[1,"\\n "],[13],[1,"\\n"]],[2]]]],["@item","flightIcon"],false,["let","icon-mapping","unless","if","flight-icon","t","concat"]]',moduleName:"consul-ui/components/consul/auth-method/type/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/auth-method/view/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"4cpKdVK+",block:'[[[1," "],[10,0],[14,0,"consul-auth-method-view"],[12],[1,"\\n"],[41,[28,[37,1],[[30,1,["Type"]],"kubernetes"],null],[[[1," "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,[28,[35,2],["models.auth-method.Type"],null]],[13],[1,"\\n "],[10,"dd"],[12],[8,[39,3],null,[["@item"],[[30,1]]],null],[13],[1,"\\n\\n"],[42,[28,[37,5],[[28,[37,5],[[28,[37,6],["MaxTokenTTL","TokenLocality","DisplayName","Description"],null]],null]],null],null,[[[41,[28,[37,7],[[30,1],[30,2]],null],[[[1," "],[10,"dt"],[12],[1,[28,[35,2],[[28,[37,8],["models.auth-method.",[30,2]],null]],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,[28,[35,7],[[30,1],[30,2]],null]],[13],[1,"\\n"]],[]],null]],[2]],null],[41,[30,1,["Config","Host"]],[[[1," "],[10,"dt"],[12],[1,[28,[35,2],["models.auth-method.Config.Host"],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,9],null,[["@value","@name"],[[30,1,["Config","Host"]],[28,[37,2],["models.auth-method.Config.Host"],null]]],null],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[30,1,["Config","CACert"]],[[[1," "],[10,"dt"],[12],[1,[28,[35,2],["models.auth-method.Config.CACert"],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,9],null,[["@obfuscated","@value","@name"],[true,[30,1,["Config","CACert"]],[28,[37,2],["models.auth-method.Config.CACert"],null]]],null],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[30,1,["Config","ServiceAccountJWT"]],[[[1," "],[10,"dt"],[12],[1,[28,[35,2],["models.auth-method.Config.ServiceAccountJWT"],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,9],null,[["@value","@name"],[[30,1,["Config","ServiceAccountJWT"]],[28,[37,2],["models.auth-method.Config.ServiceAccountJWT"],null]]],null],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n"]],[]],[[[1," "],[10,"section"],[14,0,"meta"],[12],[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"Type"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,3],null,[["@item"],[[30,1]]],null],[1,"\\n "],[13],[1,"\\n\\n"],[42,[28,[37,5],[[28,[37,5],[[28,[37,6],["MaxTokenTTL","TokenLocality","DisplayName","Description"],null]],null]],null],null,[[[41,[28,[37,7],[[30,1],[30,3]],null],[[[1,"\\n "],[10,"dt"],[12],[1,[28,[35,2],[[28,[37,8],["models.auth-method.",[30,3]],null]],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,[28,[35,7],[[30,1],[30,3]],null]],[13],[1,"\\n\\n"]],[]],null]],[3]],null],[1,"\\n"],[41,[28,[37,1],[[30,1,["Type"]],"aws-iam"],null],[[[1,"\\n"],[44,[[30,1,["Config"]]],[[[42,[28,[37,5],[[28,[37,5],[[28,[37,6],["BoundIAMPrincipalARNs","EnableIAMEntityDetails","IAMEntityTags","IAMEndpoint","MaxRetries","STSEndpoint","STSRegion","AllowedSTSHeaderValues","ServerIDHeaderValue"],null]],null]],null],null,[[[41,[28,[37,7],[[30,4],[30,5]],null],[[[1,"\\n "],[10,"dt"],[12],[1,[28,[35,2],[[28,[37,8],["models.auth-method.",[30,5]],null]],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n"],[44,[[28,[37,7],[[30,4],[30,5]],null]],[[[41,[28,[37,11],[[30,6]],null],[[[1," "],[10,"ul"],[12],[1,"\\n"],[42,[28,[37,5],[[28,[37,5],[[30,6]],null]],null],null,[[[1," "],[10,"li"],[12],[1,"\\n "],[10,1],[12],[1,[30,7]],[13],[1,"\\n "],[13],[1,"\\n"]],[7]],null],[1," "],[13],[1,"\\n"]],[]],[[[1," "],[1,[30,6]],[1,"\\n"]],[]]]],[6]]],[1," "],[13],[1,"\\n\\n"]],[]],null]],[5]],null],[1,"\\n"]],[4]]],[1,"\\n"]],[]],[[[41,[28,[37,1],[[30,1,["Type"]],"jwt"],null],[[[41,[30,1,["Config","JWKSURL"]],[[[1," "],[10,"dt"],[12],[1,[28,[35,2],["models.auth-method.Config.JWKSURL"],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,9],null,[["@value","@name"],[[30,1,["Config","JWKSURL"]],[28,[37,2],["models.auth-method.Config.JWKSURL"],null]]],null],[1,"\\n "],[13],[1,"\\n "],[10,"dt"],[12],[1,[28,[35,2],["models.auth-method.Config.JWKSCACert"],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,9],null,[["@obfuscated","@value","@name"],[true,[30,1,["Config","JWKSCACert"]],[28,[37,2],["models.auth-method.Config.JWKSCACert"],null]]],null],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[30,1,["Config","JWTValidationPubKeys"]],[[[1," "],[10,"dt"],[12],[1,[28,[35,2],["models.auth-method.Config.JWTValidationPubKeys"],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,9],null,[["@obfuscated","@value","@name"],[true,[30,1,["Config","JWTValidationPubKeys"]],[28,[37,2],["models.auth-method.Config.JWTValidationPubKeys"],null]]],null],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[30,1,["Config","OIDCDiscoveryURL"]],[[[1," "],[10,"dt"],[12],[1,[28,[35,2],["models.auth-method.Config.OIDCDiscoveryURL"],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,9],null,[["@value","@name"],[[30,1,["Config","OIDCDiscoveryURL"]],[28,[37,2],["models.auth-method.Config.OIDCDiscoveryURL"],null]]],null],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[30,1,["Config","JWTSupportedAlgs"]],[[[1," "],[10,"dt"],[12],[1,[28,[35,2],["models.auth-method.Config.JWTSupportedAlgs"],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,[28,[35,12],[", ",[30,1,["Config","JWTSupportedAlgs"]]],null]],[13],[1,"\\n"]],[]],null],[41,[30,1,["Config","BoundAudiences"]],[[[1," "],[10,"dt"],[12],[1,[28,[35,2],["models.auth-method.Config.BoundAudiences"],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[10,"ul"],[12],[1,"\\n"],[42,[28,[37,5],[[28,[37,5],[[30,1,["Config","BoundAudiences"]]],null]],null],null,[[[1," "],[10,"li"],[12],[1,"\\n "],[10,1],[12],[1,[30,8]],[13],[1,"\\n "],[13],[1,"\\n"]],[8]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[42,[28,[37,5],[[28,[37,5],[[28,[37,6],["BoundIssuer","ExpirationLeeway","NotBeforeLeeway","ClockSkewLeeway"],null]],null]],null],null,[[[41,[28,[37,7],[[30,1,["Config"]],[30,9]],null],[[[1," "],[10,"dt"],[12],[1,[28,[35,2],[[28,[37,8],["models.auth-method.Config.",[30,9]],null]],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,[28,[35,7],[[30,1,["Config"]],[30,9]],null]],[13],[1,"\\n"]],[]],null]],[9]],null]],[]],[[[41,[28,[37,1],[[30,1,["Type"]],"oidc"],null],[[[41,[30,1,["Config","OIDCDiscoveryURL"]],[[[1," "],[10,"dt"],[12],[1,[28,[35,2],["models.auth-method.Config.OIDCDiscoveryURL"],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,9],null,[["@value","@name"],[[30,1,["Config","OIDCDiscoveryURL"]],[28,[37,2],["models.auth-method.Config.OIDCDiscoveryURL"],null]]],null],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[30,1,["Config","OIDCDiscoveryCACert"]],[[[1," "],[10,"dt"],[12],[1,[28,[35,2],["models.auth-method.Config.OIDCDiscoveryCACert"],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,9],null,[["@obfuscated","@value","@name"],[true,[30,1,["Config","OIDCDiscoveryCACert"]],[28,[37,2],["models.auth-method.Config.OIDCDiscoveryCACert"],null]]],null],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[30,1,["Config","OIDCClientID"]],[[[1," "],[10,"dt"],[12],[1,[28,[35,2],["models.auth-method.Config.OIDCClientID"],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,1,["Config","OIDCClientID"]]],[13],[1,"\\n"]],[]],null],[41,[30,1,["Config","OIDCClientSecret"]],[[[1," "],[10,"dt"],[12],[1,[28,[35,2],["models.auth-method.Config.OIDCClientSecret"],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,1,["Config","OIDCClientSecret"]]],[13],[1,"\\n"]],[]],null],[41,[30,1,["Config","AllowedRedirectURIs"]],[[[1," "],[10,"dt"],[12],[1,[28,[35,2],["models.auth-method.Config.AllowedRedirectURIs"],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[10,"ul"],[12],[1,"\\n"],[42,[28,[37,5],[[28,[37,5],[[30,1,["Config","AllowedRedirectURIs"]]],null]],null],null,[[[1," "],[10,"li"],[12],[1,"\\n "],[8,[39,9],null,[["@value","@name"],[[30,10],"Redirect URI"]],null],[1,"\\n "],[13],[1,"\\n"]],[10]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[30,1,["Config","BoundAudiences"]],[[[1," "],[10,"dt"],[12],[1,[28,[35,2],["models.auth-method.Config.BoundAudiences"],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[10,"ul"],[12],[1,"\\n"],[42,[28,[37,5],[[28,[37,5],[[30,1,["Config","BoundAudiences"]]],null]],null],null,[[[1," "],[10,"li"],[12],[1,"\\n "],[10,1],[12],[1,[30,11]],[13],[1,"\\n "],[13],[1,"\\n"]],[11]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[30,1,["Config","OIDCScopes"]],[[[1," "],[10,"dt"],[12],[1,[28,[35,2],["models.auth-method.Config.OIDCScopes"],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[10,"ul"],[12],[1,"\\n"],[42,[28,[37,5],[[28,[37,5],[[30,1,["Config","OIDCScopes"]]],null]],null],null,[[[1," "],[10,"li"],[12],[1,"\\n "],[10,1],[12],[1,[30,12]],[13],[1,"\\n "],[13],[1,"\\n"]],[12]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[30,1,["Config","JWTSupportedAlgs"]],[[[1," "],[10,"dt"],[12],[1,[28,[35,2],["models.auth-method.Config.JWTSupportedAlgs"],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,[28,[35,12],[", ",[30,1,["Config","JWTSupportedAlgs"]]],null]],[13],[1,"\\n"]],[]],null],[41,[30,1,["Config","VerboseOIDCLogging"]],[[[1," "],[10,"dt"],[14,0,"check"],[12],[1,[28,[35,2],["models.auth-method.Config.VerboseOIDCLogging"],null]],[13],[1,"\\n "],[10,"dd"],[12],[10,"input"],[14,"disabled","disabled"],[15,"checked",[30,1,["Config","VerboseOIDCLogging"]]],[14,4,"checkbox"],[12],[13],[13],[1,"\\n"]],[]],null],[1," "]],[]],null]],[]]]],[]]],[1," "],[13],[1,"\\n "],[13],[1,"\\n\\n"],[41,[28,[37,13],[[28,[37,1],[[30,1,["Type"]],"aws-iam"],null]],null],[[[1," "],[10,"hr"],[12],[13],[1,"\\n\\n "],[10,"section"],[14,0,"claim-mappings"],[12],[1,"\\n "],[10,"h2"],[12],[1,"Claim Mappings"],[13],[1,"\\n"],[41,[30,1,["Config","ClaimMappings"]],[[[1," "],[10,2],[12],[1,"Use this if the claim you are capturing is singular. When mapped, the values can be any of a number, string, or boolean and will all be stringified when returned."],[13],[1,"\\n "],[10,"table"],[12],[1,"\\n "],[10,"thead"],[12],[1,"\\n "],[10,"tr"],[12],[1,"\\n "],[10,"td"],[12],[1,"Key"],[13],[1,"\\n "],[10,"td"],[12],[1,"Value"],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[10,"tbody"],[12],[1,"\\n"],[42,[28,[37,5],[[28,[37,5],[[28,[37,14],[[30,1,["Config","ClaimMappings"]]],null]],null]],null],null,[[[1," "],[10,"tr"],[12],[1,"\\n "],[10,"td"],[12],[1,[28,[35,7],[[30,13],0],null]],[13],[1,"\\n "],[10,"td"],[12],[1,[28,[35,7],[[30,13],1],null]],[13],[1,"\\n "],[13],[1,"\\n"]],[13]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],[[[1," "],[8,[39,15],null,null,[["default"],[[[[1,"\\n "],[8,[39,16],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"No claim mappings"],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,16],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"Use this if the claim you are capturing is singular. When mapped, the values can be any of a number, string, or boolean and will all be stringified when returned."],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,16],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[10,"li"],[14,0,"docs-link"],[12],[1,"\\n"],[41,[28,[37,1],[[30,1,["Type"]],"jwt"],null],[[[1," "],[10,3],[15,6,[29,[[28,[37,17],["CONSUL_DOCS_URL"],null],"/security/acl/auth-methods/jwt#claimmappings"]]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[1,"Read the documentation"],[13],[1,"\\n"]],[]],[[[1," "],[10,3],[15,6,[29,[[28,[37,17],["CONSUL_DOCS_URL"],null],"/security/acl/auth-methods/oidc#claimmappings"]]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[1,"Read the documentation"],[13],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n\\n "],[10,"hr"],[12],[13],[1,"\\n\\n "],[10,"section"],[14,0,"list-claim-mappings"],[12],[1,"\\n "],[10,"h2"],[12],[1,"List Claim Mappings"],[13],[1,"\\n"],[41,[30,1,["Config","ListClaimMappings"]],[[[1," "],[10,2],[12],[1,"Use this if the claim you are capturing is list-like (such as groups). When mapped, the values can be any of a number, string, or boolean and will all be stringified when returned."],[13],[1,"\\n "],[10,"table"],[12],[1,"\\n "],[10,"thead"],[12],[1,"\\n "],[10,"tr"],[12],[1,"\\n "],[10,"td"],[12],[1,"Key"],[13],[1,"\\n "],[10,"td"],[12],[1,"Value"],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[10,"tbody"],[12],[1,"\\n"],[42,[28,[37,5],[[28,[37,5],[[28,[37,14],[[30,1,["Config","ListClaimMappings"]]],null]],null]],null],null,[[[1," "],[10,"tr"],[12],[1,"\\n "],[10,"td"],[12],[1,[28,[35,7],[[30,14],0],null]],[13],[1,"\\n "],[10,"td"],[12],[1,[28,[35,7],[[30,14],1],null]],[13],[1,"\\n "],[13],[1,"\\n"]],[14]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],[[[1," "],[8,[39,15],null,null,[["default"],[[[[1,"\\n "],[8,[39,16],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"No list claim mappings"],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,16],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"Use this if the claim you are capturing is list-like (such as groups). When mapped, the values can be any of a number, string, or boolean and will all be stringified when returned."],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,16],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[10,"li"],[14,0,"docs-link"],[12],[1,"\\n"],[41,[28,[37,1],[[30,1,["Type"]],"jwt"],null],[[[1," "],[10,3],[15,6,[29,[[28,[37,17],["CONSUL_DOCS_URL"],null],"/security/acl/auth-methods/jwt#listclaimmappings"]]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[1,"Read the documentation"],[13],[1,"\\n"]],[]],[[[1," "],[10,3],[15,6,[29,[[28,[37,17],["CONSUL_DOCS_URL"],null],"/security/acl/auth-methods/oidc#listclaimmappings"]]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[1,"Read the documentation"],[13],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n"]],[]],null]],[]]],[1," "],[13]],["@item","value","value","config","value","item","jtem","bond","value","uri","bond","scope","entry","entry"],false,["if","eq","t","consul/auth-method/type","each","-track-array","array","get","concat","copyable-code","let","array-is-array","join","not","entries","empty-state","block-slot","env"]]',moduleName:"consul-ui/components/consul/auth-method/view/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/bucket/list/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@ember/service"],(function(e,t,n,l,r){var i,o -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const a=(0,n.createTemplateFactory)({id:"Uns+fzyc",block:'[[[41,[30,0,["itemsToDisplay","length"]],[[[1," "],[10,"dl"],[14,0,"consul-bucket-list"],[12],[1,"\\n"],[42,[28,[37,2],[[28,[37,2],[[30,0,["itemsToDisplay"]]],null]],null],null,[[[1," "],[11,"dt"],[16,0,[30,1,["type"]]],[4,[38,3],null,null],[12],[1,"\\n "],[1,[30,1,["label"]]],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[30,1,["item"]]],[1,"\\n "],[13],[1,"\\n"]],[1]],null],[1," "],[13],[1,"\\n"]],[]],null]],["item"],false,["if","each","-track-array","tooltip"]]',moduleName:"consul-ui/components/consul/bucket/list/index.hbs",isStrictMode:!1}) -let u=(i=class extends l.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="abilities",l=this,(n=o)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}get itemsToDisplay(){const{peerOrPartitionPart:e,namespacePart:t,servicePart:n}=this -return[...e,...t,...n]}get peerOrPartitionPart(){const{peerPart:e,partitionPart:t}=this -return e.length?e:t}get partitionPart(){const{item:e,partition:t}=this.args,{abilities:n}=this -return t&&n.can("use partitions")&&e.Partition!==t?[{type:"partition",label:"Admin Partition",item:e.Partition}]:[]}get peerPart(){const{item:e}=this.args -return e.PeerName?[{type:"peer",label:"Peer",item:e.PeerName}]:[]}get namespacePart(){const{item:e,nspace:t}=this.args,{abilities:n,partitionPart:l,peerPart:r}=this,i={type:"nspace",label:"Namespace",item:e.Namespace} -return l.length||r.length&&n.can("use nspaces")||t&&n.can("use nspaces")&&e.Namespace!==t?[i]:[]}get servicePart(){const{item:e,service:t}=this.args,{partitionPart:n,namespacePart:l}=this -return(n.length||l.length)&&e.Service&&t?[{type:"service",label:"Service",item:e.Service}]:[]}},s=i.prototype,c="abilities",d=[r.inject],p={configurable:!0,enumerable:!0,writable:!0,initializer:null},m={},Object.keys(p).forEach((function(e){m[e]=p[e]})),m.enumerable=!!m.enumerable,m.configurable=!!m.configurable,("value"in m||m.initializer)&&(m.writable=!0),m=d.slice().reverse().reduce((function(e,t){return t(s,c,e)||e}),m),f&&void 0!==m.initializer&&(m.value=m.initializer?m.initializer.call(f):void 0,m.initializer=void 0),void 0===m.initializer&&(Object.defineProperty(s,c,m),m=null),o=m,i) -var s,c,d,p,f,m -e.default=u,(0,t.setComponentTemplate)(a,u)})),define("consul-ui/components/consul/datacenter/selector/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"b1hlblXc",block:'[[[10,"li"],[14,0,"dcs"],[12],[1,"\\n"],[41,[28,[37,1],[[30,1,["length"]],1],null],[[[1," "],[8,[39,2],[[24,"aria-label","Datacenter"]],[["@items"],[[28,[37,3],["Primary:desc","Local:desc","Name:asc",[30,1]],null]]],[["default"],[[[[1,"\\n "],[8,[30,2,["Action"]],[[4,[38,4],["click",[30,2,["toggle"]]],null]],null,[["default"],[[[[1,"\\n "],[1,[30,3,["Name"]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,2,["Menu"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@src","@onchange"],[[28,[37,6],["/*/*/*/datacenters"],null],[28,[37,7],[[30,0],[28,[37,8],[[30,1]],null]],[["value"],["data"]]]]],null],[1,"\\n "],[10,2],[14,0,"dcs-message"],[12],[1,"\\n Datacenters shown in this dropdown are available through WAN Federation.\\n "],[13],[1,"\\n "],[8,[30,4,["Menu"]],null,null,[["default"],[[[[1,"\\n "],[8,[30,5,["Separator"]],null,null,[["default"],[[[[1,"\\n DATACENTERS\\n "]],[]]]]],[1,"\\n"],[42,[28,[37,10],[[28,[37,10],[[30,5,["items"]]],null]],null],null,[[[1," "],[8,[30,5,["Item"]],[[16,"aria-current",[52,[28,[37,11],[[30,3,["Name"]],[30,6,["Name"]]],null],"true"]],[16,0,[28,[37,12],[[28,[37,13],["is-local",[30,6,["Local"]]],null],[28,[37,13],["is-primary",[30,6,["Primary"]]],null]],null]]],null,[["default"],[[[[1,"\\n "],[8,[30,5,["Action"]],[[4,[38,4],["click",[30,2,["close"]]],null]],[["@href"],[[28,[37,14],["."],[["params"],[[28,[37,15],null,[["dc","partition","nspace"],[[30,6,["Name"]],[27],[52,[28,[37,1],[[30,7,["length"]],0],null],[30,7],[27]]]]]]]]]],[["default"],[[[[1,"\\n "],[1,[30,6,["Name"]]],[1,"\\n"],[41,[30,6,["Primary"]],[[[1," "],[10,1],[12],[1,"Primary"],[13],[1,"\\n"]],[]],null],[41,[30,6,["Local"]],[[[1," "],[10,1],[12],[1,"Local"],[13],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[6]],null],[1," "]],[5]]]]],[1,"\\n "]],[4]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[]],[[[1," "],[10,0],[14,0,"dc-name"],[12],[1,"\\n "],[1,[30,1,["firstObject","Name"]]],[1,"\\n"],[44,[[28,[37,17],["CONSUL_HCP_MANAGED_RUNTIME"],null]],[[[41,[30,8],[[[1," "],[10,1],[12],[1,[28,[35,18],[[30,8]],null]],[13],[1,"\\n"]],[]],null]],[8]]],[1," "],[13],[1,"\\n"]],[]]],[13]],["@dcs","disclosure","@dc","panel","menu","item","@nspace","managedRuntime"],false,["if","gt","disclosure-menu","sort-by","on","data-source","uri","action","mut","each","-track-array","eq","class-map","array","href-to","hash","let","env","capitalize"]]',moduleName:"consul-ui/components/consul/datacenter/selector/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/discovery-chain/index",["exports","@ember/component","@ember/template-factory","@ember/service","@ember/object","consul-ui/components/consul/discovery-chain/utils"],(function(e,t,n,l,r,i){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const o=(0,n.createTemplateFactory)({id:"gGEpz1eC",block:'[[[10,"style"],[12],[1,"\\n"],[41,[33,1,["nodes"]],[[[1," "],[1,[33,1,["nodes"]]],[1,"\\n { opacity: 1 !important; background-color: var(--token-color-surface-interactive); border:\\n var(--decor-border-100); border-radius: var(--decor-radius-200); border-color:\\n var(--token-color-foreground-faint); box-shadow: var(--token-surface-high-box-shadow); }\\n"]],[]],null],[41,[33,1,["edges"]],[[[1," "],[1,[33,1,["edges"]]],[1,"\\n { opacity: 1; }\\n"]],[]],null],[13],[1,"\\n\\n"],[10,0],[14,0,"routes"],[12],[1,"\\n "],[10,"header"],[12],[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[33,2,["ServiceName"]]],[1,"\\n Router\\n "],[11,1],[4,[38,3],["Use routers to intercept traffic using Layer 7 criteria such as path prefixes or http headers."],null],[12],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[10,0],[14,"role","group"],[12],[1,"\\n"],[42,[28,[37,5],[[28,[37,5],[[33,6]],null]],null],null,[[[1," "],[8,[39,7],[[4,[38,9],[[28,[37,10],[[28,[37,11],[[30,1],"rect"],null]],[["from"],[[30,0,["edges"]]]]]],null]],[["@item","@onclick"],[[30,1],[28,[37,8],[[30,0],"click"],null]]],null],[1,"\\n"]],[1]],null],[1," "],[13],[1,"\\n"],[13],[1,"\\n\\n"],[10,0],[14,0,"splitters"],[12],[1,"\\n "],[10,"header"],[12],[1,"\\n "],[10,"h2"],[12],[1,"\\n Splitters\\n "],[11,1],[4,[38,3],["Splitters are configured to split incoming requests across different services or subsets of a single service."],null],[12],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[10,0],[14,"role","group"],[12],[1,"\\n"],[42,[28,[37,5],[[28,[37,5],[[28,[37,12],["Name",[33,13]],null]],null]],null],null,[[[1," "],[8,[39,14],[[4,[38,9],[[28,[37,10],[[28,[37,11],[[30,2],"rect"],null]],[["from"],[[30,0,["edges"]]]]]],null]],[["@item","@onclick"],[[30,2],[28,[37,8],[[30,0],"click"],null]]],null],[1,"\\n"]],[2]],null],[1," "],[13],[1,"\\n"],[13],[1,"\\n\\n"],[10,0],[14,0,"resolvers"],[12],[1,"\\n "],[10,"header"],[12],[1,"\\n "],[10,"h2"],[12],[1,"\\n Resolvers\\n "],[11,1],[4,[38,3],["Resolvers are used to define which instances of a service should satisfy discovery requests."],null],[12],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[10,0],[14,"role","group"],[12],[1,"\\n"],[42,[28,[37,5],[[28,[37,5],[[28,[37,12],["Name",[33,15]],null]],null]],null],null,[[[1," "],[8,[39,16],[[4,[38,9],[[28,[37,10],[[28,[37,11],[[30,3],"rect"],null]],[["from"],[[30,0,["edges"]]]]]],null]],[["@item","@edges","@onclick"],[[30,3],[30,0,["edges"]],[28,[37,8],[[30,0],"click"],null]]],null],[1,"\\n"]],[3]],null],[1," "],[13],[1,"\\n"],[13],[1,"\\n\\n"],[1,[34,17]],[1,"\\n\\n"],[11,"svg"],[24,0,"edges"],[24,"width","100%"],[24,"height","100%"],[24,"preserveAspectRatio","none"],[4,[38,18],[[28,[37,11],[[30,0],"edges"],null]],null],[12],[1,"\\n"],[42,[28,[37,5],[[28,[37,5],[[33,6]],null]],null],null,[[[41,[30,4,["rect"]],[[[44,[[30,4,["rect"]],[30,4,["NextItem","rect"]]],[[[44,[[28,[37,20],[[28,[37,21],null,[["x","y"],[[30,6,["x"]],[28,[37,22],[[30,6,["y"]],[28,[37,23],[[30,6,["height"]],2],null]],null]]]],[28,[37,24],[[30,4,["ID"]]],null]],null]],[[[1,"\\n "],[10,"path"],[15,1,[28,[37,24],[[30,4,["ID"]],">",[30,4,["NextNode"]]],null]],[15,"d",[28,[37,25],[[28,[37,21],null,[["x","y"],[[30,7,["x"]],[28,[37,26],[[30,7,["y"]],0],null]]]]],[["src"],[[28,[37,21],null,[["x","y"],[[30,5,["right"]],[28,[37,22],[[30,5,["y"]],[28,[37,23],[[30,5,["height"]],2],null]],null]]]]]]]],[12],[13],[1,"\\n\\n"]],[7]]]],[5,6]]]],[]],null]],[4]],null],[1,"\\n"],[42,[28,[37,5],[[28,[37,5],[[33,13]],null]],null],null,[[[41,[30,8,["rect"]],[[[44,[[30,8,["rect"]]],[[[42,[28,[37,5],[[28,[37,5],[[30,8,["Splits"]]],null]],null],null,[[[44,[[30,10,["NextItem","rect"]]],[[[44,[[28,[37,20],[[28,[37,21],null,[["x","y"],[[30,12,["x"]],[28,[37,22],[[30,12,["y"]],[28,[37,23],[[30,12,["height"]],2],null]],null]]]],[28,[37,24],[[30,8,["ID"]],"-",[30,11]],null]],null]],[[[1,"\\n "],[11,"path"],[16,1,[28,[37,24],["splitter:",[30,8,["Name"]],">",[30,10,["NextNode"]]],null]],[24,0,"split"],[16,"d",[28,[37,25],[[28,[37,21],null,[["x","y"],[[30,13,["x"]],[30,13,["y"]]]]]],[["src"],[[28,[37,21],null,[["x","y"],[[30,9,["right"]],[28,[37,22],[[30,9,["y"]],[28,[37,23],[[30,9,["height"]],2],null]],null]]]]]]]],[4,[38,3],[[28,[37,24],[[28,[37,27],[[28,[37,28],[[30,10,["Weight"]],0],null]],[["decimals"],[2]]],"%"],null]],[["options"],[[28,[37,21],null,[["followCursor"],[true]]]]]],[12],[13],[1,"\\n\\n"]],[13]]]],[12]]]],[10,11]],null]],[9]]]],[]],null]],[8]],null],[1,"\\n"],[13],[1,"\\n\\n"],[10,"svg"],[14,0,"resolver-inlets"],[14,"height","100%"],[12],[1,"\\n"],[42,[28,[37,5],[[28,[37,5],[[33,6]],null]],null],null,[[[41,[28,[37,29],[[30,14,["NextNode"]],"resolver:"],null],[[[44,[[28,[37,28],[[30,14,["NextItem","rect"]],[28,[37,21],null,[["y","height"],[0,0]]]],null]],[[[1," "],[10,"circle"],[14,"r","2.5"],[14,"cx","5"],[15,"cy",[28,[37,22],[[30,15,["y"]],[28,[37,23],[[30,15,["height"]],2],null]],null]],[12],[13],[1,"\\n"]],[15]]]],[]],null]],[14]],null],[42,[28,[37,5],[[28,[37,5],[[33,13]],null]],null],null,[[[42,[28,[37,5],[[28,[37,5],[[30,16,["Splits"]]],null]],null],null,[[[44,[[28,[37,28],[[30,17,["NextItem","rect"]],[28,[37,21],null,[["y","height"],[0,0]]]],null]],[[[1," "],[10,"circle"],[14,"r","2.5"],[14,"cx","5"],[15,"cy",[28,[37,22],[[30,18,["y"]],[28,[37,23],[[30,18,["height"]],2],null]],null]],[12],[13],[1,"\\n"]],[18]]]],[17]],null]],[16]],null],[13],[1,"\\n\\n"],[10,"svg"],[14,0,"splitter-inlets"],[14,"height","100%"],[12],[1,"\\n"],[42,[28,[37,5],[[28,[37,5],[[33,6]],null]],null],null,[[[41,[28,[37,29],[[30,19,["NextNode"]],"splitter:"],null],[[[44,[[28,[37,28],[[30,19,["NextItem","rect"]],[28,[37,21],null,[["y","height"],[0,0]]]],null]],[[[1," "],[10,"circle"],[14,"r","2.5"],[14,"cx","5"],[15,"cy",[28,[37,22],[[30,20,["y"]],[28,[37,23],[[30,20,["height"]],2],null]],null]],[12],[13],[1,"\\n"]],[20]]]],[]],null]],[19]],null],[13],[1,"\\n"]],["item","item","item","item","src","destRect","dest","splitter","src","item","index","destRect","dest","item","dest","item","item","dest","item","dest"],false,["if","selected","chain","tooltip","each","-track-array","routes","consul/discovery-chain/route-card","action","on-resize","dom-position","set","sort-by","splitters","consul/discovery-chain/splitter-card","resolvers","consul/discovery-chain/resolver-card","nodes","did-insert","let","tween-to","hash","add","div","concat","svg-curve","sub","round","or","string-starts-with"]]',moduleName:"consul-ui/components/consul/discovery-chain/index.hbs",isStrictMode:!1}) -var a=(0,t.setComponentTemplate)(o,t.default.extend({dom:(0,l.inject)("dom"),ticker:(0,l.inject)("ticker"),dataStructs:(0,l.inject)("data-structs"),classNames:["discovery-chain"],classNameBindings:["active"],selectedId:"",init:function(){this._super(...arguments),this._listeners=this.dom.listeners()},didInsertElement:function(){this._listeners.add(this.dom.document(),{click:e=>{this.dom.closest('[class$="-card"]',e.target)||((0,r.set)(this,"active",!1),(0,r.set)(this,"selectedId",""))}})},willDestroyElement:function(){this._super(...arguments),this._listeners.remove(),this.ticker.destroy(this)},splitters:(0,r.computed)("chain.Nodes",(function(){return(0,i.getSplitters)((0,r.get)(this,"chain.Nodes"))})),routes:(0,r.computed)("chain.Nodes",(function(){const e=(0,i.getRoutes)((0,r.get)(this,"chain.Nodes"),this.dom.guid) -if(!e.find((e=>"/"===(0,r.get)(e,"Definition.Match.HTTP.PathPrefix")))&&!e.find((e=>void 0===e.Definition))){let t -const n=`resolver:${this.chain.ServiceName}.${this.chain.Namespace}.${this.chain.Partition}.${this.chain.Datacenter}`,l=`splitter:${this.chain.ServiceName}.${this.chain.Namespace}.${this.chain.Partition}` -if(void 0!==this.chain.Nodes[l]?t=l:void 0!==this.chain.Nodes[n]&&(t=n),void 0!==t){const n={Default:!0,ID:`route:${this.chain.ServiceName}`,Name:this.chain.ServiceName,Definition:{Match:{HTTP:{PathPrefix:"/"}}},NextNode:t} -e.push((0,i.createRoute)(n,this.chain.ServiceName,this.dom.guid))}}return e})),nodes:(0,r.computed)("routes","splitters","resolvers",(function(){let e=this.resolvers.reduce(((e,t)=>(e[`resolver:${t.ID}`]=t,t.Children.reduce(((e,t)=>(e[`resolver:${t.ID}`]=t,e)),e),e)),{}) -return e=this.splitters.reduce(((e,t)=>(e[t.ID]=t,e)),e),e=this.routes.reduce(((e,t)=>(e[t.ID]=t,e)),e),Object.entries(e).forEach((t=>{let[n,l]=t -void 0!==l.NextNode&&(l.NextItem=e[l.NextNode]),void 0!==l.Splits&&l.Splits.forEach((t=>{void 0!==t.NextNode&&(t.NextItem=e[t.NextNode])}))})),""})),resolvers:(0,r.computed)("chain.{Nodes,Targets}",(function(){return(0,i.getResolvers)(this.chain.Datacenter,this.chain.Partition,this.chain.Namespace,(0,r.get)(this,"chain.Targets"),(0,r.get)(this,"chain.Nodes"))})),graph:(0,r.computed)("splitters","routes.[]",(function(){const e=this.dataStructs.graph() -return this.splitters.forEach((t=>{t.Splits.forEach((n=>{e.addLink(t.ID,n.NextNode)}))})),this.routes.forEach(((t,n)=>{e.addLink(t.ID,t.NextNode)})),e})),selected:(0,r.computed)("selectedId","graph",(function(){if(""===this.selectedId||!this.dom.element(`#${this.selectedId}`))return{} -const e=this.selectedId,t=e.split(":").shift(),n=[e],l=[] -return this.graph.forEachLinkedNode(e,((e,r)=>{n.push(e.id),l.push(`${r.fromId}>${r.toId}`),this.graph.forEachLinkedNode(e.id,((e,r)=>{const i=e.id.split(":").shift() -t!==i&&"splitter"!==t&&"splitter"!==i&&(n.push(e.id),l.push(`${r.fromId}>${r.toId}`))}))})),{nodes:n.map((e=>`#${CSS.escape(e)}`)),edges:l.map((e=>`#${CSS.escape(e)}`))}})),actions:{click:function(e){const t=e.currentTarget.getAttribute("id") -t===this.selectedId?((0,r.set)(this,"active",!1),(0,r.set)(this,"selectedId","")):((0,r.set)(this,"active",!0),(0,r.set)(this,"selectedId",t))}}})) -e.default=a})),define("consul-ui/components/consul/discovery-chain/resolver-card/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"o/2vY0FQ",block:'[[[10,0],[14,0,"resolver-card"],[12],[1,"\\n "],[11,"header"],[17,1],[16,"onclick",[28,[37,0],[[30,2]],null]],[16,1,[28,[37,1],["resolver:",[30,3,["ID"]]],null]],[12],[1,"\\n "],[10,3],[14,3,""],[12],[1,"\\n "],[10,"h3"],[12],[1,[30,3,["Name"]]],[13],[1,"\\n"],[41,[30,3,["Failover"]],[[[1," "],[10,"dl"],[14,0,"failover"],[12],[1,"\\n "],[11,"dt"],[4,[38,3],[[28,[37,1],[[30,3,["Failover","Type"]]," failover"],null]],null],[12],[1,"\\n "],[1,[28,[35,1],[[30,3,["Failover","Type"]]," failover"],null]],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[10,"ol"],[12],[1,"\\n"],[42,[28,[37,5],[[28,[37,5],[[30,3,["Failover","Targets"]]],null]],null],null,[[[1," "],[10,"li"],[12],[10,1],[12],[1,[30,4]],[13],[13],[1,"\\n"]],[4]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n"],[41,[28,[37,6],[[30,3,["Children","length"]],0],null],[[[1," "],[10,"ul"],[12],[1,"\\n"],[42,[28,[37,5],[[28,[37,5],[[30,3,["Children"]]],null]],null],null,[[[1," "],[11,"li"],[16,"onclick",[28,[37,0],[[30,2]],null]],[16,1,[28,[37,1],["resolver:",[30,5,["ID"]]],null]],[4,[38,7],[[28,[37,8],[[28,[37,9],[[30,5],"rect"],null]],[["from"],[[30,6]]]]],null],[12],[1,"\\n "],[10,3],[14,3,""],[12],[1,"\\n"],[41,[30,5,["Redirect"]],[[[1," "],[10,"dl"],[14,0,"redirect"],[12],[1,"\\n "],[11,"dt"],[4,[38,3],[[28,[37,1],[[30,5,["Redirect"]]," redirect"],null]],null],[12],[1,"\\n "],[1,[30,5,["Redirect"]]],[1," redirect\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[30,5,["Name"]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"],[41,[30,5,["Failover"]],[[[1," "],[10,"dl"],[14,0,"failover"],[12],[1,"\\n "],[11,"dt"],[4,[38,3],[[28,[37,1],[[30,5,["Failover","Type"]]," failover"],null]],null],[12],[1,"\\n "],[1,[30,5,["Failover","Type"]]],[1," failover\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[10,"ol"],[12],[1,"\\n"],[42,[28,[37,5],[[28,[37,5],[[30,5,["Failover","Targets"]]],null]],null],null,[[[1," "],[10,"li"],[12],[1,"\\n "],[10,1],[12],[1,[30,7]],[13],[1,"\\n "],[13],[1,"\\n"]],[7]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null]],[]],[[[41,[30,5,["Failover"]],[[[1," "],[1,[30,5,["Name"]]],[1,"\\n "],[10,"dl"],[14,0,"failover"],[12],[1,"\\n "],[11,"dt"],[4,[38,3],[[28,[37,1],[[30,5,["Failover","Type"]]," failover"],null]],null],[12],[1,"\\n "],[1,[28,[35,1],[[30,5,["Failover","Type"]]," failover"],null]],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[10,"ol"],[12],[1,"\\n"],[42,[28,[37,5],[[28,[37,5],[[30,5,["Failover","Targets"]]],null]],null],null,[[[1," "],[10,"li"],[12],[1,"\\n "],[10,1],[12],[1,[30,8]],[13],[1,"\\n "],[13],[1,"\\n"]],[8]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],[[[1," "],[1,[30,5,["Name"]]],[1,"\\n "]],[]]]],[]]],[1," "],[13],[1,"\\n "],[13],[1,"\\n"]],[5]],null],[1," "],[13],[1,"\\n"]],[]],null],[13],[1,"\\n"]],["&attrs","@onclick","@item","item","child","@edges","target","target"],false,["optional","concat","if","tooltip","each","-track-array","gt","on-resize","dom-position","set"]]',moduleName:"consul-ui/components/consul/discovery-chain/resolver-card/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/discovery-chain/route-card/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@ember/object"],(function(e,t,n,l,r){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const i=(0,n.createTemplateFactory)({id:"fiqUKMeE",block:'[[[11,3],[24,0,"route-card"],[16,"onclick",[30,1]],[16,1,[30,2,["ID"]]],[17,3],[12],[1,"\\n "],[10,"header"],[15,0,[52,[28,[37,1],[[30,0,["path","value"]],"/"],null],"short"]],[12],[1,"\\n"],[41,[28,[37,2],[[30,2,["Definition","Match","HTTP","Methods","length"]],0],null],[[[1," "],[10,"ul"],[14,0,"match-methods"],[12],[1,"\\n"],[42,[28,[37,4],[[28,[37,4],[[30,2,["Definition","Match","HTTP","Methods"]]],null]],null],null,[[[1," "],[10,"li"],[12],[1,[30,4]],[13],[1,"\\n"]],[4]],null],[1," "],[13],[1,"\\n"]],[]],null],[1," "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n "],[1,[30,0,["path","type"]]],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[30,0,["path","value"]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"],[41,[28,[37,2],[[30,2,["Definition","Match","HTTP","Header","length"]],0],null],[[[1," "],[10,"section"],[14,0,"match-headers"],[12],[1,"\\n "],[11,"header"],[4,[38,5],["Header"],null],[12],[1,"\\n "],[10,"h4"],[12],[1,"Headers"],[13],[1,"\\n "],[13],[1,"\\n "],[10,"dl"],[12],[1,"\\n"],[42,[28,[37,4],[[28,[37,4],[[30,2,["Definition","Match","HTTP","Header"]]],null]],null],null,[[[1," "],[10,"dt"],[12],[1,"\\n "],[1,[30,5,["Name"]]],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[28,[35,6],[[30,5]],null]],[1,"\\n "],[13],[1,"\\n"]],[5]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[28,[37,2],[[30,2,["Definition","Match","HTTP","QueryParam","length"]],0],null],[[[1," "],[10,"section"],[14,0,"match-queryparams"],[12],[1,"\\n "],[11,"header"],[4,[38,5],["Query Params"],null],[12],[1,"\\n "],[10,"h4"],[12],[1,"Query Params"],[13],[1,"\\n "],[13],[1,"\\n "],[10,"dl"],[12],[1,"\\n"],[42,[28,[37,4],[[28,[37,4],[[30,2,["Definition","Match","HTTP","QueryParam"]]],null]],null],null,[[[1," "],[10,"dt"],[12],[1,"\\n "],[1,[30,6,["Name"]]],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[28,[35,6],[[30,6]],null]],[1,"\\n "],[13],[1,"\\n"]],[6]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[13],[1,"\\n"]],["@onclick","@item","&attrs","item","item","item"],false,["if","eq","gt","each","-track-array","tooltip","route-match"]]',moduleName:"consul-ui/components/consul/discovery-chain/route-card/index.hbs",isStrictMode:!1}) -class o extends l.default{get path(){return Object.entries((0,r.get)(this.args.item,"Definition.Match.HTTP")||{}).reduce((function(e,t){let[n,l]=t -return n.toLowerCase().startsWith("path")?{type:n.replace("Path",""),value:l}:e}),{type:"Prefix",value:"/"})}}e.default=o,(0,t.setComponentTemplate)(i,o)})),define("consul-ui/components/consul/discovery-chain/splitter-card/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"RQh8TKeM",block:'[[[10,0],[12],[1,"\\n "],[11,3],[17,1],[16,1,[30,2,["ID"]]],[24,0,"splitter-card"],[16,"onclick",[28,[37,0],[[30,3]],null]],[12],[1,"\\n "],[10,"header"],[12],[1,"\\n "],[10,"h3"],[12],[1,[30,2,["Name"]]],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"],[13],[1,"\\n"]],["&attrs","@item","@onclick"],false,["optional"]]',moduleName:"consul-ui/components/consul/discovery-chain/splitter-card/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/discovery-chain/utils",["exports"],(function(e){function t(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) -t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function n(e){for(var n=1;n0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0 -return Object.values(e).filter((e=>e.Type===t))},i=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"default",l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"default",r=arguments.length>4?arguments[4]:void 0 -return void 0===e[t]&&(e[t]={ID:`${t}.${n}.${l}.${r}`,Name:t,Children:[]}),e[t]},o=function(e,t){let n -const l=e.map((function(e){const[l,r]=[t,e].map((e=>e.split(".").reverse())),i=["Datacenter","Partition","Namespace","Service","Subset"] -return r.find((function(e,t){const r=e!==l[t] -return r&&(n=i[t]),r}))})) -return{Type:n,Targets:l}} -e.getAlternateServices=o -e.getSplitters=function(e){return r(e,"splitter").map((function(e){const t=e.Name.split(".") -return t.reverse(),t.shift(),t.shift(),t.reverse(),n(n({},e),{},{ID:`splitter:${e.Name}`,Name:t.join(".")})}))} -e.getRoutes=function(e,t){return r(e,"router").reduce((function(e,n){return e.concat(n.Routes.map((function(e,l){return a(e,n.Name,t)})))}),[])} -e.getResolvers=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"default",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"default",l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{} -const a={} -return Object.values(r).filter((e=>"resolver"===e.Type)).forEach((function(l){const r=l.Name.split(".") -let u -r.length>4&&(u=r.shift()),r.reverse(),r.shift(),r.shift(),r.shift(),r.reverse() -const s=r.join("."),c=i(a,s,n,t,e) -let d -if(void 0!==l.Resolver.Failover&&(d=o(l.Resolver.Failover.Targets,l.Name)),u){const e={Subset:!0,ID:l.Name,Name:u} -void 0!==d&&(e.Failover=d),c.Children.push(e)}else void 0!==d&&(c.Failover=d)})),Object.values(l).forEach((l=>{if(void 0!==r[`resolver:${l.ID}`]){const u=o([l.ID],`service.${n}.${t}.${e}`) -if("Service"!==u.Type){const s=i(a,l.Service,n,t,e),c={Redirect:u.Type,ID:l.ID,Name:l[u.Type]} -void 0!==r[`resolver:${l.ID}`].Resolver.Failover&&(c.Failover=o(r[`resolver:${l.ID}`].Resolver.Failover.Targets,l.ID)),s.Children.push(c)}}})),Object.values(a)} -const a=function(e,t,l){return n(n({},e),{},{Default:e.Default||void 0===e.Definition.Match,ID:`route:${t}-${l(e.Definition)}`})} -e.createRoute=a})),define("consul-ui/components/consul/exposed-path/list/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"gs8UZz5a",block:'[[[11,0],[24,0,"consul-exposed-path-list"],[17,1],[12],[1,"\\n "],[10,"ul"],[12],[1,"\\n"],[42,[28,[37,1],[[28,[37,1],[[30,2]],null]],null],null,[[[1," "],[10,"li"],[12],[1,"\\n "],[10,0],[14,0,"header"],[12],[1,"\\n"],[44,[[28,[37,3],[[30,4],":",[30,3,["ListenerPort"]],[30,3,["Path"]]],null]],[[[1," "],[10,2],[14,0,"combined-address"],[12],[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[30,5]],[1,"\\n "],[13],[1,"\\n "],[8,[39,4],null,[["@value","@name"],[[30,5],"Address"]],null],[1,"\\n "],[13],[1,"\\n"]],[5]]],[1," "],[13],[1,"\\n "],[10,0],[14,0,"detail"],[12],[1,"\\n"],[41,[30,3,["Protocol"]],[[[1," "],[10,"dl"],[14,0,"protocol"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n "],[8,[39,6],null,null,[["default"],[[[[1,"\\n Protocol\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[30,3,["Protocol"]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[30,3,["ListenerPort"]],[[[1," "],[10,"dl"],[14,0,"port"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n "],[8,[39,6],null,null,[["default"],[[[[1,"\\n Listener Port\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n listening on :"],[1,[30,3,["ListenerPort"]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[30,3,["LocalPathPort"]],[[[1," "],[10,"dl"],[14,0,"port"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n "],[8,[39,6],null,null,[["default"],[[[[1,"\\n Local Path Port\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n local port :"],[1,[30,3,["LocalPathPort"]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[30,3,["Path"]],[[[1," "],[10,"dl"],[14,0,"path"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n "],[8,[39,6],null,null,[["default"],[[[[1,"\\n Path\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[30,3,["Path"]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n"]],[3]],null],[1," "],[13],[1,"\\n"],[13],[1,"\\n"]],["&attrs","@items","path","@address","combinedAddress"],false,["each","-track-array","let","concat","copy-button","if","tooltip"]]',moduleName:"consul-ui/components/consul/exposed-path/list/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/external-source/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"qg6NqCwn",block:'[[[41,[30,1],[[[44,[[28,[37,2],[[30,1]],null]],[[[41,[28,[37,3],[[30,3],[28,[37,4],[[30,2],"consul-api-gateway"],null]],null],[[[1," "],[10,"dl"],[14,0,"tooltip-panel"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n "],[11,1],[24,0,"consul-external-source"],[17,4],[12],[1,"\\n "],[8,[39,5],[[24,0,"mr-1.5 w-4 h-4"]],[["@name"],[[28,[37,6],[[30,2]],null]]],null],[1,"\\n Registered via "],[1,[28,[35,7],[[28,[37,8],["common.brand.",[30,2]],null]],null]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,9],null,[["@position","@menu"],["left",false]],[["default"],[[[[1,"\\n "],[8,[39,10],null,[["@name"],["header"]],[["default"],[[[[1,"\\n API Gateways manage north-south traffic from external services to services in the Datacenter. For more information, read our documentation.\\n "]],[]]]]],[1,"\\n "],[8,[39,10],null,[["@name"],["menu"]],[["default"],[[[[1,"\\n "],[10,"li"],[14,"role","separator"],[12],[1,"\\n About "],[1,[28,[35,7],[[28,[37,8],["common.brand.",[30,2]],null]],null]],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[14,"role","none"],[14,0,"learn-link"],[12],[1,"\\n "],[10,3],[14,"tabindex","-1"],[14,"role","menuitem"],[15,6,[28,[37,8],[[28,[37,11],["CONSUL_DOCS_LEARN_URL"],null]],null]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[1,"\\n Learn guides\\n "],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],[[[41,[30,2],[[[1," "],[11,1],[24,0,"consul-external-source"],[17,4],[12],[1,"\\n "],[8,[39,5],[[24,0,"mr-1.5 h-4 w-4"]],[["@name","@color"],[[28,[37,6],[[30,2]],null],"var(--token-color-hashicorp-brand)"]],null],[1,"\\n"],[41,[30,5],[[[1," "],[1,[30,5]],[1,"\\n"]],[]],[[[1," Registered via "],[1,[28,[35,7],[[28,[37,8],["common.brand.",[30,2]],null]],null]],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n "]],[]],null]],[]]]],[2]]]],[]],null]],["@item","externalSource","@withInfo","&attrs","@label"],false,["if","let","service/external-source","and","eq","flight-icon","icon-mapping","t","concat","menu-panel","block-slot","env"]]',moduleName:"consul-ui/components/consul/external-source/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/hcp/home/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"0fh1ph90",block:'[[[11,0],[24,0,"consul-hcp-home"],[17,1],[12],[1,"\\n "],[10,3],[15,6,[28,[37,0],["CONSUL_HCP_URL"],null]],[14,"data-native-href","true"],[12],[1,"\\n Back to HCP\\n "],[13],[1,"\\n"],[13],[1,"\\n"]],["&attrs"],false,["env"]]',moduleName:"consul-ui/components/consul/hcp/home/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/health-check/list/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"L0W/wK5V",block:'[[[11,0],[24,0,"consul-health-check-list"],[17,1],[12],[1,"\\n "],[10,"ul"],[12],[1,"\\n"],[42,[28,[37,1],[[28,[37,1],[[30,2]],null]],null],null,[[[1," "],[10,"li"],[15,0,[28,[37,2],["health-check-output ",[30,3,["Status"]]],null]],[12],[1,"\\n "],[10,0],[12],[1,"\\n "],[10,"header"],[12],[1,"\\n "],[10,"h2"],[12],[1,[30,3,["Name"]]],[13],[1,"\\n "],[13],[1,"\\n "],[10,"dl"],[12],[1,"\\n"],[41,[28,[37,4],[[30,3,["Kind"]],"node"],null],[[[1," "],[10,"dt"],[12],[1,"NodeName"],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,3,["Node"]]],[13],[1,"\\n"]],[]],[[[1," "],[10,"dt"],[12],[1,"ServiceName"],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,3,["ServiceName"]]],[13],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"CheckID"],[13],[1,"\\n "],[10,"dd"],[12],[1,[28,[35,5],[[30,3,["CheckID"]],"-"],null]],[13],[1,"\\n "],[13],[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"Type"],[13],[1,"\\n "],[10,"dd"],[14,"data-health-check-type",""],[12],[1,"\\n "],[1,[30,3,["Type"]]],[1,"\\n"],[41,[30,3,["Exposed"]],[[[1," "],[11,"em"],[4,[38,6],["Expose.checks is set to true, so all registered HTTP and gRPC check paths are exposed through Envoy for the Consul agent."],null],[12],[1,"Exposed"],[13],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"Notes"],[13],[1,"\\n "],[10,"dd"],[12],[1,[28,[35,5],[[30,3,["Notes"]],"-"],null]],[13],[1,"\\n "],[13],[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"Output"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[10,"pre"],[12],[10,"code"],[12],[1,[30,3,["Output"]]],[13],[13],[1,"\\n "],[8,[39,7],null,[["@value","@name"],[[30,3,["Output"]],"output"]],null],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[3]],null],[1," "],[13],[1,"\\n"],[13],[1,"\\n"]],["&attrs","@items","item"],false,["each","-track-array","concat","if","eq","or","tooltip","copy-button"]]',moduleName:"consul-ui/components/consul/health-check/list/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})) -define("consul-ui/components/consul/health-check/search-bar/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"UNgiEnUJ",block:'[[[8,[39,0],[[24,0,"consul-healthcheck-search-bar"],[17,1]],[["@filter"],[[30,2]]],[["status","search","filter","sort"],[[[[1,"\\n\\n"],[44,[[28,[37,2],[[28,[37,3],["components.consul.health-check.search-bar.",[30,3,["status","key"]],".name"],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","key"]]],null],[28,[37,3],["common.consul.",[30,3,["status","key"]]],null]],null]]]],[28,[37,2],[[28,[37,3],["components.consul.health-check.search-bar.",[30,3,["status","key"]],".options.",[30,3,["status","value"]]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","value"]]],null],[28,[37,3],["common.consul.",[30,3,["status","value"]]],null]],null]]]]],[[[1," "],[8,[30,3,["RemoveFilter"]],[[16,"aria-label",[28,[37,2],["common.ui.remove"],[["item"],[[28,[37,3],[[30,4]," ",[30,5]],null]]]]]],null,[["default"],[[[[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,[30,4]],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,5]],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[4,5]]],[1,"\\n "]],[3]],[[[1,"\\n "],[8,[30,6,["Search"]],null,[["@onsearch","@value","@placeholder"],[[28,[37,5],[[30,0],[30,7]],null],[30,8],[28,[37,2],["common.search.search"],null]]],[["default"],[[[[1,"\\n"],[41,[30,2,["searchproperty"]],[[[1," "],[8,[30,6,["Select"]],[[24,0,"type-search-properties"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,2,["searchproperty","change"]]],null],true,true]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["common.search.searchproperty"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,9,["Optgroup"]],[30,9,["Option"]]],[[[42,[28,[37,9],[[28,[37,9],[[30,2,["searchproperty","default"]]],null]],null],null,[[[1," "],[8,[30,11],null,[["@value","@selected"],[[30,12],[28,[37,10],[[30,12],[30,2,["searchproperty","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["common.consul.",[28,[37,11],[[30,12]],null]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[12]],null]],[10,11]]],[1," "]],[]]]]],[1,"\\n "]],[9]]]]],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "]],[6]],[[[1,"\\n "],[8,[30,13,["Select"]],[[24,0,"type-status"]],[["@position","@onchange","@multiple"],["left",[28,[37,5],[[30,0],[30,2,["status","change"]]],null],true]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["common.consul.status"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,14,["Optgroup"]],[30,14,["Option"]]],[[[42,[28,[37,9],[[28,[37,9],[[28,[37,4],["passing","warning","critical","empty"],null]],null]],null],null,[[[1," "],[8,[30,16],[[16,0,[29,["value-",[30,17]]]]],[["@value","@selected"],[[30,17],[28,[37,10],[[30,17],[30,2,["status","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["common.consul.",[30,17]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,17]],null]],null]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[17]],null]],[15,16]]],[1," "]],[]]]]],[1,"\\n "]],[14]]]]],[1,"\\n"],[41,[30,2,["kind"]],[[[1," "],[8,[30,13,["Select"]],[[24,0,"type-kind"]],[["@position","@onchange","@multiple"],["left",[28,[37,5],[[30,0],[30,2,["kind","change"]]],null],true]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["components.consul.health-check.search-bar.kind.name"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,18,["Optgroup"]],[30,18,["Option"]]],[[[42,[28,[37,9],[[28,[37,9],[[28,[37,4],["service","node"],null]],null]],null],null,[[[1," "],[8,[30,20],null,[["@value","@selected"],[[30,21],[28,[37,10],[[30,21],[30,2,["kind","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["components.consul.health-check.search-bar.kind.options.",[30,21]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,21]],null]],null]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[21]],null]],[19,20]]],[1," "]],[]]]]],[1,"\\n "]],[18]]]]],[1,"\\n"]],[]],null],[1," "],[8,[30,13,["Select"]],[[24,0,"type-check"]],[["@position","@onchange","@multiple"],["left",[28,[37,5],[[30,0],[30,2,["check","change"]]],null],true]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["components.consul.health-check.search-bar.check.name"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,22,["Optgroup"]],[30,22,["Option"]]],[[[42,[28,[37,9],[[28,[37,9],[[28,[37,4],["alias","docker","grpc","http","script","serf","tcp","ttl"],null]],null]],null],null,[[[1," "],[8,[30,24],null,[["@value","@selected"],[[30,25],[28,[37,10],[[30,25],[30,2,["check","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["components.consul.health-check.search-bar.check.options.",[30,25]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,25]],null]],null]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[25]],null]],[23,24]]],[1," "]],[]]]]],[1,"\\n "]],[22]]]]],[1,"\\n "]],[13]],[[[1,"\\n "],[8,[30,26,["Select"]],[[24,0,"type-sort"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,27,["change"]]],null],false,true]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n"],[44,[[28,[37,12],[[28,[37,4],[[28,[37,4],["Name:asc",[28,[37,2],["common.sort.alpha.asc"],null]],null],[28,[37,4],["Name:desc",[28,[37,2],["common.sort.alpha.desc"],null]],null],[28,[37,4],["Status:asc",[28,[37,2],["common.sort.status.asc"],null]],null],[28,[37,4],["Status:desc",[28,[37,2],["common.sort.status.desc"],null]],null],[28,[37,4],["Kind:asc",[28,[37,2],["components.consul.health-check.search-bar.sort.kind.asc"],null]],null],[28,[37,4],["Kind:desc",[28,[37,2],["components.consul.health-check.search-bar.sort.kind.desc"],null]],null]],null]],null]],[[[1," "],[1,[28,[35,13],[[30,29],[30,27,["value"]]],null]],[1,"\\n"]],[29]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,28,["Optgroup"]],[30,28,["Option"]]],[[[1," "],[8,[30,30],null,[["@label"],[[28,[37,2],["common.consul.status"],null]]],[["default"],[[[[1,"\\n "],[8,[30,31],null,[["@value","@selected"],["Status:asc",[28,[37,14],["Status:asc",[30,27,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.status.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,31],null,[["@value","@selected"],["Status:desc",[28,[37,14],["Status:desc",[30,27,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.status.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,30],null,[["@label"],[[28,[37,2],["components.consul.health-check.search-bar.sort.name.name"],null]]],[["default"],[[[[1,"\\n "],[8,[30,31],null,[["@value","@selected"],["Name:asc",[28,[37,14],["Name:asc",[30,27,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,31],null,[["@value","@selected"],["Name:desc",[28,[37,14],["Name:desc",[30,27,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,30],null,[["@label"],[[28,[37,2],["components.consul.health-check.search-bar.sort.kind.name"],null]]],[["default"],[[[[1,"\\n "],[8,[30,31],null,[["@value","@selected"],["Kind:asc",[28,[37,14],["Kind:asc",[30,27]],null]]],[["default"],[[[[1,"Service to Node"]],[]]]]],[1,"\\n "],[8,[30,31],null,[["@value","@selected"],["Kind:desc",[28,[37,14],["Kind:desc",[30,27]],null]]],[["default"],[[[[1,"Node to Service"]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[30,31]]],[1," "]],[]]]]],[1,"\\n "]],[28]]]]],[1,"\\n "]],[26]]]]]],["&attrs","@filter","search","key","value","search","@onsearch","@search","components","Optgroup","Option","prop","search","components","Optgroup","Option","state","components","Optgroup","Option","item","components","Optgroup","Option","item","search","@sort","components","selectable","Optgroup","Option"],false,["search-bar","let","t","concat","array","action","if","block-slot","each","-track-array","includes","lowercase","from-entries","get","eq"]]',moduleName:"consul-ui/components/consul/health-check/search-bar/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/instance-checks/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"ddRn9Bp0",block:'[[[44,[[28,[37,1],["Status",[28,[37,2],[[30,1],[28,[37,3],null,null]],null]],null]],[[[44,[[28,[37,2],[[52,[28,[37,5],[[30,2,["critical","length"]],0],null],[30,2,["critical"]]],[52,[28,[37,5],[[30,2,["warning","length"]],0],null],[30,2,["warning"]]],[52,[28,[37,5],[[30,2,["passing","length"]],0],null],[30,2,["passing"]]],[28,[37,3],null,null]],null]],[[[44,[[30,3,["firstObject","Status"]]],[[[1," "],[11,"dl"],[16,0,[28,[37,6],["consul-instance-checks",[28,[37,3],["empty",[28,[37,7],[[30,3,["length"]],0],null]],null],[28,[37,3],[[30,4],[28,[37,8],[[30,3,["length"]],0],null]],null]],null]],[17,5],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n "],[8,[39,9],null,null,[["default"],[[[[1,"\\n "],[1,[28,[35,10],[[30,6]],null]],[1," Checks\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n"],[44,[[28,[37,2],[[52,[28,[37,7],[[30,4],"critical"],null],"failing"],[52,[28,[37,7],[[30,4],"warning"],null],"with a warning"],[30,4]],null]],[[[1," "],[10,"dd"],[12],[1,"\\n "],[1,[28,[35,2],[[52,[28,[37,7],[[30,3,["length"]],0],null],[28,[37,11],["No ",[30,6]," checks"],null]],[52,[28,[37,7],[[30,3,["length"]],[30,1,["length"]]],null],[28,[37,11],["All ",[30,6]," checks ",[30,7]],null]],[28,[37,11],[[30,3,["length"]],"/",[30,1,["length"]]," ",[30,6]," checks ",[30,7]],null]],null]],[1,"\\n "],[13],[1,"\\n"]],[7]]],[1," "],[13],[1,"\\n"]],[4]]]],[3]]]],[2]]]],["@items","grouped","checks","status","&attrs","@type","humanized"],false,["let","group-by","or","array","if","gt","class-map","eq","not-eq","tooltip","capitalize","concat"]]',moduleName:"consul-ui/components/consul/instance-checks/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/intention/form/fieldsets/index",["exports","@ember/component","@ember/template-factory"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const l=(0,n.createTemplateFactory)({id:"fVbLeBz9",block:'[[[11,0],[17,1],[24,0,"consul-intention-fieldsets"],[12],[1,"\\n "],[10,"fieldset"],[15,"disabled",[36,0]],[12],[1,"\\n "],[10,0],[14,"role","group"],[12],[1,"\\n "],[10,"fieldset"],[12],[1,"\\n "],[10,"h2"],[12],[1,"Source"],[13],[1,"\\n "],[10,"label"],[15,0,[29,["type-select",[52,[33,2,["error","SourceName"]]," has-error"]]]],[12],[1,"\\n "],[10,1],[12],[1,"Source Service"],[13],[1,"\\n "],[8,[39,3],null,[["@disabled","@options","@searchField","@selected","@searchPlaceholder","@buildSuggestion","@showCreateWhen","@onCreate","@onChange"],[[28,[37,4],[[33,5]],null],[99,6,["@options"]],"Name",[99,7,["@selected"]],"Type service name",[28,[37,8],[[30,0],"createNewLabel","Use a Consul Service called \'{{term}}\'"],null],[28,[37,8],[[30,0],"isUnique",[33,6]],null],[28,[37,8],[[30,0],[33,9],"SourceName"],null],[28,[37,8],[[30,0],[33,9],"SourceName"],null]]],[["default"],[[[[1,"\\n"],[41,[28,[37,10],[[30,2,["Name"]],"*"],null],[[[1," * (All Services)\\n"]],[]],[[[1," "],[1,[30,2,["Name"]]],[1,"\\n"]],[]]],[1," "]],[2]]]]],[1,"\\n"],[41,[33,5],[[[1," "],[10,"em"],[12],[1,"Search for an existing service, or enter any Service name."],[13],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n"],[41,[28,[37,11],["choose nspaces"],null],[[[1," "],[10,"label"],[15,0,[29,["type-select",[52,[33,2,["error","SourceNS"]]," has-error"]]]],[12],[1,"\\n "],[10,1],[12],[1,"Source Namespace"],[13],[1,"\\n "],[8,[39,3],null,[["@disabled","@options","@selected","@searchPlaceholder","@buildSuggestion","@showCreateWhen","@onCreate","@onChange"],[[28,[37,4],[[33,5]],null],[99,12,["@options"]],[99,13,["@selected"]],"Type namespace name",[28,[37,8],[[30,0],"createNewLabel","Use a Consul Namespace called \'{{term}}\'"],null],[28,[37,8],[[30,0],"isUnique",[33,12]],null],[28,[37,8],[[30,0],[33,9],"SourceNS"],null],[28,[37,8],[[30,0],[33,9],"SourceNS"],null]]],[["default"],[[[[1,"\\n"],[41,[28,[37,10],[[30,3,["Name"]],"*"],null],[[[1," * (All Namespaces)\\n"]],[]],[[[1," "],[1,[30,3,["Name"]]],[1,"\\n"]],[]]],[1," "]],[3]]]]],[1,"\\n"],[41,[33,5],[[[1," "],[10,"em"],[12],[1,"Search for an existing namespace, or enter any Namespace name."],[13],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n"]],[]],null],[41,[28,[37,11],["choose partitions"],[["dc"],[[30,4]]]],[[[1," "],[10,"label"],[15,0,[29,["type-select",[52,[33,2,["error","SourcePartition"]]," has-error"]]]],[12],[1,"\\n "],[10,1],[12],[1,"Source Partition"],[13],[1,"\\n "],[8,[39,3],null,[["@disabled","@options","@selected","@searchPlaceholder","@buildSuggestion","@showCreateWhen","@onCreate","@onChange"],[[28,[37,4],[[33,5]],null],[99,14,["@options"]],[99,15,["@selected"]],"Type partition name",[28,[37,8],[[30,0],"createNewLabel","Use a Consul Partition called \'{{term}}\'"],null],[28,[37,8],[[30,0],"isUnique",[33,14]],null],[28,[37,8],[[30,0],[33,9],"SourcePartition"],null],[28,[37,8],[[30,0],[33,9],"SourcePartition"],null]]],[["default"],[[[[1,"\\n "],[1,[30,5,["Name"]]],[1,"\\n "]],[5]]]]],[1,"\\n"],[41,[33,5],[[[1," "],[10,"em"],[12],[1,"Search for an existing partition, or enter any Partition name."],[13],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n "],[10,"fieldset"],[12],[1,"\\n "],[10,"h2"],[12],[1,"Destination"],[13],[1,"\\n "],[10,"label"],[15,0,[29,["type-select",[52,[33,2,["error","DestinationName"]]," has-error"]]]],[12],[1,"\\n "],[10,1],[12],[1,"Destination Service"],[13],[1,"\\n "],[8,[39,3],null,[["@disabled","@options","@searchField","@selected","@searchPlaceholder","@buildSuggestion","@showCreateWhen","@onCreate","@onChange"],[[28,[37,4],[[33,5]],null],[99,6,["@options"]],"Name",[99,16,["@selected"]],"Type service name",[28,[37,8],[[30,0],"createNewLabel","Use a Consul Service called \'{{term}}\'"],null],[28,[37,8],[[30,0],"isUnique",[33,6]],null],[28,[37,8],[[30,0],[33,9],"DestinationName"],null],[28,[37,8],[[30,0],[33,9],"DestinationName"],null]]],[["default"],[[[[1,"\\n"],[41,[28,[37,10],[[30,6,["Name"]],"*"],null],[[[1," * (All Services)\\n"]],[]],[[[1," "],[1,[30,6,["Name"]]],[1,"\\n"]],[]]],[1," "]],[6]]]]],[1,"\\n"],[41,[33,5],[[[1," "],[10,"em"],[12],[1,"Search for an existing service, or enter any Service name."],[13],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n"],[41,[28,[37,11],["choose nspaces"],null],[[[1," "],[10,"label"],[15,0,[29,["type-select",[52,[33,2,["error","DestinationNS"]]," has-error"]]]],[12],[1,"\\n "],[10,1],[12],[1,"Destination Namespace"],[13],[1,"\\n "],[8,[39,3],null,[["@disabled","@options","@searchField","@selected","@searchPlaceholder","@buildSuggestion","@showCreateWhen","@onCreate","@onChange"],[[28,[37,4],[[33,5]],null],[99,12,["@options"]],"Name",[99,17,["@selected"]],"Type namespace name",[28,[37,8],[[30,0],"createNewLabel","Use a future Consul Namespace called \'{{term}}\'"],null],[28,[37,8],[[30,0],"isUnique",[33,12]],null],[28,[37,8],[[30,0],[33,9],"DestinationNS"],null],[28,[37,8],[[30,0],[33,9],"DestinationNS"],null]]],[["default"],[[[[1,"\\n"],[41,[28,[37,10],[[30,7,["Name"]],"*"],null],[[[1," * (All Namespaces)\\n"]],[]],[[[1," "],[1,[30,7,["Name"]]],[1,"\\n"]],[]]],[1," "]],[7]]]]],[1,"\\n"],[41,[33,5],[[[1," "],[10,"em"],[12],[1,"For the destination, you may choose any namespace for which you have access."],[13],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n"]],[]],null],[41,[28,[37,11],["choose partitions"],[["dc"],[[30,4]]]],[[[1," "],[10,"label"],[15,0,[29,["type-select",[52,[33,2,["error","DestinationPartition"]]," has-error"]]]],[12],[1,"\\n "],[10,1],[12],[1,"Destination Partition"],[13],[1,"\\n "],[8,[39,3],null,[["@disabled","@options","@searchField","@selected","@searchPlaceholder","@buildSuggestion","@showCreateWhen","@onCreate","@onChange"],[[28,[37,4],[[33,5]],null],[99,14,["@options"]],"Name",[99,18,["@selected"]],"Type partition name",[28,[37,8],[[30,0],"createNewLabel","Use a future Consul Partition called \'{{term}}\'"],null],[28,[37,8],[[30,0],"isUnique",[33,14]],null],[28,[37,8],[[30,0],[33,9],"DestinationPartition"],null],[28,[37,8],[[30,0],[33,9],"DestinationPartition"],null]]],[["default"],[[[[1,"\\n "],[1,[30,8,["Name"]]],[1,"\\n "]],[8]]]]],[1,"\\n"],[41,[33,5],[[[1," "],[10,"em"],[12],[1,"For the destination, you may choose any partition for which you have access."],[13],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n "],[10,"fieldset"],[12],[1,"\\n "],[10,"label"],[15,0,[29,["type-text",[52,[33,2,["error","Description"]]," has-error"]]]],[12],[1,"\\n "],[10,1],[12],[1,"Description (Optional)"],[13],[1,"\\n "],[10,"input"],[14,3,"Description"],[15,2,[33,2,["Description"]]],[14,"placeholder","Description (Optional)"],[15,"onchange",[28,[37,8],[[30,0],[33,9]],null]],[14,4,"text"],[12],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[10,0],[12],[1,"\\n "],[10,1],[14,0,"label"],[12],[1,"Should this source connect to the destination?"],[13],[1,"\\n "],[10,0],[14,"role","radiogroup"],[15,0,[52,[33,2,["error","Action"]]," has-error"]],[12],[1,"\\n"],[42,[28,[37,20],[[28,[37,20],[[28,[37,21],[[28,[37,22],null,[["intent","header","body"],["allow","Allow","The source service will be allowed to connect to the destination."]]],[28,[37,22],null,[["intent","header","body"],["deny","Deny","The source service will not be allowed to connect to the destination."]]],[28,[37,22],null,[["intent","header","body"],["","Application Aware","The source service may or may not connect to the destination service via unique permissions based on Layer 7 criteria: path, header, or method."]]]],null]],null]],null],null,[[[1," "],[8,[39,23],[[16,0,[28,[37,24],["value-",[30,9,["intent"]]],null]]],[["@value","@checked","@onchange","@name"],[[30,9,["intent"]],[52,[28,[37,10],[[28,[37,25],[[33,2,["Action"]],""],null],[30,9,["intent"]]],null],"checked"],[28,[37,8],[[30,0],[33,9]],null],"Action"]],[["default"],[[[[1,"\\n "],[10,"header"],[12],[1,"\\n "],[1,[30,9,["header"]]],[1,"\\n "],[13],[1,"\\n "],[10,2],[12],[1,"\\n "],[1,[30,9,["body"]]],[1,"\\n "],[13],[1,"\\n "]],[10]]]]],[1,"\\n"]],[9]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"],[41,[28,[37,10],[[28,[37,25],[[33,2,["Action"]],""],null],""],null],[[[1," "],[10,"fieldset"],[14,0,"permissions"],[12],[1,"\\n "],[8,[39,26],[[4,[38,27],["click",[28,[37,8],[[30,0],[30,0,["openModal"]]],null]],null]],[["@text","@size","@color","@icon"],["Add permission","small","tertiary","plus"]],null],[1,"\\n "],[10,"h2"],[12],[1,"Permissions"],[13],[1,"\\n"],[41,[28,[37,28],[[33,2,["Permissions","length"]],0],null],[[[1," "],[8,[39,29],null,null,null],[1,"\\n "],[8,[39,30],null,[["@items","@onclick","@ondelete"],[[33,2,["Permissions"]],[28,[37,31],[[28,[37,8],[[30,0],[28,[37,32],[[33,33]],null]],null],[28,[37,8],[[30,0],[30,0,["openModal"]]],null]],null],[28,[37,8],[[30,0],"delete","Permissions",[33,2]],null]]],null],[1,"\\n"]],[]],[[[1," "],[8,[39,34],null,null,[["default"],[[[[1,"\\n "],[8,[39,35],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h3"],[12],[1,"\\n No permissions yet\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,35],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n Permissions intercept an Intention\'s traffic using Layer 7 criteria, such as path prefixes and http headers.\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,35],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,36],null,[["@text","@href","@icon","@iconPosition","@size"],["Documentation",[29,[[28,[37,37],["CONSUL_DOCS_URL"],null],"/commands/intention"]],"docs-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,36],null,[["@text","@href","@icon","@iconPosition","@size"],["Read the guide",[29,[[28,[37,37],["CONSUL_DOCS_LEARN_URL"],null],"/consul/getting-started/connect"]],"learn-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n"]],[]],null],[1,"\\n "],[8,[39,38],[[24,0,"consul-intention-permission-modal"]],[["@onclose","@aria"],[[28,[37,8],[[30,0],[28,[37,32],[[33,33]],null],[27]],null],[28,[37,22],null,[["label"],["Edit Permission"]]]]],[["default"],[[[[1,"\\n "],[8,[39,39],null,[["@target","@name","@value"],[[30,0],"modal",[30,11]]],null],[1,"\\n "],[8,[39,35],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h3"],[12],[1,"Edit Permission"],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,35],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[8,[39,40],null,[["@item","@onsubmit"],[[99,33,["@item"]],[28,[37,8],[[30,0],"add","Permissions",[33,2]],null]]],[["default"],[[[[1,"\\n "],[8,[39,39],null,[["@target","@name","@value"],[[30,0],"permissionForm",[30,12]]],null],[1,"\\n "]],[12]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,35],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[8,[39,41],null,null,[["default"],[[[[1,"\\n "],[8,[39,26],[[16,"disabled",[52,[28,[37,4],[[30,0,["permissionForm","isDirty"]]],null],"disabled"]],[16,"onclick",[28,[37,31],[[28,[37,8],[[30,0],[30,0,["permissionForm","submit"]]],null],[28,[37,8],[[30,0],[30,11,["close"]]],null]],null]]],[["@text","@color"],["Save","primary"]],null],[1,"\\n "],[8,[39,26],[[16,"onclick",[28,[37,31],[[28,[37,8],[[30,0],[30,0,["permissionForm","reset"]]],null],[28,[37,8],[[30,0],[30,11,["close"]]],null]],null]]],[["@text","@color"],["Cancel","secondary"]],null],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[11]]]]],[1,"\\n\\n"],[13]],["&attrs","service","nspace","@dc","partition","service","nspace","partition","_action","radio","modal","permissionForm"],false,["disabled","if","item","power-select-with-create","not","create","services","SourceName","action","onchange","eq","can","nspaces","SourceNS","partitions","SourcePartition","DestinationName","DestinationNS","DestinationPartition","each","-track-array","array","hash","radio-card","concat","or","hds/button","on","gt","consul/intention/notice/permissions","consul/intention/permission/list","queue","mut","permission","empty-state","block-slot","hds/link/standalone","env","modal-dialog","ref","consul/intention/permission/form","hds/button-set"]]',moduleName:"consul-ui/components/consul/intention/form/fieldsets/index.hbs",isStrictMode:!1}) -var r=(0,t.setComponentTemplate)(l,t.default.extend({tagName:"",shouldShowPermissionForm:!1,openModal(){var e -null===(e=this.modal)||void 0===e||e.open()},actions:{createNewLabel:function(e,t){return e.replace(/{{term}}/g,t)},isUnique:function(e,t){return!e.findBy("Name",t)},add:function(e,t,n){!(t.get(e)||[]).includes(n)&&n.isNew&&(t.pushObject(e,n),t.validate())},delete:function(e,t,n){(t.get(e)||[]).includes(n)&&(t.removeObject(e,n),t.validate())}}})) -e.default=r})),define("consul-ui/components/consul/intention/form/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@ember/service","@ember/object","@glimmer/tracking"],(function(e,t,n,l,r,i,o){var a,u,s,c,d,p,f,m,h,b,y,g,v -function O(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function P(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const x=(0,n.createTemplateFactory)({id:"8yZp6UDg",block:'[[[11,0],[24,0,"consul-intention"],[17,1],[12],[1,"\\n"],[8,[39,0],null,[["@type","@dc","@nspace","@partition","@autofill","@item","@src","@onchange","@onsubmit"],["intention",[30,2,["Name"]],[30,3],[30,4],[30,5],[30,6],[30,7],[28,[37,1],[[30,0],[30,0,["change"]]],null],[28,[37,1],[[30,0],[30,0,["onsubmit"]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,2],null,[["@name"],["error"]],[["default"],[[[[1,"\\n"],[41,[28,[37,4],[[30,8,["error","detail"]],"duplicate intention found:"],null],[[[1," "],[8,[39,5],[[4,[38,6],null,[["after"],[[28,[37,1],[[30,0],[30,9]],null]]]]],[["@color"],["critical"]],[["default"],[[[[1,"\\n "],[8,[30,10,["Title"]],null,null,[["default"],[[[[1,"Intention exists!"]],[]]]]],[1,"\\n "],[8,[30,10,["Description"]],null,null,[["default"],[[[[1,"\\n An intention already exists for this Source-Destination pair. Please enter a different combination of Services, or search the intentions to edit an existing intention.\\n "]],[]]]]],[1,"\\n "]],[10]]]]],[1,"\\n"]],[]],[[[1," "],[8,[39,5],[[4,[38,6],null,[["after"],[[28,[37,1],[[30,0],[30,9]],null]]]]],[["@color"],["critical"]],[["default"],[[[[1,"\\n "],[8,[30,11,["Title"]],null,null,[["default"],[[[[1,"Error!"]],[]]]]],[1,"\\n "],[8,[30,11,["Description"]],null,null,[["default"],[[[[1,"\\n There was an error saving your intention.\\n"],[41,[28,[37,7],[[30,8,["error","status"]],[30,8,["error","detail"]]],null],[[[1," "],[10,"br"],[12],[13],[1,[30,8,["error","status"]]],[1,": "],[1,[30,8,["error","detail"]]],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "]],[11]]]]],[1,"\\n"]],[]]],[1," "]],[9]]]]],[1,"\\n\\n "],[8,[39,2],null,[["@name"],["form"]],[["default"],[[[[1,"\\n"],[44,[[30,8,["data"]],[28,[37,9],[[28,[37,10],["write intention"],[["item"],[[30,8,["data"]]]]]],null]],[[[41,[28,[37,9],[[30,13]],null],[[[1,"\\n"],[44,[[28,[37,11],[[30,12],"Action"],null]],[[[1," "],[8,[39,12],[[24,0,"consul-intention-action-warn-modal warning"]],[["@aria"],[[28,[37,13],null,[["label"],[[28,[37,14],["Set intention to ",[30,14]],null]]]]]],[["default"],[[[[1,"\\n "],[8,[39,15],null,[["@target","@name","@value"],[[30,0],"modal",[30,15]]],null],[1,"\\n "],[8,[39,2],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"Set intention to "],[1,[30,14]],[1,"?"],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,2],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n When you change this Intention to "],[1,[30,14]],[1,", you will remove all the Layer 7 policy permissions currently saved to this Intention. Are you sure you want to set it to "],[1,[30,14]],[1,"?\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,2],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[8,[39,16],null,null,[["default"],[[[[1,"\\n "],[8,[39,17],[[4,[38,19],["click",[30,8,["submit"]]],null]],[["@text","@color"],[[29,["Set to ",[28,[37,18],[[30,14]],null]]],"critical"]],null],[1,"\\n "],[8,[39,17],[[16,"onclick",[30,16]]],[["@text","@color"],["No, Cancel","secondary"]],null],[1,"\\n "]],[]]]]],[1,"\\n "]],[16]]]]],[1,"\\n "]],[15]]]]],[1,"\\n"]],[14]]],[1,"\\n "],[8,[39,20],null,[["@src","@onchange"],[[28,[37,21],["/${partition}/*/${dc}/services",[28,[37,13],null,[["partition","dc"],[[30,4],[30,2,["Name"]]]]]],null],[28,[37,1],[[30,0],[30,0,["createServices"]],[30,12]],null]]],null],[1,"\\n\\n"],[41,[28,[37,10],["use nspaces"],null],[[[1," "],[8,[39,20],null,[["@src","@onchange"],[[28,[37,21],["/${partition}/*/${dc}/namespaces",[28,[37,13],null,[["partition","dc"],[[30,4],[30,2,["Name"]]]]]],null],[28,[37,1],[[30,0],[30,0,["createNspaces"]],[30,12]],null]]],null],[1,"\\n"]],[]],null],[1,"\\n"],[41,[28,[37,10],["use partitions"],null],[[[1," "],[8,[39,20],null,[["@src","@onchange"],[[28,[37,21],["/*/*/${dc}/partitions",[28,[37,13],null,[["dc"],[[30,2,["Name"]]]]]],null],[28,[37,1],[[30,0],[30,0,["createPartitions"]],[30,12]],null]]],null],[1,"\\n"]],[]],null],[1,"\\n"],[41,[30,8,["isCreate"]],[[[41,[28,[37,7],[[28,[37,10],["use partitions"],null],[28,[37,9],[[28,[37,10],["choose partitions"],[["dc"],[[30,2]]]]],null]],null],[[[1," "],[8,[39,22],[[24,0,"mb-3 mt-2"]],[["@type"],["inline"]],[["default"],[[[[1,"\\n "],[8,[30,17,["Title"]],null,null,[["default"],[[[[1,"Cross-partition communication not supported"]],[]]]]],[1,"\\n "],[8,[30,17,["Description"]],null,null,[["default"],[[[[1,"Cross-partition communication is not supported outside of the primary datacenter. You will only be able to select namespaces for source and destination services."]],[]]]]],[1,"\\n "]],[17]]]]],[1,"\\n"]],[]],null],[41,[30,0,["isManagedByCRDs"]],[[[1," "],[8,[39,23],null,[["@type"],["warning"]],null],[1,"\\n"]],[]],null]],[]],null],[1," "],[11,"form"],[4,[38,19],["submit",[28,[37,24],[[30,0,["submit"]],[30,12],[30,8,["submit"]]],null]],null],[12],[1,"\\n "],[8,[39,25],null,[["@nspaces","@dc","@partitions","@services","@SourceName","@SourceNS","@SourcePartition","@DestinationName","@DestinationNS","@DestinationPartition","@item","@disabled","@create","@onchange"],[[30,0,["nspaces"]],[30,2],[30,0,["partitions"]],[30,0,["services"]],[30,0,["SourceName"]],[30,0,["SourceNS"]],[30,0,["SourcePartition"]],[30,0,["DestinationName"]],[30,0,["DestinationNS"]],[30,0,["DestinationPartition"]],[30,12],[30,8,["disabled"]],[30,8,["isCreate"]],[30,8,["change"]]]],null],[1,"\\n "],[10,0],[12],[1,"\\n "],[8,[39,16],null,null,[["default"],[[[[1,"\\n "],[8,[39,17],[[16,"disabled",[28,[37,26],[[30,12,["isInvalid"]],[30,8,["disabled"]]],null]],[24,4,"submit"]],[["@text"],["Save"]],null],[1,"\\n "],[8,[39,17],[[16,"disabled",[30,8,["disabled"]]],[24,4,"reset"],[4,[38,19],["click",[28,[37,24],[[30,0,["oncancel"]],[30,12]],null]],null]],[["@text","@color"],["Cancel","secondary"]],null],[1,"\\n"],[41,[28,[37,9],[[30,8,["isCreate"]]],null],[[[41,[28,[37,27],[[30,12,["ID"]],"anonymous"],null],[[[1," "],[8,[39,28],null,[["@message"],["Are you sure you want to delete this Intention?"]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@name"],["action"]],[["default"],[[[[1,"\\n "],[8,[39,17],[[16,"disabled",[30,8,["disabled"]]],[4,[38,19],["click",[28,[37,24],[[30,18],[30,8,["delete"]]],null]],null]],[["@text","@color"],["Delete","critical"]],null],[1,"\\n "]],[18]]]]],[1,"\\n "],[8,[39,2],null,[["@name"],["dialog"]],[["default"],[[[[1,"\\n "],[8,[39,29],null,[["@message","@execute","@cancel"],[[30,21],[30,19],[30,20]]],null],[1,"\\n "]],[19,20,21]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null]],[]],null],[1," "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],[[[1,"\\n"],[41,[30,12,["IsManagedByCRD"]],[[[1," "],[8,[39,22],[[24,0,"mb-3 mt-2"]],[["@type"],["inline"]],[["default"],[[[[1,"\\n "],[8,[30,22,["Title"]],null,null,[["default"],[[[[1,"Intention Custom Resource"]],[]]]]],[1,"\\n "],[8,[30,22,["Description"]],null,null,[["default"],[[[[1,"This Intention is view only because it is managed through an Intention Custom Resource in your Kubernetes cluster."]],[]]]]],[1,"\\n "],[8,[30,22,["Link::Standalone"]],null,[["@text","@href","@icon","@iconPosition"],["Learn more about CRDs",[29,[[28,[37,30],["CONSUL_DOCS_URL"],null],"/k8s/crds"]],"docs-link","trailing"]],null],[1,"\\n "]],[22]]]]],[1,"\\n"]],[]],null],[1,"\\n "],[8,[39,31],null,[["@item"],[[30,12]]],null],[1,"\\n"]],[]]]],[12,13]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[8]]]]],[1,"\\n"],[13],[1,"\\n"]],["&attrs","@dc","@nspace","@partition","@autofill","@item","@src","api","after","T","T","item","readonly","newAction","modal","close","A","confirm","execute","cancel","message","A"],false,["data-form","action","block-slot","if","string-starts-with","hds/toast","notification","and","let","not","can","changeset-get","modal-dialog","hash","concat","ref","hds/button-set","hds/button","capitalize","on","data-source","uri","hds/alert","consul/intention/notice/custom-resource","fn","consul/intention/form/fieldsets","or","not-eq","confirmation-dialog","delete-confirmation","env","consul/intention/view"]]',moduleName:"consul-ui/components/consul/intention/form/index.hbs",isStrictMode:!1}) -let w=(a=(0,r.inject)("repository/intention"),u=class extends l.default{constructor(e,t){var n,l,r -super(...arguments),O(this,"services",s,this),O(this,"SourceName",c,this),O(this,"DestinationName",d,this),O(this,"nspaces",p,this),O(this,"SourceNS",f,this),O(this,"DestinationNS",m,this),O(this,"partitions",h,this),O(this,"SourcePartition",b,this),O(this,"DestinationPartition",y,this),O(this,"isManagedByCRDs",g,this),r=null,(l="modal")in(n=this)?Object.defineProperty(n,l,{value:r,enumerable:!0,configurable:!0,writable:!0}):n[l]=r,O(this,"repo",v,this),this.updateCRDManagement()}ondelete(){this.args.ondelete?this.args.ondelete(...arguments):this.onsubmit(...arguments)}oncancel(){this.args.oncancel?this.args.oncancel(...arguments):this.onsubmit(...arguments)}onsubmit(){this.args.onsubmit&&this.args.onsubmit(...arguments)}updateCRDManagement(){this.isManagedByCRDs=this.repo.isManagedByCRDs()}submit(e,t,n){n.preventDefault(),void 0!==e.change.Action&&void 0===e.data.Action?this.modal.open():t()}createServices(e,t){let n=t.data.uniqBy("Name").toArray().filter((e=>!["connect-proxy","mesh-gateway","terminating-gateway"].includes(e.Kind))).sort(((e,t)=>e.Name.localeCompare(t.Name))) -n=[{Name:"*"}].concat(n) -let l=n.findBy("Name",e.SourceName) -l||(l={Name:e.SourceName},n=[l].concat(n)) -let r=n.findBy("Name",e.DestinationName) -r||(r={Name:e.DestinationName},n=[r].concat(n)),this.services=n,this.SourceName=l,this.DestinationName=r}createNspaces(e,t){let n=t.data.toArray().sort(((e,t)=>e.Name.localeCompare(t.Name))) -n=[{Name:"*"}].concat(n) -let l=n.findBy("Name",e.SourceNS) -l||(l={Name:e.SourceNS},n=[l].concat(n)) -let r=n.findBy("Name",e.DestinationNS) -r||(r={Name:e.DestinationNS},n=[r].concat(n)),this.nspaces=n,this.SourceNS=l,this.DestinationNS=r}createPartitions(e,t){let n=t.data.toArray().sort(((e,t)=>e.Name.localeCompare(t.Name))),l=n.findBy("Name",e.SourcePartition) -l||(l={Name:e.SourcePartition},n=[l].concat(n)) -let r=n.findBy("Name",e.DestinationPartition) -r||(r={Name:e.DestinationPartition},n=[r].concat(n)),this.partitions=n,this.SourcePartition=l,this.DestinationPartition=r}change(e,t,n){const l=e.target -let r,i -switch(l.name){case"SourceName":case"DestinationName":case"SourceNS":case"DestinationNS":case"SourcePartition":case"DestinationPartition":switch(r=i=l.value,"string"!=typeof r&&(r=l.value.Name),l.value=r,l.name){case"SourceName":case"DestinationName":0===this.services.filterBy("Name",r).length&&(i={Name:r},this.services=[i].concat(this.services.toArray())) -break -case"SourceNS":case"DestinationNS":0===this.nspaces.filterBy("Name",r).length&&(i={Name:r},this.nspaces=[i].concat(this.nspaces.toArray())) -break -case"SourcePartition":case"DestinationPartition":0===this.partitions.filterBy("Name",r).length&&(i={Name:r},this.partitions=[i].concat(this.partitions.toArray()))}this[l.name]=i}t.handleEvent(e)}},s=P(u.prototype,"services",[o.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),c=P(u.prototype,"SourceName",[o.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),d=P(u.prototype,"DestinationName",[o.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p=P(u.prototype,"nspaces",[o.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f=P(u.prototype,"SourceNS",[o.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m=P(u.prototype,"DestinationNS",[o.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=P(u.prototype,"partitions",[o.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=P(u.prototype,"SourcePartition",[o.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),y=P(u.prototype,"DestinationPartition",[o.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),g=P(u.prototype,"isManagedByCRDs",[o.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),v=P(u.prototype,"repo",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),P(u.prototype,"ondelete",[i.action],Object.getOwnPropertyDescriptor(u.prototype,"ondelete"),u.prototype),P(u.prototype,"oncancel",[i.action],Object.getOwnPropertyDescriptor(u.prototype,"oncancel"),u.prototype),P(u.prototype,"onsubmit",[i.action],Object.getOwnPropertyDescriptor(u.prototype,"onsubmit"),u.prototype),P(u.prototype,"updateCRDManagement",[i.action],Object.getOwnPropertyDescriptor(u.prototype,"updateCRDManagement"),u.prototype),P(u.prototype,"submit",[i.action],Object.getOwnPropertyDescriptor(u.prototype,"submit"),u.prototype),P(u.prototype,"createServices",[i.action],Object.getOwnPropertyDescriptor(u.prototype,"createServices"),u.prototype),P(u.prototype,"createNspaces",[i.action],Object.getOwnPropertyDescriptor(u.prototype,"createNspaces"),u.prototype),P(u.prototype,"createPartitions",[i.action],Object.getOwnPropertyDescriptor(u.prototype,"createPartitions"),u.prototype),P(u.prototype,"change",[i.action],Object.getOwnPropertyDescriptor(u.prototype,"change"),u.prototype),u) -e.default=w,(0,t.setComponentTemplate)(x,w)})),define("consul-ui/components/consul/intention/list/check/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"R9NJf0hk",block:'[[[44,[[28,[37,1],[[28,[37,2],[[28,[37,2],["allow","Allowed"],null],[28,[37,2],["deny","Denied"],null],[28,[37,2],["","Layer 7 Rules"],null]],null]],null]],[[[11,0],[16,0,[28,[37,3],["consul-intention-list-check ","notice ",[28,[37,4],[[30,2,["Action"]],"permissions"],null]],null]],[17,3],[12],[1,"\\n "],[10,"h3"],[12],[1,"\\n "],[1,[28,[35,5],[[30,1],[28,[37,4],[[30,2,["Action"]],""],null]],null]],[1,"\\n "],[13],[1,"\\n "],[10,2],[12],[1,"\\n"],[41,[28,[37,7],[[30,2,["Action"]],"allow"],null],[[[1," Yes, "],[1,[33,8,["SourceName"]]],[1," is allowed to connect to "],[1,[30,2,["DestinationName"]]],[1," due to the highest precedence intention below:\\n"]],[]],[[[41,[28,[37,7],[[30,2,["Action"]],"deny"],null],[[[1," No, "],[1,[30,2,["SourceName"]]],[1," is not allowed to connect to "],[1,[30,2,["DestinationName"]]],[1," due to the highest precedence intention below:\\n"]],[]],[[[1," "],[1,[30,2,["SourceName"]]],[1," may or may not be allowed to connect with "],[1,[30,2,["DestinationName"]]],[1," through its Layer 7 rules.\\n "]],[]]]],[]]],[1," "],[13],[1,"\\n"],[13],[1,"\\n"]],[1]]]],["titles","@item","&attrs"],false,["let","from-entries","array","concat","or","get","if","eq","item"]]',moduleName:"consul-ui/components/consul/intention/list/check/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/intention/list/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@ember/service","@ember/object","@glimmer/tracking"],(function(e,t,n,l,r,i,o){var a,u,s,c -function d(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function p(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const f=(0,n.createTemplateFactory)({id:"t3Jtqz1v",block:'[[[11,0],[24,0,"consul-intention-list"],[17,1],[4,[38,0],[[30,0,["updateCRDManagement"]],[30,2]],null],[12],[1,"\\n"],[18,4,[[28,[37,2],null,[["Table","CheckNotice","CustomResourceNotice"],[[50,"consul/intention/list/table",0,null,[["delete","items"],[[30,3],[30,0,["items"]]]]],[52,[30,0,["checkedItem"]],[50,"consul/intention/list/check",0,null,[["item"],[[30,0,["checkedItem"]]]]],""],[52,[30,0,["isManagedByCRDs"]],[50,"consul/intention/notice/custom-resource",0,null,null],""]]]]]],[1,"\\n"],[13]],["&attrs","@items","@delete","&default"],false,["did-update","yield","hash","component","if"]]',moduleName:"consul-ui/components/consul/intention/list/index.hbs",isStrictMode:!1}) -let m=(a=(0,r.inject)("repository/intention"),u=class extends l.default{constructor(e,t){super(...arguments),d(this,"repo",s,this),d(this,"isManagedByCRDs",c,this),this.updateCRDManagement(t.items)}get items(){return this.args.items||[]}get checkedItem(){return 1===this.items.length&&this.args.check&&this.items[0].SourceName===this.args.check?this.items[0]:null}updateCRDManagement(){this.isManagedByCRDs=this.repo.isManagedByCRDs()}},s=p(u.prototype,"repo",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),c=p(u.prototype,"isManagedByCRDs",[o.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p(u.prototype,"updateCRDManagement",[i.action],Object.getOwnPropertyDescriptor(u.prototype,"updateCRDManagement"),u.prototype),u) -e.default=m,(0,t.setComponentTemplate)(f,m)})),define("consul-ui/components/consul/intention/list/table/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"5xWkkvyi",block:'[[[8,[39,0],[[24,0,"consul-intention-list-table"],[17,1]],[["@items","@rowHeight"],[[30,2],59]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"th"],[14,0,"source"],[12],[1,"Source"],[13],[1,"\\n "],[10,"th"],[14,0,"intent"],[12],[1," "],[13],[1,"\\n "],[10,"th"],[14,0,"destination"],[12],[1,"Destination"],[13],[1,"\\n "],[10,"th"],[14,0,"permissions"],[12],[1,"\\n Permissions\\n "],[10,1],[12],[1,"\\n "],[8,[39,2],null,null,[["default"],[[[[1,"Permissions intercept an Intention\'s traffic using Layer 7 criteria, such as path\\n prefixes and http headers."]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[10,"th"],[14,0,"meta"],[12],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["row"]],[["default"],[[[[1,"\\n "],[10,"td"],[14,0,"source"],[12],[1,"\\n "],[10,3],[15,6,[28,[37,3],[[28,[37,4],[[30,5],"dc.intentions.edit"],null],[30,3,["ID"]]],null]],[12],[1,"\\n"],[41,[28,[37,6],[[30,3,["SourceName"]],"*"],null],[[[1," All Services (*)\\n"]],[]],[[[1," "],[1,[30,3,["SourceName"]]],[1,"\\n"]],[]]],[1," "],[10,"em"],[14,0,"consul-intention-list-table__meta-info"],[12],[1,"\\n "],[8,[39,7],null,[["@item","@nspace","@partition"],[[28,[37,8],null,[["Namespace","Partition","PeerName"],[[30,3,["SourceNS"]],[30,3,["SourcePartition"]],[30,3,["SourcePeer"]]]]],"-","-"]],null],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[10,"td"],[15,0,[29,["intent intent-",[28,[37,9],[[30,3,["Action"]]],null]]]],[12],[1,"\\n "],[10,"strong"],[12],[1,[28,[35,10],[[28,[37,4],[[30,3,["Action"]],"App aware"],null]],null]],[13],[1,"\\n "],[13],[1,"\\n "],[10,"td"],[14,0,"destination"],[12],[1,"\\n "],[10,1],[12],[1,"\\n"],[41,[28,[37,6],[[30,3,["DestinationName"]],"*"],null],[[[1," All Services (*)\\n"]],[]],[[[1," "],[1,[30,3,["DestinationName"]]],[1,"\\n"]],[]]],[41,[28,[37,4],[[28,[37,11],["use nspaces"],null],[28,[37,11],["use partitions"],null]],null],[[[1," "],[10,"em"],[12],[1,"\\n "],[10,1],[15,0,[28,[37,12],["partition-",[28,[37,4],[[30,3,["DestinationPartition"]],"default"],null]],null]],[12],[1,[28,[35,4],[[30,3,["DestinationPartition"]],"default"],null]],[13],[1,"\\n /\\n "],[10,1],[15,0,[28,[37,12],["nspace-",[28,[37,4],[[30,3,["DestinationNS"]],"default"],null]],null]],[12],[1,[28,[35,4],[[30,3,["DestinationNS"]],"default"],null]],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n "],[10,"td"],[14,0,"permissions"],[12],[1,"\\n"],[41,[28,[37,13],[[30,3,["Permissions","length"]],0],null],[[[1," "],[10,1],[12],[1,[28,[35,14],[[30,3,["Permissions","length"]],"Permission"],null]],[13],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n "],[10,"td"],[14,0,"meta"],[12],[1,"\\n"],[41,[30,3,["IsManagedByCRD"]],[[[1," "],[8,[39,15],null,[["@item","@label"],[[30,3],"Managed by CRD"]],null],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[8,[39,16],null,[["@expanded","@onchange","@keyboardAccess"],[[52,[28,[37,6],[[30,8],[30,6]],null],true,false],[28,[37,17],[[30,0],[30,7],[30,6]],null],false]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["trigger"]],[["default"],[[[[1,"\\n More\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["menu"]],[["default"],[[[[1,"\\n"],[41,[28,[37,11],["write intention"],[["item"],[[30,3]]]],[[[1," "],[10,"li"],[14,"role","none"],[12],[1,"\\n "],[10,3],[14,"role","menuitem"],[14,"tabindex","-1"],[15,6,[28,[37,3],[[28,[37,4],[[33,18],"dc.intentions.edit"],null],[30,3,["ID"]]],null]],[12],[1,"Edit"],[13],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[14,"role","none"],[14,0,"dangerous"],[12],[1,"\\n "],[10,"label"],[15,"for",[30,9]],[14,"role","menuitem"],[14,"tabindex","-1"],[15,"onkeypress",[30,11]],[12],[1,"Delete"],[13],[1,"\\n "],[10,0],[14,"role","menu"],[12],[1,"\\n "],[8,[39,19],[[24,0,"warning"]],null,[["header","body","actions"],[[[[1,"\\n Confirm Delete\\n "]],[]],[[[1,"\\n "],[10,2],[12],[1,"\\n Are you sure you want to delete this intention?\\n "],[13],[1,"\\n "]],[]],[[[1,"\\n "],[8,[30,13,["Action"]],[[24,0,"dangerous"]],null,[["default"],[[[[1,"\\n "],[8,[39,17],[[24,0,"type-delete"],[24,"tabindex","-1"],[4,[38,20],["click",[28,[37,21],[[28,[37,17],[[30,0],[30,12]],null],[28,[37,17],[[30,0],[30,14],[30,3]],null]],null]],null]],null,[["default"],[[[[1,"\\n Delete\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,13,["Action"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,17],null,[["@for"],[[30,9]]],[["default"],[[[[1,"\\n Cancel\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[13]]]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],[[[41,[28,[37,11],["view CRD intention"],[["item"],[[30,3]]]],[[[1," "],[10,"li"],[14,"role","none"],[12],[1,"\\n "],[10,0],[14,"role","menu"],[12],[1,"\\n "],[8,[39,19],null,null,[["header","body","actions"],[[[[1,"\\n "],[10,1],[14,0,"flex flex-nowrap items-center"],[12],[1,"\\n "],[8,[39,22],[[24,0,"mr-1.5"]],[["@name"],["kubernetes-color"]],null],[1,"\\n Managed by CRD\\n "],[13],[1,"\\n "]],[]],[[[1,"\\n "],[10,2],[12],[1,"\\n This intention is being managed through an Intention Custom Resource in your\\n Kubernetes cluster. It is view only in the UI.\\n "],[13],[1,"\\n "]],[]],[[[1,"\\n "],[8,[30,15,["Action"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,17],[[24,"tabindex","-1"],[24,0,"action"]],[["@href"],[[28,[37,3],[[28,[37,4],[[30,5],"dc.intentions.edit"],null],[30,3,["ID"]]],null]]],[["default"],[[[[1,"\\n View\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,15,["Action"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,17],null,[["@onclick"],[[28,[37,17],[[30,0],[30,12]],null]]],[["default"],[[[[1,"\\n Cancel\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[15]]]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],[[[1," "],[10,"li"],[14,"role","none"],[12],[1,"\\n "],[10,3],[14,"role","menuitem"],[14,"tabindex","-1"],[15,6,[28,[37,3],[[28,[37,4],[[33,18],"dc.intentions.edit"],null],[30,3,["ID"]]],null]],[12],[1,"\\n View\\n "],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]],[]]],[1," "]],[9,10,11,12]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6,7,8]]]]],[1,"\\n"]],[3,4]]]]],[1,"\\n"]],["&attrs","@items","item","index","@routeName","index","change","checked","confirm","send","keypressClick","change","Actions","@delete","Actions"],false,["tabular-collection","block-slot","tooltip","href-to","or","if","eq","consul/bucket/list","hash","slugify","capitalize","can","concat","gt","pluralize","consul/external-source","popover-menu","action","routeName","informed-action","on","queue","flight-icon"]]',moduleName:"consul-ui/components/consul/intention/list/table/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/intention/notice/custom-resource/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"6ZXsu8uh",block:'[[[8,[39,0],[[24,0,"mb-2 mt-2 consul-intention-notice-custom-resource"]],[["@type","@color"],["inline",[28,[37,1],[[30,1],"neutral"],null]]],[["default"],[[[[1,"\\n "],[8,[30,2,["Title"]],null,null,[["default"],[[[[1,"Intention Custom Resource"]],[]]]]],[1,"\\n "],[8,[30,2,["Description"]],null,null,[["default"],[[[[1,"Some of your intentions are being managed through an Intention Custom Resource in your Kubernetes cluster. Those managed intentions will be view only in the UI. Any intentions created in the UI will work but will not be synced to the Custom Resource Definition (CRD) datastore."]],[]]]]],[1,"\\n "],[8,[30,2,["Link::Standalone"]],null,[["@href","@text","@icon","@iconPosition","@size"],[[29,[[28,[37,2],["CONSUL_DOCS_URL"],null],"/k8s/crds"]],"Learn more about CRDs","docs-link","trailing","small"]],null],[1,"\\n"]],[2]]]]]],["@type","A"],false,["hds/alert","or","env"]]',moduleName:"consul-ui/components/consul/intention/notice/custom-resource/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/intention/notice/permissions/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"DK7vccyg",block:'[[[8,[39,0],[[24,0,"mb-3 mt-2"]],[["@type"],["inline"]],[["default"],[[[[1,"\\n "],[8,[30,1,["Description"]],null,null,[["default"],[[[[1,[28,[35,1],["components.consul.intention.notice.permissions.body"],null]]],[]]]]],[1,"\\n "],[8,[30,1,["Link::Standalone"]],null,[["@text","@href","@icon","@iconPosition","@size"],[[28,[37,1],["components.consul.intention.notice.permissions.footer"],null],[29,[[28,[37,2],["CONSUL_DOCS_URL"],null],"/connect/intentions"]],"docs-link","trailing","small"]],null],[1,"\\n"]],[1]]]]]],["A"],false,["hds/alert","t","env"]]',moduleName:"consul-ui/components/consul/intention/notice/permissions/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/intention/notifications/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"qH69B/hI",block:'[[[41,[28,[37,1],[[30,1],"create"],null],[[[41,[28,[37,1],[[30,2],"success"],null],[[[1," Your intention has been added.\\n"]],[]],[[[1," There was an error adding your intention.\\n"]],[]]]],[]],[[[41,[28,[37,1],[[30,1],"update"],null],[[[41,[28,[37,1],[[30,2],"success"],null],[[[1," Your intention has been saved.\\n"]],[]],[[[1," There was an error saving your intention.\\n"]],[]]]],[]],[[[41,[28,[37,1],[[30,1],"delete"],null],[[[41,[28,[37,1],[[30,2],"success"],null],[[[1," Your intention was deleted.\\n"]],[]],[[[1," There was an error deleting your intention.\\n"]],[]]]],[]],null]],[]]]],[]]],[44,[[30,3,["errors","firstObject"]]],[[[41,[30,4,["detail"]],[[[1," "],[10,"br"],[12],[13],[1,[28,[35,3],["(",[52,[30,4,["status"]],[28,[37,3],[[30,4,["status"]],": "],null]],[30,4,["detail"]],")"],null]],[1,"\\n"]],[]],null]],[4]]]],["@type","@status","@error","error"],false,["if","eq","let","concat"]]',moduleName:"consul-ui/components/consul/intention/notifications/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/intention/permission/form/index",["exports","@ember/component","@ember/template-factory","@ember/object","@ember/object/computed","@ember/service"],(function(e,t,n,l,r,i){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const o=(0,n.createTemplateFactory)({id:"9N7+TvqA",block:'[[[11,0],[17,1],[24,0,"consul-intention-permission-form"],[12],[1,"\\n"],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n\\n "],[18,11,[[28,[37,3],null,[["submit","reset","isDirty","changeset"],[[28,[37,4],[[30,0],"submit",[33,5]],null],[28,[37,4],[[30,0],"reset",[33,5]],null],[28,[37,6],[[33,5,["isValid"]]],null],[33,5]]]]]],[1,"\\n\\n "],[10,"fieldset"],[12],[1,"\\n "],[10,0],[14,"data-property","action"],[12],[1,"\\n "],[10,1],[14,0,"label"],[12],[1,"\\n Should this permission allow the source connect to the destination?\\n "],[13],[1,"\\n "],[10,0],[14,"role","radiogroup"],[15,0,[52,[33,5,["error","Action"]]," has-error"]],[12],[1,"\\n"],[42,[28,[37,9],[[28,[37,9],[[33,10]],null]],null],null,[[[1," "],[10,"label"],[12],[1,"\\n "],[10,1],[12],[1,[28,[35,11],[[30,3]],null]],[13],[1,"\\n "],[10,"input"],[14,3,"Action"],[15,2,[30,3]],[15,"checked",[52,[28,[37,12],[[33,5,["Action"]],[30,3]],null],"checked"]],[15,"onchange",[28,[37,4],[[30,0],[28,[37,13],[[33,5],"Action"],null]],[["value"],["target.value"]]]],[14,4,"radio"],[12],[13],[1,"\\n "],[13],[1,"\\n"]],[3]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n\\n "],[10,"fieldset"],[12],[1,"\\n "],[10,"header"],[12],[1,"\\n "],[10,"h2"],[12],[1,"Path"],[13],[1,"\\n "],[13],[1,"\\n "],[10,0],[12],[1,"\\n "],[8,[30,2,["Element"]],null,[["@name","@type"],["PathType","select"]],[["default"],[[[[1,"\\n "],[8,[30,4,["Label"]],null,null,[["default"],[[[[1,"\\n Path type\\n "]],[]]]]],[1,"\\n "],[8,[39,14],null,[["@options","@selected","@onChange"],[[99,15,["@options"]],[99,16,["@selected"]],[28,[37,4],[[30,0],"change","HTTP.PathType",[33,5]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,17],[[33,18],[30,5]],null]],[1,"\\n "]],[5]]]]],[1,"\\n "]],[4]]]]],[1,"\\n\\n"],[41,[33,19],[[[1," "],[8,[30,2,["Element"]],null,[["@name","@error"],["Path",[28,[37,20],[[33,5],"error.HTTP.Path"],null]]],[["default"],[[[[1,"\\n "],[8,[30,6,["Label"]],null,null,[["default"],[[[[1,"\\n "],[1,[28,[35,17],[[33,18],[33,16]],null]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,6,["Text"]],[[16,"oninput",[28,[37,4],[[30,0],"change","HTTP.Path",[33,5]],null]]],[["@value"],[[28,[37,20],[[33,5],"HTTP.Path"],null]]],null],[1,"\\n "],[8,[39,21],null,[["@state","@matches"],[[30,6,["state"]],"error"]],[["default"],[[[[1,"\\n "],[8,[30,6,["Error"]],null,null,[["default"],[[[[1,"\\n"],[41,[28,[37,12],[[28,[37,20],[[33,5],"HTTP.Path"],null],"Regex"],null],[[[1," Path Regex should not be blank\\n"]],[]],[[[1," Path should begin with a \'/\'\\n"]],[]]],[1," "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n"]],[]],null],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n\\n "],[10,"fieldset"],[12],[1,"\\n "],[10,"h2"],[12],[1,"Methods"],[13],[1,"\\n "],[10,0],[14,0,"type-toggle"],[12],[1,"\\n "],[10,1],[12],[1,"All methods are applied by default unless specified"],[13],[1,"\\n "],[8,[30,2,["Element"]],null,[["@name"],["allMethods"]],[["default"],[[[[1,"\\n "],[8,[30,7,["Checkbox"]],[[16,"checked",[52,[33,22],"checked"]],[16,"onchange",[28,[37,4],[[30,0],"change","allMethods",[33,5]],null]]],null,null],[1,"\\n "],[8,[30,7,["Label"]],null,null,[["default"],[[[[1,"\\n All Methods\\n "]],[]]]]],[1,"\\n "]],[7]]]]],[1,"\\n "],[13],[1,"\\n\\n"],[41,[33,23],[[[1," "],[10,0],[14,0,"checkbox-group"],[14,"role","group"],[12],[1,"\\n"],[42,[28,[37,9],[[28,[37,9],[[33,24]],null]],null],null,[[[1," "],[10,"label"],[14,0,"type-checkbox"],[12],[1,"\\n "],[10,"input"],[14,3,"method"],[15,2,[30,8]],[15,"checked",[52,[28,[37,25],[[30,8],[33,5,["HTTP","Methods"]]],null],"checked"]],[15,"onchange",[28,[37,4],[[30,0],"change","method",[33,5]],null]],[14,4,"checkbox"],[12],[13],[1,"\\n "],[10,1],[12],[1,[30,8]],[13],[1,"\\n "],[13],[1,"\\n"]],[8]],null],[1," "],[13],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n\\n "],[10,"fieldset"],[12],[1,"\\n "],[10,"h2"],[12],[1,"Headers"],[13],[1,"\\n\\n "],[8,[39,26],null,[["@items","@ondelete"],[[28,[37,20],[[33,5],"HTTP.Header"],null],[28,[37,4],[[30,0],"delete","HTTP.Header",[33,5]],null]]],[["default"],[[[[1,"\\n\\n "]],[9]]]]],[1,"\\n\\n "],[8,[39,27],null,[["@onsubmit"],[[28,[37,4],[[30,0],"add","HTTP.Header",[33,5]],null]]],[["default"],[[[[1,"\\n "],[8,[39,28],null,[["@target","@name","@value"],[[30,0],"headerForm",[30,10]]],null],[1,"\\n "]],[10]]]]],[1,"\\n\\n "],[8,[39,29],null,null,[["default"],[[[[1,"\\n "],[8,[39,30],[[16,"disabled",[52,[28,[37,31],[[30,0,["headerForm","isDirty"]]],null],"disabled"]],[16,"onclick",[28,[37,4],[[30,0],[30,0,["headerForm","submit"]]],null]]],[["@text","@color"],[[29,["Add",[52,[28,[37,32],[[28,[37,17],[[28,[37,20],[[33,5],"HTTP.Header"],null],"length"],null],0],null]," another",""]," header"]],"primary"]],null],[1,"\\n "],[8,[39,30],[[16,"onclick",[28,[37,4],[[30,0],[30,0,["headerForm","reset"]]],null]]],[["@text","@color"],["Cancel","secondary"]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "]],[2]]]]],[1,"\\n"],[13]],["&attrs","group","intent","el","Type","el","el","method","headerList","headerForm","&default"],false,["form-group","name","yield","hash","action","changeset","and","if","each","-track-array","intents","capitalize","eq","changeset-set","power-select","pathTypes","pathType","get","pathLabels","shouldShowPathField","changeset-get","state","allMethods","shouldShowMethods","methods","includes","consul/intention/permission/header/list","consul/intention/permission/header/form","ref","hds/button-set","hds/button","not","gt"]]',moduleName:"consul-ui/components/consul/intention/permission/form/index.hbs",isStrictMode:!1}),a="intention-permission" -var u=(0,t.setComponentTemplate)(o,t.default.extend({tagName:"",name:a,schema:(0,i.inject)("schema"),change:(0,i.inject)("change"),repo:(0,i.inject)(`repository/${a}`),onsubmit:function(){},onreset:function(){},intents:(0,r.alias)(`schema.${a}.Action.allowedValues`),methods:(0,r.alias)(`schema.${a}-http.Methods.allowedValues`),pathProps:(0,r.alias)(`schema.${a}-http.PathType.allowedValues`),pathTypes:(0,l.computed)("pathProps",(function(){return["NoPath"].concat(this.pathProps)})),pathLabels:(0,l.computed)((function(){return{NoPath:"No Path",PathExact:"Exact",PathPrefix:"Prefixed by",PathRegex:"Regular Expression"}})),pathInputLabels:(0,l.computed)((function(){return{PathExact:"Exact Path",PathPrefix:"Path Prefix",PathRegex:"Path Regular Expression"}})),changeset:(0,l.computed)("item",(function(){const e=this.change.changesetFor(a,this.item||this.repo.create()) -return e.isNew&&e.validate(),e})),pathType:(0,l.computed)("changeset._changes.HTTP.PathType","pathTypes.firstObject",(function(){return this.changeset.HTTP.PathType||this.pathTypes.firstObject})),noPathType:(0,r.equal)("pathType","NoPath"),shouldShowPathField:(0,r.not)("noPathType"),allMethods:!1,shouldShowMethods:(0,r.not)("allMethods"),didReceiveAttrs:function(){(0,l.get)(this,"item.HTTP.Methods.length")||(0,l.set)(this,"allMethods",!0)},actions:{change:function(e,t,n){const r=void 0!==(0,l.get)(n,"target.value")?n.target.value:n -switch(e){case"allMethods":(0,l.set)(this,e,n.target.checked) -break -case"method":n.target.checked?this.actions.add.apply(this,["HTTP.Methods",t,r]):this.actions.delete.apply(this,["HTTP.Methods",t,r]) -break -default:t.set(e,r)}t.validate()},add:function(e,t,n){t.pushObject(e,n),t.validate()},delete:function(e,t,n){t.removeObject(e,n),t.validate()},submit:function(e,t){void 0!==e.changes.find((e=>{let{key:t,value:n}=e -return"HTTP.PathType"===t||"HTTP.Path"===t}))&&(this.pathProps.forEach((t=>{e.set(`HTTP.${t}`,void 0)})),"NoPath"!==e.HTTP.PathType&&e.set(`HTTP.${e.HTTP.PathType}`,e.HTTP.Path)),this.allMethods&&e.set("HTTP.Methods",null),delete e._changes.HTTP.PathType,delete e._changes.HTTP.Path,this.repo.persist(e),this.onsubmit(e.data)},reset:function(e,t){e.rollback(),this.onreset(e.data)}}})) -e.default=u})),define("consul-ui/components/consul/intention/permission/header/form/index",["exports","@ember/component","@ember/template-factory","@ember/object","@ember/object/computed","@ember/service"],(function(e,t,n,l,r,i){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const o=(0,n.createTemplateFactory)({id:"M/AqDx5C",block:'[[[11,0],[17,1],[24,0,"consul-intention-permission-header-form"],[12],[1,"\\n "],[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n\\n "],[18,7,[[28,[37,3],null,[["submit","reset","isDirty","changeset"],[[28,[37,4],[[30,0],"submit",[33,5]],null],[28,[37,4],[[30,0],"reset",[33,5]],null],[28,[37,6],[[33,5,["isValid"]],[33,5,["isDirty"]]],null],[33,5]]]]]],[1,"\\n\\n "],[10,"fieldset"],[12],[1,"\\n "],[10,0],[12],[1,"\\n "],[8,[30,2,["Element"]],null,[["@name","@type"],["HeaderType","select"]],[["default"],[[[[1,"\\n "],[8,[30,3,["Label"]],null,null,[["default"],[[[[1,"Header type"]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@options","@selected","@onChange"],[[99,8,["@options"]],[99,9,["@selected"]],[28,[37,4],[[30,0],"change","HeaderType",[33,5]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,10],[[33,11],[30,4]],null]],[1,"\\n "]],[4]]]]],[1,"\\n "]],[3]]]]],[1,"\\n\\n\\n "],[8,[30,2,["Element"]],null,[["@name","@error"],["Name",[28,[37,12],[[33,5],"error.Name"],null]]],[["default"],[[[[1,"\\n "],[8,[30,5,["Label"]],null,null,[["default"],[[[[1,"Header name"]],[]]]]],[1,"\\n "],[8,[30,5,["Text"]],[[16,"oninput",[28,[37,4],[[30,0],"change","Name",[33,5]],null]]],[["@value"],[[28,[37,12],[[33,5],"Name"],null]]],null],[1,"\\n "],[8,[39,13],null,[["@state","@matches"],[[30,5,["state"]],"error"]],[["default"],[[[[1,"\\n "],[8,[30,5,["Error"]],null,null,[["default"],[[[[1,"\\n "],[1,[28,[35,12],[[33,5],"error.Name.validation"],null]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[5]]]]],[1,"\\n\\n"],[41,[33,15],[[[1," "],[8,[30,2,["Element"]],null,[["@name","@error"],["Value",[28,[37,12],[[33,5],"error.Value"],null]]],[["default"],[[[[1,"\\n "],[8,[30,6,["Label"]],null,null,[["default"],[[[[1,"Header "],[1,[28,[35,16],[[28,[37,10],[[33,11],[33,9]],null]],null]]],[]]]]],[1,"\\n "],[8,[30,6,["Text"]],[[16,"oninput",[28,[37,4],[[30,0],"change","Value",[33,5]],null]]],[["@value"],[[28,[37,12],[[33,5],"Value"],null]]],null],[1,"\\n "],[8,[39,13],null,[["@state","@matches"],[[30,6,["state"]],"error"]],[["default"],[[[[1,"\\n "],[8,[30,6,["Error"]],null,null,[["default"],[[[[1,"\\n "],[1,[28,[35,12],[[33,5],"error.Value.validation"],null]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n"]],[]],null],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "]],[2]]]]],[1,"\\n"],[13]],["&attrs","group","el","Type","el","el","&default"],false,["form-group","name","yield","hash","action","changeset","and","power-select","headerTypes","headerType","get","headerLabels","changeset-get","state","if","shouldShowValueField","lowercase"]]',moduleName:"consul-ui/components/consul/intention/permission/header/form/index.hbs",isStrictMode:!1}),a="intention-permission-http-header" -var u=(0,t.setComponentTemplate)(o,t.default.extend({tagName:"",name:a,schema:(0,i.inject)("schema"),change:(0,i.inject)("change"),repo:(0,i.inject)(`repository/${a}`),onsubmit:function(){},onreset:function(){},changeset:(0,l.computed)("item",(function(){return this.change.changesetFor(a,this.item||this.repo.create({HeaderType:this.headerTypes.firstObject}))})),headerTypes:(0,r.alias)(`schema.${a}.HeaderType.allowedValues`),headerLabels:(0,l.computed)((function(){return{Exact:"Exactly Matching",Prefix:"Prefixed by",Suffix:"Suffixed by",Regex:"Regular Expression",Present:"Is present"}})),headerType:(0,l.computed)("changeset.HeaderType","headerTypes.firstObject",(function(){return this.changeset.HeaderType||this.headerTypes.firstObject})),headerTypeEqualsPresent:(0,r.equal)("headerType","Present"),shouldShowValueField:(0,r.not)("headerTypeEqualsPresent"),actions:{change:function(e,t,n){const r=void 0!==(0,l.get)(n,"target.value")?n.target.value:n -t.set(e,r),t.validate()},submit:function(e){this.headerTypes.forEach((t=>{e.set(t,void 0)})) -const t="Present"===e.HeaderType||e.Value -e.set(e.HeaderType,t),delete e._changes.HeaderType,delete e._changes.Value,this.repo.persist(e),this.onsubmit(e.data),(0,l.set)(this,"item",this.repo.create({HeaderType:this.headerType}))},reset:function(e,t){e.rollback()}}})) -e.default=u})),define("consul-ui/components/consul/intention/permission/header/list/index",["exports","@ember/component","@ember/template-factory"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const l=(0,n.createTemplateFactory)({id:"3ZH2LwLz",block:'[[[41,[28,[37,1],[[33,2,["length"]],0],null],[[[8,[39,3],[[24,0,"consul-intention-permission-header-list"]],[["@items","@scroll","@cellHeight"],[[99,2,["@items"]],"native",42]],[["default"],[[[[1,"\\n "],[8,[39,4],null,[["@name"],["details"]],[["default"],[[[[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n "],[8,[39,5],null,null,[["default"],[[[[1,"\\n Header\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[30,1,["Name"]]],[1," "],[1,[28,[35,6],[[30,1]],null]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,4],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[8,[30,2],null,null,[["default"],[[[[1,"\\n "],[8,[30,3],[[24,0,"dangerous"]],[["@onclick"],[[28,[37,7],[[30,0],[33,8],[30,1]],null]]],[["default"],[[[[1,"\\n "],[8,[39,4],null,[["@name"],["label"]],[["default"],[[[[1,"\\n Delete\\n "]],[]]]]],[1,"\\n "],[8,[39,4],null,[["@name"],["confirmation"]],[["default"],[[[[1,"\\n "],[8,[30,4],[[24,0,"warning"]],null,[["default"],[[[[1,"\\n "],[8,[39,4],null,[["@name"],["header"]],[["default"],[[[[1,"\\n Confirm delete\\n "]],[]]]]],[1,"\\n "],[8,[39,4],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n Are you sure you want to delete this header?\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,4],null,[["@name"],["confirm"]],[["default"],[[[[1,"\\n "],[8,[30,5],null,null,[["default"],[[[[1,"Delete"]],[]]]]],[1,"\\n "]],[5]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[4]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[3]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],[]],null]],["item","Actions","Action","Confirmation","Confirm"],false,["if","gt","items","list-collection","block-slot","tooltip","route-match","action","ondelete"]]',moduleName:"consul-ui/components/consul/intention/permission/header/list/index.hbs",isStrictMode:!1}) -var r=(0,t.setComponentTemplate)(l,t.default.extend({tagName:""})) -e.default=r})),define("consul-ui/components/consul/intention/permission/list/index",["exports","@ember/component","@ember/template-factory"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const l=(0,n.createTemplateFactory)({id:"nRmkYMml",block:'[[[41,[28,[37,1],[[33,2,["length"]],0],null],[[[8,[39,3],[[16,0,[29,["consul-intention-permission-list",[52,[28,[37,4],[[33,5]],null]," readonly"]]]]],[["@scroll","@items","@partial"],["native",[99,2,["@items"]],5]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["details"]],[["default"],[[[[1,"\\n "],[10,0],[15,"onclick",[28,[37,7],[[30,0],[28,[37,8],[[33,5]],null],[30,1]],null]],[12],[1,"\\n "],[10,"strong"],[15,0,[28,[37,9],["intent-",[30,1,["Action"]]],null]],[12],[1,[28,[35,10],[[30,1,["Action"]]],null]],[13],[1,"\\n"],[41,[28,[37,1],[[30,1,["HTTP","Methods","length"]],0],null],[[[1," "],[10,"dl"],[14,0,"permission-methods"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n "],[8,[39,11],null,null,[["default"],[[[[1,"\\n Methods\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n"],[42,[28,[37,13],[[28,[37,13],[[30,1,["HTTP","Methods"]]],null]],null],null,[[[1," "],[1,[30,2]],[1,"\\n"]],[2]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[30,1,["HTTP","Path"]],[[[1," "],[10,"dl"],[14,0,"permission-path"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n "],[8,[39,11],null,null,[["default"],[[[[1,"\\n "],[1,[30,1,["HTTP","PathType"]]],[1,"\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[30,1,["HTTP","Path"]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[42,[28,[37,13],[[28,[37,13],[[30,1,["HTTP","Header"]]],null]],null],null,[[[1," "],[10,"dl"],[14,0,"permission-header"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n "],[8,[39,11],null,null,[["default"],[[[[1,"\\n Header\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[30,3,["Name"]]],[1," "],[1,[28,[35,14],[[30,3]],null]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[3]],null],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n"],[41,[33,5],[[[1," "],[8,[39,6],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[8,[30,4],null,null,[["default"],[[[[1,"\\n "],[8,[30,5],null,[["@onclick","@close"],[[28,[37,7],[[30,0],[28,[37,8],[[33,5]],null],[30,1]],null],true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["label"]],[["default"],[[[[1,"\\n Edit\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,5],[[24,0,"dangerous"]],[["@onclick"],[[28,[37,7],[[30,0],[33,15],[30,1]],null]]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["label"]],[["default"],[[[[1,"\\n Delete\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["confirmation"]],[["default"],[[[[1,"\\n "],[8,[30,6],[[24,0,"warning"]],null,[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["header"]],[["default"],[[[[1,"\\n Confirm delete\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n Are you sure you want to delete this permission?\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["confirm"]],[["default"],[[[[1,"\\n "],[8,[30,7],null,null,[["default"],[[[[1,"Delete"]],[]]]]],[1,"\\n "]],[7]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[5]]]]],[1,"\\n "]],[4]]]]],[1,"\\n"]],[]],null]],[1]]]]],[1,"\\n"]],[]],null]],["item","item","item","Actions","Action","Confirmation","Confirm"],false,["if","gt","items","list-collection","not","onclick","block-slot","action","optional","concat","capitalize","tooltip","each","-track-array","route-match","ondelete"]]',moduleName:"consul-ui/components/consul/intention/permission/list/index.hbs",isStrictMode:!1}) -var r=(0,t.setComponentTemplate)(l,t.default.extend({tagName:""})) -e.default=r})),define("consul-ui/components/consul/intention/search-bar/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"YTLr6u9H",block:'[[[8,[39,0],[[24,0,"consul-intention-search-bar"],[17,1]],[["@filter"],[[30,2]]],[["status","search","filter","sort"],[[[[1,"\\n\\n"],[44,[[28,[37,2],[[28,[37,3],["components.consul.intention.search-bar.",[30,3,["status","key"]]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","key"]]],null],[28,[37,3],["common.consul.",[30,3,["status","key"]]],null]],null]]]],[28,[37,2],[[28,[37,3],["components.consul.intention.search-bar.",[30,3,["status","value"]]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","value"]]],null],[28,[37,3],["common.consul.",[30,3,["status","value"]]],null]],null]]]]],[[[1," "],[8,[30,3,["RemoveFilter"]],[[16,"aria-label",[28,[37,2],["common.ui.remove"],[["item"],[[28,[37,3],[[30,4]," ",[30,5]],null]]]]]],null,[["default"],[[[[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,[30,4]],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,5]],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[4,5]]],[1,"\\n "]],[3]],[[[1,"\\n "],[8,[30,6,["Search"]],null,[["@onsearch","@value","@placeholder"],[[28,[37,5],[[30,0],[30,7]],null],[30,8],[28,[37,2],["common.search.search"],null]]],[["default"],[[[[1,"\\n"],[41,[30,2,["searchproperty"]],[[[1," "],[8,[30,6,["Select"]],[[24,0,"type-search-properties"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,2,["searchproperty","change"]]],null],true,true]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["common.search.searchproperty"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,9,["Optgroup"]],[30,9,["Option"]]],[[[42,[28,[37,9],[[28,[37,9],[[30,2,["searchproperty","default"]]],null]],null],null,[[[1," "],[8,[30,11],null,[["@value","@selected"],[[30,12],[28,[37,10],[[30,12],[30,2,["searchproperty","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["common.consul.",[28,[37,11],[[30,12]],null]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[12]],null]],[10,11]]],[1," "]],[]]]]],[1,"\\n "]],[9]]]]],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "]],[6]],[[[1,"\\n "],[8,[30,13,["Select"]],[[24,0,"type-access"]],[["@position","@onchange","@multiple"],["left",[28,[37,5],[[30,0],[30,2,["access","change"]]],null],true]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["components.consul.intention.search-bar.access.name"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,14,["Optgroup"]],[30,14,["Option"]]],[[[42,[28,[37,9],[[28,[37,9],[[28,[37,4],["allow","deny",""],null]],null]],null],null,[[[1," "],[8,[30,16],[[16,0,[28,[37,3],["value-",[30,17]],null]]],[["@value","@selected"],[[28,[37,12],[[30,17],"app-aware"],null],[28,[37,10],[[28,[37,12],[[30,17],"app-aware"],null],[30,2,["access","value"]]],null]]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,[28,[35,2],[[28,[37,3],["components.consul.intention.search-bar.access.options.",[28,[37,12],[[30,17],"app-aware"],null]],null]],null]],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[17]],null]],[15,16]]],[1," "]],[]]]]],[1,"\\n "]],[14]]]]],[1,"\\n "]],[13]],[[[1,"\\n "],[8,[30,18,["Select"]],[[24,0,"type-sort"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,19,["change"]]],null],false,true]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n"],[44,[[28,[37,13],[[28,[37,4],[[28,[37,4],["Action:asc",[28,[37,2],["components.consul.intention.search-bar.sort.access.asc"],null]],null],[28,[37,4],["Action:desc",[28,[37,2],["components.consul.intention.search-bar.sort.access.desc"],null]],null],[28,[37,4],["SourceName:asc",[28,[37,2],["components.consul.intention.search-bar.sort.source-name.asc"],null]],null],[28,[37,4],["SourceName:desc",[28,[37,2],["components.consul.intention.search-bar.sort.source-name.desc"],null]],null],[28,[37,4],["DestinationName:asc",[28,[37,2],["components.consul.intention.search-bar.sort.destination-name.asc"],null]],null],[28,[37,4],["DestinationName:desc",[28,[37,2],["components.consul.intention.search-bar.sort.destination-name.desc"],null]],null],[28,[37,4],["Precedence:asc",[28,[37,2],["common.sort.numeric.asc"],null]],null],[28,[37,4],["Precedence:desc",[28,[37,2],["common.sort.numeric.desc"],null]],null]],null]],null]],[[[1," "],[1,[28,[35,14],[[30,21],[30,19,["value"]]],null]],[1,"\\n"]],[21]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,20,["Optgroup"]],[30,20,["Option"]]],[[[1," "],[8,[30,22],null,[["@label"],[[28,[37,2],["components.consul.intention.search-bar.sort.access.name"],null]]],[["default"],[[[[1,"\\n "],[8,[30,23],null,[["@value","@selected"],["Action:asc",[28,[37,15],["Action:asc",[30,19,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["components.consul.intention.search-bar.sort.access.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,23],null,[["@value","@selected"],["Action:desc",[28,[37,15],["Action:desc",[30,19,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["components.consul.intention.search-bar.sort.access.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,22],null,[["@label"],[[28,[37,2],["components.consul.intention.search-bar.sort.source-name.name"],null]]],[["default"],[[[[1,"\\n "],[8,[30,23],null,[["@value","@selected"],["SourceName:asc",[28,[37,15],["SourceName:asc",[30,19,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,23],null,[["@value","@selected"],["SourceName:desc",[28,[37,15],["SourceName:desc",[30,19,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,22],null,[["@label"],[[28,[37,2],["components.consul.intention.search-bar.sort.destination-name.name"],null]]],[["default"],[[[[1,"\\n "],[8,[30,23],null,[["@value","@selected"],["DestinationName:asc",[28,[37,15],["DestinationName:asc",[30,19,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,23],null,[["@value","@selected"],["DestinationName:desc",[28,[37,15],["DestinationName:desc",[30,19,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,22],null,[["@label"],[[28,[37,2],["components.consul.intention.search-bar.sort.precedence.name"],null]]],[["default"],[[[[1,"\\n "],[8,[30,23],null,[["@value","@selected"],["Precedence:asc",[28,[37,15],["Precedence:asc",[30,19,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.numeric.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,23],null,[["@value","@selected"],["Precedence:desc",[28,[37,15],["Precedence:desc",[30,19,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.numeric.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[22,23]]],[1," "]],[]]]]],[1,"\\n "]],[20]]]]],[1,"\\n "]],[18]]]]]],["&attrs","@filter","search","key","value","search","@onsearch","@search","components","Optgroup","Option","prop","search","components","Optgroup","Option","item","search","@sort","components","selectable","Optgroup","Option"],false,["search-bar","let","t","concat","array","action","if","block-slot","each","-track-array","includes","lowercase","or","from-entries","get","eq"]]',moduleName:"consul-ui/components/consul/intention/search-bar/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/intention/view/index",["exports","@ember/component","@ember/template-factory"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const l=(0,n.createTemplateFactory)({id:"+zan8Nkf",block:'[[[11,0],[24,0,"consul-intention-view"],[17,1],[12],[1,"\\n\\n "],[10,0],[14,0,"definition-table"],[12],[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"Destination"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,0],null,[["@item","@nspace","@partition","@service"],[[28,[37,1],null,[["Namespace","Partition","Service"],[[33,2,["DestinationNS"]],[33,2,["DestinationPartition"]],[33,2,["DestinationName"]]]]],"-","-",true]],null],[1,"\\n "],[13],[1,"\\n "],[10,"dt"],[12],[1,"Source"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,0],null,[["@item","@nspace","@partition","@service"],[[28,[37,1],null,[["Namespace","Partition","Service","PeerName"],[[33,2,["SourceNS"]],[33,2,["SourcePartition"]],[33,2,["SourceName"]],[33,2,["SourcePeer"]]]]],"-","-",true]],null],[1,"\\n "],[13],[1,"\\n"],[41,[33,2,["Action"]],[[[1," "],[10,"dt"],[12],[1,"Action"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[33,2,["Action"]]],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1," "],[10,"dt"],[12],[1,"Description"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[28,[35,4],[[33,2,["Description"]],"N/A"],null]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n\\n"],[41,[28,[37,5],[[33,2,["Permissions","length"]],0],null],[[[1," "],[10,"h2"],[12],[1,"Permissions"],[13],[1,"\\n "],[8,[39,6],null,null,null],[1,"\\n "],[8,[39,7],null,[["@items"],[[33,2,["Permissions"]]]],null],[1,"\\n"]],[]],null],[1,"\\n"],[13],[1,"\\n"]],["&attrs"],false,["consul/bucket/list","hash","item","if","or","gt","consul/intention/notice/permissions","consul/intention/permission/list"]]',moduleName:"consul-ui/components/consul/intention/view/index.hbs",isStrictMode:!1}) -var r=(0,t.setComponentTemplate)(l,t.default.extend({tagName:""})) -e.default=r})),define("consul-ui/components/consul/kind/index",["exports","@ember/component","@ember/template-factory","@ember/object","ember-cli-string-helpers/helpers/titleize","ember-cli-string-helpers/helpers/humanize"],(function(e,t,n,l,r,i){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const o=(0,n.createTemplateFactory)({id:"uD6fm7hf",block:'[[[41,[33,1,["Kind"]],[[[41,[33,2],[[[1," "],[10,"dl"],[14,0,"tooltip-panel"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n "],[10,1],[14,0,"consul-kind"],[12],[1,"\\n "],[1,[34,3]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,4],null,[["@position"],["left"]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n"],[41,[28,[37,6],[[33,1,["Kind"]],"ingress-gateway"],null],[[[1," Ingress gateways enable ingress traffic from services outside the Consul service mesh to services inside the Consul service mesh.\\n"]],[]],[[[41,[28,[37,6],[[33,1,["Kind"]],"terminating-gateway"],null],[[[1," Terminating gateways allow connect-enabled services in Consul service mesh to communicate with services outside the service mesh.\\n"]],[]],[[[41,[28,[37,6],[[33,1,["Kind"]],"api-gateway"],null],[[[1," API gateways enable ingress traffic from services outside the Consul service mesh to services inside the Consul service mesh.\\n"]],[]],[[[1," Mesh gateways enable routing of Connect traffic between different Consul datacenters.\\n "]],[]]]],[]]]],[]]],[1," "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["menu"]],[["default"],[[[[1,"\\n "],[10,"li"],[14,"role","separator"],[12],[1,"\\n"],[41,[28,[37,6],[[33,1,["Kind"]],"ingress-gateway"],null],[[[1," About Ingress gateways\\n"]],[]],[[[41,[28,[37,6],[[33,1,["Kind"]],"terminating-gateway"],null],[[[1," About Terminating gateways\\n"]],[]],[[[41,[28,[37,6],[[33,1,["Kind"]],"api-gateway"],null],[[[1," About API gateways\\n"]],[]],[[[1," About Mesh gateways\\n "]],[]]]],[]]]],[]]],[1," "],[13],[1,"\\n"],[44,[[28,[37,8],[[28,[37,9],[[28,[37,9],["ingress-gateway","/consul/developer-mesh/ingress-gateways"],null],[28,[37,9],["terminating-gateway","/consul/developer-mesh/understand-terminating-gateways"],null],[28,[37,9],["mesh-gateway","/consul/developer-mesh/connect-gateways"],null]],null]],null]],[[[1," "],[10,"li"],[14,"role","none"],[14,0,"learn-link"],[12],[1,"\\n "],[10,3],[14,"tabindex","-1"],[14,"role","menuitem"],[15,6,[28,[37,10],[[28,[37,11],["CONSUL_DOCS_LEARN_URL"],null],[28,[37,12],[[30,1],[33,1,["Kind"]]],null]],null]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[1,"\\n Learn guides\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[1]]],[44,[[28,[37,8],[[28,[37,9],[[28,[37,9],["ingress-gateway","/connect/gateways/ingress-gateway"],null],[28,[37,9],["terminating-gateway","/connect/gateways/terminating-gateway"],null],[28,[37,9],["api-gateway","/connect/gateways/api-gateway"],null],[28,[37,9],["mesh-gateway","/connect/gateways/mesh-gateway"],null]],null]],null]],[[[1," "],[10,"li"],[14,"role","none"],[14,0,"docs-link"],[12],[1,"\\n "],[10,3],[14,"tabindex","-1"],[14,"role","menuitem"],[15,6,[28,[37,10],[[28,[37,11],["CONSUL_DOCS_URL"],null],[28,[37,12],[[30,2],[33,1,["Kind"]]],null]],null]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[1,"\\n Documentation\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[14,"role","separator"],[12],[1,"\\n Other gateway types\\n "],[13],[1,"\\n"],[41,[28,[37,13],[[33,1,["Kind"]],"mesh-gateway"],null],[[[1," "],[10,"li"],[14,"role","none"],[14,0,"docs-link"],[12],[1,"\\n "],[10,3],[14,"tabindex","-1"],[14,"role","menuitem"],[15,6,[28,[37,10],[[28,[37,11],["CONSUL_DOCS_URL"],null],[28,[37,12],[[30,2],"mesh-gateway"],null]],null]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[1,"\\n Mesh gateways\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[28,[37,13],[[33,1,["Kind"]],"terminating-gateway"],null],[[[1," "],[10,"li"],[14,"role","none"],[14,0,"docs-link"],[12],[1,"\\n "],[10,3],[14,"tabindex","-1"],[14,"role","menuitem"],[15,6,[28,[37,10],[[28,[37,11],["CONSUL_DOCS_URL"],null],[28,[37,12],[[30,2],"terminating-gateway"],null]],null]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[1,"\\n Terminating gateways\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[28,[37,13],[[33,1,["Kind"]],"ingress-gateway"],null],[[[1," "],[10,"li"],[14,"role","none"],[14,0,"docs-link"],[12],[1,"\\n "],[10,3],[14,"tabindex","-1"],[14,"role","menuitem"],[15,6,[28,[37,10],[[28,[37,11],["CONSUL_DOCS_URL"],null],[28,[37,12],[[30,2],"ingress-gateway"],null]],null]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[1,"\\n Ingress gateways\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[28,[37,13],[[33,1,["Kind"]],"api-gateway"],null],[[[1," "],[10,"li"],[14,"role","none"],[14,0,"docs-link"],[12],[1,"\\n "],[10,3],[14,"tabindex","-1"],[14,"role","menuitem"],[15,6,[28,[37,10],[[28,[37,11],["CONSUL_DOCS_URL"],null],[28,[37,12],[[30,2],"api-gateway"],null]],null]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[1,"\\n API gateways\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null]],[2]]],[1," "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],[[[1," "],[10,1],[14,0,"consul-kind"],[12],[1,"\\n "],[1,[34,3]],[1,"\\n "],[13],[1,"\\n"]],[]]]],[]],null]],["link","link"],false,["if","item","withInfo","Name","menu-panel","block-slot","eq","let","from-entries","array","concat","env","get","not-eq"]]',moduleName:"consul-ui/components/consul/kind/index.hbs",isStrictMode:!1}),a={"api-gateway":"API Gateway","mesh-gateway":"Mesh Gateway","ingress-gateway":"Ingress Gateway","terminating-gateway":"Terminating Gateway"} -var u=(0,t.setComponentTemplate)(o,t.default.extend({tagName:"",Name:(0,l.computed)("item.Kind",(function(){const e=a[this.item.Kind] -return e||(0,r.titleize)((0,i.humanize)(this.item.Kind))}))})) -e.default=u})),define("consul-ui/components/consul/kv/form/index",["exports","@ember/component","@ember/template-factory","@ember/object","@ember/service"],(function(e,t,n,l,r){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const i=(0,n.createTemplateFactory)({id:"Wsyfh84D",block:'[[[8,[39,0],null,[["@dc","@nspace","@partition","@type","@label","@autofill","@item","@src","@onchange","@onsubmit"],[[99,1,["@dc"]],[99,2,["@nspace"]],[99,3,["@partition"]],"kv","key",[99,4,["@autofill"]],[99,5,["@item"]],[99,6,["@src"]],[28,[37,7],[[30,0],"change"],null],[28,[37,7],[[30,0],[33,8]],null]]],[["default"],[[[[1,"\\n "],[8,[39,9],null,[["@name"],["content"]],[["default"],[[[[1,"\\n"],[44,[[28,[37,11],["write kv"],[["item"],[[30,1,["data"]]]]]],[[[1," "],[10,"form"],[15,"onsubmit",[28,[37,7],[[30,0],[30,1,["submit"]]],null]],[12],[1,"\\n "],[11,"fieldset"],[4,[38,12],[[28,[37,13],[[30,2],[30,1,["disabled"]]],null]],null],[12],[1,"\\n"],[41,[30,1,["isCreate"]],[[[1," "],[10,"label"],[15,0,[29,["type-text",[52,[30,1,["data","error","Key"]]," has-error"]]]],[12],[1,"\\n "],[10,1],[12],[1,"Key or folder"],[13],[1,"\\n "],[10,"input"],[14,"autofocus","autofocus"],[15,2,[28,[37,15],[[30,1,["data","Key"]],[33,16]],null]],[14,3,"additional"],[15,"oninput",[28,[37,7],[[30,0],[30,1,["change"]]],null]],[14,"placeholder","Key or folder"],[14,4,"text"],[12],[13],[1,"\\n "],[10,"em"],[12],[1,"To create a folder, end a key with "],[10,"code"],[12],[1,"/"],[13],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[28,[37,13],[[28,[37,17],[[28,[37,15],[[30,1,["data","Key"]],[33,16]],null],""],null],[28,[37,18],[[28,[37,19],[[30,1,["data","Key"]]],null],"/"],null]],null],[[[1," "],[10,0],[12],[1,"\\n "],[10,0],[14,0,"type-toggle"],[12],[1,"\\n "],[10,"label"],[12],[1,"\\n "],[11,"input"],[24,3,"json"],[16,"checked",[52,[33,20],"checked"]],[16,"onchange",[28,[37,7],[[30,0],[30,1,["change"]]],null]],[24,4,"checkbox"],[4,[38,12],[false],null],[12],[13],[1,"\\n "],[10,1],[12],[1,"Code"],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n\\n "],[10,"label"],[14,"for",""],[15,0,[29,["type-text",[52,[30,1,["data","error","Value"]]," has-error"]]]],[12],[1,"\\n"],[41,[33,20],[[[1," "],[8,[39,21],null,[["@name","@readonly","@value","@onkeyup"],["value",[28,[37,13],[[30,2],[30,1,["disabled"]]],null],[28,[37,22],[[30,1,["data","Value"]]],null],[28,[37,7],[[30,0],[30,1,["change"]],"value"],null]]],[["label"],[[[[1,"Value"]],[]]]]],[1,"\\n"]],[]],[[[1," "],[10,1],[12],[1,"Value"],[13],[1,"\\n "],[11,"textarea"],[16,"autofocus",[28,[37,23],[[30,1,["isCreate"]]],null]],[24,3,"value"],[16,"oninput",[28,[37,7],[[30,0],[30,1,["change"]]],null]],[4,[38,12],[[28,[37,13],[[30,2],[30,1,["disabled"]]],null]],null],[12],[1,[28,[35,22],[[30,1,["data","Value"]]],null]],[13],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n "],[8,[39,24],null,null,[["default"],[[[[1,"\\n"],[41,[30,1,["isCreate"]],[[[41,[28,[37,23],[[30,2]],null],[[[1," "],[8,[39,25],[[16,"disabled",[28,[37,13],[[30,1,["data","isPristine"]],[30,1,["data","isInvalid"]],[30,1,["disabled"]]],null]],[24,4,"submit"]],[["@text"],["Save"]],null],[1,"\\n"]],[]],null],[1,"\\n "],[8,[39,25],[[16,"disabled",[30,1,["disabled"]]],[16,"onclick",[28,[37,7],[[30,0],[33,26],[30,1,["data"]]],null]],[24,4,"reset"]],[["@text","@color"],["Cancel","secondary"]],null],[1,"\\n"]],[]],[[[41,[28,[37,23],[[30,2]],null],[[[1," "],[8,[39,25],[[16,"disabled",[28,[37,13],[[30,1,["data","isInvalid"]],[30,1,["disabled"]]],null]],[24,4,"submit"]],[["@text"],["Save"]],null],[1,"\\n"]],[]],null],[1," "],[8,[39,25],[[16,"disabled",[30,1,["disabled"]]],[16,"onclick",[28,[37,7],[[30,0],[33,26],[30,1,["data"]]],null]],[24,4,"reset"]],[["@text","@color"],["Cancel","secondary"]],null],[1,"\\n"],[41,[28,[37,23],[[30,2]],null],[[[1," "],[8,[39,27],null,[["@message"],["Are you sure you want to delete this key?"]],[["default"],[[[[1,"\\n "],[8,[39,9],null,[["@name"],["action"]],[["default"],[[[[1,"\\n "],[8,[39,25],[[16,"disabled",[30,1,["disabled"]]],[4,[38,28],["click",[28,[37,7],[[30,0],[30,3],[30,1,["delete"]]],null]],null]],[["@text","@color"],["Delete","critical"]],null],[1,"\\n "]],[3]]]]],[1,"\\n "],[8,[39,9],null,[["@name"],["dialog"]],[["default"],[[[[1,"\\n "],[8,[39,29],null,[["@message","@execute","@cancel"],[[30,6],[30,4],[30,5]]],null],[1,"\\n "]],[4,5,6]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null]],[]]],[1," "]],[]]]]],[1,"\\n "],[13],[1,"\\n"]],[2]]],[1," "]],[]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["api","disabld","confirm","execute","cancel","message"],false,["data-form","dc","nspace","partition","autofill","item","src","action","onsubmit","block-slot","let","cannot","disabled","or","if","left-trim","parent","eq","not-eq","last","json","code-editor","atob","not","hds/button-set","hds/button","oncancel","confirmation-dialog","on","delete-confirmation"]]',moduleName:"consul-ui/components/consul/kv/form/index.hbs",isStrictMode:!1}) -var o=(0,t.setComponentTemplate)(i,t.default.extend({tagName:"",encoder:(0,r.inject)("btoa"),json:!0,ondelete:function(){this.onsubmit(...arguments)},oncancel:function(){this.onsubmit(...arguments)},onsubmit:function(){},actions:{change:function(e,t){const n=t.getData() -try{t.handleEvent(e)}catch(r){const t=e.target -let i -switch(t.name){case"value":(0,l.set)(n,"Value",this.encoder.execute(t.value)) -break -case"additional":i=(0,l.get)(this,"parent"),(0,l.set)(n,"Key",`${"/"!==i?i:""}${t.value}`) -break -case"json":(0,l.set)(this,"json",!this.json) -break -default:throw r}}}}})) -e.default=o})),define("consul-ui/components/consul/kv/list/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"OYo2s3qR",block:'[[[8,[39,0],[[24,0,"consul-kv-list"],[17,1]],[["@items"],[[30,2]]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"th"],[12],[1,"Name"],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["row"]],[["default"],[[[[1,"\\n "],[10,"td"],[15,0,[52,[30,3,["isFolder"]],"folder","file"]],[12],[1,"\\n "],[10,3],[15,6,[28,[37,3],[[52,[30,3,["isFolder"]],"dc.kv.folder","dc.kv.edit"],[30,3,["Key"]]],null]],[12],[1,[28,[35,4],[[28,[37,5],[[30,3,["Key"]],[30,5,["Key"]]],null],"/"],null]],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@expanded","@onchange","@keyboardAccess"],[[52,[28,[37,7],[[30,8],[30,6]],null],true,false],[28,[37,8],[[30,0],[30,7],[30,6]],null],false]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["trigger"]],[["default"],[[[[1,"\\n More\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["menu"]],[["default"],[[[[1,"\\n"],[41,[28,[37,9],["write kv"],[["item"],[[30,3]]]],[[[1," "],[10,"li"],[14,"role","none"],[12],[1,"\\n "],[10,3],[14,"role","menuitem"],[14,"tabindex","-1"],[15,6,[28,[37,3],[[52,[30,3,["isFolder"]],"dc.kv.folder","dc.kv.edit"],[30,3,["Key"]]],null]],[12],[1,[52,[30,3,["isFolder"]],"View","Edit"]],[13],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[14,"role","none"],[14,0,"dangerous"],[12],[1,"\\n "],[10,"label"],[15,"for",[30,9]],[14,"role","menuitem"],[14,"tabindex","-1"],[15,"onkeypress",[30,11]],[12],[1,"Delete"],[13],[1,"\\n "],[10,0],[14,"role","menu"],[12],[1,"\\n "],[8,[39,10],[[24,0,"warning"]],null,[["header","body","actions"],[[[[1,"\\n Confirm Delete\\n "]],[]],[[[1,"\\n "],[10,2],[12],[1,"\\n Are you sure you want to delete this KV entry?\\n "],[13],[1,"\\n "]],[]],[[[1,"\\n "],[8,[30,12,["Action"]],[[24,0,"dangerous"]],null,[["default"],[[[[1,"\\n "],[8,[39,8],[[24,0,"type-delete"],[24,"tabindex","-1"],[4,[38,11],["click",[28,[37,12],[[28,[37,8],[[30,0],[30,7]],null],[28,[37,8],[[30,0],[30,13],[30,3]],null]],null]],null]],null,[["default"],[[[[1,"\\n Delete\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,12,["Action"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,8],null,[["@for"],[[30,9]]],[["default"],[[[[1,"\\n Cancel\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[12]]]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],[[[1," "],[10,"li"],[14,"role","none"],[12],[1,"\\n "],[10,3],[14,"role","menuitem"],[14,"tabindex","-1"],[15,6,[28,[37,3],[[52,[30,3,["isFolder"]],"dc.kv.folder","dc.kv.edit"],[30,3,["Key"]]],null]],[12],[1,"View"],[13],[1,"\\n "],[13],[1,"\\n"]],[]]],[1," "]],[9,10,11]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6,7,8]]]]],[1,"\\n"]],[3,4]]]]]],["&attrs","@items","item","index","@parent","index","change","checked","confirm","send","keypressClick","Actions","@delete"],false,["tabular-collection","block-slot","if","href-to","right-trim","left-trim","popover-menu","eq","action","can","informed-action","on","queue"]]',moduleName:"consul-ui/components/consul/kv/list/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/kv/search-bar/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"sF1xY1/s",block:'[[[8,[39,0],[[24,0,"consul-kv-search-bar"],[17,1]],[["@filter"],[[30,2]]],[["status","search","filter","sort"],[[[[1,"\\n\\n"],[44,[[28,[37,2],[[28,[37,3],["components.consul.kv.search-bar.",[30,3,["status","key"]]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","key"]]],null],[28,[37,3],["common.consul.",[30,3,["status","key"]]],null]],null]]]],[28,[37,2],[[28,[37,3],["components.consul.kv.search-bar.",[30,3,["status","value"]]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","value"]]],null],[28,[37,3],["common.consul.",[30,3,["status","value"]]],null]],null]]]]],[[[1," "],[8,[30,3,["RemoveFilter"]],[[16,"aria-label",[28,[37,2],["common.ui.remove"],[["item"],[[28,[37,3],[[30,4]," ",[30,5]],null]]]]]],null,[["default"],[[[[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,[30,4]],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,5]],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[4,5]]],[1,"\\n "]],[3]],[[[1,"\\n "],[8,[30,6,["Search"]],null,[["@onsearch","@value","@placeholder"],[[28,[37,5],[[30,0],[30,7]],null],[30,8],[28,[37,2],["common.search.search"],null]]],[["default"],[[[[1,"\\n"],[41,[30,2,["searchproperty"]],[[[1," "],[8,[30,6,["Select"]],[[24,0,"type-search-properties"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,2,["searchproperty","change"]]],null],true,true]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["common.search.searchproperty"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,9,["Optgroup"]],[30,9,["Option"]]],[[[42,[28,[37,9],[[28,[37,9],[[30,2,["searchproperty","default"]]],null]],null],null,[[[1," "],[8,[30,11],null,[["@value","@selected"],[[30,12],[28,[37,10],[[30,12],[30,2,["searchproperty","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["common.consul.",[28,[37,11],[[30,12]],null]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[12]],null]],[10,11]]],[1," "]],[]]]]],[1,"\\n "]],[9]]]]],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "]],[6]],[[[1,"\\n "],[8,[30,13,["Select"]],[[24,0,"type-kind"]],[["@position","@onchange","@multiple"],["left",[28,[37,5],[[30,0],[30,2,["kind","change"]]],null],true]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["components.consul.kv.search-bar.kind.name"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,14,["Optgroup"]],[30,14,["Option"]]],[[[42,[28,[37,9],[[28,[37,9],[[28,[37,4],["folder","key"],null]],null]],null],null,[[[1," "],[8,[30,16],[[24,0,"value-{item}}"]],[["@value","@selected"],[[30,17],[28,[37,10],[[30,17],[30,2,["kind","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["components.consul.kv.search-bar.kind.options.",[30,17]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[17]],null]],[15,16]]],[1," "]],[]]]]],[1,"\\n "]],[14]]]]],[1,"\\n "]],[13]],[[[1,"\\n "],[8,[30,18,["Select"]],[[24,0,"type-sort"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,19,["change"]]],null],false,true]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n"],[44,[[28,[37,12],[[28,[37,4],[[28,[37,4],["Key:asc",[28,[37,2],["common.sort.alpha.asc"],null]],null],[28,[37,4],["Key:desc",[28,[37,2],["common.sort.alpha.desc"],null]],null],[28,[37,4],["Kind:asc",[28,[37,2],["components.consul.kv.search-bar.sort.kind.asc"],null]],null],[28,[37,4],["Kind:desc",[28,[37,2],["components.consul.kv.search-bar.sort.kind.desc"],null]],null]],null]],null]],[[[1," "],[1,[28,[35,13],[[30,21],[30,19,["value"]]],null]],[1,"\\n"]],[21]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,20,["Optgroup"]],[30,20,["Option"]]],[[[1," "],[8,[30,22],null,[["@label"],[[28,[37,2],["common.consul.name"],null]]],[["default"],[[[[1,"\\n "],[8,[30,23],null,[["@value","@selected"],["Key:asc",[28,[37,14],["Key:asc",[30,19,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,23],null,[["@value","@selected"],["Key:desc",[28,[37,14],["Key:desc",[30,19,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,22],null,[["@label"],[[28,[37,2],["components.consul.kv.search-bar.kind.name"],null]]],[["default"],[[[[1,"\\n "],[8,[30,23],null,[["@value","@selected"],["Kind:asc",[28,[37,14],["Kind:asc",[30,19,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["components.consul.kv.search-bar.sort.kind.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,23],null,[["@value","@selected"],["Kind:desc",[28,[37,14],["Kind:desc",[30,19,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["components.consul.kv.search-bar.sort.kind.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[22,23]]],[1," "]],[]]]]],[1,"\\n "]],[20]]]]],[1,"\\n "]],[18]]]]],[1,"\\n"]],["&attrs","@filter","search","key","value","search","@onsearch","@search","components","Optgroup","Option","prop","search","components","Optgroup","Option","item","search","@sort","components","selectable","Optgroup","Option"],false,["search-bar","let","t","concat","array","action","if","block-slot","each","-track-array","includes","lowercase","from-entries","get","eq"]]',moduleName:"consul-ui/components/consul/kv/search-bar/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/loader/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"FSVimMul",block:'[[[11,0],[24,0,"consul-loader"],[17,1],[12],[1,"\\n "],[10,"svg"],[14,"xmlns","http://www.w3.org/2000/svg","http://www.w3.org/2000/xmlns/"],[14,"xmlns:xlink","http://www.w3.org/1999/xlink","http://www.w3.org/2000/xmlns/"],[14,"width","44px"],[14,"height","44px"],[14,"viewBox","0 0 44 44"],[14,"version","1.1"],[12],[1,"\\n "],[10,"g"],[12],[1,"\\n "],[10,"circle"],[14,"r","1"],[14,"cx","27"],[14,"cy","2"],[14,5,"transform-origin: 27px 2px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","1"],[14,"cx","17"],[14,"cy","2"],[14,5,"transform-origin: 17px 2px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","1"],[14,"cx","27"],[14,"cy","42"],[14,5,"transform-origin: 27px 42px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","1"],[14,"cx","17"],[14,"cy","42"],[14,5,"transform-origin: 17px 42px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","1"],[14,"cx","2"],[14,"cy","17"],[14,5,"transform-origin: 2px 17px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","1"],[14,"cx","2"],[14,"cy","27"],[14,5,"transform-origin: 2px 27px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","1"],[14,"cx","42"],[14,"cy","17"],[14,5,"transform-origin: 42px 17px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","1"],[14,"cx","42"],[14,"cy","27"],[14,5,"transform-origin: 42px 27px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","1"],[14,"cx","33"],[14,"cy","4"],[14,5,"transform-origin: 33px 4px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","1"],[14,"cx","11"],[14,"cy","4"],[14,5,"transform-origin: 11px 4px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","1"],[14,"cx","33"],[14,"cy","40"],[14,5,"transform-origin: 33px 40px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","1"],[14,"cx","11"],[14,"cy","40"],[14,5,"transform-origin: 11px 40px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","1"],[14,"cx","40"],[14,"cy","11"],[14,5,"transform-origin: 40px 11px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","1"],[14,"cx","4"],[14,"cy","33"],[14,5,"transform-origin: 4px 33px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","1"],[14,"cx","40"],[14,"cy","33"],[14,5,"transform-origin: 40px 33px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","1"],[14,"cx","4"],[14,"cy","11"],[14,5,"transform-origin: 4px 11px"],[12],[13],[1,"\\n "],[13],[1,"\\n "],[10,"g"],[12],[1,"\\n "],[10,"circle"],[14,"r","2"],[14,"cx","22"],[14,"cy","4"],[14,5,"transform-origin: 22px 4px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","2"],[14,"cx","22"],[14,"cy","40"],[14,5,"transform-origin: 22px 40px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","2"],[14,"cx","4"],[14,"cy","22"],[14,5,"transform-origin: 4px 22px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","2"],[14,"cx","40"],[14,"cy","22"],[14,5,"transform-origin: 40px 22px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","2"],[14,"cx","9"],[14,"cy","9"],[14,5,"transform-origin: 9px 9px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","2"],[14,"cx","35"],[14,"cy","35"],[14,5,"transform-origin: 35px 35px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","2"],[14,"cx","35"],[14,"cy","9"],[14,5,"transform-origin: 35px 9px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","2"],[14,"cx","9"],[14,"cy","35"],[14,5,"transform-origin: 9px 35px"],[12],[13],[1,"\\n "],[13],[1,"\\n "],[10,"g"],[12],[1,"\\n "],[10,"circle"],[14,"r","2"],[14,"cx","28"],[14,"cy","8"],[14,5,"transform-origin: 28px 8px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","2"],[14,"cx","16"],[14,"cy","8"],[14,5,"transform-origin: 16px 8px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","2"],[14,"cx","28"],[14,"cy","36"],[14,5,"transform-origin: 28px 36px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","2"],[14,"cx","16"],[14,"cy","36"],[14,5,"transform-origin: 16px 36px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","2"],[14,"cx","8"],[14,"cy","28"],[14,5,"transform-origin: 8px 28px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","2"],[14,"cx","8"],[14,"cy","16"],[14,5,"transform-origin: 8px 16px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","2"],[14,"cx","36"],[14,"cy","28"],[14,5,"transform-origin: 36px 28px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","2"],[14,"cx","36"],[14,"cy","16"],[14,5,"transform-origin: 36px 16px"],[12],[13],[1,"\\n "],[13],[1,"\\n "],[10,"g"],[12],[1,"\\n "],[10,"circle"],[14,"r","5"],[14,"cx","22"],[14,"cy","12"],[14,5,"transform-origin: 22px 12px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","5"],[14,"cx","22"],[14,"cy","32"],[14,5,"transform-origin: 22px 32px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","5"],[14,"cx","12"],[14,"cy","22"],[14,5,"transform-origin: 12px 22px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","5"],[14,"cx","32"],[14,"cy","22"],[14,5,"transform-origin: 32px 22px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","5"],[14,"cx","15"],[14,"cy","15"],[14,5,"transform-origin: 15px 15px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","5"],[14,"cx","29"],[14,"cy","29"],[14,5,"transform-origin: 29px 29px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","5"],[14,"cx","29"],[14,"cy","15"],[14,5,"transform-origin: 29px 15px"],[12],[13],[1,"\\n "],[10,"circle"],[14,"r","5"],[14,"cx","15"],[14,"cy","29"],[14,5,"transform-origin: 15px 29px"],[12],[13],[1,"\\n "],[13],[1,"\\n "],[10,"g"],[12],[1,"\\n "],[10,"circle"],[14,"r","9"],[14,"cx","22"],[14,"cy","22"],[14,5,"transform-origin: 22px 22px"],[12],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"],[13],[1,"\\n"]],["&attrs"],false,[]]',moduleName:"consul-ui/components/consul/loader/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/lock-session/form/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"Hv2qW8N0",block:'[[[11,0],[24,0,"consul-lock-session-form"],[17,1],[12],[1,"\\n "],[8,[39,0],null,[["@sink","@type","@label","@ondelete","@onchange"],[[28,[37,1],["/${partition}/${nspace}/${dc}/session",[28,[37,2],null,[["partition","nspace","dc"],[[30,2,["Partition"]],[30,2,["Namespace"]],[30,2,["Datacenter"]]]]]],null],"session","Lock Session",[28,[37,3],[[52,[30,3],[30,3],[30,4]],[30,2]],null],[28,[37,3],[[28,[37,5],[[30,4]],null],[30,2]],null]]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["removed"]],[["default"],[[[[1,"\\n "],[8,[39,7],[[4,[38,8],null,[["after"],[[28,[37,9],[[30,0],[30,6]],null]]]]],[["@type"],["remove"]],null],[1,"\\n "]],[6]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,7],[[4,[38,8],null,[["after"],[[28,[37,9],[[30,0],[30,7]],null]]]]],[["@type","@error"],["remove",[30,8]]],null],[1,"\\n "]],[7,8]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[10,0],[14,0,"definition-table"],[12],[1,"\\n "],[10,"dl"],[12],[1,"\\n"],[41,[30,2,["Name"]],[[[1," "],[10,"dt"],[12],[1,"Name"],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,2,["Name"]]],[13],[1,"\\n"]],[]],null],[1," "],[10,"dt"],[12],[1,"ID"],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,2,["ID"]]],[13],[1,"\\n "],[10,"dt"],[12],[1,"Node"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,10],null,[["@text","@icon","@href","@isHrefExternal","@size","@color"],[[30,2,["Node"]],"git-commit",[28,[37,11],["dc.nodes.show",[30,2,["Node"]]],null],false,"small","tertiary"]],null],[1,"\\n "],[13],[1,"\\n "],[10,"dt"],[12],[1,"Delay"],[13],[1,"\\n "],[10,"dd"],[12],[1,[28,[35,12],[[30,2,["LockDelay"]]],null]],[13],[1,"\\n "],[10,"dt"],[12],[1,"TTL"],[13],[1,"\\n "],[10,"dd"],[12],[1,[28,[35,13],[[30,2,["TTL"]],"-"],null]],[13],[1,"\\n "],[10,"dt"],[12],[1,"Behavior"],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,2,["Behavior"]]],[13],[1,"\\n"],[44,[[30,2,["checks"]]],[[[1," "],[10,"dt"],[12],[1,"Health Checks"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n"],[41,[28,[37,15],[[30,9,["length"]],0],null],[[[1," "],[1,[28,[35,16],[", ",[30,9]],null]],[1,"\\n"]],[]],[[[1," -\\n"]],[]]],[1," "],[13],[1,"\\n"]],[9]]],[1," "],[13],[1,"\\n "],[13],[1,"\\n"],[41,[28,[37,17],["delete session"],[["item"],[[30,2]]]],[[[1," "],[8,[39,18],null,[["@message"],["Are you sure you want to invalidate this Lock Session?"]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["action"]],[["default"],[[[[1,"\\n "],[8,[39,10],[[4,[38,19],["click",[28,[37,3],[[30,10],[28,[37,3],[[30,5,["delete"]],[30,2]],null]],null]],null]],[["@text","@color"],["Invalidate Session","critical"]],null],[1,"\\n "]],[10]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["dialog"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n "],[1,[30,13]],[1,"\\n "],[13],[1,"\\n "],[8,[39,20],null,null,[["default"],[[[[1,"\\n "],[8,[39,10],[[4,[38,19],["click",[28,[37,3],[[30,11]],null]],null]],[["@text","@color"],["Confirm Invalidation","critical"]],null],[1,"\\n "],[8,[39,10],[[4,[38,19],["click",[28,[37,3],[[30,12]],null]],null]],[["@text","@color"],["Cancel","secondary"]],null],[1,"\\n "]],[]]]]],[1,"\\n "]],[11,12,13]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "]],[5]]]]],[1,"\\n"],[13]],["&attrs","@item","@ondelete","@onsubmit","writer","after","after","error","checks","confirm","execute","cancel","message"],false,["data-writer","uri","hash","fn","if","optional","block-slot","consul/lock-session/notifications","notification","action","hds/button","href-to","duration-from","or","let","gt","join","can","confirmation-dialog","on","hds/button-set"]]',moduleName:"consul-ui/components/consul/lock-session/form/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/lock-session/list/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"f75K08ts",block:'[[[8,[39,0],[[24,0,"consul-lock-session-list"],[17,1]],[["@items"],[[30,2]]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n"],[41,[30,3,["Name"]],[[[1," "],[10,1],[12],[1,[30,3,["Name"]]],[13],[1,"\\n"]],[]],[[[1," "],[10,1],[12],[1,"\\n "],[1,[30,3,["ID"]]],[1,"\\n "],[8,[39,3],null,[["@value","@name"],[[30,3,["ID"]],"ID"]],null],[1,"\\n "],[13],[1,"\\n"]],[]]],[1," "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["details"]],[["default"],[[[[1,"\\n"],[41,[30,3,["Name"]],[[[1," "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n ID\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,3],null,[["@value","@name"],[[30,3,["ID"]],"ID"]],null],[1,"\\n "],[1,[30,3,["ID"]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1," "],[10,"dl"],[14,0,"lock-delay"],[12],[1,"\\n "],[11,"dt"],[4,[38,4],null,null],[12],[1,"\\n Delay\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,[28,[35,5],[[30,3,["LockDelay"]]],null]],[13],[1,"\\n "],[13],[1,"\\n "],[10,"dl"],[14,0,"ttl"],[12],[1,"\\n "],[11,"dt"],[4,[38,4],null,null],[12],[1,"\\n TTL\\n "],[13],[1,"\\n"],[41,[28,[37,6],[[30,3,["TTL"]],""],null],[[[1," "],[10,"dd"],[12],[1,"-"],[13],[1,"\\n"]],[]],[[[1," "],[10,"dd"],[12],[1,[30,3,["TTL"]]],[13],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n "],[10,"dl"],[14,0,"behavior"],[12],[1,"\\n "],[11,"dt"],[4,[38,4],null,null],[12],[1,"\\n Behavior\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,3,["Behavior"]]],[13],[1,"\\n "],[13],[1,"\\n"],[44,[[28,[37,8],[[30,3,["NodeChecks"]],[30,3,["ServiceChecks"]]],null]],[[[1," "],[10,"dl"],[14,0,"checks"],[12],[1,"\\n "],[11,"dt"],[4,[38,4],null,null],[12],[1,"\\n Checks\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n"],[41,[28,[37,9],[[30,5,["length"]],0],null],[[[42,[28,[37,11],[[28,[37,11],[[30,5]],null]],null],null,[[[1," "],[10,1],[12],[1,[30,6]],[13],[1,"\\n"]],[6]],null]],[]],[[[1," -\\n"]],[]]],[1," "],[13],[1,"\\n "],[13],[1,"\\n"]],[5]]],[1," "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[8,[39,12],null,[["@message"],["Are you sure you want to invalidate this session?"]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["action"]],[["default"],[[[[1,"\\n "],[8,[39,13],[[4,[38,14],["click",[28,[37,15],[[30,7],[28,[37,15],[[30,8],[30,3]],null]],null]],null]],[["@text","@color"],["Invalidate","critical"]],null],[1,"\\n "]],[7]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["dialog"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n "],[1,[30,11]],[1,"\\n "],[13],[1,"\\n "],[8,[39,16],null,null,[["default"],[[[[1,"\\n "],[8,[39,13],[[4,[38,14],["click",[28,[37,15],[[30,9]],null]],null]],[["@text","@color"],["Confirm Invalidate","critical"]],null],[1,"\\n "],[8,[39,13],[[4,[38,14],["click",[28,[37,15],[[30,10]],null]],null]],[["@text","@color"],["Cancel","secondary"]],null],[1,"\\n "]],[]]]]],[1,"\\n "]],[9,10,11]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[3,4]]]]]],["&attrs","@items","item","index","checks","item","confirm","@ondelete","execute","cancel","message"],false,["list-collection","block-slot","if","copy-button","tooltip","duration-from","eq","let","union","gt","each","-track-array","confirmation-dialog","hds/button","on","fn","hds/button-set"]]',moduleName:"consul-ui/components/consul/lock-session/list/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/lock-session/notifications/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"8UZIF1qV",block:'[[[41,[28,[37,1],[[30,1],"remove"],null],[[[41,[30,2],[[[1," "],[8,[39,2],[[17,3]],[["@color"],["critical"]],[["default"],[[[[1,"\\n "],[8,[30,4,["Title"]],null,null,[["default"],[[[[1,"Error!"]],[]]]]],[1,"\\n "],[8,[30,4,["Description"]],null,null,[["default"],[[[[1,"\\n There was an error invalidating the Lock Session.\\n"],[41,[28,[37,3],[[30,2,["status"]],[30,2,["detail"]]],null],[[[1," "],[10,"br"],[12],[13],[1,[30,2,["status"]]],[1,": "],[1,[30,2,["detail"]]],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "]],[4]]]]],[1,"\\n"]],[]],[[[1," "],[8,[39,2],[[17,3]],[["@color"],["success"]],[["default"],[[[[1,"\\n "],[8,[30,5,["Title"]],null,null,[["default"],[[[[1,"Success!"]],[]]]]],[1,"\\n "],[8,[30,5,["Description"]],null,null,[["default"],[[[[1,"\\n Your Lock Session has been invalidated.\\n "]],[]]]]],[1,"\\n "]],[5]]]]],[1,"\\n"]],[]]]],[]],[[[41,[28,[37,1],[[30,1],"kv"],null],[[[1," "],[8,[39,4],[[24,0,"mb-3"]],[["@type","@color"],["inline","warning"]],[["default"],[[[[1,"\\n "],[8,[30,6,["Title"]],null,null,[["default"],[[[[1,"Warning"]],[]]]]],[1,"\\n "],[8,[30,6,["Description"]],null,null,[["default"],[[[[1,"This KV has a lock session. You can edit KV\'s with lock sessions, but we recommend doing so with care, or not doing so at all. It may negatively impact the active node it\'s associated with. See below for more details on the Lock Session."]],[]]]]],[1,"\\n "],[8,[30,6,["Link::Standalone"]],null,[["@text","@href","@icon","@iconPosition"],["Learn more",[29,[[28,[37,5],["CONSUL_DOCS_URL"],null],"/internals/sessions.html"]],"docs-link","trailing"]],null],[1,"\\n "]],[6]]]]],[1,"\\n"]],[]],null]],[]]]],["@type","@error","&attrs","T","T","A"],false,["if","eq","hds/toast","and","hds/alert","env"]]',moduleName:"consul-ui/components/consul/lock-session/notifications/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/metadata/list/index",["exports","@ember/component","@ember/template-factory"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const l=(0,n.createTemplateFactory)({id:"qvPSBKvv",block:'[[[8,[39,0],[[24,0,"consul-metadata-list"]],[["@items"],[[99,1,["@items"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"th"],[12],[1,"Key"],[13],[1,"\\n "],[10,"th"],[12],[1,"Value"],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,2],null,[["@name"],["row"]],[["default"],[[[[1,"\\n "],[10,"td"],[12],[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,3],[0,[30,1]],null]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[10,"td"],[12],[1,"\\n "],[10,1],[12],[1,[28,[35,3],[1,[30,1]],null]],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[1,2]]]]],[1,"\\n"]],["item","index"],false,["tabular-collection","items","block-slot","object-at"]]',moduleName:"consul-ui/components/consul/metadata/list/index.hbs",isStrictMode:!1}) -var r=(0,t.setComponentTemplate)(l,t.default.extend({tagName:""})) -e.default=r})),define("consul-ui/components/consul/node-identity/template/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"YflZV/pQ",block:'[[[41,[28,[37,1],["use partitions"],null],[[[1,"partition \\""],[1,[28,[35,2],[[30,1],"default"],null]],[1,"\\" {\\n"],[41,[28,[37,1],["use nspaces"],null],[[[1," namespace \\"default\\" {\\n node \\""],[1,[30,2]],[1,"\\" {\\n\\t policy = \\"write\\"\\n }\\n }\\n namespace_prefix \\"\\" {\\n service_prefix \\"\\" {\\n\\t policy = \\"read\\"\\n }\\n }\\n"]],[]],[[[1," node \\""],[1,[30,2]],[1,"\\" {\\n\\t policy = \\"write\\"\\n }\\n service_prefix \\"\\" {\\n\\t policy = \\"read\\"\\n }\\n"]],[]]],[1,"}"]],[]],[[[41,[28,[37,1],["use nspaces"],null],[[[1,"namespace \\"default\\" {\\n node \\""],[1,[30,2]],[1,"\\" {\\n\\t policy = \\"write\\"\\n }\\n}\\nnamespace_prefix \\"\\" {\\n service_prefix \\"\\" {\\n\\t policy = \\"read\\"\\n }\\n}\\n"]],[]],[[[1,"node \\""],[1,[30,2]],[1,"\\" {\\n\\tpolicy = \\"write\\"\\n}\\nservice_prefix \\"\\" {\\n\\tpolicy = \\"read\\"\\n}"]],[]]]],[]]]],["@partition","@name"],false,["if","can","or"]]',moduleName:"consul-ui/components/consul/node-identity/template/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/node/agentless-notice/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@ember/object","consul-ui/services/local-storage"],(function(e,t,n,l,r,i){var o,a,u -function s(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const c=(0,n.createTemplateFactory)({id:"639y+0v2",block:'[[[41,[33,1],[[[1," "],[8,[39,2],[[24,0,"mb-3 mt-2 agentless-node-notice"]],[["@type"],["inline"]],[["default"],[[[[1,"\\n "],[8,[30,1,["Title"]],null,null,[["default"],[[[[1,"\\n "],[10,1],[12],[1,[28,[35,3],["routes.dc.nodes.index.agentless.notice.header"],null]],[13],[1,"\\n "],[8,[39,4],[[4,[38,5],["click",[30,0,["dismissAgentlessNotice"]]],null]],[["@color","@text","@icon","@size","@isIconOnly"],["secondary","Dismiss notice","x","small",true]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,1,["Description"]],null,null,[["default"],[[[[1,[28,[35,3],["routes.dc.nodes.index.agentless.notice.body"],null]]],[]]]]],[1,"\\n "],[8,[30,1,["Link::Standalone"]],null,[["@href","@text","@icon","@iconPosition"],[[29,[[28,[37,6],["CONSUL_DOCS_DEVELOPER_URL"],null],"/connect/dataplane"]],[28,[37,3],["routes.dc.nodes.index.agentless.notice.footer"],null],"docs-link","trailing"]],null],[1,"\\n "]],[1]]]]],[1,"\\n"]],[]],null]],["A"],false,["if","isVisible","hds/alert","t","hds/button","on","env"]]',moduleName:"consul-ui/components/consul/node/agentless-notice/index.hbs",isStrictMode:!1}) -let d=(o=(0,i.storageFor)("notices"),a=class extends l.default{constructor(){var e,t,n,l,r,i,o -super(...arguments),n="nodes-agentless-dismissed",(t="storageKey")in(e=this)?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,l=this,r="notices",o=this,(i=u)&&Object.defineProperty(l,r,{enumerable:i.enumerable,configurable:i.configurable,writable:i.writable,value:i.initializer?i.initializer.call(o):void 0}),this.args.postfix&&(this.storageKey=`nodes-agentless-dismissed-${this.args.postfix}`)}get isVisible(){const{items:e,filteredItems:t}=this.args -return!this.notices.state.includes(this.storageKey)&&e.length>t.length}dismissAgentlessNotice(){this.notices.add(this.storageKey)}},u=s(a.prototype,"notices",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),s(a.prototype,"dismissAgentlessNotice",[r.action],Object.getOwnPropertyDescriptor(a.prototype,"dismissAgentlessNotice"),a.prototype),a) -e.default=d,(0,t.setComponentTemplate)(c,d)})),define("consul-ui/components/consul/node/list/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"UZddA6ka",block:'[[[8,[39,0],[[24,0,"consul-node-list"]],[["@items"],[[30,1]]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"dl"],[15,0,[30,2,["Status"]]],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n Health\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,2],null,[["@position"],["top-start"]],[["default"],[[[[1,"\\n"],[41,[28,[37,4],["critical",[30,2,["Status"]]],null],[[[1," At least one health check on this node is failing.\\n"]],[]],[[[41,[28,[37,4],["warning",[30,2,["Status"]]],null],[[[1," At least one health check on this node has a warning.\\n"]],[]],[[[41,[28,[37,4],["passing",[30,2,["Status"]]],null],[[[1," All health checks are passing.\\n"]],[]],[[[1," There are no health checks.\\n "]],[]]]],[]]]],[]]],[1," "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[10,3],[15,6,[28,[37,5],["dc.nodes.show",[30,2,["Node"]]],[["params"],[[28,[37,6],null,[["peer"],[[30,2,["PeerName"]]]]]]]]],[12],[1,"\\n "],[1,[30,2,["Node"]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["details"]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@item"],[[30,2]]],null],[1,"\\n"],[41,[28,[37,4],[[30,2,["Address"]],[30,4,["Address"]]],null],[[[1," "],[10,1],[14,0,"leader"],[12],[1,"Leader"],[13],[1,"\\n"]],[]],null],[1," "],[10,1],[12],[1,"\\n "],[1,[28,[35,8],[[30,2,["MeshServiceInstances","length"]]],null]],[1," "],[1,[28,[35,9],[[30,2,["MeshServiceInstances","length"]],"Service"],[["without-count"],[true]]]],[1,"\\n "],[13],[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n "],[10,1],[12],[1,"Address"],[13],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,10],null,[["@value","@name"],[[30,2,["Address"]],"Address"]],null],[1,"\\n "],[1,[30,2,["Address"]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[2,3]]]]],[1,"\\n"]],["@items","item","index","@leader"],false,["list-collection","block-slot","tooltip","if","eq","href-to","hash","consul/node/peer-info","format-number","pluralize","copy-button"]]',moduleName:"consul-ui/components/consul/node/list/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/node/peer-info/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"7f6XDyqE",block:'[[[41,[30,1,["PeerName"]],[[[1," "],[10,1],[14,0,"consul-node-peer-info"],[12],[1,"\\n "],[11,"svg"],[24,"width","16"],[24,"height","16"],[24,"viewBox","0 0 16 16"],[24,"fill","none"],[24,"xmlns","http://www.w3.org/2000/svg","http://www.w3.org/2000/xmlns/"],[4,[38,1],["Peer"],null],[12],[1,"\\n "],[10,"path"],[14,"d","M16 8C16 7.80109 15.921 7.61032 15.7803 7.46967L12.2803 3.96967C11.9874 3.67678 11.5126 3.67678 11.2197 3.96967C10.9268 4.26256 10.9268 4.73744 11.2197 5.03033L14.1893 8L11.2197 10.9697C10.9268 11.2626 10.9268 11.7374 11.2197 12.0303C11.5126 12.3232 11.9874 12.3232 12.2803 12.0303L15.7803 8.53033C15.921 8.38968 16 8.19891 16 8Z"],[14,"fill","#77838A"],[12],[13],[1,"\\n "],[10,"path"],[14,"d","M0.21967 8.53033C-0.0732233 8.23744 -0.0732233 7.76256 0.21967 7.46967L3.71967 3.96967C4.01256 3.67678 4.48744 3.67678 4.78033 3.96967C5.07322 4.26256 5.07322 4.73744 4.78033 5.03033L1.81066 8L4.78033 10.9697C5.07322 11.2626 5.07322 11.7374 4.78033 12.0303C4.48744 12.3232 4.01256 12.3232 3.71967 12.0303L0.21967 8.53033Z"],[14,"fill","#77838A"],[12],[13],[1,"\\n "],[10,"path"],[14,"d","M5 7C4.44772 7 4 7.44772 4 8C4 8.55229 4.44772 9 5 9H5.01C5.56228 9 6.01 8.55229 6.01 8C6.01 7.44772 5.56228 7 5.01 7H5Z"],[14,"fill","#77838A"],[12],[13],[1,"\\n "],[10,"path"],[14,"d","M7 8C7 7.44772 7.44772 7 8 7H8.01C8.56228 7 9.01 7.44772 9.01 8C9.01 8.55229 8.56228 9 8.01 9H8C7.44772 9 7 8.55229 7 8Z"],[14,"fill","#77838A"],[12],[13],[1,"\\n "],[10,"path"],[14,"d","M11 7C10.4477 7 10 7.44772 10 8C10 8.55229 10.4477 9 11 9H11.01C11.5623 9 12.01 8.55229 12.01 8C12.01 7.44772 11.5623 7 11.01 7H11Z"],[14,"fill","#77838A"],[12],[13],[1,"\\n "],[13],[1,"\\n "],[10,1],[14,0,"consul-node-peer-info__name"],[12],[1,[30,1,["PeerName"]]],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null]],["@item"],false,["if","tooltip"]]',moduleName:"consul-ui/components/consul/node/peer-info/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/node/search-bar/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"u8IgeZRe",block:'[[[8,[39,0],[[24,0,"consul-node-search-bar"],[17,1]],[["@filter"],[[30,2]]],[["status","search","filter","sort"],[[[[1,"\\n\\n"],[44,[[28,[37,2],[[28,[37,3],["components.consul.node.search-bar.",[30,3,["status","key"]]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","key"]]],null],[28,[37,3],["common.consul.",[30,3,["status","key"]]],null]],null]]]],[28,[37,2],[[28,[37,3],["components.consul.node.search-bar.",[30,3,["status","value"]]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","value"]]],null],[28,[37,3],["common.consul.",[30,3,["status","value"]]],null],[28,[37,3],["common.brand.",[30,3,["status","value"]]],null]],null]]]]],[[[1," "],[8,[30,3,["RemoveFilter"]],[[16,"aria-label",[28,[37,2],["common.ui.remove"],[["item"],[[28,[37,3],[[30,4]," ",[30,5]],null]]]]]],null,[["default"],[[[[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,[30,4]],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,5]],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[4,5]]],[1,"\\n "]],[3]],[[[1,"\\n "],[8,[30,6,["Search"]],null,[["@onsearch","@value","@placeholder"],[[28,[37,5],[[30,0],[30,7]],null],[30,8],[28,[37,2],["common.search.search"],null]]],[["default"],[[[[1,"\\n "],[8,[30,6,["Select"]],[[24,0,"type-search-properties"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,2,["searchproperty","change"]]],null],true,true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["common.search.searchproperty"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,9,["Optgroup"]],[30,9,["Option"]]],[[[42,[28,[37,8],[[28,[37,8],[[30,2,["searchproperty","default"]]],null]],null],null,[[[1," "],[8,[30,11],null,[["@value","@selected"],[[30,12],[28,[37,9],[[30,12],[30,2,["searchproperty","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["common.consul.",[28,[37,10],[[30,12]],null]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[12]],null]],[10,11]]],[1," "]],[]]]]],[1,"\\n "]],[9]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]],[[[1,"\\n "],[8,[30,13,["Select"]],[[24,0,"type-status"]],[["@position","@onchange","@multiple"],["left",[28,[37,5],[[30,0],[30,2,["status","change"]]],null],true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["common.consul.status"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,14,["Optgroup"]],[30,14,["Option"]]],[[[42,[28,[37,8],[[28,[37,8],[[28,[37,4],["passing","warning","critical"],null]],null]],null],null,[[[1," "],[8,[30,16],[[16,0,[29,["value-",[30,17]]]]],[["@value","@selected"],[[30,17],[28,[37,9],[[30,17],[30,2,["status","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["common.consul.",[30,17]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,17]],null]],null]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[17]],null]],[15,16]]],[1," "]],[]]]]],[1,"\\n "]],[14]]]]],[1,"\\n "]],[13]],[[[1,"\\n "],[8,[30,18,["Select"]],[[24,0,"type-sort"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,19,["change"]]],null],false,true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n"],[44,[[28,[37,11],[[28,[37,4],[[28,[37,4],["Node:asc",[28,[37,2],["common.sort.alpha.asc"],null]],null],[28,[37,4],["Node:desc",[28,[37,2],["common.sort.alpha.desc"],null]],null],[28,[37,4],["Status:asc",[28,[37,2],["common.sort.status.asc"],null]],null],[28,[37,4],["Status:desc",[28,[37,2],["common.sort.status.desc"],null]],null]],null]],null]],[[[1," "],[1,[28,[35,12],[[30,21],[30,19,["value"]]],null]],[1,"\\n"]],[21]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,20,["Optgroup"]],[30,20,["Option"]]],[[[1," "],[8,[30,22],null,[["@label"],[[28,[37,2],["common.consul.status"],null]]],[["default"],[[[[1,"\\n "],[8,[30,23],null,[["@value","@selected"],["Status:asc",[28,[37,13],["Status:asc",[30,19,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.status.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,23],null,[["@value","@selected"],["Status:desc",[28,[37,13],["Status:desc",[30,19,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.status.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,22],null,[["@label"],[[28,[37,2],["common.consul.node-name"],null]]],[["default"],[[[[1,"\\n "],[8,[30,23],null,[["@value","@selected"],["Node:asc",[28,[37,13],["Node:asc",[30,19,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,23],null,[["@value","@selected"],["Node:desc",[28,[37,13],["Node:desc",[30,19,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[22,23]]],[1," "]],[]]]]],[1,"\\n "]],[20]]]]],[1,"\\n "]],[18]]]]]],["&attrs","@filter","search","key","value","search","@onsearch","@search","components","Optgroup","Option","prop","search","components","Optgroup","Option","state","search","@sort","components","selectable","Optgroup","Option"],false,["search-bar","let","t","concat","array","action","block-slot","each","-track-array","includes","lowercase","from-entries","get","eq"]]',moduleName:"consul-ui/components/consul/node/search-bar/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})) -define("consul-ui/components/consul/nspace/form/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@ember/object"],(function(e,t,n,l,r){var i -function o(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const a=(0,n.createTemplateFactory)({id:"rgTjBVSE",block:'[[[11,0],[24,0,"consul-nspace-form"],[17,1],[12],[1,"\\n "],[8,[39,0],null,[["@sink","@type","@label","@ondelete","@onchange"],[[28,[37,1],["/${partition}/${nspace}/${dc}/nspace",[28,[37,2],null,[["partition","nspace","dc"],["","",[30,2,["Datacenter"]]]]]],null],"nspace","Namespace",[28,[37,3],[[30,0,["onDelete"]],[30,2]],null],[28,[37,3],[[30,0,["onSubmit"]],[30,2]],null]]],[["default"],[[[[1,"\\n "],[8,[39,4],null,[["@name"],["removed"]],[["default"],[[[[1,"\\n "],[8,[39,5],[[4,[38,6],null,[["after"],[[28,[37,7],[[30,0],[30,4]],null]]]]],[["@type"],["remove"]],null],[1,"\\n "]],[4]]]]],[1,"\\n\\n "],[8,[39,4],null,[["@name"],["content"]],[["default"],[[[[1,"\\n\\n"],[44,[[28,[37,9],[[28,[37,10],["write nspaces"],null]],null],[30,2],[28,[37,2],null,[["help","Name"],["Must be a valid DNS hostname. Must contain 1-64 characters (numbers, letters, and hyphens), and must begin with a letter. Once created, this cannot be changed.",[28,[37,11],[[28,[37,2],null,[["test","error"],["^[a-zA-Z0-9]([a-zA-Z0-9-]{0,62}[a-zA-Z0-9])?$","Name must be a valid DNS hostname."]]]],null]]]],[28,[37,2],null,[["Description"],[[28,[37,11],null,null]]]]],[[[1," "],[11,"form"],[4,[38,12],["submit",[28,[37,3],[[30,3,["persist"]],[30,6]],null]],null],[4,[38,13],[[30,5]],null],[12],[1,"\\n\\n "],[8,[39,14],null,[["@src"],[[28,[37,14],["validate"],null]]],[["default"],[[[[1,"\\n\\n "],[10,"fieldset"],[12],[1,"\\n"],[41,[28,[37,16],["new nspace"],[["item"],[[30,6]]]],[[[1," "],[8,[39,17],null,[["@name","@placeholder","@item","@validations","@chart"],["Name","Name",[30,6],[30,7],[28,[37,2],null,[["state","dispatch"],[[30,13],[30,12]]]]]],null],[1,"\\n"]],[]],null],[1," "],[8,[39,17],null,[["@expanded","@name","@label","@item","@validations","@chart"],[true,"Description","Description (Optional)",[30,6],[30,8],[28,[37,2],null,[["state","dispatch"],[[30,13],[30,12]]]]]],null],[1,"\\n "],[13],[1,"\\n"],[41,[28,[37,10],["use acls"],null],[[[1," "],[10,"fieldset"],[14,1,"roles"],[12],[1,"\\n "],[10,"h2"],[12],[1,"Roles"],[13],[1,"\\n "],[10,2],[12],[1,"\\n"],[41,[28,[37,10],["write nspace"],[["item"],[[30,6]]]],[[[1," By adding roles to this namespaces, you will apply them to\\n all tokens created within this namespace.\\n"]],[]],[[[1," The following roles are applied to all tokens created within\\n this namespace.\\n"]],[]]],[1," "],[13],[1,"\\n "],[8,[39,18],null,[["@dc","@nspace","@partition","@disabled","@items"],[[30,14],"default",[30,15],[30,5],[30,6,["ACLs","RoleDefaults"]]]],null],[1,"\\n "],[13],[1,"\\n "],[10,"fieldset"],[14,1,"policies"],[12],[1,"\\n "],[10,"h2"],[12],[1,"Policies"],[13],[1,"\\n "],[10,2],[12],[1,"\\n"],[41,[28,[37,9],[[30,5]],null],[[[1," By adding policies to this namespace, you will apply them to\\n all tokens created within this namespace.\\n"]],[]],[[[1," The following policies are applied to all tokens created\\n within this namespace.\\n"]],[]]],[1," "],[13],[1,"\\n "],[8,[39,19],null,[["@dc","@nspace","@partition","@disabled","@allowIdentity","@items"],[[30,14],"default",[30,15],[30,5],false,[30,6,["ACLs","PolicyDefaults"]]]],null],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1," "],[10,0],[12],[1,"\\n "],[8,[39,20],null,null,[["default"],[[[[1,"\\n"],[41,[28,[37,21],[[28,[37,16],["new nspace"],[["item"],[[30,6]]]],[28,[37,10],["create nspaces"],null]],null],[[[1," "],[8,[39,22],[[16,"disabled",[28,[37,23],[[28,[37,16],["pristine nspace"],[["item"],[[30,6]]]],[28,[37,24],[[30,13],"error"],null]],null]],[24,4,"submit"]],[["@text"],["Save"]],null],[1,"\\n"]],[]],[[[41,[28,[37,10],["write nspace"],[["item"],[[30,6]]]],[[[1," "],[8,[39,22],[[24,4,"submit"]],[["@text"],["Save"]],null],[1,"\\n "]],[]],null]],[]]],[1,"\\n "],[8,[39,22],[[24,4,"reset"],[4,[38,12],["click",[28,[37,3],[[30,0,["onCancel"]],[30,6]],null]],null]],[["@color","@text"],["secondary","Cancel"]],null],[1,"\\n\\n"],[41,[28,[37,21],[[28,[37,9],[[28,[37,16],["new nspace"],[["item"],[[30,6]]]]],null],[28,[37,10],["delete nspace"],[["item"],[[30,6]]]]],null],[[[1," "],[8,[39,25],null,[["@message"],["Are you sure you want to delete this Namespace?"]],[["default"],[[[[1,"\\n "],[8,[39,4],null,[["@name"],["action"]],[["default"],[[[[1,"\\n "],[8,[39,22],[[4,[38,12],["click",[28,[37,3],[[30,16],[28,[37,3],[[30,3,["delete"]],[30,6]],null]],null]],null]],[["@color","@text"],["critical","Delete"]],null],[1,"\\n "]],[16]]]]],[1,"\\n "],[8,[39,4],null,[["@name"],["dialog"]],[["default"],[[[[1,"\\n "],[8,[39,26],null,[["@message","@execute","@cancel"],[[30,19],[30,17],[30,18]]],null],[1,"\\n "]],[17,18,19]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[13],[1,"\\n "]],[9,10,11,12,13]]]]],[1,"\\n "],[13],[1,"\\n"]],[5,6,7,8]]],[1," "]],[]]]]],[1,"\\n "]],[3]]]]],[1,"\\n"],[13]],["&attrs","@item","writer","after","readOnly","item","Name","Description","State","Guard","ChartAction","dispatch","state","@dc","@partition","confirm","execute","cancel","message"],false,["data-writer","uri","hash","fn","block-slot","consul/nspace/notifications","notification","action","let","not","can","array","on","disabled","state-chart","if","is","text-input","role-selector","policy-selector","hds/button-set","and","hds/button","or","state-matches","confirmation-dialog","delete-confirmation"]]',moduleName:"consul-ui/components/consul/nspace/form/index.hbs",isStrictMode:!1}) -let u=(o((i=class extends l.default{onSubmit(e){const t=this.args.onsubmit -if(t)return t(e)}onDelete(e){const{onsubmit:t,ondelete:n}=this.args -return n?n(e):t?t(e):void 0}onCancel(e){const{oncancel:t,onsubmit:n}=this.args -return t?t(e):n?n(e):void 0}}).prototype,"onSubmit",[r.action],Object.getOwnPropertyDescriptor(i.prototype,"onSubmit"),i.prototype),o(i.prototype,"onDelete",[r.action],Object.getOwnPropertyDescriptor(i.prototype,"onDelete"),i.prototype),o(i.prototype,"onCancel",[r.action],Object.getOwnPropertyDescriptor(i.prototype,"onCancel"),i.prototype),i) -e.default=u,(0,t.setComponentTemplate)(a,u)})),define("consul-ui/components/consul/nspace/list/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"HHDNRExj",block:'[[[8,[39,0],[[24,0,"consul-nspace-list"],[17,1]],[["@items","@linkable"],[[30,2],"linkable nspace"]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n"],[41,[30,3,["DeletedAt"]],[[[1," "],[10,2],[12],[1,"\\n Deleting "],[1,[30,3,["Name"]]],[1,"...\\n "],[13],[1,"\\n"]],[]],[[[1," "],[10,3],[15,6,[28,[37,3],["dc.nspaces.edit",[30,3,["Name"]]],null]],[12],[1,[30,3,["Name"]]],[13],[1,"\\n"]],[]]],[1," "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["details"]],[["default"],[[[[1,"\\n"],[41,[30,3,["Description"]],[[[1," "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"Description"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[30,3,["Description"]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[28,[37,4],["CONSUL_ACLS_ENABLED"],null],[[[1," "],[8,[39,5],null,[["@item"],[[30,3]]],null],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n"],[41,[28,[37,6],[[30,3,["DeletedAt"]]],null],[[[1," "],[8,[30,4],null,null,[["default"],[[[[1,"\\n "],[8,[30,5],null,[["@href"],[[28,[37,3],["dc.nspaces.edit",[30,3,["Name"]]],null]]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["label"]],[["default"],[[[[1,"\\n"],[41,[28,[37,7],["write nspace"],[["item"],[[30,3]]]],[[[1," Edit\\n"]],[]],[[[1," View\\n"]],[]]],[1," "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"],[41,[28,[37,7],["delete nspace"],[["item"],[[30,3]]]],[[[1," "],[8,[30,5],[[24,0,"dangerous"]],[["@onclick"],[[28,[37,8],[[30,0],[30,6],[30,3]],null]]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["label"]],[["default"],[[[[1,"\\n Delete\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["confirmation"]],[["default"],[[[[1,"\\n "],[8,[30,7],[[24,0,"warning"]],null,[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n Confirm delete\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n Are you sure you want to delete this namespace?\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["confirm"]],[["default"],[[[[1,"\\n "],[8,[30,8],null,null,[["default"],[[[[1,"Delete"]],[]]]]],[1,"\\n "]],[8]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[7]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[1," "]],[5]]]]],[1,"\\n"]],[]],null],[1," "]],[4]]]]],[1,"\\n"]],[3]]]]]],["&attrs","@items","item","Actions","Action","@ondelete","Confirmation","Confirm"],false,["list-collection","block-slot","if","href-to","env","consul/token/ruleset/list","not","can","action"]]',moduleName:"consul-ui/components/consul/nspace/list/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/nspace/notifications/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"re+qR2Bv",block:'[[[41,[28,[37,1],[[30,1],"remove"],null],[[[1," "],[8,[39,2],[[17,2]],[["@color"],["success"]],[["default"],[[[[1,"\\n "],[8,[30,3,["Title"]],null,null,[["default"],[[[[1,"Success!"]],[]]]]],[1,"\\n "],[8,[30,3,["Description"]],null,null,[["default"],[[[[1,"Your Namespace has been marked for deletion."]],[]]]]],[1,"\\n "]],[3]]]]],[1,"\\n"]],[]],null]],["@type","&attrs","T"],false,["if","eq","hds/toast"]]',moduleName:"consul-ui/components/consul/nspace/notifications/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/nspace/search-bar/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"+U4p2s4N",block:'[[[8,[39,0],[[24,0,"consul-nspace-search-bar"],[17,1]],[["@filter"],[[30,2]]],[["status","search","sort"],[[[[1,"\\n\\n"],[44,[[28,[37,2],[[28,[37,3],["components.consul.nspace.search-bar.",[30,3,["status","key"]]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","key"]]],null],[28,[37,3],["common.consul.",[30,3,["status","key"]]],null]],null]]]],[28,[37,2],[[28,[37,3],["components.consul.nspace.search-bar.",[30,3,["status","value"]]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","value"]]],null],[28,[37,3],["common.consul.",[30,3,["status","value"]]],null],[28,[37,3],["common.brand.",[30,3,["status","value"]]],null]],null]]]]],[[[1," "],[8,[30,3,["RemoveFilter"]],[[16,"aria-label",[28,[37,2],["common.ui.remove"],[["item"],[[28,[37,3],[[30,4]," ",[30,5]],null]]]]]],null,[["default"],[[[[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,[30,4]],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,5]],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[4,5]]],[1,"\\n "]],[3]],[[[1,"\\n "],[8,[30,6,["Search"]],null,[["@onsearch","@value","@placeholder"],[[28,[37,5],[[30,0],[30,7]],null],[30,8],[28,[37,2],["common.search.search"],null]]],[["default"],[[[[1,"\\n "],[8,[30,6,["Select"]],[[24,0,"type-search-properties"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,2,["searchproperty","change"]]],null],true,true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["common.search.searchproperty"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,9,["Optgroup"]],[30,9,["Option"]]],[[[42,[28,[37,8],[[28,[37,8],[[30,2,["searchproperty","default"]]],null]],null],null,[[[1," "],[8,[30,11],null,[["@value","@selected"],[[30,12],[28,[37,9],[[30,12],[30,2,["searchproperty","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["common.consul.",[28,[37,10],[[30,12]],null]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[12]],null]],[10,11]]],[1," "]],[]]]]],[1,"\\n "]],[9]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]],[[[1,"\\n "],[8,[30,13,["Select"]],[[24,0,"type-sort"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,14,["change"]]],null],false,true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n"],[44,[[28,[37,11],[[28,[37,4],[[28,[37,4],["Name:asc",[28,[37,2],["common.sort.alpha.asc"],null]],null],[28,[37,4],["Name:desc",[28,[37,2],["common.sort.alpha.desc"],null]],null]],null]],null]],[[[1," "],[1,[28,[35,12],[[30,16],[30,14,["value"]]],null]],[1,"\\n"]],[16]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,15,["Optgroup"]],[30,15,["Option"]]],[[[1," "],[8,[30,17],null,[["@label"],[[28,[37,2],["common.consul.name"],null]]],[["default"],[[[[1,"\\n "],[8,[30,18],null,[["@value","@selected"],["Name:asc",[28,[37,13],["Name:asc",[30,14,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,18],null,[["@value","@selected"],["Name:desc",[28,[37,13],["Name:desc",[30,14,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[17,18]]],[1," "]],[]]]]],[1,"\\n "]],[15]]]]],[1,"\\n "]],[13]]]]]],["&attrs","@filter","search","key","value","search","@onsearch","@search","components","Optgroup","Option","prop","search","@sort","components","selectable","Optgroup","Option"],false,["search-bar","let","t","concat","array","action","block-slot","each","-track-array","includes","lowercase","from-entries","get","eq"]]',moduleName:"consul-ui/components/consul/nspace/search-bar/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/nspace/selector/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"Sn707Mkm",block:'[[[41,[28,[37,1],["use nspaces"],null],[[[41,[28,[37,1],["choose nspaces"],null],[[[44,[[28,[37,3],[[30,1],"default"],null],[28,[37,4],["dc.nspaces",[30,2,["Name"]]],null]],[[[1," "],[10,"li"],[14,0,"nspaces"],[12],[1,"\\n "],[8,[39,5],[[24,"aria-label","Namespace"]],[["@items"],[[28,[37,6],[[28,[37,7],null,[["Name","href"],["Manage Namespaces",[28,[37,8],["dc.nspaces",[30,2,["Name"]]],null]]]],[28,[37,9],["DeletedAt",[30,5]],null]],null]]],[["default"],[[[[1,"\\n "],[8,[30,6,["Action"]],[[4,[38,10],["click",[30,6,["toggle"]]],null]],null,[["default"],[[[[1,"\\n "],[1,[52,[30,4],"Manage Namespaces",[30,3]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,6,["Menu"]],null,null,[["default"],[[[[1,"\\n"],[41,[28,[37,11],[[30,5,["length"]],0],null],[[[1," "],[8,[39,12],null,[["@src","@onchange"],[[28,[37,13],["/${partition}/*/${dc}/namespaces",[28,[37,7],null,[["partition","dc"],[[30,8],[30,2,["Name"]]]]]],null],[28,[37,14],[[28,[37,15],[[30,9]],null]],null]]],null],[1,"\\n"]],[]],[[[1," "],[8,[39,12],null,[["@src","@onchange"],[[28,[37,13],["/${partition}/*/${dc}/namespaces",[28,[37,7],null,[["partition","dc"],[[30,8],[30,2,["Name"]]]]]],null],[28,[37,14],[[28,[37,15],[[30,9]],null]],null]]],null],[1,"\\n"]],[]]],[1," "],[8,[30,7,["Menu"]],null,null,[["default"],[[[[1,"\\n"],[42,[28,[37,17],[[28,[37,17],[[30,10,["items"]]],null]],null],null,[[[1,"\\n "],[8,[30,10,["Item"]],[[16,"aria-current",[52,[28,[37,3],[[28,[37,18],[[30,4],[30,11,["href"]]],null],[28,[37,18],[[28,[37,19],[[30,4]],null],[28,[37,20],[[30,3],[30,11,["Name"]]],null]],null]],null],"true"]]],null,[["default"],[[[[1,"\\n "],[8,[30,10,["Action"]],[[4,[38,10],["click",[30,6,["close"]]],null]],[["@href"],[[52,[30,11,["href"]],[30,11,["href"]],[52,[30,4],[28,[37,8],["dc.services.index"],[["params"],[[28,[37,7],null,[["partition","nspace","dc"],[[52,[28,[37,11],[[30,8,["length"]],0],null],[30,8],[27]],[30,11,["Name"]],[30,2,["Name"]]]]]]]],[28,[37,8],["."],[["params"],[[28,[37,7],null,[["partition","nspace"],[[52,[28,[37,11],[[30,8,["length"]],0],null],[30,8],[27]],[30,11,["Name"]]]]]]]]]]]],[["default"],[[[[1,"\\n "],[1,[30,11,["Name"]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[11]],null],[1," "]],[10]]]]],[1,"\\n "]],[7]]]]],[1,"\\n "]],[6]]]]],[1,"\\n "],[13],[1,"\\n"]],[3,4]]]],[]],null]],[]],null]],["@nspace","@dc","nspace","isManaging","@nspaces","disclosure","panel","@partition","@onchange","menu","item"],false,["if","can","let","or","is-href","disclosure-menu","append","hash","href-to","reject-by","on","gt","data-source","uri","fn","optional","each","-track-array","and","not","eq"]]',moduleName:"consul-ui/components/consul/nspace/selector/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/partition/form/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"+TwrfeYU",block:'[[[11,0],[24,0,"consul-partition-form"],[17,1],[12],[1,"\\n "],[8,[39,0],null,[["@sink","@type","@label","@ondelete","@onchange"],[[28,[37,1],["/${partition}/${nspace}/${dc}/partition",[28,[37,2],null,[["partition","nspace","dc"],["","",[30,2,["Datacenter"]]]]]],null],"partition","Partition",[28,[37,3],[[52,[30,3],[30,3],[30,4]],[30,2]],null],[28,[37,3],[[28,[37,5],[[30,4]],null],[30,2]],null]]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["removed"]],[["default"],[[[[1,"\\n "],[8,[39,7],[[4,[38,8],null,[["after"],[[28,[37,9],[[30,0],[30,6]],null]]]]],[["@type"],["remove"]],null],[1,"\\n "]],[6]]]]],[1,"\\n\\n "],[8,[39,6],null,[["@name"],["content"]],[["default"],[[[[1,"\\n\\n"],[44,[[28,[37,11],[[28,[37,12],["write partition"],null]],null],[30,2],[28,[37,2],null,[["help","Name"],["Must be a valid DNS hostname. Must contain 1-64 characters (numbers, letters, and hyphens), and must begin with a letter. Once created, this cannot be changed.",[28,[37,13],[[28,[37,2],null,[["test","error"],["^[a-zA-Z0-9]([a-zA-Z0-9-]{0,62}[a-zA-Z0-9])?$","Name must be a valid DNS hostname."]]]],null]]]],[28,[37,2],null,[["Description"],[[28,[37,13],null,null]]]]],[[[11,"form"],[4,[38,14],["submit",[28,[37,3],[[30,5,["persist"]],[30,8]],null]],null],[4,[38,15],[[30,7]],null],[12],[1,"\\n\\n"],[8,[39,16],null,[["@src"],[[28,[37,16],["validate"],null]]],[["default"],[[[[1,"\\n\\n "],[10,"fieldset"],[12],[1,"\\n"],[41,[28,[37,17],["new partition"],[["item"],[[30,8]]]],[[[1," "],[8,[39,18],null,[["@name","@placeholder","@item","@validations","@chart"],["Name","Name",[30,8],[30,9],[28,[37,2],null,[["state","dispatch"],[[30,15],[30,14]]]]]],null],[1,"\\n"]],[]],null],[1," "],[8,[39,18],null,[["@expanded","@name","@label","@item","@validations","@chart"],[true,"Description","Description (Optional)",[30,8],[30,10],[28,[37,2],null,[["state","dispatch"],[[30,15],[30,14]]]]]],null],[1,"\\n "],[13],[1,"\\n\\n "],[10,0],[12],[1,"\\n "],[8,[39,19],null,null,[["default"],[[[[1,"\\n\\n\\n"],[41,[28,[37,20],[[28,[37,17],["new partition"],[["item"],[[30,8]]]],[28,[37,12],["create partitions"],null]],null],[[[1," "],[8,[39,21],[[16,"disabled",[28,[37,22],[[28,[37,17],["pristine partition"],[["item"],[[30,8]]]],[28,[37,23],[[30,15],"error"],null]],null]],[24,4,"submit"]],[["@text"],["Save"]],null],[1,"\\n"]],[]],[[[41,[28,[37,11],[[30,7]],null],[[[1," "],[8,[39,21],[[24,4,"submit"]],[["@text"],["Save"]],null],[1,"\\n"]],[]],null]],[]]],[1," "],[8,[39,21],[[24,4,"reset"],[4,[38,14],["click",[52,[30,16],[28,[37,3],[[28,[37,5],[[30,16],[30,8]],null]],null],[28,[37,3],[[28,[37,5],[[30,4],[30,8]],null]],null]]],null]],[["@text","@color"],["Cancel","secondary"]],null],[1,"\\n\\n"],[41,[28,[37,20],[[28,[37,11],[[28,[37,17],["new partition"],[["item"],[[30,8]]]]],null],[28,[37,12],["delete partition"],[["item"],[[30,8]]]]],null],[[[1," "],[8,[39,24],null,[["@message"],["Are you sure you want to delete this Partition?"]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["action"]],[["default"],[[[[1,"\\n "],[8,[39,21],[[4,[38,14],["click",[28,[37,3],[[30,17],[28,[37,3],[[30,5,["delete"]],[30,8]],null]],null]],null]],[["@text","@color"],["Delete","critical"]],null],[1,"\\n "]],[17]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["dialog"]],[["default"],[[[[1,"\\n "],[8,[39,25],null,[["@message","@execute","@cancel"],[[30,20],[30,18],[30,19]]],null],[1,"\\n "]],[18,19,20]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[13],[1,"\\n\\n"]],[11,12,13,14,15]]]]],[1,"\\n"],[13],[1,"\\n\\n"]],[7,8,9,10]]],[1," "]],[]]]]],[1,"\\n"]],[5]]]]],[1,"\\n"],[13],[1,"\\n"]],["&attrs","@item","@ondelete","@onsubmit","writer","after","readOnly","item","Name","Description","State","Guard","ChartAction","dispatch","state","@oncancel","confirm","execute","cancel","message"],false,["data-writer","uri","hash","fn","if","optional","block-slot","consul/partition/notifications","notification","action","let","not","can","array","on","disabled","state-chart","is","text-input","hds/button-set","and","hds/button","or","state-matches","confirmation-dialog","delete-confirmation"]]',moduleName:"consul-ui/components/consul/partition/form/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/partition/list/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"VkpAwQ51",block:'[[[8,[39,0],[[24,0,"consul-partition-list"],[17,1]],[["@items","@linkable"],[[30,2],"linkable partition"]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n"],[41,[30,3,["DeletedAt"]],[[[1," "],[10,2],[12],[1,"\\n Deleting "],[1,[30,3,["Name"]]],[1,"...\\n "],[13],[1,"\\n"]],[]],[[[1," "],[10,3],[15,6,[28,[37,3],["dc.partitions.edit",[30,3,["Name"]]],null]],[12],[1,[30,3,["Name"]]],[13],[1,"\\n"]],[]]],[1," "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["details"]],[["default"],[[[[1,"\\n"],[41,[30,3,["Description"]],[[[1," "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"Description"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[30,3,["Description"]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n"],[41,[28,[37,4],[[30,3,["DeletedAt"]]],null],[[[1," "],[8,[30,4],null,null,[["default"],[[[[1,"\\n "],[8,[30,5],null,[["@href"],[[28,[37,3],["dc.partitions.edit",[30,3,["Name"]]],null]]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["label"]],[["default"],[[[[1,"\\n"],[41,[28,[37,5],["write partition"],[["item"],[[30,3]]]],[[[1," Edit\\n"]],[]],[[[1," View\\n"]],[]]],[1," "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"],[41,[28,[37,5],["delete partition"],[["item"],[[30,3]]]],[[[1," "],[8,[30,5],[[24,0,"dangerous"]],[["@onclick"],[[28,[37,6],[[30,0],[30,6],[30,3]],null]]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["label"]],[["default"],[[[[1,"\\n Delete\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["confirmation"]],[["default"],[[[[1,"\\n "],[8,[30,7],[[24,0,"warning"]],null,[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n Confirm delete\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n Are you sure you want to delete this partition?\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["confirm"]],[["default"],[[[[1,"\\n "],[8,[30,8],null,null,[["default"],[[[[1,"Delete"]],[]]]]],[1,"\\n "]],[8]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[7]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[1," "]],[5]]]]],[1,"\\n"]],[]],null],[1," "]],[4]]]]],[1,"\\n"]],[3]]]]],[1,"\\n"]],["&attrs","@items","item","Actions","Action","@ondelete","Confirmation","Confirm"],false,["list-collection","block-slot","if","href-to","not","can","action"]]',moduleName:"consul-ui/components/consul/partition/list/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/partition/notifications/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"Rj1t1uFE",block:'[[[41,[28,[37,1],[[30,1],"remove"],null],[[[1," "],[8,[39,2],[[17,2]],[["@color"],["success"]],[["default"],[[[[1,"\\n "],[8,[30,3,["Title"]],null,null,[["default"],[[[[1,"Success!"]],[]]]]],[1,"\\n "],[8,[30,3,["Description"]],null,null,[["default"],[[[[1,"\\n Your Partition has been marked for deletion.\\n "]],[]]]]],[1,"\\n "]],[3]]]]],[1,"\\n"]],[]],null]],["@type","&attrs","T"],false,["if","eq","hds/toast"]]',moduleName:"consul-ui/components/consul/partition/notifications/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/partition/search-bar/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"zU7wyufj",block:'[[[8,[39,0],[[24,0,"consul-partition-search-bar"],[17,1]],[["@filter"],[[30,2]]],[["status","search","sort"],[[[[1,"\\n\\n"],[44,[[28,[37,2],[[28,[37,3],["components.consul.nspace.search-bar.",[30,3,["status","key"]]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","key"]]],null],[28,[37,3],["common.consul.",[30,3,["status","key"]]],null]],null]]]],[28,[37,2],[[28,[37,3],["components.consul.nspace.search-bar.",[30,3,["status","value"]]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","value"]]],null],[28,[37,3],["common.consul.",[30,3,["status","value"]]],null],[28,[37,3],["common.brand.",[30,3,["status","value"]]],null]],null]]]]],[[[1," "],[8,[30,3,["RemoveFilter"]],[[16,"aria-label",[28,[37,2],["common.ui.remove"],[["item"],[[28,[37,3],[[30,4]," ",[30,5]],null]]]]]],null,[["default"],[[[[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,[30,4]],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,5]],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[4,5]]],[1,"\\n "]],[3]],[[[1,"\\n "],[8,[30,6,["Search"]],null,[["@onsearch","@value","@placeholder"],[[28,[37,5],[[30,0],[30,7]],null],[30,8],[28,[37,2],["common.search.search"],null]]],[["default"],[[[[1,"\\n "],[8,[30,6,["Select"]],[[24,0,"type-search-properties"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,2,["searchproperty","change"]]],null],true,true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["common.search.searchproperty"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,9,["Optgroup"]],[30,9,["Option"]]],[[[42,[28,[37,8],[[28,[37,8],[[30,2,["searchproperty","default"]]],null]],null],null,[[[1," "],[8,[30,11],null,[["@value","@selected"],[[30,12],[28,[37,9],[[30,12],[30,2,["searchproperty","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["common.consul.",[28,[37,10],[[30,12]],null]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[12]],null]],[10,11]]],[1," "]],[]]]]],[1,"\\n "]],[9]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]],[[[1,"\\n "],[8,[30,13,["Select"]],[[24,0,"type-sort"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,14,["change"]]],null],false,true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n"],[44,[[28,[37,11],[[28,[37,4],[[28,[37,4],["Name:asc",[28,[37,2],["common.sort.alpha.asc"],null]],null],[28,[37,4],["Name:desc",[28,[37,2],["common.sort.alpha.desc"],null]],null]],null]],null]],[[[1," "],[1,[28,[35,12],[[30,16],[30,14,["value"]]],null]],[1,"\\n"]],[16]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,15,["Optgroup"]],[30,15,["Option"]]],[[[1," "],[8,[30,17],null,[["@label"],[[28,[37,2],["common.consul.name"],null]]],[["default"],[[[[1,"\\n "],[8,[30,18],null,[["@value","@selected"],["Name:asc",[28,[37,13],["Name:asc",[30,14,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,18],null,[["@value","@selected"],["Name:desc",[28,[37,13],["Name:desc",[30,14,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[17,18]]],[1," "]],[]]]]],[1,"\\n "]],[15]]]]],[1,"\\n "]],[13]]]]]],["&attrs","@filter","search","key","value","search","@onsearch","@search","components","Optgroup","Option","prop","search","@sort","components","selectable","Optgroup","Option"],false,["search-bar","let","t","concat","array","action","block-slot","each","-track-array","includes","lowercase","from-entries","get","eq"]]',moduleName:"consul-ui/components/consul/partition/search-bar/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/partition/selector/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"GPyi0nAM",block:'[[[44,[[28,[37,1],[[30,1],"default"],null],[28,[37,2],["dc.partitions",[30,2,["Name"]]],null]],[[[41,[28,[37,4],["choose partitions"],[["dc"],[[30,2]]]],[[[1," "],[10,"li"],[14,0,"partitions"],[12],[1,"\\n "],[8,[39,5],[[24,"aria-label","Admin Partition"]],[["@items"],[[28,[37,6],[[28,[37,7],null,[["Name","href"],["Manage Partitions",[28,[37,8],["dc.partitions",[30,2,["Name"]]],null]]]],[28,[37,9],["DeletedAt",[30,5]],null]],null]]],[["default"],[[[[1,"\\n "],[8,[30,6,["Action"]],[[4,[38,10],["click",[30,6,["toggle"]]],null]],null,[["default"],[[[[1,"\\n "],[1,[52,[30,4],"Manage Partition",[30,3]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,6,["Menu"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,11],null,[["@src","@onchange"],[[28,[37,12],["/*/*/${dc}/partitions",[28,[37,7],null,[["dc"],[[30,2,["Name"]]]]]],null],[28,[37,13],[[28,[37,14],[[30,8]],null]],null]]],null],[1,"\\n "],[8,[30,7,["Menu"]],null,null,[["default"],[[[[1,"\\n"],[42,[28,[37,16],[[28,[37,16],[[30,9,["items"]]],null]],null],null,[[[1," "],[8,[30,9,["Item"]],[[16,"aria-current",[52,[28,[37,1],[[28,[37,17],[[30,4],[30,10,["href"]]],null],[28,[37,17],[[28,[37,18],[[30,4]],null],[28,[37,19],[[30,3],[30,10,["Name"]]],null]],null]],null],"true"]]],null,[["default"],[[[[1,"\\n "],[8,[30,9,["Action"]],[[4,[38,10],["click",[30,6,["close"]]],null]],[["@href"],[[52,[30,10,["href"]],[30,10,["href"]],[52,[30,4],[28,[37,8],["dc.services.index"],[["params"],[[28,[37,7],null,[["partition","nspace","dc"],[[30,10,["Name"]],[27],[30,2,["Name"]]]]]]]],[28,[37,8],["."],[["params"],[[28,[37,7],null,[["partition","nspace"],[[30,10,["Name"]],[27]]]]]]]]]]],[["default"],[[[[1,"\\n "],[1,[30,10,["Name"]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[10]],null],[1," "]],[9]]]]],[1,"\\n "]],[7]]]]],[1,"\\n "]],[6]]]]],[1,"\\n "],[13],[1,"\\n"]],[]],[[[1," "],[10,"li"],[14,0,"partition"],[14,"aria-label","Admin Partition"],[12],[1,"\\n "],[1,"default"],[1,"\\n "],[13],[1,"\\n"]],[]]]],[3,4]]]],["@partition","@dc","partition","isManaging","@partitions","disclosure","panel","@onchange","menu","item"],false,["let","or","is-href","if","can","disclosure-menu","append","hash","href-to","reject-by","on","data-source","uri","fn","optional","each","-track-array","and","not","eq"]]',moduleName:"consul-ui/components/consul/partition/selector/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/peer/address/list/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"pSmtNtNJ",block:'[[[8,[39,0],null,null,[["default"],[[[[1,"\\n"],[41,[30,1,["data","height"]],[[[1," "],[10,0],[15,5,[30,1,["data","fillRemainingHeightStyle"]]],[14,0,"overflow-y-scroll"],[12],[1,"\\n "],[8,[39,2],null,[["@tagName","@estimateHeight","@items"],["ul",[30,1,["data","height"]],[30,2]]],[["default"],[[[[1,"\\n "],[10,"li"],[14,0,"px-3 h-12 border-bottom-primary flex items-center justify-between group"],[12],[1,"\\n "],[10,0],[14,0,"hds-typography-display-300 text-hds-foreground-strong hds-font-weight-semibold"],[12],[1,[30,3]],[13],[1,"\\n "],[8,[39,3],[[24,0,"opacity-0 group-hover:opacity-100"]],[["@value","@name"],[[30,3],"Address"]],null],[1,"\\n "],[13],[1,"\\n "]],[3,4]]]]],[1,"\\n "],[13],[1,"\\n"]],[]],null]],[1]]]]]],["p","@items","address","index"],false,["providers/dimension","if","vertical-collection","copy-button"]]',moduleName:"consul-ui/components/consul/peer/address/list/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/peer/bento-box/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"H9CcvCNn",block:'[[[8,[39,0],[[24,0,"mt-6 mb-3"]],[["@level","@hasBorder"],["base",true]],[["default"],[[[[1,"\\n "],[10,0],[14,0,"flex h-24 p-6 overflow-x-auto space-x-12"],[12],[1,"\\n "],[10,0],[14,0,"shrink-0"],[12],[1,"\\n "],[10,0],[14,0,"mb-2 hds-typography-body-200 hds-font-weight-semibold hds-foreground-primary"],[12],[1,"Status"],[13],[1,"\\n "],[10,0],[14,0,"flex items-center"],[12],[1,"\\n "],[8,[39,1],null,[["@peering"],[[30,1]]],null],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[10,0],[14,0,"shrink-0"],[12],[1,"\\n "],[10,0],[14,0,"hds-typography-body-200 mb-2 hds-font-weight-semibold hds-foreground-primary"],[12],[1,"Latest heartbeat"],[13],[1,"\\n "],[10,0],[14,0,"flex items-center"],[12],[1,"\\n"],[41,[30,1,["LastHeartbeat"]],[[[44,[[28,[37,4],[[30,1,["LastHeartbeat"]]],null]],[[[1," "],[8,[39,5],[[24,0,"mr-0.5"]],[["@name","@color"],["activity","var(--token-color-foreground-faint)"]],null],[1,"\\n"],[41,[30,2,["isNearDate"]],[[[1," "],[11,1],[4,[38,6],[[30,2,["friendly"]]],null],[12],[1,[30,2,["relative"]]],[13],[1,"\\n"]],[]],[[[1," "],[10,1],[12],[1,[30,2,["friendly"]]],[13],[1,"\\n"]],[]]]],[2]]]],[]],[[[1," "],[10,1],[12],[1,"None yet"],[13],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n "],[13],[1,"\\n "],[10,0],[14,0,"shrink-0"],[12],[1,"\\n "],[10,0],[14,0,"mb-2 hds-typography-body-200 hds-font-weight-semibold hds-foreground-primary"],[12],[1,"Latest receipt"],[13],[1,"\\n "],[10,0],[14,0,"flex items-center"],[12],[1,"\\n"],[41,[30,1,["LastReceive"]],[[[44,[[28,[37,4],[[30,1,["LastReceive"]]],null]],[[[41,[30,3,["isNearDate"]],[[[1," "],[11,1],[4,[38,6],[[30,3,["friendly"]]],null],[12],[1,[30,3,["relative"]]],[13],[1,"\\n"]],[]],[[[1," "],[10,1],[12],[1,[30,3,["friendly"]]],[13],[1,"\\n"]],[]]]],[3]]]],[]],[[[1," "],[10,1],[12],[1,"None yet"],[13],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n "],[13],[1,"\\n "],[10,0],[14,0,"shrink-0"],[12],[1,"\\n "],[10,0],[14,0,"mb-2 hds-typography-body-200 hds-font-weight-semibold hds-foreground-primary"],[12],[1,"Latest send"],[13],[1,"\\n "],[10,0],[14,0,"flex items-center"],[12],[1,"\\n"],[41,[30,1,["LastSend"]],[[[44,[[28,[37,4],[[30,1,["LastSend"]]],null]],[[[41,[30,4,["isNearDate"]],[[[1," "],[11,1],[4,[38,6],[[30,4,["friendly"]]],null],[12],[1,[30,4,["relative"]]],[13],[1,"\\n"]],[]],[[[1," "],[10,1],[12],[1,[30,4,["friendly"]]],[13],[1,"\\n"]],[]]]],[4]]]],[]],[[[1," "],[10,1],[12],[1,"None yet"],[13],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]]]]]],["@peering","smartDate","smartDate","smartDate"],false,["hds/card/container","peerings/badge","if","let","smart-date-format","flight-icon","tooltip"]]',moduleName:"consul-ui/components/consul/peer/bento-box/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/peer/form/chart.xstate",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={id:"consul-peer-form",initial:"generate",on:{INITIATE:[{target:"initiate"}],GENERATE:[{target:"generate"}]},states:{initiate:{},generate:{}}}})),define("consul-ui/components/consul/peer/form/generate/actions/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"3YYkPKep",block:'[[[8,[39,0],[[16,"form",[30,1]],[24,4,"submit"],[16,"disabled",[28,[37,1],[[28,[37,2],[[30,2,["Name","length"]],0],null]],null]],[17,3]],[["@text"],["Generate token"]],null]],["@id","@item","&attrs"],false,["hds/button","or","eq"]]',moduleName:"consul-ui/components/consul/peer/form/generate/actions/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/peer/form/generate/chart.xstate",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={id:"consul-peer-generate-form",initial:"idle",states:{idle:{on:{LOAD:{target:"loading"}}},loading:{on:{SUCCESS:{target:"success"},ERROR:{target:"error"}}},success:{on:{RESET:{target:"idle"}}},error:{}}}})),define("consul-ui/components/consul/peer/form/generate/fieldsets/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@ember/object"],(function(e,t,n,l,r){var i -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const o=(0,n.createTemplateFactory)({id:"NcmZNT1t",block:'[[[11,0],[16,0,[28,[37,0],["consul-peer-form-generate-fieldsets"],null]],[17,1],[12],[1,"\\n "],[8,[39,1],null,[["@src"],[[28,[37,2],["/machines/validate.xstate"],[["from"],["/components/consul/peer/form/generate/fieldsets"]]]]],[["default"],[[[[1,"\\n"],[44,[[28,[37,4],null,[["help","Name"],[[28,[37,5],[[28,[37,6],["common.validations.dns-hostname.help"],null],[28,[37,6],["common.validations.immutable.help"],null]],null],[28,[37,7],[[28,[37,4],null,[["test","error"],[[28,[37,6],["common.validations.dns-hostname.test"],null],[28,[37,6],["common.validations.dns-hostname.error"],[["name"],["Name"]]]]]]],null]]]]],[[[1," "],[10,"fieldset"],[12],[1,"\\n "],[8,[39,8],null,[["@label","@name","@item","@validations","@chart","@oninput"],[[28,[37,6],["components.consul.peer.generate.name"],null],"Name",[30,4],[30,3],[30,2],[28,[37,9],["target.value",[28,[37,10],[[30,4],"Name"],null]],null]]],null],[1,"\\n "],[18,6,[[28,[37,4],null,[["valid"],[[28,[37,12],[[28,[37,13],[[30,2,["state"]],"error"],null]],null]]]]]],[1,"\\n "],[13],[1,"\\n\\n"]],[3]]],[1,"\\n"],[44,[[28,[37,4],null,[["help"],[[28,[37,6],["common.validations.server-external-addresses.help"],null]]]]],[[[1," "],[10,"fieldset"],[12],[1,"\\n "],[8,[39,8],null,[["@label","@name","@item","@chart","@validations","@oninput"],[[28,[37,6],["components.consul.peer.generate.addresses"],null],"ServerExternalAddresses",[30,4],[30,2],[30,5],[28,[37,9],["target.value",[30,0,["onInput"]]],null]]],null],[1,"\\n "],[18,6,[[28,[37,4],null,[["valid"],[[28,[37,12],[[28,[37,13],[[30,2,["state"]],"error"],null]],null]]]]]],[1,"\\n "],[13],[1,"\\n\\n"]],[5]]],[1," "]],[2]]]]],[1,"\\n"],[13],[1,"\\n"]],["&attrs","fsm","Name","@item","ServerExternalAddresses","&default"],false,["class-map","state-machine","require","let","hash","concat","t","array","text-input","pick","set","yield","not","state-matches"]]',moduleName:"consul-ui/components/consul/peer/form/generate/fieldsets/index.hbs",isStrictMode:!1}) -let a=(i=class extends l.default{onInput(e){e=e?e.split(",").map((e=>e.trim())):[],this.args.item.ServerExternalAddresses=e}},u=i.prototype,s="onInput",c=[r.action],d=Object.getOwnPropertyDescriptor(i.prototype,"onInput"),p=i.prototype,f={},Object.keys(d).forEach((function(e){f[e]=d[e]})),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=c.slice().reverse().reduce((function(e,t){return t(u,s,e)||e}),f),p&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(p):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(u,s,f),f=null),i) -var u,s,c,d,p,f -e.default=a,(0,t.setComponentTemplate)(o,a)})),define("consul-ui/components/consul/peer/form/generate/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"s3NJojfR",block:'[[[11,0],[16,0,[28,[37,0],["consul-peer-form-generate"],null]],[17,1],[12],[1,"\\n "],[8,[39,1],null,[["@src","@initial"],[[28,[37,2],["./chart.xstate"],[["from"],["/components/consul/peer/form/generate"]]],[52,[30,2],"loading","idle"]]],[["default"],[[[[1,"\\n\\n"],[44,[[28,[37,5],null,null]],[[[1," "],[11,"form"],[16,1,[30,4]],[4,[38,6],["submit",[28,[37,7],[[30,3,["dispatch"]],"LOAD"],null]],null],[12],[1,"\\n\\n "],[8,[30,3,["State"]],null,[["@matches"],[[28,[37,8],["idle","error"],null]]],[["default"],[[[[1,"\\n "],[8,[30,3,["State"]],null,[["@matches"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,9],[[24,0,"mb-3 mt-2"]],[["@type"],["critical"]],[["default"],[[[[1,"\\n "],[8,[30,6,["Title"]],null,null,[["default"],[[[[1,"Error"]],[]]]]],[1,"\\n "],[8,[30,6,["Description"]],null,null,[["default"],[[[[1,[30,3,["state","context","error","message"]]]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[18,9,[[28,[37,11],null,[["Fieldsets","Actions"],[[50,"consul/peer/form/generate/fieldsets",0,null,[["item"],[[30,7]]]],[50,"consul/peer/form/generate/actions",0,null,[["item","id"],[[30,7],[30,4]]]]]]]]],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[30,3,["State"]],null,[["@matches"],["loading"]],[["default"],[[[[1,"\\n "],[8,[39,13],null,[["@src","@onchange","@onerror"],[[28,[37,14],["/${partition}/${nspace}/${dc}/peering/token-for/${name}/${externalAddresses}",[28,[37,11],null,[["partition","nspace","dc","name","externalAddresses"],[[30,7,["Partition"]],"",[30,7,["Datacenter"]],[30,7,["Name"]],[30,7,["ServerExternalAddresses"]]]]]],null],[28,[37,15],[[30,8],[28,[37,16],["data",[28,[37,7],[[30,3,["dispatch"]],"SUCCESS"],null]],null]],null],[28,[37,15],[[28,[37,7],[[30,3,["dispatch"]],"ERROR"],null]],null]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[30,3,["State"]],null,[["@matches"],["success"]],[["default"],[[[[1,"\\n "],[18,9,[[28,[37,11],null,[["Fieldsets","Actions"],[[50,"consul/peer/form/token/fieldsets",0,null,[["item","token","regenerate","onclick"],[[30,7],[30,3,["state","context","PeeringToken"]],[30,2],[28,[37,15],[[28,[37,17],[[30,7],"Name",""],null],[28,[37,7],[[30,3,["dispatch"]],"RESET"],null]],null]]]],[50,"consul/peer/form/token/actions",0,null,[["token","item","id"],[[30,3,["state","context","PeeringToken"]],[30,7],[30,4]]]]]]]]],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[13],[1,"\\n"]],[4,5]]],[1,"\\n "]],[3]]]]],[1,"\\n"],[13],[1,"\\n"]],["&attrs","@regenerate","fsm","id","reset","A","@item","@onchange","&default"],false,["class-map","state-machine","require","if","let","unique-id","on","fn","array","hds/alert","yield","hash","component","data-source","uri","queue","pick","set"]]',moduleName:"consul-ui/components/consul/peer/form/generate/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/peer/form/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"5/r0PDQY",block:'[[[11,0],[16,0,[28,[37,0],["consul-peer-form"],null]],[17,1],[12],[1,"\\n "],[8,[39,1],null,[["@src"],[[28,[37,2],["./chart.xstate"],[["from"],["/components/consul/peer/form"]]]]],[["default"],[[[[1,"\\n\\n "],[8,[39,3],null,[["@items","@onTabClicked"],[[28,[37,4],[[28,[37,5],null,[["label","selected","state"],[[28,[37,6],["components.consul.peer.form.generate-label"],null],[28,[37,7],[[30,2,["state"]],"generate"],null],"GENERATE"]]],[28,[37,5],null,[["label","selected","state"],[[28,[37,6],["components.consul.peer.form.establish-label"],null],[28,[37,7],[[30,2,["state"]],"initiate"],null],"INITIATE"]]]],null],[28,[37,8],["state",[30,2,["dispatch"]]],null]]],null],[1,"\\n\\n "],[8,[30,2,["State"]],null,[["@matches"],[[28,[37,4],["generate"],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,9],null,[["@src"],[[28,[37,10],["/${partition}/${nspace}/${dc}/peer-generate/",[30,3]],null]]],[["default"],[[[[1,"\\n "],[18,6,[[28,[37,5],null,[["Form"],[[50,"consul/peer/form/generate",0,null,[["item"],[[30,4,["data"]]]]]]]]]],[1,"\\n "]],[4]]]]],[1,"\\n\\n "]],[]]]]],[1,"\\n\\n "],[8,[30,2,["State"]],null,[["@matches"],["initiate"]],[["default"],[[[[1,"\\n\\n "],[8,[39,9],null,[["@src"],[[28,[37,10],["/${partition}/${nspace}/${dc}/peer-initiate/",[30,3]],null]]],[["default"],[[[[1,"\\n "],[18,6,[[28,[37,5],null,[["Form"],[[50,"consul/peer/form/initiate",0,null,[["item"],[[30,5,["data"]]]]]]]]]],[1,"\\n "]],[5]]]]],[1,"\\n\\n "]],[]]]]],[1,"\\n\\n "]],[2]]]]],[1,"\\n"],[13],[1,"\\n"]],["&attrs","fsm","@params","source","source","&default"],false,["class-map","state-machine","require","tab-nav","array","hash","t","state-matches","pick","data-source","uri","yield","component"]]',moduleName:"consul-ui/components/consul/peer/form/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/peer/form/initiate/actions/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"ShUcgNKi",block:'[[[8,[39,0],[[16,"form",[30,1]],[24,4,"submit"],[17,2]],[["@text"],["Add peer"]],null]],["@id","&attrs"],false,["hds/button"]]',moduleName:"consul-ui/components/consul/peer/form/initiate/actions/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/peer/form/initiate/fieldsets/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"I08SZDBv",block:'[[[11,0],[16,0,[28,[37,0],["consul-peer-form-initiate-fieldsets"],null]],[17,1],[12],[1,"\\n"],[44,[[28,[37,2],null,[["help","Name"],["Enter a name to locally identify the new peer.",[28,[37,3],[[28,[37,2],null,[["test","error"],[[28,[37,4],["common.validations.dns-hostname.test"],null],[28,[37,4],["common.validations.dns-hostname.error"],[["name"],["Name"]]]]]]],null]]]],[28,[37,2],null,[["help","PeeringToken"],["Enter the token received from the operator of the desired peer.",[28,[37,3],null,null]]]]],[[[1," "],[10,2],[12],[1,"\\n Enter a token generated in the desired peer.\\n "],[13],[1,"\\n "],[8,[39,5],null,[["@src"],[[28,[37,6],["/machines/validate.xstate"],[["from"],["/components/consul/peer/form/generate/fieldsets"]]]]],[["default"],[[[[1,"\\n\\n "],[10,"fieldset"],[12],[1,"\\n "],[8,[39,7],null,[["@name","@label","@item","@validations","@chart"],["Name","Name of peer",[30,5],[30,2],[30,4]]],null],[1,"\\n "],[8,[39,7],null,[["@expanded","@name","@item","@validations","@chart"],[true,"Token",[30,5],[30,3],[30,4]]],null],[1,"\\n "],[18,6,[[28,[37,2],null,[["valid"],[[28,[37,9],[[28,[37,10],[[30,4,["state"]],"error"],null]],null]]]]]],[1,"\\n "],[13],[1,"\\n\\n "]],[4]]]]],[1,"\\n"]],[2,3]]],[13],[1,"\\n"]],["&attrs","Name","PeeringToken","fsm","@item","&default"],false,["class-map","let","hash","array","t","state-machine","require","text-input","yield","not","state-matches"]]',moduleName:"consul-ui/components/consul/peer/form/initiate/fieldsets/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/peer/form/initiate/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"xAGGr6Ec",block:'[[[11,0],[16,0,[28,[37,0],["consul-peer-form-initiate"],null]],[17,1],[12],[1,"\\n "],[8,[39,1],null,[["@sink","@type","@label","@onchange"],[[28,[37,2],["/${partition}/${nspace}/${dc}/peer",[28,[37,3],null,[["partition","nspace","dc"],[[28,[37,4],[[30,2,["Partition"]],""],null],[28,[37,4],[[30,2,["Namespace"]],""],null],[28,[37,4],[[30,2,["Datacenter"]],""],null]]]]],null],"peer","peer",[28,[37,5],[[28,[37,6],[[30,3]],null],[30,2]],null]]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,8],[[24,0,"mb-3 mt-2"]],[["@type"],["critical"]],[["default"],[[[[1,"\\n "],[8,[30,7,["Title"]],null,null,[["default"],[[[[1,"Error"]],[]]]]],[1,"\\n "],[8,[30,7,["Description"]],null,null,[["default"],[[[[1,[30,6,["message"]]]],[]]]]],[1,"\\n "]],[7]]]]],[1,"\\n "]],[5,6]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["content"]],[["default"],[[[[1,"\\n"],[44,[[28,[37,10],null,null]],[[[1," "],[11,"form"],[16,1,[30,8]],[4,[38,11],["submit",[28,[37,5],[[30,4,["persist"]],[30,2]],null]],null],[12],[1,"\\n "],[18,9,[[28,[37,3],null,[["Fieldsets","Actions"],[[50,"consul/peer/form/initiate/fieldsets",0,null,[["item"],[[30,2]]]],[50,"consul/peer/form/initiate/actions",0,null,[["item","id"],[[30,2],[30,8]]]]]]]]],[1,"\\n "],[13],[1,"\\n"]],[8]]],[1," "]],[]]]]],[1,"\\n "]],[4]]]]],[1,"\\n"],[13]],["&attrs","@item","@onsubmit","writer","after","error","A","id","&default"],false,["class-map","data-writer","uri","hash","or","fn","optional","block-slot","hds/alert","let","unique-id","on","yield","component"]]',moduleName:"consul-ui/components/consul/peer/form/initiate/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/peer/form/token/actions/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"flM3VZCN",block:'[[[11,0],[17,1],[12],[1,"\\n "],[8,[39,0],null,null,[["default"],[[[[1,"\\n "],[8,[39,1],[[17,1],[4,[38,2],[[30,2]],null]],[["@text","@color"],["Copy token","primary"]],null],[1,"\\n "],[8,[39,1],[[24,4,"reset"],[4,[38,3],["click",[30,3]],null]],[["@text","@color"],["Close","secondary"]],null],[1,"\\n "]],[]]]]],[1,"\\n"],[13],[1,"\\n"]],["&attrs","@token","@onclose"],false,["hds/button-set","hds/button","with-copyable","on"]]',moduleName:"consul-ui/components/consul/peer/form/token/actions/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/peer/form/token/fieldsets/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"u1kd86tb",block:'[[[41,[30,1],[[[1," "],[10,2],[12],[1,"\\n Token regenerated! Here’s what’s next:\\n "],[13],[1,"\\n"]],[]],[[[1," "],[10,2],[12],[1,"\\n Token generated! Here’s what’s next:\\n "],[13],[1,"\\n"]],[]]],[1," "],[10,"ol"],[12],[1,"\\n "],[10,"li"],[12],[1,"\\n "],[10,"strong"],[12],[1,"Copy the token"],[13],[10,"br"],[12],[13],[1,"\\n This token cannot be viewed again after creation.\\n "],[10,"br"],[12],[13],[1,"\\n "],[8,[39,1],null,[["@value","@name"],[[30,2],"Token"]],null],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[12],[1,"\\n "],[10,"strong"],[12],[1,"Switch to the peer"],[13],[10,"br"],[12],[13],[1,"\\n Someone on your team should log into the Datacenter (OSS) or Admin Partition (Enterprise) that you want this one to connect with.\\n "],[13],[1,"\\n "],[10,"li"],[12],[1,"\\n "],[10,"strong"],[12],[1,"Initiate the peering"],[13],[10,"br"],[12],[13],[1,"\\n From there, initiate a new peering, name it, and paste this token in.\\n "],[13],[1,"\\n "],[13],[1,"\\n"],[41,[28,[37,2],[[30,1]],null],[[[1," "],[8,[39,3],[[24,4,"reset"],[4,[38,4],["click",[30,3]],null]],[["@text","@color"],["Generate another token","secondary"]],null],[1,"\\n"]],[]],null],[1,"\\n"]],["@regenerate","@token","@onclick"],false,["if","copyable-code","not","hds/button","on"]]',moduleName:"consul-ui/components/consul/peer/form/token/fieldsets/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/peer/info/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"OgBqwHXm",block:'[[[41,[30,1,["PeerName"]],[[[1," "],[10,0],[14,0,"consul-peer-info"],[12],[1,"\\n\\n "],[11,"svg"],[24,"width","16"],[24,"height","16"],[24,"viewBox","0 0 16 16"],[24,"fill","none"],[24,"xmlns","http://www.w3.org/2000/svg","http://www.w3.org/2000/xmlns/"],[4,[38,1],["Peer"],null],[12],[1,"\\n "],[10,"path"],[14,"d","M16 8C16 7.80109 15.921 7.61032 15.7803 7.46967L12.2803 3.96967C11.9874 3.67678 11.5126 3.67678 11.2197 3.96967C10.9268 4.26256 10.9268 4.73744 11.2197 5.03033L14.1893 8L11.2197 10.9697C10.9268 11.2626 10.9268 11.7374 11.2197 12.0303C11.5126 12.3232 11.9874 12.3232 12.2803 12.0303L15.7803 8.53033C15.921 8.38968 16 8.19891 16 8Z"],[14,"fill","#77838A"],[12],[13],[1,"\\n "],[10,"path"],[14,"d","M0.21967 8.53033C-0.0732233 8.23744 -0.0732233 7.76256 0.21967 7.46967L3.71967 3.96967C4.01256 3.67678 4.48744 3.67678 4.78033 3.96967C5.07322 4.26256 5.07322 4.73744 4.78033 5.03033L1.81066 8L4.78033 10.9697C5.07322 11.2626 5.07322 11.7374 4.78033 12.0303C4.48744 12.3232 4.01256 12.3232 3.71967 12.0303L0.21967 8.53033Z"],[14,"fill","#77838A"],[12],[13],[1,"\\n "],[10,"path"],[14,"d","M5 7C4.44772 7 4 7.44772 4 8C4 8.55229 4.44772 9 5 9H5.01C5.56228 9 6.01 8.55229 6.01 8C6.01 7.44772 5.56228 7 5.01 7H5Z"],[14,"fill","#77838A"],[12],[13],[1,"\\n "],[10,"path"],[14,"d","M7 8C7 7.44772 7.44772 7 8 7H8.01C8.56228 7 9.01 7.44772 9.01 8C9.01 8.55229 8.56228 9 8.01 9H8C7.44772 9 7 8.55229 7 8Z"],[14,"fill","#77838A"],[12],[13],[1,"\\n "],[10,"path"],[14,"d","M11 7C10.4477 7 10 7.44772 10 8C10 8.55229 10.4477 9 11 9H11.01C11.5623 9 12.01 8.55229 12.01 8C12.01 7.44772 11.5623 7 11.01 7H11Z"],[14,"fill","#77838A"],[12],[13],[1,"\\n "],[13],[1,"\\n "],[10,1],[14,0,"consul-peer-info__description"],[12],[1,"Imported from "],[10,1],[12],[1,[30,1,["PeerName"]]],[13],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null]],["@item"],false,["if","tooltip"]]',moduleName:"consul-ui/components/consul/peer/info/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/peer/list/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"P8VyWcGf",block:'[[[8,[39,0],[[24,0,"consul-peer-list"],[17,1]],[["@items","@linkable"],[[30,2],"linkable peers"]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n"],[41,[28,[37,3],["delete peer"],[["item"],[[30,3]]]],[[[1," "],[10,3],[15,6,[28,[37,4],["dc.peers.show",[30,3,["Name"]]],null]],[12],[1,"\\n "],[1,[30,3,["Name"]]],[1,"\\n "],[13],[1,"\\n"]],[]],[[[1," "],[10,2],[12],[1,"\\n "],[1,[30,3,["Name"]]],[1,"\\n "],[13],[1,"\\n"]],[]]],[1," "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["details"]],[["default"],[[[[1,"\\n "],[10,0],[14,0,"peers__list__peer-detail"],[12],[1,"\\n "],[8,[39,5],null,[["@peering"],[[30,3]]],null],[1,"\\n\\n "],[11,0],[4,[38,6],[[28,[37,7],["routes.dc.peers.index.detail.imported.tooltip"],[["name"],[[30,3,["Name"]]]]]],null],[12],[1,"\\n "],[1,[28,[35,7],["routes.dc.peers.index.detail.imported.count"],[["count"],[[28,[37,8],[[30,3,["ImportedServiceCount"]]],null]]]]],[1,"\\n "],[13],[1,"\\n\\n "],[11,0],[4,[38,6],[[28,[37,7],["routes.dc.peers.index.detail.exported.tooltip"],[["name"],[[30,3,["Name"]]]]]],null],[12],[1,"\\n "],[1,[28,[35,7],["routes.dc.peers.index.detail.exported.count"],[["count"],[[28,[37,8],[[30,3,["ExportedServiceCount"]]],null]]]]],[1,"\\n "],[13],[1,"\\n\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n"],[41,[28,[37,3],["delete peer"],[["item"],[[30,3]]]],[[[1,"\\n "],[8,[30,5],null,null,[["default"],[[[[1,"\\n"],[41,[28,[37,9],[[28,[37,3],["write peer"],[["item"],[[30,3]]]],[30,3,["isDialer"]]],null],[[[1," "],[8,[30,6],[[4,[38,10],["click",[28,[37,11],[[30,7],[30,3]],null]],null]],null,[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["label"]],[["default"],[[[[1,"\\n Regenerate token\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[1," "],[8,[30,6],null,[["@href"],[[28,[37,4],["dc.peers.show",[30,3,["Name"]]],null]]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["label"]],[["default"],[[[[1,"\\n View\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,6],[[24,0,"dangerous"]],[["@onclick"],[[28,[37,11],[[30,8],[30,3]],null]]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["label"]],[["default"],[[[[1,"\\n Delete\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["confirmation"]],[["default"],[[[[1,"\\n "],[8,[30,9],[[24,0,"warning"]],null,[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n Confirm delete\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n Are you sure you want to delete this peer?\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["confirm"]],[["default"],[[[[1,"\\n "],[8,[30,10],null,null,[["default"],[[[[1,"\\n Delete\\n "]],[]]]]],[1,"\\n "]],[10]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[9]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n"]],[]],null],[1," "]],[5]]]]],[1,"\\n"]],[3,4]]]]]],["&attrs","@items","item","index","Actions","Action","@onedit","@ondelete","Confirmation","Confirm"],false,["list-collection","block-slot","if","can","href-to","peerings/badge","tooltip","t","format-number","and","on","fn"]]',moduleName:"consul-ui/components/consul/peer/list/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/peer/notifications/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"OPH53/LC",block:'[[[41,[28,[37,1],[[30,1],"remove"],null],[[[1," "],[8,[39,2],[[17,2]],[["@color"],["success"]],[["default"],[[[[1,"\\n "],[8,[30,3,["Title"]],null,null,[["default"],[[[[1,"Success!"]],[]]]]],[1,"\\n "],[8,[30,3,["Description"]],null,null,[["default"],[[[[1,"\\n Your Peer has been marked for deletion.\\n "]],[]]]]],[1,"\\n "]],[3]]]]],[1,"\\n"]],[]],null]],["@type","&attrs","T"],false,["if","eq","hds/toast"]]',moduleName:"consul-ui/components/consul/peer/notifications/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/peer/search-bar/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"pkHcu+gS",block:'[[[8,[39,0],[[24,0,"consul-peer-search-bar"],[17,1]],[["@filter"],[[30,2]]],[["status","search","filter","sort"],[[[[1,"\\n\\n"],[44,[[28,[37,2],[[28,[37,3],["components.consul.peer.search-bar.",[30,3,["status","key"]]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","key"]]],null],[28,[37,3],["common.consul.",[30,3,["status","key"]]],null]],null]]]],[28,[37,2],[[28,[37,3],["components.consul.peer.search-bar.",[30,3,["status","value"]]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","value"]]],null],[28,[37,3],["common.consul.",[30,3,["status","value"]]],null],[28,[37,3],["common.brand.",[30,3,["status","value"]]],null]],null]]]]],[[[1," "],[8,[30,3,["RemoveFilter"]],[[16,"aria-label",[28,[37,2],["common.ui.remove"],[["item"],[[28,[37,3],[[30,4]," ",[30,5]],null]]]]]],null,[["default"],[[[[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,[30,4]],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,5]],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[4,5]]],[1,"\\n "]],[3]],[[[1,"\\n "],[8,[30,6,["Search"]],null,[["@onsearch","@value","@placeholder"],[[28,[37,5],[[30,0],[30,7]],null],[30,8],[28,[37,2],["common.search.search"],null]]],[["default"],[[[[1,"\\n "],[8,[30,6,["Select"]],[[24,0,"type-search-properties"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,2,["searchproperty","change"]]],null],true,true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["common.search.searchproperty"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,9,["Optgroup"]],[30,9,["Option"]]],[[[42,[28,[37,8],[[28,[37,8],[[30,2,["searchproperty","default"]]],null]],null],null,[[[1," "],[8,[30,11],null,[["@value","@selected"],[[30,12],[28,[37,9],[[30,12],[30,2,["searchproperty","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["common.consul.",[28,[37,10],[[30,12]],null]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[12]],null]],[10,11]]],[1," "]],[]]]]],[1,"\\n "]],[9]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]],[[[1,"\\n "],[8,[30,13,["Select"]],[[24,0,"type-state"]],[["@position","@onchange","@multiple"],["left",[28,[37,5],[[30,0],[30,2,["state","change"]]],null],true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["components.consul.peer.search-bar.state.name"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,14,["Optgroup"]],[30,14,["Option"]]],[[[42,[28,[37,8],[[28,[37,8],[[28,[37,11],[[28,[37,12],["/models/peer"],[["export","from"],["schema","/components/consul/peer/search-bar"]]],"State.allowedValues"],null]],null]],null],null,[[[44,[[28,[37,13],[[30,17]],null]],[[[1," "],[8,[30,16],[[16,0,[29,["value-",[30,18]]]]],[["@value","@selected"],[[30,18],[28,[37,9],[[30,18],[30,2,["state","value"]]],null]]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["components.consul.peer.search-bar.state.options.",[30,18]],null]],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[18]]]],[17]],null]],[15,16]]],[1," "]],[]]]]],[1,"\\n "]],[14]]]]],[1,"\\n "]],[13]],[[[1,"\\n "],[8,[30,19,["Select"]],[[24,0,"type-sort"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,20,["change"]]],null],false,true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n"],[44,[[28,[37,14],[[28,[37,4],[[28,[37,4],["Name:asc",[28,[37,2],["common.sort.alpha.asc"],null]],null],[28,[37,4],["Name:desc",[28,[37,2],["common.sort.alpha.desc"],null]],null],[28,[37,4],["State:asc",[28,[37,2],["components.consul.peer.search-bar.sort.state.asc"],null]],null],[28,[37,4],["State:desc",[28,[37,2],["components.consul.peer.search-bar.sort.state.desc"],null]],null]],null]],null]],[[[1," "],[1,[28,[35,11],[[30,22],[30,20,["value"]]],null]],[1,"\\n"]],[22]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,21,["Optgroup"]],[30,21,["Option"]]],[[[1," "],[8,[30,23],null,[["@label"],[[28,[37,2],["components.consul.peer.search-bar.sort.state.name"],null]]],[["default"],[[[[1,"\\n "],[8,[30,24],null,[["@value","@selected"],["State:asc",[28,[37,15],["State:asc",[30,20,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["components.consul.peer.search-bar.sort.state.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,24],null,[["@value","@selected"],["State:desc",[28,[37,15],["State:desc",[30,20,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["components.consul.peer.search-bar.sort.state.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,23],null,[["@label"],[[28,[37,2],["common.consul.name"],null]]],[["default"],[[[[1,"\\n "],[8,[30,24],null,[["@value","@selected"],["Name:asc",[28,[37,15],["Name:asc",[30,20,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,24],null,[["@value","@selected"],["Name:desc",[28,[37,15],["Name:desc",[30,20,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[23,24]]],[1," "]],[]]]]],[1,"\\n "]],[21]]]]],[1,"\\n "]],[19]]]]],[1,"\\n"]],["&attrs","@filter","search","key","value","search","@onsearch","@search","components","Optgroup","Option","prop","search","components","Optgroup","Option","upperState","state","search","@sort","components","selectable","Optgroup","Option"],false,["search-bar","let","t","concat","array","action","block-slot","each","-track-array","includes","lowercase","get","require","string-to-lower-case","from-entries","eq"]]',moduleName:"consul-ui/components/consul/peer/search-bar/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/peer/selector/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"kl+7MwvJ",block:'[[[11,"li"],[24,0,"peers-separator"],[24,"role","separator"],[17,1],[12],[1,"\\n Organization\\n"],[13],[1,"\\n"],[10,"li"],[15,0,[52,[28,[37,1],["dc.peers",[30,2,["Name"]]],null],"is-active"]],[12],[1,"\\n "],[10,3],[15,6,[28,[37,2],["dc.peers",[30,2,["Name"]]],[["params"],[[28,[37,3],null,[["peer"],[[27]]]]]]]],[12],[1,"\\n Peers\\n "],[13],[1,"\\n"],[13],[1,"\\n\\n"]],["&attrs","@dc"],false,["if","is-href","href-to","hash"]]',moduleName:"consul-ui/components/consul/peer/selector/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/policy/list/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"v5u90Yk1",block:'[[[8,[39,0],[[24,0,"consul-policy-list"]],[["@items"],[[30,1]]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n"],[41,[28,[37,3],[[28,[37,4],[[30,2]],null],"policy-management"],null],[[[1," "],[10,"dl"],[14,0,"policy-management"],[12],[1,"\\n "],[10,"dt"],[12],[1,"Type"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,5],null,null,[["default"],[[[[1,"\\n Global Management Policy\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1," "],[10,3],[15,6,[28,[37,6],["dc.acls.policies.edit",[30,2,["ID"]]],null]],[15,0,[52,[28,[37,3],[[28,[37,4],[[30,2]],null],"policy-management"],null],"is-management"]],[12],[1,[30,2,["Name"]]],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["details"]],[["default"],[[[[1,"\\n "],[10,"dl"],[14,0,"datacenter"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n "],[8,[39,5],null,null,[["default"],[[[[1,"Datacenters"]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[28,[35,7],[", ",[28,[37,8],[[30,2]],null]],null]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[10,"dl"],[14,0,"description"],[12],[1,"\\n "],[10,"dt"],[12],[1,"Description"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[30,2,["Description"]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[8,[30,3],null,null,[["default"],[[[[1,"\\n "],[8,[30,4],null,[["@href"],[[28,[37,6],["dc.acls.policies.edit",[30,2,["ID"]]],null]]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["label"]],[["default"],[[[[1,"\\n"],[41,[28,[37,9],["write policy"],[["item"],[[30,2]]]],[[[1," Edit\\n"]],[]],[[[1," View\\n"]],[]]],[1," "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"],[41,[28,[37,9],["delete policy"],[["item"],[[30,2]]]],[[[1," "],[8,[30,4],[[24,0,"dangerous"]],[["@onclick"],[[28,[37,10],[[30,0],[30,5],[30,2]],null]]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["label"]],[["default"],[[[[1,"\\n Delete\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["confirmation"]],[["default"],[[[[1,"\\n "],[8,[30,6],[[24,0,"warning"]],null,[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n Confirm delete\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n Are you sure you want to delete this policy?\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["confirm"]],[["default"],[[[[1,"\\n "],[8,[30,7],null,null,[["default"],[[[[1,"Delete"]],[]]]]],[1,"\\n "]],[7]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[1," "]],[4]]]]],[1,"\\n "]],[3]]]]],[1,"\\n"]],[2]]]]]],["@items","item","Actions","Action","@ondelete","Confirmation","Confirm"],false,["list-collection","block-slot","if","eq","policy/typeof","tooltip","href-to","join","policy/datacenters","can","action"]]',moduleName:"consul-ui/components/consul/policy/list/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/policy/notifications/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"I7CTnbjl",block:'[[[41,[28,[37,1],[[30,1],"create"],null],[[[41,[28,[37,1],[[30,2],"success"],null],[[[1," Your policy has been added.\\n"]],[]],[[[1," There was an error adding your policy.\\n"]],[]]]],[]],[[[41,[28,[37,1],[[30,1],"update"],null],[[[41,[28,[37,1],[[30,2],"success"],null],[[[1," Your policy has been saved.\\n"]],[]],[[[1," There was an error saving your policy.\\n"]],[]]]],[]],[[[41,[28,[37,1],[[30,1],"delete"],null],[[[41,[28,[37,1],[[30,2],"success"],null],[[[1," Your policy was deleted.\\n"]],[]],[[[1," There was an error deleting your policy.\\n"]],[]]]],[]],null]],[]]]],[]]],[44,[[30,3,["errors","firstObject"]]],[[[41,[30,4,["detail"]],[[[1," "],[10,"br"],[12],[13],[1,[28,[35,3],["(",[52,[30,4,["status"]],[28,[37,3],[[30,4,["status"]],": "],null]],[30,4,["detail"]],")"],null]],[1,"\\n"]],[]],null]],[4]]]],["@type","@status","@error","error"],false,["if","eq","let","concat"]]',moduleName:"consul-ui/components/consul/policy/notifications/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})) -define("consul-ui/components/consul/policy/search-bar/index",["exports","@ember/component","@ember/template-factory","@glimmer/component"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"rNkB4Q1f",block:'[[[8,[39,0],[[24,0,"consul-policy-search-bar"],[17,1]],[["@filter"],[[30,2]]],[["status","search","filter","sort"],[[[[1,"\\n\\n"],[44,[[28,[37,2],[[28,[37,3],["components.consul.policy.search-bar.",[30,3,["status","key"]],".name"],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","key"]]],null],[28,[37,3],["common.consul.",[30,3,["status","key"]]],null]],null]]]],[28,[37,2],[[28,[37,3],["components.consul.policy.search-bar.",[30,3,["status","key"]],".options.",[30,3,["status","value"]]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","value"]]],null],[28,[37,3],["common.consul.",[30,3,["status","value"]]],null],[28,[37,3],["common.brand.",[30,3,["status","value"]]],null]],null]]]]],[[[1," "],[8,[30,3,["RemoveFilter"]],[[16,"aria-label",[28,[37,2],["common.ui.remove"],[["item"],[[28,[37,3],[[30,4]," ",[30,5]],null]]]]]],null,[["default"],[[[[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,[30,4]],[13],[1,"\\n "],[10,"dd"],[12],[1,[52,[28,[37,6],[[30,3,["status","key"]],"datacenter"],null],[30,3,["status","value"]],[30,5]]],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[4,5]]],[1,"\\n "]],[3]],[[[1,"\\n "],[8,[30,6,["Search"]],null,[["@onsearch","@value","@placeholder"],[[28,[37,7],[[30,0],[30,7]],null],[30,8],[28,[37,2],["common.search.search"],null]]],[["default"],[[[[1,"\\n "],[8,[30,6,["Select"]],[[24,0,"type-search-properties"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,7],[[30,0],[30,2,["searchproperty","change"]]],null],true,true]],[["default"],[[[[1,"\\n "],[8,[39,8],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["common.search.searchproperty"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,8],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,9,["Optgroup"]],[30,9,["Option"]]],[[[42,[28,[37,10],[[28,[37,10],[[30,2,["searchproperty","default"]]],null]],null],null,[[[1," "],[8,[30,11],null,[["@value","@selected"],[[30,12],[28,[37,11],[[30,12],[30,2,["searchproperty","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["common.consul.",[28,[37,12],[[30,12]],null]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[12]],null]],[10,11]]],[1," "]],[]]]]],[1,"\\n "]],[9]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]],[[[1,"\\n "],[8,[30,13,["Select"]],[[24,0,"type-datacenter"]],[["@position","@onchange","@multiple"],["left",[28,[37,7],[[30,0],[30,2,["datacenter","change"]]],null],true]],[["default"],[[[[1,"\\n "],[8,[39,8],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["common.consul.datacenter"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,8],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,14,["Optgroup"]],[30,14,["Option"]]],[[[42,[28,[37,10],[[28,[37,10],[[33,13]],null]],null],null,[[[1," "],[8,[30,16],null,[["@value","@selected"],[[30,17,["Name"]],[28,[37,11],[[30,17,["Name"]],[30,2,["datacenter","value"]]],null]]],[["default"],[[[[1,[30,17,["Name"]]]],[]]]]],[1,"\\n"]],[17]],null],[1," "],[8,[39,14],null,[["@src","@loading","@onchange"],[[28,[37,15],["/${partition}/*/*/datacenters",[28,[37,16],null,[["partition"],[[30,18]]]]],null],"lazy",[28,[37,7],[[30,0],[28,[37,17],[[30,0,["dcs"]]],null]],[["value"],["data"]]]]],null],[1,"\\n"]],[15,16]]],[1," "]],[]]]]],[1,"\\n "]],[14]]]]],[1,"\\n "],[8,[30,13,["Select"]],[[24,0,"type-kind"]],[["@position","@onchange","@multiple"],["left",[28,[37,7],[[30,0],[30,2,["kind","change"]]],null],true]],[["default"],[[[[1,"\\n "],[8,[39,8],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["components.consul.policy.search-bar.kind.name"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,8],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,19,["Optgroup"]],[30,19,["Option"]]],[[[42,[28,[37,10],[[28,[37,10],[[28,[37,4],["global-management","standard"],null]],null]],null],null,[[[1," "],[8,[30,21],[[16,0,[29,["value-",[30,22]]]]],[["@value","@selected"],[[30,22],[28,[37,11],[[30,22],[30,2,["kind","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["components.consul.policy.search-bar.kind.options.",[30,22]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,22]],null]],null]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[22]],null]],[20,21]]],[1," "]],[]]]]],[1,"\\n "]],[19]]]]],[1,"\\n "]],[13]],[[[1,"\\n "],[8,[30,23,["Select"]],[[24,0,"type-sort"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,7],[[30,0],[30,24,["change"]]],null],false,true]],[["default"],[[[[1,"\\n "],[8,[39,8],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n"],[44,[[28,[37,18],[[28,[37,4],[[28,[37,4],["Name:asc",[28,[37,2],["common.sort.alpha.asc"],null]],null],[28,[37,4],["Name:desc",[28,[37,2],["common.sort.alpha.desc"],null]],null]],null]],null]],[[[1," "],[1,[28,[35,19],[[30,26],[30,24,["value"]]],null]],[1,"\\n"]],[26]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,8],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,25,["Optgroup"]],[30,25,["Option"]]],[[[1," "],[8,[30,27],null,[["@label"],[[28,[37,2],["common.ui.name"],null]]],[["default"],[[[[1,"\\n "],[8,[30,28],null,[["@value","@selected"],["Name:asc",[28,[37,6],["Name:asc",[30,24,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,28],null,[["@value","@selected"],["Name:desc",[28,[37,6],["Name:desc",[30,24,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[27,28]]],[1," "]],[]]]]],[1,"\\n "]],[25]]]]],[1,"\\n "]],[23]]]]],[1,"\\n"]],["&attrs","@filter","search","key","value","search","@onsearch","@search","components","Optgroup","Option","prop","search","components","Optgroup","Option","dc","@partition","components","Optgroup","Option","state","search","@sort","components","selectable","Optgroup","Option"],false,["search-bar","let","t","concat","array","if","eq","action","block-slot","each","-track-array","includes","lowercase","dcs","data-source","uri","hash","mut","from-entries","get"]]',moduleName:"consul-ui/components/consul/policy/search-bar/index.hbs",isStrictMode:!1}) -class i extends l.default{}e.default=i,(0,t.setComponentTemplate)(r,i)})),define("consul-ui/components/consul/role/list/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"+f+3clGw",block:'[[[8,[39,0],[[24,0,"consul-role-list"],[17,1]],[["@items"],[[30,2]]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,3],[15,6,[28,[37,2],["dc.acls.roles.edit",[30,3,["ID"]]],null]],[12],[1,[30,3,["Name"]]],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["details"]],[["default"],[[[[1,"\\n "],[8,[39,3],null,[["@item"],[[30,3]]],null],[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"Description"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[30,3,["Description"]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[8,[30,4],null,null,[["default"],[[[[1,"\\n "],[8,[30,5],null,[["@href"],[[28,[37,2],["dc.acls.roles.edit",[30,3,["ID"]]],null]]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["label"]],[["default"],[[[[1,"\\n"],[41,[28,[37,5],["write role"],[["item"],[[30,3]]]],[[[1," Edit\\n"]],[]],[[[1," View\\n"]],[]]],[1," "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"],[41,[28,[37,5],["delete role"],[["item"],[[30,3]]]],[[[1," "],[8,[30,5],[[24,0,"dangerous"]],[["@onclick"],[[28,[37,6],[[30,0],[30,6],[30,3]],null]]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["label"]],[["default"],[[[[1,"\\n Delete\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["confirmation"]],[["default"],[[[[1,"\\n "],[8,[30,7],[[24,0,"warning"]],null,[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n Confirm delete\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n Are you sure you want to delete this role?\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["confirm"]],[["default"],[[[[1,"\\n "],[8,[30,8],null,null,[["default"],[[[[1,"Delete"]],[]]]]],[1,"\\n "]],[8]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[7]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[1," "]],[5]]]]],[1,"\\n "]],[4]]]]],[1,"\\n"]],[3]]]]]],["&attrs","@items","item","Actions","Action","@ondelete","Confirmation","Confirm"],false,["list-collection","block-slot","href-to","consul/token/ruleset/list","if","can","action"]]',moduleName:"consul-ui/components/consul/role/list/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/role/notifications/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"3IiB4HcR",block:'[[[41,[28,[37,1],[[30,1],"create"],null],[[[41,[28,[37,1],[[30,2],"success"],null],[[[1," Your role has been added.\\n"]],[]],[[[1," There was an error adding your role.\\n"]],[]]]],[]],[[[41,[28,[37,1],[[30,1],"update"],null],[[[41,[28,[37,1],[[30,2],"success"],null],[[[1," Your role has been saved.\\n"]],[]],[[[1," There was an error saving your role.\\n"]],[]]]],[]],[[[41,[28,[37,1],[[30,1],"delete"],null],[[[41,[28,[37,1],[[30,2],"success"],null],[[[1," Your role was deleted.\\n"]],[]],[[[1," There was an error deleting your role.\\n"]],[]]]],[]],null]],[]]]],[]]],[44,[[30,3,["errors","firstObject"]]],[[[41,[30,4,["detail"]],[[[1," "],[10,"br"],[12],[13],[1,[28,[35,3],["(",[52,[30,4,["status"]],[28,[37,3],[[30,4,["status"]],": "],null]],[30,4,["detail"]],")"],null]],[1,"\\n"]],[]],null]],[4]]]],["@type","@status","@error","error"],false,["if","eq","let","concat"]]',moduleName:"consul-ui/components/consul/role/notifications/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/role/search-bar/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"aNFJl995",block:'[[[8,[39,0],[[24,0,"consul-role-search-bar"],[17,1]],[["@filter"],[[30,2]]],[["status","search","sort"],[[[[1,"\\n\\n"],[44,[[28,[37,2],[[28,[37,3],["components.consul.role.search-bar.",[30,3,["status","key"]],".name"],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","key"]]],null],[28,[37,3],["common.consul.",[30,3,["status","key"]]],null]],null]]]],[28,[37,2],[[28,[37,3],["components.consul.role.search-bar.",[30,3,["status","key"]],".options.",[30,3,["status","value"]]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","value"]]],null],[28,[37,3],["common.consul.",[30,3,["status","value"]]],null],[28,[37,3],["common.brand.",[30,3,["status","value"]]],null]],null]]]]],[[[1," "],[8,[30,3,["RemoveFilter"]],[[16,"aria-label",[28,[37,2],["common.ui.remove"],[["item"],[[28,[37,3],[[30,4]," ",[30,5]],null]]]]]],null,[["default"],[[[[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,[30,4]],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,5]],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[4,5]]],[1,"\\n "]],[3]],[[[1,"\\n "],[8,[30,6,["Search"]],null,[["@onsearch","@value","@placeholder"],[[28,[37,5],[[30,0],[30,7]],null],[30,8],[28,[37,2],["common.search.search"],null]]],[["default"],[[[[1,"\\n "],[8,[30,6,["Select"]],[[24,0,"type-search-properties"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,2,["searchproperty","change"]]],null],true,true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["common.search.searchproperty"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,9,["Optgroup"]],[30,9,["Option"]]],[[[42,[28,[37,8],[[28,[37,8],[[30,2,["searchproperty","default"]]],null]],null],null,[[[1," "],[8,[30,11],null,[["@value","@selected"],[[30,12],[28,[37,9],[[30,12],[30,2,["searchproperty","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["common.consul.",[28,[37,10],[[30,12]],null]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[12]],null]],[10,11]]],[1," "]],[]]]]],[1,"\\n "]],[9]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]],[[[1,"\\n "],[8,[30,13,["Select"]],[[24,0,"type-sort"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,14,["change"]]],null],false,true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n"],[44,[[28,[37,11],[[28,[37,4],[[28,[37,4],["Name:asc",[28,[37,2],["common.sort.alpha.asc"],null]],null],[28,[37,4],["Name:desc",[28,[37,2],["common.sort.alpha.desc"],null]],null],[28,[37,4],["CreateIndex:desc",[28,[37,2],["common.sort.age.desc"],null]],null],[28,[37,4],["CreateIndex:asc",[28,[37,2],["common.sort.age.asc"],null]],null]],null]],null]],[[[1," "],[1,[28,[35,12],[[30,16],[30,14,["value"]]],null]],[1,"\\n"]],[16]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,15,["Optgroup"]],[30,15,["Option"]]],[[[1," "],[8,[30,17],null,[["@label"],[[28,[37,2],["common.ui.name"],null]]],[["default"],[[[[1,"\\n "],[8,[30,18],null,[["@value","@selected"],["Name:asc",[28,[37,13],["Name:asc",[30,14,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,18],null,[["@value","@selected"],["Name:desc",[28,[37,13],["Name:desc",[30,14,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,17],null,[["@label"],[[28,[37,2],["common.ui.creation"],null]]],[["default"],[[[[1,"\\n "],[8,[30,18],null,[["@value","@selected"],["CreateIndex:desc",[28,[37,13],["CreateIndex:desc",[30,14,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.age.desc"],null]]],[]]]]],[1,"\\n "],[8,[30,18],null,[["@value","@selected"],["CreateIndex:asc",[28,[37,13],["CreateIndex:asc",[30,14,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.age.asc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[17,18]]],[1," "]],[]]]]],[1,"\\n "]],[15]]]]],[1,"\\n "]],[13]]]]],[1,"\\n"]],["&attrs","@filter","search","key","value","search","@onsearch","@search","components","Optgroup","Option","prop","search","@sort","components","selectable","Optgroup","Option"],false,["search-bar","let","t","concat","array","action","block-slot","each","-track-array","includes","lowercase","from-entries","get","eq"]]',moduleName:"consul-ui/components/consul/role/search-bar/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/server/card/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"3gOA2+ED",block:'[[[11,0],[16,0,[28,[37,0],["consul-server-card",[28,[37,1],["voting-status-leader",[28,[37,2],[[30,1,["Status"]],"leader"],null]],null],[28,[37,1],["voting-status-voter",[28,[37,3],[[28,[37,4],[[30,1,["ReadReplica"]]],null],[28,[37,2],[[30,1,["Status"]],"voter"],null]],null]],null],[28,[37,1],["voting-status-non-voter",[28,[37,5],[[30,1,["ReadReplica"]],[28,[37,6],[[30,1,["Status"]],[28,[37,1],["non-voter","staging"],null]],null]],null]],null]],null]],[17,2],[12],[1,"\\n "],[10,"dl"],[12],[1,"\\n\\n "],[11,"dt"],[24,0,"name"],[4,[38,7],["Leader"],null],[12],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[30,1,["Name"]]],[1,"\\n "],[13],[1,"\\n\\n "],[10,"dt"],[15,0,[28,[37,0],["health-status",[28,[37,1],["healthy",[30,1,["Healthy"]]],null]],null]],[12],[1,"\\n Status\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[52,[28,[37,6],[[30,1,["Status"]],[28,[37,1],["leader","voter"],null]],null],"Active voter","Backup voter"]],[1,"\\n "],[13],[1,"\\n\\n "],[13],[1,"\\n"],[13],[1,"\\n\\n"]],["@item","&attrs"],false,["class-map","array","eq","and","not","or","includes","tooltip","if"]]',moduleName:"consul-ui/components/consul/server/card/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/server/list/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"L4k4YQfd",block:'[[[11,0],[16,0,[28,[37,0],["consul-server-list"],null]],[17,1],[12],[1,"\\n "],[10,"ul"],[12],[1,"\\n"],[42,[28,[37,2],[[28,[37,2],[[30,2]],null]],null],null,[[[1," "],[10,"li"],[12],[1,"\\n "],[10,3],[15,6,[28,[37,3],["dc.nodes.show",[30,3,["Name"]]],null]],[12],[1,"\\n "],[8,[39,4],null,[["@item"],[[30,3]]],null],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[3]],null],[1," "],[13],[1,"\\n"],[13],[1,"\\n\\n"]],["&attrs","@items","item"],false,["class-map","each","-track-array","href-to","consul/server/card"]]',moduleName:"consul-ui/components/consul/server/list/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/service-identity/template/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"/FDJj0m3",block:'[[[41,[28,[37,1],["use partitions"],null],[[[1,"partition \\""],[1,[28,[35,2],[[30,1],"default"],null]],[1,"\\" {\\n"],[41,[28,[37,1],["use nspaces"],null],[[[1," namespace \\""],[1,[28,[35,2],[[30,2],"default"],null]],[1,"\\" {\\n service \\""],[1,[30,3]],[1,"\\" {\\n\\t policy = \\"write\\"\\n }\\n service \\""],[1,[30,3]],[1,"-sidecar-proxy\\" {\\n\\t policy = \\"write\\"\\n }\\n service_prefix \\"\\" {\\n\\t policy = \\"read\\"\\n }\\n node_prefix \\"\\" {\\n\\t policy = \\"read\\"\\n }\\n }\\n"]],[]],[[[1," service \\""],[1,[30,3]],[1,"\\" {\\n\\t policy = \\"write\\"\\n }\\n service \\""],[1,[30,3]],[1,"-sidecar-proxy\\" {\\n\\t policy = \\"write\\"\\n }\\n service_prefix \\"\\" {\\n\\t policy = \\"read\\"\\n }\\n node_prefix \\"\\" {\\n\\t policy = \\"read\\"\\n }\\n"]],[]]],[1,"}\\n"]],[]],[[[41,[28,[37,1],["use nspaces"],null],[[[1,"namespace \\""],[1,[28,[35,2],[[30,2],"default"],null]],[1,"\\" {\\n service \\""],[1,[30,3]],[1,"\\" {\\n\\t policy = \\"write\\"\\n }\\n service \\""],[1,[30,3]],[1,"-sidecar-proxy\\" {\\n\\t policy = \\"write\\"\\n }\\n service_prefix \\"\\" {\\n\\t policy = \\"read\\"\\n }\\n node_prefix \\"\\" {\\n\\t policy = \\"read\\"\\n }\\n}\\n"]],[]],[[[1,"service \\""],[1,[30,3]],[1,"\\" {\\n\\tpolicy = \\"write\\"\\n}\\nservice \\""],[1,[30,3]],[1,"-sidecar-proxy\\" {\\n\\tpolicy = \\"write\\"\\n}\\nservice_prefix \\"\\" {\\n\\tpolicy = \\"read\\"\\n}\\nnode_prefix \\"\\" {\\n\\tpolicy = \\"read\\"\\n}\\n"]],[]]]],[]]]],["@partition","@nspace","@name"],false,["if","can","or"]]',moduleName:"consul-ui/components/consul/service-identity/template/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/service-instance/list/index",["exports","@ember/component","@ember/template-factory","@glimmer/component"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"MaR0UaLj",block:'[[[44,[[28,[37,1],[[30,1],"Service.Proxy.DestinationServiceID"],null]],[[[8,[39,2],[[24,0,"consul-service-instance-list"],[17,3]],[["@items"],[[30,4]]],[["default"],[[[[1,"\\n "],[8,[39,3],null,[["@name"],["header"]],[["default"],[[[[1,"\\n"],[41,[28,[37,5],[[30,7],"dc.services.show"],null],[[[1," "],[10,3],[15,6,[28,[37,6],[[30,7],[30,5,["Service","Service"]]],null]],[12],[1,"\\n "],[1,[30,5,["Service","ID"]]],[1,"\\n "],[13],[1,"\\n"]],[]],[[[1," "],[10,3],[15,6,[28,[37,6],[[30,7],[30,5,["Service","Service"]],[30,5,["Node","Node"]],[28,[37,7],[[30,5,["Service","ID"]],[30,5,["Service","Service"]]],null]],null]],[12],[1,"\\n "],[1,[30,5,["Service","ID"]]],[1,"\\n "],[13],[1,"\\n"]],[]]],[1," "]],[]]]]],[1,"\\n "],[8,[39,3],null,[["@name"],["details"]],[["default"],[[[[1,"\\n\\n"],[44,[[28,[37,8],[[30,2],[30,5,["Service","ID"]]],null]],[[[44,[[28,[37,9],[[28,[37,10],[[30,5,["Checks"]],[28,[37,7],[[30,8,["Checks"]],[28,[37,10],null,null]],null]],null]],null]],[[[1,"\\n"],[41,[30,10],[[[1," "],[8,[39,11],null,[["@item"],[[30,5,["Service"]]]],null],[1,"\\n "],[8,[39,12],null,[["@type","@items"],["service",[28,[37,13],["ServiceID","",[30,9]],null]]],null],[1,"\\n"]],[]],[[[41,[51,[30,0,["areAllExternalSourcesMatching"]]],[[[1," "],[8,[39,11],null,[["@item"],[[30,5,["Service"]]]],null],[1,"\\n"]],[]],null],[1,"\\n "],[8,[39,12],null,[["@type","@items"],["service",[28,[37,13],["ServiceID","",[30,9]],null]]],null],[1,"\\n\\n"],[41,[51,[30,5,["Node","Meta","synthetic-node"]]],[[[1," "],[8,[39,12],null,[["@type","@items"],["node",[28,[37,15],["ServiceID","",[30,9]],null]]],null],[1,"\\n"]],[]],null]],[]]],[41,[30,8],[[[1," "],[10,"dl"],[14,0,"mesh"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n "],[8,[39,16],null,null,[["default"],[[[[1,"\\n This service uses a proxy for the Consul service mesh\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n in service mesh with proxy\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[28,[37,17],[[28,[37,18],[[30,10]],null],[28,[37,18],[[30,5,["Node","Meta","synthetic-node"]]],null]],null],[[[1," "],[10,"dl"],[14,0,"node"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n "],[8,[39,16],null,null,[["default"],[[[[1,"\\n Node\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[10,3],[15,6,[28,[37,6],["dc.nodes.show",[30,5,["Node","Node"]]],null]],[12],[1,[30,5,["Node","Node"]]],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[30,5,["Service","Port"]],[[[1," "],[10,"dl"],[14,0,"address"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n "],[8,[39,16],null,null,[["default"],[[[[1,"\\n IP Address and Port\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n"],[41,[28,[37,19],[[30,5,["Service","Address"]],""],null],[[[1," "],[1,[30,5,["Service","Address"]]],[1,":"],[1,[30,5,["Service","Port"]]],[1,"\\n"]],[]],[[[1," "],[1,[30,5,["Node","Address"]]],[1,":"],[1,[30,5,["Service","Port"]]],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],[[[41,[30,5,["Service","SocketPath"]],[[[1," "],[10,"dl"],[14,0,"socket"],[12],[1,"\\n "],[11,"dt"],[4,[38,16],null,null],[12],[1,"\\n Socket Path\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[30,5,["Service","SocketPath"]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null]],[]]],[1," "],[8,[39,20],null,[["@item"],[[30,5,["Service"]]]],null],[1,"\\n\\n"]],[9]]]],[8]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[5,6]]]]],[1,"\\n"]],[2]]]],["@proxies","proxies","&attrs","@items","item","index","@routeName","proxy","checks","@node"],false,["let","to-hash","list-collection","block-slot","if","eq","href-to","or","get","merge-checks","array","consul/external-source","consul/instance-checks","filter-by","unless","reject-by","tooltip","and","not","not-eq","tag-list"]]',moduleName:"consul-ui/components/consul/service-instance/list/index.hbs",isStrictMode:!1}) -class i extends l.default{get areAllExternalSourcesMatching(){var e,t,n -const l=null===(e=this.args.items[0])||void 0===e||null===(t=e.Service)||void 0===t||null===(n=t.Meta)||void 0===n?void 0:n["external-source"] -return this.args.items.every((e=>{var t,n -return(null===(t=e.Service)||void 0===t||null===(n=t.Meta)||void 0===n?void 0:n["external-source"])===l}))}}e.default=i,(0,t.setComponentTemplate)(r,i)})),define("consul-ui/components/consul/service-instance/search-bar/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"sxcYe4gj",block:'[[[8,[39,0],[[24,0,"consul-service-instance-search-bar"],[17,1]],[["@filter"],[[30,2]]],[["status","search","filter","sort"],[[[[1,"\\n\\n"],[44,[[28,[37,2],[[28,[37,3],["components.consul.service-instance.search-bar.",[30,3,["status","key"]],".name"],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","key"]]],null],[28,[37,3],["common.consul.",[30,3,["status","key"]]],null]],null]]]],[28,[37,2],[[28,[37,3],["components.consul.service-instance.search-bar.",[30,3,["status","key"]],".options.",[30,3,["status","value"]]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","value"]]],null],[28,[37,3],["common.consul.",[30,3,["status","value"]]],null],[28,[37,3],["common.brand.",[30,3,["status","value"]]],null]],null]]]]],[[[1," "],[8,[30,3,["RemoveFilter"]],[[16,"aria-label",[28,[37,2],["common.ui.remove"],[["item"],[[28,[37,3],[[30,4]," ",[30,5]],null]]]]]],null,[["default"],[[[[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,[30,4]],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,5]],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[4,5]]],[1,"\\n "]],[3]],[[[1,"\\n "],[8,[30,6,["Search"]],null,[["@onsearch","@value","@placeholder"],[[28,[37,5],[[30,0],[30,7]],null],[30,8],[28,[37,2],["common.search.search"],null]]],[["default"],[[[[1,"\\n"],[41,[30,2,["searchproperty"]],[[[1," "],[8,[30,6,["Select"]],[[24,0,"type-search-properties"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,2,["searchproperty","change"]]],null],true,true]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["common.search.searchproperty"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,9,["Option"]]],[[[42,[28,[37,9],[[28,[37,9],[[30,2,["searchproperty","default"]]],null]],null],null,[[[1," "],[8,[30,10],null,[["@value","@selected"],[[30,11],[28,[37,10],[[30,11],[30,2,["searchproperty","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["common.consul.",[28,[37,11],[[30,11]],null]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[11]],null]],[10]]],[1," "]],[]]]]],[1,"\\n "]],[9]]]]],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "]],[6]],[[[1,"\\n "],[8,[30,12,["Select"]],[[24,0,"type-status"]],[["@position","@onchange","@multiple"],["left",[28,[37,5],[[30,0],[30,2,["status","change"]]],null],true]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["common.consul.status"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,13,["Optgroup"]],[30,13,["Option"]]],[[[42,[28,[37,9],[[28,[37,9],[[28,[37,4],["passing","warning","critical","empty"],null]],null]],null],null,[[[1," "],[8,[30,15],[[16,0,[29,["value-",[30,16]]]]],[["@value","@selected"],[[30,16],[28,[37,10],[[30,16],[30,2,["status","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["common.consul.",[30,16]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,16]],null]],null]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[16]],null]],[14,15]]],[1," "]],[]]]]],[1,"\\n "]],[13]]]]],[1,"\\n"],[41,[28,[37,12],[[30,17,["length"]],0],null],[[[1," "],[8,[30,12,["Select"]],[[24,0,"type-source"]],[["@position","@onchange","@multiple"],["left",[28,[37,5],[[30,0],[30,2,["source","change"]]],null],true]],[["default"],[[[[1,"\\n "],[8,[39,13],null,[["@components","@filter","@sources"],[[30,18],[30,2],[30,17]]],null],[1,"\\n "]],[18]]]]],[1,"\\n"]],[]],null],[1," "]],[12]],[[[1,"\\n "],[8,[30,19,["Select"]],[[24,0,"type-sort"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,20,["change"]]],null],false,true]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n"],[44,[[28,[37,14],[[28,[37,4],[[28,[37,4],["Name:asc",[28,[37,2],["common.sort.alpha.asc"],null]],null],[28,[37,4],["Name:desc",[28,[37,2],["common.sort.alpha.desc"],null]],null],[28,[37,4],["Status:asc",[28,[37,2],["common.sort.status.asc"],null]],null],[28,[37,4],["Status:desc",[28,[37,2],["common.sort.status.desc"],null]],null]],null]],null]],[[[1," "],[1,[28,[35,15],[[30,22],[30,20,["value"]]],null]],[1,"\\n"]],[22]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,21,["Optgroup"]],[30,21,["Option"]]],[[[1," "],[8,[30,23],null,[["@label"],[[28,[37,2],["common.consul.status"],null]]],[["default"],[[[[1,"\\n "],[8,[30,24],null,[["@value","@selected"],["Status:asc",[28,[37,16],["Status:asc",[30,20,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.status.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,24],null,[["@value","@selected"],["Status:desc",[28,[37,16],["Status:desc",[30,20,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.status.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,23],null,[["@label"],[[28,[37,2],["components.consul.service-instance.search-bar.sort.name.name"],null]]],[["default"],[[[[1,"\\n "],[8,[30,24],null,[["@value","@selected"],["Name:asc",[28,[37,16],["Name:asc",[30,20,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,24],null,[["@value","@selected"],["Name:desc",[28,[37,16],["Name:desc",[30,20,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[23,24]]],[1," "]],[]]]]],[1,"\\n "]],[21]]]]],[1,"\\n "]],[19]]]]],[1,"\\n"]],["&attrs","@filter","search","key","value","search","@onsearch","@search","components","Option","prop","search","components","Optgroup","Option","state","@sources","components","search","@sort","components","selectable","Optgroup","Option"],false,["search-bar","let","t","concat","array","action","if","block-slot","each","-track-array","includes","lowercase","gt","consul/sources-select","from-entries","get","eq"]]',moduleName:"consul-ui/components/consul/service-instance/search-bar/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/service/list/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"SaF5GIVw",block:'[[[8,[39,0],[[24,0,"consul-service-list"],[17,1]],[["@items","@linkable"],[[30,2],"linkable service"]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"dl"],[15,0,[30,3,["MeshStatus"]]],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n Health\\n "],[13],[1,"\\n "],[11,"dd"],[4,[38,2],[[30,3,["healthTooltipText"]]],null],[12],[13],[1,"\\n "],[13],[1,"\\n"],[41,[28,[37,4],[[30,3,["InstanceCount"]],0],null],[[[1," "],[10,3],[15,6,[28,[37,5],["dc.services.show.index",[30,3,["Name"]]],[["params"],[[52,[28,[37,6],[[30,3,["Partition"]],[30,5]],null],[28,[37,7],null,[["partition","nspace","peer"],[[30,3,["Partition"]],[30,3,["Namespace"]],[30,3,["PeerName"]]]]],[28,[37,7],null,[["peer"],[[30,3,["PeerName"]]]]]]]]]],[12],[1,"\\n "],[1,[30,3,["Name"]]],[1,"\\n "],[13],[1,"\\n"]],[]],[[[1," "],[10,2],[12],[1,"\\n "],[1,[30,3,["Name"]]],[1,"\\n "],[13],[1,"\\n"]],[]]],[1," "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["details"]],[["default"],[[[[1,"\\n "],[8,[39,8],null,[["@item"],[[30,3]]],null],[1,"\\n "],[8,[39,9],null,[["@item"],[[30,3]]],null],[1,"\\n"],[41,[28,[37,10],[[28,[37,6],[[30,3,["InstanceCount"]],0],null],[28,[37,10],[[28,[37,6],[[30,3,["Kind"]],"terminating-gateway"],null],[28,[37,6],[[30,3,["Kind"]],"ingress-gateway"],null]],null]],null],[[[1," "],[10,1],[12],[1,"\\n "],[1,[28,[35,11],[[30,3,["InstanceCount"]]],null]],[1,"\\n "],[1,[28,[35,12],[[30,3,["InstanceCount"]],"instance"],[["without-count"],[true]]]],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[51,[30,6]],[[[1," "],[8,[39,14],null,[["@item","@nspace","@partition"],[[30,3],[30,7],[30,5]]],null],[1,"\\n"]],[]],null],[41,[28,[37,15],[[30,3,["Kind"]],"terminating-gateway"],null],[[[1," "],[10,1],[12],[1,"\\n "],[1,[28,[35,11],[[30,3,["GatewayConfig","AssociatedServiceCount"]]],null]],[1,"\\n "],[1,[28,[35,12],[[30,3,["GatewayConfig","AssociatedServiceCount"]],"linked service"],[["without-count"],[true]]]],[1,"\\n "],[13],[1,"\\n"]],[]],[[[41,[28,[37,15],[[30,3,["Kind"]],"ingress-gateway"],null],[[[1," "],[10,1],[12],[1,"\\n "],[1,[28,[35,11],[[30,3,["GatewayConfig","AssociatedServiceCount"]]],null]],[1,"\\n "],[1,[28,[35,12],[[30,3,["GatewayConfig","AssociatedServiceCount"]],"upstream"],[["without-count"],[true]]]],[1,"\\n "],[13],[1,"\\n "]],[]],null]],[]]],[41,[28,[37,16],[[30,3,["ConnectedWithGateway"]],[30,3,["ConnectedWithProxy"]]],null],[[[1," "],[10,"dl"],[14,0,"mesh"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n "],[8,[39,2],null,null,[["default"],[[[[1,"\\n This service uses a proxy for the Consul service mesh\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n"],[41,[28,[37,10],[[30,3,["ConnectedWithGateway"]],[30,3,["ConnectedWithProxy"]]],null],[[[1," "],[10,"dd"],[12],[1,"\\n in service mesh with proxy and gateway\\n "],[13],[1,"\\n"]],[]],[[[41,[30,3,["ConnectedWithProxy"]],[[[1," "],[10,"dd"],[12],[1,"\\n in service mesh with proxy\\n "],[13],[1,"\\n"]],[]],[[[41,[30,3,["ConnectedWithGateway"]],[[[1," "],[10,"dd"],[12],[1,"\\n in service mesh with gateway\\n "],[13],[1,"\\n "]],[]],null]],[]]]],[]]],[1," "],[13],[1,"\\n"]],[]],null],[1," "],[8,[39,17],null,[["@item"],[[30,3]]],null],[1,"\\n "]],[]]]]],[1,"\\n"]],[3,4]]]]],[1,"\\n"]],["&attrs","@items","item","index","@partition","@isPeerDetail","@nspace"],false,["list-collection","block-slot","tooltip","if","gt","href-to","not-eq","hash","consul/kind","consul/external-source","and","format-number","pluralize","unless","consul/bucket/list","eq","or","tag-list"]]',moduleName:"consul-ui/components/consul/service/list/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/service/search-bar/index",["exports","@ember/component","@ember/template-factory","@glimmer/component"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"K9snRb1g",block:'[[[8,[39,0],[[24,0,"consul-service-search-bar"],[17,1]],[["@filter"],[[30,2]]],[["status","search","filter","sort"],[[[[1,"\\n\\n"],[44,[[28,[37,2],[[28,[37,3],["components.consul.service.search-bar.",[30,3,["status","key"]]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","key"]]],null],[28,[37,3],["common.consul.",[30,3,["status","key"]]],null]],null]]]],[28,[37,2],[[28,[37,3],["components.consul.service.search-bar.",[30,3,["status","value"]]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","value"]]],null],[28,[37,3],["common.consul.",[30,3,["status","value"]]],null],[28,[37,3],["common.brand.",[30,3,["status","value"]]],null]],null]]]]],[[[1," "],[8,[30,3,["RemoveFilter"]],[[16,"aria-label",[28,[37,2],["common.ui.remove"],[["item"],[[28,[37,3],[[30,4]," ",[30,5]],null]]]]]],null,[["default"],[[[[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,[30,4]],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,5]],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[4,5]]],[1,"\\n "]],[3]],[[[1,"\\n "],[8,[30,6,["Search"]],null,[["@onsearch","@value","@placeholder"],[[28,[37,5],[[30,0],[30,7]],null],[30,8],[28,[37,2],["common.search.search"],null]]],[["default"],[[[[1,"\\n "],[8,[30,6,["Select"]],[[24,0,"type-search-properties"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,2,["searchproperty","change"]]],null],true,true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["common.search.searchproperty"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,9,["Optgroup"]],[30,9,["Option"]]],[[[42,[28,[37,8],[[28,[37,8],[[30,2,["searchproperty","default"]]],null]],null],null,[[[1," "],[8,[30,11],null,[["@value","@selected"],[[30,12],[28,[37,9],[[30,12],[30,2,["searchproperty","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["common.consul.",[28,[37,10],[[30,12]],null]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[12]],null]],[10,11]]],[1," "]],[]]]]],[1,"\\n "]],[9]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]],[[[1,"\\n "],[8,[30,13,["Select"]],[[24,0,"type-status"]],[["@position","@onchange","@multiple"],["left",[28,[37,5],[[30,0],[30,2,["status","change"]]],null],true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["common.consul.status"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,14,["Optgroup"]],[30,14,["Option"]]],[[[42,[28,[37,8],[[28,[37,8],[[30,0,["healthStates"]]],null]],null],null,[[[1," "],[8,[30,16],[[16,0,[29,["value-",[30,17]]]]],[["@value","@selected"],[[30,17],[28,[37,9],[[30,17],[30,2,["status","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["common.consul.",[30,17]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,17]],null]],null]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[17]],null]],[15,16]]],[1," "]],[]]]]],[1,"\\n "]],[14]]]]],[1,"\\n "],[8,[30,13,["Select"]],null,[["@position","@onchange","@multiple"],["left",[28,[37,5],[[30,0],[30,2,["kind","change"]]],null],true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["components.consul.service.search-bar.kind"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,18,["Optgroup"]],[30,18,["Option"]]],[[[1," "],[8,[30,20],null,[["@value","@selected"],["service",[28,[37,9],["service",[30,2,["kind","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],["common.consul.service"],null]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,19],null,[["@label"],[[28,[37,2],["common.consul.gateway"],null]]],[["default"],[[[[1,"\\n"],[42,[28,[37,8],[[28,[37,8],[[28,[37,4],["api-gateway","ingress-gateway","terminating-gateway","mesh-gateway"],null]],null]],null],null,[[[1," "],[8,[30,20],null,[["@value","@selected"],[[30,21],[28,[37,9],[[30,21],[30,2,["kind","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["common.consul.",[30,21]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[21]],null],[1," "]],[]]]]],[1,"\\n "],[8,[30,19],null,[["@label"],[[28,[37,2],["common.consul.mesh"],null]]],[["default"],[[[[1,"\\n"],[42,[28,[37,8],[[28,[37,8],[[28,[37,4],["in-mesh","not-in-mesh"],null]],null]],null],null,[[[1," "],[8,[30,20],null,[["@value","@selected"],[[30,22],[28,[37,9],[[30,22],[30,2,["kind","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["common.search.",[30,22]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[22]],null],[1," "]],[]]]]],[1,"\\n"]],[19,20]]],[1," "]],[]]]]],[1,"\\n "]],[18]]]]],[1,"\\n"],[41,[28,[37,12],[[30,23,["length"]],0],null],[[[1," "],[8,[30,13,["Select"]],[[24,0,"type-source"]],[["@position","@onchange","@multiple"],["left",[28,[37,5],[[30,0],[30,2,["source","change"]]],null],true]],[["default"],[[[[1,"\\n "],[8,[39,13],null,[["@components","@filter","@sources"],[[30,24],[30,2],[30,0,["sortedSources"]]]],null],[1,"\\n "]],[24]]]]],[1,"\\n"]],[]],null],[1," "]],[13]],[[[1,"\\n "],[8,[30,25,["Select"]],[[24,0,"type-sort"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,26,["change"]]],null],false,true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n"],[44,[[28,[37,14],[[28,[37,4],[[28,[37,4],["Name:asc",[28,[37,2],["common.sort.alpha.asc"],null]],null],[28,[37,4],["Name:desc",[28,[37,2],["common.sort.alpha.desc"],null]],null],[28,[37,4],["Status:asc",[28,[37,2],["common.sort.status.asc"],null]],null],[28,[37,4],["Status:desc",[28,[37,2],["common.sort.status.desc"],null]],null]],null]],null]],[[[1," "],[1,[28,[35,15],[[30,28],[30,26,["value"]]],null]],[1,"\\n"]],[28]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,27,["Optgroup"]],[30,27,["Option"]]],[[[1," "],[8,[30,29],null,[["@label"],[[28,[37,2],["common.consul.status"],null]]],[["default"],[[[[1,"\\n "],[8,[30,30],null,[["@value","@selected"],["Status:asc",[28,[37,16],["Status:asc",[30,26,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.status.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,30],null,[["@value","@selected"],["Status:desc",[28,[37,16],["Status:desc",[30,26,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.status.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,29],null,[["@label"],[[28,[37,2],["common.consul.service-name"],null]]],[["default"],[[[[1,"\\n "],[8,[30,30],null,[["@value","@selected"],["Name:asc",[28,[37,16],["Name:asc",[30,26,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,30],null,[["@value","@selected"],["Name:desc",[28,[37,16],["Name:desc",[30,26,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[29,30]]],[1," "]],[]]]]],[1,"\\n "]],[27]]]]],[1,"\\n "]],[25]]]]],[1,"\\n"]],["&attrs","@filter","search","key","value","search","@onsearch","@search","components","Optgroup","Option","prop","search","components","Optgroup","Option","state","components","Optgroup","Option","kind","state","@sources","components","search","@sort","components","selectable","Optgroup","Option"],false,["search-bar","let","t","concat","array","action","block-slot","each","-track-array","includes","lowercase","if","gt","consul/sources-select","from-entries","get","eq"]]',moduleName:"consul-ui/components/consul/service/search-bar/index.hbs",isStrictMode:!1}) -class i extends l.default{get healthStates(){return this.args.peer?["passing","warning","critical","unknown","empty"]:["passing","warning","critical","empty"]}get sortedSources(){const e=this.args.sources||[] -return e.unshift(["consul"]),e.includes("consul-api-gateway")?[...e.filter((e=>"consul-api-gateway"!==e)),"consul-api-gateway"]:e}}e.default=i,(0,t.setComponentTemplate)(r,i)})),define("consul-ui/components/consul/source/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"7cN0Jpki",block:'[[[10,"dl"],[14,0,"tooltip-panel"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n "],[10,1],[14,0,"consul-source"],[12],[1,"\\n "],[1,[30,1]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,0],null,[["@position"],["left"]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],["components.consul.source.header"],null]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["menu"]],[["default"],[[[[1,"\\n "],[10,"li"],[14,"role","separator"],[12],[1,"\\n "],[1,[28,[35,2],["components.consul.source.menu-title"],null]],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[14,"role","none"],[14,0,"docs-link"],[12],[1,"\\n "],[10,3],[14,"tabindex","-1"],[14,"role","menuitem"],[15,6,[29,[[28,[37,3],["CONSUL_DOCS_URL"],null],"/connect/l7-traffic"]]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[1,"\\n "],[1,[28,[35,2],["components.consul.source.links.documentation"],null]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n"],[13],[1,"\\n\\n"]],["@source"],false,["menu-panel","block-slot","t","env"]]',moduleName:"consul-ui/components/consul/source/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/sources-select/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"xQqOlkTv",block:'[[[41,[28,[37,1],[[30,1,["length"]],0],null],[[[1," "],[8,[39,2],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,3],["common.search.source"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,2],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,2,["Option"]]],[[[42,[28,[37,6],[[28,[37,6],[[30,1]],null]],null],null,[[[44,[[28,[37,7],[[30,4]],null]],[[[1," "],[8,[30,3],[[16,0,[52,[51,[30,5]],[30,4]]]],[["@value","@selected"],[[30,4],[28,[37,9],[[30,4],[30,6,["source","value"]]],null]]],[["default"],[[[[1,"\\n"],[41,[30,5],[[[1," "],[8,[39,10],[[24,0,"mr-2.5"]],[["@name"],[[30,5]]],null],[1,"\\n"]],[]],null],[1," "],[1,[28,[35,3],[[28,[37,11],["common.brand.",[30,4]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[5]]]],[4]],null]],[3]]],[1," "]],[]]]]],[1,"\\n"]],[]],null]],["@sources","@components","Option","source","flightIcon","@filter"],false,["if","gt","block-slot","t","let","each","-track-array","icon-mapping","unless","includes","flight-icon","concat"]]',moduleName:"consul-ui/components/consul/sources-select/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/token/list/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"nhK5HxA8",block:'[[[8,[39,0],[[24,0,"consul-token-list"]],[["@items"],[[30,1]]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n"],[41,[28,[37,3],[[30,2,["AccessorID"]],[30,3,["AccessorID"]]],null],[[[1," "],[10,"dl"],[14,"rel","me"],[12],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,4],null,[["@position"],["top-start"]],[["default"],[[[[1,"\\n Your token\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1," "],[10,3],[15,6,[28,[37,5],["dc.acls.tokens.edit",[30,2,["AccessorID"]]],null]],[12],[1,[28,[35,6],[[30,2,["AccessorID"]],-8],null]],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["details"]],[["default"],[[[[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"Scope"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[52,[30,2,["Local"]],"local","global"]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[8,[39,7],null,[["@item"],[[30,2]]],null],[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"Description"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[28,[35,8],[[30,2,["Description"]],[30,2,["Name"]]],null]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n"],[41,[30,2,["hasSecretID"]],[[[1," "],[8,[39,9],null,[["@value","@name"],[[30,2,["SecretID"]],[28,[37,10],["components.consul.token.secretID"],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,10],["components.consul.token.secretID"],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[1," "],[8,[30,4],null,null,[["default"],[[[[1,"\\n "],[8,[30,5],null,[["@href"],[[28,[37,5],["dc.acls.tokens.edit",[30,2,["AccessorID"]]],null]]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["label"]],[["default"],[[[[1,"\\n"],[41,[28,[37,11],["write token"],[["item"],[[30,2]]]],[[[1," Edit\\n"]],[]],[[[1," View\\n"]],[]]],[1," "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"],[41,[28,[37,11],["duplicate token"],[["item"],[[30,2]]]],[[[1," "],[8,[30,5],null,[["@onclick"],[[28,[37,12],[[30,0],[30,6],[30,2]],null]]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["label"]],[["default"],[[[[1,"\\n Duplicate\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[1,"\\n"],[41,[28,[37,3],[[30,2,["AccessorID"]],[33,13,["AccessorID"]]],null],[[[1," "],[8,[30,5],[[24,0,"dangerous"]],[["@onclick"],[[28,[37,12],[[30,0],[30,7],[30,2]],null]]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["label"]],[["default"],[[[[1,"\\n Logout\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["confirmation"]],[["default"],[[[[1,"\\n "],[8,[30,8],[[24,0,"warning"]],null,[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n Confirm logout\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n Are you sure you want to stop using this ACL token? This will log you out.\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["confirm"]],[["default"],[[[[1,"\\n "],[8,[30,9],null,null,[["default"],[[[[1,"Logout"]],[]]]]],[1,"\\n "]],[9]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[8]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],[[[1," "],[8,[30,5],null,[["@onclick"],[[28,[37,12],[[30,0],[30,10],[30,2]],null]]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["label"]],[["default"],[[[[1,"\\n Use\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["confirmation"]],[["default"],[[[[1,"\\n "],[8,[30,11],[[24,0,"warning"]],null,[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n Confirm use\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n Are you sure you want to use this ACL token?\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["confirm"]],[["default"],[[[[1,"\\n "],[8,[30,12],null,null,[["default"],[[[[1,"Use"]],[]]]]],[1,"\\n "]],[12]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[11]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]]],[1,"\\n\\n"],[41,[28,[37,11],["delete token"],[["item","token"],[[30,2],[30,3]]]],[[[1," "],[8,[30,5],[[24,0,"dangerous"]],[["@onclick"],[[28,[37,12],[[30,0],[30,13],[30,2]],null]]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["label"]],[["default"],[[[[1,"\\n Delete\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["confirmation"]],[["default"],[[[[1,"\\n "],[8,[30,14],[[24,0,"warning"]],null,[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n Confirm delete\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n Are you sure you want to delete this token?\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["confirm"]],[["default"],[[[[1,"\\n "],[8,[30,15],null,null,[["default"],[[[[1,"Delete"]],[]]]]],[1,"\\n "]],[15]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[14]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[1,"\\n "]],[5]]]]],[1,"\\n "]],[4]]]]],[1,"\\n"]],[2]]]]]],["@items","item","@token","Actions","Action","@onclone","@onlogout","Confirmation","Confirm","@onuse","Confirmation","Confirm","@ondelete","Confirmation","Confirm"],false,["list-collection","block-slot","if","eq","tooltip","href-to","substr","consul/token/ruleset/list","or","copy-button","t","can","action","token"]]',moduleName:"consul-ui/components/consul/token/list/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/token/notifications/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"cW0yM/IH",block:'[[[41,[28,[37,1],[[30,1],"create"],null],[[[41,[28,[37,1],[[30,2],"success"],null],[[[1," The token has been added.\\n"]],[]],[[[1," There was an error adding the token.\\n"]],[]]]],[]],[[[41,[28,[37,1],[[30,1],"update"],null],[[[41,[28,[37,1],[[30,2],"success"],null],[[[1," The token has been saved.\\n"]],[]],[[[1," There was an error saving the token.\\n"]],[]]]],[]],[[[41,[28,[37,1],[[30,1],"delete"],null],[[[41,[28,[37,1],[[30,2],"success"],null],[[[1," The token was deleted.\\n"]],[]],[[[1," There was an error deleting the token.\\n"]],[]]]],[]],[[[41,[28,[37,1],[[30,1],"clone"],null],[[[41,[28,[37,1],[[30,2],"success"],null],[[[1," The token has been cloned as "],[1,[28,[35,2],[[30,3,["AccessorID"]],8,false],null]],[1,"\\n"]],[]],[[[1," There was an error cloning the token.\\n"]],[]]]],[]],[[[41,[28,[37,1],[[30,1],"use"],null],[[[41,[28,[37,1],[[30,2],"success"],null],[[[1," You are now using the new ACL token\\n"]],[]],[[[1," There was an error using that ACL token.\\n"]],[]]]],[]],null]],[]]]],[]]]],[]]]],[]]],[44,[[30,4,["errors","firstObject"]]],[[[41,[30,5,["detail"]],[[[1," "],[10,"br"],[12],[13],[1,[28,[35,4],["(",[52,[30,5,["status"]],[28,[37,4],[[30,5,["status"]],": "],null]],[30,5,["detail"]],")"],null]],[1,"\\n"]],[]],null]],[5]]]],["@type","@status","@item","@error","error"],false,["if","eq","truncate","let","concat"]]',moduleName:"consul-ui/components/consul/token/notifications/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/token/ruleset/list/index",["exports","@ember/component","@ember/template-factory"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const l=(0,n.createTemplateFactory)({id:"z6qiUtoK",block:'[[[44,[[28,[37,1],[[28,[37,2],[[33,3,["Policies"]],[33,3,["ACLs","PolicyDefaults"]],[28,[37,4],null,null]],null]],null]],[[[44,[[28,[37,5],[[30,1],"management"],null]],[[[41,[28,[37,7],[[30,2,["length"]],0],null],[[[1," "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n Management\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n"],[42,[28,[37,9],[[28,[37,9],[[28,[37,5],[[30,1],"management"],null]],null]],null],null,[[[1," "],[10,1],[15,0,[28,[37,10],[[30,3]],null]],[12],[1,[30,3,["Name"]]],[13],[1,"\\n"]],[3]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null]],[2]]],[44,[[28,[37,5],[[30,1],"identities"],null]],[[[41,[28,[37,7],[[30,4,["length"]],0],null],[[[1," "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"Identities"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n"],[42,[28,[37,9],[[28,[37,9],[[30,4]],null]],null],null,[[[1," "],[10,1],[15,0,[28,[37,10],[[30,5]],null]],[12],[1,[30,5,["Name"]]],[13],[1,"\\n"]],[5]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null]],[4]]],[41,[28,[37,11],[[33,3]],null],[[[1," "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"Rules"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n Legacy tokens have embedded rules.\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],[[[44,[[28,[37,12],[[28,[37,5],[[30,1],"policies"],null],[28,[37,2],[[33,3,["Roles"]],[33,3,["ACLs","RoleDefaults"]],[28,[37,4],null,null]],null]],null]],[[[41,[28,[37,7],[[30,6,["length"]],0],null],[[[1," "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"Rules"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n"],[42,[28,[37,9],[[28,[37,9],[[30,6]],null]],null],null,[[[1," "],[10,1],[15,0,[28,[37,10],[[30,7]],null]],[12],[1,[30,7,["Name"]]],[13],[1,"\\n"]],[7]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null]],[6]]]],[]]]],[1]]]],["policies","management","item","identities","item","policies","item"],false,["let","policy/group","or","item","array","get","if","gt","each","-track-array","policy/typeof","token/is-legacy","append"]]',moduleName:"consul-ui/components/consul/token/ruleset/list/index.hbs",isStrictMode:!1}) -var r=(0,t.setComponentTemplate)(l,t.default.extend({tagName:""})) -e.default=r})),define("consul-ui/components/consul/token/search-bar/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"81pOiVwr",block:'[[[8,[39,0],[[24,0,"consul-token-search-bar"],[17,1]],[["@filter"],[[30,2]]],[["status","search","filter","sort"],[[[[1,"\\n\\n"],[44,[[28,[37,2],[[28,[37,3],["components.consul.token.search-bar.",[30,3,["status","key"]],".name"],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","key"]]],null],[28,[37,3],["common.consul.",[30,3,["status","key"]]],null]],null]]]],[28,[37,2],[[28,[37,3],["components.consul.token.search-bar.",[30,3,["status","key"]],".options.",[30,3,["status","value"]]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","value"]]],null],[28,[37,3],["common.consul.",[30,3,["status","value"]]],null],[28,[37,3],["common.brand.",[30,3,["status","value"]]],null]],null]]]]],[[[1," "],[8,[30,3,["RemoveFilter"]],[[16,"aria-label",[28,[37,2],["common.ui.remove"],[["item"],[[28,[37,3],[[30,4]," ",[30,5]],null]]]]]],null,[["default"],[[[[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,[30,4]],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,5]],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[4,5]]],[1,"\\n "]],[3]],[[[1,"\\n "],[8,[30,6,["Search"]],null,[["@onsearch","@value","@placeholder"],[[28,[37,5],[[30,0],[30,7]],null],[30,8],[28,[37,2],["common.search.search"],null]]],[["default"],[[[[1,"\\n "],[8,[30,6,["Select"]],[[24,0,"type-search-properties"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,2,["searchproperty","change"]]],null],true,true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["common.search.searchproperty"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,9,["Optgroup"]],[30,9,["Option"]]],[[[42,[28,[37,8],[[28,[37,8],[[30,2,["searchproperty","default"]]],null]],null],null,[[[1," "],[8,[30,11],null,[["@value","@selected"],[[30,12],[28,[37,9],[[30,12],[30,2,["searchproperty","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["common.consul.",[28,[37,10],[[30,12]],null]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[12]],null]],[10,11]]],[1," "]],[]]]]],[1,"\\n "]],[9]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]],[[[1,"\\n "],[8,[30,13,["Select"]],[[24,0,"type-status"]],[["@position","@onchange","@multiple"],["left",[28,[37,5],[[30,0],[30,2,["kind","change"]]],null],true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["components.consul.token.search-bar.kind.name"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,14,["Optgroup"]],[30,14,["Option"]]],[[[42,[28,[37,8],[[28,[37,8],[[28,[37,4],["global-management","global","local"],null]],null]],null],null,[[[1," "],[8,[30,16],[[16,0,[29,["value-",[30,17]]]]],[["@value","@selected"],[[30,17],[28,[37,9],[[30,17],[30,2,["kind","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["components.consul.token.search-bar.kind.options.",[30,17]],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,17]],null]],null]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[17]],null]],[15,16]]],[1," "]],[]]]]],[1,"\\n "]],[14]]]]],[1,"\\n "]],[13]],[[[1,"\\n "],[8,[30,18,["Select"]],[[24,0,"type-sort"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,19,["change"]]],null],false,true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n"],[44,[[28,[37,11],[[28,[37,4],[[28,[37,4],["CreateTime:desc",[28,[37,2],["common.sort.age.desc"],null]],null],[28,[37,4],["CreateTime:asc",[28,[37,2],["common.sort.age.asc"],null]],null]],null]],null]],[[[1," "],[1,[28,[35,12],[[30,21],[30,19,["value"]]],null]],[1,"\\n"]],[21]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,20,["Optgroup"]],[30,20,["Option"]]],[[[1," "],[8,[30,22],null,[["@label"],[[28,[37,2],["common.ui.creation"],null]]],[["default"],[[[[1,"\\n "],[8,[30,23],null,[["@value","@selected"],["CreateTime:desc",[28,[37,13],["CreateTime:desc",[30,19,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.age.desc"],null]]],[]]]]],[1,"\\n "],[8,[30,23],null,[["@value","@selected"],["CreateTime:asc",[28,[37,13],["CreateTime:asc",[30,19,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.age.asc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[22,23]]],[1," "]],[]]]]],[1,"\\n "]],[20]]]]],[1,"\\n "]],[18]]]]],[1,"\\n"]],["&attrs","@filter","search","key","value","search","@onsearch","@search","components","Optgroup","Option","prop","search","components","Optgroup","Option","state","search","@sort","components","selectable","Optgroup","Option"],false,["search-bar","let","t","concat","array","action","block-slot","each","-track-array","includes","lowercase","from-entries","get","eq"]]',moduleName:"consul-ui/components/consul/token/search-bar/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/token/selector/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@ember/object"],(function(e,t,n,l,r){var i -function o(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const a=(0,n.createTemplateFactory)({id:"TUgK5bUH",block:'[[[41,[28,[37,1],["use acls"],null],[[[1," "],[10,"li"],[12],[1,"\\n\\n "],[8,[39,2],null,[["@src","@sink","@onchange"],[[28,[37,3],["settings://consul:token"],null],[28,[37,3],["settings://consul:token"],null],[30,0,["reauthorize"]]]],[["unauthorized","authorized"],[[[[1,"\\n "],[8,[39,4],null,[["@target"],["app-before-skip-links"]],[["default"],[[[[1,"\\n "],[8,[39,5],[[4,[38,6],["click",[28,[37,7],[[30,0,["modal","open"]]],null]],null]],null,[["default"],[[[[1,"\\n Login\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],[[4,[38,6],["click",[28,[37,7],[[30,0,["modal","open"]]],null]],null]],null,[["default"],[[[[1,"\\n Log in\\n "]],[]]]]],[1,"\\n "],[8,[39,8],null,[["@name","@onclose","@onopen","@aria"],["login-toggle",[30,0,["close"]],[30,0,["open"]],[28,[37,9],null,[["label"],["Log in to Consul"]]]]],[["default"],[[[[1,"\\n "],[8,[39,10],null,[["@target","@name","@value"],[[30,0],"modal",[30,2]]],null],[1,"\\n "],[8,[39,11],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"\\n Log in to Consul\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,11],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[8,[39,12],null,[["@dc","@partition","@nspace","@onsubmit"],[[30,3,["Name"]],[30,4],[30,5],[28,[37,5],[[30,0],[30,1,["login"]]],[["value"],["data"]]]]],[["default"],[[[[1,"\\n "],[8,[39,10],null,[["@target","@name","@value"],[[30,0],"authForm",[30,6]]],null],[1,"\\n"],[41,[28,[37,1],["use SSO"],null],[[[1," "],[8,[30,6,["Method"]],null,[["@matches"],["sso"]],[["default"],[[[[1,"\\n "],[8,[39,13],null,[["@dc","@partition","@nspace","@disabled","@onchange","@onerror"],[[30,3,["Name"]],[30,4],[30,5],[30,6,["disabled"]],[30,6,["submit"]],[30,6,["error"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[1," "]],[6]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,11],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[8,[39,14],[[4,[38,6],["click",[30,2,["close"]]],null]],[["@color","@text"],["secondary","Continue without logging in"]],null],[1,"\\n "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n "]],[1]],[[[1,"\\n "],[8,[39,8],null,[["@name","@onclose","@onopen","@aria"],["login-toggle",[30,0,["close"]],[30,0,["open"]],[28,[37,9],null,[["label"],["Log in with a different token"]]]]],[["default"],[[[[1,"\\n "],[8,[39,10],null,[["@target","@name","@value"],[[30,0],"modal",[30,8]]],null],[1,"\\n "],[8,[39,11],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"\\n Log in with a different token\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,11],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[8,[39,12],null,[["@dc","@nspace","@partition","@onsubmit"],[[30,3,["Name"]],[30,5],[30,4],[28,[37,5],[[30,0],[30,7,["login"]]],[["value"],["data"]]]]],[["default"],[[[[1,"\\n "],[8,[39,10],null,[["@target","@name","@value"],[[30,0],"authForm",[30,9]]],null],[1,"\\n "]],[9]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,11],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[8,[39,14],[[4,[38,6],["click",[30,8,["close"]]],null]],[["@color","@text"],["secondary","Continue without logging in"]],null],[1,"\\n "]],[]]]]],[1,"\\n "]],[8]]]]],[1,"\\n "],[8,[39,4],null,[["@target"],["app-before-skip-links"]],[["default"],[[[[1,"\\n "],[8,[39,5],[[4,[38,6],["click",[28,[37,7],[[30,7,["logout"]]],null]],null]],null,[["default"],[[[[1,"\\n Logout\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,15],null,null,[["default"],[[[[1,"\\n "],[8,[30,10,["Action"]],[[4,[38,6],["click",[30,10,["toggle"]]],null]],null,[["default"],[[[[1,"\\n Logout\\n "]],[]]]]],[1,"\\n "],[8,[30,10,["Menu"]],null,null,[["default"],[[[[1,"\\n"],[41,[30,7,["token","AccessorID"]],[[[1," "],[8,[39,16],null,[["@item"],[[30,7,["token"]]]],null],[1,"\\n"]],[]],null],[1," "],[8,[30,11,["Menu"]],null,null,[["default"],[[[[1,"\\n "],[8,[30,12,["Separator"]],null,null,null],[1,"\\n "],[8,[30,12,["Item"]],[[24,0,"dangerous"]],null,[["default"],[[[[1,"\\n "],[8,[30,12,["Action"]],[[4,[38,6],["click",[28,[37,7],[[30,7,["logout"]]],null]],null]],null,[["default"],[[[[1,"\\n Logout\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[12]]]]],[1,"\\n "]],[11]]]]],[1,"\\n "]],[10]]]]],[1,"\\n "]],[7]]]]],[1,"\\n\\n "],[13],[1,"\\n"],[18,13,[[28,[37,9],null,[["open","close"],[[30,0,["modal","open"]],[30,0,["model","close"]]]]]]],[1,"\\n"]],[]],null],[1,"\\n"]],["authDialog","modal","@dc","@partition","@nspace","authForm","authDialog","modal","authForm","disclosure","panel","menu","&default"],false,["if","can","auth-dialog","uri","portal","action","on","optional","modal-dialog","hash","ref","block-slot","auth-form","oidc-select","hds/button","disclosure-menu","auth-profile","yield"]]',moduleName:"consul-ui/components/consul/token/selector/index.hbs",isStrictMode:!1}) -let u=(o((i=class extends l.default{open(){this.authForm.focus()}close(){this.authForm.reset()}reauthorize(e){this.modal.close(),this.args.onchange(e)}}).prototype,"open",[r.action],Object.getOwnPropertyDescriptor(i.prototype,"open"),i.prototype),o(i.prototype,"close",[r.action],Object.getOwnPropertyDescriptor(i.prototype,"close"),i.prototype),o(i.prototype,"reauthorize",[r.action],Object.getOwnPropertyDescriptor(i.prototype,"reauthorize"),i.prototype),i) -e.default=u,(0,t.setComponentTemplate)(a,u)})),define("consul-ui/components/consul/tomography/graph/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@glimmer/tracking"],(function(e,t,n,l,r){var i,o -function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const u=(0,n.createTemplateFactory)({id:"ZXa/jDY4",block:'[[[11,0],[24,0,"tomography-graph"],[17,1],[12],[1,"\\n "],[10,"svg"],[15,"width",[30,0,["size"]]],[15,"height",[30,0,["size"]]],[12],[1,"\\n "],[10,"g"],[15,"transform",[29,["translate(",[28,[37,0],[[30,0,["size"]],2],null],", ",[28,[37,0],[[30,0,["size"]],2],null],")"]]],[12],[1,"\\n "],[10,"g"],[12],[1,"\\n "],[10,"circle"],[14,0,"background"],[15,"r",[30,0,["circle","0"]]],[12],[13],[1,"\\n "],[10,"circle"],[14,0,"axis"],[15,"r",[30,0,["circle","1"]]],[12],[13],[1,"\\n "],[10,"circle"],[14,0,"axis"],[15,"r",[30,0,["circle","2"]]],[12],[13],[1,"\\n "],[10,"circle"],[14,0,"axis"],[15,"r",[30,0,["circle","3"]]],[12],[13],[1,"\\n "],[10,"circle"],[14,0,"border"],[15,"r",[30,0,["circle","4"]]],[12],[13],[1,"\\n "],[13],[1,"\\n "],[10,"g"],[14,0,"lines"],[12],[1,"\\n"],[42,[28,[37,2],[[28,[37,2],[[30,0,["distances"]]],null]],null],null,[[[1," "],[11,"rect"],[16,"transform",[29,["rotate(",[30,2,["rotate"]],")"]]],[16,"width",[30,2,["y2"]]],[24,"height","1"],[4,[38,3],[[28,[37,4],[[30,2,["node"]]," - ",[28,[37,5],[[30,2,["distance"]]],[["maximumFractionDigits"],[2]]],"ms",[52,[30,2,["segment"]],[28,[37,4],["
      (Segment: ",[30,2,["segment"]],")"],null]]],null]],[["options"],[[28,[37,7],null,[["followCursor","allowHTML"],[true,true]]]]]],[12],[13],[1,"\\n"]],[2]],null],[1," "],[13],[1,"\\n "],[10,"g"],[14,0,"labels"],[12],[1,"\\n "],[10,"circle"],[14,0,"point"],[14,"r","5"],[12],[13],[1,"\\n "],[10,"g"],[14,0,"tick"],[15,"transform",[29,["translate(0, ",[30,0,["labels","0"]],")"]]],[12],[1,"\\n "],[10,"line"],[14,"x2","70"],[12],[13],[1,"\\n "],[10,"text"],[14,"x","75"],[14,"y","0"],[14,"dy",".32em"],[12],[1,[28,[35,5],[[30,0,["milliseconds","0"]]],[["maximumFractionDigits"],[2]]]],[1,"ms"],[13],[1,"\\n "],[13],[1,"\\n "],[10,"g"],[14,0,"tick"],[15,"transform",[29,["translate(0, ",[30,0,["labels","1"]],")"]]],[12],[1,"\\n "],[10,"line"],[14,"x2","70"],[12],[13],[1,"\\n "],[10,"text"],[14,"x","75"],[14,"y","0"],[14,"dy",".32em"],[12],[1,[28,[35,5],[[30,0,["milliseconds","1"]]],[["maximumFractionDigits"],[2]]]],[1,"ms"],[13],[1,"\\n "],[13],[1,"\\n "],[10,"g"],[14,0,"tick"],[15,"transform",[29,["translate(0, ",[30,0,["labels","2"]],")"]]],[12],[1,"\\n "],[10,"line"],[14,"x2","70"],[12],[13],[1,"\\n "],[10,"text"],[14,"x","75"],[14,"y","0"],[14,"dy",".32em"],[12],[1,[28,[35,5],[[30,0,["milliseconds","2"]]],[["maximumFractionDigits"],[2]]]],[1,"ms"],[13],[1,"\\n "],[13],[1,"\\n "],[10,"g"],[14,0,"tick"],[15,"transform",[29,["translate(0, ",[30,0,["labels","3"]],")"]]],[12],[1,"\\n "],[10,"line"],[14,"x2","70"],[12],[13],[1,"\\n "],[10,"text"],[14,"x","75"],[14,"y","0"],[14,"dy",".32em"],[12],[1,[28,[35,5],[[30,0,["milliseconds","3"]]],[["maximumFractionDigits"],[2]]]],[1,"ms"],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"],[13],[1,"\\n"]],["&attrs","item"],false,["div","each","-track-array","tooltip","concat","format-number","if","hash"]]',moduleName:"consul-ui/components/consul/tomography/graph/index.hbs",isStrictMode:!1}),s=function(e){return 160*e} -let c=(i=class extends l.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="max",l=this,(n=o)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0}),a(this,"size",336),a(this,"circle",[s(1),s(.25),s(.5),s(.75),s(1)]),a(this,"labels",[s(-.25),s(-.5),s(-.75),s(-1)])}get milliseconds(){const e=(this.args.distances||[]).reduce(((e,t)=>Math.max(e,t.distance)),this.max) -return[25,50,75,100].map((t=>function(e,t){return t>0?parseInt(t*e)/100:0}(t,e)))}get distances(){let e=this.args.distances||[] -const t=e.reduce(((e,t)=>Math.max(e,t.distance)),this.max),n=e.length -if(n>360){const t=360/n -e=e.filter((function(e,l){return 0==l||l==n-1||Math.random()({rotate:360*l/e.length,y2:n.distance/t*160,node:n.node,distance:n.distance,segment:n.segment})))}},d=i.prototype,p="max",f=[r.tracked],m={configurable:!0,enumerable:!0,writable:!0,initializer:function(){return-999999999}},b={},Object.keys(m).forEach((function(e){b[e]=m[e]})),b.enumerable=!!b.enumerable,b.configurable=!!b.configurable,("value"in b||b.initializer)&&(b.writable=!0),b=f.slice().reverse().reduce((function(e,t){return t(d,p,e)||e}),b),h&&void 0!==b.initializer&&(b.value=b.initializer?b.initializer.call(h):void 0,b.initializer=void 0),void 0===b.initializer&&(Object.defineProperty(d,p,b),b=null),o=b,i) -var d,p,f,m,h,b -e.default=c,(0,t.setComponentTemplate)(u,c)})),define("consul-ui/components/consul/transparent-proxy/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"UjBsOCBt",block:'[[[10,1],[14,0,"consul-transparent-proxy"],[12],[1,"\\n "],[1,[28,[35,0],["components.consul.transparent-proxy"],null]],[1,"\\n"],[13]],[],false,["t"]]',moduleName:"consul-ui/components/consul/transparent-proxy/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/upstream-instance/list/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"GEohwFqk",block:'[[[11,0],[24,0,"consul-upstream-instance-list"],[17,1],[12],[1,"\\n "],[10,"ul"],[12],[1,"\\n"],[42,[28,[37,1],[[28,[37,1],[[30,2]],null]],null],null,[[[1," "],[10,"li"],[12],[1,"\\n\\n "],[10,0],[14,0,"header"],[12],[1,"\\n "],[10,2],[12],[1,"\\n "],[1,[30,3,["DestinationName"]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n\\n "],[10,0],[14,0,"detail"],[12],[1,"\\n\\n"],[41,[28,[37,3],[[30,3,["DestinationType"]],"prepared_query"],null],[[[1," "],[8,[39,4],null,[["@item","@partition","@nspace"],[[28,[37,5],null,[["Namespace","Partition"],[[28,[37,6],[[30,3,["DestinationNamespace"]],[30,4]],null],[28,[37,6],[[30,3,["DestinationPartition"]],[30,5]],null]]]],[30,5],[30,4]]],null],[1,"\\n"]],[]],null],[1,"\\n"],[41,[28,[37,7],[[28,[37,3],[[30,3,["Datacenter"]],[30,6]],null],[28,[37,3],[[30,3,["Datacenter"]],""],null]],null],[[[1," "],[10,"dl"],[14,0,"datacenter"],[12],[1,"\\n "],[11,"dt"],[4,[38,8],null,null],[12],[1,"\\n Datacenter\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[30,3,["Datacenter"]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1,"\\n"],[41,[30,3,["LocalBindSocketPath"]],[[[1," "],[10,"dl"],[14,0,"local-bind-socket-path"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n Local bind socket path\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,9],null,[["@value","@name"],[[30,3,["LocalBindSocketPath"]],"Local bind socket path"]],null],[1,"\\n "],[1,[30,3,["LocalBindSocketPath"]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[10,"dl"],[14,0,"local-bind-socket-mode"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n Mode\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[28,[35,6],[[30,3,["LocalBindSocketMode"]],"-"],null]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],[[[1,"\\n"],[41,[28,[37,10],[[30,3,["LocalBindPort"]],0],null],[[[44,[[28,[37,12],[[28,[37,6],[[30,3,["LocalBindAddress"]],"127.0.0.1"],null],":",[30,3,["LocalBindPort"]]],null]],[[[1," "],[10,"dl"],[14,0,"local-bind-address"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n Address\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,9],null,[["@value","@name"],[[30,7],"Address"]],null],[1,"\\n "],[1,[30,7]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[7]]]],[]],null],[1,"\\n"]],[]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[3]],null],[1," "],[13],[1,"\\n"],[13],[1,"\\n"]],["&attrs","@items","item","@nspace","@partition","@dc","combinedAddress"],false,["each","-track-array","if","not-eq","consul/bucket/list","hash","or","and","tooltip","copy-button","gt","let","concat"]]',moduleName:"consul-ui/components/consul/upstream-instance/list/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/upstream-instance/search-bar/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"wsZfd7L1",block:'[[[8,[39,0],[[24,0,"consul-upstream-instance-search-bar"],[17,1]],[["@filter"],[[30,2]]],[["status","search","sort"],[[[[1,"\\n\\n"],[44,[[28,[37,2],[[28,[37,3],["components.consul.upstream-instance.search-bar.",[30,3,["status","key"]],".name"],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","key"]]],null],[28,[37,3],["common.consul.",[30,3,["status","key"]]],null]],null]]]],[28,[37,2],[[28,[37,3],["components.consul.upstream-instance.search-bar.",[30,3,["status","value"]],".name"],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","value"]]],null],[28,[37,3],["common.consul.",[30,3,["status","value"]]],null],[28,[37,3],["common.brand.",[30,3,["status","value"]]],null]],null]]]]],[[[1," "],[8,[30,3,["RemoveFilter"]],[[16,"aria-label",[28,[37,2],["common.ui.remove"],[["item"],[[28,[37,3],[[30,4]," ",[30,5]],null]]]]]],null,[["default"],[[[[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,[30,4]],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,5]],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[4,5]]],[1,"\\n "]],[3]],[[[1,"\\n "],[8,[30,6,["Search"]],null,[["@onsearch","@value","@placeholder"],[[28,[37,5],[[30,0],[30,7]],null],[30,8],[28,[37,2],["common.search.search"],null]]],[["default"],[[[[1,"\\n "],[8,[30,6,["Select"]],[[24,0,"type-search-properties"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,2,["searchproperty","change"]]],null],true,true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["common.search.searchproperty"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,9,["Optgroup"]],[30,9,["Option"]]],[[[42,[28,[37,8],[[28,[37,8],[[30,2,["searchproperty","default"]]],null]],null],null,[[[1," "],[8,[30,11],null,[["@value","@selected"],[[30,12],[28,[37,9],[[30,12],[30,2,["searchproperty","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["common.consul.",[28,[37,10],[[30,12]],null]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[12]],null]],[10,11]]],[1," "]],[]]]]],[1,"\\n "]],[9]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]],[[[1,"\\n "],[8,[30,13,["Select"]],[[24,0,"type-sort"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,14,["change"]]],null],false,true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n"],[44,[[28,[37,11],[[28,[37,4],[[28,[37,4],["DestinationName:asc",[28,[37,2],["common.sort.alpha.asc"],null]],null],[28,[37,4],["DestinationName:desc",[28,[37,2],["common.sort.alpha.desc"],null]],null]],null]],null]],[[[1," "],[1,[28,[35,12],[[30,16],[30,14,["value"]]],null]],[1,"\\n"]],[16]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,15,["Optgroup"]],[30,15,["Option"]]],[[[1," "],[8,[30,18],null,[["@value","@selected"],["DestinationName:asc",[28,[37,13],["DestinationName:asc",[30,14,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,18],null,[["@value","@selected"],["DestinationName:desc",[28,[37,13],["DestinationName:desc",[30,14,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.desc"],null]]],[]]]]],[1,"\\n"]],[17,18]]],[1," "]],[]]]]],[1,"\\n "]],[15]]]]],[1,"\\n "]],[13]]]]],[1,"\\n"]],["&attrs","@filter","search","key","value","search","@onsearch","@search","components","Optgroup","Option","prop","search","@sort","components","selectable","Optgroup","Option"],false,["search-bar","let","t","concat","array","action","block-slot","each","-track-array","includes","lowercase","from-entries","get","eq"]]',moduleName:"consul-ui/components/consul/upstream-instance/search-bar/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/upstream/list/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"eZNZsVXh",block:'[[[8,[39,0],[[24,0,"consul-upstream-list"],[17,1]],[["@items","@linkable"],[[30,2],"linkable upstream"]],[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[1,"\\n"],[41,[28,[37,3],[[30,3,["InstanceCount"]],0],null],[[[1," "],[10,"dl"],[15,0,[30,3,["MeshStatus"]]],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n Health\\n "],[13],[1,"\\n "],[11,"dd"],[4,[38,4],null,null],[12],[1,"\\n"],[41,[28,[37,5],["critical",[30,3,["MeshStatus"]]],null],[[[1," At least one health check on one instance is failing.\\n"]],[]],[[[41,[28,[37,5],["warning",[30,3,["MeshStatus"]]],null],[[[1," At least one health check on one instance has a warning.\\n"]],[]],[[[41,[28,[37,5],["passing",[30,3,["MeshStatus"]]],null],[[[1," All health checks are passing.\\n"]],[]],[[[1," There are no health checks.\\n "]],[]]]],[]]]],[]]],[1," "],[13],[1,"\\n "],[13],[1,"\\n "],[10,3],[15,6,[28,[37,6],["dc.services.show",[30,3,["Name"]]],[["params"],[[52,[28,[37,7],[[30,3,["Partition"]],[30,5]],null],[28,[37,8],null,[["partition","nspace"],[[30,3,["Partition"]],[30,3,["Namespace"]]]]],[52,[28,[37,7],[[30,3,["Namespace"]],[30,6]],null],[28,[37,8],null,[["nspace"],[[30,3,["Namespace"]]]]],[28,[37,8],null,null]]]]]]],[12],[1,"\\n "],[1,[30,3,["Name"]]],[1,"\\n "],[13],[1,"\\n"]],[]],[[[1," "],[10,2],[12],[1,"\\n "],[1,[30,3,["Name"]]],[1,"\\n "],[13],[1,"\\n"]],[]]],[1," "]],[]]]]],[1,"\\n "],[8,[39,1],null,[["@name"],["details"]],[["default"],[[[[1,"\\n "],[8,[39,9],null,[["@item","@nspace","@partition"],[[30,3],[30,6],[30,5]]],null],[1,"\\n"],[42,[28,[37,11],[[28,[37,11],[[30,3,["GatewayConfig","Addresses"]]],null]],null],null,[[[1," "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n Address\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,12],null,[["@value","@name"],[[30,7],"Address"]],null],[1,"\\n "],[1,[30,7]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[7]],null],[1," "]],[]]]]],[1,"\\n"]],[3,4]]]]],[1,"\\n"]],["&attrs","@items","item","index","@partition","@nspace","address"],false,["list-collection","block-slot","if","gt","tooltip","eq","href-to","not-eq","hash","consul/bucket/list","each","-track-array","copy-button"]]',moduleName:"consul-ui/components/consul/upstream/list/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/consul/upstream/search-bar/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"t4tLfZqU",block:'[[[8,[39,0],[[24,0,"consul-upstream-search-bar"],[17,1]],[["@filter"],[[30,2]]],[["status","search","filter","sort"],[[[[1,"\\n\\n"],[44,[[28,[37,2],[[28,[37,3],["components.consul.upstream.search-bar.",[30,3,["status","key"]],".name"],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","key"]]],null],[28,[37,3],["common.consul.",[30,3,["status","key"]]],null]],null]]]],[28,[37,2],[[28,[37,3],["components.consul.upstream.search-bar.",[30,3,["status","value"]],".name"],null]],[["default"],[[28,[37,4],[[28,[37,3],["common.search.",[30,3,["status","value"]]],null],[28,[37,3],["common.consul.",[30,3,["status","value"]]],null],[28,[37,3],["common.brand.",[30,3,["status","value"]]],null]],null]]]]],[[[1," "],[8,[30,3,["RemoveFilter"]],[[16,"aria-label",[28,[37,2],["common.ui.remove"],[["item"],[[28,[37,3],[[30,4]," ",[30,5]],null]]]]]],null,[["default"],[[[[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,[30,4]],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,5]],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[4,5]]],[1,"\\n "]],[3]],[[[1,"\\n "],[8,[30,6,["Search"]],null,[["@onsearch","@value","@placeholder"],[[28,[37,5],[[30,0],[30,7]],null],[30,8],[28,[37,2],["common.search.search"],null]]],[["default"],[[[[1,"\\n "],[8,[30,6,["Select"]],[[24,0,"type-search-properties"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,2,["searchproperty","change"]]],null],true,true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["common.search.searchproperty"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,9,["Optgroup"]],[30,9,["Option"]]],[[[42,[28,[37,8],[[28,[37,8],[[30,2,["searchproperty","default"]]],null]],null],null,[[[1," "],[8,[30,11],null,[["@value","@selected"],[[30,12],[28,[37,9],[[30,12],[30,2,["searchproperty","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["common.consul.",[28,[37,10],[[30,12]],null]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[12]],null]],[10,11]]],[1," "]],[]]]]],[1,"\\n "]],[9]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]],[[[1,"\\n "],[8,[30,13,["Select"]],null,[["@position","@onchange","@multiple"],["left",[28,[37,5],[[30,0],[30,2,["instance","change"]]],null],true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n "],[1,[28,[35,2],["components.consul.upstream.search-bar.instance.name"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,14,["Optgroup"]],[30,14,["Option"]]],[[[42,[28,[37,8],[[28,[37,8],[[28,[37,4],["registered","not-registered"],null]],null]],null],null,[[[1," "],[8,[30,16],null,[["@value","@selected"],[[30,17],[28,[37,9],[[30,17],[30,2,["instance","value"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["common.consul.",[30,17]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[17]],null]],[15,16]]],[1," "]],[]]]]],[1,"\\n "]],[14]]]]],[1,"\\n "]],[13]],[[[1,"\\n "],[8,[30,18,["Select"]],[[24,0,"type-sort"]],[["@position","@onchange","@multiple","@required"],["right",[28,[37,5],[[30,0],[30,19,["change"]]],null],false,true]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[10,1],[12],[1,"\\n"],[44,[[28,[37,11],[[28,[37,4],[[28,[37,4],["Name:asc",[28,[37,2],["common.sort.alpha.asc"],null]],null],[28,[37,4],["Name:desc",[28,[37,2],["common.sort.alpha.desc"],null]],null],[28,[37,4],["Status:asc",[28,[37,2],["common.sort.status.asc"],null]],null],[28,[37,4],["Status:desc",[28,[37,2],["common.sort.status.desc"],null]],null]],null]],null]],[[[1," "],[1,[28,[35,12],[[30,21],[30,19,["value"]]],null]],[1,"\\n"]],[21]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["options"]],[["default"],[[[[1,"\\n"],[44,[[30,20,["Optgroup"]],[30,20,["Option"]]],[[[1," "],[8,[30,22],null,[["@label"],[[28,[37,2],["common.consul.status"],null]]],[["default"],[[[[1,"\\n "],[8,[30,23],null,[["@value","@selected"],["Status:asc",[28,[37,13],["Status:asc",[30,19,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.status.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,23],null,[["@value","@selected"],["Status:desc",[28,[37,13],["Status:desc",[30,19,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.status.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,22],null,[["@label"],[[28,[37,2],["common.consul.service-name"],null]]],[["default"],[[[[1,"\\n "],[8,[30,23],null,[["@value","@selected"],["Name:asc",[28,[37,13],["Name:asc",[30,19,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.asc"],null]]],[]]]]],[1,"\\n "],[8,[30,23],null,[["@value","@selected"],["Name:desc",[28,[37,13],["Name:desc",[30,19,["value"]]],null]]],[["default"],[[[[1,[28,[35,2],["common.sort.alpha.desc"],null]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[22,23]]],[1," "]],[]]]]],[1,"\\n "]],[20]]]]],[1,"\\n "]],[18]]]]],[1,"\\n"]],["&attrs","@filter","search","key","value","search","@onsearch","@search","components","Optgroup","Option","prop","search","components","Optgroup","Option","item","search","@sort","components","selectable","Optgroup","Option"],false,["search-bar","let","t","concat","array","action","block-slot","each","-track-array","includes","lowercase","from-entries","get","eq"]]',moduleName:"consul-ui/components/consul/upstream/search-bar/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/copy-button/chart.xstate",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={id:"copy-button",initial:"idle",on:{RESET:[{target:"idle"}]},states:{idle:{on:{SUCCESS:[{target:"success"}],ERROR:[{target:"error"}]}},success:{},error:{}}}})),define("consul-ui/components/copy-button/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","consul-ui/components/copy-button/chart.xstate"],(function(e,t,n,l,r){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const i=(0,n.createTemplateFactory)({id:"6RaQJr4m",block:'[[[8,[39,0],null,[["@src"],[[30,0,["chart"]]]],[["default"],[[[[1,"\\n "],[11,0],[24,0,"copy-button"],[17,6],[12],[1,"\\n"],[44,[[28,[37,2],[[30,4],"SUCCESS"],null],[28,[37,2],[[30,4],"ERROR"],null],[28,[37,2],[[30,4],"RESET"],null]],[[[1," "],[11,"button"],[16,"aria-label",[28,[37,3],["components.copy-button.title"],[["name"],[[30,10]]]]],[24,4,"button"],[24,0,"copy-btn"],[17,6],[4,[38,4],[[30,11]],[["success","error"],[[30,7],[30,8]]]],[4,[38,5],[[52,[28,[37,7],[[30,5],"success"],null],[28,[37,3],["components.copy-button.success"],[["name"],[[30,10]]]],[28,[37,3],["components.copy-button.error"],null]]],[["options"],[[28,[37,8],null,[["trigger","showOnCreate","delay","onHidden"],["manual",[28,[37,9],[[28,[37,7],[[30,5],"idle"],null]],null],[28,[37,10],[0,3000],null],[30,9]]]]]]],[12],[18,12,null],[13],[1,"\\n"]],[7,8,9]]],[1," "],[13],[1,"\\n"]],[1,2,3,4,5]]]]],[1,"\\n"]],["State","Guard","Action","dispatch","state","&attrs","success","error","reset","@name","@value","&default"],false,["state-chart","let","fn","t","with-copyable","tooltip","if","state-matches","hash","not","array","yield"]]',moduleName:"consul-ui/components/copy-button/index.hbs",isStrictMode:!1}) -class o extends l.default{constructor(){super(...arguments),this.chart=r.default}}e.default=o,(0,t.setComponentTemplate)(i,o)})),define("consul-ui/components/copyable-code/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"Q8iW7hMH",block:'[[[11,0],[16,0,[28,[37,0],["copyable-code",[28,[37,1],["obfuscated",[30,1]],null]],null]],[17,2],[12],[1,"\\n"],[41,[30,1],[[[1," "],[8,[39,3],null,null,[["default"],[[[[1,"\\n "],[8,[30,3,["Action"]],[[16,"aria-label",[52,[33,4,["expanded"]],"Hide","Show"]],[4,[38,5],["click",[30,3,["toggle"]]],null]],null,[["default"],[[[[1,"\\n\\n "]],[]]]]],[1,"\\n "],[8,[30,3,["Details"]],null,null,[["default"],[[[[1,"\\n "],[10,"pre"],[12],[10,"code"],[15,1,[30,4,["id"]]],[12],[1,[30,5]],[13],[13],[1,"\\n "]],[4]]]]],[1,"\\n "],[8,[30,3,["Details"]],null,[["@auto"],[false]],[["default"],[[[[1,"\\n"],[41,[28,[37,6],[[30,6,["expanded"]]],null],[[[1," "],[10,"hr"],[12],[13],[1,"\\n"]],[]],null],[1," "]],[6]]]]],[1,"\\n "]],[3]]]]],[1,"\\n\\n "],[8,[39,7],null,[["@value","@name"],[[30,5],[30,7]]],null],[1,"\\n\\n"]],[]],[[[1," "],[10,"pre"],[12],[10,"code"],[12],[1,[30,5]],[13],[13],[1,"\\n "],[8,[39,7],null,[["@value","@name"],[[30,5],[30,7]]],null],[1,"\\n"]],[]]],[1,"\\n"],[13]],["@obfuscated","&attrs","disclosure","details","@value","details","@name"],false,["class-map","array","if","disclosure","details","on","not","copy-button"]]',moduleName:"consul-ui/components/copyable-code/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/data-collection/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@ember/service","@ember/object","@ember/object/computed","@glimmer/tracking"],(function(e,t,n,l,r,i,o,a){var u,s,c,d,p,f,m,h,b,y,g,v,O,P,x,w,j -function _(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function k(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const S=(0,n.createTemplateFactory)({id:"2flQHkul",block:'[[[1,[28,[35,0],[[28,[37,1],[[30,0],[28,[37,2],[[28,[37,3],[[30,0],"term"],null],""],null],[30,1]],null]],null]],[1,"\\n"],[18,2,[[28,[37,5],null,[["search","items","Collection","Empty"],[[28,[37,1],[[30,0],[30,0,["search"]]],null],[30,0,["items"]],[52,[28,[37,7],[[30,0,["items","length"]],0],null],[50,"anonymous",0,null,null],""],[52,[28,[37,9],[[30,0,["items","length"]],0],null],[50,"anonymous",0,null,null],""]]]]]],[1,"\\n"]],["@search","&default"],false,["did-update","action","fn","set","yield","hash","if","gt","component","eq"]]',moduleName:"consul-ui/components/data-collection/index.hbs",isStrictMode:!1}) -let N=(u=(0,r.inject)("filter"),s=(0,r.inject)("sort"),c=(0,r.inject)("search"),d=(0,o.alias)("searchService.searchables"),p=(0,i.computed)("term","args.search"),f=(0,i.computed)("type","searchMethod","filtered","args.filters"),m=(0,i.computed)("type","args.sort"),h=(0,i.computed)("comparator","searched"),b=(0,i.computed)("searchTerm","searchable","filtered"),y=(0,i.computed)("type","content","args.filters"),g=(0,i.computed)("args.{items.[],items.content.[]}"),v=class extends l.default{constructor(){super(...arguments),_(this,"filter",O,this),_(this,"sort",P,this),_(this,"searchService",x,this),_(this,"term",w,this),_(this,"searchableMap",j,this)}get type(){return this.args.type}get searchMethod(){return this.args.searchable||"exact"}get searchProperties(){return this.args.filters.searchproperties}get searchTerm(){return this.term||this.args.search||""}get searchable(){const e=(0,i.get)(this,"args.filters.searchproperty.value")||(0,i.get)(this,"args.filters.searchproperty") -return new("string"==typeof this.searchMethod?this.searchableMap[this.searchMethod]:this.args.searchable)(this.filtered,{finders:Object.fromEntries(Object.entries(this.searchService.predicate(this.type)).filter((t=>{let[n,l]=t -return void 0===e||e.includes(n)})))})}get comparator(){return void 0===this.args.sort?[]:this.sort.comparator(this.type)(this.args.sort)}get items(){let e="comparator" -return"function"==typeof this.comparator&&(e=this.comparator),(0,i.defineProperty)(this,"sorted",(0,o.sort)("searched",e)),this.sorted}get searched(){return""===this.searchTerm?this.filtered:this.searchable.search(this.searchTerm)}get filtered(){if(void 0===this.args.filters)return this.content.slice() -const e=this.filter.predicate(this.type) -if(void 0===e)return this.content.slice() -const t=Object.entries(this.args.filters).filter((e=>{let[t,n]=e -return Boolean(n)})).map((e=>{let[t,n]=e -return[t,"string"!=typeof n?n.value:n]})) -return this.content.filter(e(Object.fromEntries(t)))}get content(){const e=this.args.items||[] -return"function"==typeof e.dispatchEvent?e.content:e}search(e){return this.term=e,this.items}},O=k(v.prototype,"filter",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),P=k(v.prototype,"sort",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),x=k(v.prototype,"searchService",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),w=k(v.prototype,"term",[a.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return""}}),j=k(v.prototype,"searchableMap",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),k(v.prototype,"searchTerm",[p],Object.getOwnPropertyDescriptor(v.prototype,"searchTerm"),v.prototype),k(v.prototype,"searchable",[f],Object.getOwnPropertyDescriptor(v.prototype,"searchable"),v.prototype),k(v.prototype,"comparator",[m],Object.getOwnPropertyDescriptor(v.prototype,"comparator"),v.prototype),k(v.prototype,"items",[h],Object.getOwnPropertyDescriptor(v.prototype,"items"),v.prototype),k(v.prototype,"searched",[b],Object.getOwnPropertyDescriptor(v.prototype,"searched"),v.prototype),k(v.prototype,"filtered",[y],Object.getOwnPropertyDescriptor(v.prototype,"filtered"),v.prototype),k(v.prototype,"content",[g],Object.getOwnPropertyDescriptor(v.prototype,"content"),v.prototype),k(v.prototype,"search",[i.action],Object.getOwnPropertyDescriptor(v.prototype,"search"),v.prototype),v) -e.default=N,(0,t.setComponentTemplate)(S,N)})),define("consul-ui/components/data-form/index",["exports","@ember/component","@ember/template-factory","@ember/service","@ember/object","block-slots","validated-changeset"],(function(e,t,n,l,r,i,o){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const a=(0,n.createTemplateFactory)({id:"IXfByXKe",block:'[[[8,[39,0],null,[["@items","@src","@onchange","@once"],[[99,1,["@items"]],[28,[37,2],["/${partition}/${nspace}/${dc}/${type}/${src}",[28,[37,3],null,[["partition","nspace","dc","type","src"],[[33,4],[33,5],[33,6],[33,7],[33,8]]]]],null],[28,[37,9],[[30,0],"setData"],null],true]],[["default"],[[[[1,"\\n "],[8,[39,10],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n\\n "],[8,[39,11],null,[["@sink","@type","@label","@ondelete","@onchange"],[[28,[37,2],["/${partition}/${nspace}/${dc}/${type}",[28,[37,3],null,[["partition","nspace","dc","type"],[[33,4],[33,5],[28,[37,12],[[33,13,["Datacenter"]],[33,6]],null],[33,7]]]]],null],[99,7,["@type"]],[99,14,["@label"]],[28,[37,9],[[30,0],[33,15]],null],[28,[37,9],[[30,0],[33,16]],null]]],[["default"],[[[[1,"\\n\\n"],[44,[[28,[37,3],null,[["data","change","isCreate","error","disabled","submit","delete"],[[33,13],[28,[37,9],[[30,0],"change"],null],[33,18],[30,1,["error"]],[30,1,["inflight"]],[28,[37,9],[[30,0],[30,1,["persist"]],[33,13]],null],[28,[37,9],[[30,0],[30,1,["delete"]],[33,13]],null]]]]],[[[1,"\\n "],[18,3,[[30,2]]],[1,"\\n"],[41,[33,21],[[[1," "],[8,[39,10],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,22],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[18,3,[[30,2]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[1,"\\n "],[8,[39,10],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,22],null,[["@name"],["form"]],[["default"],[[[[1,"\\n "],[18,3,[[30,2]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n\\n"]],[2]]],[1,"\\n "]],[1]]]]],[1,"\\n\\n "]],[]]]]],[1,"\\n"]],[]]]]]],["writer","api","&default"],false,["data-loader","item","uri","hash","partition","nspace","dc","type","src","action","block-slot","data-writer","or","data","label","ondelete","onsubmit","let","create","yield","if","hasError","yield-slot"]]',moduleName:"consul-ui/components/data-form/index.hbs",isStrictMode:!1}) -var u=(0,t.setComponentTemplate)(a,t.default.extend(i.default,{tagName:"",dom:(0,l.inject)("dom"),builder:(0,l.inject)("form"),create:!1,ondelete:function(){return this.onsubmit(...arguments)},oncancel:function(){return this.onsubmit(...arguments)},onsubmit:function(){},onchange:function(e,t){return t.handleEvent(e)},didReceiveAttrs:function(){this._super(...arguments) -try{this.form=this.builder.form(this.type)}catch(e){}},willRender:function(){this._super(...arguments),(0,r.set)(this,"hasError",this._isRegistered("error"))},willDestroyElement:function(){this._super(...arguments),(0,r.get)(this,"data.isNew")&&this.data.rollbackAttributes()},actions:{setData:function(e){let t=e -return(0,o.isChangeset)(e)||void 0===this.form||(t=this.form.setData(e).getData()),(0,r.get)(e,"isNew")&&((0,r.set)(this,"create",!0),t=Object.entries(this.autofill||{}).reduce((function(e,t){let[n,l]=t -return(0,r.set)(e,n,l),e}),t)),(0,r.set)(this,"data",t),this.data},change:function(e,t,n){this.onchange(this.dom.normalizeEvent(e,t),this.form,this.form.getData())}}})) -e.default=u})),define("consul-ui/components/data-loader/chart.xstate",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={id:"data-loader",initial:"load",on:{OPEN:{target:"load"},ERROR:{target:"disconnected"},LOAD:[{target:"idle",cond:"loaded"},{target:"loading"}]},states:{load:{},loading:{on:{SUCCESS:{target:"idle"},ERROR:{target:"error"}}},idle:{},error:{on:{RETRY:{target:"load"}}},disconnected:{on:{RETRY:{target:"load"}}}}}})) -define("consul-ui/components/data-loader/index",["exports","@ember/component","@ember/template-factory","@ember/object","block-slots","consul-ui/components/data-loader/chart.xstate"],(function(e,t,n,l,r,i){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const o=(0,n.createTemplateFactory)({id:"0gYnIceV",block:'[[[18,9,null],[1,"\\n"],[8,[39,1],null,[["@src"],[[99,2,["@src"]]]],[["default"],[[[[1,"\\n "],[8,[39,3],null,[["@target","@name","@value"],[[30,0],"dispatch",[30,4]]],null],[1,"\\n "],[8,[30,2],null,[["@name","@cond"],["loaded",[28,[37,4],[[30,0],"isLoaded"],null]]],null],[1,"\\n\\n\\n"],[44,[[28,[37,6],null,[["data","error","invalidate","dispatchError"],[[33,7],[33,8],[30,0,["invalidate"]],[28,[37,9],[[28,[37,4],[[30,0],[28,[37,10],[[33,8]],null]],[["value"],["error.errors.firstObject"]]],[28,[37,4],[[30,0],[30,4],"ERROR"],null]],null]]]]],[[[1,"\\n"],[6,[39,11],null,[["name"],["data"]],[["default","else"],[[[[1," "],[18,9,[[30,6]]],[1,"\\n"]],[]],[[[41,[28,[37,13],[[33,14]],null],[[[1," "],[8,[30,1],null,[["@notMatches"],[[28,[37,15],["error","disconnected"],null]]],[["default"],[[[[1,"\\n"],[41,[28,[37,16],[[33,17],[28,[37,18],[[28,[37,13],[[33,19]],null],[28,[37,20],[[30,5],"loading"],null]],null]],null],[[[1," "],[8,[39,21],null,[["@open","@src","@onchange","@onerror"],[[99,22,["@open"]],[99,17,["@src"]],[28,[37,9],[[28,[37,4],[[30,0],"change"],[["value"],["data"]]],[28,[37,4],[[30,0],[30,4],"SUCCESS"],null]],null],[30,6,["dispatchError"]]]],[["default"],[[[[1,"\\n "],[1,[28,[35,23],[[28,[37,24],[[30,0],"invalidate",[30,7,["invalidate"]]],null]],null]],[1,"\\n "]],[7]]]]],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n"]],[]],null]],[]]]]],[1,"\\n "],[8,[30,1],null,[["@matches"],["loading"]],[["default"],[[[[1,"\\n"],[6,[39,11],null,[["name"],["loading"]],[["default","else"],[[[[1," "],[18,9,[[30,6]]],[1,"\\n"]],[]],[[[1," "],[8,[39,25],null,null,null],[1,"\\n"]],[]]]]],[1," "]],[]]]]],[1,"\\n\\n "],[8,[30,1],null,[["@matches"],["error"]],[["default"],[[[[1,"\\n"],[6,[39,11],null,[["name"],["error"]],[["default","else"],[[[[1," "],[18,9,[[30,6]]],[1,"\\n"]],[]],[[[1," "],[8,[39,26],null,[["@error"],[[99,8,["@error"]]]],null],[1,"\\n"]],[]]]]],[1," "]],[]]]]],[1,"\\n\\n "],[8,[30,1],null,[["@matches"],[[28,[37,15],["idle","disconnected"],null]]],[["default"],[[[[1,"\\n\\n "],[8,[30,1],null,[["@matches"],["disconnected"]],[["default"],[[[[1,"\\n"],[41,[28,[37,13],[[28,[37,27],[[33,8,["status"]],"401"],null]],null],[[[6,[39,11],null,[["name","params"],["disconnected",[28,[37,28],[[28,[37,4],[[30,0],[30,4],"RESET"],null]],null]]],[["default","else"],[[[[1," "],[18,9,[[30,6]]],[1,"\\n"]],[]],[[[1," "],[8,[39,29],[[4,[38,30],null,[["sticky"],[true]]]],[["@color"],["warning"]],[["default"],[[[[1,"\\n "],[8,[30,8,["Title"]],null,null,[["default"],[[[[1,"Warning!"]],[]]]]],[1,"\\n "],[8,[30,8,["Description"]],null,null,[["default"],[[[[1,"An error was returned whilst loading this data, refresh to try again."]],[]]]]],[1,"\\n "]],[8]]]]],[1,"\\n"]],[]]]]]],[]],null],[1," "]],[]]]]],[1,"\\n"],[41,[28,[37,27],[[33,8,["status"]],"403"],null],[[[6,[39,11],null,[["name"],["error"]],[["default","else"],[[[[1," "],[18,9,[[30,6]]],[1,"\\n"]],[]],[[[1," "],[8,[39,26],null,[["@error"],[[99,8,["@error"]]]],null],[1,"\\n"]],[]]]]]],[]],[[[1," "],[8,[39,11],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n "],[18,9,[[30,6]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]]],[1,"\\n "]],[]]]]],[1,"\\n\\n"]],[6]]],[1," "],[1,[28,[35,31],[[28,[37,32],[[30,4],"LOAD"],null]],[["src"],[[33,17]]]]],[1,"\\n"]],[1,2,3,4,5]]]]]],["State","Guard","Action","dispatch","state","api","source","T","&default"],false,["yield","state-chart","chart","ref","action","let","hash","data","error","queue","mut","yield-slot","if","not","items","array","and","src","or","once","state-matches","data-source","open","did-insert","set","consul/loader","error-state","eq","block-params","hds/toast","notification","did-update","fn"]]',moduleName:"consul-ui/components/data-loader/index.hbs",isStrictMode:!1}) -var a=(0,t.setComponentTemplate)(o,t.default.extend(r.default,{tagName:"",onchange:e=>e,init:function(){this._super(...arguments),this.chart=i.default},didReceiveAttrs:function(){this._super(...arguments),void 0!==this.items&&this.actions.change.apply(this,[this.items])},didInsertElement:function(){this._super(...arguments),this.dispatch("LOAD")},actions:{isLoaded:function(){return void 0!==this.items||void 0===this.src},change:function(e){(0,l.set)(this,"data",this.onchange(e))}}})) -e.default=a})),define("consul-ui/components/data-sink/index",["exports","@ember/component","@ember/template-factory","@ember/service","@ember/object","consul-ui/utils/dom/event-source"],(function(e,t,n,l,r,i){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const o=(0,n.createTemplateFactory)({id:"utpO3btI",block:'[[[18,1,[[28,[37,1],null,[["open","state"],[[28,[37,2],[[30,0],"open"],null],[33,3]]]]]],[1,"\\n"]],["&default"],false,["yield","hash","action","state"]]',moduleName:"consul-ui/components/data-sink/index.hbs",isStrictMode:!1}) -var a=(0,t.setComponentTemplate)(o,t.default.extend({tagName:"",service:(0,l.inject)("data-sink/service"),dom:(0,l.inject)("dom"),logger:(0,l.inject)("logger"),onchange:function(e){},onerror:function(e){},state:(0,r.computed)("instance","instance.{dirtyType,isSaving}",(function(){let e -const t=(0,r.get)(this,"instance.isSaving"),n=(0,r.get)(this,"instance.dirtyType") -if(void 0===t&&void 0===n)e="idle" -else{switch(n){case"created":e=t?"creating":"create" -break -case"updated":e=t?"updating":"update" -break -case"deleted":case void 0:e=t?"removing":"remove"}e=`active.${e}`}return{matches:t=>-1!==e.indexOf(t)}})),init:function(){this._super(...arguments),this._listeners=this.dom.listeners()},willDestroyElement:function(){this._super(...arguments),this._listeners.remove()},source:function(e){const t=(0,i.once)(e),n=e=>{(0,r.set)(this,"instance",void 0) -try{this.onerror(e),this.logger.execute(e)}catch(e){this.logger.execute(e)}} -return this._listeners.add(t,{message:e=>{try{(0,r.set)(this,"instance",void 0),this.onchange(e)}catch(t){n(t)}},error:e=>n(e)}),t},didInsertElement:function(){this._super(...arguments),void 0===this.data&&void 0===this.item||this.actions.open.apply(this,[this.data,this.item])},persist:function(e,t){void 0!==e?(0,r.set)(this,"instance",this.service.prepare(this.sink,e,t)):(0,r.set)(this,"instance",t),this.source((()=>this.service.persist(this.sink,this.instance)))},remove:function(e){(0,r.set)(this,"instance",e),this.source((()=>this.service.remove(this.sink,e)))},actions:{open:function(e,t){if(t instanceof Event&&(t=void 0),void 0===e&&void 0===t)throw new Error("You must specify data to save, or null to remove") -null===e||""===e?this.remove(t):this.persist(e,t)}}})) -e.default=a})),define("consul-ui/components/data-source/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@ember/service","@glimmer/tracking","@ember/object","@ember/runloop","@ember/debug"],(function(e,t,n,l,r,i,o,a,u){var s,c,d,p,f,m,h,b,y,g -function v(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function O(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const P=(0,n.createTemplateFactory)({id:"CRu7UTYr",block:'[[[41,[28,[37,1],[[30,0,["disabled"]]],null],[[[41,[28,[37,2],[[30,0,["loading"]],"lazy"],null],[[[1," "],[11,"data"],[24,"aria-hidden","true"],[24,5,"width: 0;height: 0;font-size: 0;padding: 0;margin: 0;"],[4,[38,3],[[30,0,["connect"]]],null],[12],[13],[1,"\\n"]],[]],[[[1," "],[1,[28,[35,3],[[30,0,["connect"]]],null]],[1,"\\n"]],[]]],[1," "],[1,[28,[35,4],[[30,0,["attributeChanged"]],"src",[30,1]],null]],[1,"\\n "],[1,[28,[35,4],[[30,0,["attributeChanged"]],"loading",[30,2]],null]],[1,"\\n "],[1,[28,[35,5],[[30,0,["disconnect"]]],null]],[1,"\\n"]],[]],null],[1,[28,[35,4],[[30,0,["attributeChanged"]],"disabled",[30,3]],null]],[1,"\\n"],[18,4,[[28,[37,7],null,[["data","error","invalidate","Source"],[[30,0,["data"]],[30,0,["error"]],[30,0,["invalidate"]],[52,[30,0,["data"]],[50,"data-source",0,null,[["disabled"],[[28,[37,1],[[28,[37,2],[[30,0,["error"]],[27]],null]],null]]]],""]]]]]],[1,"\\n"]],["@src","@loading","@disabled","&default"],false,["if","not","eq","did-insert","did-update","will-destroy","yield","hash","component"]]',moduleName:"consul-ui/components/data-source/index.hbs",isStrictMode:!1}),x=function(e,t,n){let l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null -return"function"==typeof e?e():null} -const r=e[t] -return r!==n&&l(r,n),e[t]=n},w=()=>{},j=e=>"function"==typeof e?e:w,_=["eager","lazy"] -let k=(s=(0,r.inject)("data-source/service"),c=(0,r.inject)("dom"),d=(0,r.inject)("logger"),p=class extends l.default{constructor(e,t){super(...arguments),v(this,"dataSource",f,this),v(this,"dom",m,this),v(this,"logger",h,this),v(this,"isIntersecting",b,this),v(this,"data",y,this),v(this,"error",g,this),this._listeners=this.dom.listeners(),this._lazyListeners=this.dom.listeners()}get loading(){return _.includes(this.args.loading)?this.args.loading:_[0]}get disabled(){return void 0!==this.args.disabled&&this.args.disabled}onchange(e){this.error=void 0,this.data=e.data,j(this.args.onchange)(e)}onerror(e){this.error=e.error||e,j(this.args.onerror)(e)}connect(e){Array.isArray(e)?(this._lazyListeners.remove(),this.open()):this._lazyListeners.add(this.dom.isInViewport(e,(e=>{this.isIntersecting=e,this.isIntersecting?this.open():this.close()})))}disconnect(){void 0!==this.data&&void 0===this.data.length&&"function"==typeof this.data.rollbackAttributes&&this.data.rollbackAttributes(),this.close(),this._listeners.remove(),this._lazyListeners.remove()}attributeChanged(e){let[t,n]=e -if("src"===t)("eager"===this.loading||this.isIntersecting)&&this.open()}open(){const e=this.args.src,t=x(this,"source",this.dataSource.open(e,this,this.open),((e,t)=>{this.dataSource.close(e,this)})),n=e=>{try{const t=(0,o.get)(e,"error.errors.firstObject")||{} -"429"!==(0,o.get)(t,"status")&&this.onerror(e),this.logger.execute(e)}catch(e){this.logger.execute(e)}},l=this._listeners.add(this.source,{message:e=>{try{this.onchange(e)}catch(t){n(t)}},error:e=>{n(e)}}) -if(x(this,"_remove",l),"function"==typeof t.getCurrentEvent){const e=t.getCurrentEvent() -if(e){let t -void 0!==e.error?(t="onerror",this.error=e.error):(this.error=void 0,this.data=e.data,t="onchange"),(0,a.schedule)("afterRender",(()=>{try{this[t](e)}catch(l){n(l)}}))}}}async invalidate(){this.source.readyState=2,this.disconnect(),(0,a.schedule)("afterRender",(()=>{(0,u.runInDebug)((e=>console.debug("Invalidation is only supported for non-lazy data sources. If you want to use this you should fixup support for lazy data sources"))),this.connect([])}))}close(){void 0!==this.source&&(this.dataSource.close(this.source,this),x(this,"_remove",void 0),this.source=void 0)}},f=O(p.prototype,"dataSource",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m=O(p.prototype,"dom",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=O(p.prototype,"logger",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=O(p.prototype,"isIntersecting",[i.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return!1}}),y=O(p.prototype,"data",[i.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),g=O(p.prototype,"error",[i.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),O(p.prototype,"connect",[o.action],Object.getOwnPropertyDescriptor(p.prototype,"connect"),p.prototype),O(p.prototype,"disconnect",[o.action],Object.getOwnPropertyDescriptor(p.prototype,"disconnect"),p.prototype),O(p.prototype,"attributeChanged",[o.action],Object.getOwnPropertyDescriptor(p.prototype,"attributeChanged"),p.prototype),O(p.prototype,"open",[o.action],Object.getOwnPropertyDescriptor(p.prototype,"open"),p.prototype),O(p.prototype,"invalidate",[o.action],Object.getOwnPropertyDescriptor(p.prototype,"invalidate"),p.prototype),O(p.prototype,"close",[o.action],Object.getOwnPropertyDescriptor(p.prototype,"close"),p.prototype),p) -e.default=k,(0,t.setComponentTemplate)(P,k)})),define("consul-ui/components/data-writer/chart.xstate",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={id:"data-writer",initial:"idle",states:{idle:{on:{PERSIST:{target:"persisting"},REMOVE:{target:"removing"}}},removing:{on:{SUCCESS:{target:"removed"},ERROR:{target:"error"}}},persisting:{on:{SUCCESS:{target:"persisted"},ERROR:{target:"error"}}},removed:{on:{RESET:{target:"idle"}}},persisted:{on:{RESET:{target:"idle"}}},error:{on:{RESET:{target:"idle"}}}}}})),define("consul-ui/components/data-writer/index",["exports","@ember/component","@ember/template-factory","@ember/object","block-slots","consul-ui/components/data-writer/chart.xstate"],(function(e,t,n,l,r,i){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const o=(0,n.createTemplateFactory)({id:"RH49dABa",block:'[[[8,[39,0],null,[["@src"],[[99,1,["@src"]]]],[["default"],[[[[1,"\\n\\n "],[8,[39,2],null,[["@target","@name","@value"],[[30,0],"dispatch",[30,4]]],null],[1,"\\n\\n"],[44,[[28,[37,4],null,[["data","error","persist","delete","inflight","disabled"],[[33,5],[33,6],[28,[37,7],[[30,0],"persist"],null],[28,[37,8],[[28,[37,7],[[30,0],[28,[37,9],[[33,5]],null]],null],[28,[37,7],[[30,0],[30,4],"REMOVE"],null]],null],[28,[37,10],[[30,5],[28,[37,11],["persisting","removing"],null]],null],[28,[37,10],[[30,5],[28,[37,11],["persisting","removing"],null]],null]]]]],[[[1,"\\n "],[18,13,[[30,6]]],[1,"\\n\\n "],[8,[30,1],null,[["@matches"],["removing"]],[["default"],[[[[1,"\\n "],[8,[39,13],null,[["@sink","@item","@data","@onchange","@onerror"],[[99,14,["@sink"]],[99,5,["@item"]],null,[28,[37,7],[[30,0],[30,4],"SUCCESS"],null],[28,[37,7],[[30,0],"error"],null]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[30,1],null,[["@matches"],["persisting"]],[["default"],[[[[1,"\\n "],[8,[39,13],null,[["@sink","@item","@onchange","@onerror"],[[99,14,["@sink"]],[99,5,["@item"]],[28,[37,7],[[30,0],[30,4],"SUCCESS"],null],[28,[37,7],[[30,0],"error"],null]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[30,1],null,[["@matches"],["removed"]],[["default"],[[[[1,"\\n"],[44,[[28,[37,8],[[28,[37,7],[[30,0],[30,4],"RESET"],null],[28,[37,7],[[30,0],[33,15]],null]],null]],[[[6,[39,16],null,[["name","params"],["removed",[28,[37,17],[[30,7]],null]]],[["default","else"],[[[[1," "],[18,13,[[30,6]]],[1,"\\n"]],[]],[[[1," "],[8,[39,18],[[4,[38,19],null,[["after"],[[28,[37,7],[[30,0],[30,7]],null]]]]],[["@color"],["success"]],[["default"],[[[[1,"\\n "],[8,[30,8,["Title"]],null,null,[["default"],[[[[1,"Success!"]],[]]]]],[1,"\\n "],[8,[30,8,["Description"]],null,null,[["default"],[[[[1,"Your "],[1,[28,[35,20],[[33,21],[33,22]],null]],[1," has been deleted."]],[]]]]],[1,"\\n "]],[8]]]]],[1,"\\n"]],[]]]]]],[7]]],[1," "]],[]]]]],[1,"\\n\\n "],[8,[30,1],null,[["@matches"],["persisted"]],[["default"],[[[[1,"\\n"],[44,[[28,[37,7],[[30,0],[33,23]],null]],[[[6,[39,16],null,[["name","params"],["persisted",[28,[37,17],[[30,9]],null]]],[["default","else"],[[[[1," "],[18,13,[[30,6]]],[1,"\\n"]],[]],[[[1," "],[8,[39,18],[[4,[38,19],null,[["after"],[[28,[37,7],[[30,0],[30,9]],null]]]]],[["@color"],["success"]],[["default"],[[[[1,"\\n "],[8,[30,10,["Title"]],null,null,[["default"],[[[[1,"Success!"]],[]]]]],[1,"\\n "],[8,[30,10,["Description"]],null,null,[["default"],[[[[1,"Your "],[1,[28,[35,20],[[33,21],[33,22]],null]],[1," has been saved."]],[]]]]],[1,"\\n "]],[10]]]]],[1,"\\n"]],[]]]]]],[9]]],[1," "]],[]]]]],[1,"\\n\\n "],[8,[30,1],null,[["@matches"],["error"]],[["default"],[[[[1,"\\n"],[44,[[28,[37,7],[[30,0],[30,4],"RESET"],null]],[[[6,[39,16],null,[["name","params"],["error",[28,[37,17],[[30,11],[30,6,["error"]]],null]]],[["default","else"],[[[[1," "],[18,13,[[30,6]]],[1,"\\n"]],[]],[[[1," "],[8,[39,18],[[4,[38,19],null,[["after"],[[28,[37,7],[[30,0],[30,11]],null]]]]],[["@color"],["critical"]],[["default"],[[[[1,"\\n "],[8,[30,12,["Title"]],null,null,[["default"],[[[[1,"Error!"]],[]]]]],[1,"\\n "],[8,[30,12,["Description"]],null,null,[["default"],[[[[1,"There was an error saving your "],[1,[28,[35,20],[[33,21],[33,22]],null]],[1,".\\n"],[41,[28,[37,25],[[30,6,["error","status"]],[30,6,["error","detail"]]],null],[[[1," "],[10,"br"],[12],[13],[1,[30,6,["error","status"]]],[1,": "],[1,[30,6,["error","detail"]]],[1,"\\n"]],[]],[[[41,[30,6,["error","message"]],[[[1," "],[10,"br"],[12],[13],[1,[30,6,["error","message"]]],[1,"\\n "]],[]],null]],[]]],[1," "]],[]]]]],[1,"\\n "]],[12]]]]],[1,"\\n"]],[]]]]]],[11]]],[1," "]],[]]]]],[1,"\\n\\n "],[8,[39,16],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[18,13,[[30,6]]],[1,"\\n "]],[]]]]],[1,"\\n\\n"]],[6]]]],[1,2,3,4,5]]]]]],["State","Guard","Action","dispatch","state","api","after","T","after","T","after","T","&default"],false,["state-chart","chart","ref","let","hash","data","error","action","queue","mut","state-matches","array","yield","data-sink","sink","ondelete","yield-slot","block-params","hds/toast","notification","or","label","type","onchange","if","and"]]',moduleName:"consul-ui/components/data-writer/index.hbs",isStrictMode:!1}) -var a=(0,t.setComponentTemplate)(o,t.default.extend(r.default,{tagName:"",ondelete:function(){return this.onchange(...arguments)},onchange:function(){},init:function(){this._super(...arguments),this.chart=i.default},actions:{persist:function(e,t){t&&"function"==typeof t.preventDefault&&t.preventDefault(),(0,l.set)(this,"data",e),this.dispatch("PERSIST")},error:function(e,t){t&&"function"==typeof t.preventDefault&&t.preventDefault(),(0,l.set)(this,"error",void 0!==e.error.errors?e.error.errors.firstObject:e.error),this.dispatch("ERROR")}}})) -e.default=a})),define("consul-ui/components/debug/navigation/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"gn00CoAo",block:"[[],[],false,[]]",moduleName:"consul-ui/components/debug/navigation/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/delete-confirmation/index",["exports","@ember/component","@ember/template-factory"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const l=(0,n.createTemplateFactory)({id:"2MbSBAzB",block:'[[[10,2],[12],[1,"\\n "],[1,[34,0]],[1,"\\n"],[13],[1,"\\n"],[8,[39,1],null,null,[["default"],[[[[1,"\\n "],[8,[39,2],[[16,"onclick",[28,[37,3],[[30,0],[33,4]],null]]],[["@text","@color"],["Confirm Delete","critical"]],null],[1,"\\n "],[8,[39,2],[[16,"onclick",[28,[37,3],[[30,0],[33,5]],null]]],[["@text","@color"],["Cancel","secondary"]],null],[1,"\\n"]],[]]]]]],[],false,["message","hds/button-set","hds/button","action","execute","cancel"]]',moduleName:"consul-ui/components/delete-confirmation/index.hbs",isStrictMode:!1}) -var r=(0,t.setComponentTemplate)(l,t.default.extend({tagName:"",execute:function(){},cancel:function(){}})) -e.default=r})),define("consul-ui/components/disclosure-menu/action/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"kVsFG9Z2",block:'[[[8,[30,1,["Action"]],[[24,"aria-haspopup","menu"],[17,2]],null,[["default"],[[[[1,"\\n "],[18,3,null],[1,"\\n"]],[]]]]],[1,"\\n"]],["@disclosure","&attrs","&default"],false,["yield"]]',moduleName:"consul-ui/components/disclosure-menu/action/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/disclosure-menu/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"fLNl+IoV",block:'[[[11,0],[16,0,[28,[37,0],["disclosure-menu"],null]],[17,1],[12],[1,"\\n "],[8,[39,1],null,[["@expanded"],[[30,2]]],[["default"],[[[[1,"\\n "],[18,6,[[28,[37,3],null,[["Action","Menu","disclosure","toggle","close","open","expanded"],[[50,"disclosure-menu/action",0,null,[["disclosure"],[[30,3]]]],[50,"disclosure-menu/menu",0,null,[["disclosure","items","rowHeight"],[[30,3],[30,4],[30,5]]]],[30,3],[30,3,["toggle"]],[30,3,["close"]],[30,3,["open"]],[30,3,["expanded"]]]]]]],[1,"\\n "]],[3]]]]],[1,"\\n"],[13],[1,"\\n"]],["&attrs","@expanded","disclosure","@items","@rowHeight","&default"],false,["class-map","disclosure","yield","hash","component"]]',moduleName:"consul-ui/components/disclosure-menu/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/disclosure-menu/menu/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"ezjH7NRj",block:'[[[8,[30,1,["Details"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,0],null,[["@items"],[[28,[37,1],[[30,3],[28,[37,2],null,null]],null]]],[["default"],[[[[1,"\\n "],[11,0],[16,0,[28,[37,3],[[28,[37,2],["paged-collection-scroll",[28,[37,4],[[30,4,["type"]],[28,[37,2],["virtual-scroll","native-scroll"],null]],null]],null]],null]],[17,5],[4,[38,5],["click",[30,1,["close"]]],null],[4,[38,6],[[30,4,["viewport"]]],null],[4,[38,7],[[30,4,["resize"]]],null],[4,[38,8],["--paged-row-height"],[["returns"],[[30,4,["rowHeight"]]]]],[4,[38,8],["max-height"],[["returns"],[[30,4,["maxHeight"]]]]],[12],[1,"\\n "],[18,6,[[28,[37,10],null,[["Menu"],[[50,"menu",0,null,[["disclosure","pager"],[[30,1],[30,4]]]]]]]]],[1,"\\n "],[13],[1,"\\n "]],[4]]]]],[1,"\\n"]],[2]]]]],[1,"\\n\\n"]],["@disclosure","details","@items","pager","&attrs","&default"],false,["paged-collection","or","array","class-map","includes","on-outside","did-insert","on-resize","css-prop","yield","hash","component"]]',moduleName:"consul-ui/components/disclosure-menu/menu/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/disclosure/action/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"h7+iNKLY",block:'[[[8,[39,0],[[16,"aria-expanded",[52,[30,1,["expanded"]],"true","false"]],[16,"aria-controls",[30,1,["controls"]]],[17,2]],null,[["default"],[[[[1,"\\n "],[18,3,null],[1,"\\n"]],[]]]]],[1,"\\n"]],["@disclosure","&attrs","&default"],false,["action","if","yield"]]',moduleName:"consul-ui/components/disclosure/action/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/disclosure/details/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"VadZ+kad",block:'[[[44,[[28,[37,1],null,null]],[[[41,[28,[37,3],[[28,[37,4],[[28,[37,5],[[30,2],[27]],null],[30,3,["expanded"]]],null],[28,[37,4],[[28,[37,6],[[30,2],[27]],null],[28,[37,5],[[30,2],false],null]],null]],null],[[[18,4,[[28,[37,8],null,[["id","expanded"],[[30,1],[30,3,["expanded"]]]]]]],[1,"\\n"]],[]],null],[1,[28,[35,9],[[28,[37,10],[[30,3,["add"]],[30,1]],null]],null]],[1,"\\n"],[1,[28,[35,11],[[28,[37,10],[[30,3,["remove"]],[30,1]],null]],null]],[1,"\\n"]],[1]]]],["id","@auto","@disclosure","&default"],false,["let","unique-id","if","or","and","eq","not-eq","yield","hash","did-insert","fn","will-destroy"]]',moduleName:"consul-ui/components/disclosure/details/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/disclosure/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@glimmer/tracking","@ember/object","@ember/runloop"],(function(e,t,n,l,r,i,o){var a,u -function s(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const c=(0,n.createTemplateFactory)({id:"iAc3HX8Q",block:'[[[8,[39,0],null,[["@src","@initial"],[[28,[37,0],["boolean"],null],[52,[30,1],"true","false"]]],[["default"],[[[[1,"\\n"],[44,[[28,[37,3],null,[["toggle","close","open","expanded","event","button","controls"],[[28,[37,4],[[30,5],"TOGGLE"],null],[28,[37,4],[[30,5],"FALSE"],null],[28,[37,4],[[30,5],"TRUE"],null],[28,[37,5],[[30,6],"true"],null],[30,6,["context"]],[28,[37,6],null,null],[30,0,["ids"]]]]]],[[[44,[[28,[37,7],[[30,7],[28,[37,3],null,[["Action","Details"],[[50,"disclosure/action",0,null,[["disclosure"],[[30,7]]]],[50,"disclosure/details",0,null,[["disclosure"],[[28,[37,3],null,[["add","remove","expanded"],[[30,0,["add"]],[30,0,["remove"]],[28,[37,5],[[30,6],"true"],null]]]]]]]]]]],null]],[[[1," "],[18,9,[[30,8]]],[1,"\\n"]],[8]]]],[7]]]],[2,3,4,5,6]]]]]],["@expanded","State","Guard","Action","dispatch","state","_api","api","&default"],false,["state-chart","if","let","hash","fn","state-matches","unique-id","assign","component","yield"]]',moduleName:"consul-ui/components/disclosure/index.hbs",isStrictMode:!1}) -let d=(a=class extends l.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="ids",l=this,(n=u)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}add(e){(0,o.schedule)("afterRender",(()=>{this.ids=`${this.ids}${this.ids.length>0?" ":""}${e}`}))}remove(e){this.ids=this.ids.split(" ").filter((t=>t!==e)).join(" ")}},u=s(a.prototype,"ids",[r.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return""}}),s(a.prototype,"add",[i.action],Object.getOwnPropertyDescriptor(a.prototype,"add"),a.prototype),s(a.prototype,"remove",[i.action],Object.getOwnPropertyDescriptor(a.prototype,"remove"),a.prototype),a) -e.default=d,(0,t.setComponentTemplate)(c,d)})),define("consul-ui/components/ember-collection",["exports","ember-collection/components/ember-collection"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/ember-native-scrollable",["exports","ember-collection/components/ember-native-scrollable"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/empty-state/index",["exports","@ember/component","@ember/template-factory","@ember/object","block-slots"],(function(e,t,n,l,r){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const i=(0,n.createTemplateFactory)({id:"MevuN2Uz",block:'[[[18,2,null],[1,"\\n"],[11,0],[24,0,"empty-state"],[17,1],[12],[1,"\\n"],[41,[33,2],[[[1," "],[10,"header"],[12],[1,"\\n"],[6,[39,3],null,[["name"],["header"]],[["default"],[[[[1," "],[18,2,null],[1,"\\n"]],[]]]]],[6,[39,3],null,[["name"],["subheader"]],[["default"],[[[[1," "],[18,2,null],[1,"\\n"]],[]]]]],[1," "],[13],[1,"\\n"]],[]],null],[6,[39,3],null,[["name"],["body"]],[["default"],[[[[1," "],[10,0],[12],[1,"\\n "],[18,2,null],[1,"\\n"],[41,[33,4],[[[1," "],[8,[39,5],[[4,[38,7],["click",[33,4]],null]],[["@color","@text"],["primary",[52,[33,6,["AccessorID"]],"Log in with a different token","Log in"]]],[["default"],[[[[1,"\\n "],[8,[39,8],null,[["@src","@onchange"],[[28,[37,9],["settings://consul:token"],null],[28,[37,10],[[30,0],[28,[37,11],[[33,6]],null]],[["value"],["data"]]]]],null],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n"]],[]]]]],[6,[39,3],null,[["name"],["actions"]],[["default"],[[[[1," "],[10,"ul"],[12],[1,"\\n "],[18,2,null],[1,"\\n "],[13],[1,"\\n"]],[]]]]],[13]],["&attrs","&default"],false,["yield","if","hasHeader","yield-slot","login","hds/button","token","on","data-source","uri","action","mut"]]',moduleName:"consul-ui/components/empty-state/index.hbs",isStrictMode:!1}) -var o=(0,t.setComponentTemplate)(i,t.default.extend(r.default,{tagName:"",willRender:function(){this._super(...arguments),(0,l.set)(this,"hasHeader",this._isRegistered("header")||this._isRegistered("subheader"))}})) -e.default=o})),define("consul-ui/components/error-state/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"qh3oSZcW",block:'[[[41,[28,[37,1],[[30,1,["status"]],"403"],null],[[[1," "],[8,[39,2],[[16,0,[28,[37,3],["status-",[30,1,["status"]]],null]]],[["@login"],[[30,2]]],[["default"],[[[[1,"\\n "],[8,[39,4],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,5],[[30,1,["message"]],"Consul returned an error"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"],[41,[30,1,["status"]],[[[1," "],[8,[39,4],null,[["@name"],["subheader"]],[["default"],[[[[1,"\\n "],[10,"h3"],[12],[1,"\\n Error "],[1,[30,1,["status"]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[1," "],[8,[39,4],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n"],[41,[30,1,["detail"]],[[[1," "],[1,[30,1,["detail"]]],[1,"\\n"]],[]],[[[1," You may have visited a URL that is loading an unknown resource, so you can try going back to the root or try re-submitting your ACL Token/SecretID by going back to ACLs.\\n"]],[]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,4],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,6],null,[["@route","@text","@icon","@iconPosition","@size"],["index","Go back","chevron-left","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,6],null,[["@text","@href","@iconPosition","@icon","@size"],["Read the documentation",[29,[[28,[37,7],["CONSUL_DOCS_URL"],null]]],"trailing","docs-link","small"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],[[[1," "],[8,[39,2],[[16,0,[28,[37,3],["status-",[30,1,["status"]]],null]]],[["@login"],[[30,2]]],[["default"],[[[[1,"\\n "],[8,[39,4],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"\\n You are not authorized\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,4],null,[["@name"],["subheader"]],[["default"],[[[[1,"\\n "],[10,"h3"],[12],[1,"\\n Error "],[1,[30,1,["status"]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,4],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n You must be granted permissions to view this data. Ask your administrator if you think you should have access.\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,4],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,6],null,[["@text","@href","@icon","@iconPosition","@size"],["Read the documentation",[29,[[28,[37,7],["CONSUL_DOCS_URL"],null],"/acl/index.html"]],"docs-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,6],null,[["@text","@href","@icon","@iconPosition","@size"],["Follow the guide",[29,[[28,[37,7],["CONSUL_DOCS_LEARN_URL"],null],"/consul/security-networking/production-acls"]],"learn-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]]]],["@error","@login"],false,["if","not-eq","empty-state","concat","block-slot","or","hds/link/standalone","env"]]',moduleName:"consul-ui/components/error-state/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/event-source/index",["exports","@ember/component","@ember/template-factory","@ember/service","@ember/object"],(function(e,t,n,l,r){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const i=(0,n.createTemplateFactory)({id:"OA0g9tPL",block:'[[[18,1,[[28,[37,1],null,[["close"],[[28,[37,2],[[30,0],"close"],null]]]]]],[1,"\\n"]],["&default"],false,["yield","hash","action"]]',moduleName:"consul-ui/components/event-source/index.hbs",isStrictMode:!1}),o=function(e,t,n){let l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null -return"function"==typeof e?e():null} -const i=e[t] -return i!==n&&l(i,n),(0,r.set)(e,t,n)} -var a=(0,t.setComponentTemplate)(i,t.default.extend({tagName:"",dom:(0,l.inject)("dom"),logger:(0,l.inject)("logger"),data:(0,l.inject)("data-source/service"),closeOnDestroy:!0,onerror:function(e){this.logger.execute(e.error)},init:function(){this._super(...arguments),this._listeners=this.dom.listeners()},willDestroyElement:function(){this.closeOnDestroy&&this.actions.close.apply(this,[]),this._listeners.remove(),this._super(...arguments)},didReceiveAttrs:function(){this._super(...arguments),(0,r.get)(this,"src.configuration.uri")!==(0,r.get)(this,"source.configuration.uri")&&this.actions.open.apply(this,[])},actions:{open:function(){o(this,"source",this.data.open(this.src,this),((e,t)=>{void 0!==e&&this.data.close(e,this)})),o(this,"proxy",this.src,((e,t)=>{void 0!==e&&e.destroy()})) -const e=e=>{try{const t=(0,r.get)(e,"error.errors.firstObject") -"429"!==(0,r.get)(t||{},"status")&&this.onerror(e),this.logger.execute(e)}catch(e){this.logger.execute(e)}},t=this._listeners.add(this.source,{error:t=>{e(t)}}) -o(this,"_remove",t)},close:function(){void 0!==this.source&&(this.data.close(this.source,this),o(this,"_remove",void 0),(0,r.set)(this,"source",void 0)),void 0!==this.proxy&&this.proxy.destroy()}}})) -e.default=a})),define("consul-ui/components/flash-message",["exports","ember-cli-flash/components/flash-message"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/flight-icon",["exports","@hashicorp/ember-flight-icons/components/flight-icon"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/form-component/index",["exports","@ember/component","@ember/template-factory","block-slots","@ember/service","@ember/object/computed"],(function(e,t,n,l,r,i){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const o=(0,n.createTemplateFactory)({id:"etKAawDq",block:'[[[18,1,null]],["&default"],false,["yield"]]',moduleName:"consul-ui/components/form-component/index.hbs",isStrictMode:!1}),a=/([^[\]])+/g -var u=(0,t.setComponentTemplate)(o,t.default.extend(l.default,{tagName:"",onreset:function(){},onchange:function(){},onerror:function(){},onsuccess:function(){},data:(0,i.alias)("form.data"),item:(0,i.alias)("form.data"),dom:(0,r.inject)("dom"),container:(0,r.inject)("form"),actions:{change:function(e,t,n){let l=this.dom.normalizeEvent(e,t) -const r=[...l.target.name.matchAll(a)],i=r[r.length-1][0] -let o -o=-1===i.indexOf("[")?`${this.type}[${i}]`:i,this.form.handleEvent(l,o),this.onchange({target:this})}}})) -e.default=u})),define("consul-ui/components/form-group/element/checkbox/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"4jry83Gq",block:'[[[11,"input"],[24,4,"checkbox"],[16,3,[30,1]],[16,2,[30,2]],[17,3],[4,[38,0],[[28,[37,1],[[30,4]],null]],null],[4,[38,2],["change",[28,[37,1],[[30,5]],null]],null],[12],[13],[1,"\\n"]],["@name","@value","&attrs","@didinsert","@onchange"],false,["did-insert","optional","on"]]',moduleName:"consul-ui/components/form-group/element/checkbox/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/form-group/element/error/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"dGEGUftb",block:'[[[11,"strong"],[24,"role","alert"],[17,1],[12],[1,"\\n "],[18,2,null],[1,"\\n"],[13],[1,"\\n"]],["&attrs","&default"],false,["yield"]]',moduleName:"consul-ui/components/form-group/element/error/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/form-group/element/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@glimmer/tracking","@ember/object"],(function(e,t,n,l,r,i){var o,a,u -function s(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function c(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const d=(0,n.createTemplateFactory)({id:"Qn2u34/P",block:'[[[44,[[28,[37,1],null,[["Element","Text","Checkbox","Radio","Label","Error","state"],[[50,"form-group/element",0,null,[["group","name"],[[30,1],[30,2]]]],[50,"form-group/element/text",0,null,[["didinsert","name","oninput"],[[28,[37,3],[[30,0],[30,0,["connect"]]],null],[30,0,["name"]],[28,[37,3],[[30,0],[28,[37,4],[[30,0,["touched"]]],null],true],null]]]],[50,"form-group/element/checkbox",0,null,[["didinsert","name","onchange"],[[28,[37,3],[[30,0],[30,0,["connect"]]],null],[30,0,["name"]],[28,[37,3],[[30,0],[28,[37,4],[[30,0,["touched"]]],null],true],null]]]],[50,"form-group/element/radio",0,null,[["didinsert","name","onchange"],[[28,[37,3],[[30,0],[30,0,["connect"]]],null],[30,0,["name"]],[28,[37,3],[[30,0],[28,[37,4],[[30,0,["touched"]]],null],true],null]]]],[50,"form-group/element/label",0,null,null],[50,"form-group/element/error",0,null,null],[33,5]]]]],[[[41,[28,[37,7],[[30,0,["type"]],[28,[37,8],["radiogroup","checkbox-group","checkboxgroup"],null]],null],[[[1," "],[11,0],[16,"data-property",[30,0,["prop"]]],[16,0,[29,["type-",[30,0,["type"]],[52,[28,[37,9],[[33,5],"error"],null]," has-error"]]]],[17,4],[12],[1,"\\n "],[18,5,[[30,3]]],[1,"\\n "],[13],[1,"\\n"]],[]],[[[1," "],[11,"label"],[16,"data-property",[30,0,["prop"]]],[16,0,[29,["type-",[30,0,["type"]],[52,[28,[37,9],[[33,5],"error"],null]," has-error"]]]],[17,4],[12],[1,"\\n "],[18,5,[[30,3]]],[1,"\\n "],[13],[1,"\\n"]],[]]]],[3]]]],["@group","@name","el","&attrs","&default"],false,["let","hash","component","action","mut","state","if","includes","array","state-matches","yield"]]',moduleName:"consul-ui/components/form-group/element/index.hbs",isStrictMode:!1}) -let p=(o=class extends l.default{constructor(){super(...arguments),s(this,"el",a,this),s(this,"touched",u,this)}get type(){return void 0!==this.el?this.el.dataset.type||this.el.getAttribute("type")||this.el.getAttribute("role"):this.args.type}get name(){return void 0!==this.args.group?`${this.args.group.name}[${this.args.name}]`:this.args.name}get prop(){return`${this.args.name.toLowerCase().split(".").join("-")}`}get state(){const e=this.touched&&this.args.error -return{matches:t=>"error"===t&&e}}connect(e){this.el=e}},a=c(o.prototype,"el",[r.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),u=c(o.prototype,"touched",[r.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return!1}}),c(o.prototype,"connect",[i.action],Object.getOwnPropertyDescriptor(o.prototype,"connect"),o.prototype),o) -e.default=p,(0,t.setComponentTemplate)(d,p)})),define("consul-ui/components/form-group/element/label/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"qfCtMXFx",block:'[[[11,1],[24,0,"form-elements-label label"],[17,1],[12],[1,"\\n "],[18,2,null],[1,"\\n"],[13],[1,"\\n"]],["&attrs","&default"],false,["yield"]]',moduleName:"consul-ui/components/form-group/element/label/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/form-group/element/radio/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"Ir+FjtQH",block:'[[[11,"input"],[24,4,"radio"],[16,3,[30,1]],[16,2,[30,2]],[17,3],[4,[38,0],[[28,[37,1],[[30,4]],null]],null],[4,[38,2],["change",[28,[37,1],[[30,5]],null]],null],[12],[13],[1,"\\n"]],["@name","@value","&attrs","@didinsert","@onchange"],false,["did-insert","optional","on"]]',moduleName:"consul-ui/components/form-group/element/radio/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/form-group/element/text/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"auOoQIU/",block:'[[[11,"input"],[24,4,"text"],[16,3,[30,1]],[16,2,[30,2]],[17,3],[4,[38,0],[[28,[37,1],[[30,4]],null]],null],[4,[38,2],["input",[28,[37,1],[[30,5]],null]],null],[12],[13],[1,"\\n"]],["@name","@value","&attrs","@didinsert","@oninput"],false,["did-insert","optional","on"]]',moduleName:"consul-ui/components/form-group/element/text/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/form-group/index",["exports","@ember/component","@ember/template-factory","@glimmer/component"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"7XOStkey",block:'[[[18,1,[[28,[37,1],null,[["Element"],[[50,"form-group/element",0,null,[["group"],[[30,0]]]]]]]]],[1,"\\n"]],["&default"],false,["yield","hash","component"]]',moduleName:"consul-ui/components/form-group/index.hbs",isStrictMode:!1}) -class i extends l.default{get name(){return this.args.name}}e.default=i,(0,t.setComponentTemplate)(r,i)})),define("consul-ui/components/form-input/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"m+IBH13K",block:'[[[11,"label"],[16,0,[28,[37,0],["form-input",[52,[28,[37,2],[[30,1,["state","context","errors"]],[30,2]],null]," has-error"]],null]],[17,3],[12],[1,"\\n "],[10,1],[12],[1,"\\n "],[18,7,null],[1,"\\n "],[13],[1,"\\n "],[18,8,null],[1,"\\n"],[44,[[28,[37,5],[[30,4,["help"]],[30,5]],null]],[[[41,[30,6],[[[1," "],[10,"em"],[12],[1,"\\n "],[1,[30,6]],[1,"\\n "],[13],[1,"\\n"]],[]],null]],[6]]],[1," "],[8,[39,6],null,[["@state","@matches"],[[30,1,["state"]],"error"]],[["default"],[[[[1,"\\n"],[1," "],[10,"strong"],[14,"role","alert"],[12],[1,[28,[35,2],[[28,[37,2],[[30,1,["state","context","errors"]],[30,2]],null],"message"],null]],[13],[1,"\\n "]],[]]]]],[1,"\\n"],[13],[1,"\\n"]],["@chart","@name","&attrs","@validations","@help","help","&label","&input"],false,["concat","if","get","yield","let","or","state"]]',moduleName:"consul-ui/components/form-input/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/freetext-filter/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@ember/object"],(function(e,t,n,l,r){var i -function o(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const a=(0,n.createTemplateFactory)({id:"oIN1v5pq",block:'[[[11,0],[24,0,"freetext-filter"],[17,1],[12],[1,"\\n "],[10,"label"],[14,0,"type-search"],[12],[1,"\\n "],[10,1],[14,0,"freetext-filter_label"],[12],[1,"Search"],[13],[1,"\\n "],[10,"input"],[14,0,"freetext-filter_input"],[15,"onsearch",[28,[37,0],[[30,0],[30,0,["change"]]],null]],[15,"oninput",[28,[37,0],[[30,0],[30,0,["change"]]],null]],[15,"onkeydown",[28,[37,0],[[30,0],[30,0,["keydown"]]],null]],[14,3,"s"],[15,2,[30,2]],[15,"placeholder",[30,0,["placeholder"]]],[14,"autofocus","autofocus"],[14,4,"search"],[12],[13],[1,"\\n "],[13],[1,"\\n "],[18,3,null],[1,"\\n"],[13]],["&attrs","@value","&default"],false,["action","yield"]]',moduleName:"consul-ui/components/freetext-filter/index.hbs",isStrictMode:!1}) -let u=(o((i=class extends l.default{get placeholder(){return this.args.placeholder||"Search"}get onsearch(){return this.args.onsearch||(()=>{})}change(e){this.onsearch(e)}keydown(e){13===e.keyCode&&e.preventDefault()}}).prototype,"change",[r.action],Object.getOwnPropertyDescriptor(i.prototype,"change"),i.prototype),o(i.prototype,"keydown",[r.action],Object.getOwnPropertyDescriptor(i.prototype,"keydown"),i.prototype),i) -e.default=u,(0,t.setComponentTemplate)(a,u)})) -define("consul-ui/components/hashicorp-consul/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@ember/service"],(function(e,t,n,l,r){var i,o,a -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const u=(0,n.createTemplateFactory)({id:"wUVRiBq4",block:'[[[8,[39,0],[[24,0,"hashicorp-consul"],[17,1]],null,[["notifications","home-nav","main-nav","complementary-nav","main","content-info"],[[[[1,"\\n"],[42,[28,[37,2],[[28,[37,2],[[33,3,["queue"]]],null]],null],null,[[[1," "],[8,[30,2,["Notification"]],null,[["@delay","@sticky"],[[28,[37,4],[[30,3,["timeout"]],[30,3,["extendedTimeout"]]],null],[30,3,["sticky"]]]],[["default"],[[[[1,"\\n"],[41,[30,3,["dom"]],[[[1," "],[2,[30,3,["dom"]]],[1,"\\n"]],[]],[[[44,[[28,[37,7],[[30,3,["type"]]],null],[28,[37,7],[[30,3,["action"]]],null]],[[[1," "],[8,[39,8],[[24,"data-notification",""]],[["@color"],[[52,[28,[37,9],[[30,4],"error"],null],"critical",[30,4]]]],[["default"],[[[[1,"\\n "],[8,[30,6,["Title"]],null,null,[["default"],[[[[1,[28,[35,10],[[30,4]],null]],[1,"!"]],[]]]]],[1,"\\n "],[8,[30,6,["Description"]],null,null,[["default"],[[[[1,"\\n"],[41,[28,[37,9],[[30,5],"logout"],null],[[[41,[28,[37,9],[[30,4],"success"],null],[[[1," You are now logged out.\\n"]],[]],[[[1," There was an error logging out.\\n"]],[]]]],[]],[[[41,[28,[37,9],[[30,5],"authorize"],null],[[[41,[28,[37,9],[[30,4],"success"],null],[[[1," You are now logged in.\\n"]],[]],[[[1," There was an error, please check your SecretID/Token\\n"]],[]]]],[]],[[[41,[28,[37,11],[[28,[37,9],[[30,5],"use"],null],[28,[37,9],[[30,3,["model"]],"token"],null]],null],[[[1," "],[8,[39,12],null,[["@type","@status","@item","@error"],[[30,5],[30,4],[30,3,["item"]],[30,3,["error"]]]],null],[1,"\\n"]],[]],[[[41,[28,[37,9],[[30,3,["model"]],"intention"],null],[[[1," "],[8,[39,13],null,[["@type","@status","@item","@error"],[[30,5],[30,4],[30,3,["item"]],[30,3,["error"]]]],null],[1,"\\n"]],[]],[[[41,[28,[37,9],[[30,3,["model"]],"role"],null],[[[1," "],[8,[39,14],null,[["@type","@status","@item","@error"],[[30,5],[30,4],[30,3,["item"]],[30,3,["error"]]]],null],[1,"\\n"]],[]],[[[41,[28,[37,9],[[30,3,["model"]],"policy"],null],[[[1," "],[8,[39,15],null,[["@type","@status","@item","@error"],[[30,5],[30,4],[30,3,["item"]],[30,3,["error"]]]],null],[1,"\\n "]],[]],null]],[]]]],[]]]],[]]],[1," "]],[]]]],[]]],[1," "]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n\\n"]],[4,5]]]],[]]],[1," "]],[]]]]],[1,"\\n"]],[3]],null],[1,"\\n "]],[2]],[[[1,"\\n "],[10,3],[14,0,"w-8 h-8"],[15,6,[28,[37,16],["index"],[["params"],[[28,[37,17],null,[["peer"],[[27]]]]]]]],[12],[1,"\\n "],[8,[39,18],null,[["@size","@name","@stretched"],["24","consul-color",true]],null],[1,"\\n "],[13],[1,"\\n "]],[]],[[[1,"\\n "],[8,[39,19],null,null,null],[1,"\\n "],[10,"ul"],[12],[1,"\\n "],[8,[39,20],null,[["@dc","@partition","@nspace","@dcs"],[[30,7],[30,8],[30,9],[30,10]]],null],[1,"\\n "],[8,[39,21],null,[["@dc","@partition","@nspace","@partitions","@onchange"],[[30,7],[30,8],[30,9],[30,0,["partitions"]],[28,[37,22],[[30,0],[28,[37,23],[[30,0,["partitions"]]],null]],[["value"],["data"]]]]],null],[1,"\\n "],[8,[39,24],null,[["@dc","@partition","@nspace","@nspaces","@onchange"],[[30,7],[30,8],[30,9],[30,0,["nspaces"]],[28,[37,22],[[30,0],[28,[37,23],[[30,0,["nspaces"]]],null]],[["value"],["data"]]]]],null],[1,"\\n"],[41,[28,[37,25],["access overview"],null],[[[1," "],[10,"li"],[15,0,[28,[37,26],[[28,[37,27],["is-active",[28,[37,28],["dc.show",[30,7,["Name"]]],null]],null]],null]],[12],[1,"\\n "],[8,[39,22],null,[["@href"],[[28,[37,16],["dc.show",[30,7,["Name"]]],[["params"],[[28,[37,17],null,[["peer"],[[27]]]]]]]]],[["default"],[[[[1,"\\n Overview\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[28,[37,25],["read services"],null],[[[1," "],[10,"li"],[15,0,[52,[28,[37,28],["dc.services",[30,7,["Name"]]],null],"is-active"]],[12],[1,"\\n "],[10,3],[15,6,[28,[37,16],["dc.services",[30,7,["Name"]]],[["params"],[[28,[37,17],null,[["peer"],[[27]]]]]]]],[12],[1,"Services"],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[28,[37,25],["read nodes"],null],[[[1," "],[10,"li"],[15,0,[52,[28,[37,28],["dc.nodes",[30,7,["Name"]]],null],"is-active"]],[12],[1,"\\n "],[10,3],[15,6,[28,[37,16],["dc.nodes",[30,7,["Name"]]],[["params"],[[28,[37,17],null,[["peer"],[[27]]]]]]]],[12],[1,"Nodes"],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[28,[37,25],["read kv"],null],[[[1," "],[10,"li"],[15,0,[52,[28,[37,28],["dc.kv",[30,7,["Name"]]],null],"is-active"]],[12],[1,"\\n "],[10,3],[15,6,[28,[37,16],["dc.kv",[30,7,["Name"]]],[["params"],[[28,[37,17],null,[["peer"],[[27]]]]]]]],[12],[1,"Key/Value"],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[28,[37,25],["read intentions"],null],[[[1," "],[10,"li"],[15,0,[52,[28,[37,28],["dc.intentions",[30,7,["Name"]]],null],"is-active"]],[12],[1,"\\n "],[10,3],[15,6,[28,[37,16],["dc.intentions",[30,7,["Name"]]],[["params"],[[28,[37,17],null,[["peer"],[[27]]]]]]]],[12],[1,"Intentions"],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1," "],[8,[39,29],null,[["@dc","@partition","@nspace"],[[30,7],[30,8],[30,9]]],null],[1,"\\n "],[8,[39,30],null,[["@dc","@partition","@nspace"],[[30,7],[30,8],[30,9]]],null],[1,"\\n "],[13],[1,"\\n "]],[]],[[[1,"\\n "],[10,"ul"],[12],[1,"\\n "],[8,[39,31],null,null,null],[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,32],null,null,[["default"],[[[[1,"\\n "],[8,[30,11,["Action"]],[[4,[38,33],["click",[30,11,["toggle"]]],null]],null,[["default"],[[[[1,"\\n Help\\n "]],[]]]]],[1,"\\n "],[8,[30,11,["Menu"]],null,null,[["default"],[[[[1,"\\n "],[8,[30,12,["Menu"]],null,null,[["default"],[[[[1,"\\n "],[8,[30,13,["Separator"]],null,null,[["default"],[[[[1,"\\n Consul v"],[1,[28,[35,34],["CONSUL_VERSION"],null]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,13,["Item"]],[[24,0,"docs-link"]],null,[["default"],[[[[1,"\\n "],[8,[30,13,["Action"]],null,[["@href","@external"],[[28,[37,34],["CONSUL_DOCS_URL"],null],true]],[["default"],[[[[1,"\\n Documentation\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,13,["Item"]],[[24,0,"learn-link"]],null,[["default"],[[[[1,"\\n "],[8,[30,13,["Action"]],null,[["@href","@external"],[[28,[37,35],[[28,[37,34],["CONSUL_DOCS_LEARN_URL"],null],"/consul"],null],true]],[["default"],[[[[1,"\\n HashiCorp Learn\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,13,["Separator"]],null,null,null],[1,"\\n "],[8,[30,13,["Item"]],[[24,0,"feedback-link"]],null,[["default"],[[[[1,"\\n "],[8,[30,13,["Action"]],null,[["@href","@external"],[[28,[37,34],["CONSUL_REPO_ISSUES_URL"],null],true]],[["default"],[[[[1,"\\n Provide Feedback\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[13]]]]],[1,"\\n "]],[12]]]]],[1,"\\n "]],[11]]]]],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[15,0,[52,[28,[37,28],["settings"],null],"is-active"]],[12],[1,"\\n "],[10,3],[15,6,[28,[37,16],["settings"],[["params"],[[28,[37,17],null,[["nspace","partition"],[[27],[27]]]]]]]],[12],[1,"\\n Settings\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[8,[39,36],null,[["@dc","@partition","@nspace","@onchange"],[[30,7],[30,8],[30,9],[30,14]]],[["default"],[[[[1,"\\n "],[8,[39,37],null,[["@target","@name","@value"],[[30,0],"tokenSelector",[30,15]]],null],[1,"\\n "]],[15]]]]],[1,"\\n "],[13],[1,"\\n "]],[]],[[[1,"\\n "],[18,16,[[28,[37,17],null,[["login"],[[52,[30,0,["tokenSelector"]],[30,0,["tokenSelector"]],[28,[37,17],null,[["open","close"],[[27],[27]]]]]]]]]],[1,"\\n "]],[]],[[[1,"\\n "],[10,2],[12],[1,"\\n Consul v"],[1,[28,[35,34],["CONSUL_VERSION"],null]],[1,"\\n "],[13],[1,"\\n "],[2,[28,[37,35],["\x3c!-- ",[28,[37,34],["CONSUL_GIT_SHA"],null],"--\x3e"],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],["&attrs","app","flash","status","type","T","@dc","@partition","@nspace","@dcs","disclosure","panel","menu","@onchange","selector","&default"],false,["app","each","-track-array","flashMessages","sub","if","let","lowercase","hds/toast","eq","capitalize","or","consul/token/notifications","consul/intention/notifications","consul/role/notifications","consul/policy/notifications","href-to","hash","flight-icon","consul/hcp/home","consul/datacenter/selector","consul/partition/selector","action","mut","consul/nspace/selector","can","class-map","array","is-href","consul/acl/selector","consul/peer/selector","debug/navigation","disclosure-menu","on","env","concat","consul/token/selector","ref","yield"]]',moduleName:"consul-ui/components/hashicorp-consul/index.hbs",isStrictMode:!1}) -let s=(i=(0,r.inject)("flashMessages"),o=class extends l.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="flashMessages",l=this,(n=a)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}},c=o.prototype,d="flashMessages",p=[i],f={configurable:!0,enumerable:!0,writable:!0,initializer:null},h={},Object.keys(f).forEach((function(e){h[e]=f[e]})),h.enumerable=!!h.enumerable,h.configurable=!!h.configurable,("value"in h||h.initializer)&&(h.writable=!0),h=p.slice().reverse().reduce((function(e,t){return t(c,d,e)||e}),h),m&&void 0!==h.initializer&&(h.value=h.initializer?h.initializer.call(m):void 0,h.initializer=void 0),void 0===h.initializer&&(Object.defineProperty(c,d,h),h=null),a=h,o) -var c,d,p,f,m,h -e.default=s,(0,t.setComponentTemplate)(u,s)})),define("consul-ui/components/hds/alert/description",["exports","@hashicorp/design-system-components/components/hds/alert/description"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/alert/index",["exports","@hashicorp/design-system-components/components/hds/alert/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/alert/title",["exports","@hashicorp/design-system-components/components/hds/alert/title"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/avatar/index",["exports","@hashicorp/design-system-components/components/hds/avatar/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/badge-count/index",["exports","@hashicorp/design-system-components/components/hds/badge-count/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/badge/index",["exports","@hashicorp/design-system-components/components/hds/badge/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/breadcrumb/index",["exports","@hashicorp/design-system-components/components/hds/breadcrumb/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/breadcrumb/item",["exports","@hashicorp/design-system-components/components/hds/breadcrumb/item"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/breadcrumb/truncation",["exports","@hashicorp/design-system-components/components/hds/breadcrumb/truncation"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/button-set/index",["exports","@hashicorp/design-system-components/components/hds/button-set/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/button/index",["exports","@hashicorp/design-system-components/components/hds/button/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/card/container",["exports","@hashicorp/design-system-components/components/hds/card/container"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/disclosure/index",["exports","@hashicorp/design-system-components/components/hds/disclosure/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/dismiss-button/index",["exports","@hashicorp/design-system-components/components/hds/dismiss-button/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/dropdown/index",["exports","@hashicorp/design-system-components/components/hds/dropdown/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/dropdown/list-item/copy-item",["exports","@hashicorp/design-system-components/components/hds/dropdown/list-item/copy-item"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/dropdown/list-item/description",["exports","@hashicorp/design-system-components/components/hds/dropdown/list-item/description"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/dropdown/list-item/generic",["exports","@hashicorp/design-system-components/components/hds/dropdown/list-item/generic"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/dropdown/list-item/interactive",["exports","@hashicorp/design-system-components/components/hds/dropdown/list-item/interactive"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/dropdown/list-item/separator",["exports","@hashicorp/design-system-components/components/hds/dropdown/list-item/separator"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/dropdown/list-item/title",["exports","@hashicorp/design-system-components/components/hds/dropdown/list-item/title"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/dropdown/toggle/button",["exports","@hashicorp/design-system-components/components/hds/dropdown/toggle/button"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/dropdown/toggle/icon",["exports","@hashicorp/design-system-components/components/hds/dropdown/toggle/icon"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/empty-state/body",["exports","@hashicorp/design-system-components/components/hds/empty-state/body"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/empty-state/footer",["exports","@hashicorp/design-system-components/components/hds/empty-state/footer"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/empty-state/header",["exports","@hashicorp/design-system-components/components/hds/empty-state/header"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/empty-state/index",["exports","@hashicorp/design-system-components/components/hds/empty-state/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/flyout/body",["exports","@hashicorp/design-system-components/components/hds/flyout/body"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/flyout/description",["exports","@hashicorp/design-system-components/components/hds/flyout/description"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})) -define("consul-ui/components/hds/flyout/header",["exports","@hashicorp/design-system-components/components/hds/flyout/header"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/flyout/index",["exports","@hashicorp/design-system-components/components/hds/flyout/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/checkbox/base",["exports","@hashicorp/design-system-components/components/hds/form/checkbox/base"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/checkbox/field",["exports","@hashicorp/design-system-components/components/hds/form/checkbox/field"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/checkbox/group",["exports","@hashicorp/design-system-components/components/hds/form/checkbox/group"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/error/index",["exports","@hashicorp/design-system-components/components/hds/form/error/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/error/message",["exports","@hashicorp/design-system-components/components/hds/form/error/message"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/field/index",["exports","@hashicorp/design-system-components/components/hds/form/field/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/fieldset/index",["exports","@hashicorp/design-system-components/components/hds/form/fieldset/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/helper-text/index",["exports","@hashicorp/design-system-components/components/hds/form/helper-text/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/indicator/index",["exports","@hashicorp/design-system-components/components/hds/form/indicator/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/label/index",["exports","@hashicorp/design-system-components/components/hds/form/label/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/legend/index",["exports","@hashicorp/design-system-components/components/hds/form/legend/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/radio-card/description",["exports","@hashicorp/design-system-components/components/hds/form/radio-card/description"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/radio-card/group",["exports","@hashicorp/design-system-components/components/hds/form/radio-card/group"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/radio-card/index",["exports","@hashicorp/design-system-components/components/hds/form/radio-card/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/radio-card/label",["exports","@hashicorp/design-system-components/components/hds/form/radio-card/label"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/radio/base",["exports","@hashicorp/design-system-components/components/hds/form/radio/base"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/radio/field",["exports","@hashicorp/design-system-components/components/hds/form/radio/field"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/radio/group",["exports","@hashicorp/design-system-components/components/hds/form/radio/group"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/select/base",["exports","@hashicorp/design-system-components/components/hds/form/select/base"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/select/field",["exports","@hashicorp/design-system-components/components/hds/form/select/field"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/text-input/base",["exports","@hashicorp/design-system-components/components/hds/form/text-input/base"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/text-input/field",["exports","@hashicorp/design-system-components/components/hds/form/text-input/field"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/textarea/base",["exports","@hashicorp/design-system-components/components/hds/form/textarea/base"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/textarea/field",["exports","@hashicorp/design-system-components/components/hds/form/textarea/field"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/toggle/base",["exports","@hashicorp/design-system-components/components/hds/form/toggle/base"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/toggle/field",["exports","@hashicorp/design-system-components/components/hds/form/toggle/field"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/form/toggle/group",["exports","@hashicorp/design-system-components/components/hds/form/toggle/group"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/icon-tile/index",["exports","@hashicorp/design-system-components/components/hds/icon-tile/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})) -define("consul-ui/components/hds/interactive/index",["exports","@hashicorp/design-system-components/components/hds/interactive/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/link/inline",["exports","@hashicorp/design-system-components/components/hds/link/inline"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/link/standalone",["exports","@hashicorp/design-system-components/components/hds/link/standalone"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/modal/body",["exports","@hashicorp/design-system-components/components/hds/modal/body"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/modal/footer",["exports","@hashicorp/design-system-components/components/hds/modal/footer"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/modal/header",["exports","@hashicorp/design-system-components/components/hds/modal/header"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/modal/index",["exports","@hashicorp/design-system-components/components/hds/modal/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/pagination/compact/index",["exports","@hashicorp/design-system-components/components/hds/pagination/compact/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/pagination/info",["exports","@hashicorp/design-system-components/components/hds/pagination/info"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/pagination/nav/arrow",["exports","@hashicorp/design-system-components/components/hds/pagination/nav/arrow"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/pagination/nav/ellipsis",["exports","@hashicorp/design-system-components/components/hds/pagination/nav/ellipsis"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/pagination/nav/number",["exports","@hashicorp/design-system-components/components/hds/pagination/nav/number"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/pagination/numbered/index",["exports","@hashicorp/design-system-components/components/hds/pagination/numbered/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/pagination/size-selector",["exports","@hashicorp/design-system-components/components/hds/pagination/size-selector"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/stepper/step/indicator",["exports","@hashicorp/design-system-components/components/hds/stepper/step/indicator"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/stepper/task/indicator",["exports","@hashicorp/design-system-components/components/hds/stepper/task/indicator"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/table/index",["exports","@hashicorp/design-system-components/components/hds/table/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/table/td",["exports","@hashicorp/design-system-components/components/hds/table/td"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/table/th-sort",["exports","@hashicorp/design-system-components/components/hds/table/th-sort"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/table/th",["exports","@hashicorp/design-system-components/components/hds/table/th"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/table/tr",["exports","@hashicorp/design-system-components/components/hds/table/tr"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/tabs/index",["exports","@hashicorp/design-system-components/components/hds/tabs/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/tabs/panel",["exports","@hashicorp/design-system-components/components/hds/tabs/panel"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/tabs/tab",["exports","@hashicorp/design-system-components/components/hds/tabs/tab"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/tag/index",["exports","@hashicorp/design-system-components/components/hds/tag/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/toast/index",["exports","@hashicorp/design-system-components/components/hds/toast/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/hds/yield/index",["exports","@hashicorp/design-system-components/components/hds/yield/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/informed-action/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"NfQBR0Ol",block:'[[[11,0],[24,0,"informed-action"],[17,1],[12],[1,"\\n "],[10,0],[12],[1,"\\n "],[10,"header"],[12],[1,"\\n "],[18,2,null],[1,"\\n "],[13],[1,"\\n "],[18,3,null],[1,"\\n "],[13],[1,"\\n "],[10,"ul"],[12],[1,"\\n "],[18,4,[[28,[37,1],null,[["Action"],[[50,"anonymous",0,null,[["tagName"],["li"]]]]]]]],[1,"\\n "],[13],[1,"\\n"],[13]],["&attrs","&header","&body","&actions"],false,["yield","hash","component"]]',moduleName:"consul-ui/components/informed-action/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/ivy-codemirror",["exports","ivy-codemirror/components/ivy-codemirror"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/jwt-source/index",["exports","@glimmer/component","@ember/service","consul-ui/utils/dom/event-source"],(function(e,t,n,l){var r,i,o,a,u -function s(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function c(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let d=(r=(0,n.inject)("repository/oidc-provider"),i=(0,n.inject)("dom"),o=class extends t.default{constructor(){super(...arguments),s(this,"repo",a,this),s(this,"dom",u,this),this.source&&this.source.close(),this._listeners=this.dom.listeners(),this.source=(0,l.fromPromise)(this.repo.findCodeByURL(this.args.src)),this._listeners.add(this.source,{message:e=>this.onchange(e),error:e=>this.onerror(e)})}onchange(e){"function"==typeof this.args.onchange&&this.args.onchange(...arguments)}onerror(e){"function"==typeof this.args.onerror&&this.args.onerror(...arguments)}willDestroy(){super.willDestroy(...arguments),this.source&&this.source.close(),this.repo.close(),this._listeners.remove()}},a=c(o.prototype,"repo",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),u=c(o.prototype,"dom",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),o) -e.default=d})) -define("consul-ui/components/list-collection/index",["exports","@ember/component","@ember/template-factory","@ember/service","@ember/object","ember-collection/components/ember-collection","ember-collection/layouts/percentage-columns","block-slots"],(function(e,t,n,l,r,i,o,a){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const u=(0,n.createTemplateFactory)({id:"DfcTL8bI",block:'[[[11,0],[16,0,[29,["list-collection list-collection-scroll-",[36,0]]]],[23,5,[28,[37,1],["height:",[33,2,["height"]],"px"],null]],[16,1,[36,3]],[17,1],[12],[1,"\\n"],[18,7,null],[1,"\\n"],[41,[28,[37,6],[[33,0],"virtual"],null],[[[1," "],[1,[28,[35,7],["resize",[28,[37,8],[[30,0],"resize"],null]],null]],[1,"\\n "],[8,[39,9],null,[["@tagName","@content-size","@scroll-left","@scroll-top","@scrollChange","@clientSizeChange"],["ul",[99,10,["@content-size"]],[99,11,["@scroll-left"]],[99,12,["@scroll-top"]],[28,[37,8],[[30,0],"scrollChange"],null],[28,[37,8],[[30,0],"clientSizeChange"],null]]],[["default"],[[[[1,"\\n "],[10,"li"],[12],[13],[42,[28,[37,14],[[28,[37,14],[[33,15]],null]],null],null,[[[10,"li"],[15,"onclick",[28,[37,8],[[30,0],"click"],null]],[22,5,[30,2,["style"]]],[15,0,[52,[33,16],[52,[28,[37,17],[[33,16]],[["item"],[[30,2,["item"]]]]],"linkable"]]],[12],[1,"\\n "],[8,[39,18],null,[["@name"],["header"]],[["default"],[[[[10,0],[14,0,"header"],[12],[18,7,[[30,2,["item"]],[30,2,["index"]]]],[13]],[]]]]],[1,"\\n "],[8,[39,18],null,[["@name"],["details"]],[["default"],[[[[10,0],[14,0,"detail"],[12],[18,7,[[30,2,["item"]],[30,2,["index"]]]],[13]],[]]]]],[1,"\\n "],[8,[39,18],null,[["@name","@params"],["actions",[28,[37,19],[[50,"more-popover-menu",0,null,[["expanded","onchange"],[[52,[28,[37,6],[[33,21],[30,2,["index"]]],null],true,false],[28,[37,8],[[30,0],"change",[30,2,["index"]]],null]]]]],null]]],[["default"],[[[[1,"\\n "],[10,0],[14,0,"actions"],[12],[1,"\\n "],[18,7,[[30,2,["item"]],[30,2,["index"]]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[13]],[2]],null]],[]]]]],[1,"\\n"]],[]],[[[44,[[52,[28,[37,23],[[33,24],[28,[37,25],[[30,0,["expand"]]],null]],null],[28,[37,26],[0,[33,24],[33,27]],null],[33,27]]],[[[1," "],[10,"ul"],[12],[1,"\\n "],[10,"li"],[14,5,"display: none;"],[12],[13],[42,[28,[37,14],[[28,[37,14],[[30,3]],null]],null],null,[[[10,"li"],[15,"onclick",[28,[37,8],[[30,0],"click"],null]],[15,0,[52,[28,[37,25],[[33,16]],null],"linkable",[52,[28,[37,17],[[33,16]],[["item"],[[33,28,["item"]]]]],"linkable"]]],[12],[1,"\\n "],[8,[39,18],null,[["@name"],["header"]],[["default"],[[[[10,0],[14,0,"header"],[12],[18,7,[[30,4],[30,5]]],[13]],[]]]]],[1,"\\n "],[8,[39,18],null,[["@name"],["details"]],[["default"],[[[[10,0],[14,0,"detail"],[12],[18,7,[[30,4],[30,5]]],[13]],[]]]]],[1,"\\n "],[8,[39,18],null,[["@name","@params"],["actions",[28,[37,19],[[50,"more-popover-menu",0,null,[["onchange"],[[28,[37,8],[[30,0],"change",[30,5]],null]]]]],null]]],[["default"],[[[[1,"\\n "],[10,0],[14,0,"actions"],[12],[1,"\\n "],[18,7,[[30,4],[30,5]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[13]],[4,5]],null],[13],[1,"\\n"],[41,[28,[37,23],[[33,24],[28,[37,29],[[33,27,["length"]],[33,24]],null]],null],[[[44,[[28,[37,30],[[30,3,["length"]],[33,27,["length"]]],null]],[[[1," "],[10,"button"],[15,0,[52,[30,6],"closed"]],[15,"onclick",[28,[37,8],[[30,0],[28,[37,31],[[30,0,["expand"]]],null],[30,6]],null]],[14,4,"button"],[12],[1,"\\n"],[41,[30,6],[[[1," View "],[1,[28,[35,32],[[33,27,["length"]],[30,3,["length"]]],null]],[1," more\\n"]],[]],[[[1," View less\\n"]],[]]],[1," "],[13],[1,"\\n"]],[6]]]],[]],null]],[3]]],[1,"\\n"]],[]]],[13]],["&attrs","cell","slice","item","index","more","&default"],false,["scroll","concat","style","guid","yield","if","eq","on-window","action","ember-native-scrollable","_contentSize","_scrollLeft","_scrollTop","each","-track-array","_cells","linkable","is","yield-slot","block-params","component","checked","let","and","partial","not","slice","items","cell","gt","not-eq","mut","sub"]]',moduleName:"consul-ui/components/list-collection/index.hbs",isStrictMode:!1}),s=o.default.prototype.formatItemStyle -var c=(0,t.setComponentTemplate)(u,i.default.extend(a.default,{dom:(0,l.inject)("dom"),tagName:"",height:500,cellHeight:70,checked:null,scroll:"virtual",init:function(){this._super(...arguments),this.columns=[100],this.guid=this.dom.guid(this)},didInsertElement:function(){this._super(...arguments),this.$element=this.dom.element(`#${this.guid}`),"virtual"===this.scroll&&this.actions.resize.apply(this,[{target:this.dom.viewport()}])},didReceiveAttrs:function(){this._super(...arguments),this._cellLayout=this["cell-layout"]=new o.default((0,r.get)(this,"items.length"),(0,r.get)(this,"columns"),(0,r.get)(this,"cellHeight")) -const e=this -this["cell-layout"].formatItemStyle=function(t){let n=s.apply(this,arguments) -return e.checked===t&&(n=`${n};z-index: 1`),n}},style:(0,r.computed)("height",(function(){return"virtual"!==this.scroll?{}:{height:(0,r.get)(this,"height")}})),actions:{resize:function(e){const t=(0,r.get)(this,"dom").element('footer[role="contentinfo"]') -if(t){const n=1,l=this.$element.getBoundingClientRect().top+t.clientHeight+n,r=e.target.innerHeight-l -this.set("height",Math.max(0,r)),this.updateItems(),this.updateScrollPosition()}},click:function(e){return this.dom.clickFirstAnchor(e,".list-collection > ul > li")},change:function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} -if(t.target.checked&&e!==(0,r.get)(this,"checked")){(0,r.set)(this,"checked",parseInt(e)),this.$row=this.dom.closest("li",t.target),this.$row.style.zIndex=1 -const n=this.dom.sibling(t.target,"div") -n.getBoundingClientRect().top+n.clientHeight>this.dom.element('footer[role="contentinfo"]').getBoundingClientRect().top?n.classList.add("above"):n.classList.remove("above")}else{this.dom.sibling(t.target,"div").classList.remove("above"),(0,r.set)(this,"checked",null),this.$row.style.zIndex=null}}}})) -e.default=c})),define("consul-ui/components/maybe-in-element",["exports","ember-maybe-in-element/components/maybe-in-element"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/menu-panel/index",["exports","@ember/component","@ember/template-factory","@ember/service","@ember/runloop","@ember/object","block-slots"],(function(e,t,n,l,r,i,o){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const a=(0,n.createTemplateFactory)({id:"wAfNxT0t",block:'[[[18,3,null],[1,"\\n"],[44,[[28,[37,2],null,[["change"],[[28,[37,3],[[30,0],"change"],null]]]]],[[[11,0],[16,0,[28,[37,4],[[28,[37,5],["menu-panel"],null],[28,[37,5],["menu-panel-deprecated"],null],[28,[37,5],[[33,6]],null],[28,[37,5],[[33,7],"confirmation"],null]],null]],[4,[38,8],[[28,[37,3],[[30,0],"connect"],null]],null],[12],[1,"\\n "],[8,[39,9],null,[["@name"],["controls"]],[["default"],[[[[1,"\\n "],[18,3,[[30,1]]],[1,"\\n "]],[]]]]],[1,"\\n"],[6,[39,9],null,[["name"],["header"]],[["default","else"],[[[[1," "],[10,0],[12],[1,"\\n "],[18,3,[[30,1]]],[1,"\\n "],[13],[1,"\\n"]],[]],[[],[]]]]],[1," "],[11,"ul"],[24,"role","menu"],[17,2],[12],[1,"\\n "],[8,[39,9],null,[["@name"],["menu"]],[["default"],[[[[1,"\\n "],[18,3,[[30,1]]],[1,"\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n"],[13],[1,"\\n"]],[1]]]],["api","&attrs","&default"],false,["yield","let","hash","action","class-map","array","position","isConfirmation","did-insert","yield-slot"]]',moduleName:"consul-ui/components/menu-panel/index.hbs",isStrictMode:!1}) -var u=(0,t.setComponentTemplate)(a,t.default.extend(o.default,{tagName:"",dom:(0,l.inject)("dom"),isConfirmation:!1,actions:{connect:function(e){(0,r.next)((()=>{if(!this.isDestroyed){const t=this.dom.element('li:only-child > [role="menu"]:first-child',e);(0,i.set)(this,"isConfirmation",void 0!==t)}}))},change:function(e){const t=e.target.getAttribute("id"),n=this.dom.element(`[for='${t}']`),l=this.dom.element("[role=menu]",n.parentElement),r=this.dom.closest(".menu-panel",l) -if(e.target.checked){l.style.display="block" -const e=l.offsetHeight+2 -r.style.maxHeight=r.style.minHeight=`${e}px`}else l.style.display=null,r.style.maxHeight=null,r.style.minHeight="0"}}})) -e.default=u})),define("consul-ui/components/menu/action/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"tJ7CAUii",block:'[[[8,[39,0],[[24,"role","menuitem"],[17,1],[4,[38,1],["click",[52,[30,2],[30,4,["close"]],[28,[37,3],null,null]]],null]],[["@href","@external"],[[30,2],[30,3]]],[["default"],[[[[1,"\\n "],[18,5,null],[1,"\\n"]],[]]]]],[1,"\\n"]],["&attrs","@href","@external","@disclosure","&default"],false,["action","on","if","noop","yield"]]',moduleName:"consul-ui/components/menu/action/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/menu/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"6Fvyg+h9",block:'[[[11,"ul"],[24,"role","menu"],[23,5,[28,[37,0],[[28,[37,1],["height",[52,[28,[37,3],[[30,1],[28,[37,4],[[30,1,["type"]],"native-scroll"],null]],null],[30,1,["totalHeight"]]],"px"],null],[28,[37,1],["--paged-start",[52,[28,[37,3],[[30,1],[28,[37,4],[[30,1,["type"]],"native-scroll"],null]],null],[30,1,["startHeight"]]],"px"],null]],null]],[4,[38,5],[[28,[37,6],[[30,1,["pane"]]],null]],null],[4,[38,7],null,[["onclose","openEvent"],[[28,[37,8],[[30,2],[30,3,["close"]]],null],[28,[37,8],[[30,4],[30,3,["event"]]],null]]]],[12],[1,"\\n "],[18,5,[[28,[37,10],null,[["Action","Item","Separator","items"],[[50,"menu/action",0,null,[["disclosure"],[[30,3]]]],[50,"menu/item",0,null,null],[50,"menu/separator",0,null,null],[30,1,["items"]]]]]]],[1,"\\n"],[13]],["@pager","@onclose","@disclosure","@event","&default"],false,["style-map","array","if","and","not-eq","did-insert","optional","aria-menu","or","yield","hash","component"]]',moduleName:"consul-ui/components/menu/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/menu/item/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"xyqbyNJ6",block:'[[[11,"li"],[24,"role","none"],[17,1],[12],[1,"\\n "],[18,2,null],[1,"\\n"],[13],[1,"\\n\\n"]],["&attrs","&default"],false,["yield"]]',moduleName:"consul-ui/components/menu/item/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/menu/separator/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"5tMGOxru",block:'[[[11,"li"],[24,"role","separator"],[17,1],[12],[18,2,null],[13],[1,"\\n"]],["&attrs","&default"],false,["yield"]]',moduleName:"consul-ui/components/menu/separator/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/modal-dialog/index",["exports","@ember/component","@ember/template-factory","@ember/object","block-slots","a11y-dialog","@ember/runloop"],(function(e,t,n,l,r,i,o){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const a=(0,n.createTemplateFactory)({id:"LycjAwp+",block:'[[[44,[[28,[37,1],null,[["labelledby"],[[28,[37,2],null,null]]]]],[[[1," "],[8,[39,3],null,[["@target"],["modal"]],[["default"],[[[[1,"\\n "],[18,4,null],[1,"\\n "],[11,0],[24,0,"modal-dialog"],[24,"aria-hidden","true"],[17,2],[4,[38,5],[[28,[37,6],[[30,0],"connect"],null]],null],[4,[38,7],[[28,[37,6],[[30,0],"disconnect"],null]],null],[12],[1,"\\n "],[10,0],[14,"tabindex","-1"],[14,"data-a11y-dialog-hide",""],[12],[13],[1,"\\n "],[10,0],[14,0,"modal-dialog-modal"],[14,"role","dialog"],[15,"aria-label",[30,3,["label"]]],[12],[1,"\\n "],[10,0],[14,"role","document"],[12],[1,"\\n "],[10,"header"],[14,0,"modal-dialog-header"],[12],[1,"\\n "],[8,[39,8],[[24,"data-a11y-dialog-hide",""]],[["@text","@color","@icon","@size","@isIconOnly"],["Close dialog","secondary","x","small",true]],null],[1,"\\n "],[8,[39,9],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[18,4,[[28,[37,1],null,[["open","close","opened","aria"],[[28,[37,6],[[30,0],"open"],null],[28,[37,6],[[30,0],"close"],null],[30,0,["isOpen"]],[30,1]]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[10,0],[14,0,"modal-dialog-body"],[12],[1,"\\n "],[8,[39,9],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[18,4,[[28,[37,1],null,[["open","close","opened","aria"],[[28,[37,6],[[30,0],"open"],null],[28,[37,6],[[30,0],"close"],null],[30,0,["isOpen"]],[30,1]]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[10,"footer"],[14,0,"modal-dialog-footer"],[12],[1,"\\n "],[8,[39,9],null,[["@name","@params"],["actions",[28,[37,10],[[28,[37,6],[[30,0],"close"],null]],null]]],[["default"],[[[[1,"\\n "],[18,4,[[28,[37,1],null,[["open","close","opened","aria"],[[28,[37,6],[[30,0],"open"],null],[28,[37,6],[[30,0],"close"],null],[30,0,["isOpen"]],[30,1]]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[1]]]],["aria","&attrs","@aria","&default"],false,["let","hash","unique-id","portal","yield","did-insert","action","will-destroy","hds/button","yield-slot","block-params"]]',moduleName:"consul-ui/components/modal-dialog/index.hbs",isStrictMode:!1}) -var u=(0,t.setComponentTemplate)(a,t.default.extend(r.default,{tagName:"",onclose:function(){},onopen:function(){},isOpen:!1,actions:{connect:function(e){this.dialog=new i.default(e),this.dialog.on("hide",(()=>{(0,o.schedule)("afterRender",(e=>(0,l.set)(this,"isOpen",!1))),this.onclose({target:e})})),this.dialog.on("show",(()=>{(0,l.set)(this,"isOpen",!0),this.onopen({target:e})})),this.open&&this.actions.open.apply(this,[])},disconnect:function(e){this.dialog.destroy()},open:function(){this.dialog.show()},close:function(){this.dialog.hide()}}})) -e.default=u})),define("consul-ui/components/modal-layer/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"6vWxczPc",block:'[[[11,0],[24,0,"modal-layer"],[17,1],[12],[1,"\\n "],[8,[39,0],null,[["@name","@multiple"],["modal",true]],null],[1,"\\n"],[13],[1,"\\n"]],["&attrs"],false,["portal-target"]]',moduleName:"consul-ui/components/modal-layer/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/more-popover-menu/index",["exports","@ember/component","@ember/template-factory"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const l=(0,n.createTemplateFactory)({id:"9USQK1Le",block:'[[[11,0],[24,0,"more-popover-menu"],[17,1],[12],[1,"\\n "],[8,[39,0],null,[["@expanded","@onchange","@keyboardAccess"],[[99,1,["@expanded"]],[28,[37,2],[[30,0],[33,3]],null],false]],[["default"],[[[[1,"\\n "],[8,[39,4],null,[["@name"],["trigger"]],[["default"],[[[[1,"\\n More\\n "]],[]]]]],[1,"\\n "],[8,[39,4],null,[["@name"],["menu"]],[["default"],[[[[1,"\\n "],[18,4,[[30,2,["MenuItem"]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[2,3]]]]],[1,"\\n"],[13],[1,"\\n"]],["&attrs","components","api","&default"],false,["popover-menu","expanded","action","onchange","block-slot","yield"]]',moduleName:"consul-ui/components/more-popover-menu/index.hbs",isStrictMode:!1}) -var r=(0,t.setComponentTemplate)(l,t.default.extend({tagName:""})) -e.default=r})),define("consul-ui/components/oidc-select/chart.xstate",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={id:"oidc-select",initial:"idle",on:{RESET:[{target:"idle"}]},states:{idle:{on:{LOAD:[{target:"loading"}]}},loaded:{},loading:{on:{SUCCESS:[{target:"loaded"}]}}}}})),define("consul-ui/components/oidc-select/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@glimmer/tracking","consul-ui/components/oidc-select/chart.xstate"],(function(e,t,n,l,r,i){var o,a -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const u=(0,n.createTemplateFactory)({id:"1JjkWJfY",block:'[[[8,[39,0],null,[["@src"],[[99,1,["@src"]]]],[["default"],[[[[1,"\\n"],[44,[[28,[37,3],null,[["State","Guard","Action","dispatch","state"],[[30,1],[30,2],[30,3],[30,4],[30,5]]]]],[[[1,"\\n "],[11,0],[24,0,"oidc-select"],[17,7],[12],[1,"\\n "],[8,[30,1],null,[["@notMatches"],["idle"]],[["default"],[[[[1,"\\n "],[8,[39,4],null,[["@src","@onchange","@onerror"],[[28,[37,5],["/${partition}/${nspace}/${dc}/oidc/providers",[28,[37,3],null,[["partition","nspace","dc"],[[30,0,["partition"]],[30,8],[30,9]]]]],null],[28,[37,6],[[28,[37,7],[[30,0],[28,[37,8],[[30,0,["items"]]],null]],[["value"],["data"]]],[28,[37,9],[[30,4],"SUCCESS"],null]],null],[28,[37,6],[[28,[37,9],[[30,4],"RESET"],null],[30,10]],null]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[30,1],null,[["@matches"],["loaded"]],[["default"],[[[[1,"\\n "],[8,[39,7],[[24,0,"reset"],[4,[38,10],["click",[28,[37,6],[[28,[37,11],[[30,0],"partition",""],null],[28,[37,9],[[30,4],"RESET"],null]],null]],null]],null,[["default"],[[[[1,"\\n Choose different Partition\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,0],null,[["@src"],[[28,[37,0],["validate"],null]]],[["default"],[[[[1,"\\n "],[8,[39,12],null,[["@name","@label","@item","@validations","@placeholder","@oninput","@chart"],["partition","Admin Partition",[30,0],[28,[37,3],null,[["partition"],[[28,[37,13],[[28,[37,3],null,[["test","error"],["^[a-zA-Z0-9]([a-zA-Z0-9-]{0,62}[a-zA-Z0-9])?$","Name must be a valid DNS hostname."]]]],null]]]],"Enter your Partition",[28,[37,7],[[30,0],[28,[37,8],[[30,0,["partition"]]],null]],[["value"],["target.value"]]],[28,[37,3],null,[["state","dispatch"],[[30,15],[30,14]]]]]],null],[1,"\\n\\n"],[1," "],[8,[30,1],null,[["@matches"],["idle"]],[["default"],[[[[1,"\\n "],[8,[39,14],[[16,"disabled",[28,[37,15],[[28,[37,16],[[30,0,["partition","length"]],1],null],[28,[37,17],[[30,15],"error"],null]],null]],[24,4,"submit"],[4,[38,10],["click",[28,[37,9],[[30,4],"LOAD"],null]],null]],[["@text"],["Choose provider"]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "]],[11,12,13,14,15]]]]],[1,"\\n\\n "],[8,[30,1],null,[["@matches"],["loading"]],[["default"],[[[[1,"\\n "],[8,[39,18],[[24,"aria-label","Loading"]],null,null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[30,1],null,[["@matches"],["loaded"]],[["default"],[[[[1,"\\n"],[41,[28,[37,16],[[30,0,["items","length"]],3],null],[[[1,"\\n "],[10,"ul"],[12],[1,"\\n"],[42,[28,[37,21],[[28,[37,21],[[30,0,["items"]]],null]],null],null,[[[1," "],[10,"li"],[12],[1,"\\n "],[8,[39,7],[[16,0,[28,[37,22],[[30,16,["Kind"]],"-oidc-provider"],null]],[16,"disabled",[30,17]],[4,[38,10],["click",[28,[37,9],[[30,18],[30,16]],null]],null]],[["@type"],["button"]],[["default"],[[[[1,"\\n Continue with\\n "],[1,[28,[35,15],[[30,16,["DisplayName"]],[30,16,["Name"]]],null]],[41,[28,[37,23],[[30,16,["Namespace"]],"default"],null],[[[1,"\\n ("],[1,[30,16,["Namespace"]]],[1,")"]],[]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n"]],[16]],null],[1," "],[13],[1,"\\n\\n"]],[]],[[[1,"\\n"],[44,[[28,[37,15],[[30,0,["provider"]],[28,[37,24],[0,[30,0,["items"]]],null]],null]],[[[1,"\\n "],[8,[39,25],null,[["@label","@name","@item","@selected","@items","@onchange","@disabled"],["SSO Provider","provider",[30,0],[30,19],[30,0,["items"]],[28,[37,7],[[30,0],[28,[37,8],[[30,0,["provider"]]],null]],null],[30,17]]],[["option"],[[[[1,"\\n "],[10,1],[15,0,[28,[37,22],[[30,20,["item","Kind"]],"-oidc-provider"],null]],[12],[1,"\\n "],[1,[28,[35,15],[[30,20,["item","DisplayName"]],[30,20,["item","Name"]]],null]],[41,[28,[37,23],[[30,20,["item","Namespace"]],"default"],null],[[[1," ("],[1,[30,20,["item","Namespace"]]],[1,")"]],[]],null],[1,"\\n "],[13],[1,"\\n "]],[20]]]]],[1,"\\n\\n "],[8,[39,14],[[16,"disabled",[30,17]],[4,[38,10],["click",[28,[37,9],[[30,18],[30,19]],null]],null]],[["@color","@text"],["primary","Log in"]],null],[1,"\\n"]],[19]]]],[]]],[1," "]],[]]]]],[1,"\\n "],[13],[1,"\\n"]],[6]]]],[1,2,3,4,5]]]]],[1,"\\n"]],["State","Guard","ChartAction","dispatch","state","chart","&attrs","@nspace","@dc","@onerror","ignoredState","ignoredGuard","ignoredAction","formDispatch","state","item","@disabled","@onchange","item","option"],false,["state-chart","chart","let","hash","data-source","uri","queue","action","mut","fn","on","set","text-input","array","hds/button","or","lt","state-matches","progress","if","each","-track-array","concat","not-eq","object-at","option-input"]]',moduleName:"consul-ui/components/oidc-select/index.hbs",isStrictMode:!1}) -let s=(o=class extends l.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="partition",l=this,(n=a)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0}),this.chart=i.default,this.args.partition&&(this.partition=this.args.partition)}},c=o.prototype,d="partition",p=[r.tracked],f={configurable:!0,enumerable:!0,writable:!0,initializer:function(){return"default"}},h={},Object.keys(f).forEach((function(e){h[e]=f[e]})),h.enumerable=!!h.enumerable,h.configurable=!!h.configurable,("value"in h||h.initializer)&&(h.writable=!0),h=p.slice().reverse().reduce((function(e,t){return t(c,d,e)||e}),h),m&&void 0!==h.initializer&&(h.value=h.initializer?h.initializer.call(m):void 0,h.initializer=void 0),void 0===h.initializer&&(Object.defineProperty(c,d,h),h=null),a=h,o) -var c,d,p,f,m,h -e.default=s,(0,t.setComponentTemplate)(u,s)})),define("consul-ui/components/option-input/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"hk9fkczL",block:'[[[8,[39,0],[[24,0,"option-input type-select"],[17,1]],[["@item","@placeholder","@name","@label","@help","@validations","@chart"],[[30,2],[30,3],[30,4],[30,5],[30,6],[30,7],[30,8]]],[["label","input"],[[[[1,"\\n"],[1," "],[1,[28,[35,1],[[30,5],[30,4]],null]],[1,"\\n "]],[]],[[[1,"\\n"],[41,[30,9],[[[41,[30,10],[[],[]],[[],[]]]],[]],[[[1," "],[8,[39,3],null,[["@disabled","@onChange","@selected","@searchEnabled","@options"],[[30,11],[30,12],[30,13],false,[30,14]]],[["default"],[[[[1,"\\n "],[18,16,[[28,[37,5],null,[["item"],[[30,15]]]]]],[1,"\\n "]],[15]]]]],[1,"\\n"]],[]]],[1," "]],[]]]]],[1,"\\n"]],["&attrs","@item","@placeholder","@name","@label","@help","@validations","@chart","@expanded","@multiple","@disabled","@onchange","@selected","@items","item","&option"],false,["form-input","or","if","power-select","yield","hash"]]',moduleName:"consul-ui/components/option-input/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/outlet/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@glimmer/tracking","@ember/object","@ember/service"],(function(e,t,n,l,r,i,o){var a,u,s,c,d,p,f,m,h,b,y -function g(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function v(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const O=(0,n.createTemplateFactory)({id:"X7pi+rvm",block:'[[[1,[28,[35,0],[[30,0,["connect"]]],null]],[1,"\\n"],[1,[28,[35,1],[[30,0,["disconnect"]]],null]],[1,"\\n"],[11,"section"],[24,0,"outlet"],[16,"data-outlet",[30,1]],[16,"data-route",[30,0,["routeName"]]],[16,"data-state",[30,0,["state","name"]]],[16,"data-transition",[28,[37,2],[[30,0,["previousState","name"]]," ",[30,0,["state","name"]]],null]],[4,[38,0],[[28,[37,3],[[30,0,["attributeChanged"]],"element"],null]],null],[4,[38,4],[[28,[37,3],[[30,0,["attributeChanged"]],"model",[30,2]],null]],null],[4,[38,5],["transitionend",[30,0,["transitionEnd"]]],null],[12],[1,"\\n "],[18,3,[[28,[37,7],null,[["state","previousState","route"],[[30,0,["state"]],[30,0,["previousState"]],[30,0,["route"]]]]]]],[1,"\\n"],[13]],["@name","@model","&default"],false,["did-insert","will-destroy","concat","fn","did-update","on","yield","hash"]]',moduleName:"consul-ui/components/outlet/index.hbs",isStrictMode:!1}) -class P{constructor(e){this.name=e}matches(e){return this.name===e}}let x=(a=(0,o.inject)("routlet"),u=(0,o.inject)("router"),s=class extends l.default{constructor(){super(...arguments),g(this,"routlet",c,this),g(this,"router",d,this),g(this,"element",p,this),g(this,"routeName",f,this),g(this,"state",m,this),g(this,"previousState",h,this),g(this,"endTransition",b,this),g(this,"route",y,this)}get model(){return this.args.model||{}}get name(){return this.args.name}setAppRoute(e){if("loading"!==e||"oidc-provider-debug"===e){const t=this.element.ownerDocument.documentElement -t.classList.contains("ember-loading")&&t.classList.remove("ember-loading"),t.dataset.route=e,this.setAppState("idle")}}setAppState(e){this.element.ownerDocument.documentElement.dataset.state=e}attributeChanged(e,t){switch(e){case"element":this.element=t,"application"===this.args.name&&(this.setAppState("loading"),this.setAppRoute(this.router.currentRouteName)) -break -case"model":void 0!==this.route&&(this.route._model=t)}}transitionEnd(e){"function"==typeof this.endTransition&&this.endTransition()}startLoad(e){const t=this.routlet.findOutlet(e.to.name)||"application" -if(this.args.name===t){let e -this.previousState=this.state,this.state=new P("loading"),this.endTransition=this.routlet.transition(),e=this.element?window.getComputedStyle(this.element).getPropertyValue("transition-duration"):0,0===parseFloat(e)&&this.endTransition()}"application"===this.args.name&&this.setAppState("loading")}endLoad(e){this.state.matches("loading")&&(this.previousState=this.state,this.state=new P("idle")),"application"===this.args.name&&this.setAppRoute(this.router.currentRouteName)}connect(){this.routlet.addOutlet(this.args.name,this),this.previousState=this.state=new P("idle"),this.router.on("routeWillChange",this.startLoad),this.router.on("routeDidChange",this.endLoad)}disconnect(){this.routlet.removeOutlet(this.args.name),this.router.off("routeWillChange",this.startLoad),this.router.off("routeDidChange",this.endLoad)}},c=v(s.prototype,"routlet",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),d=v(s.prototype,"router",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p=v(s.prototype,"element",[r.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f=v(s.prototype,"routeName",[r.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m=v(s.prototype,"state",[r.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=v(s.prototype,"previousState",[r.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=v(s.prototype,"endTransition",[r.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),y=v(s.prototype,"route",[r.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),v(s.prototype,"attributeChanged",[i.action],Object.getOwnPropertyDescriptor(s.prototype,"attributeChanged"),s.prototype),v(s.prototype,"transitionEnd",[i.action],Object.getOwnPropertyDescriptor(s.prototype,"transitionEnd"),s.prototype),v(s.prototype,"startLoad",[i.action],Object.getOwnPropertyDescriptor(s.prototype,"startLoad"),s.prototype),v(s.prototype,"endLoad",[i.action],Object.getOwnPropertyDescriptor(s.prototype,"endLoad"),s.prototype),v(s.prototype,"connect",[i.action],Object.getOwnPropertyDescriptor(s.prototype,"connect"),s.prototype),v(s.prototype,"disconnect",[i.action],Object.getOwnPropertyDescriptor(s.prototype,"disconnect"),s.prototype),s) -e.default=x,(0,t.setComponentTemplate)(O,x)})),define("consul-ui/components/paged-collection/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@ember/object","@glimmer/tracking","@ember/runloop"],(function(e,t,n,l,r,i,o){var a,u,s,c,d,p,f,m -function h(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function b(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const y=(0,n.createTemplateFactory)({id:"4n2jhP/a",block:'[[[18,2,[[28,[37,1],null,[["items","page","pane","resize","viewport","rowHeight","maxHeight","startHeight","totalHeight","totalPages","Pager"],[[30,0,["items"]],[30,1],[28,[37,2],[[30,0,["setPane"]]],null],[28,[37,2],[[30,0,["resize"]]],null],[28,[37,2],[[30,0,["setViewport"]]],null],[28,[37,2],[[30,0,["setRowHeight"]]],null],[28,[37,2],[[30,0,["setMaxHeight"]]],null],[30,0,["startHeight"]],[30,0,["totalHeight"]],[30,0,["totalPages"]],[52,[28,[37,4],[[33,5],"index"],null],[50,"yield",0,null,null],""]]]]]],[1,"\\n\\n"],[1,[28,[35,7],[[30,0,["disconnect"]]],null]],[1,"\\n"]],["@page","&default"],false,["yield","hash","fn","if","eq","type","component","will-destroy"]]',moduleName:"consul-ui/components/paged-collection/index.hbs",isStrictMode:!1}) -let g=(a=class extends l.default{constructor(){super(...arguments),h(this,"$pane",u,this),h(this,"$viewport",s,this),h(this,"top",c,this),h(this,"visibleItems",d,this),h(this,"overflow",p,this),h(this,"_rowHeight",f,this),h(this,"_type",m,this)}get type(){return this.args.type||this._type}get items(){return this.args.items.slice(this.cursor,this.cursor+this.perPage)}get perPage(){switch(this.type){case"virtual-scroll":return this.visibleItems+2*this.overflow -case"index":return parseInt(this.args.perPage)}return this.total}get cursor(){switch(this.type){case"virtual-scroll":return this.itemsBefore -case"index":return(parseInt(this.args.page)-1)*this.perPage}return 0}get itemsBefore(){return void 0===this.$viewport?0:Math.max(0,Math.round(this.top/this.rowHeight)-this.overflow)}get rowHeight(){return parseFloat(this.args.rowHeight||this._rowHeight)}get startHeight(){switch(this.type){case"virtual-scroll":return Math.min(this.totalHeight,this.itemsBefore*this.rowHeight) -case"index":return 0}return 0}get totalHeight(){return this.total*this.rowHeight}get totalPages(){return Math.ceil(this.total/this.perPage)}get total(){return this.args.items.length}scroll(e){this.top=this.$viewport.scrollTop}resize(){this.$viewport.clientHeight>0&&this.rowHeight>0?this.visibleItems=Math.ceil(this.$viewport.clientHeight/this.rowHeight):this.visibleItems=0}setViewport(e){this.$viewport="html"===e?[...document.getElementsByTagName("html")][0]:e,this.$viewport.addEventListener("scroll",this.scroll),"html"===e&&this.$viewport.addEventListener("resize",this.resize),this.scroll(),this.resize()}setPane(e){this.$pane=e}setRowHeight(e){this._rowHeight=parseFloat(e)}setMaxHeight(e){(0,o.scheduleOnce)("actions",this,"_setMaxHeight")}_setMaxHeight(e){const t=parseFloat(e) -isNaN(t)||(this._type="virtual-scroll")}disconnect(){this.$viewport.removeEventListener("scroll",this.scroll),this.$viewport.removeEventListener("resize",this.resize)}},u=b(a.prototype,"$pane",[i.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),s=b(a.prototype,"$viewport",[i.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),c=b(a.prototype,"top",[i.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return 0}}),d=b(a.prototype,"visibleItems",[i.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return 0}}),p=b(a.prototype,"overflow",[i.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return 10}}),f=b(a.prototype,"_rowHeight",[i.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return 0}}),m=b(a.prototype,"_type",[i.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return"native-scroll"}}),b(a.prototype,"scroll",[r.action],Object.getOwnPropertyDescriptor(a.prototype,"scroll"),a.prototype),b(a.prototype,"resize",[r.action],Object.getOwnPropertyDescriptor(a.prototype,"resize"),a.prototype),b(a.prototype,"setViewport",[r.action],Object.getOwnPropertyDescriptor(a.prototype,"setViewport"),a.prototype),b(a.prototype,"setPane",[r.action],Object.getOwnPropertyDescriptor(a.prototype,"setPane"),a.prototype),b(a.prototype,"setRowHeight",[r.action],Object.getOwnPropertyDescriptor(a.prototype,"setRowHeight"),a.prototype),b(a.prototype,"setMaxHeight",[r.action],Object.getOwnPropertyDescriptor(a.prototype,"setMaxHeight"),a.prototype),b(a.prototype,"_setMaxHeight",[r.action],Object.getOwnPropertyDescriptor(a.prototype,"_setMaxHeight"),a.prototype),b(a.prototype,"disconnect",[r.action],Object.getOwnPropertyDescriptor(a.prototype,"disconnect"),a.prototype),a) -e.default=g,(0,t.setComponentTemplate)(y,g)})),define("consul-ui/components/panel/index.css",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=e=>e` - .panel { - --padding-x: 14px; - --padding-y: 14px; - } - .panel { - position: relative; - } - .panel-separator { - margin: 0; - } - - .panel { - --tone-border: var(--token-color-palette-neutral-300); - border: var(--decor-border-100); - border-radius: var(--decor-radius-200); - box-shadow: var(--token-surface-high-box-shadow); - } - .panel-separator { - border: 0; - border-top: var(--decor-border-100); - } - .panel { - color: var(--token-color-foreground-strong); - background-color: var(--token-color-surface-primary); - } - .panel, - .panel-separator { - border-color: var(--tone-border); - } -`})),define("consul-ui/components/peerings/badge/icon/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"gV8UFvY5",block:'[[[41,[28,[37,1],[[28,[37,2],[[30,1],"PENDING"],null],[28,[37,2],[[30,1],"ESTABLISHING"],null]],null],[[[11,"svg"],[24,"width","16"],[24,"height","16"],[24,"viewBox","0 0 16 16"],[24,"fill","none"],[24,"xmlns","http://www.w3.org/2000/svg","http://www.w3.org/2000/xmlns/"],[17,2],[12],[1,"\\n "],[10,"path"],[14,"fill-rule","evenodd"],[14,"clip-rule","evenodd"],[14,"d","M8 1.5C6.14798 1.5 4.47788 2.27358 3.29301 3.51732C3.0073 3.81723 2.53256 3.82874 2.23266 3.54303C1.93275 3.25732 1.92125 2.78258 2.20696 2.48268C3.66316 0.954124 5.72078 0 8 0C10.2792 0 12.3368 0.954124 13.793 2.48268C14.0788 2.78258 14.0672 3.25732 13.7673 3.54303C13.4674 3.82874 12.9927 3.81723 12.707 3.51732C11.5221 2.27358 9.85202 1.5 8 1.5ZM1.23586 5.27899C1.63407 5.39303 1.86443 5.80828 1.75039 6.20649C1.58749 6.7753 1.5 7.3768 1.5 8C1.5 11.0649 3.62199 13.636 6.47785 14.321C6.88064 14.4176 7.12885 14.8224 7.03225 15.2252C6.93565 15.628 6.53081 15.8762 6.12802 15.7796C2.61312 14.9366 0 11.7744 0 8C0 7.23572 0.107387 6.49527 0.30836 5.79351C0.422401 5.39531 0.837659 5.16494 1.23586 5.27899ZM14.7641 5.27899C15.1623 5.16494 15.5776 5.39531 15.6916 5.79351C15.8926 6.49527 16 7.23572 16 8C16 11.7744 13.3869 14.9366 9.87199 15.7796C9.4692 15.8762 9.06436 15.628 8.96775 15.2252C8.87115 14.8224 9.11936 14.4176 9.52215 14.321C12.378 13.636 14.5 11.0649 14.5 8C14.5 7.3768 14.4125 6.7753 14.2496 6.20649C14.1356 5.80828 14.3659 5.39303 14.7641 5.27899Z"],[14,"fill","#3B3D45"],[12],[13],[1,"\\n "],[10,"path"],[14,"opacity","0.2"],[14,"fill-rule","evenodd"],[14,"clip-rule","evenodd"],[14,"d","M8 4.5C6.067 4.5 4.5 6.067 4.5 8C4.5 9.933 6.067 11.5 8 11.5C9.933 11.5 11.5 9.933 11.5 8C11.5 6.067 9.933 4.5 8 4.5ZM3 8C3 5.23858 5.23858 3 8 3C10.7614 3 13 5.23858 13 8C13 10.7614 10.7614 13 8 13C5.23858 13 3 10.7614 3 8Z"],[14,"fill","#000001"],[12],[13],[1,"\\n"],[13],[1,"\\n"]],[]],null],[41,[28,[37,2],[[30,1],"ACTIVE"],null],[[[11,"svg"],[24,"width","16"],[24,"height","16"],[24,"viewBox","0 0 16 16"],[24,"fill","none"],[24,"xmlns","http://www.w3.org/2000/svg","http://www.w3.org/2000/xmlns/"],[17,2],[12],[1,"\\n "],[10,"path"],[14,"d","M14.7803 4.28033C15.0732 3.98744 15.0732 3.51256 14.7803 3.21967C14.4874 2.92678 14.0126 2.92678 13.7197 3.21967L5.75 11.1893L2.28033 7.71967C1.98744 7.42678 1.51256 7.42678 1.21967 7.71967C0.926777 8.01256 0.926777 8.48744 1.21967 8.78033L5.21967 12.7803C5.51256 13.0732 5.98744 13.0732 6.28033 12.7803L14.7803 4.28033Z"],[14,"fill","#00781E"],[12],[13],[1,"\\n"],[13],[1,"\\n"]],[]],null],[41,[28,[37,2],[[30,1],"FAILING"],null],[[[11,"svg"],[24,"width","16"],[24,"height","16"],[24,"viewBox","0 0 16 16"],[24,"fill","none"],[24,"xmlns","http://www.w3.org/2000/svg","http://www.w3.org/2000/xmlns/"],[17,2],[12],[1,"\\n "],[10,"path"],[14,"d","M12.7803 4.28033C13.0732 3.98744 13.0732 3.51256 12.7803 3.21967C12.4874 2.92678 12.0126 2.92678 11.7197 3.21967L8 6.93934L4.28033 3.21967C3.98744 2.92678 3.51256 2.92678 3.21967 3.21967C2.92678 3.51256 2.92678 3.98744 3.21967 4.28033L6.93934 8L3.21967 11.7197C2.92678 12.0126 2.92678 12.4874 3.21967 12.7803C3.51256 13.0732 3.98744 13.0732 4.28033 12.7803L8 9.06066L11.7197 12.7803C12.0126 13.0732 12.4874 13.0732 12.7803 12.7803C13.0732 12.4874 13.0732 12.0126 12.7803 11.7197L9.06066 8L12.7803 4.28033Z"],[14,"fill","#C00005"],[12],[13],[1,"\\n"],[13],[1,"\\n"]],[]],null],[1,"\\n"],[41,[28,[37,2],[[30,1],"TERMINATED"],null],[[[11,"svg"],[24,"width","16"],[24,"height","17"],[24,"viewBox","0 0 16 17"],[24,"fill","none"],[24,"xmlns","http://www.w3.org/2000/svg","http://www.w3.org/2000/xmlns/"],[17,2],[12],[1,"\\n "],[10,"path"],[14,"fill-rule","evenodd"],[14,"clip-rule","evenodd"],[14,"d","M3.13889 2.55566C2.78604 2.55566 2.5 2.8417 2.5 3.19455V12.9168C2.5 13.2696 2.78604 13.5557 3.13889 13.5557H12.8611C13.214 13.5557 13.5 13.2696 13.5 12.9168V3.19455C13.5 2.8417 13.214 2.55566 12.8611 2.55566H3.13889ZM1 3.19455C1 2.01328 1.95761 1.05566 3.13889 1.05566H12.8611C14.0424 1.05566 15 2.01328 15 3.19455V12.9168C15 14.0981 14.0424 15.0557 12.8611 15.0557H3.13889C1.95761 15.0557 1 14.0981 1 12.9168V3.19455ZM4.71967 4.77533C5.01256 4.48244 5.48744 4.48244 5.78033 4.77533L8 6.995L10.2197 4.77533C10.5126 4.48244 10.9874 4.48244 11.2803 4.77533C11.5732 5.06823 11.5732 5.5431 11.2803 5.83599L9.06066 8.05566L11.2803 10.2753C11.5732 10.5682 11.5732 11.0431 11.2803 11.336C10.9874 11.6289 10.5126 11.6289 10.2197 11.336L8 9.11632L5.78033 11.336C5.48744 11.6289 5.01256 11.6289 4.71967 11.336C4.42678 11.0431 4.42678 10.5682 4.71967 10.2753L6.93934 8.05566L4.71967 5.83599C4.42678 5.5431 4.42678 5.06823 4.71967 4.77533Z"],[14,"fill","#3B3D45"],[12],[13],[1,"\\n"],[13],[1,"\\n"]],[]],null],[41,[28,[37,2],[[30,1],"UNDEFINED"],null],[[[11,"svg"],[24,"width","16"],[24,"height","16"],[24,"viewBox","0 0 16 16"],[24,"fill","none"],[24,"xmlns","http://www.w3.org/2000/svg","http://www.w3.org/2000/xmlns/"],[17,2],[12],[1,"\\n"],[10,"path"],[14,"fill-rule","evenodd"],[14,"clip-rule","evenodd"],[14,"d","M8.1969 4.52275C7.83582 4.45975 7.46375 4.52849 7.14594 4.7185C6.82781 4.9087 6.58324 5.20915 6.45878 5.56907C6.32341 5.96054 5.89632 6.16815 5.50485 6.03278C5.11338 5.89741 4.90577 5.47032 5.04114 5.07886C5.27962 4.3892 5.75141 3.80461 6.37621 3.43106C7.00132 3.05732 7.73786 2.91999 8.45475 3.04508C9.17148 3.17015 9.81887 3.54878 10.2837 4.11048C10.7481 4.67171 11.0009 5.37994 11 6.10959C10.9999 6.59724 10.9078 7.01534 10.7254 7.37628C10.5432 7.73694 10.2936 7.9952 10.0464 8.19341C9.85239 8.34899 9.63602 8.48431 9.46464 8.59149C9.431 8.61253 9.39909 8.63248 9.36942 8.65129C9.16778 8.77916 9.02667 8.87887 8.91689 8.99055C8.81461 9.0946 8.77388 9.18682 8.75706 9.23816C8.74978 9.26038 8.74659 9.27628 8.74537 9.28347C8.72786 9.68216 8.3991 10 7.9961 10C7.58189 10 7.2461 9.66422 7.2461 9.25C7.24626 9.08689 7.28103 8.92552 7.33163 8.77109C7.41129 8.52797 7.56353 8.22758 7.84718 7.93902C8.0857 7.69637 8.35223 7.52016 8.56613 7.38452C8.61117 7.35596 8.65343 7.32942 8.69337 7.30434C8.8616 7.1987 8.98859 7.11896 9.10803 7.02318C9.24074 6.91676 9.32751 6.81683 9.38666 6.69978C9.44562 6.5831 9.49996 6.4041 9.49996 6.10918L9.49996 6.10808C9.50052 5.72536 9.36781 5.35654 9.12803 5.06677C8.88848 4.77728 8.55813 4.58578 8.1969 4.52275Z"],[14,"fill","#3B3D45"],[12],[13],[1,"\\n"],[10,"path"],[14,"d","M8 11C7.44772 11 7 11.4477 7 12C7 12.5523 7.44772 13 8 13H8.00667C8.55895 13 9.00667 12.5523 9.00667 12C9.00667 11.4477 8.55895 11 8.00667 11H8Z"],[14,"fill","#3B3D45"],[12],[13],[1,"\\n"],[10,"path"],[14,"fill-rule","evenodd"],[14,"clip-rule","evenodd"],[14,"d","M0 8C0 3.58172 3.58172 0 8 0C12.4183 0 16 3.58172 16 8C16 12.4183 12.4183 16 8 16C3.58172 16 0 12.4183 0 8ZM8 1.5C4.41015 1.5 1.5 4.41015 1.5 8C1.5 11.5899 4.41015 14.5 8 14.5C11.5899 14.5 14.5 11.5899 14.5 8C14.5 4.41015 11.5899 1.5 8 1.5Z"],[14,"fill","#3B3D45"],[12],[13],[1,"\\n"],[13],[1,"\\n"]],[]],null],[1,"\\n"],[41,[28,[37,2],[[30,1],"DELETING"],null],[[[10,"svg"],[14,"width","16"],[14,"height","16"],[14,"viewBox","0 0 16 16"],[14,"fill","none"],[14,"xmlns","http://www.w3.org/2000/svg","http://www.w3.org/2000/xmlns/"],[12],[1,"\\n"],[10,"path"],[14,"opacity","0.2"],[14,"fill-rule","evenodd"],[14,"clip-rule","evenodd"],[14,"d","M8 1.5C4.41015 1.5 1.5 4.41015 1.5 8C1.5 11.5899 4.41015 14.5 8 14.5C11.5899 14.5 14.5 11.5899 14.5 8C14.5 4.41015 11.5899 1.5 8 1.5ZM0 8C0 3.58172 3.58172 0 8 0C12.4183 0 16 3.58172 16 8C16 12.4183 12.4183 16 8 16C3.58172 16 0 12.4183 0 8Z"],[14,"fill","#000001"],[12],[13],[1,"\\n"],[10,"path"],[14,"fill-rule","evenodd"],[14,"clip-rule","evenodd"],[14,"d","M7.25 0.75C7.25 0.335786 7.58579 0 8 0C12.4183 0 16 3.58172 16 8C16 8.41421 15.6642 8.75 15.25 8.75C14.8358 8.75 14.5 8.41421 14.5 8C14.5 4.41015 11.5899 1.5 8 1.5C7.58579 1.5 7.25 1.16421 7.25 0.75Z"],[14,"fill","#3B3D45"],[12],[13],[1,"\\n"],[13],[1,"\\n"]],[]],null]],["@state","&attrs"],false,["if","or","eq"]]',moduleName:"consul-ui/components/peerings/badge/icon/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/peerings/badge/index",["exports","@ember/component","@ember/template-factory","@glimmer/component"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"Fxysa+1X",block:'[[[41,[30,1,["State"]],[[[1," "],[11,0],[16,0,[29,["peerings-badge ",[28,[37,1],[[30,1,["State"]]],null]]]],[4,[38,2],[[30,0,["tooltip"]]],null],[12],[1,"\\n "],[8,[39,3],null,[["@state"],[[29,[[30,1,["State"]]]]]],null],[1,"\\n "],[10,1],[14,0,"peerings-badge__text"],[12],[1,[28,[35,4],[[28,[37,1],[[30,1,["State"]]],null]],null]],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null]],["@peering"],false,["if","lowercase","tooltip","peerings/badge/icon","capitalize"]]',moduleName:"consul-ui/components/peerings/badge/index.hbs",isStrictMode:!1}),i={ACTIVE:{tooltip:"This peer connection is currently active."},PENDING:{tooltip:"This peering connection has not been established yet."},ESTABLISHING:{tooltip:"This peering connection is in the process of being established."},FAILING:{tooltip:"This peering connection has some intermittent errors (usually network related). It will continue to retry. "},DELETING:{tooltip:"This peer is in the process of being deleted."},TERMINATED:{tooltip:"Someone in the other peer may have deleted this peering connection."},UNDEFINED:{tooltip:""}} -class o extends l.default{get styles(){const{peering:{State:e}}=this.args -return i[e]}get tooltip(){return this.styles.tooltip}}e.default=o,(0,t.setComponentTemplate)(r,o)})),define("consul-ui/components/peerings/provider/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@ember/service","@ember/application","consul-ui/components/tab-nav"],(function(e,t,n,l,r,i,o){var a,u,s -function c(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) -t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function d(e){for(var t=1;tnew o.Tab(d(d({},e),{},{currentRouteName:t.currentRouteName,owner:n}))))}},u=m(a.prototype,"router",[r.inject],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),s=m(a.prototype,"intl",[r.inject],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),a) -e.default=b,(0,t.setComponentTemplate)(h,b)})),define("consul-ui/components/policy-form/index",["exports","@ember/component","@ember/template-factory","consul-ui/components/form-component/index","@ember/object"],(function(e,t,n,l,r){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const i=(0,n.createTemplateFactory)({id:"N+FAvdR9",block:'[[[18,6,null],[1,"\\n"],[11,"fieldset"],[24,0,"policy-form"],[16,"disabled",[52,[28,[37,2],[[28,[37,3],["write policy"],[["item"],[[33,4]]]]],null],"disabled"]],[17,1],[12],[1,"\\n"],[6,[39,5],null,[["name"],["template"]],[["default","else"],[[[],[]],[[[1," "],[10,"header"],[12],[1,"\\n Policy"],[1,[52,[33,6]," or identity?",""]],[1,"\\n "],[13],[1,"\\n"],[41,[33,6],[[[1," "],[10,2],[12],[1,"\\n Identities are default policies with configurable names. They save you some time and effort you\'re using Consul for Connect features.\\n "],[13],[1,"\\n"],[1," "],[10,0],[14,"role","radiogroup"],[15,0,[52,[33,4,["error","Type"]]," has-error"]],[12],[1,"\\n"],[42,[28,[37,8],[[28,[37,8],[[33,9]],null]],null],null,[[[1," "],[10,"label"],[12],[1,"\\n "],[10,1],[12],[1,[30,2,["name"]]],[13],[1,"\\n "],[10,"input"],[15,3,[28,[37,10],[[33,11],"[template]"],null]],[15,2,[30,2,["template"]]],[15,"checked",[28,[37,12],[[33,4,["template"]],[30,2,["template"]]],null]],[15,"onchange",[28,[37,13],[[30,0],[28,[37,14],[[28,[37,15],[[33,4],"template"],null]],null]],[["value"],["target.value"]]]],[14,4,"radio"],[12],[13],[1,"\\n "],[13],[1,"\\n"]],[2]],null],[1," "],[13],[1,"\\n"]],[]],[[[1," "],[10,"input"],[15,3,[28,[37,10],[[33,11],"[template]"],null]],[14,2,""],[14,4,"hidden"],[12],[13],[1,"\\n"]],[]]]],[]]]]],[1," "],[10,"label"],[15,0,[29,["type-text",[52,[28,[37,16],[[33,4,["error","Name"]],[28,[37,2],[[33,4,["isPristine"]]],null]],null]," has-error"]]]],[12],[1,"\\n "],[10,1],[12],[1,"Name"],[13],[1,"\\n "],[10,"input"],[15,2,[33,4,["Name"]]],[15,3,[29,[[36,11],"[Name]"]]],[14,"autofocus","autofocus"],[15,"oninput",[28,[37,13],[[30,0],"change"],null]],[14,4,"text"],[12],[13],[1,"\\n "],[10,"em"],[12],[1,"\\n Maximum 128 characters. May only include letters (uppercase and/or lowercase) and/or numbers. Must be unique.\\n "],[13],[1,"\\n"],[41,[28,[37,16],[[33,4,["error","Name"]],[28,[37,2],[[33,4,["isPristine"]]],null]],null],[[[1," "],[10,"strong"],[12],[1,[33,4,["error","Name","validation"]]],[13],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n "],[10,"label"],[14,"for",""],[14,0,"type-text"],[12],[1,"\\n"],[41,[28,[37,12],[[33,4,["template"]],"service-identity"],null],[[[1," "],[8,[39,17],null,[["@readonly","@name","@syntax","@oninput"],[true,[28,[37,10],[[33,11],"[Rules]"],null],"hcl",[28,[37,13],[[30,0],"change",[28,[37,10],[[33,11],"[Rules]"],null]],null]]],[["label","content"],[[[[1,"\\n Rules "],[10,3],[15,6,[29,[[28,[37,18],["CONSUL_DOCS_URL"],null],"/guides/acl.html#rule-specification"]]],[14,"rel","help noopener noreferrer"],[14,"target","_blank"],[12],[1,"(HCL Format)"],[13],[1,"\\n "]],[]],[[[8,[39,19],null,[["@nspace","@partition","@name"],[[99,20,["@nspace"]],[99,21,["@partition"]],[33,4,["Name"]]]],null]],[]]]]],[1,"\\n"]],[]],[[[41,[28,[37,12],[[33,4,["template"]],"node-identity"],null],[[[1," "],[8,[39,17],null,[["@readonly","@name","@syntax","@oninput"],[true,[28,[37,10],[[33,11],"[Rules]"],null],"hcl",[28,[37,13],[[30,0],"change",[28,[37,10],[[33,11],"[Rules]"],null]],null]]],[["label","content"],[[[[1,"\\n Rules "],[10,3],[15,6,[29,[[28,[37,18],["CONSUL_DOCS_URL"],null],"/guides/acl.html#rule-specification"]]],[14,"rel","help noopener noreferrer"],[14,"target","_blank"],[12],[1,"(HCL Format)"],[13],[1,"\\n "]],[]],[[[8,[39,22],null,[["@name","@partition"],[[33,4,["Name"]],[99,21,["@partition"]]]],null]],[]]]]],[1,"\\n"]],[]],[[[1," "],[8,[39,17],null,[["@syntax","@class","@name","@value","@onkeyup"],["hcl",[52,[33,4,["error","Rules"]],"error"],[28,[37,10],[[33,11],"[Rules]"],null],[33,4,["Rules"]],[28,[37,13],[[30,0],"change",[28,[37,10],[[33,11],"[Rules]"],null]],null]]],[["label"],[[[[1,"\\n Rules "],[10,3],[15,6,[29,[[28,[37,18],["CONSUL_DOCS_URL"],null],"/guides/acl.html#rule-specification"]]],[14,"rel","help noopener noreferrer"],[14,"target","_blank"],[12],[1,"(HCL Format)"],[13],[1,"\\n "]],[]]]]],[1,"\\n"],[41,[33,4,["error","Rules"]],[[[1," "],[10,"strong"],[12],[1,[33,4,["error","Rules","validation"]]],[13],[1,"\\n"]],[]],null]],[]]]],[]]],[1," "],[13],[1,"\\n"],[41,[28,[37,12],[[33,4,["template"]],"node-identity"],null],[[[1,"\\n "],[8,[39,23],null,[["@src","@onchange"],[[28,[37,24],["/*/*/*/datacenters"],null],[28,[37,13],[[30,0],[28,[37,25],[[33,26]],null]],[["value"],["data"]]]]],null],[1,"\\n "],[10,"label"],[14,0,"type-select"],[12],[1,"\\n "],[10,1],[12],[1,"Datacenter"],[13],[1,"\\n "],[8,[39,27],null,[["@options","@searchField","@selected","@searchPlaceholder","@onChange"],[[28,[37,28],["Name",[33,26]],null],"Name",[28,[37,29],[[33,4,["Datacenter"]],[33,30]],null],"Type a datacenter name",[28,[37,13],[[30,0],"change","Datacenter"],null]]],[["default"],[[[[1,"\\n "],[1,[30,3]],[1,"\\n "]],[3]]]]],[1,"\\n "],[13],[1,"\\n"]],[]],[[[41,[28,[37,12],[[28,[37,29],[[33,21],"default"],null],"default"],null],[[[1," "],[10,0],[14,0,"type-toggle"],[12],[1,"\\n "],[10,1],[12],[1,"Valid datacenters"],[13],[1,"\\n "],[10,"label"],[12],[1,"\\n "],[10,"input"],[15,3,[29,[[36,11],"[isScoped]"]]],[15,"checked",[52,[28,[37,2],[[33,31]],null],"checked"]],[15,"onchange",[28,[37,13],[[30,0],"change"],null]],[14,4,"checkbox"],[12],[13],[1,"\\n "],[10,1],[12],[1,"All"],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[33,31],[[[1," "],[8,[39,23],null,[["@src","@onchange"],[[28,[37,24],["/*/*/*/datacenters"],null],[28,[37,13],[[30,0],[28,[37,25],[[33,26]],null]],[["value"],["data"]]]]],null],[1,"\\n\\n "],[10,0],[14,0,"checkbox-group"],[14,"role","group"],[12],[1,"\\n"],[42,[28,[37,8],[[28,[37,8],[[33,26]],null]],null],null,[[[1," "],[10,"label"],[14,0,"type-checkbox"],[12],[1,"\\n "],[10,"input"],[15,3,[29,[[36,11],"[Datacenters]"]]],[15,2,[30,4,["Name"]]],[15,"checked",[52,[28,[37,32],[[30,4,["Name"]],[33,4,["Datacenters"]]],null],"checked"]],[15,"onchange",[28,[37,13],[[30,0],"change"],null]],[14,4,"checkbox"],[12],[13],[1,"\\n "],[10,1],[12],[1,[30,4,["Name"]]],[13],[1,"\\n "],[13],[1,"\\n"]],[4]],null],[42,[28,[37,8],[[28,[37,8],[[33,4,["Datacenters"]]],null]],null],null,[[[41,[28,[37,2],[[28,[37,33],["Name",[30,5],[33,26]],null]],null],[[[1," "],[10,"label"],[14,0,"type-checkbox"],[12],[1,"\\n "],[10,"input"],[15,3,[29,[[36,11],"[Datacenters]"]]],[15,2,[30,5]],[14,"checked","checked"],[15,"onchange",[28,[37,13],[[30,0],"change"],null]],[14,4,"checkbox"],[12],[13],[1,"\\n "],[10,1],[12],[1,[30,5]],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null]],[5]],null],[1," "],[13],[1,"\\n\\n\\n"]],[]],null]],[]]],[41,[28,[37,12],[[33,4,["template"]],""],null],[[[1," "],[10,"label"],[14,0,"type-text"],[12],[1,"\\n "],[10,1],[12],[1,"Description (Optional)"],[13],[1,"\\n "],[10,"textarea"],[15,3,[29,[[36,11],"[Description]"]]],[15,2,[33,4,["Description"]]],[15,"oninput",[28,[37,13],[[30,0],"change"],null]],[12],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[13],[1,"\\n\\n"]],["&attrs","template","Name","dc","dc","&default"],false,["yield","if","not","can","item","yield-slot","allowIdentity","each","-track-array","templates","concat","name","eq","action","optional","changeset-set","and","code-editor","env","consul/service-identity/template","nspace","partition","consul/node-identity/template","data-source","uri","mut","datacenters","power-select","map-by","or","dc","isScoped","includes","find-by"]]',moduleName:"consul-ui/components/policy-form/index.hbs",isStrictMode:!1}) -var o=(0,t.setComponentTemplate)(i,l.default.extend({type:"policy",name:"policy",allowIdentity:!0,classNames:["policy-form"],isScoped:!1,init:function(){this._super(...arguments),(0,r.set)(this,"isScoped",(0,r.get)(this,"item.Datacenters.length")>0),this.templates=[{name:"Policy",template:""},{name:"Service Identity",template:"service-identity"},{name:"Node Identity",template:"node-identity"}]},actions:{change:function(e){try{this._super(...arguments)}catch(t){const e=this.isScoped -if("policy[isScoped]"===t.target.name)e?((0,r.set)(this,"previousDatacenters",(0,r.get)(this.item,"Datacenters")),(0,r.set)(this.item,"Datacenters",null)):((0,r.set)(this.item,"Datacenters",this.previousDatacenters),(0,r.set)(this,"previousDatacenters",null)),(0,r.set)(this,"isScoped",!e) -else this.onerror(t) -this.onchange({target:this.form})}}}})) -e.default=o})),define("consul-ui/components/policy-selector/index",["exports","@ember/component","@ember/template-factory","consul-ui/components/child-selector/index","@ember/object","@ember/service"],(function(e,t,n,l,r,i){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const o=(0,n.createTemplateFactory)({id:"7xWCYtBV",block:'[[[8,[39,0],[[17,1]],[["@disabled","@repo","@dc","@partition","@nspace","@type","@placeholder","@items"],[[99,1,["@disabled"]],[99,2,["@repo"]],[99,3,["@dc"]],[99,4,["@partition"]],[99,5,["@nspace"]],"policy","Search for policy",[99,6,["@items"]]]],[["default"],[[[[1,"\\n "],[18,11,null],[1,"\\n "],[8,[39,8],null,[["@name"],["label"]],[["default"],[[[[1,"\\n Apply an existing policy\\n "]],[]]]]],[1,"\\n "],[8,[39,8],null,[["@name"],["create"]],[["default"],[[[[1,"\\n"],[6,[39,9],null,[["name"],["trigger"]],[["default","else"],[[[[1," "],[18,11,null],[1,"\\n"]],[]],[[[1," "],[8,[39,10],[[24,0,"type-dialog"],[4,[38,11],["click",[28,[37,12],[[30,0],[30,0,["openModal"]]],null]],null]],[["@text","@size","@color","@icon"],["Create new policy","small","tertiary","plus"]],null],[1,"\\n"],[1," "],[8,[39,13],[[24,1,"new-policy"]],[["@onopen","@aria"],[[28,[37,12],[[30,0],"open"],null],[28,[37,14],null,[["label"],["New Policy"]]]]],[["default"],[[[[1,"\\n "],[8,[39,15],null,[["@target","@name","@value"],[[30,0],"modal",[30,2]]],null],[1,"\\n "],[8,[39,8],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"New Policy"],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,8],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[8,[39,16],null,[["@form","@nspace","@partition","@dc","@allowServiceIdentity"],[[99,17,["@form"]],[99,5,["@nspace"]],[99,4,["@partition"]],[99,3,["@dc"]],[99,18,["@allowServiceIdentity"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,8],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[8,[39,19],null,null,[["default"],[[[[1,"\\n "],[8,[39,10],[[16,"onclick",[28,[37,20],[[30,0,["save"]],[33,21],[33,6],[28,[37,22],[[28,[37,12],[[30,0],[30,3]],null],[28,[37,12],[[30,0],"reset"],null]],null]],null]],[16,"disabled",[52,[28,[37,24],[[33,21,["isSaving"]],[33,21,["isPristine"]],[33,21,["isInvalid"]]],null],"disabled"]],[24,4,"submit"]],[["@isLoading","@text"],[[33,21,["isSaving"]],"Create and apply"]],null],[1,"\\n "],[8,[39,10],[[16,"disabled",[52,[33,21,["isSaving"]],"disabled"]],[24,4,"reset"],[4,[38,11],["click",[28,[37,12],[[30,0],[28,[37,22],[[28,[37,12],[[30,0],[30,3]],null],[28,[37,12],[[30,0],"reset"],null]],null]],null]],null]],[["@color","@text"],["secondary","Cancel"]],null],[1,"\\n "]],[]]]]],[1,"\\n "]],[3]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[]]]]],[1," "]],[]]]]],[1,"\\n "],[8,[39,8],null,[["@name"],["option"]],[["default"],[[[[1,"\\n "],[1,[30,4,["Name"]]],[1,"\\n "]],[4]]]]],[1,"\\n "],[8,[39,8],null,[["@name"],["set"]],[["default"],[[[[1,"\\n "],[8,[39,25],null,[["@onchange","@items"],[[28,[37,12],[[30,0],"open"],null],[28,[37,26],["CreateTime:desc","Name:asc",[33,6]],null]]],[["default"],[[[[1,"\\n "],[8,[39,8],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"th"],[12],[1,"Name"],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,8],null,[["@name"],["row"]],[["default"],[[[[1,"\\n "],[10,"td"],[15,0,[28,[37,27],[[30,5]],null]],[12],[1,"\\n"],[41,[30,5,["ID"]],[[[1," "],[10,3],[15,6,[28,[37,28],["dc.acls.policies.edit",[30,5,["ID"]]],null]],[12],[1,[30,5,["Name"]]],[13],[1,"\\n"]],[]],[[[1," "],[10,3],[15,3,[30,5,["Name"]]],[12],[1,[30,5,["Name"]]],[13],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,8],null,[["@name"],["details"]],[["default"],[[[[1,"\\n"],[41,[28,[37,29],[[30,5,["template"]],""],null],[[[1," "],[8,[39,30],null,[["@src","@onchange","@loading"],[[28,[37,31],["/${partition}/${nspace}/${dc}/policy/${id}",[28,[37,14],null,[["partition","nspace","dc","id"],[[33,4],[33,5],[33,3],[30,5,["ID"]]]]]],null],[28,[37,12],[[30,0],[28,[37,32],[[33,33]],null]],[["value"],["data"]]],"lazy"]],null],[1,"\\n"]],[]],null],[41,[28,[37,29],[[30,5,["template"]],"node-identity"],null],[[[1," "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"Datacenter:"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[30,5,["Datacenter"]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],[[[1," "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"Datacenters:"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[28,[35,34],[", ",[28,[37,35],[[28,[37,24],[[33,33],[30,5]],null]],null]],null]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]]],[1," "],[10,"label"],[14,0,"type-text"],[12],[1,"\\n"],[41,[28,[37,29],[[30,5,["template"]],"service-identity"],null],[[[1," "],[8,[39,36],null,[["@syntax","@readonly"],["hcl",true]],[["label","content"],[[[[1,"\\n Rules "],[10,3],[15,6,[29,[[28,[37,37],["CONSUL_DOCS_URL"],null],"/guides/acl.html#rule-specification"]]],[14,"rel","help noopener noreferrer"],[14,"target","_blank"],[12],[1,"(HCL Format)"],[13],[1,"\\n "]],[]],[[[1,"\\n "],[8,[39,38],null,[["@nspace","@partition","@name"],[[99,5,["@nspace"]],[99,4,["@partition"]],[30,5,["Name"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],[[[41,[28,[37,29],[[30,5,["template"]],"node-identity"],null],[[[1," "],[8,[39,36],null,[["@syntax","@readonly"],["hcl",true]],[["label","content"],[[[[1,"\\n Rules "],[10,3],[15,6,[29,[[28,[37,37],["CONSUL_DOCS_URL"],null],"/guides/acl.html#rule-specification"]]],[14,"rel","help noopener noreferrer"],[14,"target","_blank"],[12],[1,"(HCL Format)"],[13],[1,"\\n "]],[]],[[[1,"\\n "],[8,[39,39],null,[["@name","@partition"],[[30,5,["Name"]],[99,4,["@partition"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],[[[1," "],[8,[39,36],null,[["@syntax","@readonly","@value"],["hcl",true,[28,[37,24],[[33,33,["Rules"]],[30,5,["Rules"]]],null]]],[["label"],[[[[1,"\\n Rules "],[10,3],[15,6,[29,[[28,[37,37],["CONSUL_DOCS_URL"],null],"/guides/acl.html#rule-specification"]]],[14,"rel","help noopener noreferrer"],[14,"target","_blank"],[12],[1,"(HCL Format)"],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[]]]],[]]],[1," "],[13],[1,"\\n"],[41,[28,[37,40],[[33,1]],null],[[[1," "],[10,0],[12],[1,"\\n "],[8,[39,41],null,[["@message"],["Are you sure you want to remove this policy from this token?"]],[["default"],[[[[1,"\\n "],[8,[39,8],null,[["@name"],["action"]],[["default"],[[[[1,"\\n "],[8,[39,10],[[4,[38,12],[[30,0],[30,7],"remove",[30,5],[33,6]],null]],[["@text","@color","@size"],["Remove","critical","small"]],null],[1,"\\n "]],[7]]]]],[1,"\\n "],[8,[39,8],null,[["@name"],["dialog"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n "],[1,[30,10]],[1,"\\n "],[13],[1,"\\n "],[8,[39,19],null,null,[["default"],[[[[1,"\\n "],[8,[39,10],[[4,[38,12],[[30,0],[30,8]],null]],[["@text","@color","@size"],["Confirm remove","critical","small"]],null],[1,"\\n "],[8,[39,10],[[4,[38,12],[[30,0],[30,9]],null]],[["@text","@color","@size"],["Cancel","secondary","small"]],null],[1,"\\n "]],[]]]]],[1,"\\n "]],[8,9,10]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "]],[5,6]]]]],[1,"\\n\\n "]],[]]]]],[1,"\\n"]],[]]]]],[1,"\\n"]],["&attrs","modal","close","option","item","index","confirm","execute","cancel","message","&default"],false,["child-selector","disabled","repo","dc","partition","nspace","items","yield","block-slot","yield-slot","hds/button","on","action","modal-dialog","hash","ref","policy-form","form","allowServiceIdentity","hds/button-set","perform","item","queue","if","or","tabular-details","sort-by","policy/typeof","href-to","eq","data-source","uri","mut","loadedItem","join","policy/datacenters","code-editor","env","consul/service-identity/template","consul/node-identity/template","not","confirmation-dialog"]]',moduleName:"consul-ui/components/policy-selector/index.hbs",isStrictMode:!1}),a="Invalid Policy: A Policy with Name" -var u=(0,t.setComponentTemplate)(o,l.default.extend({repo:(0,i.inject)("repository/policy"),name:"policy",type:"policy",allowIdentity:!0,classNames:["policy-selector"],init:function(){this._super(...arguments) -const e=this.source -e&&this._listeners.add(e,{save:e=>{this.save.perform(...e.data)}})},reset:function(e){this._super(...arguments),(0,r.set)(this,"isScoped",!1)},refreshCodeEditor:function(e,t){this.dom.component(".code-editor",t).didAppear()},error:function(e){const t=this.item,n=e.error -if(void 0===n.errors)throw n -{const e=n.errors[0] -let l="Rules",r=e.detail -switch(!0){case 0===r.indexOf("Failed to parse ACL rules"):case 0===r.indexOf("Invalid service policy"):l="Rules",r=e.detail -break -case 0===r.indexOf(a):l="Name",r=r.substr(a.indexOf(":")+1)}l&&t.addError(l,r)}},openModal:function(){const{modal:e}=this -e&&e.open()},actions:{open:function(e){this.refreshCodeEditor(e,e.target.parentElement)}}})) -e.default=u})),define("consul-ui/components/popover-menu/index",["exports","@ember/component","@ember/template-factory","@ember/service","block-slots","@ember/object"],(function(e,t,n,l,r,i){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const o=(0,n.createTemplateFactory)({id:"yEAcBvbt",block:'[[[18,11,null],[1,"\\n"],[11,0],[24,0,"popover-menu"],[17,1],[12],[1,"\\n "],[8,[39,1],null,[["@keyboardAccess"],[[99,2,["@keyboardAccess"]]]],[["default"],[[[[1,"\\n\\n"],[44,[[28,[37,4],null,[["MenuItem","MenuSeparator"],[[50,"popover-menu/menu-item",0,null,[["menu"],[[28,[37,4],null,[["addSubmenu","removeSubmenu","confirm","clickTrigger","keypressClick"],[[28,[37,6],[[30,0],"addSubmenu"],null],[28,[37,6],[[30,0],"removeSubmenu"],null],[28,[37,7],["popover-menu-",[33,8],"-"],null],[30,0,["toggle","click"]],[30,4]]]]]]],[50,"popover-menu/menu-separator",0,null,null]]]]],[[[44,[[28,[37,4],null,[["toggle"],[[30,0,["toggle","click"]]]]]],[[[1,"\\n "],[8,[39,9],null,[["@checked","@onchange"],[[52,[33,2],[30,5,["expanded"]],[33,11]],[28,[37,12],[[30,2],[28,[37,6],[[30,0],"change"],null]],null]]],[["default"],[[[[1,"\\n "],[8,[39,13],null,[["@target","@name","@value"],[[30,0],"toggle",[30,8]]],null],[1,"\\n "],[10,"button"],[14,"aria-haspopup","menu"],[15,"onkeydown",[30,3]],[15,"onclick",[30,0,["toggle","click"]]],[15,1,[30,5,["labelledBy"]]],[15,"aria-controls",[30,5,["controls"]]],[14,4,"button"],[12],[1,"\\n "],[8,[39,14],null,[["@name"],["trigger"]],[["default"],[[[[1,"\\n "],[18,11,[[30,6],[30,7]]],[1,"\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "]],[8]]]]],[1,"\\n\\n "],[8,[39,15],[[16,1,[30,5,["controls"]]],[16,"aria-labelledby",[30,5,["labelledBy"]]],[16,"aria-expanded",[30,5,["expanded"]]]],[["@position"],[[99,16,["@position"]]]],[["default"],[[[[1,"\\n "],[8,[39,13],null,[["@target","@name","@value"],[[30,0],"menu",[30,9]]],null],[1,"\\n "],[8,[39,17],null,[["@name"],["controls"]],[["default"],[[[[1,"\\n "],[10,"input"],[15,1,[28,[37,7],["popover-menu-",[33,8],"-"],null]],[14,4,"checkbox"],[12],[13],[1,"\\n"],[42,[28,[37,19],[[28,[37,19],[[33,20]],null]],null],null,[[[1," "],[10,"input"],[15,1,[28,[37,7],["popover-menu-",[33,8],"-",[30,10]],null]],[15,"onchange",[30,9,["change"]]],[14,4,"checkbox"],[12],[13],[1,"\\n"]],[10]],null],[1," "]],[]]]]],[1,"\\n"],[41,[33,21],[[[1," "],[8,[39,17],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[18,11,[[30,6],[30,7]]],[1,"\\n "],[6,[39,14],null,[["name"],["header"]],[["default","else"],[[[],[]],[[],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[1," "],[8,[39,17],null,[["@name"],["menu"]],[["default"],[[[[1,"\\n "],[8,[39,14],null,[["@name","@params"],["menu",[28,[37,22],[[28,[37,7],["popover-menu-",[33,8],"-"],null],[33,23],[30,4],[30,0,["toggle","click"]]],null]]],[["default"],[[[[1,"\\n "],[18,11,[[30,6],[30,7]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[9]]]]],[1,"\\n\\n"]],[7]]]],[6]]],[1,"\\n "]],[2,3,4,5]]]]],[1,"\\n"],[13]],["&attrs","change","keypress","keypressClick","aria","components","api","toggle","menu","sub","&default"],false,["yield","aria-menu","keyboardAccess","let","hash","component","action","concat","guid","toggle-button","if","expanded","queue","ref","yield-slot","menu-panel","position","block-slot","each","-track-array","submenus","hasHeader","block-params","send"]]',moduleName:"consul-ui/components/popover-menu/index.hbs",isStrictMode:!1}) -var a=(0,t.setComponentTemplate)(o,t.default.extend(r.default,{tagName:"",dom:(0,l.inject)("dom"),expanded:!1,keyboardAccess:!0,onchange:function(){},position:"",init:function(){this._super(...arguments),this.guid=this.dom.guid(this),this.submenus=[]},willRender:function(){(0,i.set)(this,"hasHeader",this._isRegistered("header"))},actions:{addSubmenu:function(e){(0,i.set)(this,"submenus",this.submenus.concat(e))},removeSubmenu:function(e){const t=this.submenus.indexOf(e);-1!==t&&(this.submenus.splice(t,1),(0,i.set)(this,"submenus",this.submenus))},change:function(e){e.target.checked||[...this.dom.elements(`[id^=popover-menu-${this.guid}]`)].forEach((function(e){e.checked=!1})),this.onchange(e)},send:function(){this.sendAction(...arguments)}}})) -e.default=a})),define("consul-ui/components/popover-menu/menu-item/index",["exports","@ember/component","@ember/template-factory","@ember/service","@ember/object","block-slots"],(function(e,t,n,l,r,i){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const o=(0,n.createTemplateFactory)({id:"2GW+NBsb",block:'[[[18,3,null],[1,"\\n"],[11,"li"],[24,"role","none"],[17,1],[12],[1,"\\n"],[41,[33,2],[[[1," "],[10,"label"],[15,"for",[28,[37,3],[[33,4,["confirm"]],[33,5]],null]],[14,"role","menuitem"],[14,"tabindex","-1"],[15,"onkeypress",[33,4,["keypressClick"]]],[12],[1,"\\n "],[8,[39,6],null,[["@name"],["label"]],[["default"],[[[[18,3,null]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[10,0],[14,"role","menu"],[12],[1,"\\n "],[8,[39,6],null,[["@name","@params"],["confirmation",[28,[37,7],[[50,"confirmation-alert",0,null,[["onclick","name"],[[28,[37,9],[[28,[37,10],[[30,0],[33,4,["clickTrigger"]]],null],[28,[37,10],[[30,0],[33,11]],null]],null],[28,[37,3],[[33,4,["confirm"]],[33,5]],null]]]]],null]]],[["default"],[[[[18,3,null]],[]]]]],[1,"\\n "],[13],[1,"\\n"]],[]],[[[41,[33,12],[[[44,[[28,[37,14],[[33,12],"://"],null]],[[[1," "],[10,3],[14,"role","menuitem"],[14,"tabindex","-1"],[15,"onclick",[28,[37,10],[[30,0],[33,4,["clickTrigger"]]],null]],[15,6,[36,12]],[15,"target",[52,[30,2],"_blank"]],[15,"rel",[52,[30,2],"noopener noreferrer"]],[12],[1,"\\n "],[8,[39,6],null,[["@name"],["label"]],[["default"],[[[[1,"\\n "],[18,3,null],[1,"\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n"]],[2]]]],[]],[[[10,"button"],[14,"role","menuitem"],[15,"aria-selected",[52,[33,15],"true"]],[14,"tabindex","-1"],[15,"onclick",[28,[37,9],[[28,[37,10],[[30,0],[28,[37,16],[[30,0,["onclick"]],[28,[37,17],null,null]],null]],null],[28,[37,10],[[30,0],[52,[30,0,["close"]],[33,4,["clickTrigger"]],[28,[37,17],null,null]]],null]],null]],[14,4,"button"],[12],[1,"\\n "],[8,[39,6],null,[["@name"],["label"]],[["default"],[[[[1,"\\n "],[18,3,null],[1,"\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n"]],[]]]],[]]],[13],[1,"\\n\\n"]],["&attrs","external","&default"],false,["yield","if","hasConfirmation","concat","menu","guid","yield-slot","block-params","component","queue","action","onclick","href","let","string-includes","selected","or","noop"]]',moduleName:"consul-ui/components/popover-menu/menu-item/index.hbs",isStrictMode:!1}) -var a=(0,t.setComponentTemplate)(o,t.default.extend(i.default,{tagName:"",dom:(0,l.inject)("dom"),init:function(){this._super(...arguments),this.guid=this.dom.guid(this)},didInsertElement:function(){this._super(...arguments),this.menu.addSubmenu(this.guid)},didDestroyElement:function(){this._super(...arguments),this.menu.removeSubmenu(this.guid)},willRender:function(){this._super(...arguments),(0,r.set)(this,"hasConfirmation",this._isRegistered("confirmation"))}})) -e.default=a})),define("consul-ui/components/popover-menu/menu-separator/index",["exports","@ember/component","@ember/template-factory","block-slots"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"n5s/eW+J",block:'[[[18,1,null],[1,"\\n"],[10,"li"],[14,"role","separator"],[12],[1,"\\n "],[8,[39,1],null,[["@name"],["label"]],[["default"],[[[[18,1,null]],[]]]]],[1,"\\n"],[13],[1,"\\n"]],["&default"],false,["yield","yield-slot"]]',moduleName:"consul-ui/components/popover-menu/menu-separator/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,t.default.extend(l.default,{tagName:""})) -e.default=i})),define("consul-ui/components/popover-select/index",["exports","@ember/component","@ember/template-factory","@ember/service","block-slots"],(function(e,t,n,l,r){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const i=(0,n.createTemplateFactory)({id:"MCbyGl1m",block:'[[[8,[39,0],[[24,0,"popover-select"],[17,1]],[["@position"],[[28,[37,1],[[33,2],"left"],null]]],[["default"],[[[[1,"\\n "],[18,6,null],[1,"\\n"],[44,[[50,"popover-select/optgroup",0,null,[["components"],[[30,2]]]],[50,"popover-select/option",0,null,[["select","components","onclick"],[[30,0],[30,2],[28,[37,6],[[28,[37,7],[[30,0],"click"],null],[52,[33,9],[28,[37,10],null,null],[30,3,["toggle"]]]],null]]]]],[[[1," "],[8,[39,11],null,[["@name"],["trigger"]],[["default"],[[[[1,"\\n "],[8,[39,12],null,[["@name"],["selected"]],[["default"],[[[[1,"\\n "],[18,6,[[28,[37,13],null,[["Optgroup","Option"],[[30,4],[30,5]]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,11],null,[["@name"],["menu"]],[["default"],[[[[1,"\\n "],[8,[39,12],null,[["@name"],["options"]],[["default"],[[[[1,"\\n "],[18,6,[[28,[37,13],null,[["Optgroup","Option"],[[30,4],[30,5]]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[4,5]]]],[2,3]]]]],[1,"\\n"]],["&attrs","components","menu","Optgroup","Option","&default"],false,["popover-menu","or","position","yield","let","component","pipe","action","if","multiple","noop","block-slot","yield-slot","hash"]]',moduleName:"consul-ui/components/popover-select/index.hbs",isStrictMode:!1}) -var o=(0,t.setComponentTemplate)(i,t.default.extend(r.default,{tagName:"",dom:(0,l.inject)("dom"),multiple:!1,required:!1,onchange:function(){},addOption:function(e){void 0===this._options&&(this._options=new Set),this._options.add(e)},removeOption:function(e){this._options.delete(e)},actions:{click:function(e,t){if(this.multiple){if(e.selected&&this.required){if(![...this._options].find((t=>t!==e&&t.selected)))return t}}else{if(e.selected&&this.required)return t;[...this._options].filter((t=>t!==e)).forEach((e=>{e.selected=!1}))}return e.selected=!e.selected,this.onchange(this.dom.setEventTargetProperties(t,{selected:t=>e.args.value,selectedItems:e=>[...this._options].filter((e=>e.selected)).map((e=>e.args.value)).join(",")})),t}}})) -e.default=o})),define("consul-ui/components/popover-select/optgroup/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"GuHT6dz2",block:'[[[44,[[30,1,["MenuSeparator"]]],[[[8,[30,2],null,null,[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@name"],["label"]],[["default"],[[[[1,"\\n "],[1,[30,3]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]]]]],[1,"\\n"],[18,4,null],[1,"\\n"]],[2]]]],["@components","MenuSeparator","@label","&default"],false,["let","block-slot","yield"]]',moduleName:"consul-ui/components/popover-select/optgroup/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/popover-select/option/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@glimmer/tracking","@ember/object"],(function(e,t,n,l,r,i){var o,a -function u(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const s=(0,n.createTemplateFactory)({id:"gE0Zhut+",block:'[[[44,[[30,1,["MenuItem"]]],[[[1," "],[8,[30,2],[[16,0,[52,[30,0,["selected"]],"is-active"]],[17,3],[4,[38,3],[[30,0,["connect"]]],null],[4,[38,3],[[28,[37,4],[[30,0],"selected",[30,5]],null]],null],[4,[38,5],[[28,[37,4],[[30,0],"selected",[30,5]],null]],null],[4,[38,6],[[30,0,["disconnect"]]],null]],[["@onclick","@selected"],[[28,[37,2],[[30,0],[30,4],[30,0]],null],[30,0,["selected"]]]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@name"],["label"]],[["default"],[[[[1,"\\n "],[18,6,null],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[2]]]],["@components","MenuItem","&attrs","@onclick","@selected","&default"],false,["let","if","action","did-insert","set","did-update","will-destroy","block-slot","yield"]]',moduleName:"consul-ui/components/popover-select/option/index.hbs",isStrictMode:!1}) -let c=(o=class extends l.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="selected",l=this,(n=a)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}connect(){this.args.select.addOption(this)}disconnect(){this.args.select.removeOption(this)}},a=u(o.prototype,"selected",[r.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),u(o.prototype,"connect",[i.action],Object.getOwnPropertyDescriptor(o.prototype,"connect"),o.prototype),u(o.prototype,"disconnect",[i.action],Object.getOwnPropertyDescriptor(o.prototype,"disconnect"),o.prototype),o) -e.default=c,(0,t.setComponentTemplate)(s,c)})),define("consul-ui/components/portal-target",["exports","ember-stargate/components/portal-target"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/portal",["exports","ember-stargate/components/portal"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/power-select-multiple-with-create",["exports","ember-power-select-with-create/components/power-select-multiple-with-create"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})) -define("consul-ui/components/power-select-multiple",["exports","ember-power-select/components/power-select-multiple"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/power-select-multiple/trigger",["exports","ember-power-select/components/power-select-multiple/trigger"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/power-select-with-create",["exports","ember-power-select-with-create/components/power-select-with-create"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/power-select-with-create/suggested-option",["exports","ember-power-select-with-create/components/power-select-with-create/suggested-option"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/power-select",["exports","ember-power-select/components/power-select"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/power-select/before-options",["exports","ember-power-select/components/power-select/before-options"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/power-select/no-matches-message",["exports","ember-power-select/components/power-select/no-matches-message"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/power-select/options",["exports","ember-power-select/components/power-select/options"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/power-select/placeholder",["exports","ember-power-select/components/power-select/placeholder"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/power-select/power-select-group",["exports","ember-power-select/components/power-select/power-select-group"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/power-select/search-message",["exports","ember-power-select/components/power-select/search-message"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/power-select/trigger",["exports","ember-power-select/components/power-select/trigger"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/progress/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"0deDvA3Z",block:'[[[11,0],[24,0,"progress indeterminate"],[24,"role","progressbar"],[17,1],[12],[13],[1,"\\n"]],["&attrs"],false,[]]',moduleName:"consul-ui/components/progress/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/providers/dimension/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@glimmer/tracking","@ember/object","ember-ref-bucket","@ember/template"],(function(e,t,n,l,r,i,o,a){var u,s,c,d -function p(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function f(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const m=(0,n.createTemplateFactory)({id:"BXV/pZSO",block:'[[[11,0],[4,[38,0],["element"],[["debugName","bucket"],["create-ref",[30,0]]]],[4,[38,1],[[30,0,["measureDimensions"]]],null],[12],[1,"\\n "],[1,[28,[35,2],["resize",[30,0,["handleWindowResize"]]],null]],[1,"\\n "],[18,1,[[28,[37,4],null,[["data"],[[30,0,["data"]]]]]]],[1,"\\n"],[13]],["&default"],false,["create-ref","did-insert","on-window","yield","hash"]]',moduleName:"consul-ui/components/providers/dimension/index.hbs",isStrictMode:!1}) -let h=(u=(0,o.ref)("element"),s=class extends l.default{constructor(){super(...arguments),p(this,"element",c,this),p(this,"height",d,this)}get data(){const{height:e,fillRemainingHeightStyle:t}=this -return{height:e,fillRemainingHeightStyle:t}}get fillRemainingHeightStyle(){return(0,a.htmlSafe)(`height: ${this.height}px;`)}get bottomBoundary(){return document.querySelector(this.args.bottomBoundary)||this.footer}get footer(){return document.querySelector('footer[role="contentinfo"]')}measureDimensions(e){const t=this.bottomBoundary.getBoundingClientRect(),n=e.getBoundingClientRect() -this.height=t.top+t.height-n.top}handleWindowResize(){const{element:e}=this -this.measureDimensions(e)}},c=f(s.prototype,"element",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),d=f(s.prototype,"height",[r.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f(s.prototype,"measureDimensions",[i.action],Object.getOwnPropertyDescriptor(s.prototype,"measureDimensions"),s.prototype),f(s.prototype,"handleWindowResize",[i.action],Object.getOwnPropertyDescriptor(s.prototype,"handleWindowResize"),s.prototype),s) -e.default=h,(0,t.setComponentTemplate)(m,h)})),define("consul-ui/components/providers/search/index",["exports","@ember/component","@ember/template-factory","@glimmer/component"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"nGR80lz+",block:'[[[18,1,[[28,[37,1],null,[["data"],[[30,0,["data"]]]]]]]],["&default"],false,["yield","hash"]]',moduleName:"consul-ui/components/providers/search/index.hbs",isStrictMode:!1}) -class i extends l.default{get _search(){return this.args.search||""}get items(){const{items:e,searchProperties:t}=this.args,{_search:n}=this -return n.length>0?e.filter((e=>t.reduce(((t,l)=>{const r=-1!==e[l].indexOf(n) -return r?[...t,r]:t}),[]).length>0)):e}get data(){const{items:e}=this -return{items:e}}}e.default=i,(0,t.setComponentTemplate)(r,i)})),define("consul-ui/components/radio-card/index",["exports","@ember/component","@ember/template-factory"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const l=(0,n.createTemplateFactory)({id:"o/1nwT6X",block:'[[[11,"label"],[17,1],[16,0,[29,["radio-card",[52,[33,1]," checked"]]]],[12],[1,"\\n "],[10,0],[12],[1,"\\n"],[41,[28,[37,2],[[33,3,["length"]],0],null],[[[1," "],[10,"input"],[15,3,[36,4]],[15,2,[36,3]],[15,"checked",[36,1]],[15,"onchange",[28,[37,5],[[30,0],[33,6]],null]],[14,4,"radio"],[12],[13],[1,"\\n"]],[]],[[[1," "],[10,"input"],[15,3,[36,4]],[14,2,""],[15,"checked",[36,1]],[15,"onchange",[28,[37,5],[[30,0],[33,6]],null]],[14,4,"radio"],[12],[13],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n "],[10,0],[12],[1,"\\n "],[18,2,null],[1,"\\n "],[13],[1,"\\n"],[13]],["&attrs","&default"],false,["if","checked","gt","value","name","action","onchange","yield"]]',moduleName:"consul-ui/components/radio-card/index.hbs",isStrictMode:!1}) -var r=(0,t.setComponentTemplate)(l,t.default.extend({tagName:""})) -e.default=r})),define("consul-ui/components/radio-group/index",["exports","@ember/component","@ember/template-factory","@ember/service"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"Ud+ETI/C",block:'[[[10,"fieldset"],[12],[1,"\\n "],[10,0],[14,"role","radiogroup"],[15,1,[29,["radiogroup_",[36,0]]]],[12],[1,"\\n"],[42,[28,[37,2],[[28,[37,2],[[33,3]],null]],null],null,[[[44,[[52,[28,[37,6],[[30,1,["key"]],[27]],null],[30,1,["key"]],[30,1,["value"]]],[28,[37,7],[[30,1,["label"]],[30,1,["value"]]],null]],[[[1," "],[10,"label"],[15,"tabindex",[52,[33,8],"0"]],[15,"onkeydown",[52,[33,8],[28,[37,9],[[30,0],"keydown"],null]]],[15,0,[29,["type-radio value-",[30,2]]]],[12],[1," "],[1,"\\n "],[10,"input"],[15,3,[36,0]],[15,2,[30,2]],[15,"checked",[52,[28,[37,10],[[28,[37,11],[[33,12]],null],[30,2]],null],"checked"]],[15,"onchange",[28,[37,9],[[30,0],"change"],null]],[14,4,"radio"],[12],[13],[1,"\\n "],[10,1],[12],[1,[30,3]],[13],[1,"\\n "],[13],[1,"\\n"]],[2,3]]]],[1]],null],[1," "],[13],[1,"\\n"],[13],[1,"\\n"]],["item","_key","_value"],false,["name","each","-track-array","items","let","if","not-eq","or","keyboardAccess","action","eq","concat","value"]]',moduleName:"consul-ui/components/radio-group/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,t.default.extend({tagName:"",keyboardAccess:!1,dom:(0,l.inject)("dom"),init:function(){this._super(...arguments),this.name=this.dom.guid(this)},actions:{keydown:function(e){13===e.keyCode&&e.target.dispatchEvent(new MouseEvent("click"))},change:function(e){this.onchange(this.dom.setEventTargetProperty(e,"value",(e=>""===e?void 0:e)))}}})) -e.default=i})),define("consul-ui/components/ref/index",["exports","@ember/component","@ember/object"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var l=t.default.extend({tagName:"",didReceiveAttrs:function(){(0,n.set)(this.target,this.name,this.value)}}) -e.default=l})),define("consul-ui/components/role-form/index",["exports","@ember/component","@ember/template-factory","consul-ui/components/form-component/index"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"0/f8kKT6",block:'[[[18,2,null],[1,"\\n"],[11,"fieldset"],[24,0,"role-form"],[16,"disabled",[52,[28,[37,2],[[28,[37,3],["write role"],[["item"],[[33,4]]]]],null],"disabled"]],[17,1],[12],[1,"\\n "],[10,"label"],[15,0,[29,["type-text",[52,[33,4,["error","Name"]]," has-error"]]]],[12],[1,"\\n "],[10,1],[12],[1,"Name"],[13],[1,"\\n "],[10,"input"],[15,2,[33,4,["Name"]]],[14,3,"role[Name]"],[14,"autofocus","autofocus"],[15,"oninput",[28,[37,5],[[30,0],"change"],null]],[14,4,"text"],[12],[13],[1,"\\n "],[10,"em"],[12],[1,"\\n Maximum 256 characters. May only include letters (uppercase and/or lowercase) and/or numbers. Must be unique.\\n "],[13],[1,"\\n"],[41,[33,4,["error","Name"]],[[[1," "],[10,"strong"],[12],[1,[33,4,["error","Name","validation"]]],[13],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n "],[10,"label"],[14,0,"type-text"],[12],[1,"\\n "],[10,1],[12],[1,"Description (Optional)"],[13],[1,"\\n "],[10,"textarea"],[14,3,"role[Description]"],[15,2,[33,4,["Description"]]],[15,"oninput",[28,[37,5],[[30,0],"change"],null]],[12],[13],[1,"\\n "],[13],[1,"\\n"],[13],[1,"\\n"],[10,"fieldset"],[14,1,"policies"],[14,0,"policies"],[12],[1,"\\n "],[10,"h2"],[12],[1,"Policies"],[13],[1,"\\n"],[6,[39,6],null,[["name","params"],["policy",[28,[37,7],[[33,4]],null]]],[["default","else"],[[[[1," "],[18,2,null],[1,"\\n"]],[]],[[[1," "],[8,[39,8],null,[["@disabled","@dc","@partition","@nspace","@items"],[[28,[37,2],[[28,[37,3],["write role"],[["item"],[[33,4]]]]],null],[99,9,["@dc"]],[99,10,["@partition"]],[99,11,["@nspace"]],[33,4,["Policies"]]]],null],[1,"\\n"]],[]]]]],[13],[1,"\\n"]],["&attrs","&default"],false,["yield","if","not","can","item","action","yield-slot","block-params","policy-selector","dc","partition","nspace"]]',moduleName:"consul-ui/components/role-form/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,l.default.extend({type:"role",name:"role",classNames:["role-form"]})) -e.default=i})),define("consul-ui/components/role-selector/index",["exports","@ember/component","@ember/template-factory","consul-ui/components/child-selector/index","@ember/service","@ember/object","@ember/object/computed","consul-ui/utils/dom/event-source"],(function(e,t,n,l,r,i,o,a){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const u=(0,n.createTemplateFactory)({id:"6ZRIYR2n",block:'[[[8,[39,0],[[24,0,"role-selector"],[24,1,"new-role"]],[["@onclose","@aria"],[[28,[37,1],[[30,0],[28,[37,2],[[33,3]],null],"role"],null],[28,[37,4],null,[["label"],[[52,[28,[37,6],[[33,3],"role"],null],"New Role","New Policy"]]]]]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@target","@name","@value"],[[30,0],"modal",[30,1]]],null],[1,"\\n "],[8,[39,8],null,[["@name"],["header"]],[["default"],[[[[1,"\\n"],[41,[28,[37,6],[[33,3],"role"],null],[[[1," "],[10,"h2"],[12],[1,"New Role"],[13],[1,"\\n"]],[]],[[[1," "],[10,"h2"],[12],[1,"New Policy"],[13],[1,"\\n"]],[]]],[1," "]],[]]]]],[1,"\\n "],[8,[39,8],null,[["@name"],["body"]],[["default"],[[[[1,"\\n\\n "],[10,"input"],[15,1,[29,[[36,9],"_state_role"]]],[15,3,[29,[[36,9],"[state]"]]],[14,2,"role"],[15,"checked",[52,[28,[37,6],[[33,3],"role"],null],"checked"]],[15,"onchange",[28,[37,1],[[30,0],"change"],null]],[14,4,"radio"],[12],[13],[1,"\\n "],[8,[39,10],null,[["@form","@dc","@nspace","@partition"],[[99,11,["@form"]],[99,12,["@dc"]],[99,13,["@nspace"]],[99,14,["@partition"]]]],[["default"],[[[[1,"\\n "],[8,[39,8],null,[["@name"],["policy"]],[["default"],[[[[1,"\\n\\n "],[8,[39,15],null,[["@source","@dc","@partition","@nspace","@items"],[[99,16,["@source"]],[99,12,["@dc"]],[99,14,["@partition"]],[99,13,["@nspace"]],[33,17,["Policies"]]]],[["default"],[[[[1,"\\n "],[8,[39,8],null,[["@name"],["trigger"]],[["default"],[[[[1,"\\n "],[8,[39,18],[[24,0,"type-dialog"],[4,[38,1],[[30,0],"triggerStateCheckboxChange"],null]],[["@text","@size","@color","@icon"],["Create new policy","small","tertiary","plus"]],null],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[10,"input"],[15,1,[29,[[36,9],"_state_policy"]]],[15,3,[29,[[36,9],"[state]"]]],[14,2,"policy"],[15,"checked",[52,[28,[37,6],[[33,3],"policy"],null],"checked"]],[15,"onchange",[28,[37,1],[[30,0],"change"],null]],[14,4,"radio"],[12],[13],[1,"\\n "],[8,[39,19],null,[["@name","@form","@dc","@nspace","@partition"],["role[policy]",[99,20,["@form"]],[99,12,["@dc"]],[99,13,["@nspace"]],[99,14,["@partition"]]]],null],[1,"\\n\\n "]],[]]]]],[1,"\\n "],[8,[39,8],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n\\n "],[8,[39,21],null,null,[["default"],[[[[1,"\\n"],[41,[28,[37,6],[[33,3],"role"],null],[[[1," "],[8,[39,18],[[16,"onclick",[28,[37,22],[[30,0,["save"]],[33,17],[33,23],[28,[37,24],[[28,[37,1],[[30,0],[30,2]],null],[28,[37,1],[[30,0],"reset"],null]],null]],null]],[16,"disabled",[52,[28,[37,25],[[33,17,["isSaving"]],[33,17,["isPristine"]],[33,17,["isInvalid"]]],null],"disabled"]],[24,4,"submit"]],[["@text","@isLoading"],["Create and apply",[33,17,["isSaving"]]]],null],[1,"\\n "],[8,[39,18],[[16,"disabled",[52,[33,17,["isSaving"]],"disabled"]],[24,4,"reset"],[4,[38,26],["click",[28,[37,1],[[30,0],[28,[37,24],[[28,[37,1],[[30,0],[30,2]],null],[28,[37,1],[[30,0],"reset"],null]],null]],null]],null]],[["@text","@color"],["Cancel","secondary"]],null],[1,"\\n\\n"]],[]],[[[1," "],[8,[39,18],[[16,"disabled",[52,[28,[37,25],[[33,27,["isSaving"]],[33,27,["isPristine"]],[33,27,["isInvalid"]]],null],"disabled"]],[24,4,"submit"],[4,[38,1],[[30,0],"dispatch","save",[28,[37,28],[[33,27],[33,17,["Policies"]],[28,[37,1],[[30,0],[28,[37,2],[[33,3]],null],"role"],null]],null]],null]],[["@text","@isLoading"],["Create and apply",[33,27,["isSaving"]]]],null],[1,"\\n "],[8,[39,18],[[16,"disabled",[52,[33,27,["isSaving"]],"disabled"]],[24,4,"reset"],[4,[38,26],["click",[28,[37,1],[[30,0],[28,[37,2],[[33,3]],null],"role"],null]],null]],[["@text","@color"],["Cancel","secondary"]],null],[1,"\\n"]],[]]],[1," "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n\\n"],[8,[39,29],null,[["@disabled","@repo","@dc","@partition","@nspace","@type","@placeholder","@items"],[[99,30,["@disabled"]],[99,31,["@repo"]],[99,12,["@dc"]],[99,14,["@partition"]],[99,13,["@nspace"]],"role","Search for role",[99,23,["@items"]]]],[["default"],[[[[1,"\\n "],[8,[39,8],null,[["@name"],["label"]],[["default"],[[[[1,"\\n Apply an existing role\\n "]],[]]]]],[1,"\\n "],[8,[39,8],null,[["@name"],["create"]],[["default"],[[[[1,"\\n "],[8,[39,18],[[24,0,"type-dialog"],[4,[38,26],["click",[28,[37,32],[[30,0,["modal","open"]]],null]],null]],[["@text","@size","@color","@icon"],["Create new role","small","tertiary","plus"]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,8],null,[["@name"],["option"]],[["default"],[[[[1,"\\n "],[1,[30,3,["Name"]]],[1,"\\n "]],[3]]]]],[1,"\\n "],[8,[39,8],null,[["@name"],["set"]],[["default"],[[[[1,"\\n "],[8,[39,33],null,[["@rows","@items"],[5,[28,[37,34],["CreateTime:desc","Name:asc",[33,23]],null]]],[["default"],[[[[1,"\\n "],[8,[39,8],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"th"],[12],[1,"Name"],[13],[1,"\\n "],[10,"th"],[12],[1,"Description"],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,8],null,[["@name"],["row"]],[["default"],[[[[1,"\\n "],[10,"td"],[12],[1,"\\n "],[10,3],[15,6,[28,[37,35],["dc.acls.roles.edit",[30,4,["ID"]]],null]],[12],[1,[30,4,["Name"]]],[13],[1,"\\n "],[13],[1,"\\n "],[10,"td"],[12],[1,"\\n "],[1,[30,4,["Description"]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,8],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[8,[39,36],null,[["@expanded","@onchange","@keyboardAccess"],[[52,[28,[37,6],[[30,8],[30,6]],null],true,false],[28,[37,1],[[30,0],[30,7],[30,6]],null],false]],[["default"],[[[[1,"\\n "],[8,[39,8],null,[["@name"],["trigger"]],[["default"],[[[[1,"\\n More\\n "]],[]]]]],[1,"\\n "],[8,[39,8],null,[["@name"],["menu"]],[["default"],[[[[1,"\\n "],[10,"li"],[14,"role","none"],[12],[1,"\\n "],[10,3],[14,"role","menuitem"],[14,"tabindex","-1"],[15,6,[28,[37,35],["dc.acls.roles.edit",[30,4,["ID"]]],null]],[12],[1,"\\n"],[41,[28,[37,37],["edit role"],[["item"],[[30,4]]]],[[[1," Edit\\n"]],[]],[[[1," View\\n"]],[]]],[1," "],[13],[1,"\\n "],[13],[1,"\\n"],[41,[28,[37,38],[[33,30]],null],[[[1," "],[10,"li"],[14,"role","none"],[14,0,"dangerous"],[12],[1,"\\n "],[10,"label"],[15,"for",[30,9]],[14,"role","menuitem"],[14,"tabindex","-1"],[15,"onkeypress",[30,11]],[12],[1,"Remove"],[13],[1,"\\n "],[10,0],[14,"role","menu"],[12],[1,"\\n "],[8,[39,39],[[24,0,"warning"]],null,[["header","body","actions"],[[[[1,"\\n Confirm Remove\\n "]],[]],[[[1,"\\n "],[10,2],[12],[1,"\\n Are you sure you want to remove this role?\\n "],[13],[1,"\\n "]],[]],[[[1,"\\n "],[8,[30,12,["Action"]],[[24,0,"dangerous"]],null,[["default"],[[[[1,"\\n "],[8,[39,1],[[24,"tabindex","-1"],[4,[38,26],["click",[28,[37,1],[[30,0],[30,10],"remove",[30,4],[33,23]],null]],null]],null,[["default"],[[[[1,"\\n Remove\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,12,["Action"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,1],null,[["@for"],[[30,9]]],[["default"],[[[[1,"\\n Cancel\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[12]]]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1," "]],[9,10,11]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6,7,8]]]]],[1,"\\n "]],[4,5]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]]]]],[1,"\\n"]],["modal","close","option","item","index","index","change","checked","confirm","send","keypressClick","Actions"],false,["modal-dialog","action","mut","state","hash","if","eq","ref","block-slot","name","role-form","form","dc","nspace","partition","policy-selector","source","item","hds/button","policy-form","policyForm","hds/button-set","perform","items","queue","or","on","policy","array","child-selector","disabled","repo","optional","tabular-collection","sort-by","href-to","popover-menu","can","not","informed-action"]]',moduleName:"consul-ui/components/role-selector/index.hbs",isStrictMode:!1}) -var s=(0,t.setComponentTemplate)(u,l.default.extend({repo:(0,r.inject)("repository/role"),dom:(0,r.inject)("dom"),name:"role",type:"role",classNames:["role-selector"],state:"role",policy:(0,o.alias)("policyForm.data"),init:function(){this._super(...arguments),(0,i.set)(this,"policyForm",this.formContainer.form("policy")),this.source=new a.CallableEventSource},actions:{reset:function(e){this._super(...arguments),this.policyForm.clear({Datacenter:this.dc})},dispatch:function(e,t){this.source.dispatchEvent({type:e,data:t})},change:function(){const e=this.dom.normalizeEvent(...arguments),t=e.target -if("role[state]"===t.name)(0,i.set)(this,"state",t.value),"policy"===t.value&&this.dom.component(".code-editor",t.nextElementSibling).didAppear() -else this._super(...arguments)},triggerStateCheckboxChange(){let e=document.getElementById(`${this.name}_state_policy`) -e&&e.dispatchEvent(new Event("change"))}}})) -e.default=s})),define("consul-ui/components/route/announcer/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"othmimN0",block:'[[[1,[28,[35,0],[[30,1]],[["separator"],[[28,[37,1],[[30,2]," - "],null]]]]],[1,"\\n"],[8,[39,2],null,[["@name"],["route-announcer"]],null],[1,"\\n\\n"]],["@title","@separator"],false,["page-title","or","portal-target"]]',moduleName:"consul-ui/components/route/announcer/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/route/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@ember/service","@ember/object","@glimmer/tracking"],(function(e,t,n,l,r,i,o){var a,u,s,c,d,p,f,m,h,b -function y(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function g(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const v=(0,n.createTemplateFactory)({id:"aUe64HGf",block:'[[[1,[28,[35,0],[[30,0,["connect"]]],null]],[1,"\\n"],[1,[28,[35,1],[[30,0,["disconnect"]]],null]],[1,"\\n"],[18,1,[[28,[37,3],null,[["model","params","currentName","refresh","t","exists","Title","Announcer"],[[30,0,["model"]],[30,0,["params"]],[30,0,["router","currentRoute","name"]],[30,0,["refresh"]],[30,0,["t"]],[30,0,["exists"]],[50,"route/title",0,null,null],[50,"route/announcer",0,null,null]]]]]]],["&default"],false,["did-insert","will-destroy","yield","hash","component"]]',moduleName:"consul-ui/components/route/index.hbs",isStrictMode:!1}),O=/\${([A-Za-z.0-9_-]+)}/g -let P=(a=(0,r.inject)("routlet"),u=(0,r.inject)("router"),s=(0,r.inject)("intl"),c=(0,r.inject)("encoder"),d=class extends l.default{constructor(){super(...arguments),y(this,"routlet",p,this),y(this,"router",f,this),y(this,"intl",m,this),y(this,"encoder",h,this),y(this,"_model",b,this),this.intlKey=this.encoder.createRegExpEncoder(O,(e=>e))}get params(){return this.routlet.paramsFor(this.args.name)}get model(){if(this._model)return this._model -if(this.args.name){const e=this.routlet.outletFor(this.args.name) -if(e)return this.routlet.modelFor(e.name)}}exists(e){return this.routlet.exists(`${this.args.name}.${e}`)}t(e,t){return e.includes("${")&&(e=this.intlKey(e,t)),this.intl.t(`routes.${this.args.name}.${e}`,t)}connect(){this.routlet.addRoute(this.args.name,this)}disconnect(){this.routlet.removeRoute(this.args.name,this)}},p=g(d.prototype,"routlet",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f=g(d.prototype,"router",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m=g(d.prototype,"intl",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=g(d.prototype,"encoder",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=g(d.prototype,"_model",[o.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),g(d.prototype,"exists",[i.action],Object.getOwnPropertyDescriptor(d.prototype,"exists"),d.prototype),g(d.prototype,"t",[i.action],Object.getOwnPropertyDescriptor(d.prototype,"t"),d.prototype),g(d.prototype,"connect",[i.action],Object.getOwnPropertyDescriptor(d.prototype,"connect"),d.prototype),g(d.prototype,"disconnect",[i.action],Object.getOwnPropertyDescriptor(d.prototype,"disconnect"),d.prototype),d) -e.default=P,(0,t.setComponentTemplate)(v,P)})),define("consul-ui/components/route/title/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"SU19CA8/",block:'[[[1,[28,[35,0],[[30,1]],[["separator"],[[30,2]]]]],[1,"\\n"],[41,[28,[37,2],[[30,3],false],null],[[[1,[30,1]],[1,"\\n"]],[]],null],[8,[39,3],null,[["@target"],["route-announcer"]],[["default"],[[[[1,"\\n"],[11,0],[24,0,"route-title"],[17,4],[24,"aria-live","assertive"],[24,"aria-atomic","true"],[12],[1,"\\n"],[1," "],[1,[28,[35,4],["Navigated to ",[30,1]],null]],[1,"\\n"],[13],[1,"\\n"]],[]]]]],[1,"\\n"]],["@title","@separator","@render","&attrs"],false,["page-title","if","not-eq","portal","concat"]]',moduleName:"consul-ui/components/route/title/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/search-bar/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@ember/object","consul-ui/components/search-bar/utils"],(function(e,t,n,l,r,i){var o -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const a=(0,n.createTemplateFactory)({id:"ltULr+gR",block:'[[[11,0],[24,0,"search-bar"],[17,1],[12],[1,"\\n "],[10,"form"],[14,0,"filter-bar"],[12],[1,"\\n "],[10,0],[14,0,"search"],[12],[1,"\\n "],[18,4,[[28,[37,1],null,[["Search","Select"],[[50,"freetext-filter",0,null,null],[50,"popover-select",0,null,null]]]]]],[1,"\\n "],[13],[1,"\\n "],[10,0],[14,0,"filters"],[12],[1,"\\n "],[18,5,[[28,[37,1],null,[["Search","Select"],[[50,"freetext-filter",0,null,null],[50,"popover-select",0,null,null]]]]]],[1,"\\n "],[13],[1,"\\n "],[10,0],[14,0,"sort"],[12],[1,"\\n "],[18,6,[[28,[37,1],null,[["Search","Select"],[[50,"freetext-filter",0,null,null],[50,"popover-select",0,null,null]]]]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"],[41,[30,0,["isFiltered"]],[[[1," "],[10,0],[14,0,"search-bar-status"],[12],[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,[28,[35,4],[[28,[37,5],["component.search-bar.header"],[["default","item"],["common.ui.filtered-by",""]]]],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[10,"ul"],[12],[1,"\\n"],[42,[28,[37,7],[[28,[37,7],[[30,0,["filters"]]],null]],null],null,[[[1," "],[18,7,[[28,[37,1],null,[["RemoveFilter","status"],[[50,"search-bar/remove-filter",0,null,[["onclick"],[[28,[37,8],[[30,0],[28,[37,9],[[28,[37,9],[[30,3],[30,2,["key"]]],null],"change"],null],[28,[37,1],null,[["target"],[[28,[37,1],null,[["selectedItems"],[[28,[37,10],[[30,2,["selected"]],","],null]]]]]]]],null]]]],[28,[37,1],null,[["key","value"],[[30,2,["key"]],[28,[37,11],[[30,2,["value"]]],null]]]]]]]]],[1,"\\n"]],[2]],null],[1," "],[10,"li"],[14,0,"remove-all"],[12],[1,"\\n "],[8,[39,8],[[4,[38,12],["click",[30,0,["removeAllFilters"]]],null]],null,[["default"],[[[[1,"\\n Remove filters\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[13],[1,"\\n"]],["&attrs","filter","@filter","&search","&filter","&sort","&status"],false,["yield","hash","component","if","string-trim","t","each","-track-array","action","get","join","lowercase","on"]]',moduleName:"consul-ui/components/search-bar/index.hbs",isStrictMode:!1}) -let u=(o=class extends l.default{get isFiltered(){const e=this.args.filter.searchproperty||{default:[],value:[]} -return(0,i.diff)(e.default,e.value).length>0||Object.entries(this.args.filter).some((e=>{let[t,n]=e -return"searchproperty"!==t&&void 0!==n.value}))}get filters(){return(0,i.filters)(this.args.filter)}removeAllFilters(){Object.values(this.args.filter).forEach(((e,t)=>{setTimeout((()=>e.change(e.default||[])),1*t)}))}},s=o.prototype,c="removeAllFilters",d=[r.action],p=Object.getOwnPropertyDescriptor(o.prototype,"removeAllFilters"),f=o.prototype,m={},Object.keys(p).forEach((function(e){m[e]=p[e]})),m.enumerable=!!m.enumerable,m.configurable=!!m.configurable,("value"in m||m.initializer)&&(m.writable=!0),m=d.slice().reverse().reduce((function(e,t){return t(s,c,e)||e}),m),f&&void 0!==m.initializer&&(m.value=m.initializer?m.initializer.call(f):void 0,m.initializer=void 0),void 0===m.initializer&&(Object.defineProperty(s,c,m),m=null),o) -var s,c,d,p,f,m -e.default=u,(0,t.setComponentTemplate)(a,u)})),define("consul-ui/components/search-bar/remove-filter/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"euFx6j52",block:'[[[10,"li"],[12],[1,"\\n "],[8,[39,0],[[17,1],[4,[38,1],["click",[30,2]],null]],null,null],[1,"\\n "],[18,3,null],[1,"\\n"],[13],[1,"\\n"]],["&attrs","@onclick","&default"],false,["action","on","yield"]]',moduleName:"consul-ui/components/search-bar/remove-filter/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/search-bar/utils",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.filters=e.diff=void 0 -const t=(e,t)=>e.filter((e=>!t.includes(e))) -e.diff=t -e.filters=e=>Object.entries(e).filter((e=>{let[n,l]=e -return"searchproperty"===n?t(l.default,l.value).length>0:(l.value||[]).length>0})).reduce(((e,n)=>{let[l,r]=n -return e.concat(r.value.map((e=>{const n={key:l,value:e} -return n.selected="searchproperty"!==l?t(r.value,[e]):1===r.value.length?r.default:t(r.value,[e]),n})))}),[])})),define("consul-ui/components/state-chart/action/index",["exports","@ember/component","@ember/template-factory"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const l=(0,n.createTemplateFactory)({id:"ryQhDcxm",block:'[[[18,1,null]],["&default"],false,["yield"]]',moduleName:"consul-ui/components/state-chart/action/index.hbs",isStrictMode:!1}) -var r=(0,t.setComponentTemplate)(l,t.default.extend({tagName:"",didInsertElement:function(){this._super(...arguments),this.chart.addAction(this.name,((e,t)=>this.exec(e,t)))},willDestroy:function(){this._super(...arguments),this.chart.removeAction(this.type)}})) -e.default=r})),define("consul-ui/components/state-chart/guard/index",["exports","@ember/component","@ember/template-factory"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const l=(0,n.createTemplateFactory)({id:"nyWRsZoG",block:'[[[18,1,null]],["&default"],false,["yield"]]',moduleName:"consul-ui/components/state-chart/guard/index.hbs",isStrictMode:!1}) -var r=(0,t.setComponentTemplate)(l,t.default.extend({tagName:"",didInsertElement:function(){this._super(...arguments) -const e=this -this.chart.addGuard(this.name,(function(){return"function"==typeof e.cond?e.cond(...arguments):e.cond}))},willDestroyElement:function(){this._super(...arguments),this.chart.removeGuard(this.name)}})) -e.default=r})),define("consul-ui/components/state-chart/index",["exports","@ember/component","@ember/template-factory","@ember/service","@ember/object"],(function(e,t,n,l,r){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const i=(0,n.createTemplateFactory)({id:"4gS2sdh2",block:'[[[18,1,[[50,"state",0,null,[["state"],[[33,2]]]],[50,"state-chart/guard",0,null,[["chart"],[[30,0]]]],[50,"state-chart/action",0,null,[["chart"],[[30,0]]]],[28,[37,3],[[30,0],"dispatch"],null],[33,2]]]],["&default"],false,["yield","component","state","action"]]',moduleName:"consul-ui/components/state-chart/index.hbs",isStrictMode:!1}) -var o=(0,t.setComponentTemplate)(i,t.default.extend({chart:(0,l.inject)("state"),tagName:"",ontransition:function(e){},init:function(){this._super(...arguments),this._actions={},this._guards={}},didReceiveAttrs:function(){var e=this -void 0!==this.machine&&this.machine.stop(),void 0!==this.initial&&(this.src.initial=this.initial),this.machine=this.chart.interpret(this.src,{onTransition:e=>{const t=new CustomEvent("transition",{detail:e}) -this.ontransition(t),t.defaultPrevented||e.actions.forEach((t=>{"function"==typeof this._actions[t.type]&&this._actions[t.type](t.type,e.context,e.event)})),(0,r.set)(this,"state",e)},onGuard:function(t){for(var n=arguments.length,l=new Array(n>1?n-1:0),r=1;r1&&void 0!==arguments[1]?arguments[1]:{} -if(this.$tr&&(this.$tr.style.zIndex=null),t.target&&t.target.checked&&e!==(0,r.get)(this,"checked")){(0,r.set)(this,"checked",parseInt(e)) -const n=t.target,l=this.dom.closest("tr",n),i=this.dom.sibling(n,"div") -i.getBoundingClientRect().top+i.clientHeight>this.dom.element('footer[role="contentinfo"]').getBoundingClientRect().top?i.classList.add("above"):i.classList.remove("above"),l.style.zIndex=1,this.$tr=l}else(0,r.set)(this,"checked",null)}}})) -e.default=d})),define("consul-ui/components/tabular-details/index",["exports","@ember/component","@ember/template-factory","@ember/service","block-slots"],(function(e,t,n,l,r){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const i=(0,n.createTemplateFactory)({id:"+Q2oF2tj",block:'[[[18,4,null],[1,"\\n"],[10,"table"],[14,0,"with-details has-actions"],[12],[1,"\\n "],[10,"thead"],[12],[1,"\\n "],[10,"tr"],[12],[1,"\\n "],[8,[39,1],null,[["@name"],["header"]],[["default"],[[[[18,4,null]],[]]]]],[1,"\\n "],[10,"th"],[14,0,"actions"],[12],[1,"Actions"],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[10,"tbody"],[12],[1,"\\n"],[44,[[28,[37,3],["tabular-details-",[33,4],"-toggle-",[33,5],"_"],null]],[[[42,[28,[37,7],[[28,[37,7],[[33,8]],null]],null],null,[[[1," "],[10,"tr"],[15,"onclick",[28,[37,9],[[30,0],"click"],null]],[12],[1,"\\n "],[8,[39,1],null,[["@name"],["row"]],[["default"],[[[[18,4,[[30,2],[30,3]]]],[]]]]],[1,"\\n "],[10,"td"],[14,0,"actions"],[12],[1,"\\n "],[10,"label"],[15,"for",[28,[37,3],[[30,1],[30,3]],null]],[12],[10,1],[12],[1,"Show details"],[13],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[10,"tr"],[12],[1,"\\n "],[10,"td"],[14,"colspan","3"],[12],[1,"\\n "],[10,"input"],[15,"checked",[28,[37,10],[[28,[37,11],[[30,2,["closed"]]],null]],null]],[15,2,[30,3]],[15,3,[36,4]],[15,1,[28,[37,3],[[30,1],[30,3]],null]],[15,"onchange",[28,[37,9],[[30,0],"change",[30,2],[33,8]],null]],[14,4,"checkbox"],[12],[13],[1,"\\n "],[10,0],[12],[1,"\\n "],[10,"label"],[15,"for",[28,[37,3],[[30,1],[30,3]],null]],[12],[10,1],[12],[1,"Hide details"],[13],[13],[1,"\\n "],[10,0],[12],[1,"\\n "],[8,[39,1],null,[["@name"],["details"]],[["default"],[[[[1,"\\n "],[18,4,[[30,2],[30,3]]],[1,"\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[2,3]],null]],[1]]],[1," "],[13],[1,"\\n"],[13],[1,"\\n"]],["inputId","item","index","&default"],false,["yield","yield-slot","let","concat","name","guid","each","-track-array","items","action","not","is-empty"]]',moduleName:"consul-ui/components/tabular-details/index.hbs",isStrictMode:!1}) -var o=(0,t.setComponentTemplate)(i,t.default.extend(r.default,{dom:(0,l.inject)("dom"),onchange:function(){},init:function(){this._super(...arguments),this.guid=this.dom.guid(this)},actions:{click:function(e){this.dom.clickFirstAnchor(e)},change:function(e,t,n){this.onchange(n,e,t)}}})) -e.default=o})),define("consul-ui/components/tag-list/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"6itZIEFp",block:'[[[44,[[28,[37,1],[[28,[37,2],[[30,1,["Tags"]],[28,[37,3],null,null]],null],[28,[37,2],[[30,2],[28,[37,3],null,null]],null]],null]],[[[41,[28,[37,5],[[30,3,["length"]],0],null],[[[41,[48,[30,6]],[[[1," "],[18,6,[[50,"tag-list",0,null,[["item"],[[30,1]]]]]],[1,"\\n"]],[]],[[[11,"dl"],[24,0,"tag-list"],[17,4],[12],[1,"\\n "],[11,"dt"],[4,[38,9],null,null],[12],[1,"\\n "],[1,[28,[35,10],["components.tag-list.title"],[["default"],[[28,[37,3],["common.consul.tags"],null]]]]],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n"],[42,[28,[37,12],[[28,[37,12],[[30,3]],null]],null],null,[[[1," "],[10,1],[12],[1,[30,5]],[13],[1,"\\n"]],[5]],null],[1," "],[13],[1,"\\n"],[13],[1,"\\n"]],[]]]],[]],null]],[3]]]],["@item","@tags","tags","&attrs","item","&default"],false,["let","union","or","array","if","gt","has-block","yield","component","tooltip","t","each","-track-array"]]',moduleName:"consul-ui/components/tag-list/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/text-input/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"CVQgbzbo",block:'[[[8,[39,0],[[16,0,[28,[37,1],["text-input"," type-text"],null]],[17,1]],[["@item","@placeholder","@name","@label","@help","@validations","@chart"],[[30,2],[30,3],[30,4],[30,5],[30,6],[30,7],[30,8]]],[["label","input"],[[[[1,"\\n"],[1," "],[1,[28,[35,2],[[30,5],[30,4]],null]],[1,"\\n "]],[]],[[[1,"\\n"],[41,[30,9],[[[1," "],[11,"textarea"],[16,3,[30,4]],[4,[38,4],[[30,2]],[["validations","chart"],[[30,7],[30,8]]]],[4,[38,5],["input",[28,[37,6],[[30,10]],null]],null],[12],[1,[28,[35,2],[[30,11],[28,[37,7],[[30,2],[30,4]],null]],null]],[13],[1,"\\n"]],[]],[[[1," "],[11,"input"],[16,2,[28,[37,2],[[30,11],[28,[37,7],[[30,2],[30,4]],null]],null]],[16,3,[30,4]],[16,"placeholder",[28,[37,2],[[30,3]],null]],[24,4,"text"],[4,[38,4],[[30,2]],[["validations","chart"],[[30,7],[30,8]]]],[4,[38,5],["input",[28,[37,6],[[30,10]],null]],null],[12],[13],[1,"\\n"]],[]]],[1," "]],[]]]]],[1,"\\n"]],["&attrs","@item","@placeholder","@name","@label","@help","@validations","@chart","@expanded","@oninput","@value"],false,["form-input","concat","or","if","validate","on","optional","get"]]',moduleName:"consul-ui/components/text-input/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/toggle-button/index",["exports","@ember/component","@ember/template-factory","@ember/service"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"DglTzUFT",block:'[[[11,"input"],[17,1],[24,4,"checkbox"],[16,"checked",[52,[33,1],"checked",[27]]],[16,1,[28,[37,2],["toggle-button-",[33,3]],null]],[16,"onchange",[28,[37,4],[[30,0],"change"],null]],[4,[38,5],[[28,[37,6],[[30,0],"input"],null]],null],[12],[13],[1,"\\n"],[11,"label"],[16,"for",[28,[37,2],["toggle-button-",[33,3]],null]],[4,[38,5],[[28,[37,6],[[30,0],"label"],null]],null],[12],[1,"\\n "],[18,2,[[28,[37,8],null,[["click"],[[28,[37,4],[[30,0],"click"],null]]]]]],[1,"\\n"],[13]],["&attrs","&default"],false,["if","checked","concat","guid","action","did-insert","set","yield","hash"]]',moduleName:"consul-ui/components/toggle-button/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,t.default.extend({dom:(0,l.inject)("dom"),tagName:"",checked:!1,onchange:function(){},onblur:function(){},init:function(){this._super(...arguments),this.guid=this.dom.guid(this),this._listeners=this.dom.listeners()},willDestroyElement:function(){this._super(...arguments),this._listeners.remove()},didReceiveAttrs:function(){this._super(...arguments),this.checked?this.addClickOutsideListener():this._listeners.remove()},addClickOutsideListener:function(){this._listeners.remove(),this._listeners.add(this.dom.document(),"click",(e=>{this.dom.isOutside(this.label,e.target)&&this.dom.isOutside(this.label.nextElementSibling,e.target)&&(this.input.checked&&(this.input.checked=!1,this.onchange({target:this.input})),this._listeners.remove())}))},actions:{click:function(e){-1===(e.target.rel||"").indexOf("noopener")&&e.preventDefault(),this.input.checked=!this.input.checked,0!==e.detail&&e.target.blur(),this.actions.change.apply(this,[e])},change:function(e){this.input.checked&&this.addClickOutsideListener(),this.onchange({target:this.input})}}})) -e.default=i})),define("consul-ui/components/token-list/index",["exports","@ember/component","@ember/template-factory","block-slots"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"YY0PAiL0",block:'[[[18,3,null],[1,"\\n"],[41,[28,[37,2],[[33,3,["length"]],0],null],[[[1," "],[8,[39,4],[[24,0,"token-list"]],[["@rows","@items"],[5,[28,[37,5],["AccessorID:asc",[33,3]],null]]],[["default"],[[[[1,"\\n"],[41,[33,6],[[[1," "],[8,[39,7],null,[["@name"],["caption"]],[["default"],[[[[1,[34,6]]],[]]]]],[1,"\\n"]],[]],null],[1," "],[8,[39,7],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"th"],[12],[1,"AccessorID"],[13],[1,"\\n "],[10,"th"],[12],[1,"Scope"],[13],[1,"\\n "],[10,"th"],[12],[1,"Description"],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["row"]],[["default"],[[[[1,"\\n "],[10,"td"],[12],[1,"\\n "],[10,3],[15,6,[28,[37,8],["dc.acls.tokens.edit",[30,1,["AccessorID"]]],null]],[15,"target",[28,[37,9],[[33,10],""],null]],[12],[1,[28,[35,11],[[30,1,["AccessorID"]],8,false],null]],[13],[1,"\\n "],[13],[1,"\\n "],[10,"td"],[12],[1,"\\n "],[1,[52,[30,1,["Local"]],"local","global"]],[1,"\\n "],[13],[1,"\\n "],[10,"td"],[12],[1,"\\n "],[10,2],[12],[1,[30,1,["Description"]]],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[1,2]]]]],[1,"\\n"]],[]],null]],["item","index","&default"],false,["yield","if","gt","items","tabular-collection","sort-by","caption","block-slot","href-to","or","target","truncate"]]',moduleName:"consul-ui/components/token-list/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,t.default.extend(l.default,{tagName:""})) -e.default=i})),define("consul-ui/components/token-source/chart.xstate",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={id:"token-source",initial:"idle",on:{RESTART:[{target:"secret",cond:"isSecret"},{target:"provider"}]},states:{idle:{},secret:{},provider:{on:{SUCCESS:"jwt"}},jwt:{on:{SUCCESS:"token"}},token:{}}}})),define("consul-ui/components/token-source/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@ember/object","@glimmer/tracking","consul-ui/components/token-source/chart.xstate"],(function(e,t,n,l,r,i,o){var a,u,s -function c(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) -t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function d(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function p(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function f(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const m=(0,n.createTemplateFactory)({id:"49zN7wYk",block:'[[[8,[39,0],null,[["@src","@initial"],[[30,0,["chart"]],[52,[28,[37,2],[[30,1],"oidc"],null],"provider","secret"]]],[["default"],[[[[1,"\\n "],[8,[30,3],null,[["@name","@cond"],["isSecret",[30,0,["isSecret"]]]],null],[1,"\\n"],[44,[[28,[37,4],["/${partition}/${nspace}/${dc}",[28,[37,5],null,[["partition","nspace","dc"],[[28,[37,6],[[30,7,["Partition"]],[30,8]],null],[28,[37,6],[[30,7,["Namespace"]],[30,9]],null],[30,10]]]]],null]],[[[1," "],[8,[30,2],null,[["@matches"],["secret"]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@src","@onchange","@onerror"],[[28,[37,4],[[28,[37,8],[[30,11],"/token/self/${value}"],null],[28,[37,5],null,[["value"],[[30,7]]]]],null],[30,0,["change"]],[30,12]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,2],null,[["@matches"],["provider"]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@src","@onchange","@onerror"],[[28,[37,4],[[28,[37,8],[[30,11],"/oidc/provider/${value}"],null],[28,[37,5],null,[["value"],[[30,7,["Name"]]]]]],null],[28,[37,9],[[28,[37,10],[[30,0],[28,[37,11],[[30,0,["provider"]]],null]],[["value"],["data"]]],[28,[37,10],[[30,0],[30,5],"SUCCESS"],null]],null],[30,12]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,2],null,[["@matches"],["jwt"]],[["default"],[[[[1,"\\n "],[8,[39,12],null,[["@src","@onchange","@onerror"],[[30,0,["provider","AuthURL"]],[28,[37,9],[[28,[37,10],[[30,0],[28,[37,11],[[30,0,["jwt"]]],null]],[["value"],["data"]]],[28,[37,10],[[30,0],[30,5],"SUCCESS"],null]],null],[30,12]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,2],null,[["@matches"],["token"]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@src","@onchange","@onerror"],[[28,[37,4],[[28,[37,8],[[30,11],"/oidc/authorize/${provider}/${code}/${state}"],null],[28,[37,5],null,[["provider","code","state"],[[30,0,["provider","Name"]],[30,0,["jwt","authorizationCode"]],[28,[37,6],[[30,0,["jwt","authorizationState"]],""],null]]]]],null],[30,0,["change"]],[30,12]]],null],[1,"\\n "]],[]]]]],[1,"\\n"]],[11]]]],[2,3,4,5,6]]]]]],["@type","State","Guard","Action","dispatch","state","@value","@partition","@nspace","@dc","path","@onerror"],false,["state-chart","if","eq","let","uri","hash","or","data-source","concat","queue","action","mut","jwt-source"]]',moduleName:"consul-ui/components/token-source/index.hbs",isStrictMode:!1}) -let h=(a=class extends l.default{constructor(){super(...arguments),d(this,"provider",u,this),d(this,"jwt",s,this),this.chart=o.default}isSecret(){return"secret"===this.args.type}change(e){e.data.toJSON=function(){return function(e){for(var t=1;t{const n=parseFloat(t.getTotalLength()),l=t.getPointAtLength(Math.ceil(n/3)) -return{id:t.id,x:Math.round(l.x-e.x),y:Math.round(l.y-e.y)}}))}},s=p(u.prototype,"iconPositions",[r.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),c=p(u.prototype,"dom",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p(u.prototype,"getIconPositions",[i.action],Object.getOwnPropertyDescriptor(u.prototype,"getIconPositions"),u.prototype),u) -e.default=m,(0,t.setComponentTemplate)(f,m)})),define("consul-ui/components/topology-metrics/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@glimmer/tracking","@ember/object","@ember/service"],(function(e,t,n,l,r,i,o){var a,u,s,c,d,p,f,m,h,b,y -function g(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function v(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const O=(0,n.createTemplateFactory)({id:"/n9s2uNC",block:'[[[11,0],[24,0,"topology-container consul-topology-metrics"],[4,[38,0],[[30,0,["calculate"]]],null],[12],[1,"\\n"],[41,[28,[37,2],[[30,0,["downstreams","length"]],0],null],[[[1," "],[11,0],[24,1,"downstream-container"],[4,[38,3],[[30,0,["setHeight"]],"downstream-lines"],null],[4,[38,4],[[30,0,["setHeight"]],"downstream-lines",[30,0,["downstreams"]]],null],[12],[1,"\\n"],[41,[28,[37,5],[[30,0,["emptyColumn"]]],null],[[[1," "],[10,0],[12],[1,"\\n "],[10,2],[12],[1,[30,1,["Name"]]],[13],[1,"\\n "],[10,1],[12],[1,"\\n "],[8,[39,6],null,null,[["default"],[[[[1,"\\n Only showing downstreams within the current datacenter for "],[1,[30,2,["Service","Service"]]],[1,".\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[42,[28,[37,8],[[28,[37,8],[[30,0,["downstreams"]]],null]],null],null,[[[1," "],[8,[39,9],null,[["@nspace","@dc","@service","@item","@hasMetricsProvider","@noMetricsReason"],[[30,4],[30,1,["Name"]],[30,2,["Service"]],[30,3],[30,5],[30,0,["noMetricsReason"]]]],[["default"],[[[[1,"\\n"],[41,[28,[37,10],[[30,5],[30,0,["mainNotIngressService"]],[28,[37,11],[[30,3,["Kind"]],"ingress-gateway"],null]],null],[[[1," "],[8,[39,12],null,[["@nspace","@partition","@dc","@endpoint","@service","@item","@noMetricsReason"],[[28,[37,13],[[30,3,["Namespace"]],"default"],null],[28,[37,13],[[30,3,["Partition"]],"default"],null],[30,3,["Datacenter"]],"downstream-summary-for-service",[30,2,["Service","Service"]],[30,3,["Name"]],[30,0,["noMetricsReason"]]]],null],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n"]],[3]],null],[1," "],[13],[1,"\\n"]],[]],null],[1," "],[10,0],[14,1,"metrics-container"],[12],[1,"\\n "],[10,0],[14,0,"metrics-header"],[12],[1,"\\n "],[1,[30,2,["Service","Service"]]],[1,"\\n "],[13],[1,"\\n"],[41,[28,[37,11],[[30,2,["Service","Meta","external-source"]],"consul-api-gateway"],null],[[[41,[30,5],[[[1," "],[8,[39,14],null,[["@nspace","@partition","@dc","@service","@protocol","@noMetricsReason"],[[28,[37,13],[[30,2,["Service","Namespace"]],"default"],null],[28,[37,13],[[33,15,["Service","Partition"]],"default"],null],[30,1,["Name"]],[30,2,["Service","Service"]],[30,6,["Protocol"]],[30,0,["noMetricsReason"]]]],null],[1,"\\n"],[41,[30,0,["mainNotIngressService"]],[[[1," "],[8,[39,12],null,[["@nspace","@partition","@dc","@endpoint","@service","@protocol","@noMetricsReason"],[[28,[37,13],[[30,2,["Service","Namespace"]],"default"],null],[28,[37,13],[[33,15,["Service","Partition"]],"default"],null],[30,1,["Name"]],"summary-for-service",[30,2,["Service","Service"]],[30,6,["Protocol"]],[30,0,["noMetricsReason"]]]],null],[1,"\\n"]],[]],null]],[]],null],[1," "],[10,0],[14,0,"link"],[12],[1,"\\n"],[41,[30,7],[[[1," "],[10,3],[14,0,"metrics-link"],[15,6,[30,7]],[14,"target","_blank"],[14,"rel","noopener noreferrer"],[12],[1,"Open dashboard"],[13],[1,"\\n"]],[]],[[[1," "],[10,3],[14,0,"config-link"],[15,6,[29,[[28,[37,16],["CONSUL_DOCS_URL"],null],"/connect/observability/ui-visualization"]]],[14,"target","_blank"],[14,"rel","noopener noreferrer"],[12],[1,"Configure dashboard"],[13],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n "],[10,0],[14,1,"downstream-lines"],[12],[1,"\\n "],[8,[39,17],null,[["@type","@service","@view","@center","@lines","@items","@oncreate"],["downstream",[30,2],[30,0,["downView"]],[30,0,["centerDimensions"]],[30,0,["downLines"]],[30,0,["downstreams"]],[28,[37,18],[[30,0],[30,8]],null]]],null],[1,"\\n "],[13],[1,"\\n"],[41,[28,[37,2],[[30,0,["upstreams","length"]],0],null],[[[1," "],[10,0],[14,1,"upstream-column"],[12],[1,"\\n"],[42,[28,[37,19],[[28,[37,20],["PeerOrDatacenter",[30,0,["upstreams"]]],null]],null],null,[[[1," "],[11,0],[24,1,"upstream-container"],[4,[38,3],[[30,0,["setHeight"]],"upstream-lines"],null],[4,[38,4],[[30,0,["setHeight"]],"upstream-lines",[30,0,["upstreams"]]],null],[12],[1,"\\n"],[41,[30,10],[[[1," "],[10,2],[12],[1,[30,10]],[13],[1,"\\n"]],[]],null],[42,[28,[37,8],[[28,[37,8],[[30,9]],null]],null],null,[[[1," "],[8,[39,9],null,[["@dc","@item","@service"],[[30,1,["Name"]],[30,11],[30,2,["Service"]]]],[["default"],[[[[1,"\\n"],[41,[28,[37,10],[[30,5],[30,0,["mainNotIngressService"]],[28,[37,11],[[30,11,["Kind"]],"ingress-gateway"],null]],null],[[[1," "],[8,[39,12],null,[["@nspace","@partition","@dc","@endpoint","@service","@item","@noMetricsReason"],[[28,[37,13],[[30,11,["Namespace"]],"default"],null],[28,[37,13],[[30,11,["Partition"]],"default"],null],[30,11,["Datacenter"]],"upstream-summary-for-service",[30,2,["Service","Service"]],[30,11,["Name"]],[30,0,["noMetricsReason"]]]],null],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n"]],[11]],null],[1," "],[13],[1,"\\n"]],[9,10]],null],[1," "],[13],[1,"\\n"]],[]],null],[1," "],[10,0],[14,1,"upstream-lines"],[12],[1,"\\n "],[8,[39,21],null,[["@type","@service","@view","@center","@lines","@items","@oncreate"],["upstream",[30,2],[30,0,["upView"]],[30,0,["centerDimensions"]],[30,0,["upLines"]],[30,0,["upstreams"]],[28,[37,18],[[30,0],[30,8]],null]]],null],[1,"\\n "],[13],[1,"\\n"],[13],[1,"\\n"]],["@dc","@service","item","@nspace","@hasMetricsProvider","@topology","@metricsHref","@oncreate","upstreams","dc","item"],false,["on-resize","if","gt","did-insert","did-update","not","tooltip","each","-track-array","topology-metrics/card","and","not-eq","topology-metrics/stats","or","topology-metrics/series","service","env","topology-metrics/down-lines","action","-each-in","group-by","topology-metrics/up-lines"]]',moduleName:"consul-ui/components/topology-metrics/index.hbs",isStrictMode:!1}) -let P=(a=(0,o.inject)("env"),u=(0,o.inject)(),s=class extends l.default{constructor(){super(...arguments),g(this,"env",c,this),g(this,"abilities",d,this),g(this,"centerDimensions",p,this),g(this,"downView",f,this),g(this,"downLines",m,this),g(this,"upView",h,this),g(this,"upLines",b,this),g(this,"noMetricsReason",y,this)}drawDownLines(e){const t=["allow","deny"],n={x:this.centerDimensions.x-7,y:this.centerDimensions.y+this.centerDimensions.height/2} -return e.map((e=>{const t=e.getBoundingClientRect(),l={x:t.x+t.width,y:t.y+t.height/2} -return{id:e.id,permission:e.getAttribute("data-permission"),dest:n,src:l}})).sort(((e,n)=>t.indexOf(e.permission)-t.indexOf(n.permission)))}drawUpLines(e){const t=["allow","deny"],n={x:this.centerDimensions.x+5.5,y:this.centerDimensions.y+this.centerDimensions.height/2} -return e.map((e=>{const t=e.getBoundingClientRect(),l={x:t.x-t.width-25,y:t.y+t.height/2} -return{id:e.id,permission:e.getAttribute("data-permission"),dest:l,src:n}})).sort(((e,n)=>t.indexOf(e.permission)-t.indexOf(n.permission)))}emptyColumn(){const e=(0,i.get)(this.args.topology,"noDependencies") -return!this.env.var("CONSUL_ACLS_ENABLED")||e}get downstreams(){const e=(0,i.get)(this.args.topology,"Downstreams")||[],t=[...e],n=(0,i.get)(this.args.topology,"noDependencies") -if(!this.env.var("CONSUL_ACLS_ENABLED")&&n)t.push({Name:"Downstreams unknown.",Empty:!0,Datacenter:"",Namespace:""}) -else if(0===e.length){const e=this.abilities.can("use peers") -t.push({Name:e?"No downstreams, or the downstreams are imported services.":"No downstreams.",Datacenter:"",Namespace:""})}return t}get upstreams(){const e=(0,i.get)(this.args.topology,"Upstreams")||[] -e.forEach((e=>{e.PeerOrDatacenter=e.PeerName||e.Datacenter})) -const t=[...e],n=(0,i.get)(this.args.dc,"DefaultACLPolicy"),l=(0,i.get)(this.args.topology,"wildcardIntention"),r=(0,i.get)(this.args.topology,"noDependencies") -return!this.env.var("CONSUL_ACLS_ENABLED")&&r?t.push({Name:"Upstreams unknown.",Datacenter:"",PeerOrDatacenter:"",Namespace:""}):"allow"===n||l?t.push({Name:"* (All Services)",Datacenter:"",PeerOrDatacenter:"",Namespace:""}):0===e.length&&t.push({Name:"No upstreams.",Datacenter:"",PeerOrDatacenter:"",Namespace:""}),t}get mainNotIngressService(){return"ingress-gateway"!==((0,i.get)(this.args.service.Service,"Kind")||"")}setHeight(e,t){if(e){const n=e.getBoundingClientRect() -document.getElementById(`${t[0]}`).setAttribute("style",`height:${n.height}px`)}this.calculate()}calculate(){this.args.isRemoteDC?this.noMetricsReason="remote-dc":"ingress-gateway"===this.args.service.Service.Kind?this.noMetricsReason="ingress-gateway":this.noMetricsReason=null -const e=document.getElementById("downstream-lines").getBoundingClientRect(),t=document.getElementById("upstream-lines").getBoundingClientRect(),n=document.getElementById("upstream-column") -this.emptyColumn?this.downView={x:e.x,y:e.y,width:e.width,height:e.height+10}:this.downView=e,n&&(this.upView={x:t.x,y:t.y,width:t.width,height:n.getBoundingClientRect().height+10}) -const l=[...document.querySelectorAll("#downstream-container .topology-metrics-card")],r=document.querySelector(".metrics-header"),i=[...document.querySelectorAll("#upstream-column .topology-metrics-card")] -this.centerDimensions=r.getBoundingClientRect(),this.downLines=this.drawDownLines(l),this.upLines=this.drawUpLines(i)}},c=v(s.prototype,"env",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),d=v(s.prototype,"abilities",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p=v(s.prototype,"centerDimensions",[r.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f=v(s.prototype,"downView",[r.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m=v(s.prototype,"downLines",[r.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return[]}}),h=v(s.prototype,"upView",[r.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=v(s.prototype,"upLines",[r.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return[]}}),y=v(s.prototype,"noMetricsReason",[r.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),v(s.prototype,"setHeight",[i.action],Object.getOwnPropertyDescriptor(s.prototype,"setHeight"),s.prototype),v(s.prototype,"calculate",[i.action],Object.getOwnPropertyDescriptor(s.prototype,"calculate"),s.prototype),s) -e.default=P,(0,t.setComponentTemplate)(O,P)})),define("consul-ui/components/topology-metrics/notifications/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"PrGtFY8+",block:'[[[41,[28,[37,1],[[30,1],"create"],null],[[[41,[28,[37,1],[[30,2],"success"],null],[[[1," Your intention has been added.\\n"]],[]],[[[1," There was an error adding your intention.\\n"]],[]]]],[]],[[[41,[28,[37,1],[[30,1],"update"],null],[[[41,[28,[37,1],[[30,2],"success"],null],[[[1," Your intention has been saved.\\n"]],[]],[[[1," There was an error saving your intention.\\n"]],[]]]],[]],null]],[]]],[44,[[30,3,["errors","firstObject"]]],[[[41,[30,4,["detail"]],[[[1," "],[10,"br"],[12],[13],[1,[28,[35,3],["(",[52,[30,4,["status"]],[28,[37,3],[[30,4,["status"]],": "],null]],[30,4,["detail"]],")"],null]],[1,"\\n"]],[]],null]],[4]]],[1,"\\n"]],["@type","@status","@error","error"],false,["if","eq","let","concat"]]',moduleName:"consul-ui/components/topology-metrics/notifications/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/topology-metrics/popover/index",["exports","@ember/component","@ember/template-factory","@glimmer/component"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"2ZmfKieE",block:'[[[11,0],[16,0,[29,["topology-metrics-popover ",[30,1]]]],[17,2],[12],[1,"\\n"],[44,[[28,[37,1],["top:",[30,3,["y"]],"px;left:",[30,3,["x"]],"px;"],null],[52,[28,[37,3],[[30,1],"deny"],null],"Add intention","View intention"]],[[[41,[28,[37,4],[[30,6]],null],[[[41,[28,[37,3],[[30,1],"deny"],null],[[[1," "],[8,[39,5],[[24,0,"dangerous"],[4,[38,6],[[28,[37,7],[[30,0],"popover"],null]],null]],null,[["header","body","actions"],[[[[1,"\\n "],[10,"h3"],[12],[1,"\\n "],[1,[28,[35,8],["components.consul.topology-metrics.popover.deny.header"],null]],[1,"\\n "],[13],[1,"\\n "]],[]],[[[1,"\\n "],[10,2],[12],[1,"\\n"],[41,[30,7,["Intention","HasExact"]],[[[1," "],[1,[28,[35,8],["components.consul.topology-metrics.popover.deny.body.isExact"],null]],[1,"\\n"]],[]],[[[1," "],[1,[28,[35,8],["components.consul.topology-metrics.popover.deny.body.notExact"],null]],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n "]],[]],[[[1,"\\n "],[8,[30,8,["Action"]],[[24,0,"action"]],null,[["default"],[[[[1,"\\n "],[11,"button"],[24,4,"button"],[4,[38,9],["click",[30,9]],null],[12],[1,"\\n"],[41,[30,7,["Intention","HasExact"]],[[[1," "],[1,[28,[35,8],["components.consul.topology-metrics.popover.deny.action.isExact"],null]],[1,"\\n"]],[]],[[[1," "],[1,[28,[35,8],["components.consul.topology-metrics.popover.deny.action.notExact"],null]],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,8,["Action"]],null,null,[["default"],[[[[1,"\\n "],[11,"button"],[24,0,"cancel"],[24,4,"button"],[4,[38,9],["click",[28,[37,10],[[28,[37,11],[[30,0,["popoverController","hide"]]],null]],null]],null],[12],[1,"\\n Cancel\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[8]]]]],[1,"\\n"]],[]],[[[41,[28,[37,3],[[30,1],"not-defined"],null],[[[1," "],[8,[39,5],[[24,0,"warning documentation"],[4,[38,6],[[28,[37,7],[[30,0],"popover"],null]],null]],null,[["header","body","actions"],[[[[1,"\\n "],[10,"h3"],[12],[1,"\\n "],[1,[28,[35,8],["components.consul.topology-metrics.popover.not-defined.header"],null]],[1,"\\n "],[13],[1,"\\n "]],[]],[[[1,"\\n "],[10,2],[12],[1,"\\n "],[1,[28,[35,8],["components.consul.topology-metrics.popover.not-defined.body"],[["downstream","upstream"],[[30,7,["Name"]],[30,10,["Name"]]]]]],[1,"\\n "],[13],[1,"\\n "]],[]],[[[1,"\\n "],[8,[30,11,["Action"]],[[24,0,"action"]],null,[["default"],[[[[1,"\\n "],[10,3],[15,6,[29,[[28,[37,12],["CONSUL_DOCS_URL"],null],"/connect/registration/service-registration#upstreams"]]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[1,"\\n "],[1,[28,[35,8],["components.consul.topology-metrics.popover.not-defined.action"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,11,["Action"]],null,null,[["default"],[[[[1,"\\n "],[11,"button"],[24,0,"cancel"],[24,4,"button"],[4,[38,9],["click",[28,[37,10],[[28,[37,11],[[30,0,["popoverController","hide"]]],null]],null]],null],[12],[1,"\\n Close\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[11]]]]],[1,"\\n"]],[]],[[[1," "],[8,[39,5],[[24,0,"info"],[4,[38,6],[[28,[37,7],[[30,0],"popover"],null]],null]],null,[["header","body","actions"],[[[[1,"\\n "],[10,"h3"],[12],[1,"\\n "],[1,[28,[35,8],["components.consul.topology-metrics.popover.l7.header"],null]],[1,"\\n "],[13],[1,"\\n "]],[]],[[[1,"\\n "],[10,2],[12],[1,"\\n "],[1,[28,[35,8],["components.consul.topology-metrics.popover.l7.body"],null]],[1,"\\n "],[13],[1,"\\n "]],[]],[[[1,"\\n "],[8,[30,12,["Action"]],[[24,0,"action"]],null,[["default"],[[[[1,"\\n "],[10,3],[15,6,[28,[37,13],["dc.services.show.intentions.edit",[28,[37,1],[[30,7,["Intention","ID"]]],null]],null]],[12],[1,"\\n "],[1,[28,[35,8],["components.consul.topology-metrics.popover.l7.action"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,12,["Action"]],null,null,[["default"],[[[[1,"\\n "],[11,"button"],[24,0,"cancel"],[24,4,"button"],[4,[38,9],["click",[28,[37,10],[[28,[37,11],[[30,0,["popoverController","hide"]]],null]],null]],null],[12],[1,"\\n Close\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[12]]]]],[1,"\\n "]],[]]]],[]]],[1," "],[11,"button"],[23,5,[30,4]],[16,"aria-label",[30,5]],[24,4,"button"],[4,[38,14],[[30,0,["popover"]]],[["options","returns"],[[28,[37,15],null,[["theme","placement"],["square-tail","bottom-start"]]],[28,[37,7],[[30,0],"popoverController"],null]]]],[4,[38,9],["click",[28,[37,10],[[28,[37,11],[[30,0,["popoverController","show"]]],null]],null]],null],[12],[1,"\\n "],[13],[1,"\\n"]],[]],[[[1," "],[11,"button"],[23,5,[30,4]],[16,"aria-label",[30,5]],[24,4,"button"],[4,[38,16],[true],null],[12],[1,"\\n "],[13],[1,"\\n"]],[]]]],[4,5]]],[13],[1,"\\n"]],["@type","&attrs","@position","style","label","@disabled","@item","Actions","@oncreate","@service","Actions","Actions"],false,["let","concat","if","eq","not","informed-action","did-insert","set","t","on","fn","optional","env","href-to","with-overlay","hash","disabled"]]',moduleName:"consul-ui/components/topology-metrics/popover/index.hbs",isStrictMode:!1}) -class i extends l.default{}e.default=i,(0,t.setComponentTemplate)(r,i)})),define("consul-ui/components/topology-metrics/series/index",["exports","@ember/component","@ember/template-factory","dayjs","dayjs/plugin/calendar","d3-selection","d3-scale","d3-scale-chromatic","d3-shape","d3-array","@ember/object"],(function(e,t,n,l,r,i,o,a,u,s,c){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const d=(0,n.createTemplateFactory)({id:"AXSuGOoT",block:'[[[41,[28,[37,1],[[30,1]],null],[[[1," "],[8,[39,2],null,[["@src","@onchange","@onerror"],[[28,[37,3],["/${partition}/${nspace}/${dc}/metrics/summary-for-service/${service}/${protocol}",[28,[37,4],null,[["nspace","partition","dc","service","protocol"],[[30,2],[30,3],[30,4],[30,5],[30,6]]]]],null],[28,[37,5],[[30,0],"change"],null],[28,[37,5],[[30,0],[28,[37,6],[[33,7]],null]],[["value"],["error"]]]]],null],[1,"\\n"]],[]],null],[1,"\\n"],[1,[28,[35,8],["resize",[28,[37,5],[[30,0],"redraw"],null]],null]],[1,"\\n"],[1,[28,[35,9],[[28,[37,5],[[30,0],"redraw"],null]],null]],[1,"\\n\\n"],[41,[28,[37,1],[[33,10]],null],[[[41,[33,11,["labels"]],[[[1," "],[11,3],[24,0,"sparkline-key-link"],[4,[38,12],["click",[28,[37,13],[[30,0,["modal","open"]]],null]],null],[12],[1,"\\n Key\\n "],[13],[1,"\\n"]],[]],null]],[]],null],[1,"\\n"],[10,0],[14,0,"sparkline-wrapper"],[12],[1,"\\n "],[10,0],[14,0,"tooltip"],[12],[1,"\\n "],[10,0],[14,0,"sparkline-time"],[12],[1,"Timestamp"],[13],[1,"\\n "],[13],[1,"\\n"],[41,[33,10],[[[1," "],[8,[39,14],null,[["@noMetricsReason","@error"],[[30,1],[99,7,["@error"]]]],null],[1,"\\n"]],[]],null],[1," "],[10,"svg"],[14,0,"sparkline"],[12],[13],[1,"\\n"],[13],[1,"\\n\\n"],[8,[39,15],[[24,0,"sparkline-key"]],[["@aria"],[[28,[37,4],null,[["label"],["Metrics Key"]]]]],[["default"],[[[[1,"\\n "],[8,[39,16],null,[["@target","@name","@value"],[[30,0],"modal",[30,7]]],null],[1,"\\n "],[8,[39,17],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h3"],[12],[1,"Metrics Key"],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,17],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,0],[14,0,"sparkline-key-content"],[12],[1,"\\n "],[10,2],[12],[1,"This key describes the metrics corresponding to the graph tooltip labels in more detail."],[13],[1,"\\n "],[10,"dl"],[12],[1,"\\n"],[42,[28,[37,19],[[33,11,["labels"]]],null],null,[[[1," "],[10,"dt"],[12],[1,[30,9]],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,8]],[13],[1,"\\n"]],[8,9]],null],[1," "],[13],[1,"\\n"],[41,[51,[33,11,["labels"]]],[[[1," "],[10,1],[14,0,"no-data"],[12],[1,"No metrics loaded."],[13],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,17],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[10,"button"],[14,0,"type-cancel"],[15,"onclick",[28,[37,5],[[30,0],[30,7,["close"]]],null]],[14,4,"button"],[12],[1,"\\n Close\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[7]]]]]],["@noMetricsReason","@nspace","@partition","@dc","@service","@protocol","modal","desc","label"],false,["if","not","data-source","uri","hash","action","mut","error","on-window","did-insert","empty","data","on","optional","topology-metrics/status","modal-dialog","ref","block-slot","each","-each-in","unless"]]',moduleName:"consul-ui/components/topology-metrics/series/index.hbs",isStrictMode:!1}) -l.default.extend(r.default) -var p=(0,t.setComponentTemplate)(d,t.default.extend({data:null,empty:!1,actions:{redraw:function(e){this.drawGraphs()},change:function(e){this.set("data",e.data.series),this.drawGraphs(),this.rerender()}},drawGraphs:function(){if(!this.data)return void(0,c.set)(this,"empty",!0) -let e=this.svg=(0,i.select)(this.element.querySelector("svg.sparkline")) -e.on("mouseover mousemove mouseout",null),e.selectAll("path").remove(),e.selectAll("rect").remove() -let t=e.node().getBoundingClientRect(),n=t.width,l=t.height,r=this.data||{},d=r.data||[],p=r.labels||{},f=r.unitSuffix||"",m=Object.keys(p).filter((e=>"Total"!=e)) -if(0==d.length||0==m.length)return void(0,c.set)(this,"empty",!0);(0,c.set)(this,"empty",!1) -let h=(0,u.stack)().keys(m).order(u.stackOrderReverse)(d),b=d.map((e=>{let t=0 -return m.forEach((n=>{t+=e[n]})),t})),y=(0,o.scaleTime)().domain((0,s.extent)(d,(e=>e.time))).range([0,n]),g=(0,o.scaleLinear)().domain([0,(0,s.max)(b)]).range([l,0]),v=(0,u.area)().x((e=>y(e.data.time))).y1((e=>g(e[0]))).y0((e=>g(e[1]))),O=["#DCE0E6","#C73445"].concat(a.schemeTableau10) -m.includes("Outbound")&&(O=["#DCE0E6","#0E40A3"].concat(a.schemeTableau10)) -let P=(0,o.scaleOrdinal)(O).domain(m) -e.selectAll("path").data(h).join("path").attr("fill",(e=>{let{key:t}=e -return P(t)})).attr("stroke",(e=>{let{key:t}=e -return P(t)})).attr("d",v) -let x=e.append("rect").attr("class","cursor").style("visibility","hidden").attr("width",1).attr("height",l).attr("x",0).attr("y",0),w=(0,i.select)(this.element.querySelector(".tooltip")) -for(var j of(w.selectAll(".sparkline-tt-legend").remove(),w.selectAll(".sparkline-tt-sum").remove(),m)){let e=w.append("div").attr("class","sparkline-tt-legend") -e.append("div").attr("class","sparkline-tt-legend-color").style("background-color",P(j)),e.append("span").text(j).append("span").attr("class","sparkline-tt-legend-value")}let _=w.selectAll(".sparkline-tt-legend-value") -m.length>1&&w.append("div").attr("class","sparkline-tt-sum").append("span").text("Total").append("span").attr("class","sparkline-tt-sum-value") -let k=this -e.on("mouseover",(function(e){w.style("visibility","visible"),x.style("visibility","visible"),k.updateTooltip(e,d,h,b,f,y,w,_,x)})).on("mousemove",(function(e){k.updateTooltip(e,d,h,b,f,y,w,_,x)})).on("mouseout",(function(e){w.style("visibility","hidden"),x.style("visibility","hidden")}))},willDestroyElement:function(){this._super(...arguments),void 0!==this.svg&&this.svg.on("mouseover mousemove mouseout",null)},updateTooltip:function(e,t,n,r,o,a,u,c,d){let[p]=(0,i.pointer)(e) -d.attr("x",p) -let m=a.invert(p) -var h=(0,s.bisector)((function(e){return e.time})).left -let b=h(t,m) -var y -u.style("left",p-22+"px").select(".sparkline-time").text((y=m,(0,l.default)(y).calendar(null,{sameDay:"[Today at] h:mm:ss A",lastDay:"[Yesterday at] h:mm:ss A",lastWeek:"[Last] dddd at h:mm:ss A",sameElse:"MMM DD at h:mm:ss A"}))),u.select(".sparkline-tt-sum-value").text(`${f(r[b])}${o}`),c.nodes().forEach(((e,t)=>{let l=n[t][b][1]-n[t][b][0];(0,i.select)(e).text(`${f(l)}${o}`)})),d.attr("x",p)}})) -function f(e){return e<1e3?Number.isInteger(e)?""+e:Number(e>=100?e.toPrecision(3):e<1?e.toFixed(2):e.toPrecision(2)):e>=1e3&&e<1e6?+(e/1e3).toPrecision(3)+"k":e>=1e6&&e<1e9?+(e/1e6).toPrecision(3)+"m":e>=1e9&&e<1e12?+(e/1e9).toPrecision(3)+"g":e>=1e12?+(e/1e12).toFixed(0)+"t":void 0}e.default=p})),define("consul-ui/components/topology-metrics/source-type/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"wl8kyvfj",block:'[[[11,1],[24,0,"topology-metrics-source-type"],[4,[38,0],[[28,[37,1],[[28,[37,2],["components.consul.topology-metrics.source-type.",[30,1],".tooltip"],null]],null]],null],[12],[1,"\\n "],[1,[28,[35,1],[[28,[37,2],["components.consul.topology-metrics.source-type.",[30,1],".text"],null]],null]],[1,"\\n"],[13]],["@source"],false,["tooltip","t","concat"]]',moduleName:"consul-ui/components/topology-metrics/source-type/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/topology-metrics/stats/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@glimmer/tracking","@ember/object"],(function(e,t,n,l,r,i){var o,a,u -function s(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function c(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const d=(0,n.createTemplateFactory)({id:"OvZgaKFU",block:'[[[41,[28,[37,1],[[30,1]],null],[[[1," "],[8,[39,2],null,[["@src","@onchange","@onerror"],[[28,[37,3],["/${partition}/${nspace}/${dc}/metrics/${endpoint}/${service}/${protocol}",[28,[37,4],null,[["nspace","partition","dc","endpoint","service","protocol"],[[30,2],[30,3],[30,4],[30,5],[30,6],[28,[37,5],[[30,7],""],null]]]]],null],[28,[37,6],[[30,0],"statsUpdate"],null],[28,[37,6],[[30,0],[28,[37,7],[[33,8]],null]],[["value"],["error"]]]]],null],[1,"\\n"]],[]],null],[1,"\\n"],[11,0],[17,8],[24,0,"topology-metrics-stats"],[12],[1,"\\n"],[41,[33,9],[[[42,[28,[37,11],[[28,[37,11],[[33,12]],null]],null],null,[[[1," "],[11,"dl"],[4,[38,13],[[30,9,["desc"]]],[["options"],[[28,[37,4],null,[["allowHTML"],[true]]]]]],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n "],[1,[30,9,["value"]]],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[30,9,["label"]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[9]],[[[1," "],[10,1],[12],[1,"No Metrics Available"],[13],[1,"\\n"]],[]]]],[]],[[[1," "],[8,[39,14],null,[["@noMetricsReason","@error"],[[30,1],[99,8,["@error"]]]],null],[1,"\\n"]],[]]],[13]],["@noMetricsReason","@nspace","@partition","@dc","@endpoint","@service","@protocol","&attrs","stat"],false,["if","not","data-source","uri","hash","or","action","mut","error","hasLoaded","each","-track-array","stats","tooltip","topology-metrics/status"]]',moduleName:"consul-ui/components/topology-metrics/stats/index.hbs",isStrictMode:!1}) -let p=(o=class extends l.default{constructor(){super(...arguments),s(this,"stats",a,this),s(this,"hasLoaded",u,this)}statsUpdate(e){if("summary-for-service"==this.args.endpoint)this.stats=e.data.stats -else{let t=this.args.nspace||"" -0===t.length&&(t="default") -let n=`${this.args.item}.${t}.${this.args.dc}` -this.stats=e.data.stats[n]}this.stats=(this.stats||[]).slice(0,4),this.hasLoaded=!0}},a=c(o.prototype,"stats",[r.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),u=c(o.prototype,"hasLoaded",[r.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return!1}}),c(o.prototype,"statsUpdate",[i.action],Object.getOwnPropertyDescriptor(o.prototype,"statsUpdate"),o.prototype),o) -e.default=p,(0,t.setComponentTemplate)(d,p)})),define("consul-ui/components/topology-metrics/status/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"weO6aWlc",block:'[[[41,[28,[37,1],[[30,1],[30,2]],null],[[[1," "],[10,1],[14,0,"topology-metrics-status-error"],[12],[1,"\\n"],[41,[28,[37,2],[[30,1],"ingress-gateway"],null],[[[1," "],[1,[28,[35,3],["components.consul.topology-metrics.status.ingress-gateway"],null]],[1,"\\n"]],[]],[[[41,[28,[37,2],[[30,1],"remote-dc"],null],[[[1," "],[1,[28,[35,3],["components.consul.topology-metrics.status.error"],null]],[1,"\\n "],[11,1],[4,[38,4],[[28,[37,3],["components.consul.topology-metrics.status.remote-dc"],null]],null],[12],[13],[1,"\\n"]],[]],[[[41,[30,2],[[[1," "],[1,[28,[35,3],["components.consul.topology-metrics.status.error"],null]],[1,"\\n "]],[]],null]],[]]]],[]]],[1," "],[13],[1,"\\n"]],[]],[[[1," "],[10,1],[14,0,"topology-metrics-status-loader"],[12],[1,[28,[35,3],["components.consul.topology-metrics.status.loading"],null]],[13],[1,"\\n"]],[]]]],["@noMetricsReason","@error"],false,["if","or","eq","t","tooltip"]]',moduleName:"consul-ui/components/topology-metrics/status/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/components/topology-metrics/up-lines/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@glimmer/tracking","@ember/object","@ember/service"],(function(e,t,n,l,r,i,o){var a,u,s,c -function d(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function p(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const f=(0,n.createTemplateFactory)({id:"MfMA5Fce",block:'[[[41,[28,[37,1],[[30,1,["length"]],0],null],[[[1," "],[11,"svg"],[16,"viewBox",[28,[37,2],[[30,2,["x"]]," ",[30,3,["y"]]," ",[30,3,["width"]]," ",[30,3,["height"]]],null]],[24,"preserveAspectRatio","none"],[4,[38,3],[[30,0,["getIconPositions"]]],null],[4,[38,4],[[30,0,["getIconPositions"]],[30,1]],null],[12],[1,"\\n "],[10,"defs"],[12],[1,"\\n "],[10,"marker"],[15,1,[28,[37,2],[[30,0,["guid"]],"-allow-dot"],null]],[14,0,"allow-dot"],[14,"viewBox","-2 -2 15 15"],[14,"refX","6"],[14,"refY","6"],[14,"markerWidth","6"],[14,"markerHeight","6"],[12],[1,"\\n "],[10,"circle"],[14,"cx","6"],[14,"cy","6"],[14,"r","6"],[12],[13],[1,"\\n "],[13],[1,"\\n "],[10,"marker"],[15,1,[28,[37,2],[[30,0,["guid"]],"-allow-arrow"],null]],[14,0,"allow-arrow"],[14,"viewBox","-1 -1 12 12"],[14,"refX","5"],[14,"refY","5"],[14,"markerWidth","6"],[14,"markerHeight","6"],[14,"orient","auto-start-reverse"],[12],[1,"\\n "],[10,"polygon"],[14,"points","0 0 10 5 0 10"],[12],[13],[1,"\\n "],[13],[1,"\\n "],[10,"marker"],[15,1,[28,[37,2],[[30,0,["guid"]],"-deny-dot"],null]],[14,0,"deny-dot"],[14,"viewBox","-2 -2 15 15"],[14,"refX","6"],[14,"refY","6"],[14,"markerWidth","6"],[14,"markerHeight","6"],[12],[1,"\\n "],[10,"circle"],[14,"cx","6"],[14,"cy","6"],[14,"r","6"],[12],[13],[1,"\\n "],[13],[1,"\\n "],[10,"marker"],[15,1,[28,[37,2],[[30,0,["guid"]],"-deny-arrow"],null]],[14,0,"deny-arrow"],[14,"viewBox","-1 -1 12 12"],[14,"refX","5"],[14,"refY","5"],[14,"markerWidth","6"],[14,"markerHeight","6"],[14,"orient","auto-start-reverse"],[12],[1,"\\n "],[10,"polygon"],[14,"points","0 0 10 5 0 10"],[12],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"],[42,[28,[37,6],[[28,[37,6],[[30,1]],null]],null],null,[[[41,[28,[37,7],[[30,4,["permission"]],"deny"],null],[[[1," "],[10,"path"],[15,1,[28,[37,2],[[30,0,["guid"]],[30,4,["id"]]],null]],[15,"d",[28,[37,8],[[30,4,["dest"]]],[["src"],[[30,4,["src"]]]]]],[15,"marker-start",[28,[37,2],["url(#",[30,0,["guid"]],"-deny-dot)"],null]],[15,"marker-end",[28,[37,2],["url(#",[30,0,["guid"]],"-deny-arrow)"],null]],[15,"data-permission",[30,4,["permission"]]],[12],[13],[1,"\\n"]],[]],[[[1," "],[10,"path"],[15,1,[28,[37,2],[[30,0,["guid"]],[30,4,["id"]]],null]],[15,"d",[28,[37,8],[[30,4,["dest"]]],[["src"],[[30,4,["src"]]]]]],[15,"marker-start",[28,[37,2],["url(#",[30,0,["guid"]],"-allow-dot)"],null]],[15,"marker-end",[28,[37,2],["url(#",[30,0,["guid"]],"-allow-arrow)"],null]],[15,"data-permission",[30,4,["permission"]]],[12],[13],[1,"\\n"]],[]]]],[4]],null],[1," "],[13],[1,"\\n"]],[]],null],[42,[28,[37,6],[[28,[37,6],[[30,5]],null]],null],null,[[[41,[28,[37,9],[[28,[37,10],[[30,6,["Datacenter"]],""],null],[28,[37,11],[[28,[37,12],[[30,6,["Intention","Allowed"]]],null],[30,6,["Intention","HasPermissions"]]],null]],null],[[[1," "],[8,[39,13],null,[["@type","@position","@item","@disabled","@oncreate"],[[52,[30,6,["Intention","HasPermissions"]],"l7","deny"],[28,[37,14],["id",[28,[37,2],[[30,0,["guid"]],[30,6,["Namespace"]],[30,6,["Name"]]],null],[30,0,["iconPositions"]]],null],[30,6],false,[28,[37,15],[[30,0],[30,7],[30,8],[30,6]],null]]],null],[1,"\\n"]],[]],null]],[6]],null]],["@lines","@center","@view","line","@items","item","@oncreate","@service"],false,["if","gt","concat","did-insert","did-update","each","-track-array","eq","svg-curve","and","not-eq","or","not","topology-metrics/popover","find-by","action"]]',moduleName:"consul-ui/components/topology-metrics/up-lines/index.hbs",isStrictMode:!1}) -let m=(a=(0,o.inject)("dom"),u=class extends l.default{constructor(){super(...arguments),d(this,"iconPositions",s,this),d(this,"dom",c,this)}get guid(){return this.dom.guid(this)}getIconPositions(){const e=this.args.center,t=this.args.view,n=[...document.querySelectorAll("#upstream-lines path")] -this.iconPositions=n.map((n=>{const l=parseFloat(n.getTotalLength()),r=n.getPointAtLength(Math.ceil(.666*l)) -return{id:n.id,x:Math.round(r.x-e.x),y:Math.round(r.y-t.y)}}))}},s=p(u.prototype,"iconPositions",[r.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),c=p(u.prototype,"dom",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p(u.prototype,"getIconPositions",[i.action],Object.getOwnPropertyDescriptor(u.prototype,"getIconPositions"),u.prototype),u) -e.default=m,(0,t.setComponentTemplate)(f,m)})),define("consul-ui/components/torii-iframe-placeholder",["exports","torii/components/torii-iframe-placeholder"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=t.default -e.default=n})),define("consul-ui/components/vertical-collection",["exports","@html-next/vertical-collection/components/vertical-collection/component"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/watcher/index",["exports","@ember/component","@ember/template-factory","@glimmer/component","@ember/object","@glimmer/tracking","@ember/runloop","@ember/service"],(function(e,t,n,l,r,i,o,a){var u,s,c,d -function p(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function f(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const m=(0,n.createTemplateFactory)({id:"WK8VbrJT",block:'[[[18,1,[[28,[37,1],null,[["fns"],[[28,[37,1],null,[["start","stop"],[[30,0,["start"]],[30,0,["stop"]]]]]]]]]],[1,"\\n"]],["&default"],false,["yield","hash"]]',moduleName:"consul-ui/components/watcher/index.hbs",isStrictMode:!1}) -let h=(u=class extends l.default{constructor(){super(...arguments),p(this,"env",s,this),p(this,"_isPolling",c,this),p(this,"cancel",d,this)}get timeout(){return this.isTesting?300:this.args.timeout||1e4}get isTesting(){return"testing"===this.env.var("environment")}get isPolling(){const{isTesting:e,_isPolling:t}=this -return!e&&t}start(){this._isPolling=!0,this.watchTask()}stop(){this._isPolling=!1,(0,o.cancel)(this.cancel)}watchTask(){const e=(0,o.later)(this,(()=>{var e,t -null===(e=(t=this.args).watch)||void 0===e||e.call(t),this.isPolling&&this.watchTask()}),this.timeout) -this.cancel=e}},s=f(u.prototype,"env",[a.inject],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),c=f(u.prototype,"_isPolling",[i.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return!1}}),d=f(u.prototype,"cancel",[i.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),f(u.prototype,"start",[r.action],Object.getOwnPropertyDescriptor(u.prototype,"start"),u.prototype),f(u.prototype,"stop",[r.action],Object.getOwnPropertyDescriptor(u.prototype,"stop"),u.prototype),u) -e.default=h,(0,t.setComponentTemplate)(m,h)})),define("consul-ui/components/yield-slot",["exports","block-slots/components/yield-slot"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/yield/index",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.createTemplateFactory)({id:"uvrXCen3",block:'[[[18,1,null],[1,"\\n"]],["&default"],false,["yield"]]',moduleName:"consul-ui/components/yield/index.hbs",isStrictMode:!1}) -var i=(0,t.setComponentTemplate)(r,(0,l.default)()) -e.default=i})),define("consul-ui/controllers/_peered-resource",["exports","@ember/controller","@ember/service"],(function(e,t,n){var l,r -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let i=(l=class extends t.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="abilities",l=this,(n=r)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}get _searchProperties(){const{searchProperties:e}=this -return this.abilities.can("use peers")?e:e.filter((e=>"PeerName"!==e))}},o=l.prototype,a="abilities",u=[n.inject],s={configurable:!0,enumerable:!0,writable:!0,initializer:null},d={},Object.keys(s).forEach((function(e){d[e]=s[e]})),d.enumerable=!!d.enumerable,d.configurable=!!d.configurable,("value"in d||d.initializer)&&(d.writable=!0),d=u.slice().reverse().reduce((function(e,t){return t(o,a,e)||e}),d),c&&void 0!==d.initializer&&(d.value=d.initializer?d.initializer.call(c):void 0,d.initializer=void 0),void 0===d.initializer&&(Object.defineProperty(o,a,d),d=null),r=d,l) -var o,a,u,s,c,d -e.default=i})),define("consul-ui/controllers/application",["exports","@ember/service","@ember/controller","@ember/application","@ember/object","consul-ui/utils/routing/transitionable"],(function(e,t,n,l,r,i){var o,a,u,s,c,d,p -function f(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function m(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let h=(o=(0,t.inject)("router"),a=(0,t.inject)("store"),u=(0,t.inject)("feedback"),s=class extends n.default{constructor(){super(...arguments),f(this,"router",c,this),f(this,"store",d,this),f(this,"feedback",p,this)}reauthorize(e){this.feedback.execute((()=>{this.store.invalidate() -const t={} -if(e.data){const n=e.data -if(void 0!==this.nspace){const e=(0,r.get)(n,"Namespace")||this.nspace.Name -e!==this.nspace.Name&&(t.nspace=`${e}`)}}const n=(0,l.getOwner)(this),o=this.router.currentRoute.name,a=n.lookup(`route:${o}`) -return n.lookup("route:application").refresh().promise.catch((function(e){})).then((e=>o!==this.router.currentRouteName||void 0!==t.nspace?a.transitionTo(...(0,i.default)(this.router.currentRoute,t,n)):e))}),e.type,(function(e,t){return e}),{})}},c=m(s.prototype,"router",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),d=m(s.prototype,"store",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p=m(s.prototype,"feedback",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m(s.prototype,"reauthorize",[r.action],Object.getOwnPropertyDescriptor(s.prototype,"reauthorize"),s.prototype),s) -e.default=h})),define("consul-ui/controllers/dc/acls/policies/create",["exports","consul-ui/controllers/dc/acls/policies/edit"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{}e.default=n})),define("consul-ui/controllers/dc/acls/policies/edit",["exports","@ember/service","@ember/controller"],(function(e,t,n){var l,r,i -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let o=(l=(0,t.inject)("form"),r=class extends n.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="builder",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}init(){super.init(...arguments),this.form=this.builder.form("policy")}setProperties(e){super.setProperties(Object.keys(e).reduce(((e,t,n)=>{if("item"===t)e[t]=this.form.setData(e[t]).getData() -return e}),e))}},a=r.prototype,u="builder",s=[l],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},p={},Object.keys(c).forEach((function(e){p[e]=c[e]})),p.enumerable=!!p.enumerable,p.configurable=!!p.configurable,("value"in p||p.initializer)&&(p.writable=!0),p=s.slice().reverse().reduce((function(e,t){return t(a,u,e)||e}),p),d&&void 0!==p.initializer&&(p.value=p.initializer?p.initializer.call(d):void 0,p.initializer=void 0),void 0===p.initializer&&(Object.defineProperty(a,u,p),p=null),i=p,r) -var a,u,s,c,d,p -e.default=o})) -define("consul-ui/controllers/dc/acls/roles/create",["exports","consul-ui/controllers/dc/acls/roles/edit"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{}e.default=n})),define("consul-ui/controllers/dc/acls/roles/edit",["exports","@ember/service","@ember/controller"],(function(e,t,n){var l,r,i -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let o=(l=(0,t.inject)("form"),r=class extends n.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="builder",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}init(){super.init(...arguments),this.form=this.builder.form("role")}setProperties(e){super.setProperties(Object.keys(e).reduce(((e,t,n)=>{if("item"===t)e[t]=this.form.setData(e[t]).getData() -return e}),e))}},a=r.prototype,u="builder",s=[l],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},p={},Object.keys(c).forEach((function(e){p[e]=c[e]})),p.enumerable=!!p.enumerable,p.configurable=!!p.configurable,("value"in p||p.initializer)&&(p.writable=!0),p=s.slice().reverse().reduce((function(e,t){return t(a,u,e)||e}),p),d&&void 0!==p.initializer&&(p.value=p.initializer?p.initializer.call(d):void 0,p.initializer=void 0),void 0===p.initializer&&(Object.defineProperty(a,u,p),p=null),i=p,r) -var a,u,s,c,d,p -e.default=o})),define("consul-ui/controllers/dc/acls/tokens/create",["exports","consul-ui/controllers/dc/acls/tokens/edit"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{}e.default=n})),define("consul-ui/controllers/dc/acls/tokens/edit",["exports","@ember/controller","@ember/service"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var l=t.default.extend({dom:(0,n.inject)("dom"),builder:(0,n.inject)("form"),isScoped:!1,init:function(){this._super(...arguments),this.form=this.builder.form("token")},setProperties:function(e){this._super(Object.keys(e).reduce(((e,t,n)=>{if("item"===t)e[t]=this.form.setData(e[t]).getData() -return e}),e))},actions:{change:function(e,t,n){const l=this.dom.normalizeEvent(e,t),r=this.form -try{r.handleEvent(l)}catch(i){throw l.target.name,i}}}}) -e.default=l})),define("consul-ui/controllers/dc/nodes/index",["exports","consul-ui/controllers/_peered-resource"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{}e.default=n})),define("consul-ui/controllers/dc/peers/index",["exports","@ember/controller","@ember/service"],(function(e,t,n){var l,r -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let i=(l=class extends t.default{constructor(){var e,t,n,l,i,o,a -super(...arguments),e=this,t="router",l=this,(n=r)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0}),a=(e,t)=>{null==e||e(),this.router.transitionTo("dc.peers.show",t.Name)},(o="redirectToPeerShow")in(i=this)?Object.defineProperty(i,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):i[o]=a}},o=l.prototype,a="router",u=[n.inject],s={configurable:!0,enumerable:!0,writable:!0,initializer:null},d={},Object.keys(s).forEach((function(e){d[e]=s[e]})),d.enumerable=!!d.enumerable,d.configurable=!!d.configurable,("value"in d||d.initializer)&&(d.writable=!0),d=u.slice().reverse().reduce((function(e,t){return t(o,a,e)||e}),d),c&&void 0!==d.initializer&&(d.value=d.initializer?d.initializer.call(c):void 0,d.initializer=void 0),void 0===d.initializer&&(Object.defineProperty(o,a,d),d=null),r=d,l) -var o,a,u,s,c,d -e.default=i})),define("consul-ui/controllers/dc/peers/show/exported",["exports","@ember/controller","@glimmer/tracking","@ember/object"],(function(e,t,n,l){var r,i -function o(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let a=(r=class extends t.default{constructor(){var e,t,n,l,r,o,a -super(...arguments),n={search:{as:"filter"}},(t="queryParams")in(e=this)?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,l=this,r="search",a=this,(o=i)&&Object.defineProperty(l,r,{enumerable:o.enumerable,configurable:o.configurable,writable:o.writable,value:o.initializer?o.initializer.call(a):void 0})}updateSearch(e){this.search=e}},i=o(r.prototype,"search",[n.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return""}}),o(r.prototype,"updateSearch",[l.action],Object.getOwnPropertyDescriptor(r.prototype,"updateSearch"),r.prototype),r) -e.default=a})),define("consul-ui/controllers/dc/peers/show/index",["exports","@ember/controller","@ember/service","@ember/object"],(function(e,t,n,l){var r,i -function o(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let a=(r=class extends t.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="router",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}transitionToImported(){this.router.replaceWith("dc.peers.show.imported")}},i=o(r.prototype,"router",[n.inject],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),o(r.prototype,"transitionToImported",[l.action],Object.getOwnPropertyDescriptor(r.prototype,"transitionToImported"),r.prototype),r) -e.default=a})),define("consul-ui/controllers/dc/services/index",["exports","consul-ui/controllers/_peered-resource"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{}e.default=n})),define("consul-ui/controllers/dc/services/instance/healthchecks",["exports","@ember/controller","@ember/object"],(function(e,t,n){var l -function r(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let i=(r((l=class extends t.default{syntheticNodeSearchPropertyFilter(e,t){var n -return!(null!==(n=e.Node.Meta)&&void 0!==n&&n["synthetic-node"]&&"Node"===t)}syntheticNodeHealthCheckFilter(e,t,n,l){var r -return!(null!==(r=e.Node.Meta)&&void 0!==r&&r["synthetic-node"]&&"node"===(null==t?void 0:t.Kind))}}).prototype,"syntheticNodeSearchPropertyFilter",[n.action],Object.getOwnPropertyDescriptor(l.prototype,"syntheticNodeSearchPropertyFilter"),l.prototype),r(l.prototype,"syntheticNodeHealthCheckFilter",[n.action],Object.getOwnPropertyDescriptor(l.prototype,"syntheticNodeHealthCheckFilter"),l.prototype),l) -e.default=i})),define("consul-ui/data-adapter",["exports","@ember-data/debug"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/decorators/data-source",["exports","@ember/debug","wayfarer"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.match=e.default=void 0 -const l=(0,n.default)(),r={} -e.default=e=>(n,i,o)=>((0,t.runInDebug)((()=>{r[e]={cls:n,method:i}})),l.on(e,(function(e,t,l){const r=t.lookup("service:container").get(n) -return t=>o.value.apply(r,[e,t,l])})),o) -e.match=e=>l.match(e),(0,t.runInDebug)((()=>{window.DataSourceRoutes=()=>{const e=window.ConsulUi.__container__.lookup("service:container"),t=window.open("","_blank") -t.document.write(`\n\n
      \n${Object.entries(r).map((t=>{let[n,l]=t,r=e.keyForClass(l.cls).split("/").pop()
      -return r=r.split("-").map((e=>`${e[0].toUpperCase()}${e.substr(1)}`)).join(""),`${n}\n      ${r}Repository.${l.method}(params)\n\n`})).join("")}\n  
      \n\n `),t.focus()}}))})),define("consul-ui/decorators/replace",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.nullValue=e.replace=void 0 -const t=(e,t)=>(n,l,r)=>({get:function(){const n=r.get.apply(this,arguments) -return n===e?t:n},set:function(){return r.set.apply(this,arguments)}}) -e.replace=t -e.nullValue=function(e){return t(null,e)} -var n=t -e.default=n})),define("consul-ui/env",["exports","consul-ui/config/environment","consul-ui/utils/get-environment"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.env=void 0 -const l=(0,n.default)(t.default,window,document) -e.env=l})),define("consul-ui/filter/predicates/auth-method",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={kind:{kubernetes:(e,t)=>e.Type===t,jwt:(e,t)=>e.Type===t,oidc:(e,t)=>e.Type===t},source:{local:(e,t)=>e.TokenLocality===t,global:(e,t)=>e.TokenLocality===t}}})),define("consul-ui/filter/predicates/health-check",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={status:{passing:(e,t)=>e.Status===t,warning:(e,t)=>e.Status===t,critical:(e,t)=>e.Status===t},kind:{service:(e,t)=>e.Kind===t,node:(e,t)=>e.Kind===t},check:{serf:(e,t)=>e.Type===t,script:(e,t)=>e.Type===t,http:(e,t)=>e.Type===t,tcp:(e,t)=>e.Type===t,ttl:(e,t)=>e.Type===t,docker:(e,t)=>e.Type===t,grpc:(e,t)=>e.Type===t,alias:(e,t)=>e.Type===t}}})),define("consul-ui/filter/predicates/intention",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={access:{allow:(e,t)=>e.Action===t,deny:(e,t)=>e.Action===t,"app-aware":(e,t)=>void 0===e.Action}}})),define("consul-ui/filter/predicates/kv",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={kind:{folder:(e,t)=>e.isFolder,key:(e,t)=>!e.isFolder}}})),define("consul-ui/filter/predicates/node",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={status:{passing:(e,t)=>e.Status===t,warning:(e,t)=>e.Status===t,critical:(e,t)=>e.Status===t}}})),define("consul-ui/filter/predicates/peer",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={state:{pending:(e,t)=>e.State.toLowerCase()===t,establishing:(e,t)=>e.State.toLowerCase()===t,active:(e,t)=>e.State.toLowerCase()===t,failing:(e,t)=>e.State.toLowerCase()===t,terminated:(e,t)=>e.State.toLowerCase()===t,deleting:(e,t)=>e.State.toLowerCase()===t}}})),define("consul-ui/filter/predicates/policy",["exports","mnemonist/set"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n={kind:{"global-management":(e,t)=>e.isGlobalManagement,standard:(e,t)=>!e.isGlobalManagement},datacenter:(e,n)=>void 0===e.Datacenters||t.default.intersectionSize(n,new Set(e.Datacenters))>0} -e.default=n})),define("consul-ui/filter/predicates/service-instance",["exports","mnemonist/set"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n={status:{passing:(e,t)=>e.Status===t,warning:(e,t)=>e.Status===t,critical:(e,t)=>e.Status===t,empty:(e,t)=>0===e.ServiceChecks.length},source:(e,n)=>0!==t.default.intersectionSize(n,new Set(e.ExternalSources||[]))} -e.default=n})),define("consul-ui/filter/predicates/service",["exports","mnemonist/set"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n={kind:{"api-gateway":(e,t)=>e.Kind===t,"ingress-gateway":(e,t)=>e.Kind===t,"terminating-gateway":(e,t)=>e.Kind===t,"mesh-gateway":(e,t)=>e.Kind===t,service:(e,t)=>!e.Kind,"in-mesh":(e,t)=>e.InMesh,"not-in-mesh":(e,t)=>!e.InMesh},status:{passing:(e,t)=>e.MeshStatus===t,warning:(e,t)=>e.MeshStatus===t,critical:(e,t)=>e.MeshStatus===t,empty:(e,t)=>0===e.MeshChecksTotal,unknown:e=>e.peerIsFailing||e.isZeroCountButPeered},instance:{registered:(e,t)=>e.InstanceCount>0,"not-registered":(e,t)=>0===e.InstanceCount},source:(e,n)=>{let l=!1 -return n.includes("consul")&&(l=!e.ExternalSources||0===e.ExternalSources.length||1===e.ExternalSources.length&&""===e.ExternalSources[0]||e.PeerName),0!==t.default.intersectionSize(n,new Set(e.ExternalSources||[]))||n.includes(e.Partition)||l}} -e.default=n})),define("consul-ui/filter/predicates/token",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={kind:{"global-management":(e,t)=>e.isGlobalManagement,global:(e,t)=>!e.Local,local:(e,t)=>e.Local}}})),define("consul-ui/flash/object",["exports","ember-cli-flash/flash/object"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/formats",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={time:{hhmmss:{hour:"numeric",minute:"numeric",second:"numeric"}},date:{hhmmss:{hour:"numeric",minute:"numeric",second:"numeric"}},number:{compact:{notation:"compact"},EUR:{style:"currency",currency:"EUR",minimumFractionDigits:2,maximumFractionDigits:2},USD:{style:"currency",currency:"USD",minimumFractionDigits:2,maximumFractionDigits:2}}}})),define("consul-ui/forms/intention",["exports","consul-ui/validations/intention","consul-ui/utils/form/builder"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.default,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:l -return i(n,{}).setValidators(r)} -const l=(0,n.default)()})),define("consul-ui/forms/kv",["exports","consul-ui/validations/kv","consul-ui/utils/form/builder"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.default,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:l -return i(n,{}).setValidators(r)} -const l=(0,n.default)()})),define("consul-ui/forms/policy",["exports","consul-ui/validations/policy","consul-ui/utils/form/builder"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"policy",r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.default,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:l -return i(n,{Datacenters:{type:"array"}}).setValidators(r)} -const l=(0,n.default)()})),define("consul-ui/forms/role",["exports","consul-ui/validations/role","consul-ui/utils/form/builder"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"role",r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.default,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:l -return i(n,{}).setValidators(r).add(e.form("policy"))} -const l=(0,n.default)()})) -define("consul-ui/forms/token",["exports","consul-ui/validations/token","consul-ui/utils/form/builder"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.default,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:l -return i(n,{}).setValidators(r).add(e.form("policy")).add(e.form("role"))} -const l=(0,n.default)()})),define("consul-ui/helpers/-element",["exports","ember-element-helper/helpers/-element"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/abs",["exports","ember-math-helpers/helpers/abs"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"abs",{enumerable:!0,get:function(){return t.abs}})})),define("consul-ui/helpers/acos",["exports","ember-math-helpers/helpers/acos"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"acos",{enumerable:!0,get:function(){return t.acos}})})),define("consul-ui/helpers/acosh",["exports","ember-math-helpers/helpers/acosh"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"acosh",{enumerable:!0,get:function(){return t.acosh}})})),define("consul-ui/helpers/add",["exports","ember-math-helpers/helpers/add"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"add",{enumerable:!0,get:function(){return t.add}})})),define("consul-ui/helpers/adopt-styles",["exports","@ember/component/helper","@ember/debug","@lit/reactive-element"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class r extends t.default{compute(e,t){let[n,r]=e -Array.isArray(r)||(r=[r]),(0,l.adoptStyles)(n,r)}}e.default=r})),define("consul-ui/helpers/and",["exports","ember-truth-helpers/helpers/and"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"and",{enumerable:!0,get:function(){return t.and}})})),define("consul-ui/helpers/app-version",["exports","@ember/component/helper","consul-ui/config/environment","ember-cli-app-version/utils/regexp"],(function(e,t,n,l){function r(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} -const r=n.default.APP.version -let i=t.versionOnly||t.hideSha,o=t.shaOnly||t.hideVersion,a=null -return i&&(t.showExtended&&(a=r.match(l.versionExtendedRegExp)),a||(a=r.match(l.versionRegExp))),o&&(a=r.match(l.shaRegExp)),a?a[0]:r}Object.defineProperty(e,"__esModule",{value:!0}),e.appVersion=r,e.default=void 0 -var i=(0,t.helper)(r) -e.default=i})),define("consul-ui/helpers/append",["exports","ember-composable-helpers/helpers/append"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"append",{enumerable:!0,get:function(){return t.append}})})),define("consul-ui/helpers/array-concat",["exports","ember-array-fns/helpers/array-concat"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"arrayConcat",{enumerable:!0,get:function(){return t.arrayConcat}})})),define("consul-ui/helpers/array-every",["exports","ember-array-fns/helpers/array-every"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"arrayEvery",{enumerable:!0,get:function(){return t.arrayEvery}})})),define("consul-ui/helpers/array-filter",["exports","ember-array-fns/helpers/array-filter"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"arrayFilter",{enumerable:!0,get:function(){return t.arrayFilter}})})),define("consul-ui/helpers/array-find-index",["exports","ember-array-fns/helpers/array-find-index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"arrayFindIndex",{enumerable:!0,get:function(){return t.arrayFindIndex}})})),define("consul-ui/helpers/array-find",["exports","ember-array-fns/helpers/array-find"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"arrayFind",{enumerable:!0,get:function(){return t.arrayFind}})})),define("consul-ui/helpers/array-includes",["exports","ember-array-fns/helpers/array-includes"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"arrayIncludes",{enumerable:!0,get:function(){return t.arrayIncludes}})})),define("consul-ui/helpers/array-index-of",["exports","ember-array-fns/helpers/array-index-of"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"arrayIndexOf",{enumerable:!0,get:function(){return t.arrayIndexOf}})})),define("consul-ui/helpers/array-is-array",["exports","ember-array-fns/helpers/array-is-array"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"arrayIsArray",{enumerable:!0,get:function(){return t.arrayIsArray}})})),define("consul-ui/helpers/array-is-first-element",["exports","ember-array-fns/helpers/array-is-first-element"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"arrayIsFirstElement",{enumerable:!0,get:function(){return t.arrayIsFirstElement}})})),define("consul-ui/helpers/array-is-last-element",["exports","ember-array-fns/helpers/array-is-last-element"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"arrayIsLastElement",{enumerable:!0,get:function(){return t.arrayIsLastElement}})})),define("consul-ui/helpers/array-join",["exports","ember-array-fns/helpers/array-join"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"arrayJoin",{enumerable:!0,get:function(){return t.arrayJoin}})})),define("consul-ui/helpers/array-last-index-of",["exports","ember-array-fns/helpers/array-last-index-of"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"arrayLastIndexOf",{enumerable:!0,get:function(){return t.arrayLastIndexOf}})})),define("consul-ui/helpers/array-map",["exports","ember-array-fns/helpers/array-map"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"arrayMap",{enumerable:!0,get:function(){return t.arrayMap}})})),define("consul-ui/helpers/array-reduce",["exports","ember-array-fns/helpers/array-reduce"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"arrayReduce",{enumerable:!0,get:function(){return t.arrayReduce}})})),define("consul-ui/helpers/array-reverse",["exports","ember-array-fns/helpers/array-reverse"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"arrayReverse",{enumerable:!0,get:function(){return t.arrayReverse}})})),define("consul-ui/helpers/array-slice",["exports","ember-array-fns/helpers/array-slice"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"arraySlice",{enumerable:!0,get:function(){return t.arraySlice}})})),define("consul-ui/helpers/array-some",["exports","ember-array-fns/helpers/array-some"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"arraySome",{enumerable:!0,get:function(){return t.arraySome}})})),define("consul-ui/helpers/array-sort",["exports","ember-array-fns/helpers/array-sort"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"arraySort",{enumerable:!0,get:function(){return t.arraySort}})})),define("consul-ui/helpers/array-splice",["exports","ember-array-fns/helpers/array-splice"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"arraySplice",{enumerable:!0,get:function(){return t.arraySplice}})})),define("consul-ui/helpers/asin",["exports","ember-math-helpers/helpers/asin"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"asin",{enumerable:!0,get:function(){return t.asin}})})) -define("consul-ui/helpers/asinh",["exports","ember-math-helpers/helpers/asinh"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"asinh",{enumerable:!0,get:function(){return t.asinh}})})),define("consul-ui/helpers/assign",["exports","ember-assign-helper/helpers/assign"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"assign",{enumerable:!0,get:function(){return t.assign}})})),define("consul-ui/helpers/atan",["exports","ember-math-helpers/helpers/atan"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"atan",{enumerable:!0,get:function(){return t.atan}})})),define("consul-ui/helpers/atan2",["exports","ember-math-helpers/helpers/atan2"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"atan2",{enumerable:!0,get:function(){return t.atan2}})})),define("consul-ui/helpers/atanh",["exports","ember-math-helpers/helpers/atanh"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"atanh",{enumerable:!0,get:function(){return t.atanh}})})),define("consul-ui/helpers/atob",["exports","@ember/component/helper","consul-ui/utils/atob"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var l=(0,t.helper)((function(e){let[t=""]=e -return(0,n.default)(t)})) -e.default=l})),define("consul-ui/helpers/block-params",["exports","block-slots/helpers/block-params"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/cached-model",["exports","@ember/component/helper","@ember/application"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class l extends t.default{compute(e,t){let[l,r]=e -return(0,n.getOwner)(this).lookup(`service:repository/${l}`).cached(r)}}e.default=l})),define("consul-ui/helpers/call",["exports","ember-composable-helpers/helpers/call"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"call",{enumerable:!0,get:function(){return t.call}})})),define("consul-ui/helpers/can",["exports","ember-can/helpers/can"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/cancel-all",["exports","ember-concurrency/helpers/cancel-all"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/cannot",["exports","ember-can/helpers/cannot"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/capitalize",["exports","ember-cli-string-helpers/helpers/capitalize"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"capitalize",{enumerable:!0,get:function(){return t.capitalize}})})),define("consul-ui/helpers/cbrt",["exports","ember-math-helpers/helpers/cbrt"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"cbrt",{enumerable:!0,get:function(){return t.cbrt}})})),define("consul-ui/helpers/ceil",["exports","ember-math-helpers/helpers/ceil"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"ceil",{enumerable:!0,get:function(){return t.ceil}})})),define("consul-ui/helpers/changeset-get",["exports","ember-changeset/helpers/changeset-get"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/changeset-set",["exports","ember-changeset/helpers/changeset-set"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"changesetSet",{enumerable:!0,get:function(){return t.changesetSet}})})),define("consul-ui/helpers/changeset",["exports","ember-changeset-validations/helpers/changeset"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"changeset",{enumerable:!0,get:function(){return t.changeset}})})),define("consul-ui/helpers/chunk",["exports","ember-composable-helpers/helpers/chunk"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"chunk",{enumerable:!0,get:function(){return t.chunk}})})),define("consul-ui/helpers/class-map",["exports","@ember/component/helper"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.helper)((e=>{const t=e.filter(Boolean).filter((e=>"string"==typeof e||e[e.length-1])).map((e=>"string"==typeof e?e:e[0])).join(" ") -return t.length>0?t:void 0})) -e.default=n})),define("consul-ui/helpers/classify",["exports","ember-cli-string-helpers/helpers/classify"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"classify",{enumerable:!0,get:function(){return t.classify}})})),define("consul-ui/helpers/clz32",["exports","ember-math-helpers/helpers/clz32"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"clz32",{enumerable:!0,get:function(){return t.clz32}})})),define("consul-ui/helpers/collection",["exports","@ember/component/helper","@ember/object","consul-ui/models/service","consul-ui/models/service-instance"],(function(e,t,n,l,r){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const i={service:l.Collection,"service-instance":r.Collection} -class o{}class a extends t.default{compute(e,t){let[l,r]=e -if(l.length>0){const e=(0,n.get)(l,"firstObject")._internalModel.modelName -return new(0,i[e])(l)}return new o}}e.default=a})),define("consul-ui/helpers/compact",["exports","ember-composable-helpers/helpers/compact"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/compute",["exports","ember-composable-helpers/helpers/compute"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"compute",{enumerable:!0,get:function(){return t.compute}})})),define("consul-ui/helpers/contains",["exports","ember-composable-helpers/helpers/contains"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"contains",{enumerable:!0,get:function(){return t.contains}})})),define("consul-ui/helpers/cos",["exports","ember-math-helpers/helpers/cos"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"cos",{enumerable:!0,get:function(){return t.cos}})})),define("consul-ui/helpers/cosh",["exports","ember-math-helpers/helpers/cosh"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"cosh",{enumerable:!0,get:function(){return t.cosh}})})),define("consul-ui/helpers/css-map",["exports","@ember/component/helper","@lit/reactive-element"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var l=(0,t.helper)((e=>e.filter((e=>e instanceof n.CSSResult||e[e.length-1])).map((e=>e instanceof n.CSSResult?e:e[0])))) -e.default=l})),define("consul-ui/helpers/css",["exports","@ember/component/helper","@lit/reactive-element"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class l extends t.default{compute(e,t){let[l]=e -return(0,n.css)([l])}}e.default=l})) -define("consul-ui/helpers/dec",["exports","ember-composable-helpers/helpers/dec"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"dec",{enumerable:!0,get:function(){return t.dec}})})),define("consul-ui/helpers/did-insert",["exports","ember-render-helpers/helpers/did-insert"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/did-update",["exports","ember-render-helpers/helpers/did-update"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/div",["exports","ember-math-helpers/helpers/div"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"div",{enumerable:!0,get:function(){return t.div}})})),define("consul-ui/helpers/document-attrs",["exports","@ember/component/helper","@ember/service","@ember/debug","mnemonist/multi-map"],(function(e,t,n,l,r){var i,o,a -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const u=new Map,s=new WeakMap -let c=(i=(0,n.inject)("-document"),o=class extends t.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="document",l=this,(n=a)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}compute(e,t){this.synchronize(this.document.documentElement,t)}willDestroy(){this.synchronize(this.document.documentElement),s.delete(this)}synchronize(e,t){const n=s.get(this) -return n&&Object.entries(n).forEach((e=>{let[t,n]=e,l=u.get(t) -void 0!==l&&[...new Set(n.split(" "))].map((e=>l.remove(e,this)))})),t&&(s.set(this,t),[...Object.entries(t)].forEach((e=>{let[t,n]=e,l=u.get(t) -void 0===l&&(l=new r.default(Set),u.set(t,l)),[...new Set(n.split(" "))].map((e=>{0===l.count(e)&&l.set(e,null),l.set(e,this)}))}))),[...u.entries()].forEach((t=>{let[n,r]=t,i="attr" -"class"===n?i=n:n.startsWith("data-")&&(i="data"),[...r.keys()].forEach((t=>{if(1===r.count(t)){if("class"===i)e.classList.remove(t) -else(0,l.runInDebug)((()=>{throw new Error(`${i} is not implemented yet`)})) -r.delete(t),0===r.size&&u.delete(n)}else if("class"===i)e.classList.add(t) -else(0,l.runInDebug)((()=>{throw new Error(`${i} is not implemented yet`)}))}))})),u}},d=o.prototype,p="document",f=[i],m={configurable:!0,enumerable:!0,writable:!0,initializer:null},b={},Object.keys(m).forEach((function(e){b[e]=m[e]})),b.enumerable=!!b.enumerable,b.configurable=!!b.configurable,("value"in b||b.initializer)&&(b.writable=!0),b=f.slice().reverse().reduce((function(e,t){return t(d,p,e)||e}),b),h&&void 0!==b.initializer&&(b.value=b.initializer?b.initializer.call(h):void 0,b.initializer=void 0),void 0===b.initializer&&(Object.defineProperty(d,p,b),b=null),a=b,o) -var d,p,f,m,h,b -e.default=c})),define("consul-ui/helpers/dom-position",["exports","@ember/component/helper"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{compute(e,t){let[n]=e,{from:l,offset:r=!1}=t -return e=>{if("function"==typeof n){let t,i -if(r)i=e.currentTarget,t={width:i.offsetWidth,left:i.offsetLeft,height:i.offsetHeight,top:i.offsetTop} -else if(i=e.target,t=i.getBoundingClientRect(),void 0!==l){const e=l.getBoundingClientRect() -t.x=t.x-e.x,t.y=t.y-e.y}return n(t)}{const t=e.target,l=t.getBoundingClientRect() -n.forEach((e=>{let[n,r]=e -t.style[r]=`${l[n]}px`}))}}}}e.default=n})),define("consul-ui/helpers/drop",["exports","ember-composable-helpers/helpers/drop"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/duration-from",["exports","@ember/component/helper","@ember/service"],(function(e,t,n){var l,r,i -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let o=(l=(0,n.inject)("temporal"),r=class extends t.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="temporal",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}compute(e,t){let[n]=e -return this.temporal.durationFrom(n)}},a=r.prototype,u="temporal",s=[l],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},p={},Object.keys(c).forEach((function(e){p[e]=c[e]})),p.enumerable=!!p.enumerable,p.configurable=!!p.configurable,("value"in p||p.initializer)&&(p.writable=!0),p=s.slice().reverse().reduce((function(e,t){return t(a,u,e)||e}),p),d&&void 0!==p.initializer&&(p.value=p.initializer?p.initializer.call(d):void 0,p.initializer=void 0),void 0===p.initializer&&(Object.defineProperty(a,u,p),p=null),i=p,r) -var a,u,s,c,d,p -e.default=o})),define("consul-ui/helpers/element",["exports","ember-element-helper/helpers/element"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/ember-power-select-is-group",["exports","ember-power-select/helpers/ember-power-select-is-group"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"emberPowerSelectIsGroup",{enumerable:!0,get:function(){return t.emberPowerSelectIsGroup}})})),define("consul-ui/helpers/ember-power-select-is-selected",["exports","ember-power-select/helpers/ember-power-select-is-selected"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"emberPowerSelectIsSelected",{enumerable:!0,get:function(){return t.emberPowerSelectIsSelected}})})),define("consul-ui/helpers/ensure-safe-component",["exports","@embroider/util"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.EnsureSafeComponentHelper}})})),define("consul-ui/helpers/entries",["exports","ember-composable-helpers/helpers/entries"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"entries",{enumerable:!0,get:function(){return t.entries}})})),define("consul-ui/helpers/env",["exports","@ember/component/helper","@ember/service"],(function(e,t,n){var l,r,i -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let o=(l=(0,n.inject)("env"),r=class extends t.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="env",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}compute(e,t){let[n,l=""]=e -const r=this.env.var(n) -return null!=r?r:l}},a=r.prototype,u="env",s=[l],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},p={},Object.keys(c).forEach((function(e){p[e]=c[e]})),p.enumerable=!!p.enumerable,p.configurable=!!p.configurable,("value"in p||p.initializer)&&(p.writable=!0),p=s.slice().reverse().reduce((function(e,t){return t(a,u,e)||e}),p),d&&void 0!==p.initializer&&(p.value=p.initializer?p.initializer.call(d):void 0,p.initializer=void 0),void 0===p.initializer&&(Object.defineProperty(a,u,p),p=null),i=p,r) -var a,u,s,c,d,p -e.default=o})),define("consul-ui/helpers/eq",["exports","ember-truth-helpers/helpers/equal"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"equal",{enumerable:!0,get:function(){return t.equal}})})),define("consul-ui/helpers/exp",["exports","ember-math-helpers/helpers/exp"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"exp",{enumerable:!0,get:function(){return t.exp}})})),define("consul-ui/helpers/expm1",["exports","ember-math-helpers/helpers/expm1"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"expm1",{enumerable:!0,get:function(){return t.expm1}})})),define("consul-ui/helpers/filter-by",["exports","ember-composable-helpers/helpers/filter-by"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/filter",["exports","ember-composable-helpers/helpers/filter"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/find-by",["exports","ember-composable-helpers/helpers/find-by"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/fixed-grid-layout",["exports","@ember/component/helper","ember-collection/layouts/grid"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var l=(0,t.helper)((function(e){return new n.default(e[0],e[1])})) -e.default=l})),define("consul-ui/helpers/flatten-property",["exports","@ember/component/helper"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.helper)((function e(t,n){let[l,r]=t -const i=n.pages||[] -return i.push(...l.pages),l.children.forEach((t=>e([t],{pages:i}))),i})) -e.default=n})),define("consul-ui/helpers/flatten",["exports","ember-composable-helpers/helpers/flatten"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"flatten",{enumerable:!0,get:function(){return t.flatten}})})),define("consul-ui/helpers/floor",["exports","ember-math-helpers/helpers/floor"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"floor",{enumerable:!0,get:function(){return t.floor}})})),define("consul-ui/helpers/format-date",["exports","ember-intl/helpers/format-date"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/format-message",["exports","ember-intl/helpers/format-message"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/format-number",["exports","ember-intl/helpers/format-number"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/format-relative",["exports","ember-intl/helpers/format-relative"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/format-short-time",["exports","@ember/component/helper"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.helper)((function(e,t){let n,l,r,i,[o]=e -i=Math.floor(o/1e3),r=Math.floor(i/60),i%=60,l=Math.floor(r/60),r%=60,n=Math.floor(l/24),l%=24 -const a=n,u=l,s=r,c=i -switch(!0){case 0!==a:return a+"d" -case 0!==u:return u+"h" -case 0!==s:return s+"m" -default:return c+"s"}})) -e.default=n})),define("consul-ui/helpers/format-time",["exports","ember-intl/helpers/format-time"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})) -define("consul-ui/helpers/from-entries",["exports","ember-composable-helpers/helpers/from-entries"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"fromEntries",{enumerable:!0,get:function(){return t.fromEntries}})})),define("consul-ui/helpers/fround",["exports","ember-math-helpers/helpers/fround"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"fround",{enumerable:!0,get:function(){return t.fround}})})),define("consul-ui/helpers/gcd",["exports","ember-math-helpers/helpers/gcd"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"gcd",{enumerable:!0,get:function(){return t.gcd}})})),define("consul-ui/helpers/group-by",["exports","ember-composable-helpers/helpers/group-by"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/gt",["exports","ember-truth-helpers/helpers/gt"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"gt",{enumerable:!0,get:function(){return t.gt}})})),define("consul-ui/helpers/gte",["exports","ember-truth-helpers/helpers/gte"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"gte",{enumerable:!0,get:function(){return t.gte}})})),define("consul-ui/helpers/has-next",["exports","ember-composable-helpers/helpers/has-next"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"hasNext",{enumerable:!0,get:function(){return t.hasNext}})})),define("consul-ui/helpers/has-previous",["exports","ember-composable-helpers/helpers/has-previous"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"hasPrevious",{enumerable:!0,get:function(){return t.hasPrevious}})})),define("consul-ui/helpers/hds-link-to-models",["exports","@hashicorp/design-system-components/helpers/hds-link-to-models"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/hds-link-to-query",["exports","@hashicorp/design-system-components/helpers/hds-link-to-query"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/href-to",["exports","@ember/component/helper","@ember/service","@ember/object","@ember/application","consul-ui/utils/routing/transitionable","consul-ui/utils/routing/wildcard","consul-ui/router"],(function(e,t,n,l,r,i,o,a){var u,s,c -function d(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.hrefTo=void 0 -const p=(0,o.default)(a.routes),f=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{} -const l=e.lookup("router:main").location,r=e.lookup("service:router") -let o=t.slice(0),a=o.shift(),u=n.params||{} -"."===a&&(o=(0,i.default)(r.currentRoute,u,e),a=o.shift()) -try{return p(a)&&(o=o.map(((e,t)=>e.split("/").map(encodeURIComponent).join("/")))),l.hrefTo(a,o,u)}catch(s){throw s.constructor===Error&&(s.message=`${s.message} For "${t[0]}:${JSON.stringify(t.slice(1))}"`),s}} -e.hrefTo=f -let m=(u=(0,n.inject)("router"),s=class extends t.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="router",l=this,(n=c)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}init(){super.init(...arguments),this.router.on("routeWillChange",this.routeWillChange)}compute(e,t){return f((0,r.getOwner)(this),e,t)}routeWillChange(e){this.recompute()}willDestroy(){this.router.off("routeWillChange",this.routeWillChange),super.willDestroy()}},c=d(s.prototype,"router",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),d(s.prototype,"routeWillChange",[l.action],Object.getOwnPropertyDescriptor(s.prototype,"routeWillChange"),s.prototype),s) -e.default=m})),define("consul-ui/helpers/humanize",["exports","ember-cli-string-helpers/helpers/humanize"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"humanize",{enumerable:!0,get:function(){return t.humanize}})})),define("consul-ui/helpers/hypot",["exports","ember-math-helpers/helpers/hypot"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"hypot",{enumerable:!0,get:function(){return t.hypot}})})),define("consul-ui/helpers/icon-mapping",["exports","@ember/component/helper"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const n={kubernetes:"kubernetes-color",terraform:"terraform-color",nomad:"nomad-color",consul:"consul-color","consul-api-gateway":"consul-color",vault:"vault",aws:"aws-color","aws-iam":"aws-color",lambda:"aws-lambda-color"} -var l=(0,t.helper)((function(e){let[t]=e -return n[t]})) -e.default=l})),define("consul-ui/helpers/if-key",["exports","ember-keyboard/helpers/if-key.js"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/imul",["exports","ember-math-helpers/helpers/imul"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"imul",{enumerable:!0,get:function(){return t.imul}})})),define("consul-ui/helpers/inc",["exports","ember-composable-helpers/helpers/inc"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"inc",{enumerable:!0,get:function(){return t.inc}})})),define("consul-ui/helpers/includes",["exports","ember-composable-helpers/helpers/includes"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"includes",{enumerable:!0,get:function(){return t.includes}})})),define("consul-ui/helpers/intersect",["exports","ember-composable-helpers/helpers/intersect"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/invoke",["exports","ember-composable-helpers/helpers/invoke"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"invoke",{enumerable:!0,get:function(){return t.invoke}})})),define("consul-ui/helpers/is-active",["exports","ember-router-helpers/helpers/is-active"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"isActive",{enumerable:!0,get:function(){return t.isActive}})})),define("consul-ui/helpers/is-array",["exports","ember-truth-helpers/helpers/is-array"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"isArray",{enumerable:!0,get:function(){return t.isArray}})})),define("consul-ui/helpers/is-empty",["exports","ember-truth-helpers/helpers/is-empty"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/is-equal",["exports","ember-truth-helpers/helpers/is-equal"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"isEqual",{enumerable:!0,get:function(){return t.isEqual}})})),define("consul-ui/helpers/is-href",["exports","@ember/component/helper","@ember/service","@ember/object"],(function(e,t,n,l){var r,i,o -function a(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let u=(r=(0,n.inject)("router"),i=class extends t.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="router",l=this,(n=o)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}init(){super.init(...arguments),this.router.on("routeWillChange",this.routeWillChange)}compute(e){let[t,...n]=e -return this.router.currentRouteName.startsWith("nspace.")&&t.startsWith("dc.")&&(t=`nspace.${t}`),void 0!==this.next&&"loading"!==this.next?this.next.startsWith(t):this.router.isActive(t,...n)}routeWillChange(e){this.next=e.to.name.replace(".index",""),this.recompute()}willDestroy(){this.router.off("routeWillChange",this.routeWillChange),super.willDestroy()}},o=a(i.prototype,"router",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),a(i.prototype,"routeWillChange",[l.action],Object.getOwnPropertyDescriptor(i.prototype,"routeWillChange"),i.prototype),i) -e.default=u})),define("consul-ui/helpers/is",["exports","ember-can/helpers/can","@ember/object","@ember/string"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.is=void 0 -const r=(e,t,r)=>{let[i,o]=t,{abilityName:a,propertyName:u}=e.abilities.parse(i),s=e.abilities.abilityFor(a,o,r) -return u="function"==typeof s.getCharacteristicProperty?s.getCharacteristicProperty(u):(0,l.camelize)(`is-${u}`),(0,n.get)(s,u)} -e.is=r -class i extends t.default{compute(e,t){let[n,l]=e -return r(this,[n,l],t)}}e.default=i})),define("consul-ui/helpers/join",["exports","ember-composable-helpers/helpers/join"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/json-stringify",["exports","@ember/component/helper"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.helper)((function(e,t){try{return JSON.stringify(...e)}catch(n){return e[0].map((t=>JSON.stringify(t,e[1],e[2])))}})) -e.default=n})),define("consul-ui/helpers/keys",["exports","ember-composable-helpers/helpers/keys"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"keys",{enumerable:!0,get:function(){return t.keys}})})),define("consul-ui/helpers/last",["exports","@ember/component/helper"],(function(e,t){function n(e,t){let[n=""]=e -if(!0==("string"==typeof n))return n.substr(-1)}Object.defineProperty(e,"__esModule",{value:!0}),e.last=n,e.default=void 0 -var l=(0,t.helper)(n) -e.default=l})) -define("consul-ui/helpers/lcm",["exports","ember-math-helpers/helpers/lcm"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"lcm",{enumerable:!0,get:function(){return t.lcm}})})),define("consul-ui/helpers/left-trim",["exports","@ember/component/helper","consul-ui/utils/left-trim"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var l=(0,t.helper)((function(e,t){let[l="",r=""]=e -return(0,n.default)(l,r)})) -e.default=l})),define("consul-ui/helpers/loc",["exports","@ember/string/helpers/loc"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"loc",{enumerable:!0,get:function(){return t.loc}})})),define("consul-ui/helpers/log-e",["exports","ember-math-helpers/helpers/log-e"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"logE",{enumerable:!0,get:function(){return t.logE}})})),define("consul-ui/helpers/log10",["exports","ember-math-helpers/helpers/log10"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"log10",{enumerable:!0,get:function(){return t.log10}})})),define("consul-ui/helpers/log1p",["exports","ember-math-helpers/helpers/log1p"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"log1p",{enumerable:!0,get:function(){return t.log1p}})})),define("consul-ui/helpers/log2",["exports","ember-math-helpers/helpers/log2"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"log2",{enumerable:!0,get:function(){return t.log2}})})),define("consul-ui/helpers/lowercase",["exports","ember-cli-string-helpers/helpers/lowercase"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"lowercase",{enumerable:!0,get:function(){return t.lowercase}})})),define("consul-ui/helpers/lt",["exports","ember-truth-helpers/helpers/lt"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"lt",{enumerable:!0,get:function(){return t.lt}})})),define("consul-ui/helpers/lte",["exports","ember-truth-helpers/helpers/lte"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"lte",{enumerable:!0,get:function(){return t.lte}})})),define("consul-ui/helpers/map-by",["exports","ember-composable-helpers/helpers/map-by"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/map",["exports","ember-composable-helpers/helpers/map"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/max",["exports","ember-math-helpers/helpers/max"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"max",{enumerable:!0,get:function(){return t.max}})})),define("consul-ui/helpers/merge-checks",["exports","@ember/component/helper","consul-ui/utils/merge-checks"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var l=(0,t.helper)((function(e,t){let[l,r]=e -return(0,n.default)(l,r)})) -e.default=l})),define("consul-ui/helpers/min",["exports","ember-math-helpers/helpers/min"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"min",{enumerable:!0,get:function(){return t.min}})})),define("consul-ui/helpers/mixed-grid-layout",["exports","@ember/component/helper","ember-collection/layouts/mixed-grid"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var l=(0,t.helper)((function(e){return new n.default(e[0])})) -e.default=l})),define("consul-ui/helpers/mod",["exports","ember-math-helpers/helpers/mod"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"mod",{enumerable:!0,get:function(){return t.mod}})})),define("consul-ui/helpers/mult",["exports","ember-math-helpers/helpers/mult"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"mult",{enumerable:!0,get:function(){return t.mult}})})),define("consul-ui/helpers/next",["exports","ember-composable-helpers/helpers/next"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"next",{enumerable:!0,get:function(){return t.next}})})),define("consul-ui/helpers/noop",["exports","ember-composable-helpers/helpers/noop"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"noop",{enumerable:!0,get:function(){return t.noop}})})),define("consul-ui/helpers/not-eq",["exports","ember-truth-helpers/helpers/not-equal"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"notEqualHelper",{enumerable:!0,get:function(){return t.notEqualHelper}})})),define("consul-ui/helpers/not",["exports","ember-truth-helpers/helpers/not"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"not",{enumerable:!0,get:function(){return t.not}})})),define("consul-ui/helpers/object-at",["exports","ember-composable-helpers/helpers/object-at"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"objectAt",{enumerable:!0,get:function(){return t.objectAt}})})),define("consul-ui/helpers/on-document",["exports","ember-on-helper/helpers/on-document"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/on-key",["exports","ember-keyboard/helpers/on-key.js"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/on-window",["exports","ember-on-helper/helpers/on-window"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/on",["exports","ember-on-helper/helpers/on"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/optional",["exports","ember-composable-helpers/helpers/optional"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"optional",{enumerable:!0,get:function(){return t.optional}})})),define("consul-ui/helpers/or",["exports","ember-truth-helpers/helpers/or"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"or",{enumerable:!0,get:function(){return t.or}})})),define("consul-ui/helpers/page-title",["exports","ember-page-title/helpers/page-title"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=t.default -e.default=n})) -define("consul-ui/helpers/percentage-columns-layout",["exports","@ember/component/helper","ember-collection/layouts/percentage-columns"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var l=(0,t.helper)((function(e){return new n.default(e[0],e[1],e[2])})) -e.default=l})),define("consul-ui/helpers/percentage-of",["exports","@ember/component/helper"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.helper)((function(e,t){let[n,l]=e -const r=n/l*100 -return isNaN(r)?0:r.toFixed(2)})) -e.default=n})),define("consul-ui/helpers/perform",["exports","ember-concurrency/helpers/perform"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/pick",["exports","ember-composable-helpers/helpers/pick"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"pick",{enumerable:!0,get:function(){return t.pick}})})),define("consul-ui/helpers/pipe-action",["exports","ember-composable-helpers/helpers/pipe-action"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/pipe",["exports","ember-composable-helpers/helpers/pipe"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"pipe",{enumerable:!0,get:function(){return t.pipe}})})),define("consul-ui/helpers/pluralize",["exports","ember-inflector/lib/helpers/pluralize"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=t.default -e.default=n})),define("consul-ui/helpers/policy/datacenters",["exports","@ember/component/helper","@ember/object"],(function(e,t,n){function l(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} -const l=(0,n.get)(e[0],"Datacenters") -return Array.isArray(l)&&0!==l.length?(0,n.get)(e[0],"Datacenters"):[t.global||"All"]}Object.defineProperty(e,"__esModule",{value:!0}),e.datacenters=l,e.default=void 0 -var r=(0,t.helper)(l) -e.default=r})),define("consul-ui/helpers/policy/group",["exports","@ember/component/helper","@ember/object","consul-ui/models/policy"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var r=(0,t.helper)((function(e){let[t]=e -return t.reduce((function(e,t){let r -switch(!0){case(0,n.get)(t,"ID")===l.MANAGEMENT_ID:r="management" -break -case""!==(0,n.get)(t,"template"):r="identities" -break -default:r="policies"}return e[r].push(t),e}),{management:[],identities:[],policies:[]})})) -e.default=r})),define("consul-ui/helpers/policy/typeof",["exports","@ember/component/helper","@ember/object"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.typeOf=l,e.default=void 0 -function l(e,t){const l=e[0],r=(0,n.get)(l,"template") -switch(!0){case void 0===r:return"role" -case"service-identity"===r:return"policy-service-identity" -case"node-identity"===r:return"policy-node-identity" -case"00000000-0000-0000-0000-000000000001"===(0,n.get)(l,"ID"):return"policy-management" -default:return"policy"}}var r=(0,t.helper)(l) -e.default=r})),define("consul-ui/helpers/pow",["exports","ember-math-helpers/helpers/pow"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"pow",{enumerable:!0,get:function(){return t.pow}})})),define("consul-ui/helpers/previous",["exports","ember-composable-helpers/helpers/previous"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"previous",{enumerable:!0,get:function(){return t.previous}})})),define("consul-ui/helpers/queue",["exports","ember-composable-helpers/helpers/queue"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"queue",{enumerable:!0,get:function(){return t.queue}})})),define("consul-ui/helpers/random",["exports","ember-math-helpers/helpers/random"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"random",{enumerable:!0,get:function(){return t.random}})})),define("consul-ui/helpers/range",["exports","ember-composable-helpers/helpers/range"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"range",{enumerable:!0,get:function(){return t.range}})})),define("consul-ui/helpers/reduce",["exports","ember-composable-helpers/helpers/reduce"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/ref-to",["exports","ember-ref-bucket/helpers/ref-to"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"refTo",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/refresh-route",["exports","@ember/component/helper","@ember/service","@ember/application"],(function(e,t,n,l){var r,i,o -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let a=(r=(0,n.inject)("router"),i=class extends t.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="router",l=this,(n=o)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}compute(e,t){return()=>{const e=(0,l.getOwner)(this),t=this.router.currentRoute.name -return e.lookup(`route:${t}`).refresh()}}},u=i.prototype,s="router",c=[r],d={configurable:!0,enumerable:!0,writable:!0,initializer:null},f={},Object.keys(d).forEach((function(e){f[e]=d[e]})),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=c.slice().reverse().reduce((function(e,t){return t(u,s,e)||e}),f),p&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(p):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(u,s,f),f=null),o=f,i) -var u,s,c,d,p,f -e.default=a})),define("consul-ui/helpers/reject-by",["exports","ember-composable-helpers/helpers/reject-by"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/render-template",["exports","@ember/component/helper","@ember/service"],(function(e,t,n){var l,r,i -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const o=/{{([A-Za-z.0-9_-]+)}}/g -let a,u=(l=(0,n.inject)("encoder"),r=class extends t.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="encoder",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0}),"function"!=typeof a&&(a=this.encoder.createRegExpEncoder(o,encodeURIComponent,!1))}compute(e){let[t,n]=e -return a(t,n)}},s=r.prototype,c="encoder",d=[l],p={configurable:!0,enumerable:!0,writable:!0,initializer:null},m={},Object.keys(p).forEach((function(e){m[e]=p[e]})),m.enumerable=!!m.enumerable,m.configurable=!!m.configurable,("value"in m||m.initializer)&&(m.writable=!0),m=d.slice().reverse().reduce((function(e,t){return t(s,c,e)||e}),m),f&&void 0!==m.initializer&&(m.value=m.initializer?m.initializer.call(f):void 0,m.initializer=void 0),void 0===m.initializer&&(Object.defineProperty(s,c,m),m=null),i=m,r) -var s,c,d,p,f,m -e.default=u})),define("consul-ui/helpers/repeat",["exports","ember-composable-helpers/helpers/repeat"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"repeat",{enumerable:!0,get:function(){return t.repeat}})})),define("consul-ui/helpers/require",["exports","@ember/component/helper","require","@lit/reactive-element","consul-ui/utils/path/resolve"],(function(e,t,n,l,r){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const i=new Map -var o=(0,t.helper)(((e,t)=>{let o,[a=""]=e,u=(0,r.default)(`consul-ui${t.from}`,a) -if("/"===a.charAt(0)&&(u=`consul-ui${u}`),!n.default.has(u))throw new Error(`Unable to resolve '${u}' does the file exist?`) -switch(o=(0,n.default)(u)[t.export||"default"],!0){case u.endsWith(".css"):return o(l.css) -case u.endsWith(".xstate"):return o -case u.endsWith(".element"):{if(i.has(u))return i.get(u) -const e=o(HTMLElement) -return i.set(u,e),e}default:return o}})) -e.default=o})),define("consul-ui/helpers/reverse",["exports","ember-composable-helpers/helpers/reverse"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/right-trim",["exports","@ember/component/helper","consul-ui/utils/right-trim"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var l=(0,t.helper)((function(e,t){let[l="",r=""]=e -return(0,n.default)(l,r)})) -e.default=l})),define("consul-ui/helpers/root-url",["exports","ember-router-helpers/helpers/root-url"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"rootUrl",{enumerable:!0,get:function(){return t.rootUrl}})})),define("consul-ui/helpers/round",["exports","ember-math-helpers/helpers/round"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"round",{enumerable:!0,get:function(){return t.round}})})),define("consul-ui/helpers/route-action",["exports","ember-route-action-helper/helpers/route-action"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/route-match",["exports","@ember/component/helper"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.helper)((function(e,t){let[n]=e -switch(["Present","Exact","Prefix","Suffix","Regex"].find((e=>void 0!==n[e]))){case"Present":return(n.Invert?"NOT ":"")+"present" -case"Exact":return`${n.Invert?"NOT ":""}exactly matching "${n.Exact}"` -case"Prefix":return`${n.Invert?"NOT ":""}prefixed by "${n.Prefix}"` -case"Suffix":return`${n.Invert?"NOT ":""}suffixed by "${n.Suffix}"` -case"Regex":return`${n.Invert?"NOT ":""}matching the regex "${n.Regex}"`}return""})) -e.default=n})),define("consul-ui/helpers/route-params",["exports","ember-router-helpers/helpers/route-params"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"routeParams",{enumerable:!0,get:function(){return t.routeParams}})})),define("consul-ui/helpers/service/card-permissions",["exports","@ember/component/helper"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.helper)((function(e){let[t]=e -if(""===t.Datacenter)return"empty" -{const e=t.Intention.HasPermissions,n=t.Intention.Allowed,l="specific-intention"===t.Source&&!t.TransparentProxy -switch(!0){case e:return"allow" -case!n&&!e:return"deny" -case n&&l:return"not-defined" -default:return"allow"}}})) -e.default=n})) -define("consul-ui/helpers/service/external-source",["exports","@ember/component/helper","@ember/object"],(function(e,t,n){function l(e,t){let l=(0,n.get)(e[0],"ExternalSources.firstObject") -l||(l=(0,n.get)(e[0],"Meta.external-source")) -const r=void 0===t.prefix?"":t.prefix -if(l&&["consul-api-gateway","vault","kubernetes","terraform","nomad","consul","aws","lambda"].includes(l))return`${r}${l}`}Object.defineProperty(e,"__esModule",{value:!0}),e.serviceExternalSource=l,e.default=void 0 -var r=(0,t.helper)(l) -e.default=r})),define("consul-ui/helpers/service/health-percentage",["exports","@ember/component/helper"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.helper)((function(e){let[t]=e -const n=t.ChecksCritical+t.ChecksPassing+t.ChecksWarning -return 0===n?"":{passing:Math.round(t.ChecksPassing/n*100),warning:Math.round(t.ChecksWarning/n*100),critical:Math.round(t.ChecksCritical/n*100)}})) -e.default=n})),define("consul-ui/helpers/set",["exports","ember-set-helper/helpers/set"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/shuffle",["exports","ember-composable-helpers/helpers/shuffle"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"shuffle",{enumerable:!0,get:function(){return t.shuffle}})})),define("consul-ui/helpers/sign",["exports","ember-math-helpers/helpers/sign"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"sign",{enumerable:!0,get:function(){return t.sign}})})),define("consul-ui/helpers/sin",["exports","ember-math-helpers/helpers/sin"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"sin",{enumerable:!0,get:function(){return t.sin}})})),define("consul-ui/helpers/singularize",["exports","ember-inflector/lib/helpers/singularize"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=t.default -e.default=n})),define("consul-ui/helpers/slice",["exports","ember-composable-helpers/helpers/slice"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/slugify",["exports","@ember/component/helper"],(function(e,t){function n(e,t){let[n=""]=e -return n.replace(/ /g,"-").toLowerCase()}Object.defineProperty(e,"__esModule",{value:!0}),e.slugify=n,e.default=void 0 -var l=(0,t.helper)(n) -e.default=l})),define("consul-ui/helpers/smart-date-format",["exports","@ember/component/helper","@ember/service"],(function(e,t,n){var l,r,i -function o(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function a(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const u=6048e5 -function s(e){const t=new Date -return e>=+t-u&&e<=+t+u}let c=(l=class extends t.default{constructor(){super(...arguments),o(this,"temporal",r,this),o(this,"intl",i,this)}compute(e,t){let[n]=e -return{isNearDate:s(n),relative:`${this.temporal.format(n)} ago`,friendly:this.intl.formatTime(n,{month:"short",day:"numeric",year:"numeric",hour:"numeric",minute:"numeric",second:"numeric",hourCycle:"h24"})}}},r=a(l.prototype,"temporal",[n.inject],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),i=a(l.prototype,"intl",[n.inject],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),l) -e.default=c})),define("consul-ui/helpers/sort-by",["exports","ember-composable-helpers/helpers/sort-by"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/split",["exports","@ember/component/helper"],(function(e,t){function n(e,t){let[n="",l=","]=e -return n.split(l)}Object.defineProperty(e,"__esModule",{value:!0}),e.split=n,e.default=void 0 -var l=(0,t.helper)(n) -e.default=l})),define("consul-ui/helpers/sqrt",["exports","ember-math-helpers/helpers/sqrt"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"sqrt",{enumerable:!0,get:function(){return t.sqrt}})})),define("consul-ui/helpers/state-chart",["exports","@ember/component/helper","@ember/service"],(function(e,t,n){var l,r,i -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let o=(l=(0,n.inject)("state"),r=class extends t.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="state",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}compute(e,t){let[n]=e -return this.state.stateChart(n)}},a=r.prototype,u="state",s=[l],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},p={},Object.keys(c).forEach((function(e){p[e]=c[e]})),p.enumerable=!!p.enumerable,p.configurable=!!p.configurable,("value"in p||p.initializer)&&(p.writable=!0),p=s.slice().reverse().reduce((function(e,t){return t(a,u,e)||e}),p),d&&void 0!==p.initializer&&(p.value=p.initializer?p.initializer.call(d):void 0,p.initializer=void 0),void 0===p.initializer&&(Object.defineProperty(a,u,p),p=null),i=p,r) -var a,u,s,c,d,p -e.default=o})),define("consul-ui/helpers/state-matches",["exports","@ember/component/helper","@ember/service"],(function(e,t,n){var l,r,i -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let o=(l=(0,n.inject)("state"),r=class extends t.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="state",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}compute(e,t){let[n,l]=e -return this.state.matches(n,l)}},a=r.prototype,u="state",s=[l],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},p={},Object.keys(c).forEach((function(e){p[e]=c[e]})),p.enumerable=!!p.enumerable,p.configurable=!!p.configurable,("value"in p||p.initializer)&&(p.writable=!0),p=s.slice().reverse().reduce((function(e,t){return t(a,u,e)||e}),p),d&&void 0!==p.initializer&&(p.value=p.initializer?p.initializer.call(d):void 0,p.initializer=void 0),void 0===p.initializer&&(Object.defineProperty(a,u,p),p=null),i=p,r) -var a,u,s,c,d,p -e.default=o})),define("consul-ui/helpers/string-char-at",["exports","ember-string-fns/helpers/string-char-at"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringCharAt",{enumerable:!0,get:function(){return t.stringCharAt}})})),define("consul-ui/helpers/string-char-code-at",["exports","ember-string-fns/helpers/string-char-code-at"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringCharCodeAt",{enumerable:!0,get:function(){return t.stringCharCodeAt}})})),define("consul-ui/helpers/string-code-point-at",["exports","ember-string-fns/helpers/string-code-point-at"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringCodePointAt",{enumerable:!0,get:function(){return t.stringCodePointAt}})})),define("consul-ui/helpers/string-concat",["exports","ember-string-fns/helpers/string-concat"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringConcat",{enumerable:!0,get:function(){return t.stringConcat}})})),define("consul-ui/helpers/string-ends-with",["exports","ember-string-fns/helpers/string-ends-with"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringEndsWith",{enumerable:!0,get:function(){return t.stringEndsWith}})})),define("consul-ui/helpers/string-equals",["exports","ember-string-fns/helpers/string-equals"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringEquals",{enumerable:!0,get:function(){return t.stringEquals}})})),define("consul-ui/helpers/string-from-char-code",["exports","ember-string-fns/helpers/string-from-char-code"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringFromCharCode",{enumerable:!0,get:function(){return t.stringFromCharCode}})})),define("consul-ui/helpers/string-from-code-point",["exports","ember-string-fns/helpers/string-from-code-point"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringFromCodePoint",{enumerable:!0,get:function(){return t.stringFromCodePoint}})})),define("consul-ui/helpers/string-html-safe",["exports","@ember/component/helper","@ember/string"],(function(e,t,n){function l(e){let[t=""]=e -return(0,n.htmlSafe)(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.stringHtmlSafe=l,e.default=void 0 -var r=(0,t.helper)(l) -e.default=r})),define("consul-ui/helpers/string-includes",["exports","ember-string-fns/helpers/string-includes"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringIncludes",{enumerable:!0,get:function(){return t.stringIncludes}})})),define("consul-ui/helpers/string-index-of",["exports","ember-string-fns/helpers/string-index-of"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringIndexOf",{enumerable:!0,get:function(){return t.stringIndexOf}})})),define("consul-ui/helpers/string-last-index-of",["exports","ember-string-fns/helpers/string-last-index-of"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringLastIndexOf",{enumerable:!0,get:function(){return t.stringLastIndexOf}})})),define("consul-ui/helpers/string-not-equals",["exports","ember-string-fns/helpers/string-not-equals"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringNotEquals",{enumerable:!0,get:function(){return t.stringNotEquals}})})),define("consul-ui/helpers/string-pad-end",["exports","ember-string-fns/helpers/string-pad-end"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringPadEnd",{enumerable:!0,get:function(){return t.stringPadEnd}})})),define("consul-ui/helpers/string-pad-start",["exports","ember-string-fns/helpers/string-pad-start"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringPadStart",{enumerable:!0,get:function(){return t.stringPadStart}})})) -define("consul-ui/helpers/string-repeat",["exports","ember-string-fns/helpers/string-repeat"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringRepeat",{enumerable:!0,get:function(){return t.stringRepeat}})})),define("consul-ui/helpers/string-replace-all",["exports","ember-string-fns/helpers/string-replace-all"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringReplaceAll",{enumerable:!0,get:function(){return t.stringReplaceAll}})})),define("consul-ui/helpers/string-replace",["exports","ember-string-fns/helpers/string-replace"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringReplace",{enumerable:!0,get:function(){return t.stringReplace}})})),define("consul-ui/helpers/string-slice",["exports","ember-string-fns/helpers/string-slice"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringSlice",{enumerable:!0,get:function(){return t.stringSlice}})})),define("consul-ui/helpers/string-split",["exports","ember-string-fns/helpers/string-split"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringSplit",{enumerable:!0,get:function(){return t.stringSplit}})})),define("consul-ui/helpers/string-starts-with",["exports","ember-string-fns/helpers/string-starts-with"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringStartsWith",{enumerable:!0,get:function(){return t.stringStartsWith}})})),define("consul-ui/helpers/string-substring",["exports","ember-string-fns/helpers/string-substring"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringSubstring",{enumerable:!0,get:function(){return t.stringSubstring}})})),define("consul-ui/helpers/string-to-camel-case",["exports","ember-string-fns/helpers/string-to-camel-case"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringToCamelCase",{enumerable:!0,get:function(){return t.stringToCamelCase}})})),define("consul-ui/helpers/string-to-kebab-case",["exports","ember-string-fns/helpers/string-to-kebab-case"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringToKebabCase",{enumerable:!0,get:function(){return t.stringToKebabCase}})})),define("consul-ui/helpers/string-to-lower-case",["exports","ember-string-fns/helpers/string-to-lower-case"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringToLowerCase",{enumerable:!0,get:function(){return t.stringToLowerCase}})})),define("consul-ui/helpers/string-to-pascal-case",["exports","ember-string-fns/helpers/string-to-pascal-case"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringToPascalCase",{enumerable:!0,get:function(){return t.stringToPascalCase}})})),define("consul-ui/helpers/string-to-sentence-case",["exports","ember-string-fns/helpers/string-to-sentence-case"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringToSentenceCase",{enumerable:!0,get:function(){return t.stringToSentenceCase}})})),define("consul-ui/helpers/string-to-snake-case",["exports","ember-string-fns/helpers/string-to-snake-case"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringToSnakeCase",{enumerable:!0,get:function(){return t.stringToSnakeCase}})})),define("consul-ui/helpers/string-to-title-case",["exports","ember-string-fns/helpers/string-to-title-case"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringToTitleCase",{enumerable:!0,get:function(){return t.stringToTitleCase}})})),define("consul-ui/helpers/string-to-upper-case",["exports","ember-string-fns/helpers/string-to-upper-case"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringToUpperCase",{enumerable:!0,get:function(){return t.stringToUpperCase}})})),define("consul-ui/helpers/string-trim-end",["exports","ember-string-fns/helpers/string-trim-end"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringTrimEnd",{enumerable:!0,get:function(){return t.stringTrimEnd}})})),define("consul-ui/helpers/string-trim-start",["exports","ember-string-fns/helpers/string-trim-start"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringTrimStart",{enumerable:!0,get:function(){return t.stringTrimStart}})})),define("consul-ui/helpers/string-trim",["exports","ember-string-fns/helpers/string-trim"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringTrim",{enumerable:!0,get:function(){return t.stringTrim}})})),define("consul-ui/helpers/style-map",["exports","@ember/component/helper"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.helper)((function(e){const t=e.reduce(((e,t)=>{let[n,l,r=""]=t -return null==l?e:`${e}${n}:${l.toString()}${r};`}),"") -return t.length>0?t:void 0})) -e.default=n})),define("consul-ui/helpers/sub",["exports","ember-math-helpers/helpers/sub"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"sub",{enumerable:!0,get:function(){return t.sub}})})),define("consul-ui/helpers/substr",["exports","@ember/component/helper"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.helper)((function(e,t){let[n="",l=0,r]=e -return n.substr(l,r)})) -e.default=n})),define("consul-ui/helpers/svg-curve",["exports","@ember/component/helper"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.helper)((function(e,t){let[n]=e -const l=t.src||{x:0,y:0},r=t.type||"cubic" -let i=[n,{x:(l.x+n.x)/2,y:l.y}] -return"cubic"===r&&i.push({x:i[1].x,y:n.y}),`${o=l,`\n M ${o.x} ${o.y}\n `}${function(){const e=[...arguments] -return`${arguments.length>2?"C":"Q"} ${e.concat(e.shift()).map((e=>Object.values(e).join(" "))).join(",")}`}(...i)}` -var o})) -e.default=n})),define("consul-ui/helpers/t",["exports","ember-intl/helpers/t"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/take",["exports","ember-composable-helpers/helpers/take"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/tan",["exports","ember-math-helpers/helpers/tan"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"tan",{enumerable:!0,get:function(){return t.tan}})})),define("consul-ui/helpers/tanh",["exports","ember-math-helpers/helpers/tanh"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"tanh",{enumerable:!0,get:function(){return t.tanh}})})),define("consul-ui/helpers/task",["exports","ember-concurrency/helpers/task"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/temporal-format",["exports","@ember/component/helper","@ember/service"],(function(e,t,n){var l,r,i -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let o=(l=(0,n.inject)("temporal"),r=class extends t.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="temporal",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}compute(e,t){let[n]=e -return this.temporal.format(n,t)}},a=r.prototype,u="temporal",s=[l],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},p={},Object.keys(c).forEach((function(e){p[e]=c[e]})),p.enumerable=!!p.enumerable,p.configurable=!!p.configurable,("value"in p||p.initializer)&&(p.writable=!0),p=s.slice().reverse().reduce((function(e,t){return t(a,u,e)||e}),p),d&&void 0!==p.initializer&&(p.value=p.initializer?p.initializer.call(d):void 0,p.initializer=void 0),void 0===p.initializer&&(Object.defineProperty(a,u,p),p=null),i=p,r) -var a,u,s,c,d,p -e.default=o})),define("consul-ui/helpers/temporal-within",["exports","@ember/component/helper","@ember/service"],(function(e,t,n){var l,r,i -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let o=(l=(0,n.inject)("temporal"),r=class extends t.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="temporal",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}compute(e,t){return this.temporal.within(e,t)}},a=r.prototype,u="temporal",s=[l],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},p={},Object.keys(c).forEach((function(e){p[e]=c[e]})),p.enumerable=!!p.enumerable,p.configurable=!!p.configurable,("value"in p||p.initializer)&&(p.writable=!0),p=s.slice().reverse().reduce((function(e,t){return t(a,u,e)||e}),p),d&&void 0!==p.initializer&&(p.value=p.initializer?p.initializer.call(d):void 0,p.initializer=void 0),void 0===p.initializer&&(Object.defineProperty(a,u,p),p=null),i=p,r) -var a,u,s,c,d,p -e.default=o})),define("consul-ui/helpers/test",["exports","consul-ui/helpers/can","consul-ui/helpers/is"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class l extends t.default{compute(e,t){let[l,r]=e -switch(!0){case l.startsWith("can "):return super.compute([l.substr(4),r],t) -case l.startsWith("is "):return(0,n.is)(this,[l.substr(3),r],t)}throw new Error(`${l} is not supported by the 'test' helper.`)}}e.default=l})) -define("consul-ui/helpers/titleize",["exports","ember-cli-string-helpers/helpers/titleize"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"titleize",{enumerable:!0,get:function(){return t.titleize}})})),define("consul-ui/helpers/to-hash",["exports","@ember/component/helper","@ember/object"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var l=(0,t.helper)(((e,t)=>{let[l=[],r]=e -return Array.isArray(l)||(l=l.toArray()),l.reduce(((e,t,l)=>(e[(0,n.get)(t,r)]=t,e)),{})})) -e.default=l})),define("consul-ui/helpers/to-route",["exports","@ember/component/helper","@ember/service"],(function(e,t,n){var l,r,i,o,a -function u(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function s(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let c=(l=(0,n.inject)("router"),r=(0,n.inject)("env"),i=class extends t.default{constructor(){super(...arguments),u(this,"router",o,this),u(this,"env",a,this)}compute(e){let[t]=e -return this.router.recognize(`${this.env.var("rootURL")}${t}`).name}},o=s(i.prototype,"router",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),a=s(i.prototype,"env",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),i) -e.default=c})),define("consul-ui/helpers/toggle-action",["exports","ember-composable-helpers/helpers/toggle-action"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/toggle",["exports","ember-composable-helpers/helpers/toggle"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"toggle",{enumerable:!0,get:function(){return t.toggle}})})),define("consul-ui/helpers/token/is-anonymous",["exports","@ember/component/helper","@ember/object"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.isAnonymous=l,e.default=void 0 -function l(e,t){return"00000000-0000-0000-0000-000000000002"===(0,n.get)(e[0],"AccessorID")}var r=(0,t.helper)(l) -e.default=r})),define("consul-ui/helpers/token/is-legacy",["exports","@ember/component/helper","@ember/object"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.isLegacy=r,e.default=void 0 -const l=function(e){const t=(0,n.get)(e,"Rules") -if(null!=t)return""!==t.trim() -const l=(0,n.get)(e,"Legacy") -return void 0!==l&&l} -function r(e,t){const n=e[0] -return void 0!==n.length?n.find((function(e){return l(e)})):l(n)}var i=(0,t.helper)(r) -e.default=i})),define("consul-ui/helpers/transition-to",["exports","ember-router-helpers/helpers/transition-to"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"transitionTo",{enumerable:!0,get:function(){return t.transitionTo}})})),define("consul-ui/helpers/trunc",["exports","ember-math-helpers/helpers/trunc"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"trunc",{enumerable:!0,get:function(){return t.trunc}})})),define("consul-ui/helpers/truncate",["exports","ember-cli-string-helpers/helpers/truncate"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"truncate",{enumerable:!0,get:function(){return t.truncate}})})),define("consul-ui/helpers/tween-to",["exports","@ember/component/helper","@ember/service"],(function(e,t,n){var l,r,i -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let o=(l=(0,n.inject)("ticker"),r=class extends t.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="ticker",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}compute(e,t){let[n,l]=e -return this.ticker.tweenTo(n,l)}},a=r.prototype,u="ticker",s=[l],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},p={},Object.keys(c).forEach((function(e){p[e]=c[e]})),p.enumerable=!!p.enumerable,p.configurable=!!p.configurable,("value"in p||p.initializer)&&(p.writable=!0),p=s.slice().reverse().reduce((function(e,t){return t(a,u,e)||e}),p),d&&void 0!==p.initializer&&(p.value=p.initializer?p.initializer.call(d):void 0,p.initializer=void 0),void 0===p.initializer&&(Object.defineProperty(a,u,p),p=null),i=p,r) -var a,u,s,c,d,p -e.default=o})),define("consul-ui/helpers/union",["exports","ember-composable-helpers/helpers/union"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/uniq-by",["exports","@ember/component/helper","@ember/utils","@ember/array"],(function(e,t,n,l){function r(e){let[t,r]=e -return(0,n.isEmpty)(t)?[]:(0,l.A)(r).uniqBy(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.uniqBy=r,e.default=void 0 -var i=(0,t.helper)(r) -e.default=i})),define("consul-ui/helpers/unique-id",["exports","@ember/component/helper","@ember/service"],(function(e,t,n){var l,r,i -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let o=(l=(0,n.inject)("dom"),r=class extends t.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="dom",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}compute(e,t){return this.dom.guid({})}},a=r.prototype,u="dom",s=[l],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},p={},Object.keys(c).forEach((function(e){p[e]=c[e]})),p.enumerable=!!p.enumerable,p.configurable=!!p.configurable,("value"in p||p.initializer)&&(p.writable=!0),p=s.slice().reverse().reduce((function(e,t){return t(a,u,e)||e}),p),d&&void 0!==p.initializer&&(p.value=p.initializer?p.initializer.call(d):void 0,p.initializer=void 0),void 0===p.initializer&&(Object.defineProperty(a,u,p),p=null),i=p,r) -var a,u,s,c,d,p -e.default=o})),define("consul-ui/helpers/uppercase",["exports","ember-cli-string-helpers/helpers/uppercase"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"uppercase",{enumerable:!0,get:function(){return t.uppercase}})})),define("consul-ui/helpers/uri",["exports","@ember/component/helper","@ember/service"],(function(e,t,n){var l,r,i,o,a -function u(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function s(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const c=/\${([A-Za-z.0-9_-]+)}/g -let d,p=(l=(0,n.inject)("encoder"),r=(0,n.inject)("data-source/service"),i=class extends t.default{constructor(){super(...arguments),u(this,"encoder",o,this),u(this,"data",a,this),"function"!=typeof d&&(d=this.encoder.createRegExpEncoder(c,encodeURIComponent))}compute(e){let[t,n]=e -return this.data.uri(d(t,n))}},o=s(i.prototype,"encoder",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),a=s(i.prototype,"data",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),i) -e.default=p})),define("consul-ui/helpers/url-for",["exports","ember-router-helpers/helpers/url-for"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"urlFor",{enumerable:!0,get:function(){return t.urlFor}})})),define("consul-ui/helpers/values",["exports","ember-composable-helpers/helpers/values"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"values",{enumerable:!0,get:function(){return t.values}})})),define("consul-ui/helpers/will-destroy",["exports","ember-render-helpers/helpers/will-destroy"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/without",["exports","ember-composable-helpers/helpers/without"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"without",{enumerable:!0,get:function(){return t.without}})})),define("consul-ui/helpers/xor",["exports","ember-truth-helpers/helpers/xor"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"xor",{enumerable:!0,get:function(){return t.xor}})})),define("consul-ui/initializers/app-version",["exports","ember-cli-app-version/initializer-factory","consul-ui/config/environment"],(function(e,t,n){let l,r -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,n.default.APP&&(l=n.default.APP.name,r=n.default.APP.version) -var i={name:"App Version",initialize:(0,t.default)(l,r)} -e.default=i})),define("consul-ui/initializers/container-debug-adapter",["exports","ember-resolver/resolvers/classic/container-debug-adapter"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n={name:"container-debug-adapter",initialize(){(arguments[1]||arguments[0]).register("container-debug-adapter:main",t.default)}} -e.default=n})),define("consul-ui/initializers/ember-data-data-adapter",["exports","@ember-data/debug/setup"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/initializers/ember-data",["exports","ember-data","ember-data/setup-container"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var l={name:"ember-data",initialize:n.default} -e.default=l})),define("consul-ui/initializers/export-application-global",["exports","ember","consul-ui/config/environment"],(function(e,t,n){function l(){var e=arguments[1]||arguments[0] -if(!1!==n.default.exportApplicationGlobal){var l -if("undefined"!=typeof window)l=window -else if("undefined"!=typeof global)l=global -else{if("undefined"==typeof self)return -l=self}var r,i=n.default.exportApplicationGlobal -r="string"==typeof i?i:t.default.String.classify(n.default.modulePrefix),l[r]||(l[r]=e,e.reopen({willDestroy:function(){this._super.apply(this,arguments),delete l[r]}}))}}Object.defineProperty(e,"__esModule",{value:!0}),e.initialize=l,e.default=void 0 -var r={name:"export-application-global",initialize:l} -e.default=r})),define("consul-ui/initializers/flash-messages",["exports","consul-ui/config/environment","@ember/application/deprecations","ember-cli-flash/utils/flash-message-options"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.initialize=r,e.default=void 0 -function r(){const e=arguments[1]||arguments[0],{flashMessageDefaults:n}=t.default||{},{injectionFactories:r}=n||[],i=(0,l.default)(n) -r&&r.length -i.injectionFactories.forEach((t=>{e.inject(t,"flashMessages","service:flash-messages")}))}var i={name:"flash-messages",initialize:r} -e.default=i})),define("consul-ui/initializers/initialize-torii-callback",["exports","consul-ui/config/environment","torii/redirect-handler"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var l={name:"torii-callback",before:"torii",initialize(e){arguments[1]&&(e=arguments[1]),t.default.torii&&t.default.torii.disableRedirectInitializer||(e.deferReadiness(),n.default.handle(window).catch((function(){e.advanceReadiness()})))}} -e.default=l})),define("consul-ui/initializers/initialize-torii-session",["exports","torii/bootstrap/session","torii/configuration"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var l={name:"torii-session",after:"torii",initialize(e){arguments[1]&&(e=arguments[1]) -const l=(0,n.getConfiguration)() -l.sessionServiceName&&(0,t.default)(e,l.sessionServiceName)}} -e.default=l})),define("consul-ui/initializers/initialize-torii",["exports","torii/bootstrap/torii","torii/configuration","consul-ui/config/environment"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var r={name:"torii",initialize(e){arguments[1]&&(e=arguments[1]),(0,n.configure)(l.default.torii||{}),(0,t.default)(e)}},i=r -e.default=i})) -define("consul-ui/initializers/model-fragments",["exports","ember-data-model-fragments","ember-data-model-fragments/ext"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var l={name:"fragmentTransform",after:"ember-data",initialize(){}} -e.default=l})),define("consul-ui/initializers/setup-ember-can",["exports","ember-can/initializers/setup-ember-can"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"initialize",{enumerable:!0,get:function(){return t.initialize}})})),define("consul-ui/initializers/viewport-config",["exports","ember-in-viewport/initializers/viewport-config"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"initialize",{enumerable:!0,get:function(){return t.initialize}})})),define("consul-ui/instance-initializers/container",["exports","@ember/debug","require","deepmerge"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.services=void 0 -const r=document,i=l.default.all([...r.querySelectorAll("script[data-services]")].map((e=>JSON.parse(e.dataset.services)))) -e.services=i -var o={name:"container",initialize(e){(function(e,t){Object.entries(t).forEach((t=>{let[l,r]=t -if(1==("string"==typeof r.class)){if(!n.default.has(r.class))throw new Error(`Unable to locate '${r.class}'`) -e.register(l.replace("auth-provider:","torii-provider:"),(0,n.default)(r.class).default)}}))})(e,i) -const l=e.lookup("service:container") -let r=l.get("container-debug-adapter:main").catalogEntriesByType("service").filter((e=>e.startsWith("repository/")||"ui-config"===e));(0,t.runInDebug)((()=>r=r.filter((e=>!e.endsWith("-test"))))),r.push("repository/service"),r.forEach((e=>{const t=`service:${e}` -l.set(t,l.resolveRegistration(t))}))}} -e.default=o})),define("consul-ui/instance-initializers/ember-data",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t={name:"ember-data",initialize(){}} -e.default=t})),define("consul-ui/instance-initializers/href-to",["exports","@ember/routing/link-component"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.HrefTo=void 0 -class n{constructor(e,t){this.applicationInstance=e,this.target=t -const n=this.target.attributes.href -this.url=n&&n.value}handle(e){this.shouldHandle(e)&&(e.preventDefault(),this.applicationInstance.lookup("router:main").location.transitionTo(this.url))}shouldHandle(e){return this.isUnmodifiedLeftClick(e)&&!this.isIgnored(this.target)&&!this.isExternal(this.target)&&!this.hasActionHelper(this.target)&&!this.hasDownload(this.target)&&!this.isLinkComponent(this.target)}isUnmodifiedLeftClick(e){return!(void 0!==e.which&&1!==e.which||e.ctrlKey||e.metaKey)}isExternal(e){return"_blank"===e.getAttribute("target")}isIgnored(e){return e.dataset.nativeHref}hasActionHelper(e){return e.dataset.emberAction}hasDownload(e){return e.hasAttribute("download")}isLinkComponent(e){let n=!1 -const l=e.id -if(l){const e=this.applicationInstance.lookup("-view-registry:main")[l] -n=e&&e instanceof t.default}return n}recognizeUrl(e){let t=!1 -if(e){const n=this._getRouter(),l=this._getRootUrl(),r=0===e.indexOf(l),i=this.getUrlWithoutRoot(),o=n._router._routerMicrolib||n._router.router -t=r&&o.recognizer.recognize(i)}return t}getUrlWithoutRoot(){const e=this.applicationInstance.lookup("router:main").location -let t=e.getURL.apply({getHash:()=>"",location:{pathname:this.url},baseURL:e.baseURL,rootURL:e.rootURL,env:e.env},[]) -const n=t.indexOf("?") -return-1!==n&&(t=t.substr(0,n-1)),t}_getRouter(){return this.applicationInstance.lookup("service:router")}_getRootUrl(){let e=this._getRouter().get("rootURL") -return"/"!==e.charAt(e.length-1)&&(e+="/"),e}}e.HrefTo=n -var l={name:"href-to",initialize(e){if("undefined"==typeof FastBoot){const t=e.lookup("service:dom").document(),l=t=>{const l="A"===t.target.tagName?t.target:function(e){if(e.closest)return e.closest("a") -for(e=e.parentElement;e&&"A"!==e.tagName;)e=e.parentElement -return e}(t.target) -if(l){new n(e,l).handle(t)}} -t.body.addEventListener("click",l),e.reopen({willDestroy(){return t.body.removeEventListener("click",l),this._super(...arguments)}})}}} -e.default=l})),define("consul-ui/instance-initializers/ivy-codemirror",["exports"],(function(e){function t(e){const t=e.application.name,n=e.lookup("service:-document"),l=new Map(Object.entries(JSON.parse(n.querySelector(`[data-${t}-fs]`).textContent))) -CodeMirror.modeURL={replace:function(e,t){switch(t.trim()){case"javascript":return l.get(["codemirror","mode","javascript","javascript.js"].join("/")) -case"ruby":return l.get(["codemirror","mode","ruby","ruby.js"].join("/")) -case"yaml":return l.get(["codemirror","mode","yaml","yaml.js"].join("/")) -case"xml":return l.get(["codemirror","mode","xml","xml.js"].join("/"))}}} -e.resolveRegistration("component:ivy-codemirror").reopen({attributeBindings:["name"]})}Object.defineProperty(e,"__esModule",{value:!0}),e.initialize=t,e.default=void 0 -var n={initialize:t} -e.default=n})),define("consul-ui/instance-initializers/selection",["exports","consul-ui/env"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n={name:"selection",initialize(e){if((0,t.env)("CONSUL_UI_DISABLE_ANCHOR_SELECTION"))return -const n=e.lookup("service:dom"),l=n.document(),r=l.getElementsByTagName("html")[0],i=function(e){return"A"===e.tagName?e:n.closest("a",e)},o=function(e){if(r.classList.contains("is-debug"))return -const t=i(e.target) -if(t){if(void 0!==e.button&&2===e.button){const e=t.dataset.href -return void(e&&t.setAttribute("href",e))}const n=t.getAttribute("href") -n&&(t.dataset.href=n,t.removeAttribute("href"))}},a=function(e){if(r.classList.contains("is-debug"))return -const t=i(e.target) -if(t){const n=t.dataset.href -!function(){const t=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:window).getSelection() -let n=!1 -try{n="isCollapsed"in t&&!t.isCollapsed&&t.toString().length>1}catch(e){}return n}()&&n&&t.setAttribute("href",n)}} -l.body.addEventListener("mousedown",o),l.body.addEventListener("mouseup",a),e.reopen({willDestroy:function(){return l.body.removeEventListener("mousedown",o),l.body.removeEventListener("mouseup",a),this._super(...arguments)}})}} -e.default=n})),define("consul-ui/instance-initializers/setup-routes",["exports","ember","torii/bootstrap/routing","torii/configuration","torii/compat/get-router-instance","torii/compat/get-router-lib","torii/router-dsl-ext"],(function(e,t,n,l,r,i,o){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var a={name:"torii-setup-routes",initialize(e){if(!(0,l.getConfiguration)().sessionServiceName)return -let o=(0,r.default)(e) -const a=e.lookup("service:router") -var u=function(){var l=(0,i.default)(o).authenticatedRoutes -!t.default.isEmpty(l)&&(0,n.default)(e,l),a.off("routeWillChange",u)} -a.on("routeWillChange",u)}} -e.default=a})),define("consul-ui/instance-initializers/walk-providers",["exports","torii/lib/container-utils","torii/configuration"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var l={name:"torii-walk-providers",initialize(e){let l=(0,n.getConfiguration)() -for(var r in l.providers)l.providers.hasOwnProperty(r)&&(0,t.lookup)(e,"torii-provider:"+r)}} -e.default=l})),define("consul-ui/locations/fsm-with-optional-test",["exports","consul-ui/locations/fsm-with-optional","consul-ui/locations/fsm","@ember/test-helpers"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class r extends t.default{static create(){return new this(...arguments)}constructor(){var e,t,l -super(...arguments),l="fsm-with-optional-test",(t="implementation")in(e=this)?Object.defineProperty(e,t,{value:l,enumerable:!0,configurable:!0,writable:!0}):e[t]=l,this.location=new n.Location,this.machine=new n.FSM(this.location),this.doc={defaultView:{addEventListener:(e,t)=>{this.machine=new n.FSM(this.location,t)},removeEventListener:(e,t)=>{this.machine=new n.FSM}}}}visit(e){const t=this.container,n=this.container.lookup("router:main"),r=async e=>(await(0,l.settled)(),new Promise((e=>setTimeout(e(t),0)))),i=e=>{if(e.error)throw e.error -if("TransitionAborted"===e.name&&n._routerMicrolib.activeTransition)return n._routerMicrolib.activeTransition.then(r,i) -throw"TransitionAborted"===e.name?new Error(e.message):e} -return""===this.location.pathname?(this.rootURL=n.rootURL.replace(/\/$/,""),this.machine.state.path=this.location.pathname=`${this.rootURL}${e}`,this.path=this.getURL(),t.handleURL(`${this.path}`).then(r,i)):this.transitionTo(e).then(r,i)}}e.default=r})),define("consul-ui/locations/fsm-with-optional",["exports","consul-ui/env"],(function(e,t){function n(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) -t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function l(e){for(var t=1;t{if(t<3){let t=!1 -return Object.entries(i).reduce(((n,l)=>{let[r,i]=l -const o=i.exec(e) -return null!==o&&(n[r]={value:e,match:o[1]},t=!0),n}),this.optional),!t}return!0})).join("/")}optionalParams(){let e=this.optional||{} -return["partition","nspace","peer"].reduce(((t,n)=>{let l="" -return void 0!==e[n]&&(l=e[n].match),t[n]=l,t}),{})}visit(){return this.transitionTo(...arguments)}hrefTo(e,n,r){const i=l({},r) -void 0!==i.dc&&delete i.dc,void 0!==i.nspace&&(i.nspace=`~${i.nspace}`),void 0!==i.partition&&(i.partition=`_${i.partition}`),void 0!==i.peer&&(i.peer=`:${i.peer}`),void 0===this.router&&(this.router=this.container.lookup("router:main")) -let o=!0 -switch(!0){case"settings"===e:case e.startsWith("docs."):o=!1}if(this.router.currentRouteName.startsWith("docs.")&&(n.unshift((0,t.env)("CONSUL_DATACENTER_PRIMARY")),e.startsWith("dc")))return`console://${e} <= ${JSON.stringify(n)}` -const a=this.router._routerMicrolib -let u -try{u=a.generate(e,...n,{queryParams:{}})}catch(s){n=Object.values(a.oldState.params).reduce(((e,t)=>e.concat(Object.keys(t).length>0?t:[])),[]),u=a.generate(e,...n)}return this.formatURL(u,i,o)}transitionTo(e){if(this.router.currentRouteName.startsWith("docs")&&e.startsWith("console://"))return console.info(`location.transitionTo: ${e.substr(10)}`),!0 -const t=Object.entries(this.optionalParams()),n=this.getURLForTransition(e) -if(this._previousURL===n)return this.dispatch("push",e),Promise.resolve() -{const l=this.optionalParams() -return t.some((e=>{let[t,n]=e -return l[t]!==n}))&&this.dispatch("push",e),this.container.lookup("router:main").transitionTo(n)}}getURL(){const e=this.location.search||"" -let t="" -void 0!==this.location.hash&&(t=this.location.hash.substr(0)) -return`${this.getURLForTransition(this.location.pathname)}${e}${t}`}formatURL(e,t){let n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2] -if(""!==e?(this.rootURL=this.rootURL.replace(o,""),this.baseURL=this.baseURL.replace(o,"")):"/"===this.baseURL[0]&&"/"===this.rootURL[0]&&(this.baseURL=this.baseURL.replace(o,"")),n){const n=e.split("/") -t=l(l({},this.optional),t||{}),t=Object.values(t).filter((e=>Boolean(e))).map((e=>e.value||e),[]),n.splice(...[1,0].concat(t)),e=n.join("/")}return`${this.baseURL}${this.rootURL}${e}`}changeURL(e,t){this.path=t -const n=this.machine.state -t=this.formatURL(t),n&&n.path===t||this.dispatch(e,t)}setURL(e){this.changeURL("push",e)}replaceURL(e){this.changeURL("replace",e)}onUpdateURL(e){this.callback=e}dispatch(e,t){const n={path:t,uuid:"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(e=>{const t=16*Math.random()|0 -return("x"===e?t:3&t|8).toString(16)}))} -this.machine[`${e}State`](n,null,t),this.route({state:n})}willDestroy(){this.doc.defaultView.removeEventListener("popstate",this.route)}}})),define("consul-ui/locations/fsm",["exports"],(function(e){function t(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.Location=e.FSM=void 0 -e.FSM=class{constructor(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:()=>{} -t(this,"state",{}),this.listener=n,this.location=e}pushState(e,t,n){this.state=e,this.location.pathname=n,this.listener({state:this.state})}replaceState(){return this.pushState(...arguments)}} -e.Location=class{constructor(){t(this,"pathname",""),t(this,"search",""),t(this,"hash","")}} -e.default=class{static create(){return new this(...arguments)}constructor(e){t(this,"implementation","fsm"),this.container=Object.entries(e)[0][1]}visit(){return this.transitionTo(...arguments)}hrefTo(){}transitionTo(){}}})),define("consul-ui/machines/boolean.xstate",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={id:"boolean",initial:"false",states:{true:{on:{TOGGLE:[{target:"false"}],FALSE:[{target:"false"}]}},false:{on:{TOGGLE:[{target:"true"}],TRUE:[{target:"true"}]}}}}})),define("consul-ui/machines/validate.xstate",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={id:"form",initial:"idle",on:{RESET:[{target:"idle"}]},states:{idle:{on:{SUCCESS:[{target:"success"}],ERROR:[{target:"error"}]}},success:{},error:{}}}})),define("consul-ui/mixins/policy/as-many",["exports","@ember/object/mixin","@ember/object","consul-ui/utils/minimizeModel"],(function(e,t,n,l){function r(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) -t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const o=function(e,t,n,l){return(e||[]).map((function(e){const r={template:t,Name:e[n]} -return void 0!==e[l]&&(r[l]=e[l]),r}))},a=function(e){return(e||[]).map((function(e){return function(e){for(var t=1;t(n.Policies=a(n.Policies).concat(o(n.ServiceIdentities,"service-identity","ServiceName","Datacenters")).concat(o(n.NodeIdentities,"node-identity","NodeName","Datacenter")),t(e,n))))}),t)},respondForQuery:function(e,t){return this._super((function(t){return e((function(e,n){return t(e,n.map((function(e){return e.Policies=a(e.Policies).concat(o(e.ServiceIdentities,"service-identity","ServiceName","Datacenters")).concat(o(e.NodeIdentities,"node-identity","NodeName","Datacenter")),e})))}))}),t)},serialize:function(e,t){const n=this._super(...arguments) -return n.ServiceIdentities=u(n.Policies,"service-identity","ServiceName","Datacenters"),n.NodeIdentities=u(n.Policies,"node-identity","NodeName","Datacenter"),n.Policies=(0,l.default)(s(n.Policies)),n}}) -e.default=c})),define("consul-ui/mixins/role/as-many",["exports","@ember/object/mixin","consul-ui/utils/minimizeModel"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var l=t.default.create({respondForQueryRecord:function(e,t){return this._super((function(t){return e(((e,n)=>(n.Roles=void 0===n.Roles||null===n.Roles?[]:n.Roles,t(e,n))))}),t)},respondForQuery:function(e,t){return this._super((function(t){return e((function(e,n){return t(e,n.map((function(e){return e.Roles=void 0===e.Roles||null===e.Roles?[]:e.Roles,e})))}))}),t)},serialize:function(e,t){const l=this._super(...arguments) -return l.Roles=(0,n.default)(l.Roles),l}}) -e.default=l})),define("consul-ui/mixins/slots",["exports","block-slots/mixins/slots"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/mixins/with-blocking-actions",["exports","@ember/object/mixin","@ember/service","@ember/object","ember-inflector"],(function(e,t,n,l,r){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var i=t.default.create({_feedback:(0,n.inject)("feedback"),settings:(0,n.inject)("settings"),init:function(){this._super(...arguments) -const e=this._feedback,t=this;(0,l.set)(this,"feedback",{execute:function(n,l,i){const o=t.routeName.split(".") -o.pop() -const a=(0,r.singularize)(o.pop()) -return e.execute(n,l,i,a)}})},afterCreate:function(e){return this.afterUpdate(...arguments)},afterUpdate:function(e){const t=this.routeName.split(".") -return t.pop(),this.transitionTo(t.join("."))},afterDelete:function(e){const t=this.routeName.split(".") -return"index"===t.pop()?this.refresh():this.transitionTo(t.join("."))},errorCreate:function(e,t){return e},errorUpdate:function(e,t){return e},errorDelete:function(e,t){return e},actions:{cancel:function(){return this.afterUpdate(...arguments)},create:function(e,t){return t.preventDefault(),this.feedback.execute((()=>this.repo.persist(e).then((e=>this.afterCreate(...arguments)))),"create",((e,t)=>this.errorCreate(e,t)))},update:function(e,t){return t.preventDefault(),this.feedback.execute((()=>this.repo.persist(e).then((()=>this.afterUpdate(...arguments)))),"update",((e,t)=>this.errorUpdate(e,t)))},delete:function(e){return this.feedback.execute((()=>this.repo.remove(e).then((()=>this.afterDelete(...arguments)))),"delete",((e,t)=>this.errorDelete(e,t)))},use:function(e){return this.repo.findBySlug({dc:(0,l.get)(e,"Datacenter"),ns:(0,l.get)(e,"Namespace"),partition:(0,l.get)(e,"Partition"),id:(0,l.get)(e,"AccessorID")}).then((e=>this.settings.persist({token:{AccessorID:(0,l.get)(e,"AccessorID"),SecretID:(0,l.get)(e,"SecretID"),Namespace:(0,l.get)(e,"Namespace"),Partition:(0,l.get)(e,"Partition")}})))},logout:function(e){return this.settings.delete("token")},clone:function(e){let t -return this.feedback.execute((()=>this.repo.clone(e).then((e=>(t=e,this.afterDelete(...arguments)))).then((function(){return t}))),"clone")}}}) -e.default=i})),define("consul-ui/models/auth-method",["exports","@ember-data/model","@ember/object/computed","parse-duration","@ember/object"],(function(e,t,n,l,r){var i,o,a,u,s,c,d,p,f,m,h,b,y,g,v,O,P,x,w,j,_,k,S,N,C,z,M,D,T,E,L,A,R,I,$,F -function U(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function B(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.PRIMARY_KEY=void 0 -e.PRIMARY_KEY="uid" -e.SLUG_KEY="Name" -let q=(i=(0,t.attr)("string"),o=(0,t.attr)("string"),a=(0,t.attr)("string"),u=(0,t.attr)("string"),s=(0,t.attr)("string"),c=(0,t.attr)("string",{defaultValue:()=>""}),d=(0,t.attr)("string",{defaultValue:()=>""}),p=(0,t.attr)("string",{defaultValue:()=>"local"}),f=(0,t.attr)("string"),m=(0,t.attr)(),h=(0,n.or)("DisplayName","Name"),b=(0,t.attr)(),y=(0,t.attr)("string"),g=(0,t.attr)("number"),v=(0,t.attr)("number"),O=(0,t.attr)(),P=(0,t.attr)(),x=(0,r.computed)("MaxTokenTTL"),w=class extends t.default{constructor(){super(...arguments),U(this,"uid",j,this),U(this,"Name",_,this),U(this,"Datacenter",k,this),U(this,"Namespace",S,this),U(this,"Partition",N,this),U(this,"Description",C,this),U(this,"DisplayName",z,this),U(this,"TokenLocality",M,this),U(this,"Type",D,this),U(this,"NamespaceRules",T,this),U(this,"MethodName",E,this),U(this,"Config",L,this),U(this,"MaxTokenTTL",A,this),U(this,"CreateIndex",R,this),U(this,"ModifyIndex",I,this),U(this,"Datacenters",$,this),U(this,"meta",F,this)}get TokenTTL(){return(0,l.default)(this.MaxTokenTTL)}},j=B(w.prototype,"uid",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),_=B(w.prototype,"Name",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),k=B(w.prototype,"Datacenter",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),S=B(w.prototype,"Namespace",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),N=B(w.prototype,"Partition",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),C=B(w.prototype,"Description",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),z=B(w.prototype,"DisplayName",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),M=B(w.prototype,"TokenLocality",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),D=B(w.prototype,"Type",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),T=B(w.prototype,"NamespaceRules",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),E=B(w.prototype,"MethodName",[h],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),L=B(w.prototype,"Config",[b],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),A=B(w.prototype,"MaxTokenTTL",[y],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),R=B(w.prototype,"CreateIndex",[g],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),I=B(w.prototype,"ModifyIndex",[v],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),$=B(w.prototype,"Datacenters",[O],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),F=B(w.prototype,"meta",[P],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),B(w.prototype,"TokenTTL",[x],Object.getOwnPropertyDescriptor(w.prototype,"TokenTTL"),w.prototype),w) -e.default=q})),define("consul-ui/models/binding-rule",["exports","@ember-data/model"],(function(e,t){var n,l,r,i,o,a,u,s,c,d,p,f,m,h,b,y,g,v,O,P,x,w,j,_,k -function S(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function N(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.PRIMARY_KEY=void 0 -e.PRIMARY_KEY="uid" -e.SLUG_KEY="ID" -let C=(n=(0,t.attr)("string"),l=(0,t.attr)("string"),r=(0,t.attr)("string"),i=(0,t.attr)("string"),o=(0,t.attr)("string"),a=(0,t.attr)("string",{defaultValue:()=>""}),u=(0,t.attr)("string"),s=(0,t.attr)("string",{defaultValue:()=>""}),c=(0,t.attr)("string"),d=(0,t.attr)("string"),p=(0,t.attr)("number"),f=(0,t.attr)("number"),m=class extends t.default{constructor(){super(...arguments),S(this,"uid",h,this),S(this,"ID",b,this),S(this,"Datacenter",y,this),S(this,"Namespace",g,this),S(this,"Partition",v,this),S(this,"Description",O,this),S(this,"AuthMethod",P,this),S(this,"Selector",x,this),S(this,"BindType",w,this),S(this,"BindName",j,this),S(this,"CreateIndex",_,this),S(this,"ModifyIndex",k,this)}},h=N(m.prototype,"uid",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=N(m.prototype,"ID",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),y=N(m.prototype,"Datacenter",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),g=N(m.prototype,"Namespace",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),v=N(m.prototype,"Partition",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),O=N(m.prototype,"Description",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),P=N(m.prototype,"AuthMethod",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),x=N(m.prototype,"Selector",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),w=N(m.prototype,"BindType",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),j=N(m.prototype,"BindName",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),_=N(m.prototype,"CreateIndex",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),k=N(m.prototype,"ModifyIndex",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m) -e.default=C})),define("consul-ui/models/coordinate",["exports","@ember-data/model"],(function(e,t){var n,l,r,i,o,a,u,s,c,d,p,f,m,h,b -function y(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function g(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.PRIMARY_KEY=void 0 -e.PRIMARY_KEY="uid" -e.SLUG_KEY="Node" -let v=(n=(0,t.attr)("string"),l=(0,t.attr)("string"),r=(0,t.attr)(),i=(0,t.attr)("string"),o=(0,t.attr)("string"),a=(0,t.attr)("string"),u=(0,t.attr)("number"),s=class extends t.default{constructor(){super(...arguments),y(this,"uid",c,this),y(this,"Node",d,this),y(this,"Coord",p,this),y(this,"Segment",f,this),y(this,"Datacenter",m,this),y(this,"Partition",h,this),y(this,"SyncTime",b,this)}},c=g(s.prototype,"uid",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),d=g(s.prototype,"Node",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p=g(s.prototype,"Coord",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f=g(s.prototype,"Segment",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m=g(s.prototype,"Datacenter",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=g(s.prototype,"Partition",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=g(s.prototype,"SyncTime",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),s) -e.default=v})),define("consul-ui/models/dc",["exports","@ember-data/model"],(function(e,t){var n,l,r,i,o,a,u,s,c,d,p,f,m,h,b,y,g,v,O,P,x,w,j,_,k,S,N,C,z,M,D -function T(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function E(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.FOREIGN_KEY=e.PRIMARY_KEY=void 0 -e.PRIMARY_KEY="uid" -e.FOREIGN_KEY="Datacenter" -e.SLUG_KEY="Name" -let L=(n=(0,t.attr)("string"),l=(0,t.attr)("string"),r=(0,t.attr)("boolean"),i=(0,t.attr)("number"),o=(0,t.attr)("number"),a=(0,t.attr)("string"),u=(0,t.attr)(),s=(0,t.attr)(),c=(0,t.attr)(),d=(0,t.attr)(),p=(0,t.attr)(),f=(0,t.attr)("boolean"),m=(0,t.attr)("boolean"),h=(0,t.attr)("string"),b=(0,t.attr)("boolean",{defaultValue:()=>!0}),y=class extends t.default{constructor(){super(...arguments),T(this,"uri",g,this),T(this,"Name",v,this),T(this,"Healthy",O,this),T(this,"FailureTolerance",P,this),T(this,"OptimisticFailureTolerance",x,this),T(this,"Leader",w,this),T(this,"Voters",j,this),T(this,"Servers",_,this),T(this,"RedundancyZones",k,this),T(this,"Default",S,this),T(this,"ReadReplicas",N,this),T(this,"Local",C,this),T(this,"Primary",z,this),T(this,"DefaultACLPolicy",M,this),T(this,"MeshEnabled",D,this)}},g=E(y.prototype,"uri",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),v=E(y.prototype,"Name",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),O=E(y.prototype,"Healthy",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),P=E(y.prototype,"FailureTolerance",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),x=E(y.prototype,"OptimisticFailureTolerance",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),w=E(y.prototype,"Leader",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),j=E(y.prototype,"Voters",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),_=E(y.prototype,"Servers",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),k=E(y.prototype,"RedundancyZones",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),S=E(y.prototype,"Default",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),N=E(y.prototype,"ReadReplicas",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),C=E(y.prototype,"Local",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),z=E(y.prototype,"Primary",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),M=E(y.prototype,"DefaultACLPolicy",[h],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),D=E(y.prototype,"MeshEnabled",[b],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),y) -e.default=L})),define("consul-ui/models/discovery-chain",["exports","@ember-data/model"],(function(e,t){var n,l,r,i,o,a,u,s,c,d,p,f,m,h,b -function y(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function g(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.PRIMARY_KEY=void 0 -e.PRIMARY_KEY="uid" -e.SLUG_KEY="ServiceName" -let v=(n=(0,t.attr)("string"),l=(0,t.attr)("string"),r=(0,t.attr)("string"),i=(0,t.attr)("string"),o=(0,t.attr)("string"),a=(0,t.attr)(),u=(0,t.attr)(),s=class extends t.default{constructor(){super(...arguments),y(this,"uid",c,this),y(this,"ServiceName",d,this),y(this,"Datacenter",p,this),y(this,"Partition",f,this),y(this,"Namespace",m,this),y(this,"Chain",h,this),y(this,"meta",b,this)}},c=g(s.prototype,"uid",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),d=g(s.prototype,"ServiceName",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p=g(s.prototype,"Datacenter",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f=g(s.prototype,"Partition",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m=g(s.prototype,"Namespace",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=g(s.prototype,"Chain",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=g(s.prototype,"meta",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),s) -e.default=v})),define("consul-ui/models/gateway-config",["exports","ember-data-model-fragments/fragment","ember-data-model-fragments/attributes","@ember-data/model"],(function(e,t,n,l){var r,i,o,a,u -function s(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function c(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let d=(r=(0,l.attr)("number",{defaultValue:()=>0}),i=(0,n.array)("string",{defaultValue:()=>[]}),o=class extends t.default{constructor(){super(...arguments),s(this,"AssociatedServiceCount",a,this),s(this,"Addresses",u,this)}},a=c(o.prototype,"AssociatedServiceCount",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),u=c(o.prototype,"Addresses",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),o) -e.default=d})),define("consul-ui/models/health-check",["exports","ember-data-model-fragments/fragment","ember-data-model-fragments/attributes","@ember-data/model","@ember/object","consul-ui/decorators/replace"],(function(e,t,n,l,r,i){var o,a,u,s,c,d,p,f,m,h,b,y,g,v,O,P,x,w,j,_,k,S,N,C,z,M,D,T,E -function L(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function A(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.schema=void 0 -e.schema={Status:{allowedValues:["passing","warning","critical"]},Type:{allowedValues:["serf","script","http","tcp","ttl","docker","grpc","alias"]}} -let R=(o=(0,l.attr)("string"),a=(0,l.attr)("string"),u=(0,i.replace)("","serf"),s=(0,l.attr)("string"),c=(0,l.attr)("string"),d=(0,l.attr)("string"),p=(0,l.attr)("string"),f=(0,l.attr)("string"),m=(0,l.attr)("string"),h=(0,l.attr)("string"),b=(0,i.nullValue)([]),y=(0,n.array)("string"),g=(0,l.attr)(),v=(0,l.attr)("boolean"),O=(0,r.computed)("ServiceID"),P=(0,r.computed)("Type"),x=class extends t.default{constructor(){super(...arguments),L(this,"Name",w,this),L(this,"CheckID",j,this),L(this,"Type",_,this),L(this,"Status",k,this),L(this,"Notes",S,this),L(this,"Output",N,this),L(this,"ServiceName",C,this),L(this,"ServiceID",z,this),L(this,"Node",M,this),L(this,"ServiceTags",D,this),L(this,"Definition",T,this),L(this,"Exposed",E,this)}get Kind(){return""===this.ServiceID?"node":"service"}get Exposable(){return["http","grpc"].includes(this.Type)}},w=A(x.prototype,"Name",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),j=A(x.prototype,"CheckID",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),_=A(x.prototype,"Type",[u,s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),k=A(x.prototype,"Status",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),S=A(x.prototype,"Notes",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),N=A(x.prototype,"Output",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),C=A(x.prototype,"ServiceName",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),z=A(x.prototype,"ServiceID",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),M=A(x.prototype,"Node",[h],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),D=A(x.prototype,"ServiceTags",[b,y],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),T=A(x.prototype,"Definition",[g],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),E=A(x.prototype,"Exposed",[v],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),A(x.prototype,"Kind",[O],Object.getOwnPropertyDescriptor(x.prototype,"Kind"),x.prototype),A(x.prototype,"Exposable",[P],Object.getOwnPropertyDescriptor(x.prototype,"Exposable"),x.prototype),x) -e.default=R})),define("consul-ui/models/intention-permission-http-header",["exports","ember-data-model-fragments/fragment","@ember-data/model","@ember/object","@ember/object/computed"],(function(e,t,n,l,r){var i,o,a,u,s,c,d,p,f,m,h,b,y,g,v,O -function P(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function x(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.schema=void 0 -const w={Name:{required:!0},HeaderType:{allowedValues:["Exact","Prefix","Suffix","Regex","Present"]}} -e.schema=w -let j=(i=(0,n.attr)("string"),o=(0,n.attr)("string"),a=(0,n.attr)("string"),u=(0,n.attr)("string"),s=(0,n.attr)("string"),c=(0,n.attr)(),d=(0,r.or)(...w.HeaderType.allowedValues),p=(0,l.computed)(...w.HeaderType.allowedValues),f=class extends t.default{constructor(){super(...arguments),P(this,"Name",m,this),P(this,"Exact",h,this),P(this,"Prefix",b,this),P(this,"Suffix",y,this),P(this,"Regex",g,this),P(this,"Present",v,this),P(this,"Value",O,this)}get HeaderType(){return w.HeaderType.allowedValues.find((e=>void 0!==this[e]))}},m=x(f.prototype,"Name",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=x(f.prototype,"Exact",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=x(f.prototype,"Prefix",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),y=x(f.prototype,"Suffix",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),g=x(f.prototype,"Regex",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),v=x(f.prototype,"Present",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),O=x(f.prototype,"Value",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),x(f.prototype,"HeaderType",[p],Object.getOwnPropertyDescriptor(f.prototype,"HeaderType"),f.prototype),f) -e.default=j})),define("consul-ui/models/intention-permission-http",["exports","ember-data-model-fragments/fragment","ember-data-model-fragments/attributes","@ember-data/model","@ember/object","@ember/object/computed"],(function(e,t,n,l,r,i){var o,a,u,s,c,d,p,f,m,h,b,y,g,v -function O(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function P(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.schema=void 0 -const x={PathType:{allowedValues:["PathPrefix","PathExact","PathRegex"]},Methods:{allowedValues:["GET","HEAD","POST","PUT","DELETE","CONNECT","OPTIONS","TRACE","PATCH"]}} -e.schema=x -let w=(o=(0,l.attr)("string"),a=(0,l.attr)("string"),u=(0,l.attr)("string"),s=(0,n.fragmentArray)("intention-permission-http-header"),c=(0,n.array)("string"),d=(0,i.or)(...x.PathType.allowedValues),p=(0,r.computed)(...x.PathType.allowedValues),f=class extends t.default{constructor(){super(...arguments),O(this,"PathExact",m,this),O(this,"PathPrefix",h,this),O(this,"PathRegex",b,this),O(this,"Header",y,this),O(this,"Methods",g,this),O(this,"Path",v,this)}get PathType(){return x.PathType.allowedValues.find((e=>"string"==typeof this[e]))}},m=P(f.prototype,"PathExact",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=P(f.prototype,"PathPrefix",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=P(f.prototype,"PathRegex",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),y=P(f.prototype,"Header",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),g=P(f.prototype,"Methods",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),v=P(f.prototype,"Path",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),P(f.prototype,"PathType",[p],Object.getOwnPropertyDescriptor(f.prototype,"PathType"),f.prototype),f) -e.default=w})),define("consul-ui/models/intention-permission",["exports","ember-data-model-fragments/fragment","ember-data-model-fragments/attributes","@ember-data/model"],(function(e,t,n,l){var r,i,o,a,u -function s(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function c(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.schema=void 0 -const d={Action:{defaultValue:"allow",allowedValues:["allow","deny"]}} -e.schema=d -let p=(r=(0,l.attr)("string",{defaultValue:()=>d.Action.defaultValue}),i=(0,n.fragment)("intention-permission-http"),o=class extends t.default{constructor(){super(...arguments),s(this,"Action",a,this),s(this,"HTTP",u,this)}},a=c(o.prototype,"Action",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),u=c(o.prototype,"HTTP",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),o) -e.default=p})),define("consul-ui/models/intention",["exports","@ember-data/model","@ember/object","ember-data-model-fragments/attributes","consul-ui/decorators/replace"],(function(e,t,n,l,r){var i,o,a,u,s,c,d,p,f,m,h,b,y,g,v,O,P,x,w,j,_,k,S,N,C,z,M,D,T,E,L,A,R,I,$,F,U,B,q,K,H,Y,G,V,W,Z,Q,J,X,ee,te,ne -function le(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function re(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.PRIMARY_KEY=void 0 -e.PRIMARY_KEY="uid" -e.SLUG_KEY="ID" -let ie=(i=(0,t.attr)("string"),o=(0,t.attr)("string"),a=(0,t.attr)("string"),u=(0,t.attr)("string"),s=(0,r.default)("",void 0),c=(0,t.attr)("string"),d=(0,t.attr)("string",{defaultValue:()=>"*"}),p=(0,t.attr)("string",{defaultValue:()=>"*"}),f=(0,t.attr)("string",{defaultValue:()=>"default"}),m=(0,t.attr)("string",{defaultValue:()=>"default"}),h=(0,t.attr)("string",{defaultValue:()=>"default"}),b=(0,t.attr)("string",{defaultValue:()=>"default"}),y=(0,t.attr)("number"),g=(0,t.attr)("string",{defaultValue:()=>"consul"}),v=(0,r.nullValue)(void 0),O=(0,t.attr)("string"),P=(0,t.attr)("string"),x=(0,t.attr)("boolean",{defaultValue:()=>!0}),w=(0,t.attr)("number"),j=(0,t.attr)("date"),_=(0,t.attr)("date"),k=(0,t.attr)("number"),S=(0,t.attr)("number"),N=(0,t.attr)(),C=(0,t.attr)({defaultValue:()=>[]}),z=(0,l.fragmentArray)("intention-permission"),M=(0,n.computed)("Meta"),D=class extends t.default{constructor(){super(...arguments),le(this,"uid",T,this),le(this,"ID",E,this),le(this,"Datacenter",L,this),le(this,"Description",A,this),le(this,"SourcePeer",R,this),le(this,"SourceName",I,this),le(this,"DestinationName",$,this),le(this,"SourceNS",F,this),le(this,"DestinationNS",U,this),le(this,"SourcePartition",B,this),le(this,"DestinationPartition",q,this),le(this,"Precedence",K,this),le(this,"SourceType",H,this),le(this,"Action",Y,this),le(this,"LegacyID",G,this),le(this,"Legacy",V,this),le(this,"SyncTime",W,this),le(this,"CreatedAt",Z,this),le(this,"UpdatedAt",Q,this),le(this,"CreateIndex",J,this),le(this,"ModifyIndex",X,this),le(this,"Meta",ee,this),le(this,"Resources",te,this),le(this,"Permissions",ne,this)}get IsManagedByCRD(){return void 0!==Object.entries(this.Meta||{}).find((e=>{let[t,n]=e -return"external-source"===t&&"kubernetes"===n}))}},T=re(D.prototype,"uid",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),E=re(D.prototype,"ID",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),L=re(D.prototype,"Datacenter",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),A=re(D.prototype,"Description",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),R=re(D.prototype,"SourcePeer",[s,c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),I=re(D.prototype,"SourceName",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),$=re(D.prototype,"DestinationName",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),F=re(D.prototype,"SourceNS",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),U=re(D.prototype,"DestinationNS",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),B=re(D.prototype,"SourcePartition",[h],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),q=re(D.prototype,"DestinationPartition",[b],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),K=re(D.prototype,"Precedence",[y],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),H=re(D.prototype,"SourceType",[g],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Y=re(D.prototype,"Action",[v,O],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),G=re(D.prototype,"LegacyID",[P],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),V=re(D.prototype,"Legacy",[x],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),W=re(D.prototype,"SyncTime",[w],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Z=re(D.prototype,"CreatedAt",[j],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Q=re(D.prototype,"UpdatedAt",[_],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),J=re(D.prototype,"CreateIndex",[k],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),X=re(D.prototype,"ModifyIndex",[S],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ee=re(D.prototype,"Meta",[N],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),te=re(D.prototype,"Resources",[C],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ne=re(D.prototype,"Permissions",[z],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),re(D.prototype,"IsManagedByCRD",[M],Object.getOwnPropertyDescriptor(D.prototype,"IsManagedByCRD"),D.prototype),D) -e.default=ie})) -define("consul-ui/models/kv",["exports","@ember-data/model","@ember/object","consul-ui/utils/isFolder","consul-ui/decorators/replace"],(function(e,t,n,l,r){var i,o,a,u,s,c,d,p,f,m,h,b,y,g,v,O,P,x,w,j,_,k,S,N,C,z,M,D,T,E,L,A -function R(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function I(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.PRIMARY_KEY=void 0 -e.PRIMARY_KEY="uid" -e.SLUG_KEY="Key" -let $=(i=(0,t.attr)("string"),o=(0,t.attr)("string"),a=(0,t.attr)("number"),u=(0,t.attr)(),s=(0,t.attr)("string"),c=(0,t.attr)("string"),d=(0,t.attr)("string"),p=(0,t.attr)("number"),f=(0,t.attr)("number"),m=(0,r.nullValue)(void 0),h=(0,t.attr)("string"),b=(0,t.attr)("number"),y=(0,t.attr)("number"),g=(0,t.attr)("string"),v=(0,t.attr)({defaultValue:()=>[]}),O=(0,n.computed)("isFolder"),P=(0,n.computed)("Key"),x=class extends t.default{constructor(){super(...arguments),R(this,"uid",w,this),R(this,"Key",j,this),R(this,"SyncTime",_,this),R(this,"meta",k,this),R(this,"Datacenter",S,this),R(this,"Namespace",N,this),R(this,"Partition",C,this),R(this,"LockIndex",z,this),R(this,"Flags",M,this),R(this,"Value",D,this),R(this,"CreateIndex",T,this),R(this,"ModifyIndex",E,this),R(this,"Session",L,this),R(this,"Resources",A,this)}get Kind(){return this.isFolder?"folder":"key"}get isFolder(){return(0,l.default)(this.Key||"")}},w=I(x.prototype,"uid",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),j=I(x.prototype,"Key",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),_=I(x.prototype,"SyncTime",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),k=I(x.prototype,"meta",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),S=I(x.prototype,"Datacenter",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),N=I(x.prototype,"Namespace",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),C=I(x.prototype,"Partition",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),z=I(x.prototype,"LockIndex",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),M=I(x.prototype,"Flags",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),D=I(x.prototype,"Value",[m,h],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),T=I(x.prototype,"CreateIndex",[b],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),E=I(x.prototype,"ModifyIndex",[y],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),L=I(x.prototype,"Session",[g],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),A=I(x.prototype,"Resources",[v],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),I(x.prototype,"Kind",[O],Object.getOwnPropertyDescriptor(x.prototype,"Kind"),x.prototype),I(x.prototype,"isFolder",[P],Object.getOwnPropertyDescriptor(x.prototype,"isFolder"),x.prototype),x) -e.default=$})),define("consul-ui/models/license",["exports","@ember-data/model"],(function(e,t){var n,l,r,i,o,a,u,s,c,d,p,f,m,h,b,y,g -function v(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function O(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.PRIMARY_KEY=void 0 -e.PRIMARY_KEY="uri" -let P=(n=(0,t.attr)("string"),l=(0,t.attr)("boolean"),r=(0,t.attr)("number"),i=(0,t.attr)(),o=(0,t.attr)("string"),a=(0,t.attr)("string"),u=(0,t.attr)("string"),s=(0,t.attr)(),c=class extends t.default{constructor(){super(...arguments),v(this,"uri",d,this),v(this,"Valid",p,this),v(this,"SyncTime",f,this),v(this,"meta",m,this),v(this,"Datacenter",h,this),v(this,"Namespace",b,this),v(this,"Partition",y,this),v(this,"License",g,this)}},d=O(c.prototype,"uri",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p=O(c.prototype,"Valid",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f=O(c.prototype,"SyncTime",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m=O(c.prototype,"meta",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=O(c.prototype,"Datacenter",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=O(c.prototype,"Namespace",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),y=O(c.prototype,"Partition",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),g=O(c.prototype,"License",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),c) -e.default=P})),define("consul-ui/models/node",["exports","@ember-data/model","@ember/object","@ember/object/computed","ember-data-model-fragments/attributes"],(function(e,t,n,l,r){var i,o,a,u,s,c,d,p,f,m,h,b,y,g,v,O,P,x,w,j,_,k,S,N,C,z,M,D,T,E,L,A,R,I,$,F,U,B,q,K,H,Y,G -function V(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function W(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.PRIMARY_KEY=void 0 -e.PRIMARY_KEY="uid" -e.SLUG_KEY="ID" -let Z=(i=(0,t.attr)("string"),o=(0,t.attr)("string"),a=(0,t.attr)("string"),u=(0,t.attr)("string"),s=(0,t.attr)("string"),c=(0,t.attr)("string"),d=(0,t.attr)("string"),p=(0,t.attr)("number"),f=(0,t.attr)("number"),m=(0,t.attr)("number"),h=(0,t.attr)(),b=(0,t.attr)(),y=(0,t.attr)(),g=(0,t.attr)({defaultValue:()=>[]}),v=(0,t.hasMany)("service-instance"),O=(0,r.fragmentArray)("health-check"),P=(0,l.filter)("Services",(e=>"connect-proxy"!==e.Service.Kind)),x=(0,l.filter)("Services",(e=>"connect-proxy"===e.Service.Kind)),w=(0,l.filter)("Checks",(e=>""===e.ServiceID)),j=(0,n.computed)("ChecksCritical","ChecksPassing","ChecksWarning"),_=(0,n.computed)("NodeChecks.[]"),k=(0,n.computed)("NodeChecks.[]"),S=(0,n.computed)("NodeChecks.[]"),N=class extends t.default{constructor(){super(...arguments),V(this,"uid",C,this),V(this,"ID",z,this),V(this,"Datacenter",M,this),V(this,"PeerName",D,this),V(this,"Partition",T,this),V(this,"Address",E,this),V(this,"Node",L,this),V(this,"SyncTime",A,this),V(this,"CreateIndex",R,this),V(this,"ModifyIndex",I,this),V(this,"meta",$,this),V(this,"Meta",F,this),V(this,"TaggedAddresses",U,this),V(this,"Resources",B,this),V(this,"Services",q,this),V(this,"Checks",K,this),V(this,"MeshServiceInstances",H,this),V(this,"ProxyServiceInstances",Y,this),V(this,"NodeChecks",G,this)}get Status(){switch(!0){case 0!==this.ChecksCritical:return"critical" -case 0!==this.ChecksWarning:return"warning" -case 0!==this.ChecksPassing:return"passing" -default:return"empty"}}get ChecksCritical(){return this.NodeChecks.filter((e=>"critical"===e.Status)).length}get ChecksPassing(){return this.NodeChecks.filter((e=>"passing"===e.Status)).length}get ChecksWarning(){return this.NodeChecks.filter((e=>"warning"===e.Status)).length}},C=W(N.prototype,"uid",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),z=W(N.prototype,"ID",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),M=W(N.prototype,"Datacenter",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),D=W(N.prototype,"PeerName",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),T=W(N.prototype,"Partition",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),E=W(N.prototype,"Address",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),L=W(N.prototype,"Node",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),A=W(N.prototype,"SyncTime",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),R=W(N.prototype,"CreateIndex",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),I=W(N.prototype,"ModifyIndex",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),$=W(N.prototype,"meta",[h],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),F=W(N.prototype,"Meta",[b],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),U=W(N.prototype,"TaggedAddresses",[y],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),B=W(N.prototype,"Resources",[g],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),q=W(N.prototype,"Services",[v],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),K=W(N.prototype,"Checks",[O],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),H=W(N.prototype,"MeshServiceInstances",[P],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Y=W(N.prototype,"ProxyServiceInstances",[x],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),G=W(N.prototype,"NodeChecks",[w],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),W(N.prototype,"Status",[j],Object.getOwnPropertyDescriptor(N.prototype,"Status"),N.prototype),W(N.prototype,"ChecksCritical",[_],Object.getOwnPropertyDescriptor(N.prototype,"ChecksCritical"),N.prototype),W(N.prototype,"ChecksPassing",[k],Object.getOwnPropertyDescriptor(N.prototype,"ChecksPassing"),N.prototype),W(N.prototype,"ChecksWarning",[S],Object.getOwnPropertyDescriptor(N.prototype,"ChecksWarning"),N.prototype),N) -e.default=Z})),define("consul-ui/models/nspace",["exports","@ember-data/model"],(function(e,t){var n,l,r,i,o,a,u,s,c,d,p,f,m,h,b,y,g,v,O,P,x -function w(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function j(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.NSPACE_KEY=e.SLUG_KEY=e.PRIMARY_KEY=void 0 -e.PRIMARY_KEY="uid" -e.SLUG_KEY="Name" -e.NSPACE_KEY="Namespace" -let _=(n=(0,t.attr)("string"),l=(0,t.attr)("string"),r=(0,t.attr)("string"),i=(0,t.attr)("string"),o=(0,t.attr)("string"),a=(0,t.attr)("number"),u=(0,t.attr)("string",{defaultValue:()=>""}),s=(0,t.attr)({defaultValue:()=>[]}),c=(0,t.attr)("string"),d=(0,t.attr)({defaultValue:()=>({PolicyDefaults:[],RoleDefaults:[]})}),p=class extends t.default{constructor(){super(...arguments),w(this,"uid",f,this),w(this,"Name",m,this),w(this,"Datacenter",h,this),w(this,"Partition",b,this),w(this,"Namespace",y,this),w(this,"SyncTime",g,this),w(this,"Description",v,this),w(this,"Resources",O,this),w(this,"DeletedAt",P,this),w(this,"ACLs",x,this)}},f=j(p.prototype,"uid",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m=j(p.prototype,"Name",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=j(p.prototype,"Datacenter",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=j(p.prototype,"Partition",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),y=j(p.prototype,"Namespace",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),g=j(p.prototype,"SyncTime",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),v=j(p.prototype,"Description",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),O=j(p.prototype,"Resources",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),P=j(p.prototype,"DeletedAt",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),x=j(p.prototype,"ACLs",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p) -e.default=_})),define("consul-ui/models/oidc-provider",["exports","@ember-data/model"],(function(e,t){var n,l,r,i,o,a,u,s,c,d,p,f,m,h,b,y,g,v,O -function P(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function x(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.PRIMARY_KEY=void 0 -e.PRIMARY_KEY="uid" -e.SLUG_KEY="Name" -let w=(n=(0,t.attr)("string"),l=(0,t.attr)("string"),r=(0,t.attr)("string"),i=(0,t.attr)("string"),o=(0,t.attr)("string"),a=(0,t.attr)("string"),u=(0,t.attr)("string"),s=(0,t.attr)("string"),c=(0,t.attr)(),d=class extends t.default{constructor(){super(...arguments),P(this,"uid",p,this),P(this,"Name",f,this),P(this,"Datacenter",m,this),P(this,"Namespace",h,this),P(this,"Partition",b,this),P(this,"Kind",y,this),P(this,"AuthURL",g,this),P(this,"DisplayName",v,this),P(this,"meta",O,this)}},p=x(d.prototype,"uid",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f=x(d.prototype,"Name",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m=x(d.prototype,"Datacenter",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=x(d.prototype,"Namespace",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=x(d.prototype,"Partition",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),y=x(d.prototype,"Kind",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),g=x(d.prototype,"AuthURL",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),v=x(d.prototype,"DisplayName",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),O=x(d.prototype,"meta",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),d) -e.default=w})),define("consul-ui/models/partition",["exports","ember-data/model","ember-data/attr"],(function(e,t,n){var l,r,i,o,a,u,s,c,d,p,f,m,h,b,y,g,v,O,P -function x(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function w(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.PARTITION_KEY=e.SLUG_KEY=e.PRIMARY_KEY=void 0 -e.PRIMARY_KEY="uid" -e.SLUG_KEY="Name" -e.PARTITION_KEY="Partition" -let j=(l=(0,n.default)("string"),r=(0,n.default)("string"),i=(0,n.default)("string"),o=(0,n.default)("string"),a=(0,n.default)("string"),u=(0,n.default)("string"),s=(0,n.default)("string"),c=(0,n.default)("number"),d=(0,n.default)(),p=class extends t.default{constructor(){super(...arguments),x(this,"uid",f,this),x(this,"Name",m,this),x(this,"Description",h,this),x(this,"DeletedAt",b,this),x(this,"Datacenter",y,this),x(this,"Namespace",g,this),x(this,"Partition",v,this),x(this,"SyncTime",O,this),x(this,"meta",P,this)}},f=w(p.prototype,"uid",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m=w(p.prototype,"Name",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=w(p.prototype,"Description",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=w(p.prototype,"DeletedAt",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),y=w(p.prototype,"Datacenter",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),g=w(p.prototype,"Namespace",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),v=w(p.prototype,"Partition",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),O=w(p.prototype,"SyncTime",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),P=w(p.prototype,"meta",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p) -e.default=j})),define("consul-ui/models/peer",["exports","@ember-data/model","consul-ui/decorators/replace"],(function(e,t,n){var l,r,i,o,a,u,s,c,d,p,f,m,h,b,y,g,v,O,P,x,w,j,_,k,S,N,C,z,M,D,T,E,L,A,R,I -function $(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function F(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.schema=void 0 -e.schema={State:{defaultValue:"PENDING",allowedValues:["PENDING","ESTABLISHING","ACTIVE","FAILING","TERMINATED","DELETING"]}} -let U=(l=(0,t.attr)("string"),r=(0,t.attr)(),i=(0,t.attr)("string"),o=(0,t.attr)("string"),a=(0,t.attr)("string"),u=(0,t.attr)("string"),s=(0,t.attr)("string"),c=(0,t.attr)("string"),d=(0,n.nullValue)([]),p=(0,t.attr)(),f=(0,t.attr)("string"),m=(0,t.attr)(),h=(0,n.nullValue)([]),b=(0,t.attr)(),y=(0,n.nullValue)([]),g=(0,t.attr)(),v=(0,t.attr)("date"),O=(0,t.attr)("date"),P=(0,t.attr)("date"),x=class extends t.default{constructor(){super(...arguments),$(this,"uri",w,this),$(this,"meta",j,this),$(this,"Datacenter",_,this),$(this,"Partition",k,this),$(this,"Name",S,this),$(this,"State",N,this),$(this,"ID",C,this),$(this,"ServerExternalAddresses",z,this),$(this,"ServerExternalAddresses",M,this),$(this,"PeerID",D,this),$(this,"PeerServerAddresses",T,this),$(this,"ImportedServices",E,this),$(this,"ExportedServices",L,this),$(this,"LastHeartbeat",A,this),$(this,"LastReceive",R,this),$(this,"LastSend",I,this)}get ImportedServiceCount(){return this.ImportedServices.length}get ExportedServiceCount(){return this.ExportedServices.length}get isReceiver(){return this.PeerID}get isDialer(){return!this.isReceiver}},w=F(x.prototype,"uri",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),j=F(x.prototype,"meta",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),_=F(x.prototype,"Datacenter",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),k=F(x.prototype,"Partition",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),S=F(x.prototype,"Name",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),N=F(x.prototype,"State",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),C=F(x.prototype,"ID",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),z=F(x.prototype,"ServerExternalAddresses",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),M=F(x.prototype,"ServerExternalAddresses",[d,p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),D=F(x.prototype,"PeerID",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),T=F(x.prototype,"PeerServerAddresses",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),E=F(x.prototype,"ImportedServices",[h,b],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),L=F(x.prototype,"ExportedServices",[y,g],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),A=F(x.prototype,"LastHeartbeat",[v],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),R=F(x.prototype,"LastReceive",[O],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),I=F(x.prototype,"LastSend",[P],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),x) -e.default=U})),define("consul-ui/models/permission",["exports","@ember-data/model"],(function(e,t){var n,l,r,i,o,a,u,s,c -function d(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function p(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let f=(n=(0,t.attr)("string"),l=(0,t.attr)("string"),r=(0,t.attr)("string"),i=(0,t.attr)("boolean"),o=class extends t.default{constructor(){super(...arguments),d(this,"Resource",a,this),d(this,"Segment",u,this),d(this,"Access",s,this),d(this,"Allow",c,this)}},a=p(o.prototype,"Resource",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),u=p(o.prototype,"Segment",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),s=p(o.prototype,"Access",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),c=p(o.prototype,"Allow",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),o) -e.default=f})),define("consul-ui/models/policy",["exports","@ember-data/model","@ember/object"],(function(e,t,n){var l,r,i,o,a,u,s,c,d,p,f,m,h,b,y,g,v,O,P,x,w,j,_,k,S,N,C,z,M,D,T,E -function L(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function A(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.PRIMARY_KEY=e.MANAGEMENT_ID=void 0 -const R="00000000-0000-0000-0000-000000000001" -e.MANAGEMENT_ID=R -e.PRIMARY_KEY="uid" -e.SLUG_KEY="ID" -let I=(l=(0,t.attr)("string"),r=(0,t.attr)("string"),i=(0,t.attr)("string"),o=(0,t.attr)("string"),a=(0,t.attr)("string"),u=(0,t.attr)("string",{defaultValue:()=>""}),s=(0,t.attr)("string",{defaultValue:()=>""}),c=(0,t.attr)("string",{defaultValue:()=>""}),d=(0,t.attr)("number"),p=(0,t.attr)("number"),f=(0,t.attr)("number"),m=(0,t.attr)(),h=(0,t.attr)(),b=(0,t.attr)("string",{defaultValue:()=>""}),y=(0,t.attr)("number",{defaultValue:()=>(new Date).getTime()}),g=(0,n.computed)("ID"),v=class extends t.default{constructor(){super(...arguments),L(this,"uid",O,this),L(this,"ID",P,this),L(this,"Datacenter",x,this),L(this,"Namespace",w,this),L(this,"Partition",j,this),L(this,"Name",_,this),L(this,"Description",k,this),L(this,"Rules",S,this),L(this,"SyncTime",N,this),L(this,"CreateIndex",C,this),L(this,"ModifyIndex",z,this),L(this,"Datacenters",M,this),L(this,"meta",D,this),L(this,"template",T,this),L(this,"CreateTime",E,this)}get isGlobalManagement(){return this.ID===R}},O=A(v.prototype,"uid",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),P=A(v.prototype,"ID",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),x=A(v.prototype,"Datacenter",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),w=A(v.prototype,"Namespace",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),j=A(v.prototype,"Partition",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),_=A(v.prototype,"Name",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),k=A(v.prototype,"Description",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),S=A(v.prototype,"Rules",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),N=A(v.prototype,"SyncTime",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),C=A(v.prototype,"CreateIndex",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),z=A(v.prototype,"ModifyIndex",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),M=A(v.prototype,"Datacenters",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),D=A(v.prototype,"meta",[h],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),T=A(v.prototype,"template",[b],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),E=A(v.prototype,"CreateTime",[y],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),A(v.prototype,"isGlobalManagement",[g],Object.getOwnPropertyDescriptor(v.prototype,"isGlobalManagement"),v.prototype),v) -e.default=I})),define("consul-ui/models/proxy",["exports","@ember-data/model","consul-ui/models/service-instance"],(function(e,t,n){var l,r,i,o,a,u,s,c,d,p,f,m,h,b,y,g,v,O,P,x,w -function j(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function _(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.PRIMARY_KEY=void 0 -e.PRIMARY_KEY="uid" -e.SLUG_KEY="Node,ServiceID" -let k=(l=(0,t.attr)("string"),r=(0,t.attr)("string"),i=(0,t.attr)("string"),o=(0,t.attr)("string"),a=(0,t.attr)("string"),u=(0,t.attr)("string"),s=(0,t.attr)("string"),c=(0,t.attr)("string"),d=(0,t.attr)("number"),p=(0,t.attr)(),f=class extends n.default{constructor(){super(...arguments),j(this,"uid",m,this),j(this,"ID",h,this),j(this,"Datacenter",b,this),j(this,"Namespace",y,this),j(this,"Partition",g,this),j(this,"ServiceName",v,this),j(this,"ServiceID",O,this),j(this,"NodeName",P,this),j(this,"SyncTime",x,this),j(this,"ServiceProxy",w,this)}},m=_(f.prototype,"uid",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=_(f.prototype,"ID",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=_(f.prototype,"Datacenter",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),y=_(f.prototype,"Namespace",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),g=_(f.prototype,"Partition",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),v=_(f.prototype,"ServiceName",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),O=_(f.prototype,"ServiceID",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),P=_(f.prototype,"NodeName",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),x=_(f.prototype,"SyncTime",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),w=_(f.prototype,"ServiceProxy",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f) -e.default=k})),define("consul-ui/models/role",["exports","@ember-data/model"],(function(e,t){var n,l,r,i,o,a,u,s,c,d,p,f,m,h,b,y,g,v,O,P,x,w,j,_,k,S,N,C,z,M,D,T,E -function L(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function A(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.PRIMARY_KEY=void 0 -e.PRIMARY_KEY="uid" -e.SLUG_KEY="ID" -let R=(n=(0,t.attr)("string"),l=(0,t.attr)("string"),r=(0,t.attr)("string"),i=(0,t.attr)("string"),o=(0,t.attr)("string"),a=(0,t.attr)("string",{defaultValue:()=>""}),u=(0,t.attr)("string",{defaultValue:()=>""}),s=(0,t.attr)({defaultValue:()=>[]}),c=(0,t.attr)({defaultValue:()=>[]}),d=(0,t.attr)({defaultValue:()=>[]}),p=(0,t.attr)("number"),f=(0,t.attr)("number"),m=(0,t.attr)("number"),h=(0,t.attr)("number"),b=(0,t.attr)(),y=(0,t.attr)("string"),g=class extends t.default{constructor(){super(...arguments),L(this,"uid",v,this),L(this,"ID",O,this),L(this,"Datacenter",P,this),L(this,"Namespace",x,this),L(this,"Partition",w,this),L(this,"Name",j,this),L(this,"Description",_,this),L(this,"Policies",k,this),L(this,"ServiceIdentities",S,this),L(this,"NodeIdentities",N,this),L(this,"SyncTime",C,this),L(this,"CreateIndex",z,this),L(this,"ModifyIndex",M,this),L(this,"CreateTime",D,this),L(this,"Datacenters",T,this),L(this,"Hash",E,this)}},v=A(g.prototype,"uid",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),O=A(g.prototype,"ID",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),P=A(g.prototype,"Datacenter",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),x=A(g.prototype,"Namespace",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),w=A(g.prototype,"Partition",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),j=A(g.prototype,"Name",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),_=A(g.prototype,"Description",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),k=A(g.prototype,"Policies",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),S=A(g.prototype,"ServiceIdentities",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),N=A(g.prototype,"NodeIdentities",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),C=A(g.prototype,"SyncTime",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),z=A(g.prototype,"CreateIndex",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),M=A(g.prototype,"ModifyIndex",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),D=A(g.prototype,"CreateTime",[h],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),T=A(g.prototype,"Datacenters",[b],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),E=A(g.prototype,"Hash",[y],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),g) -e.default=R})),define("consul-ui/models/service-instance",["exports","@ember-data/model","ember-data-model-fragments/attributes","@ember/object","@ember/object/computed","@glimmer/tracking"],(function(e,t,n,l,r,i){var o,a,u,s,c,d,p,f,m,h,b,y,g,v,O,P,x,w,j,_,k,S,N,C,z,M,D,T,E,L,A,R,I,$,F,U,B,q,K,H,Y,G,V,W,Z,Q,J,X,ee,te,ne,le -function re(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function ie(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.Collection=e.SLUG_KEY=e.PRIMARY_KEY=void 0 -e.PRIMARY_KEY="uid" -e.SLUG_KEY="Node.Node,Service.ID" -const oe=(a=ie((o=class{constructor(e){re(this,"items",a,this),this.items=e}get ExternalSources(){const e=this.items.reduce((function(e,t){return e.concat(t.ExternalSources||[])}),[]) -return[...new Set(e)].filter(Boolean).sort()}}).prototype,"items",[i.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),o) -e.Collection=oe -let ae=(u=(0,t.attr)("string"),s=(0,t.attr)("string"),c=(0,t.attr)(),d=(0,t.attr)(),p=(0,t.attr)(),f=(0,n.fragmentArray)("health-check"),m=(0,t.attr)("number"),h=(0,t.attr)(),b=(0,t.attr)({defaultValue:()=>[]}),y=(0,r.alias)("Service.Service"),g=(0,r.or)("Service.{ID,Service}"),v=(0,r.or)("Service.Address","Node.Service"),O=(0,t.attr)("string"),P=(0,r.alias)("Service.Tags"),x=(0,r.alias)("Service.Meta"),w=(0,r.alias)("Service.Namespace"),j=(0,r.alias)("Service.Partition"),_=(0,r.filter)("Checks.@each.Kind",((e,t,n)=>"service"===e.Kind)),k=(0,r.filter)("Checks.@each.Kind",((e,t,n)=>"node"===e.Kind)),S=(0,l.computed)("Service.Meta"),N=(0,l.computed)("Service.Kind"),C=(0,l.computed)("Service.Kind"),z=(0,l.computed)("IsOrigin"),M=(0,l.computed)("ChecksPassing","ChecksWarning","ChecksCritical"),D=(0,l.computed)("Checks.[]"),T=(0,l.computed)("Checks.[]"),E=(0,l.computed)("Checks.[]"),L=(0,l.computed)("Checks.[]","ChecksPassing"),A=(0,l.computed)("Checks.[]","ChecksWarning"),R=(0,l.computed)("Checks.[]","ChecksCritical"),I=class extends t.default{constructor(){super(...arguments),re(this,"uid",$,this),re(this,"Datacenter",F,this),re(this,"Proxy",U,this),re(this,"Node",B,this),re(this,"Service",q,this),re(this,"Checks",K,this),re(this,"SyncTime",H,this),re(this,"meta",Y,this),re(this,"Resources",G,this),re(this,"Name",V,this),re(this,"ID",W,this),re(this,"Address",Z,this),re(this,"SocketPath",Q,this),re(this,"Tags",J,this),re(this,"Meta",X,this),re(this,"Namespace",ee,this),re(this,"Partition",te,this),re(this,"ServiceChecks",ne,this),re(this,"NodeChecks",le,this)}get ExternalSources(){const e=Object.entries(this.Service.Meta||{}).filter((e=>{let[t,n]=e -return"external-source"===t})).map((e=>{let[t,n]=e -return n})) -return[...new Set(e)]}get IsProxy(){return["connect-proxy","mesh-gateway","ingress-gateway","terminating-gateway","api-gateway"].includes(this.Service.Kind)}get IsOrigin(){return!["connect-proxy","mesh-gateway"].includes(this.Service.Kind)}get IsMeshOrigin(){return this.IsOrigin&&!["terminating-gateway"].includes(this.Service.Kind)}get Status(){switch(!0){case 0!==this.ChecksCritical.length:return"critical" -case 0!==this.ChecksWarning.length:return"warning" -case 0!==this.ChecksPassing.length:return"passing" -default:return"empty"}}get ChecksPassing(){return this.Checks.filter((e=>"passing"===e.Status))}get ChecksWarning(){return this.Checks.filter((e=>"warning"===e.Status))}get ChecksCritical(){return this.Checks.filter((e=>"critical"===e.Status))}get PercentageChecksPassing(){return this.ChecksPassing.length/this.Checks.length*100}get PercentageChecksWarning(){return this.ChecksWarning.length/this.Checks.length*100}get PercentageChecksCritical(){return this.ChecksCritical.length/this.Checks.length*100}},$=ie(I.prototype,"uid",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),F=ie(I.prototype,"Datacenter",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),U=ie(I.prototype,"Proxy",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),B=ie(I.prototype,"Node",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),q=ie(I.prototype,"Service",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),K=ie(I.prototype,"Checks",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),H=ie(I.prototype,"SyncTime",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Y=ie(I.prototype,"meta",[h],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),G=ie(I.prototype,"Resources",[b],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),V=ie(I.prototype,"Name",[y],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),W=ie(I.prototype,"ID",[g],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Z=ie(I.prototype,"Address",[v],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Q=ie(I.prototype,"SocketPath",[O],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),J=ie(I.prototype,"Tags",[P],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),X=ie(I.prototype,"Meta",[x],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ee=ie(I.prototype,"Namespace",[w],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),te=ie(I.prototype,"Partition",[j],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ne=ie(I.prototype,"ServiceChecks",[_],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),le=ie(I.prototype,"NodeChecks",[k],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ie(I.prototype,"ExternalSources",[S],Object.getOwnPropertyDescriptor(I.prototype,"ExternalSources"),I.prototype),ie(I.prototype,"IsProxy",[N],Object.getOwnPropertyDescriptor(I.prototype,"IsProxy"),I.prototype),ie(I.prototype,"IsOrigin",[C],Object.getOwnPropertyDescriptor(I.prototype,"IsOrigin"),I.prototype),ie(I.prototype,"IsMeshOrigin",[z],Object.getOwnPropertyDescriptor(I.prototype,"IsMeshOrigin"),I.prototype),ie(I.prototype,"Status",[M],Object.getOwnPropertyDescriptor(I.prototype,"Status"),I.prototype),ie(I.prototype,"ChecksPassing",[D],Object.getOwnPropertyDescriptor(I.prototype,"ChecksPassing"),I.prototype),ie(I.prototype,"ChecksWarning",[T],Object.getOwnPropertyDescriptor(I.prototype,"ChecksWarning"),I.prototype),ie(I.prototype,"ChecksCritical",[E],Object.getOwnPropertyDescriptor(I.prototype,"ChecksCritical"),I.prototype),ie(I.prototype,"PercentageChecksPassing",[L],Object.getOwnPropertyDescriptor(I.prototype,"PercentageChecksPassing"),I.prototype),ie(I.prototype,"PercentageChecksWarning",[A],Object.getOwnPropertyDescriptor(I.prototype,"PercentageChecksWarning"),I.prototype),ie(I.prototype,"PercentageChecksCritical",[R],Object.getOwnPropertyDescriptor(I.prototype,"PercentageChecksCritical"),I.prototype),I) -e.default=ae})),define("consul-ui/models/service",["exports","@ember-data/model","@ember/object","@glimmer/tracking","ember-data-model-fragments/attributes","consul-ui/decorators/replace"],(function(e,t,n,l,r,i){var o,a,u,s,c,d,p,f,m,h,b,y,g,v,O,P,x,w,j,_,k,S,N,C,z,M,D,T,E,L,A,R,I,$,F,U,B,q,K,H,Y,G,V,W,Z,Q,J,X,ee,te,ne,le,re,ie,oe,ae,ue,se,ce,de,pe,fe,me,he,be,ye,ge -function ve(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function Oe(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.Collection=e.SLUG_KEY=e.PRIMARY_KEY=void 0 -e.PRIMARY_KEY="uid" -e.SLUG_KEY="Name,PeerName" -const Pe=(a=Oe((o=class{constructor(e){ve(this,"items",a,this),this.items=e}get ExternalSources(){const e=this.items.reduce((function(e,t){return e.concat(t.ExternalSources||[])}),[]) -return[...new Set(e)].filter(Boolean).sort()}get Partitions(){return[...new Set(this.items.map((e=>e.Partition)))].sort()}}).prototype,"items",[l.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),o) -e.Collection=Pe -let xe=(u=(0,t.attr)("string"),s=(0,t.attr)("string"),c=(0,t.attr)("string"),d=(0,t.attr)("string"),p=(0,t.attr)("string"),f=(0,t.attr)("string"),m=(0,i.default)("",void 0),h=(0,t.attr)("string"),b=(0,t.attr)("number"),y=(0,t.attr)("number"),g=(0,t.attr)("number"),v=(0,t.attr)("number"),O=(0,t.attr)("boolean"),P=(0,t.attr)("boolean"),x=(0,t.attr)({defaultValue:()=>[]}),w=(0,t.attr)("number"),j=(0,t.attr)("number"),_=(0,t.attr)("number"),k=(0,i.nullValue)([]),S=(0,t.attr)({defaultValue:()=>[]}),N=(0,t.attr)(),C=(0,t.attr)(),z=(0,r.fragment)("gateway-config"),M=(0,i.nullValue)([]),D=(0,t.attr)(),T=(0,t.attr)(),E=(0,t.attr)(),L=(0,t.belongsTo)({async:!1}),A=(0,n.computed)("peer","InstanceCount"),R=(0,n.computed)("peer.State"),I=(0,n.computed)("ChecksPassing","ChecksWarning","ChecksCritical"),$=(0,n.computed)("MeshChecksPassing","MeshChecksWarning","MeshChecksCritical"),F=(0,n.computed)("ConnectedWithProxy","ConnectedWithGateway"),U=(0,n.computed)("MeshEnabled","Kind"),B=(0,n.computed)("MeshChecksPassing","MeshChecksWarning","MeshChecksCritical","isZeroCountButPeered","peerIsFailing"),q=(0,n.computed)("isZeroCountButPeered","peerIsFailing","MeshStatus"),K=(0,n.computed)("ChecksPassing","Proxy.ChecksPassing"),H=(0,n.computed)("ChecksWarning","Proxy.ChecksWarning"),Y=(0,n.computed)("ChecksCritical","Proxy.ChecksCritical"),G=class extends t.default{constructor(){super(...arguments),ve(this,"uid",V,this),ve(this,"Name",W,this),ve(this,"Datacenter",Z,this),ve(this,"Namespace",Q,this),ve(this,"Partition",J,this),ve(this,"Kind",X,this),ve(this,"PeerName",ee,this),ve(this,"ChecksPassing",te,this),ve(this,"ChecksCritical",ne,this),ve(this,"ChecksWarning",le,this),ve(this,"InstanceCount",re,this),ve(this,"ConnectedWithGateway",ie,this),ve(this,"ConnectedWithProxy",oe,this),ve(this,"Resources",ae,this),ve(this,"SyncTime",ue,this),ve(this,"CreateIndex",se,this),ve(this,"ModifyIndex",ce,this),ve(this,"Tags",de,this),ve(this,"Nodes",pe,this),ve(this,"Proxy",fe,this),ve(this,"GatewayConfig",me,this),ve(this,"ExternalSources",he,this),ve(this,"Meta",be,this),ve(this,"meta",ye,this),ve(this,"peer",ge,this)}get isZeroCountButPeered(){return this.peer&&0===this.InstanceCount}get peerIsFailing(){return this.peer&&"FAILING"===this.peer.State}get ChecksTotal(){return this.ChecksPassing+this.ChecksWarning+this.ChecksCritical}get MeshChecksTotal(){return this.MeshChecksPassing+this.MeshChecksWarning+this.MeshChecksCritical}get MeshEnabled(){return this.ConnectedWithProxy||this.ConnectedWithGateway}get InMesh(){return this.MeshEnabled||(this.Kind||"").length>0}get MeshStatus(){switch(!0){case this.isZeroCountButPeered:case this.peerIsFailing:return"unknown" -case 0!==this.MeshChecksCritical:return"critical" -case 0!==this.MeshChecksWarning:return"warning" -case 0!==this.MeshChecksPassing:return"passing" -default:return"empty"}}get healthTooltipText(){const{MeshStatus:e,isZeroCountButPeered:t,peerIsFailing:n}=this -return t?"This service currently has 0 instances. Check with the operator of its peer to make sure this is expected behavior.":n?"This peer is out of sync, so the current health statuses of its services are unknown.":"critical"===e?"At least one health check on one instance is failing.":"warning"===e?"At least one health check on one instance has a warning.":"passing"==e?"All health checks are passing.":"There are no health checks"}get MeshChecksPassing(){let e=0 -return void 0!==this.Proxy&&(e=this.Proxy.ChecksPassing),this.ChecksPassing+e}get MeshChecksWarning(){let e=0 -return void 0!==this.Proxy&&(e=this.Proxy.ChecksWarning),this.ChecksWarning+e}get MeshChecksCritical(){let e=0 -return void 0!==this.Proxy&&(e=this.Proxy.ChecksCritical),this.ChecksCritical+e}},V=Oe(G.prototype,"uid",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),W=Oe(G.prototype,"Name",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Z=Oe(G.prototype,"Datacenter",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Q=Oe(G.prototype,"Namespace",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),J=Oe(G.prototype,"Partition",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),X=Oe(G.prototype,"Kind",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ee=Oe(G.prototype,"PeerName",[m,h],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),te=Oe(G.prototype,"ChecksPassing",[b],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ne=Oe(G.prototype,"ChecksCritical",[y],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),le=Oe(G.prototype,"ChecksWarning",[g],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),re=Oe(G.prototype,"InstanceCount",[v],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ie=Oe(G.prototype,"ConnectedWithGateway",[O],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),oe=Oe(G.prototype,"ConnectedWithProxy",[P],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ae=Oe(G.prototype,"Resources",[x],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ue=Oe(G.prototype,"SyncTime",[w],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),se=Oe(G.prototype,"CreateIndex",[j],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ce=Oe(G.prototype,"ModifyIndex",[_],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),de=Oe(G.prototype,"Tags",[k,S],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),pe=Oe(G.prototype,"Nodes",[N],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),fe=Oe(G.prototype,"Proxy",[C],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),me=Oe(G.prototype,"GatewayConfig",[z],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),he=Oe(G.prototype,"ExternalSources",[M,D],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),be=Oe(G.prototype,"Meta",[T],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ye=Oe(G.prototype,"meta",[E],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ge=Oe(G.prototype,"peer",[L],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Oe(G.prototype,"isZeroCountButPeered",[A],Object.getOwnPropertyDescriptor(G.prototype,"isZeroCountButPeered"),G.prototype),Oe(G.prototype,"peerIsFailing",[R],Object.getOwnPropertyDescriptor(G.prototype,"peerIsFailing"),G.prototype),Oe(G.prototype,"ChecksTotal",[I],Object.getOwnPropertyDescriptor(G.prototype,"ChecksTotal"),G.prototype),Oe(G.prototype,"MeshChecksTotal",[$],Object.getOwnPropertyDescriptor(G.prototype,"MeshChecksTotal"),G.prototype),Oe(G.prototype,"MeshEnabled",[F],Object.getOwnPropertyDescriptor(G.prototype,"MeshEnabled"),G.prototype),Oe(G.prototype,"InMesh",[U],Object.getOwnPropertyDescriptor(G.prototype,"InMesh"),G.prototype),Oe(G.prototype,"MeshStatus",[B],Object.getOwnPropertyDescriptor(G.prototype,"MeshStatus"),G.prototype),Oe(G.prototype,"healthTooltipText",[q],Object.getOwnPropertyDescriptor(G.prototype,"healthTooltipText"),G.prototype),Oe(G.prototype,"MeshChecksPassing",[K],Object.getOwnPropertyDescriptor(G.prototype,"MeshChecksPassing"),G.prototype),Oe(G.prototype,"MeshChecksWarning",[H],Object.getOwnPropertyDescriptor(G.prototype,"MeshChecksWarning"),G.prototype),Oe(G.prototype,"MeshChecksCritical",[Y],Object.getOwnPropertyDescriptor(G.prototype,"MeshChecksCritical"),G.prototype),G) -e.default=xe})),define("consul-ui/models/session",["exports","@ember-data/model","@ember/object","consul-ui/decorators/replace"],(function(e,t,n,l){var r,i,o,a,u,s,c,d,p,f,m,h,b,y,g,v,O,P,x,w,j,_,k,S,N,C,z,M,D,T,E,L,A,R,I,$ -function F(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function U(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.PRIMARY_KEY=void 0 -e.PRIMARY_KEY="uid" -e.SLUG_KEY="ID" -let B=(r=(0,t.attr)("string"),i=(0,t.attr)("string"),o=(0,t.attr)("string"),a=(0,t.attr)("string"),u=(0,t.attr)("string"),s=(0,t.attr)("string"),c=(0,t.attr)("string"),d=(0,t.attr)("string"),p=(0,t.attr)("string"),f=(0,t.attr)("number"),m=(0,t.attr)("number"),h=(0,t.attr)("number"),b=(0,t.attr)("number"),y=(0,l.nullValue)([]),g=(0,t.attr)({defaultValue:()=>[]}),v=(0,l.nullValue)([]),O=(0,t.attr)({defaultValue:()=>[]}),P=(0,t.attr)({defaultValue:()=>[]}),x=(0,n.computed)("NodeChecks","ServiceChecks"),w=class extends t.default{constructor(){super(...arguments),F(this,"uid",j,this),F(this,"ID",_,this),F(this,"Name",k,this),F(this,"Datacenter",S,this),F(this,"Namespace",N,this),F(this,"Partition",C,this),F(this,"Node",z,this),F(this,"Behavior",M,this),F(this,"TTL",D,this),F(this,"LockDelay",T,this),F(this,"SyncTime",E,this),F(this,"CreateIndex",L,this),F(this,"ModifyIndex",A,this),F(this,"NodeChecks",R,this),F(this,"ServiceChecks",I,this),F(this,"Resources",$,this)}get checks(){return[...this.NodeChecks,...this.ServiceChecks.map((e=>{let{ID:t}=e -return t}))]}},j=U(w.prototype,"uid",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),_=U(w.prototype,"ID",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),k=U(w.prototype,"Name",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),S=U(w.prototype,"Datacenter",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),N=U(w.prototype,"Namespace",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),C=U(w.prototype,"Partition",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),z=U(w.prototype,"Node",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),M=U(w.prototype,"Behavior",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),D=U(w.prototype,"TTL",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),T=U(w.prototype,"LockDelay",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),E=U(w.prototype,"SyncTime",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),L=U(w.prototype,"CreateIndex",[h],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),A=U(w.prototype,"ModifyIndex",[b],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),R=U(w.prototype,"NodeChecks",[y,g],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),I=U(w.prototype,"ServiceChecks",[v,O],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),$=U(w.prototype,"Resources",[P],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),U(w.prototype,"checks",[x],Object.getOwnPropertyDescriptor(w.prototype,"checks"),w.prototype),w) -e.default=B})),define("consul-ui/models/token",["exports","@ember-data/model","@ember/object","consul-ui/models/policy"],(function(e,t,n,l){var r,i,o,a,u,s,c,d,p,f,m,h,b,y,g,v,O,P,x,w,j,_,k,S,N,C,z,M,D,T,E,L,A,R,I,$,F,U,B,q,K,H,Y,G,V,W,Z -function Q(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function J(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.PRIMARY_KEY=void 0 -e.PRIMARY_KEY="uid" -e.SLUG_KEY="AccessorID" -let X=(r=(0,t.attr)("string"),i=(0,t.attr)("string"),o=(0,t.attr)("string"),a=(0,t.attr)("string"),u=(0,t.attr)("string"),s=(0,t.attr)("string"),c=(0,t.attr)("string"),d=(0,t.attr)("boolean"),p=(0,t.attr)("boolean"),f=(0,t.attr)("string",{defaultValue:()=>""}),m=(0,t.attr)(),h=(0,t.attr)({defaultValue:()=>[]}),b=(0,t.attr)({defaultValue:()=>[]}),y=(0,t.attr)({defaultValue:()=>[]}),g=(0,t.attr)({defaultValue:()=>[]}),v=(0,t.attr)("date"),O=(0,t.attr)("string"),P=(0,t.attr)("number"),x=(0,t.attr)("number"),w=(0,t.attr)("string"),j=(0,t.attr)("string",{defaultValue:()=>""}),_=(0,t.attr)("string"),k=(0,n.computed)("Policies.[]"),S=(0,n.computed)("SecretID"),N=class extends t.default{constructor(){super(...arguments),Q(this,"uid",C,this),Q(this,"AccessorID",z,this),Q(this,"Datacenter",M,this),Q(this,"Namespace",D,this),Q(this,"Partition",T,this),Q(this,"IDPName",E,this),Q(this,"SecretID",L,this),Q(this,"Legacy",A,this),Q(this,"Local",R,this),Q(this,"Description",I,this),Q(this,"meta",$,this),Q(this,"Policies",F,this),Q(this,"Roles",U,this),Q(this,"ServiceIdentities",B,this),Q(this,"NodeIdentities",q,this),Q(this,"CreateTime",K,this),Q(this,"Hash",H,this),Q(this,"CreateIndex",Y,this),Q(this,"ModifyIndex",G,this),Q(this,"Type",V,this),Q(this,"Name",W,this),Q(this,"Rules",Z,this)}get isGlobalManagement(){return(this.Policies||[]).find((e=>e.ID===l.MANAGEMENT_ID))}get hasSecretID(){return""!==this.SecretID&&""!==this.SecretID}},C=J(N.prototype,"uid",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),z=J(N.prototype,"AccessorID",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),M=J(N.prototype,"Datacenter",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),D=J(N.prototype,"Namespace",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),T=J(N.prototype,"Partition",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),E=J(N.prototype,"IDPName",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),L=J(N.prototype,"SecretID",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),A=J(N.prototype,"Legacy",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),R=J(N.prototype,"Local",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),I=J(N.prototype,"Description",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),$=J(N.prototype,"meta",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),F=J(N.prototype,"Policies",[h],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),U=J(N.prototype,"Roles",[b],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),B=J(N.prototype,"ServiceIdentities",[y],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),q=J(N.prototype,"NodeIdentities",[g],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),K=J(N.prototype,"CreateTime",[v],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),H=J(N.prototype,"Hash",[O],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Y=J(N.prototype,"CreateIndex",[P],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),G=J(N.prototype,"ModifyIndex",[x],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),V=J(N.prototype,"Type",[w],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),W=J(N.prototype,"Name",[j],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Z=J(N.prototype,"Rules",[_],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),J(N.prototype,"isGlobalManagement",[k],Object.getOwnPropertyDescriptor(N.prototype,"isGlobalManagement"),N.prototype),J(N.prototype,"hasSecretID",[S],Object.getOwnPropertyDescriptor(N.prototype,"hasSecretID"),N.prototype),N) -e.default=X})),define("consul-ui/models/topology",["exports","@ember-data/model","@ember/object"],(function(e,t,n){var l,r,i,o,a,u,s,c,d,p,f,m,h,b,y,g,v,O,P,x,w,j,_,k,S,N,C,z -function M(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function D(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.PRIMARY_KEY=void 0 -e.PRIMARY_KEY="uid" -e.SLUG_KEY="ServiceName" -let T=(l=(0,t.attr)("string"),r=(0,t.attr)("string"),i=(0,t.attr)("string"),o=(0,t.attr)("string"),a=(0,t.attr)("string"),u=(0,t.attr)("string"),s=(0,t.attr)("boolean"),c=(0,t.attr)("boolean"),d=(0,t.attr)("boolean"),p=(0,t.attr)(),f=(0,t.attr)(),m=(0,t.attr)(),h=(0,n.computed)("Downstreams"),b=(0,n.computed)("Downstreams","Upstreams"),y=(0,n.computed)("Downstreams","Upstreams"),g=class extends t.default{constructor(){super(...arguments),M(this,"uid",v,this),M(this,"ServiceName",O,this),M(this,"Datacenter",P,this),M(this,"Namespace",x,this),M(this,"Partition",w,this),M(this,"Protocol",j,this),M(this,"FilteredByACLs",_,this),M(this,"TransparentProxy",k,this),M(this,"ConnectNative",S,this),M(this,"Upstreams",N,this),M(this,"Downstreams",C,this),M(this,"meta",z,this)}get notDefinedIntention(){let e=!1 -return e=0!==this.Downstreams.filter((e=>"specific-intention"===e.Source&&!e.TransparentProxy&&!e.ConnectNative&&e.Intention.Allowed)).length,e}get wildcardIntention(){const e=0!==this.Downstreams.filter((e=>!e.Intention.HasExact&&e.Intention.Allowed)).length,t=0!==this.Upstreams.filter((e=>!e.Intention.HasExact&&e.Intention.Allowed)).length -return e||t}get noDependencies(){return 0===this.Upstreams.length&&0===this.Downstreams.length}},v=D(g.prototype,"uid",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),O=D(g.prototype,"ServiceName",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),P=D(g.prototype,"Datacenter",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),x=D(g.prototype,"Namespace",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),w=D(g.prototype,"Partition",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),j=D(g.prototype,"Protocol",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),_=D(g.prototype,"FilteredByACLs",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),k=D(g.prototype,"TransparentProxy",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),S=D(g.prototype,"ConnectNative",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),N=D(g.prototype,"Upstreams",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),C=D(g.prototype,"Downstreams",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),z=D(g.prototype,"meta",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),D(g.prototype,"notDefinedIntention",[h],Object.getOwnPropertyDescriptor(g.prototype,"notDefinedIntention"),g.prototype),D(g.prototype,"wildcardIntention",[b],Object.getOwnPropertyDescriptor(g.prototype,"wildcardIntention"),g.prototype),D(g.prototype,"noDependencies",[y],Object.getOwnPropertyDescriptor(g.prototype,"noDependencies"),g.prototype),g) -e.default=T})),define("consul-ui/modifiers/aria-menu",["exports","ember-modifier","@ember/service","@ember/object"],(function(e,t,n,l){var r,i,o -function a(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const u={vertical:{40:function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1 -return(t+1)%e.length},38:function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0 -return 0===t?e.length-1:t-1},36:(e,t)=>0,35:(e,t)=>e.length-1},horizontal:{}} -let s=(r=(0,n.inject)("-document"),i=class extends t.default{constructor(){var e,t,n,l,r,i,a -super(...arguments),e=this,t="doc",l=this,(n=o)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0}),a="vertical",(i="orientation")in(r=this)?Object.defineProperty(r,i,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[i]=a}async keydown(e){if(27===e.keyCode)return this.options.onclose(e),void this.$trigger.focus() -const t=[...this.element.querySelectorAll('[role^="menuitem"]')],n=t.findIndex((e=>e===this.doc.activeElement)) -9!==e.keyCode?void 0!==u[this.orientation][e.keyCode]&&(t[u[this.orientation][e.keyCode](t,n)].focus(),e.stopPropagation(),e.preventDefault()):e.shiftKey?0===n&&(this.options.onclose(e),this.$trigger.focus()):n===t.length-1&&(await new Promise((e=>setTimeout(e,0))),this.options.onclose(e))}async focus(e){""===e.pointerType&&(await Promise.resolve(),this.keydown({keyCode:36,stopPropagation:()=>{},preventDefault:()=>{}}))}connect(e,t){this.$trigger=this.doc.getElementById(this.element.getAttribute("aria-labelledby")),void 0!==t.openEvent&&this.focus(t.openEvent),this.doc.addEventListener("keydown",this.keydown)}disconnect(){this.doc.removeEventListener("keydown",this.keydown)}didReceiveArguments(){this.params=this.args.positional,this.options=this.args.named}didInstall(){this.connect(this.args.positional,this.args.named)}willRemove(){this.disconnect()}},o=a(i.prototype,"doc",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),a(i.prototype,"keydown",[l.action],Object.getOwnPropertyDescriptor(i.prototype,"keydown"),i.prototype),a(i.prototype,"focus",[l.action],Object.getOwnPropertyDescriptor(i.prototype,"focus"),i.prototype),i) -e.default=s})),define("consul-ui/modifiers/create-ref",["exports","ember-ref-bucket/modifiers/create-ref"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/modifiers/css-prop",["exports","ember-modifier","@ember/service"],(function(e,t,n){var l,r,i -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let o=(l=(0,n.inject)("-document"),r=class extends t.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="doc",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}didReceiveArguments(){const e=this.args.positional,t=this.args.named;(e[1]||t.returns)(this.doc.defaultView.getComputedStyle(this.element).getPropertyValue(e[0]))}},a=r.prototype,u="doc",s=[l],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},p={},Object.keys(c).forEach((function(e){p[e]=c[e]})),p.enumerable=!!p.enumerable,p.configurable=!!p.configurable,("value"in p||p.initializer)&&(p.writable=!0),p=s.slice().reverse().reduce((function(e,t){return t(a,u,e)||e}),p),d&&void 0!==p.initializer&&(p.value=p.initializer?p.initializer.call(d):void 0,p.initializer=void 0),void 0===p.initializer&&(Object.defineProperty(a,u,p),p=null),i=p,r) -var a,u,s,c,d,p -e.default=o})),define("consul-ui/modifiers/css-props",["exports","ember-modifier"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const n=Object.fromEntries([...document.styleSheets].reduce(((e,t)=>e.concat([...t.cssRules].filter((e=>1===e.type)).reduce(((e,t)=>[...e,...[...t.style].filter((e=>e.startsWith("--"))).map((e=>[e.trim(),t.style.getPropertyValue(e).trim()]))]),[]))),[])) -var l=(0,t.modifier)((function(e,t,l){let[r]=t -const i=new RegExp(`^--${l.prefix||"."}${l.group||""}+`),o={} -Object.entries(n).forEach((e=>{let[t,n]=e -const r=t.match(i) -if(r){let e=r[0] -"-"===e.charAt(e.length-1)&&(e=e.substr(0,e.length-1)),l.group?(void 0===o[e]&&(o[e]={}),o[e][t]=n):o[t]=n}})),r(o)})) -e.default=l})),define("consul-ui/modifiers/did-insert",["exports","@ember/render-modifiers/modifiers/did-insert"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/modifiers/did-update",["exports","@ember/render-modifiers/modifiers/did-update"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/modifiers/did-upsert",["exports","@ember/modifier"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const n=e=>({target:e.element,currentTarget:e.element}) -var l=(0,t.setModifierManager)((()=>({capabilities:(0,t.capabilities)("3.22",{disableAutoTracking:!0}),createModifier:()=>({element:null}),installModifier(e,t,l){e.element=t,l.positional.forEach((()=>{})),l.named&&Object.values(l.named) -const[r,...i]=l.positional -r(n(e),i,l.named)},updateModifier(e,t){t.positional.forEach((()=>{})),t.named&&Object.values(t.named) -const[l,...r]=t.positional -l(n(e),r,t.named)},destroyModifier(){}})),class{}) -e.default=l})),define("consul-ui/modifiers/disabled",["exports","ember-modifier"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.modifier)((function(e,t,n){let[l=!0]=t -if(["input","textarea","select","button"].includes(e.nodeName.toLowerCase()))l?(e.setAttribute("disabled",l),e.setAttribute("aria-disabled",l)):(e.dataset.disabled=!1,e.removeAttribute("disabled"),e.removeAttribute("aria-disabled")) -else for(const r of e.querySelectorAll("input,textarea,button"))l&&"false"!==r.dataset.disabled?(e.setAttribute("disabled",l),e.setAttribute("aria-disabled",l)):(e.removeAttribute("disabled"),e.removeAttribute("aria-disabled"))})) -e.default=n})),define("consul-ui/modifiers/focus-trap",["exports","ember-focus-trap/modifiers/focus-trap.js"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/modifiers/in-viewport",["exports","ember-in-viewport/modifiers/in-viewport"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/modifiers/notification",["exports","ember-modifier","@ember/service"],(function(e,t,n){var l,r,i -function o(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) -t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let u=(l=(0,n.inject)("flashMessages"),r=class extends t.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="notify",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}didInstall(){this.element.setAttribute("role","alert"),this.element.dataset.notification=null -const e=function(e){for(var t=1;te.after())).catch((e=>{if("TransitionAborted"!==e.name)throw e})).then((t=>{this.notify.add(e)})):this.notify.add(e)}willDestroy(){this.args.named.sticky&&this.notify.clearMessages()}},s=r.prototype,c="notify",d=[l],p={configurable:!0,enumerable:!0,writable:!0,initializer:null},m={},Object.keys(p).forEach((function(e){m[e]=p[e]})),m.enumerable=!!m.enumerable,m.configurable=!!m.configurable,("value"in m||m.initializer)&&(m.writable=!0),m=d.slice().reverse().reduce((function(e,t){return t(s,c,e)||e}),m),f&&void 0!==m.initializer&&(m.value=m.initializer?m.initializer.call(f):void 0,m.initializer=void 0),void 0===m.initializer&&(Object.defineProperty(s,c,m),m=null),i=m,r) -var s,c,d,p,f,m -e.default=u})),define("consul-ui/modifiers/on-key",["exports","ember-keyboard/modifiers/on-key.js"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/modifiers/on-outside",["exports","ember-modifier","@ember/object","@ember/service"],(function(e,t,n,l){var r,i,o -function a(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let u=(r=(0,l.inject)("dom"),i=class extends t.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="dom",l=this,(n=o)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0}),this.doc=this.dom.document()}async connect(e,t){await new Promise((e=>setTimeout(e,0))) -try{this.doc.addEventListener(e[0],this.listen)}catch(n){}}listen(e){if(this.dom.isOutside(this.element,e.target)){("function"==typeof this.params[1]?this.params[1]:e=>{}).apply(this.element,[e])}}disconnect(){this.doc.removeEventListener("click",this.listen)}didReceiveArguments(){this.params=this.args.positional,this.options=this.args.named}didInstall(){this.connect(this.args.positional,this.args.named)}willRemove(){this.disconnect()}},o=a(i.prototype,"dom",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),a(i.prototype,"listen",[n.action],Object.getOwnPropertyDescriptor(i.prototype,"listen"),i.prototype),i) -e.default=u})),define("consul-ui/modifiers/on-resize",["exports","ember-on-resize-modifier/modifiers/on-resize"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})) -define("consul-ui/modifiers/style",["exports","ember-modifier","@ember/debug"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class l extends t.default{setStyles(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[] -const t=this._oldStyles||new Set -Array.isArray(e)||(e=Object.entries(e)),e.forEach((e=>{let[n,l]=e,r="" -l.length>0&&l.includes("!important")&&(r="important",l=l.replace("!important","")),this.element.style.setProperty(n,l,r),t.delete(n)})),t.forEach((e=>this.element.style.removeProperty(e))),this._oldStyles=new Set(e.map((e=>e[0])))}didReceiveArguments(){void 0!==this.args.named.delay?setTimeout((e=>{typeof this!==this.args.positional[0]&&this.setStyles(this.args.positional[0])}),this.args.named.delay):this.setStyles(this.args.positional[0])}}e.default=l})),define("consul-ui/modifiers/tooltip",["exports","ember-modifier","tippy.js"],(function(e,t,n){function l(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) -t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function r(e){for(var t=1;t2&&void 0!==arguments[2]?arguments[2]:{} -if("string"==typeof l&&""===l.trim())return -const o=i.options||{} -let a,u=e -if("string"==typeof o.triggerTarget){const e=u -if("parentNode"===o.triggerTarget)u=u.parentNode -else u=u.querySelectorAll(o.triggerTarget) -l=u.cloneNode(!0),e.remove(),i.options.triggerTarget=void 0}if(void 0===l&&(l=u.innerHTML,u.innerHTML=""),"manual"===o.trigger){const e=o.delay||[] -void 0!==e[1]&&(i.options.onShown=t=>{clearInterval(a),a=setTimeout((()=>{t.hide()}),e[1])})}let s=u,c=!1 -s.hasAttribute("tabindex")||(c=!0,s.setAttribute("tabindex","0")) -const d=(0,n.default)(u,r({theme:"tooltip",triggerTarget:s,content:e=>l,plugins:[void 0!==o.followCursor?n.followCursor:void 0].filter((e=>Boolean(e)))},i.options)) -return()=>{c&&s.removeAttribute("tabindex"),clearInterval(a),d.destroy()}})) -e.default=o})),define("consul-ui/modifiers/validate",["exports","ember-modifier","@ember/object"],(function(e,t,n){var l -function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class o extends Error{}let a=(l=class extends t.default{constructor(){super(...arguments),r(this,"item",null),r(this,"hash",null)}validate(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} -if(0===Object.keys(t).length)return -const n={} -Object.entries(this.hash.validations).filter((e=>{let[t,n]=e -return"string"!=typeof n})).forEach((t=>{let[l,r]=t -this.item&&(this.item[l]=e),(r||[]).forEach((t=>{new RegExp(t.test).test(e)||(n[l]=new o(t.error))}))})) -const l=this.hash.chart.state||{} -null==l.context&&(l.context={}),Object.keys(n).length>0?(l.context.errors=n,this.hash.chart.dispatch("ERROR",l.context)):(l.context.errors=null,this.hash.chart.dispatch("RESET",l.context))}reset(e){if(0===e.target.value.length){const e=this.hash.chart.state -e.context||(e.context={}),e.context.errors||(e.context.errors={}),Object.entries(this.hash.validations).filter((e=>{let[t,n]=e -return"string"!=typeof n})).forEach((t=>{let[n,l]=t -void 0!==e.context.errors[n]&&delete e.context.errors[n]})),0===Object.keys(e.context.errors).length&&(e.context.errors=null,this.hash.chart.dispatch("RESET",e.context))}}async connect(e,t){let[n]=e -this.element.addEventListener("input",this.listen),this.element.addEventListener("blur",this.reset),this.element.value.length>0&&(await Promise.resolve(),this&&this.element&&this.validate(this.element.value,this.hash.validations))}listen(e){this.validate(e.target.value,this.hash.validations)}disconnect(){this.item=null,this.hash=null,this.element.removeEventListener("input",this.listen),this.element.removeEventListener("blur",this.reset)}didReceiveArguments(){const[e]=this.args.positional,t=this.args.named -this.item=e,this.hash=t,void 0===t.chart&&(this.hash.chart={state:{context:{}},dispatch:e=>{switch(e){case"ERROR":t.onchange(this.hash.chart.state.context.errors) -break -case"RESET":t.onchange()}}})}didInstall(){this.connect(this.args.positional,this.args.named)}willRemove(){this.disconnect()}},i(l.prototype,"reset",[n.action],Object.getOwnPropertyDescriptor(l.prototype,"reset"),l.prototype),i(l.prototype,"listen",[n.action],Object.getOwnPropertyDescriptor(l.prototype,"listen"),l.prototype),l) -e.default=a})),define("consul-ui/modifiers/will-destroy",["exports","@ember/render-modifiers/modifiers/will-destroy"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/modifiers/with-copyable",["exports","ember-modifier","@ember/service","@ember/debug"],(function(e,t,n,l){var r,i,o -function a(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) -t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function u(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const s=(e,t,n)=>typeof t===e?t:n -let c=(r=(0,n.inject)("clipboard/os"),i=class extends t.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="clipboard",l=this,(n=o)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0}),u(this,"hash",null),u(this,"source",null)}connect(e,t){let[n]=e -n=s("string",n,this.element.innerText) -const r={success:e=>((0,l.runInDebug)((e=>console.info(`with-copyable: Copied \`${n}\``))),s("function",t.success,(()=>{}))(e)),error:e=>((0,l.runInDebug)((e=>console.info(`with-copyable: Error copying \`${n}\``))),s("function",t.error,(()=>{}))(e))} -this.source=this.clipboard.execute(this.element,function(e){for(var t=1;tn},r.options)).on("success",r.success).on("error",r.error),this.hash=r}disconnect(){this.source&&this.hash&&(this.source.off("success",this.hash.success).off("error",this.hash.error),this.source.destroy(),this.hash=null,this.source=null)}didReceiveArguments(){this.disconnect(),this.connect(this.args.positional,this.args.named)}willRemove(){this.disconnect()}},d=i.prototype,p="clipboard",f=[r],m={configurable:!0,enumerable:!0,writable:!0,initializer:null},b={},Object.keys(m).forEach((function(e){b[e]=m[e]})),b.enumerable=!!b.enumerable,b.configurable=!!b.configurable,("value"in b||b.initializer)&&(b.writable=!0),b=f.slice().reverse().reduce((function(e,t){return t(d,p,e)||e}),b),h&&void 0!==b.initializer&&(b.value=b.initializer?b.initializer.call(h):void 0,b.initializer=void 0),void 0===b.initializer&&(Object.defineProperty(d,p,b),b=null),o=b,i) -var d,p,f,m,h,b -e.default=c})),define("consul-ui/modifiers/with-overlay",["exports","ember-modifier","tippy.js"],(function(e,t,n){function l(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) -t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function r(e){for(var t=1;t2&&void 0!==arguments[2]?arguments[2]:{} -const o=i.options||{} -let a,u=e -if("string"==typeof o.triggerTarget){const e=u -if("parentNode"===o.triggerTarget)u=u.parentNode -else u=u.querySelectorAll(o.triggerTarget) -l=u.cloneNode(!0),e.remove(),i.options.triggerTarget=void 0}if(void 0===l&&(l=u.innerHTML,u.innerHTML=""),i.returns&&(o.trigger="manual"),"manual"===o.trigger){const e=o.delay||[] -void 0!==e[1]&&(o.onShown=t=>{clearInterval(a),a=setTimeout((()=>{t.hide()}),e[1])})}let s=u -const c=(0,n.default)(u,r({triggerTarget:s,content:e=>l,interactive:!0,plugins:[void 0!==o.followCursor?n.followCursor:void 0].filter((e=>Boolean(e)))},o)) -return i.returns&&i.returns(c),()=>{clearInterval(a),c.destroy()}})) -e.default=o})),define("consul-ui/router",["exports","@ember/routing/router","consul-ui/config/environment","@ember/debug","deepmerge","consul-ui/env","consul-ui/utils/routing/walk"],(function(e,t,n,l,r,i,o){function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.routes=void 0 -const u=document,s=n.default.modulePrefix,c=r.default.all([...u.querySelectorAll("script[data-routes]")].map((e=>JSON.parse(e.dataset.routes)))) -e.routes=c,(0,l.runInDebug)((()=>{const e=requirejs.entries[`${s}/docfy-output`] -if(void 0!==e){const t={} -e.callback(t),function e(t,n){"/"!==n.name&&(t=t[n.name]={_options:{path:n.name}}),n.pages.forEach((e=>{const n=e.relativeUrl -"string"==typeof n&&""!==n&&(t[n]={_options:{path:n}})})),n.children.forEach((n=>{e(t,n)}))}(c,t.default.nested)}})),(0,l.runInDebug)((()=>{window.Routes=function(){let e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:(0,i.env)("DEBUG_ROUTES_ENDPOINT") -t||(t="data:,%s") -const n=(0,o.dump)(c) -t.startsWith("data:,")?(e=window.open("","_blank"),e.document.write(`
      ${n}
      `)):e=window.open(t.replace("%s",encodeURIComponent(n)),"_blank"),e.focus()}})) -class d extends t.default{constructor(){super(...arguments),a(this,"location",(0,i.env)("locationType")),a(this,"rootURL",(0,i.env)("rootURL"))}}e.default=d,d.map((0,o.default)(c))})),define("consul-ui/routes/application",["exports","consul-ui/routing/route","@ember/object","@ember/service","consul-ui/mixins/with-blocking-actions"],(function(e,t,n,l,r){var i,o,a,u,s,c,d -function p(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function f(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let m=(i=(0,l.inject)("client/http"),o=(0,l.inject)("env"),a=(0,l.inject)(),u=class extends(t.default.extend(r.default)){constructor(){var e,t,n -super(...arguments),p(this,"client",s,this),p(this,"env",c,this),p(this,"hcp",d,this),n=void 0,(t="data")in(e=this)?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n}async model(){return this.env.var("CONSUL_ACLS_ENABLED")&&await this.hcp.updateTokenIfNecessary(this.env.var("CONSUL_HTTP_TOKEN")),{}}onClientChanged(e){let t=e.data -""===t&&(t={blocking:!0}),void 0!==this.data?(!0===this.data.blocking&&!1===t.blocking&&this.client.abort(),this.data=Object.assign({},t)):this.data=Object.assign({},t)}error(e,t){let n={status:e.code||e.statusCode||"",message:e.message||e.detail||"Error"} -return e.errors&&e.errors[0]&&(n=e.errors[0],n.message=n.message||n.title||n.detail||"Error"),""===n.status&&(n.message="Error"),this.controllerFor("application").setProperties({error:n}),!0}},s=f(u.prototype,"client",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),c=f(u.prototype,"env",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),d=f(u.prototype,"hcp",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f(u.prototype,"onClientChanged",[n.action],Object.getOwnPropertyDescriptor(u.prototype,"onClientChanged"),u.prototype),f(u.prototype,"error",[n.action],Object.getOwnPropertyDescriptor(u.prototype,"error"),u.prototype),u) -e.default=m})),define("consul-ui/routes/dc",["exports","@ember/service","consul-ui/routing/route"],(function(e,t,n){var l,r,i -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let o=(l=(0,t.inject)("repository/permission"),r=class extends n.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="permissionsRepo",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}async model(e){const t=await this.permissionsRepo.findAll({dc:e.dc,ns:this.optionalParams().nspace,partition:this.optionalParams().partition}) -return this.controllerFor("application").setProperties({permissions:t}),{permissions:t}}},a=r.prototype,u="permissionsRepo",s=[l],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},p={},Object.keys(c).forEach((function(e){p[e]=c[e]})),p.enumerable=!!p.enumerable,p.configurable=!!p.configurable,("value"in p||p.initializer)&&(p.writable=!0),p=s.slice().reverse().reduce((function(e,t){return t(a,u,e)||e}),p),d&&void 0!==p.initializer&&(p.value=p.initializer?p.initializer.call(d):void 0,p.initializer=void 0),void 0===p.initializer&&(Object.defineProperty(a,u,p),p=null),i=p,r) -var a,u,s,c,d,p -e.default=o})),define("consul-ui/routes/dc/acls/auth-methods/index",["exports","consul-ui/routing/route"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{constructor(){var e,t,n -super(...arguments),n={sortBy:"sort",source:"source",kind:"kind",searchproperty:{as:"searchproperty",empty:[["Name","DisplayName"]]},search:{as:"filter",replace:!0}},(t="queryParams")in(e=this)?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n}}e.default=n})),define("consul-ui/routes/dc/acls/auth-methods/show/index",["exports","consul-ui/routing/route","consul-ui/utils/routing/redirect-to"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class l extends t.default{constructor(){var e,t,l -super(...arguments),e=this,t="redirect",l=(0,n.default)("auth-method"),t in e?Object.defineProperty(e,t,{value:l,enumerable:!0,configurable:!0,writable:!0}):e[t]=l}}e.default=l})),define("consul-ui/routes/dc/acls/policies/create",["exports","consul-ui/routes/dc/acls/policies/edit"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{constructor(){var e,t,n -super(...arguments),n="dc/acls/policies/edit",(t="templateName")in(e=this)?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n}}e.default=n})),define("consul-ui/routes/dc/acls/policies/edit",["exports","@ember/service","consul-ui/routing/route","consul-ui/mixins/with-blocking-actions"],(function(e,t,n,l){var r,i,o -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let a=(r=(0,t.inject)("repository/policy"),i=class extends(n.default.extend(l.default)){constructor(){var e,t,n,l -super(...arguments),e=this,t="repo",l=this,(n=o)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}},u=i.prototype,s="repo",c=[r],d={configurable:!0,enumerable:!0,writable:!0,initializer:null},f={},Object.keys(d).forEach((function(e){f[e]=d[e]})),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=c.slice().reverse().reduce((function(e,t){return t(u,s,e)||e}),f),p&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(p):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(u,s,f),f=null),o=f,i) -var u,s,c,d,p,f -e.default=a})),define("consul-ui/routes/dc/acls/policies/index",["exports","consul-ui/routing/route","@ember/service","consul-ui/mixins/with-blocking-actions"],(function(e,t,n,l){var r,i,o -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let a=(r=(0,n.inject)("repository/policy"),i=class extends(t.default.extend(l.default)){constructor(){var e,t,n,l,r,i,a -super(...arguments),e=this,t="repo",l=this,(n=o)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0}),a={sortBy:"sort",datacenter:{as:"dc"},kind:"kind",searchproperty:{as:"searchproperty",empty:[["Name","Description"]]},search:{as:"filter",replace:!0}},(i="queryParams")in(r=this)?Object.defineProperty(r,i,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[i]=a}},u=i.prototype,s="repo",c=[r],d={configurable:!0,enumerable:!0,writable:!0,initializer:null},f={},Object.keys(d).forEach((function(e){f[e]=d[e]})),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=c.slice().reverse().reduce((function(e,t){return t(u,s,e)||e}),f),p&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(p):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(u,s,f),f=null),o=f,i) -var u,s,c,d,p,f -e.default=a})),define("consul-ui/routes/dc/acls/roles/create",["exports","consul-ui/routes/dc/acls/roles/edit"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{constructor(){var e,t,n -super(...arguments),n="dc/acls/roles/edit",(t="templateName")in(e=this)?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n}}e.default=n})),define("consul-ui/routes/dc/acls/roles/edit",["exports","@ember/service","consul-ui/routing/route","consul-ui/mixins/with-blocking-actions"],(function(e,t,n,l){var r,i,o -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let a=(r=(0,t.inject)("repository/role"),i=class extends(n.default.extend(l.default)){constructor(){var e,t,n,l -super(...arguments),e=this,t="repo",l=this,(n=o)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}},u=i.prototype,s="repo",c=[r],d={configurable:!0,enumerable:!0,writable:!0,initializer:null},f={},Object.keys(d).forEach((function(e){f[e]=d[e]})),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=c.slice().reverse().reduce((function(e,t){return t(u,s,e)||e}),f),p&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(p):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(u,s,f),f=null),o=f,i) -var u,s,c,d,p,f -e.default=a})),define("consul-ui/routes/dc/acls/roles/index",["exports","consul-ui/routing/route","@ember/service","consul-ui/mixins/with-blocking-actions"],(function(e,t,n,l){var r,i,o -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let a=(r=(0,n.inject)("repository/role"),i=class extends(t.default.extend(l.default)){constructor(){var e,t,n,l,r,i,a -super(...arguments),e=this,t="repo",l=this,(n=o)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0}),a={sortBy:"sort",searchproperty:{as:"searchproperty",empty:[["Name","Description","Policy"]]},search:{as:"filter",replace:!0}},(i="queryParams")in(r=this)?Object.defineProperty(r,i,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[i]=a}},u=i.prototype,s="repo",c=[r],d={configurable:!0,enumerable:!0,writable:!0,initializer:null},f={},Object.keys(d).forEach((function(e){f[e]=d[e]})),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=c.slice().reverse().reduce((function(e,t){return t(u,s,e)||e}),f),p&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(p):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(u,s,f),f=null),o=f,i) -var u,s,c,d,p,f -e.default=a})),define("consul-ui/routes/dc/acls/tokens/create",["exports","consul-ui/routes/dc/acls/tokens/edit"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{constructor(){var e,t,n -super(...arguments),n="dc/acls/tokens/edit",(t="templateName")in(e=this)?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n}}e.default=n})),define("consul-ui/routes/dc/acls/tokens/edit",["exports","@ember/service","consul-ui/routing/route","consul-ui/mixins/with-blocking-actions"],(function(e,t,n,l){var r,i,o,a,u -function s(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function c(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let d=(r=(0,t.inject)("repository/token"),i=(0,t.inject)("settings"),o=class extends(n.default.extend(l.default)){constructor(){super(...arguments),s(this,"repo",a,this),s(this,"settings",u,this)}async model(e,t){return{token:await this.settings.findBySlug("token")}}},a=c(o.prototype,"repo",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),u=c(o.prototype,"settings",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),o) -e.default=d})),define("consul-ui/routes/dc/acls/tokens/index",["exports","consul-ui/routing/route","@ember/service","consul-ui/mixins/with-blocking-actions"],(function(e,t,n,l){var r,i,o -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let a=(r=(0,n.inject)("repository/token"),i=class extends(t.default.extend(l.default)){constructor(){var e,t,n,l,r,i,a -super(...arguments),e=this,t="repo",l=this,(n=o)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0}),a={sortBy:"sort",kind:"kind",searchproperty:{as:"searchproperty",empty:[["AccessorID","Description","Role","Policy"]]},search:{as:"filter",replace:!0}},(i="queryParams")in(r=this)?Object.defineProperty(r,i,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[i]=a}},u=i.prototype,s="repo",c=[r],d={configurable:!0,enumerable:!0,writable:!0,initializer:null},f={},Object.keys(d).forEach((function(e){f[e]=d[e]})),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=c.slice().reverse().reduce((function(e,t){return t(u,s,e)||e}),f),p&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(p):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(u,s,f),f=null),o=f,i) -var u,s,c,d,p,f -e.default=a})),define("consul-ui/routes/dc/kv/folder",["exports","consul-ui/routes/dc/kv/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{beforeModel(e){super.beforeModel(...arguments) -const t=this.paramsFor("dc.kv.folder") -if("/"===t.key||null==t.key)return this.transitionTo("dc.kv.index")}}e.default=n})),define("consul-ui/routes/dc/kv/index",["exports","consul-ui/routing/route","@ember/object","consul-ui/utils/isFolder"],(function(e,t,n,l){var r -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let i=(r=class extends t.default{beforeModel(){const e=this.paramsFor(this.routeName).key||"/" -if(!(0,l.default)(e))return this.replaceWith(this.routeName,e+"/")}error(e){return!e.errors||!e.errors[0]||"404"!=e.errors[0].status||this.transitionTo("dc.kv.index")}},o=r.prototype,a="error",u=[n.action],s=Object.getOwnPropertyDescriptor(r.prototype,"error"),c=r.prototype,d={},Object.keys(s).forEach((function(e){d[e]=s[e]})),d.enumerable=!!d.enumerable,d.configurable=!!d.configurable,("value"in d||d.initializer)&&(d.writable=!0),d=u.slice().reverse().reduce((function(e,t){return t(o,a,e)||e}),d),c&&void 0!==d.initializer&&(d.value=d.initializer?d.initializer.call(c):void 0,d.initializer=void 0),void 0===d.initializer&&(Object.defineProperty(o,a,d),d=null),r) -var o,a,u,s,c,d -e.default=i})),define("consul-ui/routes/dc/services/notfound",["exports","consul-ui/routing/route"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{redirect(e,t){this.replaceWith("dc.services.instance",e.name,e.node,e.id)}}e.default=n})),define("consul-ui/routes/dc/services/show/topology",["exports","consul-ui/routing/route","@ember/service","@ember/object"],(function(e,t,n,l){var r,i,o,a,u,s,c -function d(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) -t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function p(e){for(var t=1;tn.Datacenter===e.Datacenter&&n.SourceName===e.Name&&n.SourceNS===e.Namespace&&n.SourcePartition===e.Partition&&n.DestinationName===t.Name&&n.DestinationNS===t.Namespace&&n.DestinationPartition===t.Partition)) -void 0===r?r=this.repo.create({Datacenter:e.Datacenter,SourceName:e.Name,SourceNS:e.Namespace||"default",SourcePartition:e.Partition||"default",DestinationName:t.Name,DestinationNS:t.Namespace||"default",DestinationPartition:t.Partition||"default"}):n=this.feedback.notification("update","intention"),(0,l.set)(r,"Action","allow"),await this.repo.persist(r),n.success(r)}catch(r){n.error(r)}this.refresh()}afterModel(e,t){const n=p(p(p({},this.optionalParams()),this.paramsFor("dc")),this.paramsFor("dc.services.show")) -this.intentions=this.data.source((e=>e`/${n.partition}/${n.nspace}/${n.dc}/intentions/for-service/${n.name}`))}async deactivate(e){(await this.intentions).destroy()}},u=h(a.prototype,"data",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),s=h(a.prototype,"repo",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),c=h(a.prototype,"feedback",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h(a.prototype,"createIntention",[l.action],Object.getOwnPropertyDescriptor(a.prototype,"createIntention"),a.prototype),a) -e.default=b})),define("consul-ui/routing/route",["exports","@ember/routing/route","@ember/object","@ember/service","consul-ui/utils/path/resolve","consul-ui/router"],(function(e,t,n,l,r,i){var o,a,u,s,c,d,p,f,m,h,b -function y(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) -t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function g(e){for(var t=1;t!n.includes(e))).length&&(e=void 0)}}return e}model(){const e={} -return void 0!==this.queryParams&&void 0!==this.queryParams.searchproperty&&(e.searchProperties=this.queryParams.searchproperty.empty[0]),e}setupController(e,t){(0,n.setProperties)(e,g(g({},t),{},{routeName:this.routeName})),super.setupController(...arguments)}optionalParams(){return this.container.get(`location:${this.env.var("locationType")}`).optionalParams()}paramsFor(e){return this.routlet.normalizeParamsFor(this.routeName,super.paramsFor(...arguments))}async replaceWith(e,t){await Promise.resolve() -let n=[] -return"string"==typeof t&&(n=[t]),void 0===t||Array.isArray(t)||"string"==typeof t||(n=Object.values(t)),super.replaceWith(e,...n)}async transitionTo(e,t){await Promise.resolve() -let n=[] -return"string"==typeof t&&(n=[t]),void 0===t||Array.isArray(t)||"string"==typeof t||(n=Object.values(t)),super.transitionTo(e,...n)}},p=P(d.prototype,"container",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f=P(d.prototype,"env",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m=P(d.prototype,"permissions",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=P(d.prototype,"router",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=P(d.prototype,"routlet",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),P(d.prototype,"replaceWith",[n.action],Object.getOwnPropertyDescriptor(d.prototype,"replaceWith"),d.prototype),P(d.prototype,"transitionTo",[n.action],Object.getOwnPropertyDescriptor(d.prototype,"transitionTo"),d.prototype),d) -e.default=x})),define("consul-ui/routing/single",["exports","consul-ui/routing/route","@ember/debug","rsvp"],(function(e,t,n,l){function r(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) -t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function i(e){for(var t=1;te.ID,Name:e=>e.Name}})),define("consul-ui/search/predicates/auth-method",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={Name:e=>e.Name,DisplayName:e=>e.DisplayName}})),define("consul-ui/search/predicates/health-check",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t={Name:e=>e.Name,Node:e=>e.Node,Service:e=>e.ServiceName,CheckID:e=>e.CheckID||"",ID:e=>e.Service.ID||"",Notes:e=>e.Notes,Output:e=>e.Output,ServiceTags:e=>{return t=e.ServiceTags,Array.isArray(t)?t:t.toArray() -var t}} -e.default=t})),define("consul-ui/search/predicates/intention",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t="All Services (*)" -var n={SourceName:e=>[e.SourceName,"*"===e.SourceName?t:void 0].filter(Boolean),DestinationName:e=>[e.DestinationName,"*"===e.DestinationName?t:void 0].filter(Boolean)} -e.default=n})) -define("consul-ui/search/predicates/kv",["exports","consul-ui/utils/right-trim"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n={Key:e=>(0,t.default)(e.Key.toLowerCase()).split("/").filter((e=>Boolean(e))).pop()} -e.default=n})),define("consul-ui/search/predicates/node",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t={Node:e=>e.Node,Address:e=>e.Address,PeerName:e=>e.PeerName,Meta:e=>Object.entries(e.Meta||{}).reduce(((e,t)=>e.concat(t)),[])} -e.default=t})),define("consul-ui/search/predicates/nspace",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={Name:e=>e.Name,Description:e=>e.Description,Role:e=>((e.ACLs||{}).RoleDefaults||[]).map((e=>e.Name)),Policy:e=>((e.ACLs||{}).PolicyDefaults||[]).map((e=>e.Name))}})),define("consul-ui/search/predicates/peer",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={Name:e=>e.Name,ID:e=>e.ID}})),define("consul-ui/search/predicates/policy",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={Name:e=>e.Name,Description:e=>e.Description}})),define("consul-ui/search/predicates/role",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={Name:e=>e.Name,Description:e=>e.Description,Policy:e=>(e.Policies||[]).map((e=>e.Name)).concat((e.ServiceIdentities||[]).map((e=>e.ServiceName))).concat((e.NodeIdentities||[]).map((e=>e.NodeName)))}})),define("consul-ui/search/predicates/service-instance",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t={Name:e=>e.Name,Node:e=>e.Node.Node,Tags:e=>e.Service.Tags||[],ID:e=>e.Service.ID||"",Address:e=>e.Address||"",Port:e=>(e.Service.Port||"").toString(),"Service.Meta":e=>Object.entries(e.Service.Meta||{}).reduce(((e,t)=>e.concat(t)),[]),"Node.Meta":e=>Object.entries(e.Node.Meta||{}).reduce(((e,t)=>e.concat(t)),[])} -e.default=t})),define("consul-ui/search/predicates/service",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={Name:e=>e.Name,Tags:e=>e.Tags||[],PeerName:e=>e.PeerName,Partition:e=>e.Partition}})),define("consul-ui/search/predicates/token",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={Name:e=>e.Name,Description:e=>e.Description,AccessorID:e=>e.AccessorID,Role:e=>(e.Roles||[]).map((e=>e.Name)),Policy:e=>(e.Policies||[]).map((e=>e.Name)).concat((e.ServiceIdentities||[]).map((e=>e.ServiceName))).concat((e.NodeIdentities||[]).map((e=>e.NodeName)))}})),define("consul-ui/search/predicates/upstream-instance",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={DestinationName:(e,t)=>e.DestinationName,LocalBindAddress:(e,t)=>e.LocalBindAddress,LocalBindPort:(e,t)=>e.LocalBindPort.toString()}})),define("consul-ui/serializers/-default",["exports","@ember-data/serializer/json"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/serializers/-json-api",["exports","@ember-data/serializer/json-api"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/serializers/-rest",["exports","@ember-data/serializer/rest"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/serializers/application",["exports","consul-ui/serializers/http","@ember/object","consul-ui/utils/http/consul","consul-ui/utils/http/headers","consul-ui/models/dc","consul-ui/models/nspace","consul-ui/models/partition","consul-ui/utils/create-fingerprinter"],(function(e,t,n,l,r,i,o,a,u){function s(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const c=function(e,t){const n={} -return Object.keys(e).forEach((function(t){n[t.toLowerCase()]=e[t]})),t[l.HEADERS_SYMBOL]=n,t} -class d extends t.default{constructor(){super(...arguments),s(this,"attachHeaders",c),s(this,"fingerprint",(0,u.default)(i.FOREIGN_KEY,o.NSPACE_KEY,a.PARTITION_KEY))}respondForQuery(e,t){return e(((e,n)=>{return c(e,(r=n,i=this.fingerprint(this.primaryKey,this.slugKey,t.dc,e[l.HEADERS_NAMESPACE],e[l.HEADERS_PARTITION]),Array.isArray(r)?r.map(i):[r].map(i)[0]),t) -var r,i}))}respondForQueryRecord(e,t){return e(((e,n)=>c(e,this.fingerprint(this.primaryKey,this.slugKey,t.dc,e[l.HEADERS_NAMESPACE],e[l.HEADERS_PARTITION])(n),t)))}respondForCreateRecord(e,t,n){const r=this.slugKey,o=this.primaryKey -return e(((e,t)=>(!0===t&&(t=n),this.fingerprint(o,r,n[i.FOREIGN_KEY],e[l.HEADERS_NAMESPACE],n.Partition)(t))))}respondForUpdateRecord(e,t,n){const r=this.slugKey,o=this.primaryKey -return e(((e,t)=>(!0===t&&(t=n),this.fingerprint(o,r,n[i.FOREIGN_KEY],e[l.HEADERS_NAMESPACE],e[l.HEADERS_PARTITION])(t))))}respondForDeleteRecord(e,t,n){const r=this.slugKey,u=this.primaryKey -return e(((e,t)=>({[u]:this.fingerprint(u,r,n[i.FOREIGN_KEY],e[l.HEADERS_NAMESPACE],e[l.HEADERS_PARTITION])({[r]:n[r],[o.NSPACE_KEY]:n[o.NSPACE_KEY],[a.PARTITION_KEY]:n[a.PARTITION_KEY]})[u]})))}normalizeResponse(e,t,n,l,r){const i=this.normalizePayload(n,l,r),o=this.normalizeMeta(e,t,i,l,r) -"query"!==r&&(i.meta=o) -const a=super.normalizeResponse(e,t,{meta:o,[t.modelName]:i},l,r) -return void 0===a?n:a}timestamp(){return(new Date).getTime()}normalizeMeta(e,t,i,o,a){const u=i[l.HEADERS_SYMBOL]||{} -delete i[l.HEADERS_SYMBOL] -const s={cacheControl:u[r.CACHE_CONTROL.toLowerCase()],cursor:u[l.HEADERS_INDEX.toLowerCase()],dc:u[l.HEADERS_DATACENTER.toLowerCase()],nspace:u[l.HEADERS_NAMESPACE.toLowerCase()],partition:u[l.HEADERS_PARTITION.toLowerCase()]} -return void 0!==u["x-range"]&&(s.range=u["x-range"]),void 0!==u.refresh&&(s.interval=1e3*u.refresh),"query"===a&&(s.date=this.timestamp(),i.forEach((function(e){(0,n.set)(e,"SyncTime",s.date)}))),s}normalizePayload(e,t,n){return e}}e.default=d})),define("consul-ui/serializers/auth-method",["exports","consul-ui/serializers/application","consul-ui/models/auth-method"],(function(e,t,n){function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class r extends t.default{constructor(){super(...arguments),l(this,"primaryKey",n.PRIMARY_KEY),l(this,"slugKey",n.SLUG_KEY)}}e.default=r})),define("consul-ui/serializers/binding-rule",["exports","consul-ui/serializers/application","consul-ui/models/binding-rule"],(function(e,t,n){function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class r extends t.default{constructor(){super(...arguments),l(this,"primaryKey",n.PRIMARY_KEY),l(this,"slugKey",n.SLUG_KEY)}}e.default=r})),define("consul-ui/serializers/coordinate",["exports","consul-ui/serializers/application","consul-ui/models/coordinate"],(function(e,t,n){function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class r extends t.default{constructor(){super(...arguments),l(this,"primaryKey",n.PRIMARY_KEY),l(this,"slugKey",n.SLUG_KEY)}}e.default=r})),define("consul-ui/serializers/discovery-chain",["exports","consul-ui/serializers/application","consul-ui/models/discovery-chain"],(function(e,t,n){function l(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) -t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function r(e){for(var t=1;tt))}respondForQueryRecord(e,t){return e(((e,t)=>t))}respondForFindAll(e,t){return e(((e,t)=>t))}respondForCreateRecord(e,t){return e(((e,t)=>t))}respondForUpdateRecord(e,t){return e(((e,t)=>t))}respondForDeleteRecord(e,t){return e(((e,t)=>t))}}e.default=n})),define("consul-ui/serializers/intention",["exports","consul-ui/serializers/application","@ember/service","@ember/object","consul-ui/models/intention"],(function(e,t,n,l,r){var i,o,a -function u(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let s=(i=(0,n.inject)("encoder"),o=class extends t.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="encoder",l=this,(n=a)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0}),u(this,"primaryKey",r.PRIMARY_KEY),u(this,"slugKey",r.SLUG_KEY)}init(){super.init(...arguments),this.uri=this.encoder.uriTag()}ensureID(e){return(0,l.get)(e,"ID.length")?(e.Legacy=!0,e.LegacyID=e.ID):e.Legacy=!1,e.SourcePeer?e.ID=this.uri`peer:${e.SourcePeer}:${e.SourceNS}:${e.SourceName}:${e.DestinationPartition}:${e.DestinationNS}:${e.DestinationName}`:e.ID=this.uri`${e.SourcePartition}:${e.SourceNS}:${e.SourceName}:${e.DestinationPartition}:${e.DestinationNS}:${e.DestinationName}`,e}respondForQuery(e,t){return super.respondForQuery((t=>e(((e,n)=>t(e,n.map((e=>this.ensureID(e))))))),t)}respondForQueryRecord(e,t){return super.respondForQueryRecord((t=>e(((e,n)=>(n=this.ensureID(n),t(e,n))))),t)}respondForCreateRecord(e,t,n){const l=this.slugKey,r=this.primaryKey -return e(((e,i)=>((i=n).ID=this.uri`${t.SourcePartition}:${t.SourceNS}:${t.SourceName}:${t.DestinationPartition}:${t.DestinationNS}:${t.DestinationName}`,this.fingerprint(r,l,i.Datacenter)(i))))}respondForUpdateRecord(e,t,n){const l=this.slugKey,r=this.primaryKey -return e(((e,i)=>((i=n).LegacyID=i.ID,i.ID=t.ID,this.fingerprint(r,l,i.Datacenter)(i))))}},c=o.prototype,d="encoder",p=[i],f={configurable:!0,enumerable:!0,writable:!0,initializer:null},h={},Object.keys(f).forEach((function(e){h[e]=f[e]})),h.enumerable=!!h.enumerable,h.configurable=!!h.configurable,("value"in h||h.initializer)&&(h.writable=!0),h=p.slice().reverse().reduce((function(e,t){return t(c,d,e)||e}),h),m&&void 0!==h.initializer&&(h.value=h.initializer?h.initializer.call(m):void 0,h.initializer=void 0),void 0===h.initializer&&(Object.defineProperty(c,d,h),h=null),a=h,o) -var c,d,p,f,m,h -e.default=s})),define("consul-ui/serializers/kv",["exports","consul-ui/serializers/application","@ember/service","consul-ui/models/kv"],(function(e,t,n,l){var r,i,o -function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let u=(r=(0,n.inject)("atob"),i=class extends t.default{constructor(){var e,t,n,r -super(...arguments),e=this,t="decoder",r=this,(n=o)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0}),a(this,"primaryKey",l.PRIMARY_KEY),a(this,"slugKey",l.SLUG_KEY)}serialize(e,t){const n=e.attr("Value") -return"string"==typeof n?this.decoder.execute(n):null}respondForQueryRecord(e,t){return super.respondForQueryRecord((t=>e(((e,n)=>(void 0===n[0].Session&&(n[0].Session=""),t(e,n[0]))))),t)}respondForQuery(e,t){return super.respondForQuery((t=>e(((e,n)=>t(e,n.map((e=>({[this.slugKey]:e}))))))),t)}},s=i.prototype,c="decoder",d=[r],p={configurable:!0,enumerable:!0,writable:!0,initializer:null},m={},Object.keys(p).forEach((function(e){m[e]=p[e]})),m.enumerable=!!m.enumerable,m.configurable=!!m.configurable,("value"in m||m.initializer)&&(m.writable=!0),m=d.slice().reverse().reduce((function(e,t){return t(s,c,e)||e}),m),f&&void 0!==m.initializer&&(m.value=m.initializer?m.initializer.call(f):void 0,m.initializer=void 0),void 0===m.initializer&&(Object.defineProperty(s,c,m),m=null),o=m,i) -var s,c,d,p,f,m -e.default=u})),define("consul-ui/serializers/node",["exports","consul-ui/serializers/application","@ember-data/serializer/rest","consul-ui/models/node","@ember/string"],(function(e,t,n,l,r){function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const o=function(e){return""===e[l.SLUG_KEY]&&(e[l.SLUG_KEY]=e.Node),e} -class a extends(t.default.extend(n.EmbeddedRecordsMixin)){constructor(){super(...arguments),i(this,"primaryKey",l.PRIMARY_KEY),i(this,"slugKey",l.SLUG_KEY),i(this,"attrs",{Services:{embedded:"always"}})}transformHasManyResponse(e,t,n){let l,r={} -return"Services"===t.key?((n.Checks||[]).filter((e=>""!==e.ServiceID)).forEach((e=>{void 0===r[e.ServiceID]&&(r[e.ServiceID]=[]),r[e.ServiceID].push(e)})),""===n.PeerName&&(n.PeerName=void 0),l=this.store.serializerFor(t.type),n.Services=n.Services.map((e=>l.transformHasManyResponseFromNode(n,e,r))),n):super.transformHasManyResponse(...arguments)}respondForQuery(e,t,n,l){const i=super.respondForQuery((t=>e(((e,n)=>t(e,n.map(o))))),t) -return l.eachRelationship(((e,t)=>{i.forEach((e=>this[`transform${(0,r.classify)(t.kind)}Response`](this.store,t,e,i)))})),i}respondForQueryRecord(e,t,n,l){const i=super.respondForQueryRecord((t=>e(((e,n)=>t(e,o(n))))),t) -return l.eachRelationship(((e,t)=>{this[`transform${(0,r.classify)(t.kind)}Response`](this.store,t,i)})),i}respondForQueryLeader(e,t){return e(((e,n)=>{const l=n.split(":"),r=l.pop(),i=l.join(":") -return this.attachHeaders(e,{Address:i,Port:r},t)}))}}e.default=a})),define("consul-ui/serializers/nspace",["exports","consul-ui/serializers/application","@ember/object","consul-ui/models/nspace"],(function(e,t,n,l){function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const i=e=>((0,n.get)(e,"ACLs.PolicyDefaults")&&(e.ACLs.PolicyDefaults=e.ACLs.PolicyDefaults.map((function(e){return void 0===e.template&&(e.template=""),e}))),["PolicyDefaults","RoleDefaults"].forEach((function(t){void 0===e.ACLs&&(e.ACLs=[]),void 0===e.ACLs[t]&&(e.ACLs[t]=[])})),e) -class o extends t.default{constructor(){super(...arguments),r(this,"primaryKey",l.PRIMARY_KEY),r(this,"slugKey",l.SLUG_KEY)}respondForQuery(e,t,n,l){return super.respondForQuery((n=>e(((e,l)=>n(e,l.map((function(e){return e.Namespace="*",e.Datacenter=t.dc,i(e)})))))),t)}respondForQueryRecord(e,t,n){return super.respondForQuery((n=>e(((e,l)=>(l.Datacenter=t.dc,l.Namespace="*",n(e,i(l)))))),t,n)}respondForCreateRecord(e,t,n){return super.respondForCreateRecord((n=>e(((e,l)=>(l.Datacenter=t.dc,l.Namespace="*",n(e,i(l)))))),t,n)}respondForUpdateRecord(e,t,n){return e(((e,t)=>i(t)))}}e.default=o})),define("consul-ui/serializers/oidc-provider",["exports","consul-ui/serializers/application","consul-ui/models/oidc-provider"],(function(e,t,n){function l(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) -t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class i extends t.default{constructor(){super(...arguments),r(this,"primaryKey",n.PRIMARY_KEY),r(this,"slugKey",n.SLUG_KEY)}respondForAuthorize(e,t,n){return e(((e,t)=>this.attachHeaders(e,t,n)))}respondForQueryRecord(e,t){return super.respondForQueryRecord((n=>e(((e,i)=>n(e,function(e){for(var t=1;te(((e,n)=>t(e,n.map((e=>(e.Partition="*",e.Namespace="*",e))))))),t)}}e.default=r})),define("consul-ui/serializers/permission",["exports","consul-ui/serializers/application"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{}e.default=n})),define("consul-ui/serializers/policy",["exports","consul-ui/serializers/application","consul-ui/models/policy"],(function(e,t,n){function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class r extends t.default{constructor(){super(...arguments),l(this,"primaryKey",n.PRIMARY_KEY),l(this,"slugKey",n.SLUG_KEY)}}e.default=r})),define("consul-ui/serializers/proxy",["exports","consul-ui/serializers/application","consul-ui/models/proxy"],(function(e,t,n){function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class r extends t.default{constructor(){super(...arguments),l(this,"primaryKey",n.PRIMARY_KEY),l(this,"slugKey",n.SLUG_KEY),l(this,"attrs",{NodeName:"Node"})}}e.default=r})),define("consul-ui/serializers/role",["exports","consul-ui/serializers/application","consul-ui/models/role","consul-ui/mixins/policy/as-many"],(function(e,t,n,l){function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class i extends(t.default.extend(l.default)){constructor(){super(...arguments),r(this,"primaryKey",n.PRIMARY_KEY),r(this,"slugKey",n.SLUG_KEY)}}e.default=i})),define("consul-ui/serializers/service-instance",["exports","consul-ui/serializers/application","consul-ui/models/service-instance"],(function(e,t,n){function l(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) -t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function r(e){for(var t=1;t{switch(t.Status){case"passing":e.ChecksPassing.push(t) -break -case"warning":e.ChecksWarning.push(t) -break -case"critical":e.ChecksCritical.push(t)}return e}),{ChecksPassing:[],ChecksWarning:[],ChecksCritical:[]}),o=r(r({},i),{},{Service:t,Checks:l,Node:{Datacenter:e.Datacenter,Namespace:e.Namespace,Partition:e.Partition,ID:e.ID,Node:e.Node,Address:e.Address,TaggedAddresses:e.TaggedAddresses,Meta:e.Meta}}) -return o.uid=this.extractUid(o),o}respondForQuery(e,t){return super.respondForQuery((n=>e(((e,l)=>{if(0===l.length){const e=new Error -throw e.errors=[{status:"404",title:"Not found"}],e}return l.forEach((e=>{e.Datacenter=t.dc,e.Namespace=t.ns||"default",e.Partition=t.partition||"default",e.uid=this.extractUid(e)})),n(e,l)}))),t)}respondForQueryRecord(e,t){return super.respondForQueryRecord((n=>e(((e,l)=>{if(l.forEach((e=>{e.Datacenter=t.dc,e.Namespace=t.ns||"default",e.Partition=t.partition||"default",e.uid=this.extractUid(e)})),void 0===(l=l.find((function(e){return e.Node.Node===t.node&&e.Service.ID===t.serviceId})))){const e=new Error -throw e.errors=[{status:"404",title:"Not found"}],e}return l.Namespace=l.Service.Namespace,l.Partition=l.Service.Partition,n(e,l)}))),t)}}e.default=o})) -define("consul-ui/serializers/service",["exports","consul-ui/serializers/application","consul-ui/models/service","@ember/object","consul-ui/utils/http/consul"],(function(e,t,n,l,r){function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class o extends t.default{constructor(){super(...arguments),i(this,"primaryKey",n.PRIMARY_KEY),i(this,"slugKey",n.SLUG_KEY)}respondForQuery(e,t){return super.respondForQuery((t=>e(((e,n)=>t(e,this._transformServicesPayload(n))))),t)}respondForQueryRecord(e,t){return super.respondForQueryRecord((n=>e(((e,r)=>n(e,{Name:t.id,Namespace:(0,l.get)(r,"firstObject.Service.Namespace"),Nodes:r})))),t)}createJSONApiDocumentFromServicesPayload(e,t,n){const{primaryKey:l,slugKey:i,fingerprint:o}=this -return{data:this._transformServicesPayload(t).map(o(l,i,n,e[r.HEADERS_NAMESPACE],e[r.HEADERS_PARTITION])).map((e=>({id:e.uid,type:"service",attributes:e})))}}_transformServicesPayload(e){const t={} -return e.filter((function(e){return"connect-proxy"!==e.Kind})).forEach((e=>{t[e.Name]=e})),e.filter((function(e){return"connect-proxy"===e.Kind})).forEach((e=>{e.ProxyFor&&e.ProxyFor.forEach((n=>{void 0!==t[n]&&(t[n].Proxy=e)}))})),e}}e.default=o})),define("consul-ui/serializers/session",["exports","consul-ui/serializers/application","consul-ui/models/session"],(function(e,t,n){function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class r extends t.default{constructor(){super(...arguments),l(this,"primaryKey",n.PRIMARY_KEY),l(this,"slugKey",n.SLUG_KEY)}respondForQueryRecord(e,t){return super.respondForQueryRecord((t=>e(((e,n)=>{if(0===n.length){const e=new Error -throw e.errors=[{status:"404",title:"Not found"}],e}return t(e,n[0])}))),t)}}e.default=r})),define("consul-ui/serializers/token",["exports","consul-ui/serializers/application","@ember/object","consul-ui/models/token","consul-ui/mixins/policy/as-many","consul-ui/mixins/role/as-many"],(function(e,t,n,l,r,i){function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class a extends(t.default.extend(r.default,i.default)){constructor(){super(...arguments),o(this,"primaryKey",l.PRIMARY_KEY),o(this,"slugKey",l.SLUG_KEY)}serialize(e,t){let n=super.serialize(...arguments) -return null!==n.Rules&&(n={ID:n.SecretID,Name:n.Description,Type:n.Type,Rules:n.Rules}),n&&delete n.SecretID,n}respondForSelf(e,t){return this.respondForQueryRecord(e,t)}respondForUpdateRecord(e,t,l){return super.respondForUpdateRecord((t=>e(((e,l)=>{if(void 0!==l.Policies&&null!==l.Policies||(l.Policies=[]),void 0!==l.ID){const e=this.store.peekAll("token").findBy("SecretID",l.ID) -e&&(l.SecretID=l.ID,l.AccessorID=(0,n.get)(e,"AccessorID"))}return t(e,l)}))),t,l)}}e.default=a})),define("consul-ui/serializers/topology",["exports","consul-ui/serializers/application","consul-ui/models/topology","@ember/service"],(function(e,t,n,l){var r,i,o -function a(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) -t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function u(e){for(var t=1;t{e.Intention.SourceName=e.Name,e.Intention.SourceNS=e.Namespace,e.Intention.DestinationName=t.id,e.Intention.DestinationNS=t.ns||"default",l.ensureID(e.Intention)})),i.Upstreams.forEach((e=>{e.Intention.SourceName=t.id,e.Intention.SourceNS=t.ns||"default",e.Intention.DestinationName=e.Name,e.Intention.DestinationNS=e.Namespace,l.ensureID(e.Intention)})),r(e,u(u({},i),{},{[n.SLUG_KEY]:t.id}))}))}),t)}},d=i.prototype,p="store",f=[r],m={configurable:!0,enumerable:!0,writable:!0,initializer:null},b={},Object.keys(m).forEach((function(e){b[e]=m[e]})),b.enumerable=!!b.enumerable,b.configurable=!!b.configurable,("value"in b||b.initializer)&&(b.writable=!0),b=f.slice().reverse().reduce((function(e,t){return t(d,p,e)||e}),b),h&&void 0!==b.initializer&&(b.value=b.initializer?b.initializer.call(h):void 0,b.initializer=void 0),void 0===b.initializer&&(Object.defineProperty(d,p,b),b=null),o=b,i) -var d,p,f,m,h,b -e.default=c})),define("consul-ui/services/-ensure-registered",["exports","@embroider/util/services/ensure-registered"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/services/-portal",["exports","ember-stargate/services/-portal"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/services/abilities",["exports","ember-can/services/can"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{parse(e){return super.parse(e.replace("use SSO","use authMethods").replace("service","zervice"))}}e.default=n})),define("consul-ui/services/atob",["exports","@ember/service","consul-ui/utils/atob"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class l extends t.default{execute(){return(0,n.default)(...arguments)}}e.default=l})),define("consul-ui/services/auth-providers/oauth2-code-with-url-provider",["exports","torii/providers/oauth2-code","@ember/debug"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class l extends t.default{constructor(){var e,t,n -super(...arguments),n="oidc-with-url",(t="name")in(e=this)?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n}buildUrl(){return this.baseUrl}open(e){const t=this.get("name"),l=this.buildUrl() -return this.get("popup").open(l,["state","code"],e).then((function(e){const l={authorizationState:e.state,authorizationCode:decodeURIComponent(e.code),provider:t} -return(0,n.runInDebug)((e=>console.info("Retrieved the following creds from the OAuth Provider",l))),l}))}close(){const e=this.get("popup.remote")||{} -if("function"==typeof e.close)return e.close()}}e.default=l})),define("consul-ui/services/btoa",["exports","@ember/service","consul-ui/utils/btoa"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class l extends t.default{execute(){return(0,n.default)(...arguments)}}e.default=l})),define("consul-ui/services/can",["exports","ember-can/services/abilities"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/services/change",["exports","@ember/service","ember-changeset-validations","ember-changeset","consul-ui/utils/form/changeset","consul-ui/validations/intention-permission","consul-ui/validations/intention-permission-http-header"],(function(e,t,n,l,r,i,o){var a,u,s -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const c={"intention-permission":i.default,"intention-permission-http-header":o.default} -let d=(a=(0,t.inject)("schema"),u=class extends t.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="schema",l=this,(n=s)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}init(){super.init(...arguments),this._validators=new Map}willDestroy(){this._validators=null}changesetFor(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{} -const o=this.validatorFor(e,i) -let a -if(o){let e=o -"function"!=typeof o&&(e=(0,n.default)(o)),a=(0,l.Changeset)(t,e,o,{changeset:r.default})}else a=(0,l.Changeset)(t) -return a}validatorFor(e){if(!this._validators.has(e)){const t=c[e] -let n -void 0!==t&&(n=t(this.schema)),this._validators.set(e,n)}return this._validators.get(e)}},p=u.prototype,f="schema",m=[a],h={configurable:!0,enumerable:!0,writable:!0,initializer:null},y={},Object.keys(h).forEach((function(e){y[e]=h[e]})),y.enumerable=!!y.enumerable,y.configurable=!!y.configurable,("value"in y||y.initializer)&&(y.writable=!0),y=m.slice().reverse().reduce((function(e,t){return t(p,f,e)||e}),y),b&&void 0!==y.initializer&&(y.value=y.initializer?y.initializer.call(b):void 0,y.initializer=void 0),void 0===y.initializer&&(Object.defineProperty(p,f,y),y=null),s=y,u) -var p,f,m,h,b,y -e.default=d})),define("consul-ui/services/client/connections",["exports","@ember/service"],(function(e,t){var n,l,r,i,o,a,u -function s(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function c(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let d=(n=(0,t.inject)("dom"),l=(0,t.inject)("env"),r=(0,t.inject)("data-source/service"),i=class extends t.default{constructor(){super(...arguments),s(this,"dom",o,this),s(this,"env",a,this),s(this,"data",u,this)}init(){super.init(...arguments),this._listeners=this.dom.listeners(),this.connections=new Set,this.addVisibilityChange()}willDestroy(){this._listeners.remove(),this.purge(),super.willDestroy(...arguments)}addVisibilityChange(){this._listeners.add(this.dom.document(),{visibilitychange:e=>{e.target.hidden&&this.purge(-1)}})}whenAvailable(e){const t=this.dom.document() -return t.hidden?new Promise((n=>{const l=this._listeners.add(t,{visibilitychange:function(t){l(),n(e)}})})):Promise.resolve(e)}purge(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;[...this.connections].forEach((function(t){t.abort(e)})),this.connections=new Set}acquire(e){if(this.connections.size>=this.env.var("CONSUL_HTTP_MAX_CONNECTIONS")){const t=this.data.closed() -let n=[...this.connections].find((e=>!!e.headers()["x-request-id"]&&t.includes(e.headers()["x-request-id"]))) -void 0===n&&"text/event-stream"===e.headers()["content-type"]&&(n=this.connections.values().next().value),void 0!==n&&(this.release(n),n.abort(429))}this.connections.add(e)}release(e){this.connections.delete(e)}},o=c(i.prototype,"dom",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),a=c(i.prototype,"env",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),u=c(i.prototype,"data",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),i) -e.default=d})),define("consul-ui/services/client/http",["exports","@ember/service","@ember/object","@ember/runloop","consul-ui/utils/http/headers","consul-ui/utils/http/consul","consul-ui/utils/http/create-url","consul-ui/utils/http/create-headers","consul-ui/utils/http/create-query-params"],(function(e,t,n,l,r,i,o,a,u){var s,c,d,p,f,m,h,b,y,g,v,O,P,x,w -function j(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function _(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}function k(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) -t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function S(e){for(var t=1;tC.stringify(this.sanitize(e)))) -const e=this.encoder.uriTag() -this.cache=(t,n)=>(t.uri=n(e),t.SyncTime=(new Date).getTime(),this.store.push({data:{id:t.uri,type:new URL(t.uri).protocol.slice(0,-1),attributes:t}}))}sanitize(e){return this.env.var("CONSUL_NSPACES_ENABLED")&&void 0!==e.ns&&null!==e.ns&&""!==e.ns||delete e.ns,this.env.var("CONSUL_PARTITIONS_ENABLED")&&void 0!==e.partition&&null!==e.partition&&""!==e.partition||delete e.partition,e}willDestroy(){this._listeners.remove(),super.willDestroy(...arguments)}url(){return this.parseURL(...arguments)}body(){const e=function(e){let t={} -const n=e.reduce((function(e,t,n){return-1!==(t=t.split("\n").map((e=>e.trim())).join("\n")).indexOf("\n\n")?n:e}),-1) -for(var l=arguments.length,r=new Array(l>1?l-1:0),i=1;i1?t-1:0),l=1;l0||Object.keys(d.data).length>0)&&(d.body=d.data) -else{const e=C.stringify(d.data) -e.length>0&&(-1!==d.url.indexOf("?")?d.url=`${d.url}&${e}`:d.url=`${d.url}?${e}`)}return d.headers[r.CONTENT_TYPE]="application/json; charset=utf-8",d.url=`${this.env.var("CONSUL_API_PREFIX")}${d.url}`,d}fetchWithToken(e,t){return this.settings.findBySlug("token").then((n=>fetch(`${this.env.var("CONSUL_API_PREFIX")}${e}`,S(S({},t),{},{credentials:"include",headers:S({"X-Consul-Token":void 0===n.SecretID?"":n.SecretID},t.headers)}))))}request(e){const t=this,n=this.cache -return e((function(e){for(var r=arguments.length,o=new Array(r>1?r-1:0),a=1;a{const r=S(S({},u),{},{headers:S({[i.HEADERS_TOKEN]:void 0===e.SecretID?"":e.SecretID},u.headers)}),o=t.transport.request(r) -return new Promise(((r,a)=>{const s=t._listeners.add(o,{open:e=>{t.acquire(e.target)},message:t=>{const o=S(S(S({},Object.entries(t.data.headers).reduce((function(e,t,n){let[l,r]=t -return M.includes(l)||(e[l]=r),e}),{})),u.clientHeaders),{},{[i.HEADERS_DATACENTER]:u.data.dc,[i.HEADERS_NAMESPACE]:u.data.ns||e.Namespace||"default",[i.HEADERS_PARTITION]:u.data.partition||e.Partition||"default"}),a=function(e){let l=e(o,t.data.response,n) -const r=l.meta||{} -return 2===r.version&&(Array.isArray(l.body)?l=new Proxy(l.body,{get:(e,t)=>"meta"===t?r:e[t]}):(l=l.body,l.meta=r)),l};(0,l.next)((()=>r(a)))},error:e=>{(0,l.next)((()=>a(e.error)))},close:e=>{t.release(e.target),s()}}) -o.fetch()}))}))}))}whenAvailable(e){return this.connections.whenAvailable(e)}abort(){return this.connections.purge(...arguments)}acquire(){return this.connections.acquire(...arguments)}release(){return this.connections.release(...arguments)}},y=_(b.prototype,"dom",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),g=_(b.prototype,"env",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),v=_(b.prototype,"connections",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),O=_(b.prototype,"transport",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),P=_(b.prototype,"settings",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),x=_(b.prototype,"encoder",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),w=_(b.prototype,"store",[h],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b) -e.default=D})),define("consul-ui/services/client/transports/xhr",["exports","@ember/service","consul-ui/utils/http/create-headers","consul-ui/utils/http/xhr","consul-ui/utils/http/request","consul-ui/utils/http/error"],(function(e,t,n,l,r,i){function o(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) -t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function a(e){for(var t=1;t(this.xhr(n),t),t}}e.default=c})),define("consul-ui/services/clipboard/local-storage",["exports","@ember/service","clipboard"],(function(e,t,n){var l,r,i -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class o extends n.default{constructor(e,t,n){super(e,t),this._cb=n}onClick(e){this._cb(this.text(e.delegateTarget||e.currentTarget)),this.emit("success",{})}}let a=(l=(0,t.inject)("-document"),r=class extends t.default{constructor(){var e,t,n,l,r,o,a -super(...arguments),e=this,t="doc",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0}),a="clipboard",(o="key")in(r=this)?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a}execute(e,t){return new o(e,t,(e=>{this.doc.defaultView.localStorage.setItem(this.key,e)}))}},u=r.prototype,s="doc",c=[l],d={configurable:!0,enumerable:!0,writable:!0,initializer:null},f={},Object.keys(d).forEach((function(e){f[e]=d[e]})),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=c.slice().reverse().reduce((function(e,t){return t(u,s,e)||e}),f),p&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(p):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(u,s,f),f=null),i=f,r) -var u,s,c,d,p,f -e.default=a})),define("consul-ui/services/clipboard/os",["exports","@ember/service","clipboard"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class l extends t.default{execute(){return new n.default(...arguments)}}e.default=l})),define("consul-ui/services/code-mirror",["exports","ivy-codemirror/services/code-mirror"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/services/code-mirror/linter",["exports","@ember/service","consul-ui/utils/editor/lint"],(function(e,t,n){var l,r,i -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const o=[{name:"JSON",mime:"application/json",mode:"javascript",ext:["json","map"],alias:["json5"]},{name:"HCL",mime:"text/x-ruby",mode:"ruby",ext:["rb"],alias:["jruby","macruby","rake","rb","rbx"]},{name:"YAML",mime:"text/x-yaml",mode:"yaml",ext:["yaml","yml"],alias:["yml"]},{name:"XML",mime:"application/xml",mode:"xml",htmlMode:!1,matchClosing:!0,alignCDATA:!1,ext:["xml"],alias:["xml"]}] -let a=(l=(0,t.inject)("dom"),r=class extends t.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="dom",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}modes(){return o}lint(){return(0,n.default)(...arguments)}getEditor(e){return this.dom.element("textarea + div",e).CodeMirror}},u=r.prototype,s="dom",c=[l],d={configurable:!0,enumerable:!0,writable:!0,initializer:null},f={},Object.keys(d).forEach((function(e){f[e]=d[e]})),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=c.slice().reverse().reduce((function(e,t){return t(u,s,e)||e}),f),p&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(p):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(u,s,f),f=null),i=f,r) -var u,s,c,d,p,f -e.default=a})),define("consul-ui/services/container",["exports","@ember/service"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{constructor(e){super(...arguments),this._owner=e,this._wm=new WeakMap}set(e,t){this._wm.set(t,e)}keyForClass(e){return this._wm.get(e)}get(e){return"string"!=typeof e&&(e=this.keyForClass(e)),this.lookup(e)}lookup(e){return this._owner.lookup(e)}resolveRegistration(e){return this._owner.resolveRegistration(e).prototype}}e.default=n})),define("consul-ui/services/data-sink/protocols/http",["exports","@ember/service","@ember/object"],(function(e,t,n){var l,r,i,o,a,u,s,c,d,p,f,m,h,b,y,g,v -function O(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function P(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let x=(l=(0,t.inject)("client/http"),r=(0,t.inject)("settings"),i=(0,t.inject)("repository/intention"),o=(0,t.inject)("repository/kv"),a=(0,t.inject)("repository/nspace"),u=(0,t.inject)("repository/partition"),s=(0,t.inject)("repository/peer"),c=(0,t.inject)("repository/session"),d=class extends t.default{constructor(){super(...arguments),O(this,"client",p,this),O(this,"settings",f,this),O(this,"intention",m,this),O(this,"kv",h,this),O(this,"nspace",b,this),O(this,"partition",y,this),O(this,"peer",g,this),O(this,"session",v,this)}prepare(e,t,l){return(0,n.setProperties)(l,t)}persist(e,t){const[,,,,n]=e.split("/"),l=this[n] -return this.client.request((e=>l.persist(t,e)))}remove(e,t){const[,,,,n]=e.split("/"),l=this[n] -return this.client.request((e=>l.remove(t,e)))}},p=P(d.prototype,"client",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f=P(d.prototype,"settings",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m=P(d.prototype,"intention",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=P(d.prototype,"kv",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=P(d.prototype,"nspace",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),y=P(d.prototype,"partition",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),g=P(d.prototype,"peer",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),v=P(d.prototype,"session",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),d) -e.default=x})),define("consul-ui/services/data-sink/protocols/local-storage",["exports","@ember/service","@ember/object"],(function(e,t,n){var l,r,i -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let o=(l=(0,t.inject)("settings"),r=class extends t.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="settings",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}prepare(e,t){let l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{} -return null===t||""===t?l:(0,n.setProperties)(l,t)}persist(e,t){const n=e.split(":").pop() -return this.settings.persist({[n]:t})}remove(e,t){const n=e.split(":").pop() -return this.settings.delete(n)}},a=r.prototype,u="settings",s=[l],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},p={},Object.keys(c).forEach((function(e){p[e]=c[e]})),p.enumerable=!!p.enumerable,p.configurable=!!p.configurable,("value"in p||p.initializer)&&(p.writable=!0),p=s.slice().reverse().reduce((function(e,t){return t(a,u,e)||e}),p),d&&void 0!==p.initializer&&(p.value=p.initializer?p.initializer.call(d):void 0,p.initializer=void 0),void 0===p.initializer&&(Object.defineProperty(a,u,p),p=null),i=p,r) -var a,u,s,c,d,p -e.default=o})),define("consul-ui/services/data-sink/service",["exports","@ember/service"],(function(e,t){var n,l,r,i,o -function a(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function u(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const s=function(e){return-1===(e=e.toString()).indexOf("://")&&(e=`consul://${e}`),e.split("://")} -let c=(n=(0,t.inject)("data-sink/protocols/http"),l=(0,t.inject)("data-sink/protocols/local-storage"),r=class extends t.default{constructor(){super(...arguments),a(this,"consul",i,this),a(this,"settings",o,this)}prepare(e,t,n){const[l,r]=s(e) -return this[l].prepare(r,t,n)}persist(e,t){const[n,l]=s(e) -return this[n].persist(l,t)}remove(e,t){const[n,l]=s(e) -return this[n].remove(l,t)}},i=u(r.prototype,"consul",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),o=u(r.prototype,"settings",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),r) -e.default=c})),define("consul-ui/services/data-source/protocols/http",["exports","@ember/service","@ember/application","consul-ui/decorators/data-source"],(function(e,t,n,l){var r,i,o,a,u -function s(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function c(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let d=(r=(0,t.inject)("client/http"),i=(0,t.inject)("data-source/protocols/http/blocking"),o=class extends t.default{constructor(){super(...arguments),s(this,"client",a,this),s(this,"type",u,this)}source(e,t){const r=(0,l.match)(e) -let i -return this.client.request((e=>{i=r.cb(r.params,(0,n.getOwner)(this),e)})),this.type.source(i,t)}},a=c(o.prototype,"client",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),u=c(o.prototype,"type",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),o) -e.default=d})),define("consul-ui/services/data-source/protocols/http/blocking",["exports","@ember/service","@ember/object","consul-ui/utils/dom/event-source","consul-ui/services/settings","consul-ui/services/client/http","consul-ui/utils/maybe-call"],(function(e,t,n,l,r,i,o){var a,u,s,c,d -function p(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function f(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let m=(a=(0,t.inject)("client/http"),u=(0,t.inject)("settings"),s=class extends t.default{constructor(){super(...arguments),p(this,"client",c,this),p(this,"settings",d,this)}source(e,t){return new l.BlockingEventSource(((t,l)=>{const a=l.close.bind(l) -return(0,o.default)((()=>t.cursor=void 0),(0,r.ifNotBlocking)(this.settings))().then((()=>e(t).then((0,o.default)(a,(0,r.ifNotBlocking)(this.settings))).then((function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{} -const t=(0,n.get)(e,"meta")||{} -return void 0===t.cursor&&void 0===t.interval&&a(),e})).catch((0,i.restartWhenAvailable)(this.client))))}),t)}},c=f(s.prototype,"client",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),d=f(s.prototype,"settings",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),s) -e.default=m})),define("consul-ui/services/data-source/protocols/http/promise",["exports","@ember/service","consul-ui/utils/dom/event-source"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class l extends t.default{source(e,t){return(0,n.once)(e,t)}}e.default=l})),define("consul-ui/services/data-source/protocols/local-storage",["exports","@ember/service","consul-ui/utils/dom/event-source"],(function(e,t,n){var l,r,i -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let o=(l=(0,t.inject)("settings"),r=class extends t.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="repo",l=this,(n=i)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}source(e,t){const l=e.split(":").pop() -return new n.StorageEventSource((e=>this.repo.findBySlug(l)),{key:e,uri:t.uri})}},a=r.prototype,u="repo",s=[l],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},p={},Object.keys(c).forEach((function(e){p[e]=c[e]})),p.enumerable=!!p.enumerable,p.configurable=!!p.configurable,("value"in p||p.initializer)&&(p.writable=!0),p=s.slice().reverse().reduce((function(e,t){return t(a,u,e)||e}),p),d&&void 0!==p.initializer&&(p.value=p.initializer?p.initializer.call(d):void 0,p.initializer=void 0),void 0===p.initializer&&(Object.defineProperty(a,u,p),p=null),i=p,r) -var a,u,s,c,d,p -e.default=o})),define("consul-ui/services/data-source/service",["exports","@ember/service","@ember/debug","consul-ui/utils/dom/event-source","@ember/runloop","mnemonist/multi-map"],(function(e,t,n,l,r,i){var o,a,u,s,c,d,p,f,m -function h(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function b(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let y=null,g=null,v=null -class O{constructor(e){this.uri=e}toString(){return this.uri}}let P=(o=(0,t.inject)("dom"),a=(0,t.inject)("encoder"),u=(0,t.inject)("data-source/protocols/http"),s=(0,t.inject)("data-source/protocols/local-storage"),c=class extends t.default{constructor(){super(...arguments),h(this,"dom",d,this),h(this,"encoder",p,this),h(this,"consul",f,this),h(this,"settings",m,this)}init(){super.init(...arguments),y=new Map,g=new Map,v=new i.default(Set),this._listeners=this.dom.listeners()}resetCache(){y=new Map}willDestroy(){(0,r.schedule)("afterRender",(()=>{this._listeners.remove(),g.forEach((function(e){e.close()})),y=null,g=null,v.clear(),v=null}))}source(e,t){const n=e(this.encoder.uriTag()) -return new Promise(((e,t)=>{const r={},i=this.open(n,r,!0) -i.configuration.ref=r -const o=this._listeners.add(i,{message:t=>{o(),e((0,l.proxy)(t.target,t.data))},error:e=>{o(),this.close(i,r),t(e.error)}}) -void 0!==i.getCurrentEvent()&&i.dispatchEvent(i.getCurrentEvent())}))}unwrap(e,t){const n=e._source -return v.set(n,t),v.remove(n,n.configuration.ref),delete n.configuration.ref,n}uri(e){return new O(e)}open(e,t){let l,r=arguments.length>2&&void 0!==arguments[2]&&arguments[2] -if(!(e instanceof O)&&"string"!=typeof e)return this.unwrap(e,t);(0,n.runInDebug)((t=>{e instanceof O||console.error(new Error(`DataSource '${e}' does not use the uri helper. Please ensure you use the uri helper to ensure correct encoding`))})),-1===(e=e.toString()).indexOf("://")&&(e=`consul://${e}`) -let[i,o]=e.split("://") -const a=this[i] -if(g.has(e))l=g.get(e),g.delete(e),g.set(e,l) -else{let t={} -y.has(e)&&(t=y.get(e)),t.uri=e,l=a.source(o,t) -const n=this._listeners.add(l,{close:t=>{const l=t.target,r=l.getCurrentEvent(),i=l.configuration.cursor -void 0!==r&&void 0!==i&&t.errors&&"401"!==t.errors[0].status&&y.set(e,{currentEvent:r,cursor:i}),v.has(l)||g.delete(e),n()}}) -g.set(e,l)}return(!v.has(l)||l.readyState>1||r)&&l.open(),v.set(l,t),l}close(e,t){e&&(v.remove(e,t),v.has(e)||(e.close(),2===e.readyState&&g.delete(e.configuration.uri)))}closed(){return[...g.entries()].filter((e=>{let[t,n]=e -return n.readyState>1})).map((e=>e[0]))}},d=b(c.prototype,"dom",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p=b(c.prototype,"encoder",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f=b(c.prototype,"consul",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m=b(c.prototype,"settings",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),c) -e.default=P})),define("consul-ui/services/data-structs",["exports","@ember/service","ngraph.graph"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class l extends t.default{graph(){return(0,n.default)()}}e.default=l})),define("consul-ui/services/dom",["exports","@ember/service","@ember/object/internals","consul-ui/utils/dom/qsa-factory","consul-ui/utils/dom/sibling","consul-ui/utils/dom/closest","consul-ui/utils/dom/is-outside","consul-ui/utils/dom/get-component-factory","consul-ui/utils/dom/normalize-event","consul-ui/utils/dom/create-listeners","consul-ui/utils/dom/click-first-anchor"],(function(e,t,n,l,r,i,o,a,u,s,c){var d,p,f -function m(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const h=(0,l.default)() -let b,y -const g=(0,c.default)(i.default) -let v=(d=(0,t.inject)("-document"),p=class extends t.default{constructor(e){var t,n,l,c -super(...arguments),t=this,n="doc",c=this,(l=f)&&Object.defineProperty(t,n,{enumerable:l.enumerable,configurable:l.configurable,writable:l.writable,value:l.initializer?l.initializer.call(c):void 0}),m(this,"clickFirstAnchor",g),m(this,"closest",i.default),m(this,"sibling",r.default),m(this,"isOutside",o.default),m(this,"normalizeEvent",u.default),m(this,"listeners",s.default),y=new WeakMap,b=(0,a.default)(e)}willDestroy(){super.willDestroy(...arguments),y=null,b=null}document(){return this.doc}viewport(){return this.doc.defaultView}guid(e){return(0,n.guidFor)(e)}focus(e){if("string"==typeof e&&(e=this.element(e)),void 0!==e){let t=e.getAttribute("tabindex") -e.setAttribute("tabindex","0"),e.focus(),null===t?e.removeAttribute("tabindex"):e.setAttribute("tabindex",t)}}setEventTargetProperty(e,t,n){const l=e.target -return new Proxy(e,{get:function(r,i,o){return"target"===i?new Proxy(l,{get:function(r,i,o){return i===t?n(e.target[t]):l[i]}}):Reflect.get(...arguments)}})}setEventTargetProperties(e,t){const n=e.target -return new Proxy(e,{get:function(l,r,i){return"target"===r?new Proxy(n,{get:function(l,r,i){return void 0!==t[r]?t[r](e.target):n[r]}}):Reflect.get(...arguments)}})}root(){return this.doc.documentElement}elementById(e){return this.doc.getElementById(e)}elementsByTagName(e,t){return(t=void 0===t?this.doc:t).getElementsByTagName(e)}elements(e,t){return h(e,t)}element(e,t){return"#"===e.substr(0,1)?this.elementById(e.substr(1)):[...h(e,t)][0]}component(e,t){return b("string"!=typeof e?e:this.element(e,t))}components(e,t){return[...this.elements(e,t)].map((function(e){return b(e)})).filter((function(e){return null!=e}))}isInViewport(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0 -y.set(e,t) -let l=new IntersectionObserver(((e,t)=>{e.map((e=>{const t=y.get(e.target) -"function"==typeof t&&t(e.isIntersecting)}))}),{rootMargin:"0px",threshold:n}) -return l.observe(e),()=>{l.unobserve(e),y&&y.delete(e),l.disconnect(),l=null}}},O=p.prototype,P="doc",x=[d],w={configurable:!0,enumerable:!0,writable:!0,initializer:null},_={},Object.keys(w).forEach((function(e){_[e]=w[e]})),_.enumerable=!!_.enumerable,_.configurable=!!_.configurable,("value"in _||_.initializer)&&(_.writable=!0),_=x.slice().reverse().reduce((function(e,t){return t(O,P,e)||e}),_),j&&void 0!==_.initializer&&(_.value=_.initializer?_.initializer.call(j):void 0,_.initializer=void 0),void 0===_.initializer&&(Object.defineProperty(O,P,_),_=null),f=_,p) -var O,P,x,w,j,_ -e.default=v})) -define("consul-ui/services/encoder",["exports","@ember/service","@ember/object","@ember/debug","consul-ui/utils/atob","consul-ui/utils/btoa"],(function(e,t,n,l,r,i){function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class a extends t.default{constructor(){super(...arguments),o(this,"uriComponent",encodeURIComponent),o(this,"joiner",(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"" -return(l,r)=>(r||Array(l.length).fill(t)).reduce(((t,r,i)=>`${t}${r}${e(l[i]||n)}`),"")}))}createRegExpEncoder(e,t){return function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e=>e,r=!(arguments.length>2&&void 0!==arguments[2])||arguments[2] -return function(){let i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} -return""!==i?i.replace(e,((e,a)=>{const u=(0,n.get)(o,a) -return(0,l.runInDebug)((()=>{r&&void 0===u&&console.error(new Error(`${a} is undefined in ${i}`))})),t(u||"")})):""}}(e,t)}atob(){return(0,r.default)(...arguments)}btoa(){return(0,i.default)(...arguments)}uriJoin(){return this.joiner(this.uriComponent,"/","")(...arguments)}uriTag(){return this.tag(this.uriJoin.bind(this))}tag(e){return function(t){for(var n=arguments.length,l=new Array(n>1?n-1:0),r=1;rthis.success(n,e,void 0,t),error:n=>this.error(n,e,void 0,t)}}success(e,t){let l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:m,r=arguments.length>3?arguments[3]:void 0 -const i=(0,n.default)(t),o=(0,n.default)(l) -!1!==e&&(this.notify.clearMessages(),this.notify.add(s(s({},{timeout:6e3,extendedTimeout:300,destroyOnClick:!0}),{},{type:o(f),action:i(),item:e,model:r})))}error(e,t){let l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:m,r=arguments.length>3?arguments[3]:void 0 -const i=(0,n.default)(t),o=(0,n.default)(l) -this.notify.clearMessages(),this.logger.execute(e),"TransitionAborted"===e.name?this.notify.add(s(s({},{timeout:6e3,extendedTimeout:300,destroyOnClick:!0}),{},{type:o(f),action:i(),model:r})):this.notify.add(s(s({},{timeout:6e3,extendedTimeout:300,destroyOnClick:!0}),{},{type:o("error",e),action:i(),error:e,model:r}))}async execute(e,t,n,l){let r -try{r=await e(),this.success(r,t,n,l)}catch(i){this.error(i,t,n,l)}}},o=p(i.prototype,"notify",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),a=p(i.prototype,"logger",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),i) -e.default=h})),define("consul-ui/services/filter",["exports","@ember/service","consul-ui/utils/filter","consul-ui/filter/predicates/service","consul-ui/filter/predicates/service-instance","consul-ui/filter/predicates/health-check","consul-ui/filter/predicates/node","consul-ui/filter/predicates/kv","consul-ui/filter/predicates/intention","consul-ui/filter/predicates/token","consul-ui/filter/predicates/policy","consul-ui/filter/predicates/auth-method","consul-ui/filter/predicates/peer"],(function(e,t,n,l,r,i,o,a,u,s,c,d,p){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const f={service:(0,n.andOr)(l.default),"service-instance":(0,n.andOr)(r.default),"health-check":(0,n.andOr)(i.default),"auth-method":(0,n.andOr)(d.default),node:(0,n.andOr)(o.default),kv:(0,n.andOr)(a.default),intention:(0,n.andOr)(u.default),token:(0,n.andOr)(s.default),policy:(0,n.andOr)(c.default),peer:(0,n.andOr)(p.default)} -class m extends t.default{predicate(e){return f[e]}}e.default=m})),define("consul-ui/services/flash-messages",["exports","ember-cli-flash/services/flash-messages"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/services/form",["exports","@ember/service","consul-ui/utils/form/builder","consul-ui/forms/kv","consul-ui/forms/token","consul-ui/forms/policy","consul-ui/forms/role","consul-ui/forms/intention"],(function(e,t,n,l,r,i,o,a){var u,s,c,d,p -function f(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function m(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const h=(0,n.default)(),b={kv:l.default,token:r.default,policy:i.default,role:o.default,intention:a.default} -let y=(u=(0,t.inject)("repository/role"),s=(0,t.inject)("repository/policy"),c=class extends t.default{constructor(){var e,t,n -super(...arguments),f(this,"role",d,this),f(this,"policy",p,this),n=[],(t="forms")in(e=this)?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n}build(e,t){return h(...arguments)}form(e){let t=this.forms[e] -if(void 0===t&&(t=this.forms[e]=b[e](this),"role"===e||"policy"===e)){const n=this[e] -t.clear((function(e){return n.create(e)})),t.submit((function(e){return n.persist(e)}))}return t}},d=m(c.prototype,"role",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p=m(c.prototype,"policy",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),c) -e.default=y})),define("consul-ui/services/hcp",["exports","@ember/service","@ember/debug"],(function(e,t,n){var l,r,i,o,a,u,s -function c(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function d(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let p=(l=(0,t.inject)("env"),r=(0,t.inject)("repository/token"),i=(0,t.inject)("settings"),o=class extends t.default{constructor(){super(...arguments),c(this,"env",a,this),c(this,"tokenRepo",u,this),c(this,"settings",s,this)}async updateTokenIfNecessary(e){if(e){const l=await this.settings.findBySlug("token") -if(e&&e!==l.SecretID)try{const t=await this.tokenRepo.self({secret:e,dc:this.env.var("CONSUL_DATACENTER_LOCAL")}) -await this.settings.persist({token:{AccessorID:t.AccessorID,SecretID:t.SecretID,Namespace:t.Namespace,Partition:t.Partition}})}catch(t){(0,n.runInDebug)((e=>console.error(t)))}}}},a=d(o.prototype,"env",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),u=d(o.prototype,"tokenRepo",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),s=d(o.prototype,"settings",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),o) -e.default=p})),define("consul-ui/services/i18n",["exports","ember-intl/services/intl","@ember/service"],(function(e,t,n){var l,r,i -function o(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) -t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function a(e){for(var t=1;t(e[t]=this.env.var(t),e)),{}) -return a(a({},e),t)}},d=r.prototype,p="env",f=[l],m={configurable:!0,enumerable:!0,writable:!0,initializer:null},b={},Object.keys(m).forEach((function(e){b[e]=m[e]})),b.enumerable=!!b.enumerable,b.configurable=!!b.configurable,("value"in b||b.initializer)&&(b.writable=!0),b=f.slice().reverse().reduce((function(e,t){return t(d,p,e)||e}),b),h&&void 0!==b.initializer&&(b.value=b.initializer?b.initializer.call(h):void 0,b.initializer=void 0),void 0===b.initializer&&(Object.defineProperty(d,p,b),b=null),i=b,r) -var d,p,f,m,h,b -e.default=c})),define("consul-ui/services/in-viewport",["exports","ember-in-viewport/services/in-viewport"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/services/intl",["exports","ember-intl/services/intl"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/services/keyboard",["exports","ember-keyboard/services/keyboard.js"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/services/local-storage",["exports","@ember/service","@ember/application","consul-ui/config/environment"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.storageFor=function(e){return function(){return{get(){return(0,n.getOwner)(this).lookup("service:localStorage").getBucket(e)}}}},e.default=void 0 -class r{constructor(){this.data=new Map}getItem(e){return this.data.get(e)}setItem(e,t){return this.data.set(e,t.toString())}seed(e){const t=new Map -Object.keys(e).forEach((n=>{t.set(n,e[n].toString())})),this.data=t}}class i extends t.default{constructor(){super(...arguments),this.storage="test"===l.default.environment?new r:window.localStorage,this.buckets=new Map}getBucket(e){const t=this.buckets.get(e) -return t||this._setupBucket(e)}_setupBucket(e){const t=new(0,(0,n.getOwner)(this).factoryFor(`storage:${e}`).class)(e,this.storage) -return this.buckets.set(e,t),t}}e.default=i})),define("consul-ui/services/logger",["exports","@ember/service","@ember/debug"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class l extends t.default{execute(e){(0,n.runInDebug)((()=>{(e=void 0!==e.error?e.error:e)instanceof Error?console.error(e):console.log(e)}))}}e.default=l})),define("consul-ui/services/page-title-list",["exports","ember-page-title/services/page-title-list"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/services/page-title",["exports","ember-page-title/services/page-title"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/services/popup",["exports","torii/services/popup"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/services/repository",["exports","@ember/service","@ember/debug","@ember/utils","@ember/object","validated-changeset","consul-ui/utils/http/error","consul-ui/abilities/base"],(function(e,t,n,l,r,i,o,a){var u,s,c,d,p,f,m -function h(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function b(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.softDelete=void 0 -e.softDelete=(e,t)=>e.store.adapterFor(e.getModelName()).rpc(((e,t,n,l)=>e.requestForDeleteRecord(t,n,l)),((e,n,l,r)=>t),t,e.getModelName()) -let y=(u=(0,t.inject)("store"),s=(0,t.inject)("env"),c=(0,t.inject)("repository/permission"),d=class extends t.default{constructor(){super(...arguments),h(this,"store",p,this),h(this,"env",f,this),h(this,"permissions",m,this)}getModelName(){}getPrimaryKey(){}getSlugKey(){}async authorizeBySlug(e,t,n){return n.resources=await this.permissions.findBySlug(n,this.getModelName()),this.validatePermissions(e,t,n)}async authorizeByPermissions(e,t,n){return n.resources=await this.permissions.authorize(n),this.validatePermissions(e,t,n)}async validatePermissions(e,t,n){if(n.resources.length>0){const e=n.resources.find((e=>e.Access===t)) -if(e&&!1===e.Allow){const e=new o.default(403) -throw e.errors=[{status:"403"}],e}}const l=await e(n.resources) -return(0,r.get)(l,"Resources")&&(0,r.set)(l,"Resources",n.resources),l}shouldReconcile(e,t){if((0,r.get)(e,"Datacenter")!==t.dc)return!1 -if(this.env.var("CONSUL_NSPACES_ENABLED")){const n=(0,r.get)(e,"Namespace") -if(void 0!==n&&n!==t.ns)return!1}if(this.env.var("CONSUL_PARTITIONS_ENABLED")){const n=(0,r.get)(e,"Partition") -if(void 0!==n&&n!==t.partition)return!1}return!0}reconcile(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} -void 0!==e.date&&this.store.peekAll(this.getModelName()).forEach((n=>{const l=(0,r.get)(n,"SyncTime") -!n.isDeleted&&void 0!==l&&l!=e.date&&this.shouldReconcile(n,t)&&this.store.unloadRecord(n)}))}peekOne(e){return this.store.peekRecord(this.getModelName(),e)}peekAll(){return this.store.peekAll(this.getModelName())}cached(e){const t=Object.entries(e) -return this.store.peekAll(this.getModelName()).filter((e=>t.every((t=>{let[n,l]=t -return e[n]===l}))))}async findAllByDatacenter(e){return this.findAll(...arguments)}async findAll(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} -return void 0!==t.cursor&&(e.index=t.cursor,e.uri=t.uri),this.query(e)}async query(){let e,t,n,l=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} -try{n=await this.store.query(this.getModelName(),l),t=n.meta}catch(o){switch((0,r.get)(o,"errors.firstObject.status")){case"404":case"403":t={date:Number.POSITIVE_INFINITY},e=o -break -default:throw o}}if(void 0!==t&&this.reconcile(t,l,i),void 0!==e)throw e -return n}async findBySlug(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} -return""===e.id?this.create({Datacenter:e.dc,Namespace:e.ns,Partition:e.partition}):(void 0!==t.cursor&&(e.index=t.cursor,e.uri=t.uri),this.authorizeBySlug((()=>this.store.queryRecord(this.getModelName(),e)),a.ACCESS_READ,e))}create(e){return this.store.createRecord(this.getModelName(),e)}persist(e){return(0,i.isChangeset)(e)&&(e.execute(),e=e.data),(0,r.set)(e,"SyncTime",void 0),e.save()}remove(e){let t=e -return void 0===e.destroyRecord&&(t=e.get("data")),"object"===(0,l.typeOf)(t)&&(t=this.store.peekRecord(this.getModelName(),t[this.getPrimaryKey()])),t.destroyRecord().then((e=>this.store.unloadRecord(e)))}invalidate(){this.store.unloadAll(this.getModelName())}},p=b(d.prototype,"store",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f=b(d.prototype,"env",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m=b(d.prototype,"permissions",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),d) -e.default=y})),define("consul-ui/services/repository/auth-method",["exports","consul-ui/services/repository","consul-ui/models/auth-method","consul-ui/decorators/data-source"],(function(e,t,n,l){var r,i,o -function a(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let u=(r=(0,l.default)("/:partition/:ns/:dc/auth-methods"),i=(0,l.default)("/:partition/:ns/:dc/auth-method/:id"),o=class extends t.default{getModelName(){return"auth-method"}getPrimaryKey(){return n.PRIMARY_KEY}getSlugKey(){return n.SLUG_KEY}async findAllByDatacenter(){return super.findAllByDatacenter(...arguments)}async findBySlug(){return super.findBySlug(...arguments)}},a(o.prototype,"findAllByDatacenter",[r],Object.getOwnPropertyDescriptor(o.prototype,"findAllByDatacenter"),o.prototype),a(o.prototype,"findBySlug",[i],Object.getOwnPropertyDescriptor(o.prototype,"findBySlug"),o.prototype),o) -e.default=u})),define("consul-ui/services/repository/binding-rule",["exports","consul-ui/services/repository","consul-ui/models/binding-rule","consul-ui/decorators/data-source"],(function(e,t,n,l){var r,i -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let o=(r=(0,l.default)("/:partition/:ns/:dc/binding-rules/for-auth-method/:authmethod"),i=class extends t.default{getModelName(){return"binding-rule"}getPrimaryKey(){return n.PRIMARY_KEY}getSlugKey(){return n.SLUG_KEY}async findAllByAuthMethod(){return super.findAll(...arguments)}},a=i.prototype,u="findAllByAuthMethod",s=[r],c=Object.getOwnPropertyDescriptor(i.prototype,"findAllByAuthMethod"),d=i.prototype,p={},Object.keys(c).forEach((function(e){p[e]=c[e]})),p.enumerable=!!p.enumerable,p.configurable=!!p.configurable,("value"in p||p.initializer)&&(p.writable=!0),p=s.slice().reverse().reduce((function(e,t){return t(a,u,e)||e}),p),d&&void 0!==p.initializer&&(p.value=p.initializer?p.initializer.call(d):void 0,p.initializer=void 0),void 0===p.initializer&&(Object.defineProperty(a,u,p),p=null),i) -var a,u,s,c,d,p -e.default=o})),define("consul-ui/services/repository/coordinate",["exports","consul-ui/services/repository","consul-ui/decorators/data-source","consul-ui/utils/tomography","consul-ui/utils/distance"],(function(e,t,n,l,r){var i,o,a -function u(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const s=(0,l.default)(r.default) -let c=(i=(0,n.default)("/:partition/:ns/:dc/coordinates"),o=(0,n.default)("/:partition/:ns/:dc/coordinates/for-node/:id"),a=class extends t.default{getModelName(){return"coordinate"}async findAllByDatacenter(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} -return void 0!==t.cursor&&(e.index=t.cursor,e.uri=t.uri),this.store.query(this.getModelName(),e)}async findAllByNode(e,t){const n=await this.findAllByDatacenter(e,t) -let l={} -return n.length>1&&(l=s(e.id,n)),l.meta=n.meta,l}},u(a.prototype,"findAllByDatacenter",[i],Object.getOwnPropertyDescriptor(a.prototype,"findAllByDatacenter"),a.prototype),u(a.prototype,"findAllByNode",[o],Object.getOwnPropertyDescriptor(a.prototype,"findAllByNode"),a.prototype),a) -e.default=c})),define("consul-ui/services/repository/dc",["exports","@ember/error","@ember/service","consul-ui/services/repository","consul-ui/decorators/data-source","consul-ui/utils/http/consul"],(function(e,t,n,l,r,i){var o,a,u,s,c,d,p -function f(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}function m(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) -t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function h(e){for(var t=1;t{const l=Object.entries(e).find((e=>{let[t,n]=e -return t.toLowerCase()===i.HEADERS_DEFAULT_ACL_POLICY.toLowerCase()}))[1]||"allow" -return{meta:{version:2,uri:a},body:t.map((e=>n({Name:e,Datacenter:"",Local:e===u,Primary:e===s,DefaultACLPolicy:l},(t=>t`${y}:///${""}/${""}/${e}/datacenter`))))}}))}async fetch(e,t,n){let{partition:l,ns:r,dc:i}=e,{uri:o}=t -return(await(n` - GET /v1/operator/autopilot/state?${{dc:i}} - X-Request-ID: ${o} - `))(((e,t,n)=>{const l=Object.values(t.Servers),r=[] -return{meta:{version:2,uri:o},body:n(h(h({},t),{},{Servers:l,RedundancyZones:Object.entries(t.RedundancyZones||{}).map((e=>{let[n,l]=e -return h(h({},l),{},{Name:n,Healthy:!0,Servers:l.Servers.reduce(((e,n)=>{const l=t.Servers[n] -return r.push(l.ID),e.push(l),e}),[])})})),ReadReplicas:(t.ReadReplicas||[]).map((e=>(r.push(e),t.Servers[e]))),Default:{Servers:l.filter((e=>!r.includes(e.ID)))}}),(e=>e`${y}:///${""}/${""}/${i}/datacenter`))}}))}async fetchCatalogHealth(e,t,n){let{partition:l,ns:r,dc:i}=e,{uri:o}=t -return(await(n` - GET /v1/internal/ui/catalog-overview?${{dc:i,stale:null}} - X-Request-ID: ${o} - `))(((e,t,n)=>{const l=["Nodes","Services","Checks"].reduce(((e,n)=>((e,t,n)=>t[n].reduce(((e,t)=>(["Partition","Namespace"].forEach((l=>{let r=e[l][t[l]] -void 0===r&&(r=e[l][t[l]]={Name:t[l]}),void 0===r[n]&&(r[n]=h({},g)),r[n].Total+=t.Total,r[n].Passing+=t.Passing,r[n].Warning+=t.Warning,r[n].Critical+=t.Critical})),e.Datacenter[n].Total+=t.Total,e.Datacenter[n].Passing+=t.Passing,e.Datacenter[n].Warning+=t.Warning,e.Datacenter[n].Critical+=t.Critical,e)),e))(e,t,n)),{Datacenter:{Name:i,Nodes:h({},g),Services:h({},g),Checks:h({},g)},Partition:{},Namespace:{}}) -return{meta:{version:2,uri:o,interval:3e4},body:h({Datacenter:l.Datacenter,Partitions:Object.values(l.Partition),Namespaces:Object.values(l.Namespace)},t)}}))}async find(e){const n=this.store.peekAll("dc").findBy("Name",e.name) -if(void 0===n){const e=new t.default("Page not found") -throw e.status="404",{errors:[e]}}return n}},p=f(d.prototype,"env",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f(d.prototype,"fetchAll",[a],Object.getOwnPropertyDescriptor(d.prototype,"fetchAll"),d.prototype),f(d.prototype,"fetch",[u],Object.getOwnPropertyDescriptor(d.prototype,"fetch"),d.prototype),f(d.prototype,"fetchCatalogHealth",[s],Object.getOwnPropertyDescriptor(d.prototype,"fetchCatalogHealth"),d.prototype),f(d.prototype,"find",[c],Object.getOwnPropertyDescriptor(d.prototype,"find"),d.prototype),d) -e.default=v})),define("consul-ui/services/repository/discovery-chain",["exports","@ember/service","@ember/object","consul-ui/services/repository","consul-ui/decorators/data-source"],(function(e,t,n,l,r){var i,o,a,u -function s(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let c=(i=(0,t.inject)("repository/dc"),o=(0,r.default)("/:partition/:ns/:dc/discovery-chain/:id"),a=class extends l.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="dcs",l=this,(n=u)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}getModelName(){return"discovery-chain"}findBySlug(e){const t=this.dcs.peekAll().findBy("Name",e.dc) -return void 0===t||(0,n.get)(t,"MeshEnabled")?super.findBySlug(...arguments).catch((e=>{const l=(0,n.get)(e,"errors.firstObject.status"),r=((0,n.get)(e,"errors.firstObject.detail")||"").trim() -if("500"!==l)throw e -void 0!==t&&r.endsWith("Connect must be enabled in order to use this endpoint")&&(0,n.set)(t,"MeshEnabled",!1)})):Promise.resolve()}},u=s(a.prototype,"dcs",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),s(a.prototype,"findBySlug",[o],Object.getOwnPropertyDescriptor(a.prototype,"findBySlug"),a.prototype),a) -e.default=c})),define("consul-ui/services/repository/intention-permission-http-header",["exports","consul-ui/services/repository"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{getModelName(){return"intention-permission-http-header"}create(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{} -return this.store.createFragment(this.getModelName(),e)}persist(e){return e.execute()}}e.default=n})),define("consul-ui/services/repository/intention-permission",["exports","consul-ui/services/repository"],(function(e,t){function n(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) -t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function l(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:{} -return this.store.createFragment(this.getModelName(),l(l({},e),{},{HTTP:this.store.createFragment("intention-permission-http",e.HTTP||{})}))}persist(e){return e.execute()}}e.default=i})),define("consul-ui/services/repository/intention",["exports","@ember/object","@ember/service","consul-ui/services/repository","consul-ui/models/intention","consul-ui/decorators/data-source"],(function(e,t,n,l,r,i){var o,a,u,s,c,d -function p(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) -t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function f(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function m(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let h=(o=(0,n.inject)("env"),a=(0,i.default)("/:partition/:ns/:dc/intentions"),u=(0,i.default)("/:partition/:ns/:dc/intention/:id"),s=(0,i.default)("/:partition/:ns/:dc/intentions/for-service/:id"),c=class extends l.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="env",l=this,(n=d)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0}),f(this,"managedByCRDs",!1)}getModelName(){return"intention"}getPrimaryKey(){return r.PRIMARY_KEY}create(e){return delete e.Namespace,super.create(function(e){for(var t=1;te.IsManagedByCRD))),this.managedByCRDs}async authorizeBySlug(e,t,n){const[,l,,r]=n.id.split(":"),i=this.permissions.abilityFor(this.getModelName()) -return n.resources=i.generateForSegment(l).concat(i.generateForSegment(r)),this.authorizeByPermissions(e,t,n)}async persist(e){const n=await super.persist(...arguments) -return(0,t.get)(n,"Action.length")&&(0,t.set)(n,"Permissions",[]),n}async findAll(){return super.findAll(...arguments)}async findBySlug(e){let t -if(""===e.id){const n=this.env.var("CONSUL_NSPACES_ENABLED")?"*":"default",l="default" -t=await this.create({SourceNS:e.nspace||n,DestinationNS:e.nspace||n,SourcePartition:e.partition||l,DestinationPartition:e.partition||l,Datacenter:e.dc,Partition:e.partition})}else t=super.findBySlug(...arguments) -return t}async findByService(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} -const n={dc:e.dc,nspace:e.nspace,filter:`SourceName == "${e.id}" or DestinationName == "${e.id}" or SourceName == "*" or DestinationName == "*"`} -return void 0!==t.cursor&&(n.index=t.cursor,n.uri=t.uri),this.store.query(this.getModelName(),n)}},d=m(c.prototype,"env",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m(c.prototype,"findAll",[a],Object.getOwnPropertyDescriptor(c.prototype,"findAll"),c.prototype),m(c.prototype,"findBySlug",[u],Object.getOwnPropertyDescriptor(c.prototype,"findBySlug"),c.prototype),m(c.prototype,"findByService",[s],Object.getOwnPropertyDescriptor(c.prototype,"findByService"),c.prototype),c) -e.default=h})),define("consul-ui/services/repository/kv",["exports","consul-ui/services/repository","consul-ui/utils/isFolder","@ember/object","consul-ui/models/kv","consul-ui/decorators/data-source"],(function(e,t,n,l,r,i){var o,a,u -function s(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let c=(o=(0,i.default)("/:partition/:ns/:dc/kv/:id"),a=(0,i.default)("/:partition/:ns/:dc/kvs/:id"),u=class extends t.default{getModelName(){return"kv"}getPrimaryKey(){return r.PRIMARY_KEY}shouldReconcile(e,t){return super.shouldReconcile(...arguments)&&e.Key.startsWith(t.id)}async findBySlug(e){let t -if((0,n.default)(e.id)){const n=JSON.stringify([e.partition,e.ns,e.dc,e.id]) -t=this.store.peekRecord(this.getModelName(),n),t||(t=await this.create({Key:e.id,Datacenter:e.dc,Namespace:e.ns,Partition:e.partition}))}else t=""===e.id?await this.create({Datacenter:e.dc,Namespace:e.ns,Partition:e.partition}):await super.findBySlug(...arguments) -return t}async findAllBySlug(e){e.separator="/","/"===e.id&&(e.id="") -let t=await this.findAll(...arguments) -const n=t.meta -return t=t.filter((t=>e.id!==(0,l.get)(t,"Key"))),t.meta=n,t}},s(u.prototype,"findBySlug",[o],Object.getOwnPropertyDescriptor(u.prototype,"findBySlug"),u.prototype),s(u.prototype,"findAllBySlug",[a],Object.getOwnPropertyDescriptor(u.prototype,"findAllBySlug"),u.prototype),u) -e.default=c})),define("consul-ui/services/repository/license",["exports","consul-ui/services/repository","consul-ui/decorators/data-source"],(function(e,t,n){var l,r -function i(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) -t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function o(e){for(var t=1;t({meta:{version:2,uri:o,interval:3e4},body:n(u(t,{dc:i}),(e=>e`${"license"}:///${l}/${r}/${i}/license/${t.License.license_id}`))})))}},c=r.prototype,d="find",p=[l],f=Object.getOwnPropertyDescriptor(r.prototype,"find"),m=r.prototype,h={},Object.keys(f).forEach((function(e){h[e]=f[e]})),h.enumerable=!!h.enumerable,h.configurable=!!h.configurable,("value"in h||h.initializer)&&(h.writable=!0),h=p.slice().reverse().reduce((function(e,t){return t(c,d,e)||e}),h),m&&void 0!==h.initializer&&(h.value=h.initializer?h.initializer.call(m):void 0,h.initializer=void 0),void 0===h.initializer&&(Object.defineProperty(c,d,h),h=null),r) -var c,d,p,f,m,h -e.default=s})),define("consul-ui/services/repository/metrics",["exports","@ember/service","consul-ui/services/repository","consul-ui/decorators/data-source"],(function(e,t,n,l){var r,i,o,a,u,s,c,d,p,f -function m(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function h(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let b=(r=(0,t.inject)("ui-config"),i=(0,t.inject)("env"),o=(0,t.inject)("client/http"),a=(0,l.default)("/:partition/:ns/:dc/metrics/summary-for-service/:slug/:protocol"),u=(0,l.default)("/:partition/:ns/:dc/metrics/upstream-summary-for-service/:slug/:protocol"),s=(0,l.default)("/:partition/:ns/:dc/metrics/downstream-summary-for-service/:slug/:protocol"),c=class extends n.default{constructor(){var e,t,n -super(...arguments),m(this,"config",d,this),m(this,"env",p,this),m(this,"client",f,this),n=null,(t="error")in(e=this)?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n}getModelName(){return"metrics"}init(){super.init(...arguments) -const e=this.config.getSync(),t=e.metrics_provider_options||{} -t.metrics_proxy_enabled=e.metrics_proxy_enabled -const n=e.metrics_provider||"prometheus" -t.fetch=(e,t)=>this.client.fetchWithToken(`/v1/internal/ui/metrics-proxy${e}`,t) -try{this.provider=window.consul.getMetricsProvider(n,t)}catch(l){this.error=new Error(`metrics provider not initialized: ${l}`),console.error(this.error)}}findServiceSummary(e){if(this.error)return Promise.reject(this.error) -const t=[this.provider.serviceRecentSummarySeries(e.slug,e.dc,e.ns,e.protocol,{}),this.provider.serviceRecentSummaryStats(e.slug,e.dc,e.ns,e.protocol,{})] -return Promise.all(t).then((e=>({meta:{interval:this.env.var("CONSUL_METRICS_POLL_INTERVAL")||1e4},series:e[0],stats:e[1].stats})))}findUpstreamSummary(e){return this.error?Promise.reject(this.error):this.provider.upstreamRecentSummaryStats(e.slug,e.dc,e.ns,{}).then((e=>(e.meta={interval:this.env.var("CONSUL_METRICS_POLL_INTERVAL")||1e4},e)))}findDownstreamSummary(e){return this.error?Promise.reject(this.error):this.provider.downstreamRecentSummaryStats(e.slug,e.dc,e.ns,{}).then((e=>(e.meta={interval:this.env.var("CONSUL_METRICS_POLL_INTERVAL")||1e4},e)))}},d=h(c.prototype,"config",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p=h(c.prototype,"env",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f=h(c.prototype,"client",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h(c.prototype,"findServiceSummary",[a],Object.getOwnPropertyDescriptor(c.prototype,"findServiceSummary"),c.prototype),h(c.prototype,"findUpstreamSummary",[u],Object.getOwnPropertyDescriptor(c.prototype,"findUpstreamSummary"),c.prototype),h(c.prototype,"findDownstreamSummary",[s],Object.getOwnPropertyDescriptor(c.prototype,"findDownstreamSummary"),c.prototype),c) -e.default=b})),define("consul-ui/services/repository/node",["exports","consul-ui/services/repository","consul-ui/decorators/data-source"],(function(e,t,n){var l,r,i,o -function a(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let u=(l=(0,n.default)("/:partition/:ns/:dc/nodes"),r=(0,n.default)("/:partition/:ns/:dc/node/:id/:peer"),i=(0,n.default)("/:partition/:ns/:dc/leader"),o=class extends t.default{getModelName(){return"node"}async findAllByDatacenter(){return super.findAllByDatacenter(...arguments)}async findBySlug(){return super.findBySlug(...arguments)}findLeader(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} -return void 0!==t.refresh&&(e.uri=t.uri),this.store.queryLeader(this.getModelName(),e)}},a(o.prototype,"findAllByDatacenter",[l],Object.getOwnPropertyDescriptor(o.prototype,"findAllByDatacenter"),o.prototype),a(o.prototype,"findBySlug",[r],Object.getOwnPropertyDescriptor(o.prototype,"findBySlug"),o.prototype),a(o.prototype,"findLeader",[i],Object.getOwnPropertyDescriptor(o.prototype,"findLeader"),o.prototype),o) -e.default=u})),define("consul-ui/services/repository/nspace",["exports","@ember/service","@ember/debug","consul-ui/services/repository","consul-ui/models/nspace","consul-ui/decorators/data-source","consul-ui/utils/form/builder"],(function(e,t,n,l,r,i,o){var a,u,s,c,d,p,f,m,h,b,y,g,v,O,P -function x(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function w(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let j=(a=(0,t.inject)("router"),u=(0,t.inject)("container"),s=(0,t.inject)("env"),c=(0,t.inject)("form"),d=(0,t.inject)("settings"),p=(0,t.inject)("repository/permission"),f=(0,i.default)("/:partition/:ns/:dc/namespaces"),m=(0,i.default)("/:partition/:ns/:dc/namespace/:id"),h=class extends l.default{constructor(){super(...arguments),x(this,"router",b,this),x(this,"container",y,this),x(this,"env",g,this),x(this,"form",v,this),x(this,"settings",O,this),x(this,"permissions",P,this)}getPrimaryKey(){return r.PRIMARY_KEY}getSlugKey(){return r.SLUG_KEY}getModelName(){return"nspace"}async findAll(){return this.permissions.can("use nspaces")?super.findAll(...arguments).catch((()=>[])):[]}async findBySlug(e){let t -return t=""===e.id?await this.create({Datacenter:e.dc,Partition:e.partition,ACLs:{PolicyDefaults:[],RoleDefaults:[]}}):await super.findBySlug(...arguments),(0,o.defaultChangeset)(t)}remove(e){return(0,l.softDelete)(this,e)}authorize(e,t){return this.env.var("CONSUL_ACLS_ENABLED")?this.store.authorize(this.getModelName(),{dc:e,ns:t}).catch((function(e){return[]})):Promise.resolve([{Resource:"operator",Access:"write",Allow:!0}])}async getActive(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"" -if(this.permissions.can("use nspaces"))return{Name:"default"} -const t=this.store.peekAll("nspace").toArray() -if(0===e.length){e=(await this.settings.findBySlug("token")).Namespace||"default"}return 1===t.length?t[0]:function(e,t){let l=e.find((function(e){return e.Name===t.Name})) -return void 0===l&&((0,n.runInDebug)((n=>console.info(`${t.Name} not found in [${e.map((e=>e.Name)).join(", ")}]`))),l=e.find((function(e){return"default"===e.Name})),void 0===l&&(l=e[0])),l}(t,{Name:e})}},b=w(h.prototype,"router",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),y=w(h.prototype,"container",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),g=w(h.prototype,"env",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),v=w(h.prototype,"form",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),O=w(h.prototype,"settings",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),P=w(h.prototype,"permissions",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),w(h.prototype,"findAll",[f],Object.getOwnPropertyDescriptor(h.prototype,"findAll"),h.prototype),w(h.prototype,"findBySlug",[m],Object.getOwnPropertyDescriptor(h.prototype,"findBySlug"),h.prototype),h) -e.default=j})) -define("consul-ui/services/repository/oidc-provider",["exports","@ember/service","consul-ui/services/repository","@ember/application","@ember/object","consul-ui/decorators/data-source"],(function(e,t,n,l,r,i){var o,a,u,s,c,d,p,f -function m(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function h(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const b="oidc-with-url" -let y=(o=(0,t.inject)("torii"),a=(0,t.inject)("settings"),u=(0,i.default)("/:partition/:ns/:dc/oidc/providers"),s=(0,i.default)("/:partition/:ns/:dc/oidc/provider/:id"),c=(0,i.default)("/:partition/:ns/:dc/oidc/authorize/:id/:code/:state"),d=class extends n.default{constructor(){super(...arguments),m(this,"manager",p,this),m(this,"settings",f,this)}init(){super.init(...arguments),this.provider=(0,l.getOwner)(this).lookup("torii-provider:oidc-with-url")}getModelName(){return"oidc-provider"}async findAllByDatacenter(){const e=await super.findAllByDatacenter(...arguments) -if(0===e.length){const e=new Error("Not found") -return e.statusCode=404,void this.store.adapterFor(this.getModelName()).error(e)}return e}async findBySlug(e){const t=await this.settings.findBySlug("token")||{} -return super.findBySlug({ns:e.ns||t.Namespace||"default",partition:e.partition||t.Partition||"default",dc:e.dc,id:e.id})}authorize(e){return this.store.authorize(this.getModelName(),e)}logout(e,t,n,l,r){const i={id:e} -return this.store.logout(this.getModelName(),i)}close(){this.manager.close(b)}findCodeByURL(e){return(0,r.set)(this.provider,"baseUrl",e),this.manager.open(b,{}).catch((e=>{let t -if(!0===e.message.startsWith("remote was closed"))t=new Error("Remote was closed"),t.statusCode=499 -else t=new Error(e.message),t.statusCode=500 -this.store.adapterFor(this.getModelName()).error(t)}))}},p=h(d.prototype,"manager",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f=h(d.prototype,"settings",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h(d.prototype,"findAllByDatacenter",[u],Object.getOwnPropertyDescriptor(d.prototype,"findAllByDatacenter"),d.prototype),h(d.prototype,"findBySlug",[s],Object.getOwnPropertyDescriptor(d.prototype,"findBySlug"),d.prototype),h(d.prototype,"authorize",[c],Object.getOwnPropertyDescriptor(d.prototype,"authorize"),d.prototype),d) -e.default=y})),define("consul-ui/services/repository/partition",["exports","@ember/service","@ember/debug","consul-ui/services/repository","consul-ui/models/partition","consul-ui/decorators/data-source","consul-ui/utils/form/builder"],(function(e,t,n,l,r,i,o){var a,u,s,c,d,p,f,m,h -function b(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function y(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let g=(a=(0,t.inject)("settings"),u=(0,t.inject)("form"),s=(0,t.inject)("repository/permission"),c=(0,i.default)("/:partition/:ns/:dc/partitions"),d=(0,i.default)("/:partition/:ns/:dc/partition/:id"),p=class extends l.default{constructor(){super(...arguments),b(this,"settings",f,this),b(this,"form",m,this),b(this,"permissions",h,this)}getModelName(){return"partition"}getPrimaryKey(){return r.PRIMARY_KEY}getSlugKey(){return r.SLUG_KEY}async findAll(){return this.permissions.can("use partitions")?super.findAll(...arguments).catch((()=>[])):[]}async findBySlug(e){let t -return t=""===e.id?await this.create({Datacenter:e.dc,Partition:""}):await super.findBySlug(...arguments),(0,o.defaultChangeset)(t)}remove(e){return(0,l.softDelete)(this,e)}async getActive(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"" -const t=this.store.peekAll("partition").toArray() -if(0===e.length){e=(await this.settings.findBySlug("token")).Partition||"default"}return 1===t.length?t[0]:function(e,t){let l=e.find((function(e){return e.Name===t.Name})) -return void 0===l&&((0,n.runInDebug)((n=>console.info(`${t.Name} not found in [${e.map((e=>e.Name)).join(", ")}]`))),l=e.find((function(e){return"default"===e.Name})),void 0===l&&(l=e[0])),l}(t,{Name:e})}},f=y(p.prototype,"settings",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m=y(p.prototype,"form",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=y(p.prototype,"permissions",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),y(p.prototype,"findAll",[c],Object.getOwnPropertyDescriptor(p.prototype,"findAll"),p.prototype),y(p.prototype,"findBySlug",[d],Object.getOwnPropertyDescriptor(p.prototype,"findBySlug"),p.prototype),p) -e.default=g})),define("consul-ui/services/repository/peer",["exports","consul-ui/services/repository","consul-ui/decorators/data-source","@ember/service"],(function(e,t,n,l){var r,i,o,a,u,s,c,d -function p(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}function f(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) -t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function m(e){for(var t=1;t{const r=this.store.serializerFor("service") -return this.store.push(r.createJSONApiDocumentFromServicesPayload(e,t,l))}))}async fetchToken(e,t,n){let{dc:l,ns:r,partition:i,name:o,externalAddresses:a}=e -const u=(null==a?void 0:a.length)>0?a.split(","):[] -return(await(n` - POST /v1/peering/token - - ${{PeerName:o,Partition:i||void 0,ServerExternalAddresses:u}} - `))(((e,t,n)=>t))}async fetchAll(e,t,n){let{dc:l,ns:r,partition:i}=e,{uri:o}=t -return(await(n` - GET /v1/peerings - - ${{partition:i}} - `))(((e,t,n)=>({meta:{version:2,interval:1e4,uri:o},body:t.map((e=>n(b(e,l,i),(t=>t`peer:///${i}/${r}/${l}/peer/${e.Name}`))))})))}async fetchOne(e,t,n){let{partition:l,ns:r,dc:i,name:o}=e,{uri:a}=t -if(void 0===o||""===o){const e=this.create({Datacenter:i,Namespace:"",Partition:l}) -return e.meta={cacheControl:"no-store"},e}return(await(n` - GET /v1/peering/${o} - - ${{partition:l}} - `))(((e,t,n)=>{const{StreamStatus:o}=t -return o&&(o.LastHeartbeat&&(o.LastHeartbeat=new Date(o.LastHeartbeat)),o.LastReceive&&(o.LastReceive=new Date(o.LastReceive)),o.LastSend&&(o.LastSend=new Date(o.LastSend))),{meta:{version:2,interval:1e4,uri:a},body:n(b(t,i,l),(e=>e`peer:///${l}/${r}/${i}/peer/${t.Name}`))}}))}async persist(e,t){return(await(t` - POST /v1/peering/establish - - ${{PeerName:e.Name,PeeringToken:e.PeeringToken,Partition:e.Partition||void 0}} - `))(((t,n,l)=>{const r=e.Partition,i=e.Namespace,o=e.Datacenter -return{meta:{version:2},body:l(m(m({},e),{},{State:"ESTABLISHING"}),(t=>t`peer:///${r}/${i}/${o}/peer/${e.Name}`))}}))}async remove(e,t){return(await(t` - DELETE /v1/peering/${e.Name} - `))(((t,n,l)=>{const r=e.Partition,i=e.Namespace,o=e.Datacenter -return{meta:{version:2},body:l(m(m({},e),{},{State:"DELETING"}),(t=>t`peer:///${r}/${i}/${o}/peer/${e.Name}`))}}))}},d=p(c.prototype,"store",[l.inject],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p(c.prototype,"fetchExportedServices",[r],Object.getOwnPropertyDescriptor(c.prototype,"fetchExportedServices"),c.prototype),p(c.prototype,"fetchToken",[i],Object.getOwnPropertyDescriptor(c.prototype,"fetchToken"),c.prototype),p(c.prototype,"fetchAll",[o],Object.getOwnPropertyDescriptor(c.prototype,"fetchAll"),c.prototype),p(c.prototype,"fetchOne",[a,u,s],Object.getOwnPropertyDescriptor(c.prototype,"fetchOne"),c.prototype),c) -e.default=y})),define("consul-ui/services/repository/permission",["exports","consul-ui/services/repository","@ember/service","@glimmer/tracking","@ember/debug","consul-ui/decorators/data-source"],(function(e,t,n,l,r,i){var o,a,u,s,c,d,p -function f(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) -t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function m(e){for(var t=1;tt.every((t=>n[t]===e[t]))&&!0===n.Allow))}can(e){return this._can.can(e)}abilityFor(e){return this._can.abilityFor(e)}generate(e,t,n){const l={Resource:e,Access:t} -return void 0!==n&&(l.Segment=n),l}async authorize(e){if(this.env.var("CONSUL_ACLS_ENABLED")){let n=[] -try{n=await this.store.authorize("permission",e)}catch(t){(0,r.runInDebug)((()=>console.error(t)))}return n}return e.resources.map((e=>m(m({},e),{},{Allow:!0})))}async findBySlug(e,t){let n -try{n=this._can.abilityFor(t)}catch(r){return[]}const l=n.generateForSegment(e.id.toString()) -return 0===l.length?[]:(e.resources=l,this.authorize(e))}async findByPermissions(e){return this.authorize(e)}async findAll(e){return e.resources=this.permissionsToRequest,this.permissions=await this.findByPermissions(e),this.permissions.forEach((e=>{["key","node","service","intention","session"].includes(e.Resource)&&(e.Allow=!0)})),this.permissions}get permissionsToRequest(){return this._can.can("use peers")?[...g,...v]:g}},c=y(s.prototype,"env",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),d=y(s.prototype,"_can",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p=y(s.prototype,"permissions",[l.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return[]}}),y(s.prototype,"findAll",[u],Object.getOwnPropertyDescriptor(s.prototype,"findAll"),s.prototype),s) -e.default=O})),define("consul-ui/services/repository/policy",["exports","consul-ui/services/repository","@ember/object","@ember/service","consul-ui/models/policy","consul-ui/decorators/data-source"],(function(e,t,n,l,r,i){var o,a,u,s,c -function d(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let p=(o=(0,l.inject)("form"),a=(0,i.default)("/:partition/:ns/:dc/policies"),u=(0,i.default)("/:partition/:ns/:dc/policy/:id"),s=class extends t.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="form",l=this,(n=c)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}getModelName(){return"policy"}getPrimaryKey(){return r.PRIMARY_KEY}getSlugKey(){return r.SLUG_KEY}async findAllByDatacenter(){return super.findAllByDatacenter(...arguments)}async findBySlug(e){let t -return t=""===e.id?await this.create({Datacenter:e.dc,Partition:e.partition,Namespace:e.ns}):await super.findBySlug(...arguments),this.form.form(this.getModelName()).setData(t).getData()}persist(e){return""===(0,n.get)(e,"template")?e.save():Promise.resolve(e)}translate(e){return this.store.translate("policy",(0,n.get)(e,"Rules"))}},c=d(s.prototype,"form",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),d(s.prototype,"findAllByDatacenter",[a],Object.getOwnPropertyDescriptor(s.prototype,"findAllByDatacenter"),s.prototype),d(s.prototype,"findBySlug",[u],Object.getOwnPropertyDescriptor(s.prototype,"findBySlug"),s.prototype),s) -e.default=p})),define("consul-ui/services/repository/proxy",["exports","consul-ui/services/repository","consul-ui/models/proxy","@ember/object","consul-ui/decorators/data-source"],(function(e,t,n,l,r){var i,o,a -function u(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let s=(i=(0,r.default)("/:partition/:ns/:dc/proxies/for-service/:id"),o=(0,r.default)("/:partition/:ns/:dc/proxy-instance/:serviceId/:node/:id"),a=class extends t.default{getModelName(){return"proxy"}getPrimaryKey(){return n.PRIMARY_KEY}findAllBySlug(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} -return void 0!==t.cursor&&(e.index=t.cursor,e.uri=t.uri),this.store.query(this.getModelName(),e).then((e=>(e.forEach((e=>{const t=JSON.parse(e.uid) -t.pop(),t.push(e.ServiceProxy.DestinationServiceID) -const n=this.store.peekRecord("service-instance",JSON.stringify(t)) -n&&(0,l.set)(n,"ProxyInstance",e)})),e)))}async findInstanceBySlug(e,t){const n=await this.findAllBySlug(e,t) -let r={} -if((0,l.get)(n,"length")>0){let t=n.filterBy("ServiceProxy.DestinationServiceID",e.serviceId).findBy("NodeName",e.node) -t?r=t:(t=n.findBy("ServiceProxy.DestinationServiceName",e.id),t&&(r=t))}return(0,l.set)(r,"meta",(0,l.get)(n,"meta")),r}},u(a.prototype,"findAllBySlug",[i],Object.getOwnPropertyDescriptor(a.prototype,"findAllBySlug"),a.prototype),u(a.prototype,"findInstanceBySlug",[o],Object.getOwnPropertyDescriptor(a.prototype,"findInstanceBySlug"),a.prototype),a) -e.default=s})),define("consul-ui/services/repository/role",["exports","consul-ui/services/repository","@ember/service","consul-ui/models/role","consul-ui/decorators/data-source"],(function(e,t,n,l,r){var i,o,a,u,s -function c(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let d=(i=(0,n.inject)("form"),o=(0,r.default)("/:partition/:ns/:dc/roles"),a=(0,r.default)("/:partition/:ns/:dc/role/:id"),u=class extends t.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="form",l=this,(n=s)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}getModelName(){return"role"}getPrimaryKey(){return l.PRIMARY_KEY}getSlugKey(){return l.SLUG_KEY}async findAll(){return super.findAll(...arguments)}async findBySlug(e){let t -return t=""===e.id?await this.create({Datacenter:e.dc,Partition:e.partition,Namespace:e.ns}):await super.findBySlug(...arguments),this.form.form(this.getModelName()).setData(t).getData()}},s=c(u.prototype,"form",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),c(u.prototype,"findAll",[o],Object.getOwnPropertyDescriptor(u.prototype,"findAll"),u.prototype),c(u.prototype,"findBySlug",[a],Object.getOwnPropertyDescriptor(u.prototype,"findBySlug"),u.prototype),u) -e.default=d})),define("consul-ui/services/repository/service-instance",["exports","consul-ui/services/repository","@ember/object","consul-ui/abilities/base","consul-ui/decorators/data-source"],(function(e,t,n,l,r){var i,o,a -function u(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let s=(i=(0,r.default)("/:partition/:ns/:dc/service-instances/for-service/:id/:peer"),o=(0,r.default)("/:partition/:ns/:dc/service-instance/:serviceId/:node/:id/:peer"),a=class extends t.default{getModelName(){return"service-instance"}shouldReconcile(e,t){return super.shouldReconcile(...arguments)&&e.Service.Service===t.id}async findByService(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} -return void 0!==t.cursor&&(e.index=t.cursor,e.uri=t.uri),this.authorizeBySlug((async t=>{const l=await this.query(e) -return(0,n.set)(l,"firstObject.Service.Resources",t),l}),l.ACCESS_READ,e)}async findBySlug(e){return super.findBySlug(...arguments)}},u(a.prototype,"findByService",[i],Object.getOwnPropertyDescriptor(a.prototype,"findByService"),a.prototype),u(a.prototype,"findBySlug",[o],Object.getOwnPropertyDescriptor(a.prototype,"findBySlug"),a.prototype),a) -e.default=s})),define("consul-ui/services/repository/service",["exports","consul-ui/services/repository","consul-ui/decorators/data-source","@ember/service"],(function(e,t,n,l){var r,i,o,a,u -function s(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let c=(r=(0,n.default)("/:partition/:ns/:dc/services"),i=(0,n.default)("/:partition/:ns/:dc/services/:peer/:peerId"),o=(0,n.default)("/:partition/:ns/:dc/gateways/for-service/:gateway"),a=class extends t.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="store",l=this,(n=u)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}getModelName(){return"service"}async findAllByDatacenter(){return super.findAll(...arguments)}async findAllImportedServices(e,t){const{peerId:n}=e -return delete e.peerId,super.findAll(e,t).then((e=>{const t=this.store.peekRecord("peer",n) -return e.forEach((e=>e.peer=t)),e}))}findGatewayBySlug(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} -return void 0!==t.cursor&&(e.index=t.cursor,e.uri=t.uri),this.store.query(this.getModelName(),e)}},u=s(a.prototype,"store",[l.inject],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),s(a.prototype,"findAllByDatacenter",[r],Object.getOwnPropertyDescriptor(a.prototype,"findAllByDatacenter"),a.prototype),s(a.prototype,"findAllImportedServices",[i],Object.getOwnPropertyDescriptor(a.prototype,"findAllImportedServices"),a.prototype),s(a.prototype,"findGatewayBySlug",[o],Object.getOwnPropertyDescriptor(a.prototype,"findGatewayBySlug"),a.prototype),a) -e.default=c})),define("consul-ui/services/repository/session",["exports","@ember/service","consul-ui/services/repository","consul-ui/decorators/data-source"],(function(e,t,n,l){var r,i,o,a,u -function s(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let c=(r=(0,t.inject)("store"),i=(0,l.default)("/:partition/:ns/:dc/sessions/for-node/:id"),o=(0,l.default)("/:partition/:ns/:dc/sessions/for-key/:id"),a=class extends n.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="store",l=this,(n=u)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}getModelName(){return"session"}findByNode(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} -return void 0!==t.cursor&&(e.index=t.cursor,e.uri=t.uri),this.store.query(this.getModelName(),e)}findByKey(e){return this.findBySlug(...arguments)}},u=s(a.prototype,"store",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),s(a.prototype,"findByNode",[i],Object.getOwnPropertyDescriptor(a.prototype,"findByNode"),a.prototype),s(a.prototype,"findByKey",[o],Object.getOwnPropertyDescriptor(a.prototype,"findByKey"),a.prototype),a) -e.default=c})),define("consul-ui/services/repository/token",["exports","consul-ui/services/repository","@ember/object","@ember/service","consul-ui/models/token","consul-ui/decorators/data-source"],(function(e,t,n,l,r,i){var o,a,u,s,c,d,p,f -function m(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let h=(o=(0,l.inject)("form"),a=(0,i.default)("/:partition/:ns/:dc/tokens"),u=(0,i.default)("/:partition/:ns/:dc/token/:id"),s=(0,i.default)("/:partition/:ns/:dc/token/self/:secret"),c=(0,i.default)("/:partition/:ns/:dc/tokens/for-policy/:policy"),d=(0,i.default)("/:partition/:ns/:dc/tokens/for-role/:role"),p=class extends t.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="form",l=this,(n=f)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}getModelName(){return"token"}getPrimaryKey(){return r.PRIMARY_KEY}getSlugKey(){return r.SLUG_KEY}async findAll(){return super.findAll(...arguments)}async findBySlug(e){let t -return t=""===e.id?await this.create({Datacenter:e.dc,Partition:e.partition,Namespace:e.ns}):await super.findBySlug(...arguments),this.form.form(this.getModelName()).setData(t).getData()}self(e){return this.store.self(this.getModelName(),{secret:e.secret,dc:e.dc}).catch((e=>Promise.reject(e)))}clone(e){return this.store.clone(this.getModelName(),(0,n.get)(e,r.PRIMARY_KEY))}findByPolicy(e){return this.findAll(...arguments)}findByRole(){return this.findAll(...arguments)}},f=m(p.prototype,"form",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m(p.prototype,"findAll",[a],Object.getOwnPropertyDescriptor(p.prototype,"findAll"),p.prototype),m(p.prototype,"findBySlug",[u],Object.getOwnPropertyDescriptor(p.prototype,"findBySlug"),p.prototype),m(p.prototype,"self",[s],Object.getOwnPropertyDescriptor(p.prototype,"self"),p.prototype),m(p.prototype,"findByPolicy",[c],Object.getOwnPropertyDescriptor(p.prototype,"findByPolicy"),p.prototype),m(p.prototype,"findByRole",[d],Object.getOwnPropertyDescriptor(p.prototype,"findByRole"),p.prototype),p) -e.default=h})),define("consul-ui/services/repository/topology",["exports","@ember/service","consul-ui/services/repository","@ember/object","consul-ui/decorators/data-source"],(function(e,t,n,l,r){var i,o,a,u -function s(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let c=(i=(0,t.inject)("repository/dc"),o=(0,r.default)("/:partition/:ns/:dc/topology/:id/:kind"),a=class extends n.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="dcs",l=this,(n=u)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}getModelName(){return"topology"}findBySlug(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} -const n=this.dcs.peekOne(e.dc) -return null===n||(0,l.get)(n,"MeshEnabled")?(void 0!==t.cursor&&(e.index=t.cursor,e.uri=t.uri),this.store.queryRecord(this.getModelName(),e).catch((e=>{const t=(0,l.get)(e,"errors.firstObject.status"),r=((0,l.get)(e,"errors.firstObject.detail")||"").trim() -if("500"!==t)throw e -null!==n&&r.endsWith("Connect must be enabled in order to use this endpoint")&&(0,l.set)(n,"MeshEnabled",!1)}))):Promise.resolve()}},u=s(a.prototype,"dcs",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),s(a.prototype,"findBySlug",[o],Object.getOwnPropertyDescriptor(a.prototype,"findBySlug"),a.prototype),a) -e.default=c})),define("consul-ui/services/resize-observer",["exports","ember-resize-observer-service/services/resize-observer"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/services/routlet",["exports","@ember/service","@ember/runloop","@ember/object","consul-ui/utils/routing/wildcard","consul-ui/router"],(function(e,t,n,l,r,i){var o,a,u,s,c,d,p,f,m -function h(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) -t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function b(e){for(var t=1;t{if("application"===e)return 1 -if("application"===t)return-1 -const n=e.split(".").length,l=t.split(".").length -switch(!0){case n>l:return-1 -case n0&&!t.every((e=>this.permissions.can(e))))}transition(){let e -return this._transition=new Promise((t=>{e=t})),e}findOutlet(e){return[...P.keys()].find((t=>-1!==e.indexOf(t)))}outletFor(e){const t=[...P.keys()],n=t.indexOf(e)+1 -return P.get(t[n])}normalizeParamsFor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} -return O(e)?Object.keys(t).reduce((function(e,n){return void 0!==t[n]?e[n]=decodeURIComponent(t[n]):e[n]=t[n],e}),{}):t}paramsFor(e){let t={} -const n=P.get(e) -void 0!==n&&void 0!==n.args.params&&(t=n.args.params) -let l=this.router.currentRoute -null===l&&(l=this.container.lookup("route:application")) -let r,i=l,o=this.normalizeParamsFor(e,i.params) -for(;r=i.parent;)o=b(b({},this.normalizeParamsFor(r.name,r.params)),o),i=r -return b(b(b({},this.container.get(`location:${this.env.var("locationType")}`).optionalParams()),o),t)}modelFor(e){const t=P.get(e) -if(void 0!==t)return t.model}addRoute(e,t){const l=this.outletFor(e) -void 0!==l&&(l.route=t,(0,n.schedule)("afterRender",(()=>{l.routeName=e})))}removeRoute(e,t){const l=this.outletFor(e) -t._model=void 0,void 0!==l&&(0,n.schedule)("afterRender",(()=>{l.route=void 0}))}addOutlet(e,t){P.set(e,t)}removeOutlet(e){(0,n.schedule)("afterRender",(()=>{P.delete(e)}))}},d=v(c.prototype,"container",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p=v(c.prototype,"env",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f=v(c.prototype,"router",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m=v(c.prototype,"permissions",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),c) -e.default=x})),define("consul-ui/services/schema",["exports","@ember/service","consul-ui/models/intention-permission","consul-ui/models/intention-permission-http","consul-ui/models/intention-permission-http-header"],(function(e,t,n,l,r){function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class o extends t.default{constructor(){super(...arguments),i(this,"intention-permission",n.schema),i(this,"intention-permission-http",l.schema),i(this,"intention-permission-http-header",r.schema)}}e.default=o})),define("consul-ui/services/search",["exports","@ember/service","consul-ui/utils/search/exact","consul-ui/search/predicates/intention","consul-ui/search/predicates/upstream-instance","consul-ui/search/predicates/service-instance","consul-ui/search/predicates/health-check","consul-ui/search/predicates/acl","consul-ui/search/predicates/service","consul-ui/search/predicates/node","consul-ui/search/predicates/kv","consul-ui/search/predicates/token","consul-ui/search/predicates/role","consul-ui/search/predicates/policy","consul-ui/search/predicates/auth-method","consul-ui/search/predicates/nspace","consul-ui/search/predicates/peer"],(function(e,t,n,l,r,i,o,a,u,s,c,d,p,f,m,h,b){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const y={intention:l.default,service:u.default,"service-instance":i.default,"upstream-instance":r.default,"health-check":o.default,"auth-method":m.default,node:s.default,kv:c.default,acl:a.default,token:d.default,role:p.default,policy:f.default,nspace:h.default,peer:b.default} -class g extends t.default{constructor(){var e,t,l -super(...arguments),e=this,t="searchables",l={exact:n.default},t in e?Object.defineProperty(e,t,{value:l,enumerable:!0,configurable:!0,writable:!0}):e[t]=l}predicate(e){return y[e]}}e.default=g})),define("consul-ui/services/settings",["exports","@ember/service","consul-ui/utils/storage/local-storage"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.ifNotBlocking=void 0 -const l=(0,n.default)("consul") -e.ifNotBlocking=function(e){return e.findBySlug("client").then((function(e){return void 0!==e.blocking&&!e.blocking}))} -class r extends t.default{constructor(){var e,t,n -super(...arguments),n=l,(t="storage")in(e=this)?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n}findAll(e){return Promise.resolve(this.storage.all())}findBySlug(e){return Promise.resolve(this.storage.getValue(e))}persist(e){const t=this.storage -return Object.keys(e).forEach(((n,l)=>{t.setValue(n,e[n])})),Promise.resolve(e)}delete(e){Array.isArray(e)||(e=[e]) -const t=this.storage,n=e.reduce((function(e,n,l,r){return t.removeValue(n),e}),{}) -return Promise.resolve(n)}}e.default=r})),define("consul-ui/services/sort",["exports","@ember/service","consul-ui/sort/comparators/service","consul-ui/sort/comparators/service-instance","consul-ui/sort/comparators/upstream-instance","consul-ui/sort/comparators/kv","consul-ui/sort/comparators/health-check","consul-ui/sort/comparators/intention","consul-ui/sort/comparators/token","consul-ui/sort/comparators/role","consul-ui/sort/comparators/policy","consul-ui/sort/comparators/auth-method","consul-ui/sort/comparators/nspace","consul-ui/sort/comparators/peer","consul-ui/sort/comparators/node"],(function(e,t,n,l,r,i,o,a,u,s,c,d,p,f,m){Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.properties=void 0 -const h=e=>e.reduce(((e,t)=>e.concat([`${t}:asc`,`${t}:desc`])),[]),b=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[] -return t=>{const n=h(e) -return[n.find((e=>e===t))||n[0]]}} -e.properties=b -const y={properties:b,directionify:h},g={service:(0,n.default)(y),"service-instance":(0,l.default)(y),"upstream-instance":(0,r.default)(y),"health-check":(0,o.default)(y),"auth-method":(0,d.default)(y),kv:(0,i.default)(y),intention:(0,a.default)(y),token:(0,u.default)(y),role:(0,s.default)(y),policy:(0,c.default)(y),nspace:(0,p.default)(y),peer:(0,f.default)(y),node:(0,m.default)(y)} -class v extends t.default{comparator(e){return g[e]}}e.default=v})),define("consul-ui/services/state-with-charts",["exports","consul-ui/services/state","consul-ui/machines/validate.xstate","consul-ui/machines/boolean.xstate"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class r extends t.default{constructor(){var e,t,r -super(...arguments),e=this,t="stateCharts",r={validate:n.default,boolean:l.default},t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r}}e.default=r})),define("consul-ui/services/state",["exports","@ember/service","@ember/object","flat","@xstate/fsm"],(function(e,t,n,l,r){var i,o,a -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let u=(i=(0,t.inject)("logger"),o=class extends t.default{constructor(){var e,t,n,l,r,i,o -super(...arguments),n={},(t="stateCharts")in(e=this)?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,l=this,r="logger",o=this,(i=a)&&Object.defineProperty(l,r,{enumerable:i.enumerable,configurable:i.configurable,writable:i.writable,value:i.initializer?i.initializer.call(o):void 0})}log(e,t){}stateChart(e){return this.stateCharts[e]}addGuards(e,t){return this.guards(e).forEach((function(l){let[r,i]=l;(0,n.set)(e,r,(function(){return!!t.onGuard(i,...arguments)}))})),[e,t]}machine(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} -return(0,r.createMachine)(...this.addGuards(e,t))}prepareChart(e){return void 0!==(e=JSON.parse(JSON.stringify(e))).on&&Object.values(e.states).forEach((function(t){void 0===t.on?t.on=e.on:Object.keys(e.on).forEach((function(n){void 0===t.on[n]&&(t.on[n]=e.on[n])}))})),e}matches(e,t){if(void 0===e)return!1 -return(Array.isArray(t)?t:[t]).some((t=>e.matches(t)))}state(e){return{matches:e}}interpret(e,t){e=this.prepareChart(e) -const n=(0,r.interpret)(this.machine(e,t)) -return n.subscribe((n=>{n.changed&&(this.log(e,n),t.onTransition(n))})),n}guards(e){return Object.entries((0,l.default)(e)).filter((e=>{let[t]=e -return t.endsWith(".cond")}))}},s=o.prototype,c="logger",d=[i],p={configurable:!0,enumerable:!0,writable:!0,initializer:null},m={},Object.keys(p).forEach((function(e){m[e]=p[e]})),m.enumerable=!!m.enumerable,m.configurable=!!m.configurable,("value"in m||m.initializer)&&(m.writable=!0),m=d.slice().reverse().reduce((function(e,t){return t(s,c,e)||e}),m),f&&void 0!==m.initializer&&(m.value=m.initializer?m.initializer.call(f):void 0,m.initializer=void 0),void 0===m.initializer&&(Object.defineProperty(s,c,m),m=null),a=m,o) -var s,c,d,p,f,m -e.default=u})),define("consul-ui/services/store",["exports","@ember/service","@ember-data/store"],(function(e,t,n){var l,r,i,o,a -function u(e,t,n,l){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}function s(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let c=(l=(0,t.inject)("data-source/service"),r=(0,t.inject)("client/http"),i=class extends n.default{constructor(){super(...arguments),u(this,"dataSource",o,this),u(this,"client",a,this)}invalidate(){this.client.abort(401),this.dataSource.resetCache(),this.init()}clear(){this.invalidate(0)}clone(e,t){return this.adapterFor(e).clone(this,{modelName:e},t,this._internalModelForId(e,t).createSnapshot({}))}self(e,t){const n=this.adapterFor(e),l=this.serializerFor(e),r={modelName:e} -return n.self(this,r,t.secret,t).then((e=>l.normalizeResponse(this,r,e,t,"self")))}queryLeader(e,t){const n=this.adapterFor(e),l=this.serializerFor(e),r={modelName:e} -return n.queryLeader(this,r,null,t).then((e=>(e.meta=l.normalizeMeta(this,r,e,null,"leader"),e)))}authorize(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} -const n=this.adapterFor(e),l=this.serializerFor(e),r={modelName:e} -return n.authorize(this,r,null,t).then((e=>l.normalizeResponse(this,r,e,void 0,"authorize")))}logout(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} -const n={modelName:e} -return this.adapterFor(e).logout(this,n,t.id,t)}},o=s(i.prototype,"dataSource",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),a=s(i.prototype,"client",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),i) -e.default=c})),define("consul-ui/services/temporal",["exports","pretty-ms","parse-duration","@ember/debug","dayjs","dayjs/plugin/relativeTime","@ember/service"],(function(e,t,n,l,r,i,o){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,r.default.extend(i.default) -class a extends o.default{format(e,t){const n=(0,r.default)(e) -return(0,r.default)().isBefore(n)?(0,r.default)().to(n,!0):(0,r.default)().from(n,!0)}within(e,t){let[n,l]=e -return(0,r.default)(n).isBefore((0,r.default)().add(l,"ms"))}parse(e,t){return(0,n.default)(e)}durationFrom(e){return!0==("number"==typeof e)?0===e?"0":(0,t.default)(e/1e6,{formatSubMilliseconds:!0}).split(" ").join(""):e}}e.default=a})),define("consul-ui/services/text-measurer",["exports","ember-text-measurer/services/text-measurer"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/services/ticker",["exports","@ember/service","consul-ui/utils/ticker"],(function(e,t,n){let l -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class r extends t.default{init(){super.init(...arguments),this.reset()}tweenTo(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",r=arguments.length>2?arguments[2]:void 0,i=arguments.length>3?arguments[3]:void 0 -const o=t -return l.has(o)?(t=l.get(o),t instanceof n.Tween&&(t=t.stop().getTarget()),l.set(o,n.Tween.to(t,e,r,i)),t):(l.set(o,e),e)}destroy(e){return this.reset(),n.Tween.destroy()}reset(){l=new Map}}e.default=r})),define("consul-ui/services/timeout",["exports","@ember/service","consul-ui/utils/promisedTimeout","@ember/runloop"],(function(e,t,n,l){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=(0,n.default)(Promise) -class i extends t.default{execute(e,t){return r(e,t)}tick(){return new Promise((function(e,t){(0,l.next)(e)}))}}e.default=i})),define("consul-ui/services/torii-session",["exports","torii/services/torii-session"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/services/torii",["exports","torii/services/torii"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/services/ui-config",["exports","@ember/service","@ember/object","consul-ui/decorators/data-source"],(function(e,t,n,l){var r,i,o,a,u,s -function c(e,t,n,l,r){var i={} -return Object.keys(l).forEach((function(e){i[e]=l[e]})),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce((function(n,l){return l(e,t,n)||n}),i),r&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(r):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let d=(r=(0,t.inject)("env"),i=(0,l.default)("/:partition/:nspace/:dc/ui-config/:path"),o=(0,l.default)("/:partition/:nspace/:dc/notfound/:path"),a=(0,l.default)("/:partition/:nspace/:dc/ui-config"),u=class extends t.default{constructor(){var e,t,n,l -super(...arguments),e=this,t="env",l=this,(n=s)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(l):void 0})}async findByPath(e){return(0,n.get)(this.get(),e.path)}async parsePath(e){return e.path.split("/").reduce(((e,t,n)=>{switch(!0){case t.startsWith("~"):e.nspace=t.substr(1) -break -case t.startsWith("_"):e.partition=t.substr(1) -break -case void 0===e.dc:e.dc=t}return e}),{})}async get(){return this.env.var("CONSUL_UI_CONFIG")}getSync(){return this.env.var("CONSUL_UI_CONFIG")}},s=c(u.prototype,"env",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),c(u.prototype,"findByPath",[i],Object.getOwnPropertyDescriptor(u.prototype,"findByPath"),u.prototype),c(u.prototype,"parsePath",[o],Object.getOwnPropertyDescriptor(u.prototype,"parsePath"),u.prototype),c(u.prototype,"get",[a],Object.getOwnPropertyDescriptor(u.prototype,"get"),u.prototype),u) -e.default=d})),define("consul-ui/sort/comparators/auth-method",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=e=>{let{properties:t}=e -return function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"MethodName:asc" -return t(["MethodName","TokenTTL"])(e)}}})),define("consul-ui/sort/comparators/health-check",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=e=>{let{properties:t}=e -return function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"Status:asc" -return e.startsWith("Status:")?function(t,n){const[,l]=e.split(":") -let r,i -"asc"===l?(r=t,i=n):(i=t,r=n) -const o=r.Status,a=i.Status -switch(o){case"passing":return"passing"===a?0:1 -case"critical":return"critical"===a?0:-1 -case"warning":switch(a){case"passing":return-1 -case"critical":return 1 -default:return 0}}return 0}:t(["Name","Kind"])(e)}}})) -define("consul-ui/sort/comparators/intention",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=()=>e=>[e]})),define("consul-ui/sort/comparators/kv",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=e=>{let{properties:t}=e -return e=>t(["Key","Kind"])(e)}})),define("consul-ui/sort/comparators/node",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=e=>{let{properties:t}=e -return function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"Name:asc" -return e.startsWith("Status:")?function(t,n){const[,l]=e.split(":") -let r,i -switch("asc"===l?(i=t,r=n):(r=t,i=n),!0){case r.ChecksCritical>i.ChecksCritical:return 1 -case r.ChecksCriticali.ChecksWarning:return 1 -case r.ChecksWarningi.ChecksPassing:return-1}}return 0}}:t(["Node"])(e)}}})),define("consul-ui/sort/comparators/nspace",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=e=>{let{properties:t}=e -return e=>t(["Name"])(e)}})),define("consul-ui/sort/comparators/partition",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=e=>{let{properties:t}=e -return e=>t(["Name"])(e)}})),define("consul-ui/sort/comparators/peer",["exports","consul-ui/models/peer"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=e=>{let{properties:n}=e -return function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"State:asc" -return e.startsWith("State:")?function(n,l){const[,r]=e.split(":") -let i,o -switch("asc"===r?(o=n,i=l):(i=n,o=l),!0){case t.schema.State.allowedValues.indexOf(i.State)t.schema.State.allowedValues.indexOf(o.State):return-1 -case t.schema.State.allowedValues.indexOf(i.State)===t.schema.State.allowedValues.indexOf(o.State):return 0}}:n(["Name"])(e)}}})),define("consul-ui/sort/comparators/policy",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=e=>{let{properties:t}=e -return function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"Name:asc" -return t(["Name"])(e)}}})),define("consul-ui/sort/comparators/role",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=e=>{let{properties:t}=e -return function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"Name:asc" -return t(["Name","CreateIndex"])(e)}}})),define("consul-ui/sort/comparators/service-instance",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=e=>{let{properties:t}=e -return e=>{if(e.startsWith("Status:")){const[,t]=e.split(":"),n=["PercentageChecksPassing","PercentageChecksWarning","PercentageChecksCritical"] -return"asc"===t&&n.reverse(),function(e,t){for(let l in n){let r=n[l] -if(e[r]!==t[r])return e[r]>t[r]?-1:1}}}return t(["Name"])(e)}}})),define("consul-ui/sort/comparators/service",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=e=>{let{properties:t}=e -return function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"Status:asc" -return e.startsWith("Status:")?function(t,n){const[,l]=e.split(":") -let r,i -switch("asc"===l?(i=t,r=n):(r=t,i=n),!0){case r.MeshChecksCritical>i.MeshChecksCritical:return 1 -case r.MeshChecksCriticali.MeshChecksWarning:return 1 -case r.MeshChecksWarningi.MeshChecksPassing:return-1}}return 0}}:t(["Name"])(e)}}})),define("consul-ui/sort/comparators/token",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=e=>{let{properties:t}=e -return e=>t(["CreateTime"])(e)}})),define("consul-ui/sort/comparators/upstream-instance",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=e=>{let{properties:t}=e -return function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"DestinationName:asc" -return t(["DestinationName"])(e)}}})),define("consul-ui/storages/base",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=class{constructor(e,t){this.key=e,this.storage=t,this.state=this.initState(this.key,this.storage)}initState(){const{key:e,storage:t}=this -return t.getItem(e)}}})),define("consul-ui/storages/notices",["exports","tracked-built-ins","consul-ui/storages/base"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class l extends n.default{initState(){const{key:e,storage:n}=this,l=n.getItem(e) -return l?new t.TrackedArray(l.split(",")):new t.TrackedArray}add(e){const{key:t,storage:n,state:l}=this -l.push(e),n.setItem(t,[...l])}}e.default=l})),define("consul-ui/styles/base/decoration/visually-hidden.css",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=e=>e` - @keyframes visually-hidden { - 100% { - position: absolute; - overflow: hidden; - clip: rect(0 0 0 0); - width: 1px; - height: 1px; - margin: -1px; - padding: 0; - border: 0; - } - } - `})),define("consul-ui/styles/base/icons/base-keyframes.css",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=e=>e` - *::before, - *::after { - display: inline-block; - animation-play-state: paused; - animation-fill-mode: forwards; - animation-iteration-count: var(--icon-resolution, 1); - vertical-align: text-top; - } - *::before { - animation-name: var(--icon-name-start, var(--icon-name)), - var(--icon-size-start, var(--icon-size, icon-000)); - background-color: var(--icon-color-start, var(--icon-color)); - } - *::after { - animation-name: var(--icon-name-end, var(--icon-name)), - var(--icon-size-end, var(--icon-size, icon-000)); - background-color: var(--icon-color-end, var(--icon-color)); - } - - [style*='--icon-color-start']::before { - color: var(--icon-color-start); - } - [style*='--icon-color-end']::after { - color: var(--icon-color-end); - } - [style*='--icon-name-start']::before, - [style*='--icon-name-end']::after { - content: ''; - } - - @keyframes icon-000 { - 100% { - width: 1.2em; - height: 1.2em; - } - } - @keyframes icon-100 { - 100% { - width: 0.625rem; /* 10px */ - height: 0.625rem; /* 10px */ - } - } - @keyframes icon-200 { - 100% { - width: 0.75rem; /* 12px */ - height: 0.75rem; /* 12px */ - } - } - @keyframes icon-300 { - 100% { - width: 1rem; /* 16px */ - height: 1rem; /* 16px */ - } - } - @keyframes icon-400 { - 100% { - width: 1.125rem; /* 18px */ - height: 1.125rem; /* 18px */ - } - } - @keyframes icon-500 { - 100% { - width: 1.25rem; /* 20px */ - height: 1.25rem; /* 20px */ - } - } - @keyframes icon-600 { - 100% { - width: 1.375rem; /* 22px */ - height: 1.375rem; /* 22px */ - } - } - @keyframes icon-700 { - 100% { - width: 1.5rem; /* 24px */ - height: 1.5rem; /* 24px */ - } - } - @keyframes icon-800 { - 100% { - width: 1.625rem; /* 26px */ - height: 1.625rem; /* 26px */ - } - } - @keyframes icon-900 { - 100% { - width: 1.75rem; /* 28px */ - height: 1.75rem; /* 28px */ - } - } -`})),define("consul-ui/templates/application",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"JXqlDmpZ",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n\\n"],[1," "],[8,[30,1,["Announcer"]],null,[["@title"],["Consul"]],null],[1,"\\n"],[41,[28,[37,3],["use acls"],null],[[[1," "],[1,[28,[35,4],null,[["class"],["has-acls"]]]],[1,"\\n"]],[]],null],[41,[28,[37,3],["use nspaces"],null],[[[1," "],[1,[28,[35,4],null,[["class"],["has-nspaces"]]]],[1,"\\n"]],[]],null],[41,[28,[37,3],["use partitions"],null],[[[1," "],[1,[28,[35,4],null,[["class"],["has-partitions"]]]],[1,"\\n"]],[]],null],[1,"\\n"],[1," "],[8,[39,5],null,[["@src","@onchange"],[[28,[37,6],["settings://consul:client"],null],[28,[37,7],["onClientChanged"],null]]],null],[1,"\\n\\n"],[1," "],[8,[39,5],null,[["@src"],[[28,[37,6],["settings://consul:theme"],null]]],[["default"],[[[[1,"\\n"],[42,[28,[37,9],[[30,2,["data"]]],null],null,[[[41,[28,[37,10],[[30,3],[28,[37,11],[[30,4],[28,[37,12],["color-scheme","contrast"],null]],null]],null],[[[1," "],[1,[28,[35,4],null,[["class"],[[28,[37,13],["prefers-",[30,4],"-",[30,3]],null]]]]],[1,"\\n"]],[]],null]],[3,4]],null],[1," "]],[2]]]]],[1,"\\n\\n"],[41,[28,[37,3],["use acls"],null],[[[1," "],[8,[39,5],null,[["@src","@onchange"],[[28,[37,6],["settings://consul:token"],null],[28,[37,14],[[30,0],[28,[37,15],[[33,16]],null]],[["value"],["data"]]]]],null],[1,"\\n"]],[]],null],[1,"\\n"],[41,[28,[37,17],[[30,1,["currentName"]],"oauth-provider-debug"],null],[[[1,"\\n"],[41,[28,[37,18],[[30,1,["currentName"]],"index"],null],[[[1,"\\n"],[1," "],[1,[28,[35,19],[[28,[37,7],["replaceWith","dc.services.index",[28,[37,20],null,[["dc"],[[28,[37,21],["CONSUL_DATACENTER_LOCAL"],null]]]]],null]],null]],[1,"\\n"]],[]],[[[41,[28,[37,18],[[30,1,["currentName"]],"notfound"],null],[[[1," "],[8,[39,5],null,[["@src","@onchange"],[[28,[37,6],["/*/*/*/notfound/${path}",[28,[37,20],null,[["path"],[[30,1,["params","notfound"]]]]]],null],[28,[37,14],[[30,0],[28,[37,15],[[33,22]],null]],[["value"],["data"]]]]],null],[1,"\\n"]],[]],null],[1,"\\n"],[44,[[52,[28,[37,3],["use partitions"],null],[28,[37,24],[[30,1,["params","partition"]],[33,22,["partition"]],[33,16,["Partition"]],""],null],""],[52,[28,[37,3],["use nspaces"],null],[28,[37,24],[[30,1,["params","nspace"]],[33,22,["nspace"]],[33,16,["Namespace"]],""],null],""]],[[[1,"\\n"],[1," "],[8,[39,5],null,[["@src"],[[28,[37,6],["/*/*/*/datacenters"],null]]],[["default"],[[[[1,"\\n"],[44,[[28,[37,24],[[52,[33,25,["dc"]],[28,[37,26],[0,[28,[37,27],["dc",[28,[37,20],null,[["Name"],[[33,22,["dc"]]]]]],null]],null]],[28,[37,26],[0,[28,[37,27],["dc",[28,[37,20],null,[["Name"],[[30,1,["params","dc"]]]]]],null]],null],[28,[37,20],null,[["Name"],[[28,[37,21],["CONSUL_DATACENTER_LOCAL"],null]]]]],null],[30,7,["data"]]],[[[41,[28,[37,10],[[28,[37,28],[[30,8,["Name","length"]],0],null],[30,9]],null],[[[1,"\\n"],[1," "],[8,[39,5],null,[["@src"],[[28,[37,6],["/${partition}/*/${dc}/datacenter-cache/${name}",[28,[37,20],null,[["dc","partition","name"],[[30,8,["Name"]],[30,5],[30,8,["Name"]]]]]],null]]],[["default"],[[[[1,"\\n"],[41,[30,10,["data"]],[[[1," "],[8,[39,29],[[24,1,"wrapper"]],[["@dcs","@dc","@partition","@nspace","@user","@onchange"],[[30,9],[30,10,["data"]],[30,5],[30,6],[28,[37,20],null,[["token"],[[33,16]]]],[28,[37,14],[[30,0],"reauthorize"],null]]],[["default"],[[[[1,"\\n\\n"],[41,[33,30],[[[1," "],[8,[39,31],null,[["@error","@login"],[[99,30,["@error"]],[30,11,["login","open"]]]],null],[1,"\\n"]],[]],[[[1," "],[8,[39,32],null,[["@name","@model"],["application",[28,[37,20],null,[["app","user","dc","dcs"],[[30,11],[28,[37,20],null,[["token"],[[33,16]]]],[30,10,["data"]],[30,9]]]]]],[["default"],[[[[1,"\\n "],[46,[28,[37,34],null,null],null,null,null],[1,"\\n "]],[12]]]]],[1,"\\n\\n"],[1," "],[8,[39,35],[[24,0,"view-loader"]],null,null],[1,"\\n"]],[]]],[1,"\\n "]],[11]]]]],[1,"\\n"]],[]],null],[1," "]],[10]]]]],[1,"\\n"]],[]],null]],[8,9]]],[1," "]],[7]]]]],[1,"\\n"]],[5,6]]]],[]]]],[]],[[[1," "],[8,[39,32],null,[["@name","@model"],["application",[28,[37,20],null,[["user"],[[28,[37,20],null,[["token"],[[33,16]]]]]]]]],[["default"],[[[[1,"\\n "],[46,[28,[37,34],null,null],null,null,null],[1,"\\n "]],[13]]]]],[1,"\\n"]],[]]]],[1]]]]],[1,"\\n"]],["route","source","value","key","partition","nspace","dcs","dc","dcs","dc","consul","o","o"],false,["route","routeName","if","can","document-attrs","data-source","uri","route-action","each","-each-in","and","includes","array","concat","action","mut","token","not-eq","eq","did-insert","hash","env","notfound","let","or","nofound","object-at","cached-model","gt","hashicorp-consul","error","app-error","outlet","component","-outlet","consul/loader"]]',moduleName:"consul-ui/templates/application.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/components/basic-dropdown-content",["exports","ember-basic-dropdown/templates/components/basic-dropdown-content"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/templates/components/basic-dropdown-optional-tag",["exports","ember-basic-dropdown/templates/components/basic-dropdown-optional-tag"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/templates/components/basic-dropdown-trigger",["exports","ember-basic-dropdown/templates/components/basic-dropdown-trigger"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/templates/components/basic-dropdown",["exports","ember-basic-dropdown/templates/components/basic-dropdown"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/templates/dc",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"zSQnZ2jK",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@name","@model"],[[99,1,["@name"]],[30,1,["model"]]]],[["default"],[[[[1,"\\n "],[46,[28,[37,4],null,null],null,null,null],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","o"],false,["route","routeName","outlet","component","-outlet"]]',moduleName:"consul-ui/templates/dc.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/acls",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"U8Va7GUq",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@name","@model"],[[99,1,["@name"]],[30,1,["model"]]]],[["default"],[[[[1,"\\n "],[46,[28,[37,4],null,null],null,null,null],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","o"],false,["route","routeName","outlet","component","-outlet"]]',moduleName:"consul-ui/templates/dc/acls.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/acls/auth-methods/index",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"RVzHvzAb",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/auth-methods",[28,[37,4],null,[["partition","nspace","dc"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,5],null,[["@name"],["error"]],[["default"],[[[[1,"\\n"],[41,[28,[37,7],[[30,2,["error","status"]],"401"],null],[[[1," "],[8,[39,8],null,null,null],[1,"\\n"]],[]],[[[1," "],[8,[39,9],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n"]],[]]],[1," "]],[]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[28,[37,4],null,[["value","change"],[[28,[37,11],[[33,12],"MethodName:asc"],null],[28,[37,13],[[30,0],[28,[37,14],[[33,12]],null]],[["value"],["target.selected"]]]]]],[28,[37,4],null,[["kind","source","searchproperty"],[[28,[37,4],null,[["value","change"],[[52,[33,15],[28,[37,16],[[33,15],","],null],[27]],[28,[37,13],[[30,0],[28,[37,14],[[33,15]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,4],null,[["value","change"],[[52,[33,17],[28,[37,16],[[33,17],","],null],[27]],[28,[37,13],[[30,0],[28,[37,14],[[33,17]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,4],null,[["value","change","default"],[[52,[28,[37,18],[[33,19],[27]],null],[28,[37,16],[[33,19],","],null],[33,20]],[28,[37,13],[[30,0],[28,[37,14],[[33,19]],null]],[["value"],["target.selectedItems"]]],[33,20]]]]]]],[30,2,["data"]]],[[[1,"\\n\\n "],[8,[39,21],null,[["@login"],[[30,1,["model","app","login","open"]]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n "],[8,[30,1,["Title"]],null,[["@title"],["Auth Methods"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["toolbar"]],[["default"],[[[[1,"\\n"],[41,[28,[37,22],[[30,5,["length"]],0],null],[[[1," "],[8,[39,23],null,[["@search","@onsearch","@sort","@filter"],[[99,24,["@search"]],[28,[37,13],[[30,0],[28,[37,14],[[33,24]],null]],[["value"],["target.value"]]],[30,3],[30,4]]],null],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,25],null,[["@type","@sort","@filters","@search","@items"],["auth-method",[30,3,["value"]],[30,4],[99,24,["@search"]],[30,5]]],[["default"],[[[[1,"\\n "],[8,[30,6,["Collection"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,26],null,[["@items"],[[30,6,["items"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,6,["Empty"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,27],null,[["@login"],[[30,1,["model","app","login","open"]]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,28],["routes.dc.acls.auth-methods.index.empty.header"],[["items"],[[30,5,["length"]]]]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[1,[28,[35,28],["routes.dc.acls.auth-methods.index.empty.body"],[["items","htmlSafe"],[[30,5,["length"]],true]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,29],null,[["@text","@href","@icon","@iconPosition","@size"],["Documentation on auth methods",[29,[[28,[37,30],["CONSUL_DOCS_URL"],null],"/security/acl/auth-methods"]],"docs-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,29],null,[["@text","@href","@icon","@iconPosition","@size"],["Read the API Docs",[29,[[28,[37,30],["CONSUL_DOCS_API_URL"],null],"/acl/auth-methods.html"]],"learn-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[3,4,5]]],[1," "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","loader","sort","filters","items","collection"],false,["route","routeName","data-loader","uri","hash","block-slot","if","eq","consul/acl/disabled","app-error","let","or","sortBy","action","mut","kind","split","source","not-eq","searchproperty","searchProperties","app-view","gt","consul/auth-method/search-bar","search","data-collection","consul/auth-method/list","empty-state","t","hds/link/standalone","env"]]',moduleName:"consul-ui/templates/dc/acls/auth-methods/index.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/acls/auth-methods/show",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"HUExCiVZ",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/auth-method/${name}",[28,[37,4],null,[["partition","nspace","dc","name"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[30,1,["params","id"]]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,5],null,[["@name"],["error"]],[["default"],[[[[1,"\\n"],[41,[28,[37,7],[[30,2,["error","status"]],"401"],null],[[[1," "],[8,[39,8],null,null,null],[1,"\\n"]],[]],[[[1," "],[8,[39,9],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n"]],[]]],[1," "]],[]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[30,2,["data"]]],[[[1," "],[8,[39,11],null,null,[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["breadcrumbs"]],[["default"],[[[[1,"\\n "],[10,"ol"],[12],[1,"\\n "],[10,"li"],[12],[10,3],[15,6,[28,[37,12],["dc.acls.auth-methods"],null]],[12],[1,"All Auth Methods"],[13],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n "],[8,[30,1,["Title"]],null,[["@title"],[[30,3,["Name"]]]],null],[1,"\\n "],[13],[1,"\\n "],[8,[39,13],null,[["@item"],[[30,3]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["nav"]],[["default"],[[[[1,"\\n "],[8,[39,14],null,[["@items"],[[28,[37,15],[[28,[37,16],[[28,[37,4],null,[["label","href","selected"],["General info",[28,[37,12],["dc.acls.auth-methods.show.auth-method"],null],[28,[37,17],["dc.acls.auth-methods.show.auth-method"],null]]]],[52,[28,[37,18],["use nspaces"],null],[28,[37,4],null,[["label","href","selected"],["Namespace rules",[28,[37,12],["dc.acls.auth-methods.show.nspace-rules"],null],[28,[37,17],["dc.acls.auth-methods.show.nspace-rules"],null]]]],""],[28,[37,4],null,[["label","href","selected"],["Binding rules",[28,[37,12],["dc.acls.auth-methods.show.binding-rules"],null],[28,[37,17],["dc.acls.auth-methods.show.binding-rules"],null]]]]],null]],null]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,19],null,[["@name","@model"],[[99,1,["@name"]],[28,[37,4],null,[["item"],[[30,3]]]]]],[["default"],[[[[1,"\\n "],[46,[28,[37,21],null,null],null,null,null],[1,"\\n "]],[4]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[3]]],[1," "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]]],["route","loader","item","o"],false,["route","routeName","data-loader","uri","hash","block-slot","if","eq","consul/acl/disabled","app-error","let","app-view","href-to","consul/auth-method/type","tab-nav","compact","array","is-href","can","outlet","component","-outlet"]]',moduleName:"consul-ui/templates/dc/acls/auth-methods/show.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/acls/auth-methods/show/auth-method",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"eqP++7Wz",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[10,0],[14,0,"tab-section"],[12],[1,"\\n "],[8,[39,2],null,[["@item"],[[30,1,["model","item"]]]],null],[1,"\\n "],[13],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route"],false,["route","routeName","consul/auth-method/view"]]',moduleName:"consul-ui/templates/dc/acls/auth-methods/show/auth-method.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/acls/auth-methods/show/binding-rules",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"P/K1HFfv",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/binding-rules/for-auth-method/${name}",[28,[37,4],null,[["partition","nspace","dc","name"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[30,1,["params","id"]]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,5],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[30,2,["data"]]],[[[1,"\\n "],[10,0],[14,0,"tab-section"],[12],[1,"\\n"],[41,[28,[37,9],[[30,3,["length"]],0],null],[[[1," "],[10,2],[12],[1,"\\n Binding rules allow an operator to express a systematic way of automatically linking roles and service identities to newly created tokens without operator intervention.\\n "],[13],[1,"\\n "],[10,2],[12],[1,"\\n Successful authentication with an auth method returns a set of trusted identity attributes corresponding to the authenticated identity. Those attributes are matched against all configured binding rules for that auth method to determine what privileges to grant the Consul ACL token it will ultimately create.\\n "],[13],[1,"\\n "],[10,"hr"],[12],[13],[1,"\\n"],[42,[28,[37,11],[[28,[37,11],[[30,3]],null]],null],null,[[[1," "],[8,[39,12],null,[["@item"],[[30,4]]],null],[1,"\\n "],[10,"hr"],[12],[13],[1,"\\n"]],[4]],null]],[]],[[[1," "],[8,[39,13],null,null,[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,14],["routes.dc.acls.auth-methods.show.binding-rules.index.empty.header"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[1,[28,[35,14],["routes.dc.acls.auth-methods.show.binding-rules.index.empty.body"],[["htmlSafe"],[true]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[10,"li"],[14,0,"docs-link"],[12],[1,"\\n "],[10,3],[15,6,[29,[[28,[37,15],["CONSUL_DOCS_API_URL"],null],"/acl/binding-rules"]]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[1,"Read the documentation"],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n"]],[3]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","loader","items","item"],false,["route","routeName","data-loader","uri","hash","block-slot","app-error","let","if","gt","each","-track-array","consul/auth-method/binding-list","empty-state","t","env"]]',moduleName:"consul-ui/templates/dc/acls/auth-methods/show/binding-rules.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/acls/auth-methods/show/nspace-rules",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"L5CJq4k2",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n"],[44,[[30,1,["model","item"]]],[[[1," "],[10,0],[14,0,"tab-section"],[12],[1,"\\n"],[41,[28,[37,4],[[30,2,["NamespaceRules","length"]],0],null],[[[1," "],[10,2],[12],[1,"\\n A set of rules that can control which namespace tokens created via this auth method will be created within. Unlike binding rules, the first matching namespace rule wins.\\n "],[13],[1,"\\n "],[8,[39,5],null,[["@items"],[[30,2,["NamespaceRules"]]]],null],[1,"\\n"]],[]],[[[1," "],[8,[39,6],null,null,[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,8],[[28,[37,9],[[30,1,["t"]],"empty.header"],null]],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[1,[28,[35,8],[[28,[37,9],[[30,1,["t"]],"empty.body",[28,[37,10],null,[["htmlSafe"],[true]]]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[10,"li"],[14,0,"docs-link"],[12],[1,"\\n "],[10,3],[15,6,[29,[[28,[37,11],["CONSUL_DOCS_API_URL"],null],"/acl/auth-methods#namespacerules"]]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[1,"Read the documentation"],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n"]],[2]]]],[1]]]]],[1,"\\n"]],["route","item"],false,["route","routeName","let","if","gt","consul/auth-method/nspace-list","empty-state","block-slot","compute","fn","hash","env"]]',moduleName:"consul-ui/templates/dc/acls/auth-methods/show/nspace-rules.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/acls/index",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"kWA9U8QS",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["replaceWith","dc.acls.tokens"],null]],null]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route"],false,["route","routeName","did-insert","route-action"]]',moduleName:"consul-ui/templates/dc/acls/index.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/acls/policies/-form",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"k8B3pmJI",block:'[[[10,"form"],[12],[1,"\\n "],[8,[39,0],null,[["@form","@partition","@nspace","@item"],[[99,1,["@form"]],[99,2,["@partition"]],[99,3,["@nspace"]],[99,4,["@item"]]]],[["default"],[[[[1,"\\n"],[1," "],[8,[39,5],null,[["@name"],["template"]],null],[1,"\\n "]],[]]]]],[1,"\\n"],[41,[28,[37,7],[[33,8]],null],[[[1," "],[8,[39,9],null,[["@src","@onchange"],[[28,[37,10],["/${partition}/${nspace}/${dc}/tokens/for-policy/${id}",[28,[37,11],null,[["partition","nspace","dc","id"],[[33,2],[33,3],[33,12],[28,[37,13],[[33,14],""],null]]]]],null],[28,[37,15],[[30,0],[28,[37,16],[[33,17]],null]],[["value"],["data"]]]]],null],[1,"\\n"],[41,[28,[37,18],[[33,17,["length"]],0],null],[[[1," "],[8,[39,19],null,[["@caption","@items"],["Applied to the following tokens:",[99,17,["@items"]]]],null],[1,"\\n"]],[]],null]],[]],null],[1," "],[10,0],[12],[1,"\\n "],[8,[39,20],null,null,[["default"],[[[[1,"\\n"],[41,[28,[37,21],[[33,8],[28,[37,22],["create tokens"],null]],null],[[[1," "],[8,[39,23],[[16,"disabled",[52,[28,[37,13],[[33,4,["isPristine"]],[33,4,["isInvalid"]],[28,[37,24],[[33,4,["Name"]],""],null]],null],"disabled"]],[24,4,"submit"],[4,[38,25],["click",[28,[37,26],["create",[33,4]],null]],null]],[["@text"],["Save"]],null],[1,"\\n"]],[]],[[[41,[28,[37,22],["write policy"],[["item"],[[33,4]]]],[[[1," "],[8,[39,23],[[16,"disabled",[52,[33,4,["isInvalid"]],"disabled"]],[24,4,"submit"],[4,[38,25],["click",[28,[37,26],["update",[33,4]],null]],null]],[["@text"],["Save"]],null],[1,"\\n"]],[]],null]],[]]],[1," "],[8,[39,23],[[24,4,"reset"],[4,[38,15],[[30,0],"cancel",[33,4]],null]],[["@text","@color"],["Cancel","secondary"]],null],[1,"\\n"],[41,[28,[37,21],[[28,[37,7],[[33,8]],null],[28,[37,22],["delete policy"],[["item"],[[33,4]]]]],null],[[[1," "],[8,[39,27],null,[["@message"],["Are you sure you want to delete this Policy?"]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["action"]],[["default"],[[[[1,"\\n "],[8,[39,23],[[4,[38,15],[[30,0],[30,1],"delete",[33,4]],null]],[["@text","@color"],["Delete","critical"]],null],[1,"\\n "]],[1]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["dialog"]],[["default"],[[[[1,"\\n"],[41,[28,[37,18],[[33,17,["length"]],0],null],[[[1," "],[8,[39,28],null,[["@onclose","@open","@aria"],[[28,[37,15],[[30,0],[30,3]],null],true,[28,[37,11],null,[["label"],["Policy in Use"]]]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"Policy in Use"],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n This Policy is currently in use. If you choose to delete this Policy, it will be removed from the\\n following "],[10,"strong"],[12],[1,[33,17,["length"]]],[1," Tokens"],[13],[1,":\\n "],[13],[1,"\\n "],[8,[39,19],null,[["@items","@target"],[[99,17,["@items"]],"_blank"]],null],[1,"\\n "],[10,2],[12],[1,"\\n This action cannot be undone. "],[1,[30,4]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[8,[39,20],null,null,[["default"],[[[[1,"\\n "],[8,[39,23],[[4,[38,15],[[30,0],[30,2]],null]],[["@text","@color"],["Yes, Delete","critical"]],null],[1,"\\n "],[8,[39,23],[[4,[38,15],[[30,0],[30,5]],null]],[["@text","@color"],["Cancel","secondary"]],null],[1,"\\n "]],[]]]]],[1,"\\n "]],[5]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],[[[1," "],[8,[39,29],null,[["@message","@execute","@cancel"],[[30,4],[30,2],[30,3]]],null],[1,"\\n"]],[]]],[1," "]],[2,3,4]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[13],[1,"\\n"],[13],[1,"\\n"]],["confirm","execute","cancel","message","close"],false,["policy-form","form","partition","nspace","item","block-slot","if","not","create","data-source","uri","hash","dc","or","id","action","mut","items","gt","token-list","hds/button-set","and","can","hds/button","eq","on","route-action","confirmation-dialog","modal-dialog","delete-confirmation"]]',moduleName:"consul-ui/templates/dc/acls/policies/-form.hbs",isStrictMode:!1}) -e.default=n})) -define("consul-ui/templates/dc/acls/policies/edit",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"zMcjLQlh",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/policy/${id}",[28,[37,4],null,[["partition","nspace","dc","id"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[28,[37,5],[[30,1,["params","id"]],""],null]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,6],null,[["@name"],["error"]],[["default"],[[[[1,"\\n"],[41,[28,[37,8],[[30,2,["error","status"]],"401"],null],[[[1," "],[8,[39,9],null,null,null],[1,"\\n"]],[]],[[[1," "],[8,[39,10],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n"]],[]]],[1," "]],[]]]]],[1,"\\n\\n "],[8,[39,6],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[30,1,["params","dc"]],[30,1,["params","partition"]],[30,1,["params","nspace"]],[28,[37,5],[[30,1,["params","id"]],""],null],[30,2,["data"]],[30,2,["data","isNew"]]],[[[1," "],[8,[39,12],null,[["@login"],[[30,1,["model","app","login","open"]]]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["breadcrumbs"]],[["default"],[[[[1,"\\n "],[10,"ol"],[12],[1,"\\n "],[10,"li"],[12],[10,3],[15,6,[28,[37,13],["dc.acls.policies"],null]],[12],[1,"All Policies"],[13],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n"],[41,[30,8],[[[1," "],[8,[30,1,["Title"]],null,[["@title"],["New Policy"]],null],[1,"\\n"]],[]],[[[41,[28,[37,14],["write policy"],[["item"],[[30,7]]]],[[[1," "],[8,[30,1,["Title"]],null,[["@title"],["Edit Policy"]],null],[1,"\\n"]],[]],[[[1," "],[8,[30,1,["Title"]],null,[["@title"],["View Policy"]],null],[1,"\\n"]],[]]]],[]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["content"]],[["default"],[[[[1,"\\n"],[41,[28,[37,15],[[30,8]],null],[[[1," "],[10,0],[14,0,"definition-table"],[12],[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"Policy ID"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,16],null,[["@value","@name"],[[30,7,["ID"]],"Policy ID"]],null],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[28,[37,8],[[28,[37,17],[[30,7]],null],"policy-management"],null],[[[1," "],[8,[39,18],[[24,0,"mb-3 mt-2"]],[["@type","@icon"],["inline","star-fill"]],[["default"],[[[[1,"\\n "],[8,[30,9,["Title"]],null,null,[["default"],[[[[1,"Management"]],[]]]]],[1,"\\n "],[8,[30,9,["Description"]],null,null,[["default"],[[[[1,"This global-management token is built into Consul\'s policy system. You can apply this special policy to tokens for full access. This policy is not editable or removeable, but can be ignored by not applying it to any tokens."]],[]]]]],[1,"\\n "],[8,[30,9,["Link::Standalone"]],null,[["@text","@href","@icon","@iconPosition"],["Learn more",[29,[[28,[37,19],["CONSUL_DOCS_URL"],null],"/guides/acl.html#builtin-policies"]],"docs-link","trailing"]],null],[1,"\\n "]],[9]]]]],[1,"\\n "],[10,0],[14,0,"definition-table"],[12],[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"Name"],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,7,["Name"]]],[13],[1,"\\n "],[10,"dt"],[12],[1,"Valid Datacenters"],[13],[1,"\\n "],[10,"dd"],[12],[1,[28,[35,20],[", ",[28,[37,21],[[30,7]],null]],null]],[13],[1,"\\n "],[10,"dt"],[12],[1,"Description"],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,7,["Description"]]],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[8,[39,22],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/tokens/for-policy/${id}",[28,[37,4],null,[["partition","nspace","dc","id"],[[30,4],[30,5],[30,3],[30,6]]]]],null]]],[["default"],[[[[1,"\\n"],[41,[28,[37,23],[[30,10,["data","length"]],0],null],[[[1," "],[8,[39,24],null,[["@caption","@items"],["Applied to the following tokens:",[30,10,["data"]]]],null],[1,"\\n"]],[]],null],[1," "]],[10]]]]],[1,"\\n"]],[]],[[[1," "],[19,"dc/acls/policies/form",[1,2,3,4,5,6,7,8]],[1,"\\n"]],[]]],[1," "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[3,4,5,6,7,8]]],[1," "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]]],["route","loader","dc","partition","nspace","id","item","create","A","loader"],true,["route","routeName","data-loader","uri","hash","or","block-slot","if","eq","consul/acl/disabled","app-error","let","app-view","href-to","can","not","copyable-code","policy/typeof","hds/alert","env","join","policy/datacenters","data-source","gt","token-list","partial"]]',moduleName:"consul-ui/templates/dc/acls/policies/edit.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/acls/policies/index",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"gfKx11yz",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/policies",[28,[37,4],null,[["partition","nspace","dc"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,5],null,[["@name"],["error"]],[["default"],[[[[1,"\\n"],[41,[28,[37,7],[[30,2,["error","status"]],"401"],null],[[[1," "],[8,[39,8],null,null,null],[1,"\\n"]],[]],[[[1," "],[8,[39,9],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n"]],[]]],[1," "]],[]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[28,[37,4],null,[["value","change"],[[28,[37,11],[[33,12],"Name:asc"],null],[28,[37,13],[[30,0],[28,[37,14],[[33,12]],null]],[["value"],["target.selected"]]]]]],[28,[37,4],null,[["kind","datacenter","searchproperty"],[[28,[37,4],null,[["value","change"],[[52,[33,15],[28,[37,16],[[33,15],","],null],[27]],[28,[37,13],[[30,0],[28,[37,14],[[33,15]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,4],null,[["value","change"],[[52,[33,17],[28,[37,16],[[33,17],","],null],[27]],[28,[37,13],[[30,0],[28,[37,14],[[33,17]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,4],null,[["value","change","default"],[[52,[28,[37,18],[[33,19],[27]],null],[28,[37,16],[[33,19],","],null],[33,20]],[28,[37,13],[[30,0],[28,[37,14],[[33,19]],null]],[["value"],["target.selectedItems"]]],[33,20]]]]]]],[30,2,["data"]]],[[[1," "],[8,[39,21],null,[["@login"],[[30,1,["model","app","login","open"]]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n "],[8,[30,1,["Title"]],null,[["@title"],["Policies"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n"],[41,[28,[37,22],["create policies"],null],[[[1," "],[8,[39,23],null,[["@text","@route"],["Create","dc.acls.policies.create"]],null],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["toolbar"]],[["default"],[[[[1,"\\n"],[41,[28,[37,24],[[30,5,["length"]],0],null],[[[1," "],[8,[39,25],null,[["@partition","@search","@onsearch","@sort","@filter"],[[30,1,["params","partition"]],[99,26,["@search"]],[28,[37,13],[[30,0],[28,[37,14],[[33,26]],null]],[["value"],["target.value"]]],[30,3],[30,4]]],null],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,27],null,[["@type","@sort","@filters","@search","@items"],["policy",[30,3,["value"]],[30,4],[99,26,["@search"]],[30,5]]],[["default"],[[[[1,"\\n "],[8,[30,6,["Collection"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,28],null,[["@items","@ondelete"],[[30,6,["items"]],[28,[37,29],["delete"],null]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,6,["Empty"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,30],null,[["@login"],[[30,1,["model","app","login","open"]]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,31],["routes.dc.acls.policies.index.empty.header"],[["items"],[[30,5,["length"]]]]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[1,[28,[35,31],["routes.dc.acls.policies.index.empty.body"],[["items","htmlSafe"],[[30,5,["length"]],true]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,32],null,[["@text","@href","@icon","@iconPosition","@size"],["Documentation on policies",[29,[[28,[37,33],["CONSUL_DOCS_URL"],null],"/commands/acl/policy"]],"docs-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,32],null,[["@text","@href","@icon","@iconPosition","@size"],["Take the tutorial",[29,[[28,[37,33],["CONSUL_LEARN_URL"],null],"/consul/security-networking/managing-acl-policies"]],"learn-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n\\n"]],[3,4,5]]],[1," "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]]],["route","loader","sort","filters","items","collection"],false,["route","routeName","data-loader","uri","hash","block-slot","if","eq","consul/acl/disabled","app-error","let","or","sortBy","action","mut","kind","split","datacenter","not-eq","searchproperty","searchProperties","app-view","can","hds/button","gt","consul/policy/search-bar","search","data-collection","consul/policy/list","route-action","empty-state","t","hds/link/standalone","env"]]',moduleName:"consul-ui/templates/dc/acls/policies/index.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/acls/roles/-form",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"V+NwcqN9",block:'[[[10,"form"],[12],[1,"\\n "],[8,[39,0],null,[["@form","@item","@dc","@nspace","@partition"],[[99,1,["@form"]],[99,2,["@item"]],[99,3,["@dc"]],[99,4,["@nspace"]],[99,5,["@partition"]]]],null],[1,"\\n"],[41,[28,[37,7],[[33,8]],null],[[[1," "],[8,[39,9],null,[["@src"],[[28,[37,10],["/${partition}/${nspace}/${dc}/tokens/for-role/${id}",[28,[37,11],null,[["partition","nspace","dc","id"],[[33,5],[33,4],[33,3],[28,[37,12],[[33,13],""],null]]]]],null]]],[["default"],[[[[1,"\\n"],[41,[28,[37,14],[[30,1,["data","length"]],0],null],[[[1," "],[10,"h2"],[12],[1,"Where is this role used?"],[13],[1,"\\n "],[10,2],[12],[1,"\\n We\'re only able to show information for the primary datacenter and the current datacenter. This list may not\\n show every case where this role is applied.\\n "],[13],[1,"\\n "],[8,[39,15],null,[["@caption","@items"],["Tokens",[30,1,["data"]]]],null],[1,"\\n"]],[]],null],[1," "]],[1]]]]],[1,"\\n"]],[]],null],[1," "],[10,0],[12],[1,"\\n "],[8,[39,16],null,null,[["default"],[[[[1,"\\n"],[41,[28,[37,17],[[33,8],[28,[37,18],["create roles"],null]],null],[[[1," "],[8,[39,19],[[16,"disabled",[28,[37,12],[[33,2,["isPristine"]],[33,2,["isInvalid"]],[28,[37,20],[[33,2,["Name"]],""],null]],null]],[24,4,"submit"],[4,[38,21],["click",[28,[37,22],["create",[33,2]],null]],null]],[["@text"],["Save"]],null],[1,"\\n"]],[]],[[[41,[28,[37,18],["write role"],[["item"],[[33,2]]]],[[[1," "],[8,[39,19],[[16,"disabled",[33,2,["isInvalid"]]],[24,4,"submit"],[4,[38,21],["click",[28,[37,22],["update",[33,2]],null]],null]],[["@text"],["Save"]],null],[1,"\\n"]],[]],null]],[]]],[1," "],[8,[39,19],[[24,4,"reset"],[4,[38,23],[[30,0],"cancel",[33,2]],null]],[["@text","@color"],["Cancel","secondary"]],null],[1,"\\n\\n"],[41,[28,[37,17],[[28,[37,7],[[33,8]],null],[28,[37,18],["delete role"],[["item"],[[33,2]]]]],null],[[[1," "],[8,[39,24],null,[["@message"],["Are you sure you want to delete this Role?"]],[["default"],[[[[1,"\\n "],[8,[39,25],null,[["@name"],["action"]],[["default"],[[[[1,"\\n "],[8,[39,19],[[4,[38,23],[[30,0],[30,2],"delete",[33,2]],null]],[["@text","@color"],["Delete","critical"]],null],[1,"\\n "]],[2]]]]],[1,"\\n "],[8,[39,25],null,[["@name"],["dialog"]],[["default"],[[[[1,"\\n"],[41,[28,[37,14],[[33,26,["length"]],0],null],[[[1," "],[8,[39,27],null,[["@onclose","@aria"],[[28,[37,23],[[30,0],[30,4]],null],[28,[37,11],null,[["label"],["Role in Use"]]]]],[["default"],[[[[1,"\\n "],[8,[39,25],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"Role in Use"],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,25],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n This Role is currently in use. If you choose to delete this Role, it will be removed from the\\n following "],[10,"strong"],[12],[1,[33,26,["length"]]],[1," Tokens"],[13],[1,":\\n "],[13],[1,"\\n "],[8,[39,15],null,[["@items","@target"],[[99,26,["@items"]],"_blank"]],null],[1,"\\n "],[10,2],[12],[1,"\\n This action cannot be undone. "],[1,[30,5]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,25],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[8,[39,16],null,null,[["default"],[[[[1,"\\n "],[8,[39,19],[[4,[38,23],[[30,0],[30,3]],null]],[["@text","@color"],["Yes, Delete","critical"]],null],[1,"\\n "],[8,[39,19],[[4,[38,23],[[30,0],[30,6]],null]],[["@text","@color"],["Cancel","secondary"]],null],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],[[[1," "],[8,[39,28],null,[["@message","@execute","@cancel"],[[30,5],[30,3],[30,4]]],null],[1,"\\n"]],[]]],[1," "]],[3,4,5]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[13],[1,"\\n"],[13],[1,"\\n"]],["loader","confirm","execute","cancel","message","close"],false,["role-form","form","item","dc","nspace","partition","if","not","create","data-source","uri","hash","or","id","gt","token-list","hds/button-set","and","can","hds/button","eq","on","route-action","action","confirmation-dialog","block-slot","items","modal-dialog","delete-confirmation"]]',moduleName:"consul-ui/templates/dc/acls/roles/-form.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/acls/roles/edit",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"J3r9dfLo",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/role/${id}",[28,[37,4],null,[["partition","nspace","dc","id"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[28,[37,5],[[30,1,["params","id"]],""],null]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,6],null,[["@name"],["error"]],[["default"],[[[[1,"\\n"],[41,[28,[37,8],[[30,2,["error","status"]],"401"],null],[[[1," "],[8,[39,9],null,null,null],[1,"\\n"]],[]],[[[1," "],[8,[39,10],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n"]],[]]],[1," "]],[]]]]],[1,"\\n\\n "],[8,[39,6],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[30,1,["params","dc"]],[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,2,["data"]],[30,2,["data","isNew"]]],[[[1," "],[8,[39,12],null,[["@login"],[[30,1,["model","app","login","open"]]]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["breadcrumbs"]],[["default"],[[[[1,"\\n "],[10,"ol"],[12],[1,"\\n "],[10,"li"],[12],[10,3],[15,6,[28,[37,13],["dc.acls.roles"],null]],[12],[1,"All Roles"],[13],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n"],[41,[30,7],[[[1," "],[8,[30,1,["Title"]],null,[["@title"],["New Role"]],null],[1,"\\n"]],[]],[[[1," "],[8,[30,1,["Title"]],null,[["@title"],["Edit Role"]],null],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["content"]],[["default"],[[[[1,"\\n"],[41,[28,[37,14],[[30,7]],null],[[[1," "],[10,0],[14,0,"definition-table"],[12],[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"Role ID"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,15],null,[["@value","@name"],[[30,6,["ID"]],"Role ID"]],null],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1," "],[19,"dc/acls/roles/form",[1,2,3,4,5,6,7]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[3,4,5,6,7]]],[1," "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]]],["route","loader","dc","partition","nspace","item","create"],true,["route","routeName","data-loader","uri","hash","or","block-slot","if","eq","consul/acl/disabled","app-error","let","app-view","href-to","not","copyable-code","partial"]]',moduleName:"consul-ui/templates/dc/acls/roles/edit.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/acls/roles/index",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"nMIoNCst",block:'[[[8,[39,0],null,[["@name","@title"],[[99,1,["@name"]],"Roles"]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/roles",[28,[37,4],null,[["partition","nspace","dc"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,5],null,[["@name"],["error"]],[["default"],[[[[1,"\\n"],[41,[28,[37,7],[[30,2,["error","status"]],"401"],null],[[[1," "],[8,[39,8],null,null,null],[1,"\\n"]],[]],[[[1," "],[8,[39,9],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n"]],[]]],[1," "]],[]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[28,[37,4],null,[["value","change"],[[28,[37,11],[[33,12],"Name:asc"],null],[28,[37,13],[[30,0],[28,[37,14],[[33,12]],null]],[["value"],["target.selected"]]]]]],[28,[37,4],null,[["searchproperty"],[[28,[37,4],null,[["value","change","default"],[[52,[28,[37,15],[[33,16],[27]],null],[28,[37,17],[[33,16],","],null],[33,18]],[28,[37,13],[[30,0],[28,[37,14],[[33,16]],null]],[["value"],["target.selectedItems"]]],[33,18]]]]]]],[30,2,["data"]]],[[[1,"\\n "],[8,[39,19],null,[["@login"],[[30,1,["model","app","login","open"]]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n "],[8,[30,1,["Title"]],null,[["@title"],["Roles"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n"],[41,[28,[37,20],["create roles"],null],[[[1," "],[8,[39,21],null,[["@text","@route"],["Create","dc.acls.roles.create"]],null],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["toolbar"]],[["default"],[[[[1,"\\n"],[41,[28,[37,22],[[30,5,["length"]],0],null],[[[1," "],[8,[39,23],null,[["@search","@onsearch","@sort","@filter"],[[99,24,["@search"]],[28,[37,13],[[30,0],[28,[37,14],[[33,24]],null]],[["value"],["target.value"]]],[30,3],[30,4]]],null],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,25],null,[["@type","@sort","@filters","@search","@items"],["role",[30,3,["value"]],[30,4],[99,24,["@search"]],[30,5]]],[["default"],[[[[1,"\\n "],[8,[30,6,["Collection"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,26],null,[["@items","@ondelete"],[[30,6,["items"]],[28,[37,27],["delete"],null]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,6,["Empty"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,28],null,[["@login"],[[30,1,["model","app","login","open"]]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,29],["routes.dc.acls.roles.index.empty.header"],[["items"],[[30,5,["length"]]]]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[1,[28,[35,29],["routes.dc.acls.roles.index.empty.body"],[["items","htmlSafe"],[[30,5,["length"]],true]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,30],null,[["@text","@href","@icon","@iconPosition","@size"],["Documentation on roles",[29,[[28,[37,31],["CONSUL_DOCS_URL"],null],"/commands/acl/role"]],"docs-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,30],null,[["@text","@href","@icon","@iconPosition","@size"],["Read the API Docs",[29,[[28,[37,31],["CONSUL_DOCS_API_URL"],null],"/acl/roles.html"]],"learn-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[3,4,5]]],[1," "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]]],["route","loader","sort","filters","items","collection"],false,["route","routeName","data-loader","uri","hash","block-slot","if","eq","consul/acl/disabled","app-error","let","or","sortBy","action","mut","not-eq","searchproperty","split","searchProperties","app-view","can","hds/button","gt","consul/role/search-bar","search","data-collection","consul/role/list","route-action","empty-state","t","hds/link/standalone","env"]]',moduleName:"consul-ui/templates/dc/acls/roles/index.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/acls/tokens/-fieldsets-legacy",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"igHmo1ap",block:'[[[1," "],[10,"fieldset"],[15,"disabled",[52,[28,[37,1],[[28,[37,2],["write token"],[["item"],[[33,3]]]]],null],"disabled"]],[12],[1,"\\n "],[10,"label"],[15,0,[29,["type-text",[52,[33,3,["error","Name"]]," has-error"]]]],[12],[1,"\\n "],[10,1],[12],[1,"Name"],[13],[1,"\\n "],[8,[39,4],null,[["@value","@name","@autofocus"],[[33,3,["Description"]],"name","autofocus"]],null],[1,"\\n "],[13],[1,"\\n"],[41,false,[[[1," "],[10,0],[14,"role","radiogroup"],[15,0,[52,[33,3,["error","Type"]]," has-error"]],[12],[1,"\\n"],[42,[28,[37,6],[[28,[37,6],[[28,[37,7],["management","client"],null]],null]],null],null,[[[1," "],[10,"label"],[12],[1,"\\n "],[10,1],[12],[1,[28,[35,8],[[30,1]],null]],[13],[1,"\\n "],[10,"input"],[14,3,"Type"],[15,2,[29,[[30,1]]]],[15,"checked",[52,[28,[37,9],[[33,3,["Type"]],[30,1]],null],"checked"]],[15,"onchange",[28,[37,10],[[30,0],"change"],null]],[14,4,"radio"],[12],[13],[1,"\\n "],[13],[1,"\\n"]],[1]],null],[1," "],[13],[1,"\\n"]],[]],null],[1," "],[10,"label"],[14,0,"type-text"],[12],[1,"\\n "],[8,[39,11],null,[["@class","@name","@syntax","@value","@onkeyup"],[[52,[33,3,["error","Rules"]],"error"],"Rules","hcl",[33,3,["Rules"]],[28,[37,10],[[30,0],"change","Rules"],null]]],[["label"],[[[[1,"\\n Rules "],[10,3],[15,6,[29,[[28,[37,12],["CONSUL_DOCS_URL"],null],"/guides/acl.html#rule-specification"]]],[14,"rel","help noopener noreferrer"],[14,"target","_blank"],[12],[1,"(HCL Format)"],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n"],[41,[33,13],[[[1," "],[10,"label"],[14,0,"type-text"],[12],[1,"\\n "],[10,1],[12],[1,"ID"],[13],[1,"\\n "],[8,[39,4],null,[["@value"],[[33,3,["ID"]]]],null],[1,"\\n "],[10,"em"],[12],[1,"We\'ll generate a UUID if this field is left empty."],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n\\n"]],["type"],false,["if","not","can","item","input","each","-track-array","array","capitalize","eq","action","code-editor","env","create"]]',moduleName:"consul-ui/templates/dc/acls/tokens/-fieldsets-legacy.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/acls/tokens/-fieldsets",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"DwYj+qxa",block:'[[[10,"fieldset"],[15,"disabled",[52,[28,[37,1],[[28,[37,2],["write token"],[["item"],[[33,3]]]]],null],"disabled"]],[12],[1,"\\n"],[41,[33,4],[[[1," "],[10,0],[14,0,"type-toggle"],[12],[1,"\\n "],[10,"label"],[12],[1,"\\n "],[10,"input"],[14,3,"Local"],[15,"checked",[52,[33,5],"checked"]],[15,"onchange",[28,[37,6],[[30,0],"change"],null]],[14,4,"checkbox"],[12],[13],[1,"\\n "],[10,1],[12],[1,"Restrict this token to a local datacenter?"],[13],[1,"\\n "],[13],[1,"\\n "],[10,"em"],[12],[1,"Local tokens get set in the Raft store of the local DC and do not ever get transmitted to the primary DC or replicated to any other DC."],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1," "],[10,"label"],[14,0,"type-text validate-optional"],[12],[1,"\\n "],[10,1],[12],[1,"Description (Optional)"],[13],[1,"\\n "],[10,"textarea"],[14,3,"Description"],[15,"oninput",[28,[37,6],[[30,0],"change"],null]],[12],[1,[33,3,["Description"]]],[13],[1,"\\n "],[13],[1,"\\n"],[13],[1,"\\n"],[10,"fieldset"],[14,1,"roles"],[12],[1,"\\n "],[10,"h2"],[12],[1,"Roles"],[13],[1,"\\n "],[8,[39,7],null,[["@disabled","@dc","@partition","@nspace","@items"],[[28,[37,1],[[28,[37,2],["write token"],[["item"],[[33,3]]]]],null],[99,8,["@dc"]],[99,9,["@partition"]],[99,10,["@nspace"]],[33,3,["Roles"]]]],null],[1,"\\n"],[13],[1,"\\n"],[10,"fieldset"],[14,1,"policies"],[12],[1,"\\n "],[10,"h2"],[12],[1,"Policies"],[13],[1,"\\n "],[8,[39,11],null,[["@disabled","@dc","@partition","@nspace","@items"],[[28,[37,1],[[28,[37,2],["write token"],[["item"],[[33,3]]]]],null],[99,8,["@dc"]],[99,9,["@partition"]],[99,10,["@nspace"]],[33,3,["Policies"]]]],null],[1,"\\n"],[13],[1,"\\n"]],[],false,["if","not","can","item","create","Local","action","role-selector","dc","partition","nspace","policy-selector"]]',moduleName:"consul-ui/templates/dc/acls/tokens/-fieldsets.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/acls/tokens/-form",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"3VM7Ab9v",block:'[[[10,"form"],[12],[1,"\\n"],[41,[28,[37,1],[[28,[37,2],[[33,3]],null]],null],[[[1," "],[19,"dc/acls/tokens/fieldsets",[]],[1,"\\n"]],[]],[[[1," "],[19,"dc/acls/tokens/fieldsets-legacy",[]],[1,"\\n"]],[]]],[1," "],[10,0],[12],[1,"\\n "],[8,[39,5],null,null,[["default"],[[[[1,"\\n"],[41,[28,[37,6],[[33,7],[28,[37,8],["create tokens"],null]],null],[[[1," "],[8,[39,9],[[16,"disabled",[52,[28,[37,10],[[28,[37,6],[[28,[37,2],[[33,3]],null],[33,3,["isPristine"]]],null],[33,3,["isInvalid"]]],null],"disabled"]],[24,4,"submit"],[4,[38,11],["click",[28,[37,12],["create",[33,3]],null]],null]],[["@text"],["Save"]],null],[1,"\\n"]],[]],[[[41,[28,[37,8],["write token"],[["item"],[[33,3]]]],[[[1," "],[8,[39,9],[[16,"disabled",[52,[33,3,["isInvalid"]],"disabled"]],[24,4,"submit"],[4,[38,11],["click",[28,[37,12],["update",[33,3]],null]],null]],[["@text"],["Save"]],null],[1,"\\n"]],[]],null]],[]]],[1," "],[8,[39,9],[[24,4,"reset"],[4,[38,13],[[30,0],"cancel",[33,3]],null]],[["@text","@color"],["Cancel","secondary"]],null],[1,"\\n"],[41,[28,[37,6],[[28,[37,1],[[33,7]],null],[28,[37,8],["delete token"],[["item","token"],[[33,3],[33,14]]]]],null],[[[1," "],[8,[39,15],null,[["@message"],["Are you sure you want to delete this Token?"]],[["default"],[[[[1,"\\n "],[8,[39,16],null,[["@name"],["action"]],[["default"],[[[[1,"\\n "],[8,[39,9],[[4,[38,13],[[30,0],[30,1],"delete",[33,3]],null]],[["@text","@color"],["Delete","critical"]],null],[1,"\\n "]],[1]]]]],[1,"\\n "],[8,[39,16],null,[["@name"],["dialog"]],[["default"],[[[[1,"\\n "],[8,[39,17],null,[["@message","@execute","@cancel"],[[30,4],[30,2],[30,3]]],null],[1,"\\n "]],[2,3,4]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[13],[1,"\\n"],[13],[1,"\\n"]],["confirm","execute","cancel","message"],true,["if","not","token/is-legacy","item","partial","hds/button-set","and","create","can","hds/button","or","on","route-action","action","token","confirmation-dialog","block-slot","delete-confirmation"]]',moduleName:"consul-ui/templates/dc/acls/tokens/-form.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/acls/tokens/edit",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"VqbRsph6",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/token/${id}",[28,[37,4],null,[["partition","nspace","dc","id"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[28,[37,5],[[30,1,["params","id"]],""],null]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,6],null,[["@name"],["error"]],[["default"],[[[[1,"\\n"],[41,[28,[37,8],[[30,2,["error","status"]],"401"],null],[[[1," "],[8,[39,9],null,null,null],[1,"\\n"]],[]],[[[1," "],[8,[39,10],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n"]],[]]],[1," "]],[]]]]],[1,"\\n\\n "],[8,[39,6],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[30,1,["params","dc"]],[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,2,["data"]],[30,2,["data","isNew"]]],[[[1," "],[8,[39,12],null,[["@login"],[[30,1,["model","app","login","open"]]]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["breadcrumbs"]],[["default"],[[[[1,"\\n "],[10,"ol"],[12],[1,"\\n "],[10,"li"],[12],[10,3],[15,6,[28,[37,13],["dc.acls.tokens"],null]],[12],[1,"All Tokens"],[13],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n"],[41,[30,7],[[[1," "],[8,[30,1,["Title"]],null,[["@title"],["New Token"]],null],[1,"\\n"]],[]],[[[1," "],[8,[30,1,["Title"]],null,[["@title"],["Edit Token"]],null],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n"],[41,[28,[37,14],[[30,7]],null],[[[1," "],[8,[39,15],null,null,[["default"],[[[[1,"\\n"],[41,[28,[37,16],[[30,6,["AccessorID"]],[33,17,["AccessorID"]]],null],[[[1," "],[8,[39,18],null,[["@message"],["Are you sure you want to use this ACL token?"]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["action"]],[["default"],[[[[1,"\\n "],[8,[39,19],[[4,[38,20],[[30,0],[30,8],"use",[30,6]],null]],[["@text","@color"],["Use","secondary"]],null],[1,"\\n "]],[8]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["dialog"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n "],[1,[30,11]],[1,"\\n "],[13],[1,"\\n "],[8,[39,15],null,null,[["default"],[[[[1,"\\n "],[8,[39,19],[[4,[38,20],[[30,0],[30,9]],null]],[["@text","@color"],["Confirm Use","critical"]],null],[1,"\\n "],[8,[39,19],[[4,[38,20],[[30,0],[30,10]],null]],[["@text","@color"],["Cancel","secondary"]],null],[1,"\\n "]],[]]]]],[1,"\\n "]],[9,10,11]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[41,[28,[37,21],["duplicate token"],[["item"],[[30,6]]]],[[[1," "],[8,[39,19],[[4,[38,20],[[30,0],"clone",[30,6]],null]],[["@text","@color"],["Duplicate","secondary"]],null],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["content"]],[["default"],[[[[1,"\\n"],[41,[28,[37,22],[[30,6]],null],[[[1," "],[8,[39,23],[[24,0,"mb-6"]],[["@type"],["inline"]],[["default"],[[[[1,"\\n "],[8,[30,12,["Title"]],null,null,[["default"],[[[[1,"Update"]],[]]]]],[1,"\\n "],[8,[30,12,["Description"]],null,null,[["default"],[[[[1,"We have upgraded our ACL system by allowing you to create reusable policies which you can then apply to tokens. Don\'t worry, even though this token was written in the old style, it is still valid. However, we do recommend upgrading your old tokens to the new style."]],[]]]]],[1,"\\n "],[8,[30,12,["Link::Standalone"]],null,[["@text","@href","@icon","@iconPosition"],["Learn more",[29,[[28,[37,24],["CONSUL_DOCS_URL"],null],"/guides/acl-migrate-tokens.html"]],"docs-link","trailing"]],null],[1,"\\n "]],[12]]]]],[1,"\\n"]],[]],null],[41,[28,[37,14],[[30,7]],null],[[[1," "],[10,0],[14,0,"definition-table"],[12],[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"AccessorID"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,25],null,[["@value","@name"],[[30,6,["AccessorID"]],"AccessorID"]],null],[1,"\\n "],[13],[1,"\\n "],[10,"dt"],[12],[1,"Token"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[8,[39,25],null,[["@obfuscated","@value","@name"],[true,[30,6,["SecretID"]],"Token"]],null],[1,"\\n "],[13],[1,"\\n"],[41,[28,[37,26],[[28,[37,14],[[28,[37,22],[[30,6]],null]],null],[28,[37,14],[[30,7]],null]],null],[[[1," "],[10,"dt"],[12],[1,"Scope"],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[52,[30,6,["Local"]],"local","global"]],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1," "],[19,"dc/acls/tokens/form",[1,2,3,4,5,6,7]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[3,4,5,6,7]]],[1," "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]]],["route","loader","dc","partition","nspace","item","create","confirm","execute","cancel","message","A"],true,["route","routeName","data-loader","uri","hash","or","block-slot","if","eq","consul/acl/disabled","app-error","let","app-view","href-to","not","hds/button-set","not-eq","token","confirmation-dialog","hds/button","action","can","token/is-legacy","hds/alert","env","copyable-code","and","partial"]]',moduleName:"consul-ui/templates/dc/acls/tokens/edit.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/acls/tokens/index",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"vndZHRNu",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/tokens",[28,[37,4],null,[["partition","nspace","dc"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,5],null,[["@name"],["error"]],[["default"],[[[[1,"\\n"],[41,[28,[37,7],[[30,2,["error","status"]],"401"],null],[[[1," "],[8,[39,8],null,null,null],[1,"\\n"]],[]],[[[1," "],[8,[39,9],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n"]],[]]],[1," "]],[]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[28,[37,4],null,[["value","change"],[[28,[37,11],[[33,12],"CreateTime:desc"],null],[28,[37,13],[[30,0],[28,[37,14],[[33,12]],null]],[["value"],["target.selected"]]]]]],[28,[37,4],null,[["kind","searchproperty"],[[28,[37,4],null,[["value","change"],[[52,[33,15],[28,[37,16],[[33,15],","],null],[27]],[28,[37,13],[[30,0],[28,[37,14],[[33,15]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,4],null,[["value","change","default"],[[52,[28,[37,17],[[33,18],[27]],null],[28,[37,16],[[33,18],","],null],[33,19]],[28,[37,13],[[30,0],[28,[37,14],[[33,18]],null]],[["value"],["target.selectedItems"]]],[33,19]]]]]]],[30,2,["data"]]],[[[1,"\\n "],[8,[39,20],null,[["@login"],[[30,1,["model","app","login","open"]]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n "],[8,[30,1,["Title"]],null,[["@title"],["Tokens"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n"],[41,[28,[37,21],["create tokens"],null],[[[1," "],[8,[39,22],null,[["@text","@route"],["Create","dc.acls.tokens.create"]],null],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["toolbar"]],[["default"],[[[[1,"\\n"],[41,[28,[37,23],[[30,5,["length"]],0],null],[[[1," "],[8,[39,24],null,[["@search","@onsearch","@sort","@filter"],[[99,25,["@search"]],[28,[37,13],[[30,0],[28,[37,14],[[33,25]],null]],[["value"],["target.value"]]],[30,3],[30,4]]],null],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["content"]],[["default"],[[[[1,"\\n"],[41,[28,[37,26],[[30,5]],null],[[[1," "],[8,[39,27],[[24,0,"mb-3 mt-3"]],[["@type"],["inline"]],[["default"],[[[[1,"\\n "],[8,[30,6,["Title"]],null,null,[["default"],[[[[1,"Update"]],[]]]]],[1,"\\n "],[8,[30,6,["Description"]],null,null,[["default"],[[[[1,"We have upgraded our ACL System to allow the creation of reusable policies that can be applied to tokens. Read more about the changes and how to upgrade legacy tokens."]],[]]]]],[1,"\\n "],[8,[30,6,["Link::Standalone"]],null,[["@text","@href","@icon","@iconPosition"],["Learn more",[29,[[28,[37,28],["CONSUL_DOCS_URL"],null],"/guides/acl-migrate-tokens.html"]],"docs-link","trailing"]],null],[1,"\\n "]],[6]]]]],[1,"\\n"]],[]],null],[1," "],[8,[39,29],null,[["@type","@sort","@filters","@search","@items"],["token",[30,3,["value"]],[30,4],[99,25,["@search"]],[30,5]]],[["default"],[[[[1,"\\n "],[8,[30,7,["Collection"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,30],null,[["@items","@token","@onuse","@ondelete","@onlogout","@onclone"],[[30,7,["items"]],[30,1,["model","user","token"]],[28,[37,31],["use"],null],[28,[37,31],["delete"],null],[28,[37,31],["logout"],null],[28,[37,31],["clone"],null]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,7,["Empty"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,32],null,[["@login"],[[30,1,["model","app","login","open"]]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,33],["routes.dc.acls.tokens.index.empty.header"],[["items"],[[30,5,["length"]]]]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[1,[28,[35,33],["routes.dc.acls.tokens.index.empty.body"],[["items","htmlSafe"],[[30,5,["length"]],true]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[7]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[3,4,5]]],[1," "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","loader","sort","filters","items","A","collection"],false,["route","routeName","data-loader","uri","hash","block-slot","if","eq","consul/acl/disabled","app-error","let","or","sortBy","action","mut","kind","split","not-eq","searchproperty","searchProperties","app-view","can","hds/button","gt","consul/token/search-bar","search","token/is-legacy","hds/alert","env","data-collection","consul/token/list","route-action","empty-state","t"]]',moduleName:"consul-ui/templates/dc/acls/tokens/index.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/intentions/edit",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"APCDJQ0j",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/intention/${id}",[28,[37,4],null,[["partition","nspace","dc","id"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[28,[37,5],[[30,1,["params","intention_id"]],""],null]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,6],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,6],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[30,2,["data"]],[28,[37,9],[[28,[37,10],["write intention"],[["item"],[[30,2,["data"]]]]]],null]],[[[1," "],[8,[39,11],null,null,[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["breadcrumbs"]],[["default"],[[[[1,"\\n "],[10,"ol"],[12],[1,"\\n "],[10,"li"],[12],[10,3],[15,6,[28,[37,12],["dc.intentions"],null]],[12],[1,"All Intentions"],[13],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n"],[41,[28,[37,9],[[30,4]],null],[[[41,[30,3,["ID"]],[[[1," "],[8,[30,1,["Title"]],null,[["@title"],["Edit Intention"]],null],[1,"\\n"]],[]],[[[1," "],[8,[30,1,["Title"]],null,[["@title"],["New Intention"]],null],[1,"\\n"]],[]]]],[]],[[[1," "],[8,[30,1,["Title"]],null,[["@title"],["View Intention"]],null],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,14],null,[["@readonly","@item","@dc","@nspace","@partition","@onsubmit"],[[30,4],[30,3],[30,1,["model","dc"]],[30,1,["params","nspace"]],[30,1,["params","partition"]],[28,[37,15],["transitionTo","dc.intentions.index",[28,[37,4],null,[["dc"],[[30,1,["params","dc"]]]]]],null]]],null],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[3,4]]],[1," "]],[]]]]],[1,"\\n"]],[2]]]]],[1,"\\n"]],[1]]]]]],["route","loader","item","readOnly"],false,["route","routeName","data-loader","uri","hash","or","block-slot","app-error","let","not","can","app-view","href-to","if","consul/intention/form","route-action"]]',moduleName:"consul-ui/templates/dc/intentions/edit.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/intentions/index",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"MRCKg8a1",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/intentions",[28,[37,4],null,[["partition","nspace","dc"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,5],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[28,[37,4],null,[["value","change"],[[28,[37,8],[[33,9],"Action:asc"],null],[28,[37,10],[[30,0],[28,[37,11],[[33,9]],null]],[["value"],["target.selected"]]]]]],[28,[37,4],null,[["access","searchproperty"],[[28,[37,4],null,[["value","change"],[[52,[33,13],[28,[37,14],[[33,13],","],null],[27]],[28,[37,10],[[30,0],[28,[37,11],[[33,13]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,4],null,[["value","change","default"],[[52,[28,[37,15],[[33,16],[27]],null],[28,[37,14],[[33,16],","],null],[33,17]],[28,[37,10],[[30,0],[28,[37,11],[[33,16]],null]],[["value"],["target.selectedItems"]]],[33,17]]]]]]],[30,2,["data"]]],[[[1,"\\n "],[8,[39,18],null,null,[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n "],[8,[30,1,["Title"]],null,[["@title"],["Intentions"]],null],[1," "],[10,"em"],[12],[1,[28,[35,19],[[30,5,["length"]]],null]],[1," total"],[13],[1,"\\n "],[13],[1,"\\n "],[10,"label"],[14,"for","toolbar-toggle"],[12],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n"],[41,[28,[37,20],["create intentions"],null],[[[1," "],[8,[39,21],null,[["@text","@route"],["Create","dc.intentions.create"]],null],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["toolbar"]],[["default"],[[[[1,"\\n\\n"],[41,[28,[37,22],[[30,5,["length"]],0],null],[[[1," "],[8,[39,23],null,[["@search","@onsearch","@sort","@filter"],[[99,24,["@search"]],[28,[37,10],[[30,0],[28,[37,11],[[33,24]],null]],[["value"],["target.value"]]],[30,3],[30,4]]],null],[1,"\\n"]],[]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,25],null,[["@sink","@type","@ondelete"],[[28,[37,3],["/${partition}/${dc}/${nspace}/intention/",[28,[37,4],null,[["partition","nspace","dc"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]]]]]],null],"intention",[99,26,["@ondelete"]]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,27],null,[["@type","@sort","@filters","@search","@items"],["intention",[30,3,["value"]],[30,4],[99,24,["@search"]],[30,5]]],[["default"],[[[[1,"\\n "],[8,[30,7,["Collection"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,28],null,[["@items","@delete"],[[30,7,["items"]],[30,6,["delete"]]]],[["default"],[[[[1,"\\n "],[8,[30,8,["CustomResourceNotice"]],null,null,null],[1,"\\n "],[8,[30,8,["Table"]],null,null,null],[1,"\\n "]],[8]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,7,["Empty"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,29],null,[["@login"],[[30,1,["model","app","login","open"]]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,30],["routes.dc.intentions.index.empty.header"],[["items"],[[30,5,["length"]]]]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[1,[28,[35,30],["routes.dc.intentions.index.empty.body"],[["items","canUseACLs","htmlSafe"],[[30,5,["length"]],[28,[37,20],["use acls"],null],true]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,31],null,[["@text","@href","@icon","@iconPosition","@size"],["Documentation on intentions",[29,[[28,[37,32],["CONSUL_DOCS_URL"],null],"/commands/intention"]],"docs-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,31],null,[["@text","@href","@icon","@iconPosition","@size"],["Take the tutorial",[29,[[28,[37,32],["CONSUL_DOCS_LEARN_URL"],null],"/consul/getting-started/connect"]],"learn-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[7]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n\\n"]],[3,4,5]]],[1," "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]]],["route","api","sort","filters","items","writer","collection","list"],false,["route","routeName","data-loader","uri","hash","block-slot","app-error","let","or","sortBy","action","mut","if","access","split","not-eq","searchproperty","searchProperties","app-view","format-number","can","hds/button","gt","consul/intention/search-bar","search","data-writer","refresh-route","data-collection","consul/intention/list","empty-state","t","hds/link/standalone","env"]]',moduleName:"consul-ui/templates/dc/intentions/index.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/kv/edit",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"OKjbKUH/",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n\\n"],[44,["/"],[[[1,"\\n"],[44,[[28,[37,3],[[28,[37,4],[[30,2],[28,[37,5],[0,-1,[28,[37,6],[[30,1,["params","key"]],[30,2]],null]],null]],null],[30,2]],null]],[[[1,"\\n "],[8,[39,7],null,[["@src"],[[28,[37,8],["/${partition}/${nspace}/${dc}/kv/${key}",[28,[37,9],null,[["partition","nspace","dc","key"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[52,[28,[37,11],[[33,1],"create"],null],"",[30,1,["params","key"]]]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,12],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,13],null,[["@error","@login"],[[30,4,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,12],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[30,1,["params","dc"]],[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,4,["data"]]],[[[1,"\\n "],[8,[39,14],null,null,[["default"],[[[[1,"\\n\\n "],[8,[39,12],null,[["@name"],["breadcrumbs"]],[["default"],[[[[1,"\\n "],[10,"ol"],[12],[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,15],null,[["@href"],[[28,[37,16],["dc.kv.index"],null]]],[["default"],[[[[1,"\\n Key / Values\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n"],[41,[28,[37,17],[[30,3],[30,2]],null],[[[1,"\\n"],[44,[[28,[37,6],[[30,3],[30,2]],null]],[[[1,"\\n"],[42,[28,[37,19],[[28,[37,19],[[30,9]],null]],null],null,[[[41,[28,[37,20],[[30,10,["length"]],0],null],[[[1," "],[10,"li"],[12],[1,"\\n "],[8,[39,15],[[4,[38,15],[[30,0],[30,10]],null]],[["@href"],[[28,[37,16],["dc.kv.folder",[28,[37,4],["/",[28,[37,21],[[28,[37,5],[0,[28,[37,22],[[30,11],1],null],[30,9]],null],""],null]],null]],null]]],[["default"],[[[[1,"\\n "],[1,[30,10]],[1,"\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n"]],[]],null]],[10,11]],null]],[9]]],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,12],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n"],[41,[28,[37,23],[[30,8,["Key"]],[28,[37,17],[[30,8,["Key"]],[30,3]],null]],null],[[[1," "],[8,[30,1,["Title"]],null,[["@title","@render"],["Edit Key / Value",false]],null],[1,"\\n "],[1,[28,[35,24],[[30,8,["Key"]],[30,3]],null]],[1,"\\n"]],[]],[[[1," "],[8,[30,1,["Title"]],null,[["@title","@render"],["New Key / Value",true]],null],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,12],null,[["@name"],["content"]],[["default"],[[[[1,"\\n\\n"],[41,[30,8,["Session"]],[[[1," "],[8,[39,25],null,[["@type"],["kv"]],null],[1,"\\n"]],[]],null],[1,"\\n "],[8,[39,26],null,[["@item","@dc","@nspace","@partition","@onsubmit","@parent"],[[30,8],[30,1,["params","dc"]],[30,1,["params","nspace"]],[30,1,["params","partition"]],[52,[28,[37,27],[[30,3],[30,2]],null],[28,[37,28],["dc.kv.index"],null],[28,[37,28],["dc.kv.folder",[30,3]],null]],[30,3]]],null],[1,"\\n\\n\\n"],[41,[28,[37,23],[[30,8,["Session"]]],null],[[[1," "],[8,[39,29],null,[["@src","@onchange"],[[28,[37,8],["/${partition}/${nspace}/${dc}/sessions/for-key/${id}",[28,[37,9],null,[["partition","nspace","dc","id"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[30,8,["Session"]]]]]],null],[28,[37,15],[[30,0],[28,[37,30],[[33,31]],null]],[["value"],["data"]]]]],null],[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[8,[39,15],[[24,"rel","help"]],[["@href","@external"],[[28,[37,3],[[28,[37,32],["CONSUL_DOCS_URL"],null],"/internals/sessions.html#session-design"],null],true]],[["default"],[[[[1,"\\n Lock Session\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n"],[41,[33,31,["ID"]],[[[1," "],[8,[39,33],null,[["@item","@ondelete"],[[99,31,["@item"]],[30,4,["invalidate"]]]],null],[1,"\\n"]],[]],null]],[]],null],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[5,6,7,8]]],[1," "]],[]]]]],[1,"\\n "]],[4]]]]],[1,"\\n"]],[3]]]],[2]]]],[1]]]]],[1,"\\n"]],["route","separator","parentKey","loader","dc","partition","nspace","item","parts","breadcrumb","index"],false,["route","routeName","let","concat","join","slice","split","data-loader","uri","hash","if","string-ends-with","block-slot","app-error","app-view","action","href-to","not-eq","each","-track-array","gt","append","add","and","left-trim","consul/lock-session/notifications","consul/kv/form","eq","transition-to","data-source","mut","session","env","consul/lock-session/form"]]',moduleName:"consul-ui/templates/dc/kv/edit.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/kv/index",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"Vj7yxEy8",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src","@onchange"],[[28,[37,3],["/${partition}/${nspace}/${dc}/kv/${key}",[28,[37,4],null,[["partition","nspace","dc","key"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[28,[37,5],[[30,1,["params","key"]],"/"],null]]]]],null],[28,[37,6],[[30,0],[28,[37,7],[[33,8]],null]],[["value"],["data"]]]]],null],[1,"\\n "],[8,[39,9],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/kvs/${key}",[28,[37,4],null,[["partition","nspace","dc","key"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[28,[37,5],[[30,1,["params","key"]],"/"],null]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,10],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,11],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,10],null,[["@name"],["disconnected"]],[["default"],[[[[1,"\\n"],[41,[28,[37,13],[[30,2,["error","status"]],"404"],null],[[[1," "],[8,[39,14],[[4,[38,15],null,[["sticky"],[true]]]],[["@color"],["warning"]],[["default"],[[[[1,"\\n "],[8,[30,4,["Title"]],null,null,[["default"],[[[[1,"Warning!"]],[]]]]],[1,"\\n "],[8,[30,4,["Description"]],null,null,[["default"],[[[[1,"\\n This KV or parent of this KV was deleted.\\n "]],[]]]]],[1,"\\n "]],[4]]]]],[1,"\\n"]],[]],[[[41,[28,[37,13],[[30,2,["error","status"]],"403"],null],[[[1," "],[8,[39,14],[[4,[38,15],null,[["sticky"],[true]]]],[["@color"],["critical"]],[["default"],[[[[1,"\\n "],[8,[30,5,["Title"]],null,null,[["default"],[[[[1,"Error!"]],[]]]]],[1,"\\n "],[8,[30,5,["Description"]],null,null,[["default"],[[[[1,"\\n You no longer have access to this KV.\\n "]],[]]]]],[1,"\\n "]],[5]]]]],[1,"\\n"]],[]],[[[1," "],[8,[39,14],[[4,[38,15],null,[["sticky"],[true]]]],[["@color"],["warning"]],[["default"],[[[[1,"\\n "],[8,[30,6,["Title"]],null,null,[["default"],[[[[1,"Warning!"]],[]]]]],[1,"\\n "],[8,[30,6,["Description"]],null,null,[["default"],[[[[1,"\\n An error was returned whilst loading this data, refresh to try again.\\n "]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n "]],[]]]],[]]],[1," "]],[3]]]]],[1,"\\n\\n "],[8,[39,10],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[28,[37,4],null,[["value","change"],[[28,[37,5],[[33,17],"Kind:asc"],null],[28,[37,6],[[30,0],[28,[37,7],[[33,17]],null]],[["value"],["target.selected"]]]]]],[28,[37,4],null,[["kind"],[[28,[37,4],null,[["value","change"],[[52,[33,18],[28,[37,19],[[33,18],","],null],[27]],[28,[37,6],[[30,0],[28,[37,7],[[33,18]],null]],[["value"],["target.selectedItems"]]]]]]]]],[33,8],[30,2,["data"]]],[[[1," "],[8,[39,20],null,null,[["default"],[[[[1,"\\n"],[41,[28,[37,21],[[30,9,["Key"]],"/"],null],[[[1," "],[8,[39,10],null,[["@name"],["breadcrumbs"]],[["default"],[[[[1,"\\n "],[10,"ol"],[12],[1,"\\n "],[10,"li"],[12],[10,3],[15,6,[28,[37,22],["dc.kv"],null]],[12],[1,"Key / Values"],[13],[13],[1,"\\n"],[42,[28,[37,24],[[28,[37,24],[[28,[37,25],[0,-2,[28,[37,19],[[30,9,["Key"]],"/"],null]],null]],null]],null],null,[[[1," "],[10,"li"],[12],[11,3],[16,6,[28,[37,22],["dc.kv.folder",[28,[37,26],["/",[28,[37,27],[[28,[37,25],[0,[28,[37,28],[[30,12],1],null],[28,[37,19],[[30,9,["Key"]],"/"],null]],null],""],null]],null]],null]],[4,[38,29],[[30,11]],null],[12],[1,[30,11]],[13],[13],[1,"\\n"]],[11,12]],null],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[1," "],[8,[39,10],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n"],[41,[28,[37,13],[[30,9,["Key"]],"/"],null],[[[1," "],[8,[30,1,["Title"]],null,[["@title"],["Key / Value"]],null],[1,"\\n"]],[]],[[[1," "],[8,[30,1,["Title"]],null,[["@title"],[[28,[37,30],[1,[28,[37,31],[1,[28,[37,32],[[28,[37,19],[[30,9,["Key"]],"/"],null]],null]],null]],null]]],null],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n "],[10,"label"],[14,"for","toolbar-toggle"],[12],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,10],null,[["@name"],["toolbar"]],[["default"],[[[[1,"\\n"],[41,[28,[37,33],[[30,10,["length"]],0],null],[[[1," "],[8,[39,34],null,[["@search","@onsearch","@sort","@filter"],[[99,35,["@search"]],[28,[37,6],[[30,0],[28,[37,7],[[33,35]],null]],[["value"],["target.value"]]],[30,7],[30,8]]],null],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[8,[39,10],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n"],[41,[28,[37,36],["create kvs"],null],[[[41,[28,[37,37],[[30,9,["Key"]],[28,[37,21],[[30,9,["Key"]],"/"],null]],null],[[[1," "],[8,[39,38],null,[["@text","@isHrefExternal","@href"],["Create",false,[29,[[28,[37,22],["dc.kv.create",[30,9,["Key"]]],null]]]]],null],[1,"\\n"]],[]],[[[1," "],[8,[39,38],null,[["@text","@route"],["Create","dc.kv.root-create"]],null],[1,"\\n"]],[]]]],[]],null],[1," "]],[]]]]],[1,"\\n "],[8,[39,10],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,39],null,[["@sink","@type","@label","@ondelete"],[[28,[37,3],["/${partition}/${nspace}/${dc}/kv/",[28,[37,4],null,[["partition","nspace","dc"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]]]]]],null],"kv","key",[99,40,["@ondelete"]]]],[["default"],[[[[1,"\\n "],[8,[39,10],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,41],null,[["@type","@sort","@filters","@search","@items"],["kv",[30,7,["value"]],[30,8],[99,35,["@search"]],[30,10]]],[["default"],[[[[1,"\\n "],[8,[30,14,["Collection"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,42],null,[["@items","@parent","@delete"],[[30,14,["items"]],[30,9],[30,13,["delete"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,14,["Empty"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,43],null,[["@login"],[[30,1,["model","app","login","open"]]]],[["default"],[[[[1,"\\n "],[8,[39,10],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,44],["routes.dc.kv.index.empty.header"],[["items"],[[30,10,["length"]]]]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,10],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[1,[28,[35,44],["routes.dc.kv.index.empty.body"],[["items","canUseACLs","htmlSafe"],[[30,10,["length"]],[28,[37,36],["use acls"],null],true]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,10],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,45],null,[["@text","@href","@icon","@iconPosition","@size"],["Documentation on K/V",[29,[[28,[37,46],["CONSUL_DOCS_URL"],null],"/agent/kv"]],"docs-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,45],null,[["@text","@href","@icon","@iconPosition","@size"],["Take the tutorial",[29,[[28,[37,46],["CONSUL_DOCS_LEARN_URL"],null],"/consul/getting-started/kv"]],"learn-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[14]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[13]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[7,8,9,10]]],[1," "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","loader","after","T","T","T","sort","filters","parent","items","breadcrumb","index","writer","collection"],false,["route","routeName","data-source","uri","hash","or","action","mut","parent","data-loader","block-slot","app-error","if","eq","hds/toast","notification","let","sortBy","kind","split","app-view","not-eq","href-to","each","-track-array","slice","join","append","add","tooltip","take","drop","reverse","gt","consul/kv/search-bar","search","can","and","hds/button","data-writer","refresh-route","data-collection","consul/kv/list","empty-state","t","hds/link/standalone","env"]]',moduleName:"consul-ui/templates/dc/kv/index.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/nodes/index",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"vxNtRU5K",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/leader",[28,[37,4],null,[["partition","nspace","dc"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,5],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/nodes",[28,[37,4],null,[["partition","nspace","dc"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,6],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@error","@login"],[[30,3,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,6],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[28,[37,4],null,[["value","change"],[[28,[37,9],[[33,10],"Status:asc"],null],[28,[37,11],[[30,0],[28,[37,12],[[33,10]],null]],[["value"],["target.selected"]]]]]],[28,[37,4],null,[["status","searchproperty"],[[28,[37,4],null,[["value","change"],[[52,[33,14],[28,[37,15],[[33,14],","],null],[27]],[28,[37,11],[[30,0],[28,[37,12],[[33,14]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,4],null,[["value","change","default"],[[52,[28,[37,16],[[33,17],[27]],null],[28,[37,15],[[33,17],","],null],[30,0,["_searchProperties"]]],[28,[37,11],[[30,0],[28,[37,12],[[33,17]],null]],[["value"],["target.selectedItems"]]],[30,0,["_searchProperties"]]]]]]]],[30,3,["data"]],[30,2,["data"]]],[[[44,[[28,[37,18],["Meta.synthetic-node",[30,6]],null]],[[[1," "],[8,[39,19],null,null,[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n "],[8,[30,1,["Title"]],null,[["@title"],["Nodes"]],null],[1,"\\n "],[10,"em"],[12],[1,[28,[35,20],[[30,6,["length"]]],null]],[1," total"],[13],[1,"\\n "],[13],[1,"\\n "],[10,"label"],[14,"for","toolbar-toggle"],[12],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["toolbar"]],[["default"],[[[[1,"\\n"],[41,[28,[37,21],[[30,8,["length"]],0],null],[[[1," "],[8,[39,22],null,[["@search","@onsearch","@sort","@filter"],[[99,23,["@search"]],[28,[37,11],[[30,0],[28,[37,12],[[33,23]],null]],[["value"],["target.value"]]],[30,4],[30,5]]],null],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,24],null,[["@items","@filteredItems","@postfix"],[[30,6],[30,8],[28,[37,25],[[30,1,["params","partition"]],[30,1,["params","dc"]]],null]]],null],[1,"\\n "],[8,[39,26],null,[["@type","@sort","@filters","@search","@items"],["node",[30,4,["value"]],[30,5],[99,23,["@search"]],[30,8]]],[["default"],[[[[1,"\\n "],[8,[30,9,["Collection"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,27],null,[["@items","@leader"],[[30,9,["items"]],[30,7]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,9,["Empty"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,28],null,[["@login"],[[30,1,["model","app","login","open"]]]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,29],["routes.dc.nodes.index.empty.header"],[["items"],[[30,6,["length"]]]]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[1,[28,[35,29],["routes.dc.nodes.index.empty.body"],[["items","canUseACLs","htmlSafe"],[[30,6,["length"]],[28,[37,30],["use acls"],null],true]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,31],null,[["@text","@href","@color","@icon","@iconPosition","@size"],[[28,[37,29],["routes.dc.nodes.index.empty.documentation"],null],[29,[[28,[37,32],["CONSUL_DOCS_DEVELOPER_URL"],null],"/agent"]],"tertiary","docs-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,31],null,[["@text","@href","@color","@icon","@iconPosition","@size"],[[28,[37,29],["routes.dc.nodes.index.empty.learn"],null],[29,[[28,[37,32],["CONSUL_DOCS_LEARN_URL"],null],"/tutorials/consul/deployment-guide?in=consul/production-deploy#configure-consul-agents"]],"tertiary","learn-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[9]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[8]]]],[4,5,6,7]]],[1," "]],[]]]]],[1,"\\n "]],[3]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","leader","api","sort","filters","items","leader","filtered","collection"],false,["route","routeName","data-source","uri","hash","data-loader","block-slot","app-error","let","or","sortBy","action","mut","if","status","split","not-eq","searchproperty","reject-by","app-view","format-number","gt","consul/node/search-bar","search","consul/node/agentless-notice","concat","data-collection","consul/node/list","empty-state","t","can","hds/button","env"]]',moduleName:"consul-ui/templates/dc/nodes/index.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/nodes/show",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"14xgVgV5",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/coordinates/for-node/${name}",[28,[37,4],null,[["partition","nspace","dc","name"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[30,1,["params","name"]]]]]],null]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/node/${name}/${peer}",[28,[37,4],null,[["partition","nspace","dc","name","peer"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[30,1,["params","name"]],[30,1,["params","peer"]]]]]],null]]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@error","@login"],[[30,3,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,6],null,[["@name"],["disconnected"]],[["default"],[[[[1,"\\n"],[41,[28,[37,9],[[30,3,["error","status"]],"404"],null],[[[1," "],[8,[39,10],[[4,[38,11],null,[["sticky"],[true]]]],[["@color"],["warning"]],[["default"],[[[[1,"\\n "],[8,[30,5,["Title"]],null,null,[["default"],[[[[1,"Warning!"]],[]]]]],[1,"\\n "],[8,[30,5,["Description"]],null,null,[["default"],[[[[1,"This node no longer exists in the catalog."]],[]]]]],[1,"\\n "]],[5]]]]],[1,"\\n"]],[]],[[[41,[28,[37,9],[[30,3,["error","status"]],"403"],null],[[[1," "],[8,[39,10],[[4,[38,11],null,[["sticky"],[true]]]],[["@color"],["critical"]],[["default"],[[[[1,"\\n "],[8,[30,6,["Title"]],null,null,[["default"],[[[[1,"Error!"]],[]]]]],[1,"\\n "],[8,[30,6,["Description"]],null,null,[["default"],[[[[1,"You no longer have access to this node."]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n"]],[]],[[[1," "],[8,[39,10],[[4,[38,11],null,[["sticky"],[true]]]],[["@color"],["warning"]],[["default"],[[[[1,"\\n "],[8,[30,7,["Title"]],null,null,[["default"],[[[[1,"Warning!"]],[]]]]],[1,"\\n "],[8,[30,7,["Description"]],null,null,[["default"],[[[[1,"An error was returned whilst loading this data, refresh to try again."]],[]]]]],[1,"\\n "]],[7]]]]],[1,"\\n "]],[]]]],[]]],[1," "]],[4]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[30,3,["data"]],[30,2,["data"]]],[[[1," "],[8,[39,13],null,null,[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["notification"]],[["default"],[[[[1,"\\n "],[8,[39,14],null,[["@type","@status"],[[30,11],[30,10]]],null],[1,"\\n "]],[10,11]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["breadcrumbs"]],[["default"],[[[[1,"\\n "],[10,"ol"],[12],[1,"\\n "],[10,"li"],[12],[10,3],[15,6,[28,[37,15],["dc.nodes"],[["params"],[[28,[37,4],null,[["peer"],[[27]]]]]]]],[12],[1,"All Nodes"],[13],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n "],[8,[30,1,["Title"]],null,[["@title"],[[30,8,["Node"]]]],null],[1,"\\n "],[13],[1,"\\n "],[10,"label"],[14,"for","toolbar-toggle"],[12],[13],[1,"\\n "],[8,[39,16],null,[["@item"],[[30,8]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["nav"]],[["default"],[[[[1,"\\n "],[8,[39,17],null,[["@items"],[[28,[37,18],[[28,[37,19],[[28,[37,4],null,[["label","href","selected"],[[28,[37,20],["routes.dc.nodes.show.healthchecks.title"],null],[28,[37,15],["dc.nodes.show.healthchecks"],null],[28,[37,21],["dc.nodes.show.healthchecks"],null]]]],[28,[37,4],null,[["label","href","selected"],[[28,[37,20],["routes.dc.nodes.show.services.title"],null],[28,[37,15],["dc.nodes.show.services"],null],[28,[37,21],["dc.nodes.show.services"],null]]]],[52,[30,9,["distances"]],[28,[37,4],null,[["label","href","selected"],[[28,[37,20],["routes.dc.nodes.show.rtt.title"],null],[28,[37,15],["dc.nodes.show.rtt"],null],[28,[37,21],["dc.nodes.show.rtt"],null]]]],""],[52,[28,[37,22],["read sessions"],null],[28,[37,4],null,[["label","href","selected"],[[28,[37,20],["routes.dc.nodes.show.sessions.title"],null],[28,[37,15],["dc.nodes.show.sessions"],null],[28,[37,21],["dc.nodes.show.sessions"],null]]]],""],[28,[37,4],null,[["label","href","selected"],[[28,[37,20],["routes.dc.nodes.show.metadata.title"],null],[28,[37,15],["dc.nodes.show.metadata"],null],[28,[37,21],["dc.nodes.show.metadata"],null]]]]],null]],null]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[8,[39,23],null,[["@value","@name"],[[30,8,["Address"]],"Address"]],[["default"],[[[[1,[30,8,["Address"]]]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,24],null,[["@name","@model"],[[99,1,["@name"]],[28,[37,25],[[28,[37,4],null,[["item","tomography"],[[30,8],[30,9]]]],[30,1,["model"]]],null]]],[["default"],[[[[1,"\\n "],[46,[28,[37,27],null,null],null,null,null],[1,"\\n "]],[12]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[8,9]]],[1," "]],[]]]]],[1,"\\n "]],[3]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","tomography","loader","after","T","T","T","item","tomography","status","type","o"],false,["route","routeName","data-source","uri","hash","data-loader","block-slot","app-error","if","eq","hds/toast","notification","let","app-view","consul/lock-session/notifications","href-to","consul/peer/info","tab-nav","compact","array","t","is-href","can","copy-button","outlet","assign","component","-outlet"]]',moduleName:"consul-ui/templates/dc/nodes/show.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/nodes/show/healthchecks",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"i+D+Qmra",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n"],[44,[[28,[37,3],null,[["value","change"],[[28,[37,4],[[33,5],"Status:asc"],null],[28,[37,6],[[30,0],[28,[37,7],[[33,5]],null]],[["value"],["target.selected"]]]]]],[28,[37,3],null,[["status","kind","check","searchproperty"],[[28,[37,3],null,[["value","change"],[[52,[33,9],[28,[37,10],[[33,9],","],null],[27]],[28,[37,6],[[30,0],[28,[37,7],[[33,9]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,3],null,[["value","change"],[[52,[33,11],[28,[37,10],[[33,11],","],null],[27]],[28,[37,6],[[30,0],[28,[37,7],[[33,11]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,3],null,[["value","change"],[[52,[33,12],[28,[37,10],[[33,12],","],null],[27]],[28,[37,6],[[30,0],[28,[37,7],[[33,12]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,3],null,[["value","change","default"],[[52,[28,[37,13],[[33,14],[27]],null],[28,[37,10],[[33,14],","],null],[33,15]],[28,[37,6],[[30,0],[28,[37,7],[[33,14]],null]],[["value"],["target.selectedItems"]]],[33,15]]]]]]],[30,1,["model","item","Checks"]]],[[[1," "],[10,0],[14,0,"tab-section"],[12],[1,"\\n"],[41,[28,[37,16],[[30,4,["length"]],0],null],[[[1," "],[10,"input"],[14,1,"toolbar-toggle"],[14,4,"checkbox"],[12],[13],[1,"\\n "],[8,[39,17],null,[["@search","@onsearch","@sort","@filter"],[[99,18,["@search"]],[28,[37,6],[[30,0],[28,[37,7],[[33,18]],null]],[["value"],["target.value"]]],[30,2],[30,3]]],null],[1,"\\n"]],[]],null],[44,[[28,[37,19],["Type","serf",[30,4]],null]],[[[41,[28,[37,20],[[30,5],[28,[37,21],[[30,5,["Status"]],"critical"],null]],null],[[[1," "],[8,[39,22],[[24,0,"mb-3 mt-2"]],[["@type","@color"],["inline","warning"]],[["default"],[[[[1,"\\n "],[8,[30,6,["Title"]],null,null,[["default"],[[[[1,[28,[35,23],["routes.dc.nodes.show.healthchecks.critical-serf-notice.header"],null]]],[]]]]],[1,"\\n "],[8,[30,6,["Description"]],null,null,[["default"],[[[[1,[28,[35,23],["routes.dc.nodes.show.healthchecks.critical-serf-notice.body"],null]]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n"]],[]],null]],[5]]],[1," "],[8,[39,24],null,[["@type","@sort","@filters","@search","@items"],["health-check",[30,2,["value"]],[30,3],[99,18,["@search"]],[30,4]]],[["default"],[[[[1,"\\n "],[8,[30,7,["Collection"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,25],null,[["@items"],[[30,7,["items"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,7,["Empty"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,26],null,null,[["default"],[[[[1,"\\n "],[8,[39,27],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[1,[28,[35,23],["routes.dc.nodes.show.healthchecks.empty"],[["items","htmlSafe"],[[30,4,["length"]],true]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[7]]]]],[1,"\\n "],[13],[1,"\\n"]],[2,3,4]]]],[1]]]]]],["route","sort","filters","items","serf","A","collection"],false,["route","routeName","let","hash","or","sortBy","action","mut","if","status","split","kind","check","not-eq","searchproperty","searchProperties","gt","consul/health-check/search-bar","search","find-by","and","eq","hds/alert","t","data-collection","consul/health-check/list","empty-state","block-slot"]]',moduleName:"consul-ui/templates/dc/nodes/show/healthchecks.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/nodes/show/index",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"qL7XyD9+",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n"],[41,[28,[37,3],[[30,1,["model","item","Checks","length"]],0],null],[[[1," "],[1,[28,[35,4],[[28,[37,5],["replaceWith","dc.nodes.show.services"],null]],null]],[1,"\\n"]],[]],[[[1," "],[1,[28,[35,4],[[28,[37,5],["replaceWith","dc.nodes.show.healthchecks"],null]],null]],[1,"\\n"]],[]]]],[1]]]]],[1,"\\n"]],["route"],false,["route","routeName","if","eq","did-insert","route-action"]]',moduleName:"consul-ui/templates/dc/nodes/show/index.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/nodes/show/metadata",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"II5xvxvi",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[10,0],[14,0,"tab-section"],[12],[1,"\\n"],[41,[30,1,["model","item","Meta"]],[[[1," "],[8,[39,3],null,[["@items"],[[28,[37,4],[[30,1,["model","item","Meta"]]],null]]],null],[1,"\\n"]],[]],[[[1," "],[8,[39,5],null,null,[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n This node has no metadata.\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route"],false,["route","routeName","if","consul/metadata/list","entries","empty-state","block-slot"]]',moduleName:"consul-ui/templates/dc/nodes/show/metadata.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/nodes/show/rtt",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"dQ8VTTOG",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n"],[44,[[30,1,["model","tomography"]]],[[[41,[28,[37,4],[[30,2,["distances"]]],null],[[[1," "],[1,[28,[35,5],[[28,[37,6],["replaceWith","dc.nodes.show"],null]],null]],[1,"\\n"]],[]],[[[1," "],[10,0],[14,0,"tab-section"],[12],[1,"\\n "],[10,0],[14,0,"definition-table"],[12],[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n Minimum\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[28,[35,7],[[30,2,["min"]]],[["maximumFractionDigits"],[2]]]],[1,"ms\\n "],[13],[1,"\\n "],[10,"dt"],[12],[1,"\\n Median\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[28,[35,7],[[30,2,["median"]]],[["maximumFractionDigits"],[2]]]],[1,"ms\\n "],[13],[1,"\\n "],[10,"dt"],[12],[1,"\\n Maximum\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[28,[35,7],[[30,2,["max"]]],[["maximumFractionDigits"],[2]]]],[1,"ms\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[8,[39,8],null,[["@distances"],[[30,2,["distances"]]]],null],[1,"\\n "],[13],[1,"\\n"]],[]]]],[2]]]],[1]]]]],[1,"\\n"]],["route","tomography"],false,["route","routeName","let","if","not","did-insert","route-action","format-number","consul/tomography/graph"]]',moduleName:"consul-ui/templates/dc/nodes/show/rtt.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/nodes/show/services",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"3xjsHJKx",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n"],[44,[[28,[37,3],null,[["value","change"],[[28,[37,4],[[33,5],"Status:asc"],null],[28,[37,6],[[30,0],[28,[37,7],[[33,5]],null]],[["value"],["target.selected"]]]]]],[28,[37,3],null,[["status","source","searchproperty"],[[28,[37,3],null,[["value","change"],[[52,[33,9],[28,[37,10],[[33,9],","],null],[27]],[28,[37,6],[[30,0],[28,[37,7],[[33,9]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,3],null,[["value","change"],[[52,[33,11],[28,[37,10],[[33,11],","],null],[27]],[28,[37,6],[[30,0],[28,[37,7],[[33,11]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,3],null,[["value","change","default"],[[52,[28,[37,12],[[33,13],[27]],null],[28,[37,10],[[33,13],","],null],[33,14]],[28,[37,6],[[30,0],[28,[37,7],[[33,13]],null]],[["value"],["target.selectedItems"]]],[33,14]]]]]]],[30,1,["model","item","MeshServiceInstances"]],[30,1,["model","item","ProxyServiceInstances"]]],[[[1," "],[10,0],[14,0,"tab-section"],[12],[1,"\\n"],[41,[28,[37,15],[[30,4,["length"]],0],null],[[[1," "],[10,"input"],[14,1,"toolbar-toggle"],[14,4,"checkbox"],[12],[13],[1,"\\n "],[8,[39,16],null,[["@sources","@search","@onsearch","@searchproperties","@sort","@filter"],[[28,[37,17],[[28,[37,18],[[30,4]],null],"ExternalSources"],null],[99,19,["@search"]],[28,[37,6],[[30,0],[28,[37,7],[[33,19]],null]],[["value"],["target.value"]]],[99,14,["@searchproperties"]],[30,2],[30,3]]],null],[1,"\\n"]],[]],null],[1," "],[8,[39,20],null,[["@type","@sort","@filters","@search","@items"],["service-instance",[30,2,["value"]],[30,3],[99,19,["@search"]],[30,4]]],[["default"],[[[[1,"\\n "],[8,[30,6,["Collection"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,21],null,[["@node","@routeName","@items","@proxies"],[[30,1,["model","item"]],"dc.services.show",[30,6,["items"]],[30,5]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,6,["Empty"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,22],null,null,[["default"],[[[[1,"\\n "],[8,[39,23],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[1,[28,[35,24],["routes.dc.nodes.show.services.empty"],[["items","htmlSafe"],[[30,4,["length"]],true]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n "],[13],[1,"\\n"]],[2,3,4,5]]]],[1]]]]]],["route","sort","filters","items","proxies","collection"],false,["route","routeName","let","hash","or","sortBy","action","mut","if","status","split","source","not-eq","searchproperty","searchProperties","gt","consul/service-instance/search-bar","get","collection","search","data-collection","consul/service-instance/list","empty-state","block-slot","t"]]',moduleName:"consul-ui/templates/dc/nodes/show/services.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/nodes/show/sessions",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"sY17bdHd",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/sessions/for-node/${node}",[28,[37,4],null,[["partition","nspace","dc","node"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[30,1,["params","name"]]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,5],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[30,2,["data"]]],[[[1," "],[10,0],[14,0,"tab-section"],[12],[1,"\\n "],[8,[39,8],null,[["@sink","@type","@label","@ondelete"],[[28,[37,3],["/${partition}/${dc}/${nspace}/session/",[28,[37,4],null,[["partition","nspace","dc"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]]]]]],null],"session","Lock Session",[99,9,["@ondelete"]]]],[["default"],[[[[1,"\\n\\n "],[8,[39,5],null,[["@name"],["removed"]],[["default"],[[[[1,"\\n "],[8,[39,10],[[4,[38,11],null,[["after"],[[28,[37,12],[[30,0],[30,5]],null]]]]],[["@type"],["remove"]],null],[1,"\\n "]],[5]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,10],[[4,[38,11],null,[["after"],[[28,[37,12],[[30,0],[30,6]],null]]]]],[["@type","@error"],["remove",[30,7]]],null],[1,"\\n "]],[6,7]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["content"]],[["default"],[[[[1,"\\n\\n "],[8,[39,13],null,[["@type","@items"],["session",[30,3]]],[["default"],[[[[1,"\\n\\n "],[8,[30,8,["Collection"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,14],null,[["@items","@ondelete"],[[30,8,["items"]],[30,4,["delete"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[30,8,["Empty"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,15],null,[["@login"],[[30,1,["model","app","login","open"]]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,16],["routes.dc.nodes.show.sessions.empty.header"],[["items"],[[30,3,["length"]]]]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[1,[28,[35,16],["routes.dc.nodes.show.sessions.empty.body"],[["canUseACLs","htmlSafe"],[[28,[37,17],["use acls"],null],true]]]],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,18],null,[["@text","@href","@icon","@iconPosition","@size"],["Documentation on Lock Sessions",[29,[[28,[37,19],["CONSUL_DOCS_URL"],null],"/internals/sessions.html"]],"docs-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,18],null,[["@text","@href","@icon","@iconPosition","@size"],["Take the tutorial",[29,[[28,[37,19],["CONSUL_DOCS_LEARN_URL"],null],"/tutorials/consul/distributed-semaphore"]],"learn-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n\\n "]],[8]]]]],[1,"\\n\\n "]],[]]]]],[1,"\\n "]],[4]]]]],[1,"\\n "],[13],[1,"\\n"]],[3]]],[1," "]],[]]]]],[1,"\\n"]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","api","items","writer","after","after","error","collection"],false,["route","routeName","data-loader","uri","hash","block-slot","app-error","let","data-writer","refresh-route","consul/lock-session/notifications","notification","action","data-collection","consul/lock-session/list","empty-state","t","can","hds/link/standalone","env"]]',moduleName:"consul-ui/templates/dc/nodes/show/sessions.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/nspaces/edit",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"kT+yvkgU",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/namespace/${id}",[28,[37,4],null,[["partition","nspace","dc","id"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[28,[37,5],[[30,1,["params","name"]],""],null]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,6],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,6],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[30,1,["params","dc"]],[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,2,["data"]],[30,2,["data","isNew"]]],[[[1," "],[8,[39,9],null,null,[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["breadcrumbs"]],[["default"],[[[[1,"\\n "],[10,"ol"],[12],[1,"\\n "],[10,"li"],[12],[10,3],[15,6,[28,[37,10],["dc.nspaces"],null]],[12],[1,"All Namespaces"],[13],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n "],[8,[30,1,["Title"]],null,[["@title"],[[52,[30,7],"New Namespace",[28,[37,12],["Edit ",[30,6,["Name"]]],null]]]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,13],null,[["@item","@dc","@nspace","@partition","@onsubmit"],[[30,6],[30,1,["params","dc"]],[30,1,["params","nspace"]],[30,1,["params","partition"]],[28,[37,14],["dc.nspaces.index"],null]]],null],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[3,4,5,6,7]]],[1," "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","loader","dc","partition","nspace","item","create"],false,["route","routeName","data-loader","uri","hash","or","block-slot","app-error","let","app-view","href-to","if","concat","consul/nspace/form","transition-to"]]',moduleName:"consul-ui/templates/dc/nspaces/edit.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/nspaces/index",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"sVU/Q7Zh",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/namespaces",[28,[37,4],null,[["partition","nspace","dc"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,5],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[28,[37,4],null,[["value","change"],[[28,[37,8],[[33,9],"Name:asc"],null],[28,[37,10],[[30,0],[28,[37,11],[[33,9]],null]],[["value"],["target.selected"]]]]]],[28,[37,4],null,[["searchproperty"],[[28,[37,4],null,[["value","change","default"],[[52,[28,[37,13],[[33,14],[27]],null],[28,[37,15],[[33,14],","],null],[33,16]],[28,[37,10],[[30,0],[28,[37,11],[[33,14]],null]],[["value"],["target.selectedItems"]]],[33,16]]]]]]],[30,2,["data"]]],[[[1,"\\n "],[8,[39,17],null,null,[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n "],[8,[30,1,["Title"]],null,[["@title"],["Namespaces"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n"],[41,[28,[37,18],["create nspaces"],null],[[[1," "],[8,[39,19],null,[["@text","@route"],["Create","dc.nspaces.create"]],null],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["toolbar"]],[["default"],[[[[1,"\\n"],[41,[28,[37,20],[[30,5,["length"]],0],null],[[[1," "],[8,[39,21],null,[["@search","@onsearch","@sort","@filter"],[[99,22,["@search"]],[28,[37,10],[[30,0],[28,[37,11],[[33,22]],null]],[["value"],["target.value"]]],[30,3],[30,4]]],null],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,23],null,[["@sink","@type","@label","@ondelete"],[[28,[37,3],["/${partition}/${dc}/${nspace}/nspace/",[28,[37,4],null,[["partition","nspace","dc"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]]]]]],null],"nspace","Namespace",[99,24,["@ondelete"]]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["removed"]],[["default"],[[[[1,"\\n "],[8,[39,25],[[4,[38,26],null,[["after"],[[28,[37,10],[[30,0],[30,7]],null]]]]],[["@type"],["remove"]],null],[1,"\\n "]],[7]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,27],null,[["@type","@sort","@filters","@search","@items"],["nspace",[30,3,["value"]],[30,4],[99,22,["@search"]],[30,5]]],[["default"],[[[[1,"\\n "],[8,[30,8,["Collection"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,28],null,[["@items","@ondelete"],[[30,8,["items"]],[30,6,["delete"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,8,["Empty"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,29],null,[["@login"],[[30,1,["model","app","login","open"]]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,30],["routes.dc.namespaces.index.empty.header"],[["items"],[[30,5,["length"]]]]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n "],[1,[28,[35,30],["routes.dc.namespaces.index.empty.body"],[["items","canUseACLs"],[[30,5,["length"]],[28,[37,18],["use acls"],null]]]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,31],null,[["@text","@href","@icon","@iconPosition","@size"],["Documentation on namespaces",[29,[[28,[37,32],["CONSUL_DOCS_URL"],null],"/commands/namespace"]],"docs-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,31],null,[["@text","@href","@icon","@iconPosition","@size"],["Read the guide",[29,[[28,[37,32],["CONSUL_DOCS_LEARN_URL"],null],"/consul/namespaces/secure-namespaces"]],"learn-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[8]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[3,4,5]]],[1," "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","loader","sort","filters","items","writer","after","collection"],false,["route","routeName","data-loader","uri","hash","block-slot","app-error","let","or","sortBy","action","mut","if","not-eq","searchproperty","split","searchProperties","app-view","can","hds/button","gt","consul/nspace/search-bar","search","data-writer","refresh-route","consul/nspace/notifications","notification","data-collection","consul/nspace/list","empty-state","t","hds/link/standalone","env"]]',moduleName:"consul-ui/templates/dc/nspaces/index.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/partitions/edit",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"4dMfLoFT",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/partition/${id}",[28,[37,4],null,[["partition","nspace","dc","id"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[28,[37,5],[[30,1,["params","name"]],""],null]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,6],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,6],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[30,1,["params","dc"]],[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,2,["data"]]],[[[1," "],[8,[39,9],null,null,[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["breadcrumbs"]],[["default"],[[[[1,"\\n "],[10,"ol"],[12],[1,"\\n "],[10,"li"],[12],[10,3],[15,6,[28,[37,10],["dc.partitions"],null]],[12],[1,"All Admin Partitions"],[13],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n "],[8,[30,1,["Title"]],null,[["@title"],[[52,[28,[37,12],["new partition"],[["item"],[[30,6]]]],"New Partition",[28,[37,13],["Edit ",[30,6,["Name"]]],null]]]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["content"]],[["default"],[[[[1,"\\n\\n "],[8,[39,14],null,[["@item","@dc","@nspace","@partition","@onsubmit"],[[30,6],[30,1,["params","dc"]],[30,1,["params","nspace"]],[30,1,["params","partition"]],[28,[37,15],["dc.partitions.index"],null]]],null],[1,"\\n\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[3,4,5,6]]],[1," "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","loader","dc","partition","nspace","item"],false,["route","routeName","data-loader","uri","hash","or","block-slot","app-error","let","app-view","href-to","if","is","concat","consul/partition/form","transition-to"]]',moduleName:"consul-ui/templates/dc/partitions/edit.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/partitions/index",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"h9pu8svr",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/partitions",[28,[37,4],null,[["partition","nspace","dc"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,5],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[28,[37,4],null,[["value","change"],[[28,[37,8],[[33,9],"Name:asc"],null],[28,[37,10],[[30,0],[28,[37,11],[[33,9]],null]],[["value"],["target.selected"]]]]]],[28,[37,4],null,[["searchproperty"],[[28,[37,4],null,[["value","change","default"],[[52,[28,[37,13],[[33,14],[27]],null],[28,[37,15],[[33,14],","],null],[33,16]],[28,[37,10],[[30,0],[28,[37,11],[[33,14]],null]],[["value"],["target.selectedItems"]]],[33,16]]]]]]],[30,2,["data"]]],[[[1,"\\n "],[8,[39,17],null,null,[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n "],[8,[30,1,["Title"]],null,[["@title"],["Admin Partitions"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n"],[41,[28,[37,18],["create partitions"],null],[[[1," "],[8,[39,19],null,[["@text","@route"],["Create","dc.partitions.create"]],null],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["toolbar"]],[["default"],[[[[1,"\\n"],[41,[28,[37,20],[[30,5,["length"]],0],null],[[[1," "],[8,[39,21],null,[["@search","@onsearch","@sort","@filter"],[[99,22,["@search"]],[28,[37,10],[[30,0],[28,[37,11],[[33,22]],null]],[["value"],["target.value"]]],[30,3],[30,4]]],null],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,23],null,[["@sink","@type","@label","@ondelete"],[[28,[37,3],["/${partition}/${dc}/${nspace}/partition/",[28,[37,4],null,[["partition","nspace","dc"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]]]]]],null],"partition","Partition",[99,24,["@ondelete"]]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["removed"]],[["default"],[[[[1,"\\n "],[8,[39,25],[[4,[38,26],null,[["after"],[[28,[37,10],[[30,0],[30,7]],null]]]]],[["@type"],["remove"]],null],[1,"\\n "]],[7]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,27],null,[["@type","@sort","@filters","@search","@items"],["nspace",[30,3,["value"]],[30,4],[99,22,["@search"]],[30,5]]],[["default"],[[[[1,"\\n "],[8,[30,8,["Collection"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,28],null,[["@items","@ondelete"],[[30,8,["items"]],[30,6,["delete"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,8,["Empty"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,29],null,[["@login"],[[30,1,["model","app","login","open"]]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,30],["routes.dc.partitions.index.empty.header"],[["items"],[[30,5,["length"]]]]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n "],[1,[28,[35,30],["routes.dc.partitions.index.empty.body"],[["items","canUseACLs"],[[30,5,["length"]],[28,[37,18],["use acls"],null]]]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[10,"li"],[14,0,"docs-link"],[12],[1,"\\n "],[8,[39,10],null,[["@href","@external"],[[29,[[28,[37,31],["CONSUL_DOCS_URL"],null],"/enterprise/admin-partitions"]],true]],[["default"],[[[[1,"\\n Documentation on Admin Partitions\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[8]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[3,4,5]]],[1," "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","loader","sort","filters","items","writer","after","collection"],false,["route","routeName","data-loader","uri","hash","block-slot","app-error","let","or","sortBy","action","mut","if","not-eq","searchproperty","split","searchProperties","app-view","can","hds/button","gt","consul/partition/search-bar","search","data-writer","refresh-route","consul/partition/notifications","notification","data-collection","consul/partition/list","empty-state","t","env"]]',moduleName:"consul-ui/templates/dc/partitions/index.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/peers/index",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"mLlJfy/N",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/peers",[28,[37,4],null,[["partition","nspace","dc"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,5],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[28,[37,4],null,[["value","change"],[[28,[37,8],[[33,9],"State:asc"],null],[28,[37,10],[[30,0],[28,[37,11],[[33,9]],null]],[["value"],["target.selected"]]]]]],[28,[37,4],null,[["state","searchproperty"],[[28,[37,4],null,[["value","change"],[[52,[33,13],[28,[37,14],[[33,13],","],null],[27]],[28,[37,10],[[30,0],[28,[37,11],[[33,13]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,4],null,[["value","change","default"],[[52,[28,[37,15],[[33,16],[27]],null],[28,[37,14],[[33,16],","],null],[33,17]],[28,[37,10],[[30,0],[28,[37,11],[[33,16]],null]],[["value"],["target.selectedItems"]]],[33,17]]]]]]],[30,2,["data"]]],[[[1," "],[8,[39,18],null,null,[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n "],[8,[30,1,["Title"]],null,[["@title"],["Peers"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["toolbar"]],[["default"],[[[[1,"\\n\\n"],[41,[28,[37,19],[[30,5,["length"]],0],null],[[[1," "],[8,[39,20],null,[["@search","@onsearch","@sort","@filter"],[[99,21,["@search"]],[28,[37,10],[[30,0],[28,[37,11],[[33,21]],null]],[["value"],["target.value"]]],[30,3],[30,4]]],null],[1,"\\n"]],[]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n\\n "],[8,[39,22],[[24,0,"peer-create-modal"]],[["@aria"],[[28,[37,4],null,[["label"],["Add peer connection"]]]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[1,[28,[35,23],[[28,[37,24],[[30,0],"create",[30,6]],null]],null]],[1,"\\n "],[10,"h2"],[12],[1,"\\n Add peer connection\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["body"]],[["default"],[[[[1,"\\n\\n"],[41,[30,6,["opened"]],[[[1," "],[8,[39,25],null,[["@params"],[[30,1,["params"]]]],[["default"],[[[[1,"\\n "],[8,[30,7,["Form"]],null,[["@onchange","@onsubmit"],[[30,2,["invalidate"]],[28,[37,26],[[30,0,["redirectToPeerShow"]],[30,6,["close"]]],null]]],[["default"],[[[[1,"\\n "],[1,[28,[35,23],[[28,[37,24],[[30,0],"form",[30,8]],null]],null]],[1,"\\n "],[8,[30,8,["Fieldsets"]],null,null,null],[1,"\\n "]],[8]]]]],[1,"\\n "]],[7]]]]],[1,"\\n"]],[]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[8,[30,0,["form","Actions"]],null,[["@onclose"],[[30,0,["create","close"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n "],[8,[39,27],[[4,[38,28],["click",[28,[37,29],[[30,0,["create","open"]]],null]],null]],[["@color","@text"],["primary","Add peer connection"]],null],[1,"\\n\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["content"]],[["default"],[[[[1,"\\n\\n "],[8,[39,30],null,[["@sink","@type","@label"],[[28,[37,3],["/${partition}/${dc}/${nspace}/peer/",[28,[37,4],null,[["partition","nspace","dc"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]]]]]],null],"peer","Peer"]],[["default"],[[[[1,"\\n\\n "],[8,[39,5],null,[["@name"],["removed"]],[["default"],[[[[1,"\\n "],[8,[39,31],[[4,[38,32],null,[["after"],[[28,[37,10],[[30,0],[30,10]],null]]]]],[["@type"],["remove"]],null],[1,"\\n "]],[10]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["content"]],[["default"],[[[[1,"\\n\\n "],[8,[39,22],null,[["@aria","@onclose"],[[28,[37,4],null,[["label"],["Regenerate token"]]],[28,[37,24],[[30,0],"item",[27]],null]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[1,[28,[35,23],[[28,[37,24],[[30,0],"regenerate",[30,11]],null]],null]],[1,"\\n "],[10,"h2"],[12],[1,"\\n Regenerate token\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["body"]],[["default"],[[[[1,"\\n"],[41,[30,0,["item"]],[[[1," "],[8,[39,33],null,[["@item","@onchange","@regenerate"],[[30,0,["item"]],[30,2,["invalidate"]],true]],[["default"],[[[[1,"\\n "],[1,[28,[35,23],[[28,[37,24],[[30,0],"regenerateForm",[30,12]],null]],null]],[1,"\\n "],[8,[30,12,["Fieldsets"]],null,null,null],[1,"\\n "]],[12]]]]],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[8,[30,0,["regenerateForm","Actions"]],null,[["@onclose"],[[30,0,["regenerate","close"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n "]],[11]]]]],[1,"\\n\\n "],[8,[39,34],null,[["@type","@sort","@filters","@search","@items"],["peer",[30,3,["value"]],[30,4],[99,21,["@search"]],[30,5]]],[["default"],[[[[1,"\\n "],[8,[30,13,["Collection"]],null,null,[["default"],[[[[1,"\\n\\n "],[8,[39,35],null,[["@items","@onedit","@ondelete"],[[30,13,["items"]],[28,[37,36],[[28,[37,24],[[30,0],"item"],null],[30,0,["regenerate","open"]]],null],[30,9,["delete"]]]],null],[1,"\\n\\n "]],[]]]]],[1,"\\n "],[8,[30,13,["Empty"]],null,null,[["default"],[[[[1,"\\n"],[1," "],[8,[39,37],null,[["@login"],[[30,1,["model","app","login","open"]]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,38],["routes.dc.peers.index.empty.header"],[["items"],[[30,5,["length"]]]]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n "],[1,[28,[35,38],["routes.dc.peers.index.empty.body"],[["items","canUsePartitions","canUseACLs","htmlSafe"],[[30,5,["length"]],[28,[37,39],["use partitions"],null],[28,[37,39],["use acls"],null],true]]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[10,"li"],[12],[1,"\\n"],[1," "],[8,[39,40],null,[["@text","@href","@icon","@iconPosition","@size"],["Documentation on Peers",[29,[[28,[37,41],["CONSUL_DOCS_URL"],null],"/connect/cluster-peering"]],"docs-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,40],null,[["@text","@href","@icon","@iconPosition","@size"],["Take the tutorial",[29,[[28,[37,41],["CONSUL_DOCS_URL"],null],"/connect/cluster-peering/create-manage-peering"]],"learn-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[13]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[9]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[3,4,5]]],[1," "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]]],["route","loader","sort","filters","items","modal","form","form","writer","after","modal","form","collection"],false,["route","routeName","data-loader","uri","hash","block-slot","app-error","let","or","sortBy","action","mut","if","state","split","not-eq","searchproperty","searchProperties","app-view","gt","consul/peer/search-bar","search","modal-dialog","did-insert","set","consul/peer/form","fn","hds/button","on","optional","data-writer","consul/peer/notifications","notification","consul/peer/form/generate","data-collection","consul/peer/list","queue","empty-state","t","can","hds/link/standalone","env"]]',moduleName:"consul-ui/templates/dc/peers/index.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/peers/show",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"Omb1G6/B",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/peer/${name}",[28,[37,4],null,[["partition","nspace","dc","name"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[30,1,["params","name"]]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,5],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[30,1,["params","dc"]],[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,2,["data"]]],[[[1," "],[8,[39,8],null,null,[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["breadcrumbs"]],[["default"],[[[[1,"\\n "],[10,"ol"],[12],[1,"\\n "],[10,"li"],[12],[10,3],[15,6,[28,[37,9],["dc.peers"],null]],[12],[1,"All Peers"],[13],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n "],[8,[30,1,["Title"]],null,[["@title"],[[30,6,["Name"]]]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,10],null,[["@peering"],[[30,6]]],null],[1,"\\n "],[8,[39,11],null,[["@peer"],[[30,6]]],[["default"],[[[[1,"\\n "],[8,[39,12],null,[["@items"],[[30,7,["data","tabs"]]]],null],[1,"\\n\\n "]],[7]]]]],[1,"\\n "],[8,[39,13],null,[["@name","@model"],[[99,1,["@name"]],[28,[37,14],[[28,[37,4],null,[["items","peer"],[[30,6,["PeerServerAddresses"]],[30,6]]]],[30,1,["model"]]],null]]],[["default"],[[[[1,"\\n "],[46,[28,[37,16],null,null],null,null,null],[1,"\\n "]],[8]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[3,4,5,6]]],[1," "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]]],["route","loader","dc","partition","nspace","item","peering","o"],false,["route","routeName","data-loader","uri","hash","block-slot","app-error","let","app-view","href-to","consul/peer/bento-box","peerings/provider","tab-nav","outlet","assign","component","-outlet"]]',moduleName:"consul-ui/templates/dc/peers/show.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/peers/show/addresses",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"An6ASLD6",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n"],[41,[28,[37,3],[[30,1,["model","items","length"]],0],null],[[[1," "],[8,[39,4],null,[["@items"],[[30,1,["model","items"]]]],null],[1,"\\n"]],[]],[[[1," "],[8,[39,5],null,[["@login"],[[30,1,["model","app","login","open"]]]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,7],["routes.dc.peers.show.addresses.empty.header"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[1,[28,[35,7],["routes.dc.peers.show.addresses.empty.body"],[["htmlSafe"],[true]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,6],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,8],null,[["@text","@href","@icon","@iconPosition","@size"],["Documentation on Peers",[29,[[28,[37,9],["CONSUL_DOCS_URL"],null],"/connect/cluster-peering"]],"docs-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,8],null,[["@text","@href","@icon","@iconPosition","@size"],["Take the tutorial",[29,[[28,[37,9],["CONSUL_DOCS_URL"],null],"/connect/cluster-peering/create-manage-peering"]],"learn-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]]]],[1]]]]]],["route"],false,["route","routeName","if","gt","consul/peer/address/list","empty-state","block-slot","t","hds/link/standalone","env"]]',moduleName:"consul-ui/templates/dc/peers/show/addresses.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/peers/show/exported",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"nW3ZeYXo",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/exported-services/${name}",[28,[37,4],null,[["partition","nspace","dc","name"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[30,1,["model","peer","Name"]]]]]],null]]],[["default"],[[[[1,"\\n"],[44,[[28,[37,6],[[30,1,["params","partition"]],[30,1,["model","user","token","Partition"]],"default"],null],[30,2,["data"]]],[[[1,"\\n "],[8,[39,7],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,8],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,7],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[41,[30,4,["length"]],[[[1," "],[10,0],[14,0,"search-bar"],[12],[1,"\\n "],[10,"form"],[14,0,"filter-bar"],[12],[1,"\\n "],[8,[39,10],[[24,0,"!w-80"]],[["@onsearch","@value","@placeholder"],[[28,[37,11],["target.value",[30,0,["updateSearch"]]],null],[30,0,["search"]],"Search"]],null],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1," "],[8,[39,12],null,[["@items","@search","@searchProperties"],[[30,4],[30,0,["search"]],[28,[37,13],["Name"],null]]],[["default"],[[[[1,"\\n "],[8,[39,14],null,null,[["default"],[[[[1,"\\n"],[41,[30,6,["data","height"]],[[[1," "],[10,0],[15,5,[30,6,["data","fillRemainingHeightStyle"]]],[14,0,"overflow-y-scroll"],[12],[1,"\\n"],[41,[30,5,["data","items","length"]],[[[1," "],[8,[39,15],null,[["@tagName","@estimateHeight","@items"],["ul",[30,6,["data","height"]],[30,5,["data","items"]]]],[["default"],[[[[1,"\\n "],[10,"li"],[14,0,"px-3 h-12 border-bottom-primary"],[12],[1,"\\n "],[10,3],[14,0,"hds-typography-display-300 hds-foreground-strong hds-font-weight-semibold h-full w-full flex items-center"],[15,6,[28,[37,16],["dc.services.show.index",[30,7,["Name"]]],[["params"],[[52,[28,[37,17],[[30,7,["Partition"]],[30,3]],null],[28,[37,4],null,[["partition","nspace","peer"],[[30,7,["Partition"]],[30,7,["Namespace"]],[30,7,["PeerName"]]]]],[28,[37,4],null,[["peer"],[[30,7,["PeerName"]]]]]]]]]],[12],[1,"\\n "],[1,[30,7,["Name"]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "]],[7,8]]]]],[1,"\\n"]],[]],[[[1," "],[8,[39,18],null,[["@login"],[[30,1,["model","app","login","open"]]]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,19],["routes.dc.peers.show.exported.empty.header"],[["name"],[[30,1,["model","peer","Name"]]]]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[1,[28,[35,19],["routes.dc.peers.show.exported.empty.body"],[["items","name","htmlSafe"],[[30,4,["length"]],[30,1,["model","peer","Name"]],true]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,20],null,[["@text","@href","@icon","@iconPosition","@size"],["Documentation on Peers",[29,[[28,[37,21],["CONSUL_DOCS_URL"],null],"/connect/cluster-peering"]],"docs-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,20],null,[["@text","@href","@icon","@iconPosition","@size"],["Take the tutorial",[29,[[28,[37,21],["CONSUL_DOCS_URL"],null],"/connect/cluster-peering/create-manage-peering"]],"learn-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n"]],[]],null],[1," "]],[6]]]]],[1,"\\n\\n "]],[5]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[3,4]]],[1," "]],[2]]]]],[1,"\\n\\n"]],[1]]]]]],["route","api","partition","items","search","p","service","index"],false,["route","routeName","data-loader","uri","hash","let","or","block-slot","app-error","if","freetext-filter","pick","providers/search","array","providers/dimension","vertical-collection","href-to","not-eq","empty-state","t","hds/link/standalone","env"]]',moduleName:"consul-ui/templates/dc/peers/show/exported.hbs",isStrictMode:!1}) -e.default=n})) -define("consul-ui/templates/dc/peers/show/imported",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"LzFp9Hrp",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/services/${peer}/${peerId}",[28,[37,4],null,[["partition","nspace","dc","peer","peerId"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[30,1,["model","peer","Name"]],[30,1,["model","peer","id"]]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,5],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[28,[37,4],null,[["value","change"],[[28,[37,8],[[33,9],"Status:asc"],null],[28,[37,10],[[30,0],[28,[37,11],[[33,9]],null]],[["value"],["target.selected"]]]]]],[28,[37,4],null,[["status","kind","source","searchproperty"],[[28,[37,4],null,[["value","change"],[[52,[33,13],[28,[37,14],[[33,13],","],null],[27]],[28,[37,10],[[30,0],[28,[37,11],[[33,13]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,4],null,[["value","change"],[[52,[33,15],[28,[37,14],[[33,15],","],null],[27]],[28,[37,10],[[30,0],[28,[37,11],[[33,15]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,4],null,[["value","change"],[[52,[33,16],[28,[37,14],[[33,16],","],null],[27]],[28,[37,10],[[30,0],[28,[37,11],[[33,16]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,4],null,[["value","change","default"],[[52,[28,[37,17],[[33,18],[27]],null],[28,[37,14],[[33,18],","],null],[30,0,["searchProperties"]]],[28,[37,10],[[30,0],[28,[37,11],[[33,18]],null]],[["value"],["target.selectedItems"]]],[30,0,["searchProperties"]]]]]]]],[28,[37,19],["Kind","connect-proxy",[30,2,["data"]]],null],[28,[37,8],[[30,1,["params","partition"]],[30,1,["model","user","token","Partition"]],"default"],null],[28,[37,8],[[30,1,["params","nspace"]],[30,1,["model","user","token","Namespace"]],"default"],null]],[[[1,"\\n"],[41,[28,[37,20],[[30,5,["length"]],0],null],[[[44,[[28,[37,21],[[30,5]],null]],[[[1," "],[8,[39,22],null,[["@sources","@partitions","@partition","@search","@onsearch","@sort","@filter","@peer"],[[28,[37,23],[[30,8],"ExternalSources"],null],[28,[37,23],[[30,8],"Partitions"],null],[30,6],[99,24,["@search"]],[28,[37,10],[[30,0],[28,[37,11],[[33,24]],null]],[["value"],["target.value"]]],[30,3],[30,4],[30,1,["model","peer"]]]],null],[1,"\\n"]],[8]]]],[]],null],[1," "],[8,[39,25],null,[["@type","@sort","@filters","@search","@items"],["service",[30,3,["value"]],[30,4],[99,24,["@search"]],[30,5]]],[["default"],[[[[1,"\\n "],[8,[30,9,["Collection"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,26],null,[["@items","@partition","@isPeerDetail"],[[30,9,["items"]],[30,6],true]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,9,["Empty"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,27],null,[["@login"],[[30,1,["model","app","login","open"]]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,28],["routes.dc.peers.show.imported.empty.header"],[["name"],[[30,1,["model","peer","Name"]]]]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[1,[28,[35,28],["routes.dc.peers.show.imported.empty.body"],[["items","name","htmlSafe"],[[30,5,["length"]],[30,1,["model","peer","Name"]],true]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[10,"li"],[12],[1,"\\n"],[1," "],[8,[39,29],null,[["@text","@href","@icon","@iconPosition","@size"],["Documentation on Peers",[29,[[28,[37,30],["CONSUL_DOCS_URL"],null],"/connect/cluster-peering"]],"docs-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,29],null,[["@text","@href","@icon","@iconPosition","@size"],["Take the tutorial",[29,[[28,[37,30],["CONSUL_DOCS_URL"],null],"/connect/cluster-peering/create-manage-peering"]],"learn-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[9]]]]],[1,"\\n"]],[3,4,5,6,7]]],[1," "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]]],["route","api","sort","filters","items","partition","nspace","items","collection"],false,["route","routeName","data-loader","uri","hash","block-slot","app-error","let","or","sortBy","action","mut","if","status","split","kind","source","not-eq","searchproperty","reject-by","gt","collection","consul/service/search-bar","get","search","data-collection","consul/service/list","empty-state","t","hds/link/standalone","env"]]',moduleName:"consul-ui/templates/dc/peers/show/imported.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/peers/show/index",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"gn6gS8WU",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[30,0,["transitionToImported"]]],null]],[1,"\\n"]],[1]]]]]],["route"],false,["route","routeName","did-insert"]]',moduleName:"consul-ui/templates/dc/peers/show/index.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/routing-config",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"wffPe0l/",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/discovery-chain/${name}",[28,[37,4],null,[["partition","nspace","dc","name"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[30,1,["params","name"]]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,5],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[30,2,["data"]]],[[[8,[39,8],null,null,[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["breadcrumbs"]],[["default"],[[[[1,"\\n "],[10,"ol"],[12],[1,"\\n "],[10,"li"],[12],[10,3],[15,6,[28,[37,9],["dc.services"],null]],[12],[1,"All Services"],[13],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n "],[8,[30,1,["Title"]],null,[["@title"],[[30,3,["Chain","ServiceName"]]]],null],[1,"\\n "],[13],[1,"\\n "],[8,[39,10],null,[["@source","@withInfo"],[[28,[37,11],["routes.dc.routing-config.source"],null],true]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[10,0],[14,0,"container"],[12],[1,"\\n "],[8,[39,12],null,[["@chain"],[[30,3,["Chain"]]]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[]]]]],[1,"\\n"]],[3]]],[1," "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","loader","item"],false,["route","routeName","data-loader","uri","hash","block-slot","app-error","let","app-view","href-to","consul/source","t","consul/discovery-chain"]]',moduleName:"consul-ui/templates/dc/routing-config.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/services/index",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"ixFFtisJ",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/services",[28,[37,4],null,[["partition","nspace","dc"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,5],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n\\n"],[44,[[28,[37,4],null,[["value","change"],[[28,[37,8],[[33,9],"Status:asc"],null],[28,[37,10],[[30,0],[28,[37,11],[[33,9]],null]],[["value"],["target.selected"]]]]]],[28,[37,4],null,[["status","kind","source","searchproperty"],[[28,[37,4],null,[["value","change"],[[52,[33,13],[28,[37,14],[[33,13],","],null],[27]],[28,[37,10],[[30,0],[28,[37,11],[[33,13]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,4],null,[["value","change"],[[52,[33,15],[28,[37,14],[[33,15],","],null],[27]],[28,[37,10],[[30,0],[28,[37,11],[[33,15]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,4],null,[["value","change"],[[52,[33,16],[28,[37,14],[[33,16],","],null],[27]],[28,[37,10],[[30,0],[28,[37,11],[[33,16]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,4],null,[["value","change","default"],[[52,[28,[37,17],[[33,18],[27]],null],[28,[37,14],[[33,18],","],null],[30,0,["_searchProperties"]]],[28,[37,10],[[30,0],[28,[37,11],[[33,18]],null]],[["value"],["target.selectedItems"]]],[30,0,["_searchProperties"]]]]]]]],[28,[37,19],["Kind","connect-proxy",[30,2,["data"]]],null],[28,[37,8],[[30,1,["params","partition"]],[30,1,["model","user","token","Partition"]],"default"],null],[28,[37,8],[[30,1,["params","nspace"]],[30,1,["model","user","token","Namespace"]],"default"],null]],[[[1,"\\n "],[8,[39,20],null,null,[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n "],[8,[30,1,["Title"]],null,[["@title"],["Services"]],null],[1," "],[10,"em"],[12],[1,[28,[35,21],[[30,5,["length"]]],null]],[1," total"],[13],[1,"\\n "],[13],[1,"\\n "],[10,"label"],[14,"for","toolbar-toggle"],[12],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["toolbar"]],[["default"],[[[[1,"\\n"],[41,[28,[37,22],[[30,5,["length"]],0],null],[[[44,[[28,[37,23],[[30,5]],null]],[[[1," "],[8,[39,24],null,[["@sources","@partitions","@partition","@search","@onsearch","@sort","@filter"],[[28,[37,25],[[30,8],"ExternalSources"],null],[28,[37,25],[[30,8],"Partitions"],null],[30,6],[99,26,["@search"]],[28,[37,10],[[30,0],[28,[37,11],[[33,26]],null]],[["value"],["target.value"]]],[30,3],[30,4]]],null],[1,"\\n"]],[8]]]],[]],null],[1," "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,27],null,[["@type","@sort","@filters","@search","@items"],["service",[30,3,["value"]],[30,4],[99,26,["@search"]],[30,5]]],[["default"],[[[[1,"\\n "],[8,[30,9,["Collection"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,28],null,[["@items","@partition"],[[30,9,["items"]],[30,6]]],[["default"],[[[[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,9,["Empty"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,29],null,[["@login"],[[30,1,["model","app","login","open"]]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,30],["routes.dc.services.index.empty.header"],[["items"],[[30,5,["length"]]]]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[1,[28,[35,30],["routes.dc.services.index.empty.body"],[["items","canUseACLs","htmlSafe"],[[30,5,["length"]],[28,[37,31],["use acls"],null],true]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,32],null,[["@text","@href","@icon","@iconPosition","@size"],["Documentation on Services",[29,[[28,[37,33],["CONSUL_DOCS_URL"],null],"/commands/services"]],"docs-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,32],null,[["@text","@href","@icon","@iconPosition","@size"],["Take the tutorial",[29,[[28,[37,33],["CONSUL_DOCS_LEARN_URL"],null],"/consul/getting-started/services"]],"learn-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[9]]]]],[1,"\\n "]],[]]]]],[1,"\\n\\n "]],[]]]]],[1,"\\n\\n"]],[3,4,5,6,7]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","api","sort","filters","items","partition","nspace","items","collection"],false,["route","routeName","data-loader","uri","hash","block-slot","app-error","let","or","sortBy","action","mut","if","status","split","kind","source","not-eq","searchproperty","reject-by","app-view","format-number","gt","collection","consul/service/search-bar","get","search","data-collection","consul/service/list","empty-state","t","can","hds/link/standalone","env"]]',moduleName:"consul-ui/templates/dc/services/index.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/services/instance",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"qYqPny+P",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/service-instance/${id}/${node}/${name}/${peer}",[28,[37,4],null,[["partition","nspace","dc","id","node","name","peer"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[30,1,["params","id"]],[30,1,["params","node"]],[30,1,["params","name"]],[30,1,["params","peer"]]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,5],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["disconnected"]],[["default"],[[[[1,"\\n"],[41,[28,[37,8],[[30,2,["error","status"]],"404"],null],[[[1," "],[8,[39,9],[[4,[38,10],null,[["sticky"],[true]]]],[["@color"],["warning"]],[["default"],[[[[1,"\\n "],[8,[30,4,["Title"]],null,null,[["default"],[[[[1,"Warning!"]],[]]]]],[1,"\\n "],[8,[30,4,["Description"]],null,null,[["default"],[[[[1,"\\n This service has been deregistered and no longer exists in the catalog.\\n "]],[]]]]],[1,"\\n "]],[4]]]]],[1,"\\n"]],[]],[[[41,[28,[37,8],[[30,2,["error","status"]],"403"],null],[[[1," "],[8,[39,9],[[4,[38,10],null,[["sticky"],[true]]]],[["@color"],["critical"]],[["default"],[[[[1,"\\n "],[8,[30,5,["Title"]],null,null,[["default"],[[[[1,"Error!"]],[]]]]],[1,"\\n "],[8,[30,5,["Description"]],null,null,[["default"],[[[[1,"\\n You no longer have access to this service.\\n "]],[]]]]],[1,"\\n "]],[5]]]]],[1,"\\n"]],[]],[[[1," "],[8,[39,9],[[4,[38,10],null,[["sticky"],[true]]]],[["@color"],["critical"]],[["default"],[[[[1,"\\n "],[8,[30,6,["Title"]],null,null,[["default"],[[[[1,"Warning!"]],[]]]]],[1,"\\n "],[8,[30,6,["Description"]],null,null,[["default"],[[[[1,"\\n An error was returned whilst loading this data, refresh to try again.\\n "]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n "]],[]]]],[]]],[1," "]],[3]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[30,2,["data"]]],[[[41,[30,7,["IsOrigin"]],[[[1," "],[8,[39,12],null,[["@src","@onchange"],[[28,[37,3],["/${partition}/${nspace}/${dc}/proxy-instance/${id}/${node}/${name}",[28,[37,4],null,[["partition","nspace","dc","id","node","name"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[30,1,["params","id"]],[30,1,["params","node"]],[30,1,["params","name"]]]]]],null],[28,[37,13],[[30,0],[28,[37,14],[[33,15]],null]],[["value"],["data"]]]]],[["default"],[[[[1,"\\n"],[41,[30,8,["data","ServiceID"]],[[[1," "],[8,[39,12],null,[["@src","@onchange"],[[28,[37,3],["/${partition}/${nspace}/${dc}/service-instance/${id}/${node}/${name}/${peer}",[28,[37,4],null,[["partition","nspace","dc","id","node","name","peer"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[30,8,["data","ServiceID"]],[30,8,["data","NodeName"]],[30,8,["data","ServiceName"]],[30,1,["params","peer"]]]]]],null],[28,[37,13],[[30,0],[28,[37,14],[[33,16]],null]],[["value"],["data"]]]]],null],[1,"\\n"]],[]],null],[1," "]],[8]]]]],[1,"\\n"]],[]],null],[1," "],[8,[39,17],null,null,[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["breadcrumbs"]],[["default"],[[[[1,"\\n "],[10,"ol"],[12],[1,"\\n "],[10,"li"],[12],[10,3],[15,6,[28,[37,18],["dc.services"],[["params"],[[28,[37,4],null,[["peer"],[[27]]]]]]]],[12],[1,"All Services"],[13],[13],[1,"\\n "],[10,"li"],[12],[11,3],[16,6,[28,[37,18],["dc.services.show"],null]],[4,[38,19],[[28,[37,20],["Service (",[30,7,["Service","Service"]],")"],null]],null],[12],[1,"\\n Service ("],[1,[30,7,["Service","Service"]]],[1,")\\n "],[13],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n "],[8,[30,1,["Title"]],null,[["@title"],[[30,7,["Service","ID"]]]],null],[1,"\\n "],[13],[1,"\\n "],[8,[39,21],null,[["@item","@withInfo"],[[30,7],true]],null],[1,"\\n "],[8,[39,22],null,[["@item","@withInfo"],[[30,7],true]],null],[1,"\\n"],[41,[28,[37,8],[[33,15,["ServiceProxy","Mode"]],"transparent"],null],[[[1," "],[8,[39,23],null,null,null],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["nav"]],[["default"],[[[[1,"\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"Service Name"],[13],[1,"\\n "],[10,"dd"],[12],[10,3],[15,6,[29,[[28,[37,18],["dc.services.show",[30,7,["Service","Service"]]],null]]]],[12],[1,[30,7,["Service","Service"]]],[13],[13],[1,"\\n "],[13],[1,"\\n"],[41,[51,[30,7,["Node","Meta","synthetic-node"]]],[[[1," "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"Node Name"],[13],[1,"\\n "],[10,"dd"],[12],[10,3],[15,6,[29,[[28,[37,18],["dc.nodes.show",[30,7,["Node","Node"]]],null]]]],[12],[1,[30,7,["Node","Node"]]],[13],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[41,[30,7,["Service","PeerName"]],[[[1," "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[12],[1,"Peer Name"],[13],[1,"\\n "],[10,"dd"],[12],[10,3],[15,6,[28,[37,18],["dc.peers.show",[30,7,["Service","PeerName"]]],[["params"],[[28,[37,4],null,[["peer"],[[27]]]]]]]],[12],[1,[30,7,["Service","PeerName"]]],[13],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n"],[44,[[28,[37,25],[[30,7,["Service","Address"]],[30,7,["Node","Address"]]],null]],[[[1," "],[8,[39,26],null,[["@value","@name"],[[30,9],"Address"]],[["default"],[[[[1,[30,9]]],[]]]]],[1,"\\n"]],[9]]],[1," "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,27],null,[["@items"],[[28,[37,28],[[28,[37,29],[[28,[37,4],null,[["label","href","selected"],["Health Checks",[28,[37,18],["dc.services.instance.healthchecks"],null],[28,[37,30],["dc.services.instance.healthchecks"],null]]]],[52,[28,[37,8],[[30,7,["Service","Kind"]],"mesh-gateway"],null],[28,[37,4],null,[["label","href","selected"],["Addresses",[28,[37,18],["dc.services.instance.addresses"],null],[28,[37,30],["dc.services.instance.addresses"],null]]]]],[52,[33,16],[28,[37,4],null,[["label","href","selected"],["Upstreams",[28,[37,18],["dc.services.instance.upstreams"],null],[28,[37,30],["dc.services.instance.upstreams"],null]]]]],[52,[33,16],[28,[37,4],null,[["label","href","selected"],["Exposed Paths",[28,[37,18],["dc.services.instance.exposedpaths"],null],[28,[37,30],["dc.services.instance.exposedpaths"],null]]]]],[28,[37,4],null,[["label","href","selected"],["Tags & Meta",[28,[37,18],["dc.services.instance.metadata"],null],[28,[37,30],["dc.services.instance.metadata"],null]]]]],null]],null]]],null],[1,"\\n "],[8,[39,31],null,[["@name","@model"],[[99,1,["@name"]],[28,[37,32],[[28,[37,4],null,[["proxy","meta","item"],[[33,16],[33,15],[30,7]]]],[30,1,["model"]]],null]]],[["default"],[[[[1,"\\n "],[46,[28,[37,34],null,null],null,null,null],[1,"\\n "]],[10]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[7]]],[1," "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]]],["route","loader","after","T","T","T","item","meta","address","o"],false,["route","routeName","data-loader","uri","hash","block-slot","app-error","if","eq","hds/toast","notification","let","data-source","action","mut","meta","proxy","app-view","href-to","tooltip","concat","consul/external-source","consul/kind","consul/transparent-proxy","unless","or","copy-button","tab-nav","compact","array","is-href","outlet","assign","component","-outlet"]]',moduleName:"consul-ui/templates/dc/services/instance.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/services/instance/addresses",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"OEv9mr5t",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n"],[44,[[28,[37,3],[[30,1,["model","item","Service","TaggedAddresses"]]],null]],[[[1," "],[10,0],[14,0,"tab-section"],[12],[1,"\\n"],[41,[28,[37,5],[[30,2,["length"]],0],null],[[[1," "],[8,[39,6],[[24,0,"consul-tagged-addresses"]],[["@items"],[[30,2]]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"th"],[12],[1,"Tag"],[13],[1,"\\n "],[10,"th"],[12],[1,"Address"],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,7],null,[["@name"],["row"]],[["default"],[[[[1,"\\n"],[44,[[28,[37,8],[1,[30,3]],null]],[[[41,[30,5],[[[1," "],[10,"td"],[12],[1,"\\n "],[1,[28,[35,8],[0,[30,3]],null]],[41,[28,[37,9],[[28,[37,10],[[30,5,["Address"]],[33,11,["Address"]]],null],[28,[37,10],[[30,5,["Port"]],[33,11,["Port"]]],null]],null],[[[1," "],[10,"em"],[12],[1,"(default)"],[13]],[]],null],[1,"\\n "],[13],[1,"\\n "],[10,"td"],[12],[1,"\\n "],[1,[30,5,["Address"]]],[1,":"],[1,[30,5,["Port"]]],[1,"\\n "],[13],[1,"\\n"]],[]],null]],[5]]],[1," "]],[]]]]],[1,"\\n "]],[3,4]]]]],[1,"\\n"]],[]],[[[1," "],[10,2],[12],[1,"\\n There are no additional addresses.\\n "],[13],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n"]],[2]]]],[1]]]]],[1,"\\n"]],["route","items","taggedAddress","index","address"],false,["route","routeName","let","entries","if","gt","tabular-collection","block-slot","object-at","and","eq","item"]]',moduleName:"consul-ui/templates/dc/services/instance/addresses.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/services/instance/exposedpaths",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"bKwLyBQ8",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n"],[44,[[30,1,["model","proxy"]],[30,1,["model","meta"]]],[[[1," "],[10,0],[14,0,"tab-section"],[12],[1,"\\n"],[41,[28,[37,4],[[30,3,["ServiceProxy","Expose","Paths","length"]],0],null],[[[1," "],[1,[28,[35,5],["routes.dc.services.instance.exposedpaths.intro"],[["htmlSafe"],[true]]]],[1,"\\n "],[8,[39,6],null,[["@items","@address"],[[30,3,["ServiceProxy","Expose","Paths"]],[28,[37,7],[[30,2,["Service","Address"]],[30,2,["Node","Address"]]],null]]],null],[1,"\\n"]],[]],[[[1," "],[8,[39,8],null,null,[["default"],[[[[1,"\\n "],[8,[39,9],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[1,[28,[35,5],["routes.dc.services.instance.exposedpaths.empty.body"],[["htmlSafe"],[true]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n"]],[2,3]]]],[1]]]]]],["route","item","proxy"],false,["route","routeName","let","if","gt","t","consul/exposed-path/list","or","empty-state","block-slot"]]',moduleName:"consul-ui/templates/dc/services/instance/exposedpaths.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/services/instance/healthchecks",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"c8iqBcKE",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n"],[44,[[28,[37,3],[[28,[37,4],[[30,0],"syntheticNodeSearchPropertyFilter",[30,1,["model","item"]]],null],[33,5]],null]],[[[44,[[28,[37,6],null,[["value","change"],[[28,[37,7],[[33,8],"Status:asc"],null],[28,[37,4],[[30,0],[28,[37,9],[[33,8]],null]],[["value"],["target.selected"]]]]]],[28,[37,6],null,[["status","check","searchproperty"],[[28,[37,6],null,[["value","change"],[[52,[33,11],[28,[37,12],[[33,11],","],null],[27]],[28,[37,4],[[30,0],[28,[37,9],[[33,11]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,6],null,[["value","change"],[[52,[33,13],[28,[37,12],[[33,13],","],null],[27]],[28,[37,4],[[30,0],[28,[37,9],[[33,13]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,6],null,[["value","change","default"],[[52,[28,[37,14],[[33,15],[27]],null],[28,[37,12],[[33,15],","],null],[30,2]],[28,[37,4],[[30,0],[28,[37,9],[[33,15]],null]],[["value"],["target.selectedItems"]]],[30,2]]]]]]],[28,[37,3],[[28,[37,4],[[30,0],"syntheticNodeHealthCheckFilter",[30,1,["model","item"]]],null],[28,[37,16],[[28,[37,17],[[30,1,["model","item","Checks"]],[30,1,["model","proxy","Checks"]]],null],[30,1,["model","proxy","ServiceProxy","Expose","Checks"]]],null]],null]],[[[1," "],[10,0],[14,0,"tab-section"],[12],[1,"\\n\\n"],[41,[28,[37,18],[[30,5,["length"]],0],null],[[[1," "],[10,"input"],[14,1,"toolbar-toggle"],[14,4,"checkbox"],[12],[13],[1,"\\n "],[8,[39,19],null,[["@search","@onsearch","@sort","@filter"],[[99,20,["@search"]],[28,[37,4],[[30,0],[28,[37,9],[[33,20]],null]],[["value"],["target.value"]]],[30,3],[30,4]]],null],[1,"\\n"]],[]],null],[1,"\\n"],[44,[[28,[37,21],["Type","serf",[30,5]],null]],[[[41,[28,[37,22],[[30,6],[28,[37,23],[[30,6,["Status"]],"critical"],null]],null],[[[1," "],[8,[39,24],[[24,0,"mb-3 mt-2"]],[["@type","@color"],["inline","warning"]],[["default"],[[[[1,"\\n "],[8,[30,7,["Title"]],null,null,[["default"],[[[[1,[28,[35,25],["routes.dc.services.instance.healthchecks.critical-serf-notice.header"],null]]],[]]]]],[1,"\\n "],[8,[30,7,["Description"]],null,null,[["default"],[[[[1,[28,[35,25],["routes.dc.services.instance.healthchecks.critical-serf-notice.body"],[["htmlSafe"],[true]]]]],[]]]]],[1,"\\n "]],[7]]]]],[1,"\\n"]],[]],null]],[6]]],[1," "],[8,[39,26],null,[["@type","@sort","@filters","@search","@items"],["health-check",[30,3,["value"]],[30,4],[99,20,["@search"]],[30,5]]],[["default"],[[[[1,"\\n "],[8,[30,8,["Collection"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,27],null,[["@items"],[[30,8,["items"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,8,["Empty"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,28],null,null,[["default"],[[[[1,"\\n "],[8,[39,29],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[1,[28,[35,25],["routes.dc.services.instance.healthchecks.empty"],[["items","htmlSafe"],[[30,5,["length"]],true]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[8]]]]],[1,"\\n\\n "],[13],[1,"\\n"]],[3,4,5]]]],[2]]]],[1]]]]],[1,"\\n"]],["route","filteredSearchProperties","sort","filters","items","serf","A","collection"],false,["route","routeName","let","filter","action","searchProperties","hash","or","sortBy","mut","if","status","split","check","not-eq","searchproperty","merge-checks","array","gt","consul/health-check/search-bar","search","find-by","and","eq","hds/alert","t","data-collection","consul/health-check/list","empty-state","block-slot"]]',moduleName:"consul-ui/templates/dc/services/instance/healthchecks.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/services/instance/metadata",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"TS1cbRDj",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n"],[44,[[30,1,["model","item"]]],[[[1," "],[10,0],[14,0,"tab-section"],[12],[1,"\\n "],[10,"section"],[14,0,"tags"],[12],[1,"\\n "],[10,"h2"],[12],[1,"Tags"],[13],[1,"\\n"],[41,[28,[37,4],[[30,2,["Tags","length"]],0],null],[[[1," "],[8,[39,5],null,[["@item"],[[30,2]]],null],[1,"\\n"]],[]],[[[1," "],[8,[39,6],null,null,[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n There are no tags.\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n "],[10,"section"],[14,0,"metadata"],[12],[1,"\\n "],[10,"h2"],[12],[1,"Meta"],[13],[1,"\\n"],[41,[30,2,["Meta"]],[[[1," "],[8,[39,8],null,[["@items"],[[28,[37,9],[[30,2,["Meta"]]],null]]],null],[1,"\\n"]],[]],[[[1," "],[8,[39,6],null,null,[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[10,2],[12],[1,"\\n This instance has no metadata.\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n "],[13],[1,"\\n"]],[2]]]],[1]]]]],[1,"\\n"]],["route","item"],false,["route","routeName","let","if","gt","tag-list","empty-state","block-slot","consul/metadata/list","entries"]]',moduleName:"consul-ui/templates/dc/services/instance/metadata.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/services/instance/upstreams",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"2fQZNDmw",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[10,0],[14,0,"tab-section"],[12],[1,"\\n"],[44,[[28,[37,3],null,[["value","change"],[[28,[37,4],[[33,5],"DestinationName:asc"],null],[28,[37,6],[[30,0],[28,[37,7],[[33,5]],null]],[["value"],["target.selected"]]]]]],[28,[37,3],null,[["searchproperty"],[[28,[37,3],null,[["value","change","default"],[[52,[28,[37,9],[[33,10],[27]],null],[28,[37,11],[[33,10],","],null],[33,12]],[28,[37,6],[[30,0],[28,[37,7],[[33,10]],null]],[["value"],["target.selectedItems"]]],[33,12]]]]]]],[28,[37,4],[[30,1,["params","partition"]],[30,1,["model","user","token","Partition"]],"default"],null],[28,[37,4],[[30,1,["params","nspace"]],[30,1,["model","user","token","Namespace"]],"default"],null],[30,1,["params","dc"]],[30,1,["model","proxy"]],[30,1,["model","meta"]],[30,1,["model","proxy","Service","Proxy","Upstreams"]]],[[[41,[28,[37,13],[[30,9,["length"]],0],null],[[[1," "],[10,"input"],[14,1,"toolbar-toggle"],[14,4,"checkbox"],[12],[13],[1,"\\n "],[8,[39,14],null,[["@search","@onsearch","@searchproperties","@sort","@filter"],[[99,15,["@search"]],[28,[37,6],[[30,0],[28,[37,7],[[33,15]],null]],[["value"],["target.value"]]],[99,12,["@searchproperties"]],[30,2],[30,3]]],null],[1,"\\n"]],[]],null],[41,[28,[37,16],[[30,8,["ServiceProxy","Mode"]],"transparent"],null],[[[1," "],[8,[39,17],[[24,0,"mb-3 mt-2"]],[["@type","@color"],["inline","warning"]],[["default"],[[[[1,"\\n "],[8,[30,10,["Title"]],null,null,[["default"],[[[[1,[28,[35,18],["routes.dc.services.instance.upstreams.tproxy-mode.header"],null]]],[]]]]],[1,"\\n "],[8,[30,10,["Description"]],null,null,[["default"],[[[[1,"\\n "],[1,[28,[35,18],["routes.dc.services.instance.upstreams.tproxy-mode.body"],null]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,10,["Link::Standalone"]],null,[["@text","@href","@icon","@iconPosition","@size"],[[28,[37,18],["routes.dc.services.instance.upstreams.tproxy-mode.footer.text"],null],[29,[[28,[37,19],[[28,[37,20],["CONSUL_DOCS_URL"],null],[28,[37,18],["routes.dc.services.instance.upstreams.tproxy-mode.footer.link"],null]],null]]],"docs-link","trailing","small"]],null],[1,"\\n "]],[10]]]]],[1,"\\n"]],[]],null],[1," "],[8,[39,21],null,[["@type","@sort","@filters","@search","@items"],["upstream-instance",[30,2,["value"]],[30,3],[99,15,["@search"]],[30,9]]],[["default"],[[[[1,"\\n "],[8,[30,11,["Collection"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,22],null,[["@items","@dc","@nspace","@partition"],[[30,11,["items"]],[30,6],[30,5],[30,4]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,11,["Empty"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,23],null,null,[["default"],[[[[1,"\\n "],[8,[39,24],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[1,[28,[35,18],["routes.dc.services.instance.upstreams.empty"],[["items","htmlSafe"],[[30,9,["length"]],true]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[11]]]]],[1,"\\n"]],[2,3,4,5,6,7,8,9]]],[1," "],[13],[1,"\\n"]],[1]]]]]],["route","sort","filters","partition","nspace","dc","proxy","meta","items","A","collection"],false,["route","routeName","let","hash","or","sortBy","action","mut","if","not-eq","searchproperty","split","searchProperties","gt","consul/upstream-instance/search-bar","search","eq","hds/alert","t","concat","env","data-collection","consul/upstream-instance/list","empty-state","block-slot"]]',moduleName:"consul-ui/templates/dc/services/instance/upstreams.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/services/show",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"ep8WMqyL",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/service-instances/for-service/${name}/${peer}",[28,[37,4],null,[["partition","nspace","dc","name","peer"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[30,1,["params","name"]],[30,1,["params","peer"]]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,5],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["disconnected"]],[["default"],[[[[1,"\\n"],[41,[28,[37,8],[[30,2,["error","status"]],"404"],null],[[[1," "],[8,[39,9],[[4,[38,10],null,[["sticky"],[true]]]],[["@color"],["warning"]],[["default"],[[[[1,"\\n "],[8,[30,4,["Title"]],null,null,[["default"],[[[[1,"Warning!"]],[]]]]],[1,"\\n "],[8,[30,4,["Description"]],null,null,[["default"],[[[[1,"This service has been deregistered and no longer exists in the catalog."]],[]]]]],[1,"\\n "]],[4]]]]],[1,"\\n"]],[]],[[[41,[28,[37,8],[[30,2,["error","status"]],"403"],null],[[[1," "],[8,[39,9],[[4,[38,10],null,[["sticky"],[true]]]],[["@color"],["critical"]],[["default"],[[[[1,"\\n "],[8,[30,5,["Title"]],null,null,[["default"],[[[[1,"Error!"]],[]]]]],[1,"\\n "],[8,[30,5,["Description"]],null,null,[["default"],[[[[1,"You no longer have access to this service."]],[]]]]],[1,"\\n "]],[5]]]]],[1,"\\n"]],[]],[[[1," "],[8,[39,9],[[4,[38,10],null,[["sticky"],[true]]]],[["@color"],["warning"]],[["default"],[[[[1,"\\n "],[8,[30,6,["Title"]],null,null,[["default"],[[[[1,"Warning!"]],[]]]]],[1,"\\n "],[8,[30,6,["Description"]],null,null,[["default"],[[[[1,"An error was returned whilst loading this data, refresh to try again."]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n "]],[]]]],[]]],[1," "]],[3]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[30,2,["data"]],[30,2,["data","firstObject"]],[30,1,["model","dc"]]],[[[1,"\\n"],[41,[30,8,["IsOrigin"]],[[[1," "],[8,[39,12],null,[["@src","@onchange"],[[28,[37,3],["/${partition}/${nspace}/${dc}/proxies/for-service/${name}",[28,[37,4],null,[["partition","nspace","dc","name"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[30,1,["params","name"]]]]]],null],[28,[37,13],[[30,0],[28,[37,14],[[33,15]],null]],[["value"],["data"]]]]],null],[1,"\\n"],[41,[28,[37,16],[[33,17]],null],[[[1," "],[8,[39,12],null,[["@src","@onchange"],[[28,[37,3],["/${partition}/${nspace}/${dc}/discovery-chain/${name}",[28,[37,4],null,[["partition","nspace","dc","name"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[30,1,["params","name"]]]]]],null],[28,[37,13],[[30,0],[28,[37,14],[[33,17]],null]],[["value"],["data"]]]]],null],[1,"\\n"]],[]],null],[1," "],[1,[28,[35,18],[[28,[37,19],[[30,0],"chain",[27]],null],[30,1,["params","dc"]]],null]],[1,"\\n"]],[]],null],[44,[[28,[37,4],null,[["topology","services","upstreams","instances","intentions","routing","tags"],[[28,[37,20],[[30,9,["MeshEnabled"]],[30,8,["IsMeshOrigin"]],[28,[37,21],[[28,[37,22],[[33,15,["length"]],0],null],[28,[37,8],[[30,8,["Service","Kind"]],"ingress-gateway"],null]],null],[28,[37,16],[[30,8,["Service","PeerName"]]],null]],null],[28,[37,20],[[28,[37,8],[[30,8,["Service","Kind"]],"terminating-gateway"],null],[28,[37,16],[[30,8,["Service","PeerName"]]],null]],null],[28,[37,20],[[28,[37,8],[[30,8,["Service","Kind"]],"ingress-gateway"],null],[28,[37,16],[[30,8,["Service","PeerName"]]],null]],null],true,[28,[37,20],[[28,[37,23],[[30,8,["Service","Kind"]],"terminating-gateway"],null],[28,[37,24],["read intention for service"],[["item"],[[30,8,["Service"]]]]],[28,[37,16],[[30,8,["Service","PeerName"]]],null]],null],[28,[37,20],[[30,9,["MeshEnabled"]],[30,8,["IsOrigin"]],[28,[37,16],[[30,8,["Service","PeerName"]]],null]],null],true]]]],[[[1," "],[8,[39,25],null,null,[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["notification"]],[["default"],[[[[1,"\\n "],[8,[39,26],null,[["@type","@status","@error"],[[30,12],[30,11],[30,14]]],null],[1,"\\n "]],[11,12,13,14]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["breadcrumbs"]],[["default"],[[[[1,"\\n "],[10,"ol"],[12],[1,"\\n "],[10,"li"],[12],[10,3],[15,6,[28,[37,27],["dc.services"],[["params"],[[28,[37,4],null,[["peer"],[[27]]]]]]]],[12],[1,"All Services"],[13],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n "],[8,[30,1,["Title"]],null,[["@title"],[[30,8,["Service","Service"]]]],null],[1,"\\n "],[13],[1,"\\n "],[8,[39,28],null,[["@item","@withInfo"],[[30,8,["Service"]],true]],null],[1,"\\n "],[8,[39,29],null,[["@item","@withInfo"],[[30,8,["Service"]],true]],null],[1,"\\n "],[8,[39,30],null,[["@item"],[[30,8,["Service"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["nav"]],[["default"],[[[[1,"\\n"],[41,[28,[37,23],[[30,8,["Service","Kind"]],"mesh-gateway"],null],[[[1," "],[8,[39,31],null,[["@items"],[[28,[37,32],[[28,[37,33],[[52,[30,10,["topology"]],[28,[37,4],null,[["label","href","selected"],["Topology",[28,[37,27],["dc.services.show.topology"],null],[28,[37,34],["dc.services.show.topology"],null]]]],""],[52,[30,10,["services"]],[28,[37,4],null,[["label","href","selected"],["Linked Services",[28,[37,27],["dc.services.show.services"],null],[28,[37,34],["dc.services.show.services"],null]]]],""],[52,[30,10,["upstreams"]],[28,[37,4],null,[["label","href","selected"],["Upstreams",[28,[37,27],["dc.services.show.upstreams"],null],[28,[37,34],["dc.services.show.upstreams"],null]]]],""],[52,[30,10,["instances"]],[28,[37,4],null,[["label","href","selected"],["Instances",[28,[37,27],["dc.services.show.instances"],null],[28,[37,34],["dc.services.show.instances"],null]]]],""],[52,[30,10,["intentions"]],[28,[37,4],null,[["label","href","selected"],["Intentions",[28,[37,27],["dc.services.show.intentions"],null],[28,[37,34],["dc.services.show.intentions"],null]]]],""],[52,[30,10,["routing"]],[28,[37,4],null,[["label","href","selected"],["Routing",[28,[37,27],["dc.services.show.routing"],null],[28,[37,34],["dc.services.show.routing"],null]]]],""],[52,[30,10,["tags"]],[28,[37,4],null,[["label","href","selected"],["Tags",[28,[37,27],["dc.services.show.tags"],null],[28,[37,34],["dc.services.show.tags"],null]]]],""]],null]],null]]],null],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[8,[39,12],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/ui-config",[28,[37,4],null,[["partition","nspace","dc"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]]]]]],null]]],[["default"],[[[[1,"\\n"],[41,[30,15,["data","dashboard_url_templates","service"]],[[[1," "],[8,[39,13],[[24,0,"external-dashboard"]],[["@href","@external"],[[28,[37,35],[[30,15,["data","dashboard_url_templates","service"]],[28,[37,4],null,[["Datacenter","Service"],[[30,9,["Name"]],[28,[37,4],null,[["Name","Namespace","Partition"],[[30,8,["Service","Service"]],[28,[37,21],[[30,8,["Service","Namespace"]],""],null],[28,[37,21],[[30,8,["Service","Partition"]],""],null]]]]]]]],null],true]],[["default"],[[[[1,"\\n Open dashboard\\n "]],[]]]]],[1,"\\n"]],[]],null],[1," "]],[15]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["content"]],[["default"],[[[[1,"\\n"],[41,[28,[37,21],[[28,[37,16],[[30,8,["IsOrigin"]]],null],[33,17]],null],[[[1," "],[8,[39,36],null,[["@name","@model"],[[99,1,["@name"]],[28,[37,37],[[28,[37,4],null,[["items","proxies","item","tabs"],[[30,7],[33,15],[30,8],[30,10]]]],[30,1,["model"]]],null]]],[["default"],[[[[1,"\\n "],[46,[28,[37,39],null,null],null,null,null],[1,"\\n "]],[16]]]]],[1,"\\n"]],[]],null],[1," "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[10]]]],[7,8,9]]],[1," "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]]],["route","loader","after","T","T","T","items","item","dc","tabs","status","type","item","error","config","o"],false,["route","routeName","data-loader","uri","hash","block-slot","app-error","if","eq","hds/toast","notification","let","data-source","action","mut","proxies","not","chain","did-insert","set","and","or","gt","not-eq","can","app-view","topology-metrics/notifications","href-to","consul/external-source","consul/kind","consul/peer/info","tab-nav","compact","array","is-href","render-template","outlet","assign","component","-outlet"]]',moduleName:"consul-ui/templates/dc/services/show.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/services/show/index",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"och8aDuk",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n"],[41,[30,1,["model","tabs","topology"]],[[[1," "],[1,[28,[35,3],[[28,[37,4],["replaceWith","dc.services.show.topology"],null]],null]],[1,"\\n"]],[]],[[[41,[30,1,["model","tabs","upstreams"]],[[[1," "],[1,[28,[35,3],[[28,[37,4],["replaceWith","dc.services.show.upstreams"],null]],null]],[1,"\\n"]],[]],[[[41,[30,1,["model","tabs","services"]],[[[1," "],[1,[28,[35,3],[[28,[37,4],["replaceWith","dc.services.show.services"],null]],null]],[1,"\\n"]],[]],[[[1," "],[1,[28,[35,3],[[28,[37,4],["replaceWith","dc.services.show.instances"],null]],null]],[1,"\\n"]],[]]]],[]]]],[]]]],[1]]]]],[1,"\\n"]],["route"],false,["route","routeName","if","did-insert","route-action"]]',moduleName:"consul-ui/templates/dc/services/show/index.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/services/show/instances",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"QmKK5Mhb",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n"],[10,0],[14,0,"tab-section"],[12],[1,"\\n"],[44,[[28,[37,3],null,[["value","change"],[[28,[37,4],[[33,5],"Status:asc"],null],[28,[37,6],[[30,0],[28,[37,7],[[33,5]],null]],[["value"],["target.selected"]]]]]],[28,[37,3],null,[["status","source","searchproperty"],[[28,[37,3],null,[["value","change"],[[52,[33,9],[28,[37,10],[[33,9],","],null],[27]],[28,[37,6],[[30,0],[28,[37,7],[[33,9]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,3],null,[["value","change"],[[52,[33,11],[28,[37,10],[[33,11],","],null],[27]],[28,[37,6],[[30,0],[28,[37,7],[[33,11]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,3],null,[["value","change","default"],[[52,[28,[37,12],[[33,13],[27]],null],[28,[37,10],[[33,13],","],null],[33,14]],[28,[37,6],[[30,0],[28,[37,7],[[33,13]],null]],[["value"],["target.selectedItems"]]],[33,14]]]]]]],[30,1,["model","items"]],[30,1,["model","proxies","firstObject"]]],[[[41,[28,[37,15],[[30,4,["length"]],0],null],[[[1," "],[10,"input"],[14,1,"toolbar-toggle"],[14,4,"checkbox"],[12],[13],[1,"\\n "],[8,[39,16],null,[["@sources","@search","@onsearch","@sort","@filter"],[[28,[37,17],[[28,[37,18],[[30,4]],null],"ExternalSources"],null],[99,19,["@search"]],[28,[37,6],[[30,0],[28,[37,7],[[33,19]],null]],[["value"],["target.value"]]],[30,2],[30,3]]],null],[1,"\\n"]],[]],null],[41,[30,5,["ServiceName"]],[[[1," "],[8,[39,20],null,[["@src","@onchange"],[[28,[37,21],["/${partition}/${nspace}/${dc}/service-instances/for-service/${name}/${peer}",[28,[37,3],null,[["partition","nspace","dc","name","peer"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[30,5,["ServiceName"]],[30,1,["params","peer"]]]]]],null],[28,[37,6],[[30,0],[28,[37,7],[[33,22]],null]],[["value"],["data"]]]]],null],[1,"\\n"]],[]],null],[1," "],[8,[39,23],null,[["@type","@sort","@filters","@search","@items"],["service-instance",[30,2,["value"]],[30,3],[99,19,["@search"]],[30,4]]],[["default"],[[[[1,"\\n "],[8,[30,6,["Collection"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,24],null,[["@routeName","@items","@proxies"],["dc.services.instance",[30,6,["items"]],[99,22,["@proxies"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,6,["Empty"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,25],null,null,[["default"],[[[[1,"\\n "],[8,[39,26],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[1,[28,[35,27],["routes.dc.services.show.instances.empty"],[["items","htmlSafe"],[[30,4,["length"]],true]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n"]],[2,3,4,5]]],[13],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","sort","filters","items","proxyMeta","collection"],false,["route","routeName","let","hash","or","sortBy","action","mut","if","status","split","source","not-eq","searchproperty","searchProperties","gt","consul/service-instance/search-bar","get","collection","search","data-source","uri","proxies","data-collection","consul/service-instance/list","empty-state","block-slot","t"]]',moduleName:"consul-ui/templates/dc/services/show/instances.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/services/show/intentions",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"sF5zClCb",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@name","@model"],[[99,1,["@name"]],[30,1,["model"]]]],[["default"],[[[[1,"\\n "],[46,[28,[37,4],null,null],null,null,null],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","o"],false,["route","routeName","outlet","component","-outlet"]]',moduleName:"consul-ui/templates/dc/services/show/intentions.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/services/show/intentions/edit",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"FjErs42E",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n"],[44,[[28,[37,3],[[28,[37,4],["write intention for service"],[["item"],[[33,5,["Service"]]]]]],null]],[[[1," "],[8,[39,6],null,[["@src"],[[28,[37,7],["/${partition}/${nspace}/${dc}/intention/${id}",[28,[37,8],null,[["partition","nspace","dc","id"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[28,[37,9],[[30,1,["params","intention_id"]],""],null]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,10],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,11],null,[["@error","@login"],[[30,3,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,10],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[30,3,["data"]]],[[[1," "],[8,[39,12],null,[["@readonly","@item","@dc","@nspace","@partition","@autofill","@onsubmit"],[[30,2],[30,4],[30,1,["model","dc"]],[30,1,["params","nspace"]],[30,1,["params","partition"]],[28,[37,8],null,[["DestinationName"],[[30,1,["params","name"]]]]],[28,[37,13],["dc.services.show.intentions.index"],null]]],null],[1,"\\n"]],[4]]],[1," "]],[]]]]],[1,"\\n"]],[3]]]]],[1,"\\n"]],[2]]]],[1]]]]],[1,"\\n"]],["route","readOnly","loader","item"],false,["route","routeName","let","not","can","item","data-loader","uri","hash","or","block-slot","error-state","consul/intention/form","transition-to"]]',moduleName:"consul-ui/templates/dc/services/show/intentions/edit.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/services/show/intentions/index",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"R5ukfGXO",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/intentions/for-service/${slug}",[28,[37,4],null,[["partition","nspace","dc","slug"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[30,1,["params","name"]]]]]],null]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@error"],[[30,2,["error"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[28,[37,4],null,[["value","change"],[[28,[37,8],[[33,9],"Action:asc"],null],[28,[37,10],[[30,0],[28,[37,11],[[33,9]],null]],[["value"],["target.selected"]]]]]],[28,[37,4],null,[["access","searchproperty"],[[28,[37,4],null,[["value","change"],[[52,[33,13],[28,[37,14],[[33,13],","],null],[27]],[28,[37,10],[[30,0],[28,[37,11],[[33,13]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,4],null,[["value","change","default"],[[52,[28,[37,15],[[33,16],[27]],null],[28,[37,14],[[33,16],","],null],[33,17]],[28,[37,10],[[30,0],[28,[37,11],[[33,16]],null]],[["value"],["target.selectedItems"]]],[33,17]]]]]]],[30,2,["data"]],[30,1,["model","item"]]],[[[1," "],[10,0],[14,0,"tab-section"],[12],[1,"\\n"],[41,[28,[37,18],["create intention for service"],[["item"],[[30,6,["Service"]]]]],[[[1," "],[8,[39,19],null,[["@target"],["app-view-actions"]],[["default"],[[[[1,"\\n "],[8,[39,20],null,[["@text","@route"],["Create","dc.services.show.intentions.create"]],null],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[41,[28,[37,21],[[30,5,["length"]],0],null],[[[1," "],[8,[39,22],null,[["@search","@onsearch","@sort","@filter"],[[99,23,["@search"]],[28,[37,10],[[30,0],[28,[37,11],[[33,23]],null]],[["value"],["target.value"]]],[30,3],[30,4]]],null],[1,"\\n"]],[]],null],[1," "],[8,[39,24],null,[["@sink","@type","@ondelete"],[[28,[37,3],["/${partition}/${dc}/${nspace}/intention/",[28,[37,4],null,[["partition","nspace","dc"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]]]]]],null],"intention",[99,25,["@ondelete"]]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,26],null,[["@type","@sort","@filters","@search","@items"],["intention",[30,3,["value"]],[30,4],[99,23,["@search"]],[30,5]]],[["default"],[[[[1,"\\n "],[8,[30,8,["Collection"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,27],null,[["@items","@check","@delete"],[[30,8,["items"]],[99,23,["@check"]],[30,7,["delete"]]]],[["default"],[[[[1,"\\n "],[8,[30,9,["CustomResourceNotice"]],null,null,null],[1,"\\n "],[8,[30,9,["CheckNotice"]],null,null,null],[1,"\\n "],[8,[30,9,["Table"]],null,[["@routeName"],["dc.services.show.intentions.edit"]],null],[1,"\\n "]],[9]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,8,["Empty"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,28],null,[["@login"],[[30,1,["model","app","login","open"]]]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,29],["routes.dc.services.show.intentions.index.empty.header"],[["items"],[[30,5,["length"]]]]]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[1,[28,[35,29],["routes.dc.services.show.intentions.index.empty.body"],[["items","canUseACLs","htmlSafe"],[[30,5,["length"]],[28,[37,18],["use acls"],null],true]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,5],null,[["@name"],["actions"]],[["default"],[[[[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,30],null,[["@text","@href","@icon","@iconPosition","@size"],["Documentation on intentions",[29,[[28,[37,31],["CONSUL_DOCS_URL"],null],"/commands/intention"]],"docs-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "],[10,"li"],[12],[1,"\\n "],[8,[39,30],null,[["@text","@href","@icon","@iconPosition","@size"],["Take the tutorial",[29,[[28,[37,31],["CONSUL_DOCS_LEARN_URL"],null],"/consul/getting-started/connect"]],"learn-link","trailing","small"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[8]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[7]]]]],[1,"\\n "],[13],[1,"\\n"]],[3,4,5,6]]],[1," "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","api","sort","filters","items","item","writer","collection","list"],false,["route","routeName","data-loader","uri","hash","block-slot","error-state","let","or","sortBy","action","mut","if","access","split","not-eq","searchproperty","searchProperties","can","portal","hds/button","gt","consul/intention/search-bar","search","data-writer","refresh-route","data-collection","consul/intention/list","empty-state","t","hds/link/standalone","env"]]',moduleName:"consul-ui/templates/dc/services/show/intentions/index.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/services/show/routing",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"LPaSV3FN",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/discovery-chain/${name}",[28,[37,4],null,[["partition","nspace","dc","name"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[30,1,["params","name"]]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,5],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n "],[10,0],[14,0,"tab-section"],[12],[1,"\\n "],[8,[39,7],null,[["@chain"],[[30,2,["data","Chain"]]]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","loader"],false,["route","routeName","data-loader","uri","hash","block-slot","app-error","consul/discovery-chain"]]',moduleName:"consul-ui/templates/dc/services/show/routing.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/services/show/services",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"9lMQo36C",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/gateways/for-service/${name}",[28,[37,4],null,[["partition","nspace","dc","name"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[30,1,["params","name"]]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,5],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n "],[10,0],[14,0,"tab-section"],[12],[1,"\\n"],[44,[[28,[37,4],null,[["value","change"],[[28,[37,8],[[33,9],"Status:asc"],null],[28,[37,10],[[30,0],[28,[37,11],[[33,9]],null]],[["value"],["target.selected"]]]]]],[28,[37,4],null,[["instance","searchproperty"],[[28,[37,4],null,[["value","change"],[[52,[33,13],[28,[37,14],[[33,13],","],null],[27]],[28,[37,10],[[30,0],[28,[37,11],[[33,13]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,4],null,[["value","change","default"],[[52,[28,[37,15],[[33,16],[27]],null],[28,[37,14],[[33,16],","],null],[33,17]],[28,[37,10],[[30,0],[28,[37,11],[[33,16]],null]],[["value"],["target.selectedItems"]]],[33,17]]]]]]],[30,2,["data"]]],[[[41,[28,[37,18],[[30,5,["length"]],0],null],[[[1," "],[10,"input"],[14,1,"toolbar-toggle"],[14,4,"checkbox"],[12],[13],[1,"\\n "],[8,[39,19],null,[["@search","@onsearch","@sort","@filter"],[[99,20,["@search"]],[28,[37,10],[[30,0],[28,[37,11],[[33,20]],null]],[["value"],["target.value"]]],[30,3],[30,4]]],null],[1,"\\n"]],[]],null],[1," "],[8,[39,21],null,[["@type","@sort","@filters","@search","@items"],["service",[30,3,["value"]],[30,4],[99,20,["@search"]],[30,5]]],[["default"],[[[[1,"\\n "],[8,[30,6,["Collection"]],null,null,[["default"],[[[[1,"\\n "],[1,[28,[35,22],["routes.dc.services.show.services.intro"],[["htmlSafe"],[true]]]],[1,"\\n "],[8,[39,23],null,[["@nspace","@partition","@items"],[[28,[37,8],[[30,1,["params","nspace"]],[30,1,["model","user","token","Namespace"]],"default"],null],[28,[37,8],[[30,1,["params","partition"]],[30,1,["model","user","token","Partition"]],"default"],null],[30,6,["items"]]]],[["default"],[[[[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,6,["Empty"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,24],null,null,[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[1,[28,[35,22],["routes.dc.services.show.services.empty"],[["items","htmlSafe"],[[30,5,["length"]],true]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n"]],[3,4,5]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","loader","sort","filters","items","collection"],false,["route","routeName","data-loader","uri","hash","block-slot","app-error","let","or","sortBy","action","mut","if","instance","split","not-eq","searchproperty","searchProperties","gt","consul/upstream/search-bar","search","data-collection","t","consul/service/list","empty-state"]]',moduleName:"consul-ui/templates/dc/services/show/services.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/services/show/tags",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"QPrKCkNR",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[10,0],[14,0,"tab-section"],[12],[1,"\\n"],[44,[[28,[37,3],[[28,[37,4],["Tags",[30,1,["model","items"]]],null]],null]],[[[41,[28,[37,6],[[30,2,["length"]],0],null],[[[1," "],[8,[39,7],null,[["@item"],[[28,[37,8],null,[["Tags"],[[30,2]]]]]],null],[1,"\\n"]],[]],[[[1," "],[8,[39,9],null,null,[["default"],[[[[1,"\\n "],[8,[39,10],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,11],["routes.dc.services.show.tags.empty.header"],null]],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,10],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[1,[28,[35,11],["routes.dc.services.show.tags.empty.body"],[["htmlSafe"],[true]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]]]],[2]]],[1," "],[13],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","tags"],false,["route","routeName","let","flatten","map-by","if","gt","tag-list","hash","empty-state","block-slot","t"]]',moduleName:"consul-ui/templates/dc/services/show/tags.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/services/show/topology",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"ZLtuX5vP",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/topology/${name}/${kind}",[28,[37,4],null,[["partition","nspace","dc","name","kind"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[30,1,["params","name"]],[28,[37,5],[[30,1,["model","items","firstObject","Service","Kind"]],""],null]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,6],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,6],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[30,1,["params","nspace"]],[30,1,["model","dc"]],[30,1,["model","items"]],[30,2,["data"]]],[[[1," "],[10,0],[14,0,"tab-section"],[12],[1,"\\n\\n "],[10,0],[14,0,"topology-notices"],[12],[1,"\\n "],[8,[39,9],null,[["@expanded"],[true]],[["default"],[[[[1,"\\n"],[44,[[28,[37,10],[[28,[37,11],[[28,[37,11],["filtered-by-acls",[28,[37,5],[false,[30,6,["FilteredByACLs"]]],null]],null],[28,[37,11],["default-allow",[28,[37,5],[false,[28,[37,12],[[30,4,["DefaultACLPolicy"]],"allow"],null]],null]],null],[28,[37,11],["wildcard-intention",[28,[37,5],[false,[30,6,["wildcardIntention"]]],null]],null],[28,[37,11],["not-defined-intention",[28,[37,5],[false,[30,6,["notDefinedIntention"]]],null]],null],[28,[37,11],["no-dependencies",[28,[37,5],[false,[28,[37,13],[[30,6,["noDependencies"]],[28,[37,14],["use acls"],null]],null]],null]],null],[28,[37,11],["acls-disabled",[28,[37,5],[false,[28,[37,13],[[30,6,["noDependencies"]],[28,[37,15],[[28,[37,14],["use acls"],null]],null]],null]],null]],null]],null]],null]],[[[1,"\\n"],[44,[[28,[37,16],[false,[28,[37,17],[[30,8]],null]],null]],[[[1,"\\n"],[42,[28,[37,19],[[30,8]],null],null,[[[41,[30,10],[[[1," "],[8,[30,7,["Details"]],null,[["@auto"],[false]],[["default"],[[[[1,"\\n "],[8,[39,21],[[16,1,[30,12,["id"]]],[24,0,"mb-3 mt-2 topology-metrics-notice"]],[["@type","@color"],["inline",[52,[28,[37,22],[[30,11],[28,[37,11],["filtered-by-acls","no-dependencies"],null]],null],"neutral","warning"]]],[["default"],[[[[1,"\\n "],[8,[30,13,["Title"]],null,null,[["default"],[[[[1,"\\n "],[1,[28,[35,23],[[28,[37,24],[[30,1,["t"]],"notice.${prop}.header",[28,[37,4],null,[["prop"],[[30,11]]]]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n"],[41,[30,7,["expanded"]],[[[1," "],[8,[30,13,["Description"]],null,null,[["default"],[[[[1,"\\n "],[1,[28,[35,23],[[28,[37,24],[[30,1,["t"]],"notice.${prop}.body",[28,[37,4],null,[["prop"],[[30,11]]]]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[41,[28,[37,13],[[30,7,["expanded"]],[28,[37,25],[[30,11],"filtered-by-acls"],null]],null],[[[41,[28,[37,22],[[30,11],[28,[37,11],["wildcard-intention","default-allow","no-intentions"],null]],null],[[[1," "],[8,[30,13,["Button"]],null,[["@color","@size","@route","@text","@icon"],["secondary","small","dc.services.show.intentions",[28,[37,23],[[28,[37,24],[[30,1,["t"]],"notice.${prop}.footer.link-text",[28,[37,4],null,[["prop"],[[30,11]]]]],null]],null],[28,[37,23],[[28,[37,24],[[30,1,["t"]],"notice.${prop}.footer.icon",[28,[37,4],null,[["prop"],[[30,11]]]]],null]],null]]],null],[1,"\\n"]],[]],[[[1," "],[8,[30,13,["Link::Standalone"]],null,[["@text","@href","@icon","@iconPosition"],[[28,[37,23],[[28,[37,24],[[30,1,["t"]],"notice.${prop}.footer.link-text",[28,[37,4],null,[["prop"],[[30,11]]]]],null]],null],[28,[37,23],[[28,[37,24],[[30,1,["t"]],"notice.${prop}.footer.link",[28,[37,4],null,[["prop"],[[30,11]]]]],null]],null],"docs-link","trailing"]],null],[1,"\\n"]],[]]]],[]],null],[1," "]],[13]]]]],[1,"\\n "]],[12]]]]],[1,"\\n"]],[]],null]],[10,11]],null],[1,"\\n"],[41,[28,[37,26],[[30,9,["length"]],2],null],[[[1," "],[8,[30,7,["Action"]],[[4,[38,27],["click",[30,7,["toggle"]]],null]],null,[["default"],[[[[1,"\\n "],[1,[28,[35,23],[[28,[37,24],[[30,1,["t"]],"notices.${expanded}",[28,[37,4],null,[["expanded"],[[52,[30,7,["expanded"]],"close","open"]]]]],null]],null]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],null],[1,"\\n"]],[9]]]],[8]]],[1," "]],[7]]]]],[1,"\\n\\n "],[13],[1,"\\n\\n\\n "],[8,[39,28],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/ui-config",[28,[37,4],null,[["partition","nspace","dc"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]]]]]],null]]],[["default"],[[[[1,"\\n"],[41,[30,14,["data"]],[[[1,"\\n "],[8,[39,29],null,[["@nspace","@dc","@service","@topology","@metricsHref","@isRemoteDC","@hasMetricsProvider","@oncreate"],[[30,3],[30,4],[30,5,["firstObject"]],[30,6],[28,[37,30],[[30,14,["data","dashboard_url_templates","service"]],[28,[37,4],null,[["Datacenter","Service"],[[30,4,["Name"]],[28,[37,4],null,[["Name","Namespace","Partition"],[[30,5,["firstObject","Name"]],[28,[37,5],[[30,5,["firstObject","Namespace"]],""],null],[28,[37,5],[[30,5,["firstObject","Partition"]],""],null]]]]]]]],null],[28,[37,15],[[30,4,["Local"]]],null],[28,[37,26],[[30,14,["data","metrics_provider","length"]],0],null],[28,[37,31],["createIntention"],null]]],null],[1,"\\n\\n"]],[]],null],[1," "]],[14]]]]],[1,"\\n "],[13],[1,"\\n"]],[3,4,5,6]]],[1," "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","loader","nspace","dc","items","topology","disclosure","notices","noticesEnabled","enabled","prop","details","A","config"],false,["route","routeName","data-loader","uri","hash","or","block-slot","app-error","let","disclosure","from-entries","array","eq","and","can","not","without","values","each","-each-in","if","hds/alert","includes","compute","fn","not-eq","gt","on","data-source","topology-metrics","render-template","route-action"]]',moduleName:"consul-ui/templates/dc/services/show/topology.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/services/show/upstreams",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"edRsEgtL",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/gateways/for-service/${name}",[28,[37,4],null,[["partition","nspace","dc","name"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]],[30,1,["params","name"]]]]]],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,5],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,6],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,5],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n "],[10,0],[14,0,"tab-section"],[12],[1,"\\n"],[44,[[28,[37,4],null,[["value","change"],[[28,[37,8],[[33,9],"Status:asc"],null],[28,[37,10],[[30,0],[28,[37,11],[[33,9]],null]],[["value"],["target.selected"]]]]]],[28,[37,4],null,[["instance","searchproperty"],[[28,[37,4],null,[["value","change"],[[52,[33,13],[28,[37,14],[[33,13],","],null],[27]],[28,[37,10],[[30,0],[28,[37,11],[[33,13]],null]],[["value"],["target.selectedItems"]]]]]],[28,[37,4],null,[["value","change","default"],[[52,[28,[37,15],[[33,16],[27]],null],[28,[37,14],[[33,16],","],null],[33,17]],[28,[37,10],[[30,0],[28,[37,11],[[33,16]],null]],[["value"],["target.selectedItems"]]],[33,17]]]]]]],[28,[37,8],[[30,1,["params","partition"]],[30,1,["model","user","token","Partition"]],"default"],null],[28,[37,8],[[30,1,["params","nspace"]],[30,1,["model","user","token","Namespace"]],"default"],null],[30,1,["params","dc"]],[30,2,["data"]]],[[[41,[28,[37,18],[[30,8,["length"]],0],null],[[[1," "],[10,"input"],[14,1,"toolbar-toggle"],[14,4,"checkbox"],[12],[13],[1,"\\n "],[8,[39,19],null,[["@search","@onsearch","@sort","@filter"],[[99,20,["@search"]],[28,[37,10],[[30,0],[28,[37,11],[[33,20]],null]],[["value"],["target.value"]]],[30,3],[30,4]]],null],[1,"\\n"]],[]],null],[1," "],[1,[28,[35,21],["routes.dc.services.show.upstreams.intro"],[["htmlSafe"],[true]]]],[1,"\\n "],[8,[39,22],null,[["@type","@sort","@filters","@search","@items"],["service",[30,3,["value"]],[30,4],[99,20,["@search"]],[30,8]]],[["default"],[[[[1,"\\n "],[8,[30,9,["Collection"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,23],null,[["@items","@dc","@nspace","@partition"],[[30,9,["items"]],[30,7],[30,6],[30,5]]],[["default"],[[[[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[30,9,["Empty"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,24],null,null,[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@name"],["body"]],[["default"],[[[[1,"\\n "],[1,[28,[35,21],["routes.dc.services.show.upstreams.empty"],[["items","htmlSafe"],[[30,8,["length"]],true]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n "]],[9]]]]],[1,"\\n"]],[3,4,5,6,7,8]]],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","loader","sort","filters","partition","nspace","dc","items","collection"],false,["route","routeName","data-loader","uri","hash","block-slot","app-error","let","or","sortBy","action","mut","if","instance","split","not-eq","searchproperty","searchProperties","gt","consul/upstream/search-bar","search","t","data-collection","consul/upstream/list","empty-state"]]',moduleName:"consul-ui/templates/dc/services/show/upstreams.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/show",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"FQ+sKuK+",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,null,[["default"],[[[[1,"\\n "],[8,[39,3],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n "],[8,[30,1,["Title"]],null,[["@title"],[[28,[37,4],[[28,[37,5],[[30,1,["t"]],"title"],null]],null]]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,3],null,[["@name"],["toolbar"]],[["default"],[[[[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,3],null,[["@name"],["nav"]],[["default"],[[[[1,"\\n\\n"],[44,[[28,[37,7],[[28,[37,8],[[28,[37,8],["serverstatus",[28,[37,4],[[28,[37,5],[[30,1,["exists"]],"serverstatus"],null]],null]],null],[28,[37,8],["cataloghealth",false],null],[28,[37,8],["license",[28,[37,4],[[28,[37,5],[[30,1,["exists"]],"license"],null]],null]],null]],null]],null]],[[[1,"\\n"],[44,[[28,[37,9],[false,[28,[37,10],[[30,2]],null]],null]],[[[1,"\\n"],[41,[28,[37,12],[[30,3,["length"]],1],null],[[[1," "],[8,[39,13],null,[["@items"],[[28,[37,14],[[28,[37,8],[[52,[30,2,["serverstatus"]],[28,[37,15],null,[["label","href","selected"],[[28,[37,4],[[28,[37,5],[[30,1,["t"]],"serverstatus.title"],null]],null],[28,[37,16],["dc.show.serverstatus"],null],[28,[37,17],["dc.show.serverstatus"],null]]]],""],[52,[30,2,["cataloghealth"]],[28,[37,15],null,[["label","href","selected"],[[28,[37,4],[[28,[37,5],[[30,1,["t"]],"cataloghealth.title"],null]],null],[28,[37,16],["dc.show.cataloghealth"],null],[28,[37,17],["dc.show.cataloghealth"],null]]]],""],[52,[30,2,["license"]],[28,[37,15],null,[["label","href","selected"],[[28,[37,4],[[28,[37,5],[[30,1,["t"]],"license.title"],null]],null],[28,[37,16],["dc.show.license"],null],[28,[37,17],["dc.show.license"],null]]]]],""],null]],null]]],null],[1,"\\n"]],[]],null],[1,"\\n"]],[3]]]],[2]]],[1," "]],[]]]]],[1,"\\n "],[8,[39,3],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,18],null,[["@name","@model"],[[99,1,["@name"]],[30,1,["model"]]]],[["default"],[[[[1,"\\n "],[46,[28,[37,20],null,null],null,null,null],[1,"\\n "]],[4]]]]],[1,"\\n "]],[]]]]],[1,"\\n\\n "]],[]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","tabs","tabsEnabled","o"],false,["route","routeName","app-view","block-slot","compute","fn","let","from-entries","array","without","values","if","gt","tab-nav","compact","hash","href-to","is-href","outlet","component","-outlet"]]',moduleName:"consul-ui/templates/dc/show.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/show/index",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"ZLphbwyJ",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[1,[28,[35,2],[[28,[37,3],["replaceWith",[52,[28,[37,5],["access overview"],null],"dc.show.serverstatus","dc.services.index"]],null]],null]],[1,"\\n"]],[1]]]]],[1,"\\n\\n"]],["route"],false,["route","routeName","did-insert","route-action","if","can"]]',moduleName:"consul-ui/templates/dc/show/index.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/show/license",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"NAOKWgT+",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/license",[28,[37,4],null,[["partition","nspace","dc"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]]]]]],null]]],[["default"],[[[[1,"\\n\\n"],[44,[[30,2,["data"]]],[[[1," "],[8,[39,6],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,6],null,[["@name"],["disconnected"]],[["default"],[[[[1,"\\n"],[41,[28,[37,9],[[30,2,["error","status"]],"404"],null],[[[1," "],[8,[39,10],[[4,[38,11],null,[["sticky"],[true]]]],[["@color"],["warning"]],[["default"],[[[[1,"\\n "],[8,[30,5,["Title"]],null,null,[["default"],[[[[1,"Warning!"]],[]]]]],[1,"\\n "],[8,[30,5,["Description"]],null,null,[["default"],[[[[1,"This service has been deregistered and no longer exists in the catalog."]],[]]]]],[1,"\\n "]],[5]]]]],[1,"\\n"]],[]],[[[41,[28,[37,9],[[30,2,["error","status"]],"403"],null],[[[1," "],[8,[39,10],[[4,[38,11],null,[["sticky"],[true]]]],[["@color"],["critical"]],[["default"],[[[[1,"\\n "],[8,[30,6,["Title"]],null,null,[["default"],[[[[1,"Error!"]],[]]]]],[1,"\\n "],[8,[30,6,["Description"]],null,null,[["default"],[[[[1,"You no longer have access to this service."]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n"]],[]],[[[1," "],[8,[39,10],[[4,[38,11],null,[["sticky"],[true]]]],[["@color"],["warning"]],[["default"],[[[[1,"\\n "],[8,[30,7,["Title"]],null,null,[["default"],[[[[1,"Warning!"]],[]]]]],[1,"\\n "],[8,[30,7,["Description"]],null,null,[["default"],[[[[1,"An error was returned whilst loading this data, refresh to try again."]],[]]]]],[1,"\\n "]],[7]]]]],[1,"\\n "]],[]]]],[]]],[1," "]],[4]]]]],[1,"\\n\\n "],[8,[39,6],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n "],[10,0],[14,0,"tab-section"],[12],[1,"\\n "],[10,"section"],[15,0,[28,[37,12],["validity",[28,[37,13],["valid",[30,3,["Valid"]]],null]],null]],[12],[1,"\\n "],[10,"header"],[12],[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,14],[[28,[37,15],[[30,1,["t"]],"expiry.header"],null]],null]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n\\n "],[10,2],[12],[1,"\\n "],[1,[28,[35,14],[[28,[37,15],[[30,1,["t"]],"expiry.${type}.body",[28,[37,4],null,[["type","date","time","htmlSafe"],[[52,[30,3,["Valid"]],"valid","expired"],[28,[37,16],[[30,3,["License","expiration_time"]]],[["year","month","day"],["numeric","long","numeric"]]],[28,[37,16],[[30,3,["License","expiration_time"]]],[["hour12","hour","hourCycle","minute","second","timeZoneName"],[true,"numeric","h12","numeric","numeric","short"]]],true]]]],null]],null]],[1,"\\n "],[13],[1,"\\n\\n "],[10,"dl"],[12],[1,"\\n "],[10,"dt"],[15,0,[28,[37,12],[[28,[37,13],["valid",[30,3,["Valid"]]],null],[28,[37,13],["expired",[28,[37,17],[[30,3,["Valid"]]],null]],null],[28,[37,13],["warning",[28,[37,18],[[30,3,["License","expiration_time"]],2629800000],null]],null]],null]],[12],[1,"\\n "],[1,[28,[35,14],[[28,[37,15],[[30,1,["t"]],"expiry.${type}.header",[28,[37,4],null,[["type"],[[52,[30,3,["Valid"]],"valid","expired"]]]]],null]],null]],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[28,[35,19],[[30,3,["License","expiration_time"]]],null]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n\\n "],[10,"aside"],[12],[1,"\\n "],[10,"header"],[12],[1,"\\n "],[10,"h3"],[12],[1,"\\n "],[1,[28,[35,14],[[28,[37,15],[[30,1,["t"]],"documentation.title"],null]],null]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[10,0],[14,0,"flex gap-1.5 flex-col"],[12],[1,"\\n "],[8,[39,20],null,[["@text","@href","@icon"],[[28,[37,14],[[28,[37,15],[[30,1,["t"]],"documentation.links.license-expiration.text"],null]],null],[29,[[28,[37,21],[[28,[37,22],["CONSUL_DOCS_URL"],null],[28,[37,14],[[28,[37,15],[[30,1,["t"]],"documentation.links.license-expiration.link"],null]],null]],null]]],"docs-link"]],null],[1,"\\n "],[8,[39,20],null,[["@text","@href","@icon"],[[28,[37,14],[[28,[37,15],[[30,1,["t"]],"documentation.links.renewing-license.text"],null]],null],[29,[[28,[37,21],[[28,[37,22],["CONSUL_DOCS_URL"],null],[28,[37,14],[[28,[37,15],[[30,1,["t"]],"documentation.links.renewing-license.link"],null]],null]],null]]],"docs-link"]],null],[1,"\\n "],[8,[39,20],null,[["@text","@href","@icon"],[[28,[37,14],[[28,[37,15],[[30,1,["t"]],"documentation.links.applying-new-license.text"],null]],null],[29,[[28,[37,21],[[28,[37,22],["CONSUL_DOCS_URL"],null],[28,[37,14],[[28,[37,15],[[30,1,["t"]],"documentation.links.applying-new-license.link"],null]],null]],null]]],"docs-link"]],null],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n\\n "],[13],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[3]]],[1," "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n\\n"]],["route","loader","item","after","T","T","T"],false,["route","routeName","data-loader","uri","hash","let","block-slot","error-state","if","eq","hds/toast","notification","class-map","array","compute","fn","format-time","not","temporal-within","temporal-format","hds/link/standalone","concat","env"]]',moduleName:"consul-ui/templates/dc/show/license.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/dc/show/serverstatus",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"UCwnBDmO",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["/${partition}/${nspace}/${dc}/datacenter",[28,[37,4],null,[["partition","nspace","dc"],[[30,1,["params","partition"]],[30,1,["params","nspace"]],[30,1,["params","dc"]]]]]],null]]],[["default"],[[[[1,"\\n\\n"],[44,[[30,2,["data"]]],[[[1," "],[8,[39,6],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,7],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,6],null,[["@name"],["disconnected"]],[["default"],[[[[1,"\\n"],[41,[28,[37,9],[[30,2,["error","status"]],"404"],null],[[[1," "],[8,[39,10],[[4,[38,11],null,[["sticky"],[true]]]],[["@color"],["warning"]],[["default"],[[[[1,"\\n "],[8,[30,5,["Title"]],null,null,[["default"],[[[[1,"Warning!"]],[]]]]],[1,"\\n "],[8,[30,5,["Description"]],null,null,[["default"],[[[[1,"This service has been deregistered and no longer exists in the catalog."]],[]]]]],[1,"\\n "]],[5]]]]],[1,"\\n"]],[]],[[[41,[28,[37,9],[[30,2,["error","status"]],"403"],null],[[[1," "],[8,[39,10],[[4,[38,11],null,[["sticky"],[true]]]],[["@color"],["critical"]],[["default"],[[[[1,"\\n "],[8,[30,6,["Title"]],null,null,[["default"],[[[[1,"Error!"]],[]]]]],[1,"\\n "],[8,[30,6,["Description"]],null,null,[["default"],[[[[1,"You no longer have access to this service."]],[]]]]],[1,"\\n "]],[6]]]]],[1,"\\n"]],[]],[[[1," "],[8,[39,10],[[4,[38,11],null,[["sticky"],[true]]]],[["@color"],["warning"]],[["default"],[[[[1,"\\n "],[8,[30,7,["Title"]],null,null,[["default"],[[[[1,"Warning!"]],[]]]]],[1,"\\n "],[8,[30,7,["Description"]],null,null,[["default"],[[[[1,"An error was returned whilst loading this data, refresh to try again."]],[]]]]],[1,"\\n "]],[7]]]]],[1,"\\n "]],[]]]],[]]],[1," "]],[4]]]]],[1,"\\n\\n "],[8,[39,6],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n "],[10,0],[14,0,"tab-section"],[12],[1,"\\n\\n "],[10,"section"],[15,0,[28,[37,12],["server-failure-tolerance"],null]],[12],[1,"\\n\\n "],[10,"header"],[12],[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,13],[[28,[37,14],[[30,1,["t"]],"tolerance.header"],null]],null]],[1,"\\n "],[13],[1,"\\n "],[8,[39,15],null,[["@icon","@iconPosition","@text","@href"],["docs-link","trailing",[28,[37,13],[[28,[37,14],[[30,1,["t"]],"tolerance.link-text"],null]],null],[29,[[28,[37,16],[[28,[37,17],["CONSUL_DOCS_URL"],null],[28,[37,13],[[28,[37,14],[[30,1,["t"]],"tolerance.link"],null]],null]],null]]]]],null],[1,"\\n "],[13],[1,"\\n\\n "],[10,"section"],[15,0,[28,[37,12],[[28,[37,18],["immediate-tolerance"],null]],null]],[12],[1,"\\n "],[10,"header"],[12],[1,"\\n "],[10,"h3"],[12],[1,"\\n "],[1,[28,[35,13],[[28,[37,14],[[30,1,["t"]],"tolerance.immediate.header"],null]],null]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[10,"dl"],[15,0,[28,[37,12],[[28,[37,18],["warning",[28,[37,19],[[28,[37,9],[[30,3,["FailureTolerance"]],0],null],[28,[37,9],[[30,3,["OptimisticFailureTolerance"]],0],null]],null]],null]],null]],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n "],[1,[28,[35,13],[[28,[37,14],[[30,1,["t"]],"tolerance.immediate.body"],null]],null]],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[30,3,["FailureTolerance"]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n\\n"],[41,[28,[37,20],["read zones"],null],[[[1," "],[10,"section"],[15,0,[28,[37,12],[[28,[37,18],["optimistic-tolerance"],null]],null]],[12],[1,"\\n "],[10,"header"],[12],[1,"\\n "],[10,"h3"],[12],[1,"\\n "],[1,[28,[35,13],[[28,[37,14],[[30,1,["t"]],"tolerance.optimistic.header"],null]],null]],[1,"\\n "],[11,1],[4,[38,21],["With > 30 seconds between server failures, Consul can restore the Immediate Fault Tolerance by replacing failed active voters with healthy back-up voters when using redundancy zones."],null],[12],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[10,"dl"],[15,0,[28,[37,12],[[28,[37,18],["warning",[28,[37,9],[[30,3,["OptimisticFailureTolerance"]],0],null]],null]],null]],[12],[1,"\\n "],[10,"dt"],[12],[1,"\\n "],[1,[28,[35,13],[[28,[37,14],[[30,1,["t"]],"tolerance.optimistic.body"],null]],null]],[1,"\\n "],[13],[1,"\\n "],[10,"dd"],[12],[1,"\\n "],[1,[30,3,["OptimisticFailureTolerance"]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n\\n "],[13],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n\\n"],[41,[28,[37,22],[[30,3,["RedundancyZones","length"]],0],null],[[[1," "],[10,"section"],[15,0,[28,[37,12],["redundancy-zones"],null]],[12],[1,"\\n "],[10,"header"],[12],[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,23],[[28,[37,24],["common.consul.redundancyzone"],null]],null]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n\\n"],[42,[28,[37,26],[[28,[37,26],[[30,3,["RedundancyZones"]]],null]],null],null,[[[41,[28,[37,22],[[30,8,["Servers","length"]],0],null],[[[1," "],[10,"section"],[12],[1,"\\n "],[10,"header"],[12],[1,"\\n "],[10,"h3"],[12],[1,"\\n "],[1,[30,8,["Name"]]],[1,"\\n "],[13],[1,"\\n "],[10,"dl"],[15,0,[28,[37,12],[[28,[37,18],["warning",[28,[37,9],[[30,8,["FailureTolerance"]],0],null]],null]],null]],[12],[1,"\\n "],[10,"dt"],[12],[1,[28,[35,24],["common.consul.failuretolerance"],null]],[13],[1,"\\n "],[10,"dd"],[12],[1,[30,8,["FailureTolerance"]]],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[8,[39,27],null,[["@items"],[[30,8,["Servers"]]]],null],[1,"\\n "],[13],[1,"\\n"]],[]],null]],[8]],null],[1,"\\n"],[41,[28,[37,22],[[30,3,["Default","Servers","length"]],0],null],[[[1," "],[10,"section"],[12],[1,"\\n "],[10,"header"],[12],[1,"\\n "],[10,"h3"],[12],[1,"\\n "],[1,[28,[35,13],[[28,[37,14],[[30,1,["t"]],"unassigned"],null]],null]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[8,[39,27],null,[["@items"],[[30,3,["Default","Servers"]]]],null],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1,"\\n "],[13],[1,"\\n"]],[]],[[[1," "],[10,"section"],[12],[1,"\\n "],[10,"header"],[12],[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,13],[[28,[37,14],[[30,1,["t"]],"servers"],null]],null]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[8,[39,27],null,[["@items"],[[30,3,["Default","Servers"]]]],null],[1,"\\n "],[13],[1,"\\n"]],[]]],[1,"\\n"],[41,[28,[37,22],[[30,3,["ReadReplicas","length"]],0],null],[[[1," "],[10,"section"],[12],[1,"\\n "],[10,"header"],[12],[1,"\\n "],[10,"h2"],[12],[1,"\\n "],[1,[28,[35,23],[[28,[37,24],["common.consul.readreplica"],null]],null]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n\\n "],[8,[39,27],null,[["@items"],[[30,3,["ReadReplicas"]]]],null],[1,"\\n "],[13],[1,"\\n"]],[]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n"]],[3]]],[1," "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n\\n"]],["route","loader","item","after","T","T","T","item"],false,["route","routeName","data-loader","uri","hash","let","block-slot","error-state","if","eq","hds/toast","notification","class-map","compute","fn","hds/link/standalone","concat","env","array","and","can","tooltip","gt","pluralize","t","each","-track-array","consul/server/list"]]',moduleName:"consul-ui/templates/dc/show/serverstatus.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/error",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"fBHiRsbk",block:'[[[41,[33,1],[[[8,[39,2],null,[["@error"],[[99,1,["@error"]]]],null],[1,"\\n"]],[]],null]],[],false,["if","error","app-error"]]',moduleName:"consul-ui/templates/error.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/index",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"GYFZBIFL",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@name","@model"],[[99,1,["@name"]],[30,1,["model"]]]],[["default"],[[[[1,"\\n "],[46,[28,[37,4],null,null],null,null,null],[1,"\\n "]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","o"],false,["route","routeName","outlet","component","-outlet"]]',moduleName:"consul-ui/templates/index.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/loading",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"bxrEoh3x",block:"[[],[],false,[]]",moduleName:"consul-ui/templates/loading.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/notfound",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"3oarGPY0",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@login","@error"],[[30,1,["model","app","login","open"]],[28,[37,3],null,[["status","message"],[404,"Unable to find that page"]]]]],null],[1,"\\n"]],[1]]]]],[1,"\\n\\n"]],["route"],false,["route","routeName","app-error","hash"]]',moduleName:"consul-ui/templates/notfound.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/templates/oauth-provider-debug",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"8VyAGRf6",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n"],[10,0],[14,5,"width: 50%;margin: 0 auto;"],[12],[1,"\\n "],[10,"h1"],[12],[8,[30,1,["Title"]],null,[["@title"],["Mock OAuth Provider"]],null],[13],[1,"\\n "],[10,"main"],[12],[1,"\\n "],[10,"form"],[14,"method","GET"],[15,"action",[36,2]],[12],[1,"\\n"],[44,[[28,[37,4],null,[["state","code"],["state-123456789/abcdefghijklmnopqrstuvwxyz","code-abcdefghijklmnopqrstuvwxyz/123456789"]]]],[[[1," "],[8,[39,5],null,[["@name","@label","@item","@help"],["state","State",[30,2],"The OIDC state value that will get passed through to Consul"]],null],[1,"\\n "],[8,[39,5],null,[["@name","@label","@item","@help"],["code","Code",[30,2],"The OIDC code value that will get passed through to Consul"]],null],[1,"\\n"]],[2]]],[1," "],[8,[39,6],null,[["@type"],["submit"]],[["default"],[[[[1,"\\n Login\\n "]],[]]]]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"],[13],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","item"],false,["route","routeName","redirect_uri","let","hash","text-input","action"]]',moduleName:"consul-ui/templates/oauth-provider-debug.hbs",isStrictMode:!1}) -e.default=n})) -define("consul-ui/templates/settings",["exports","@ember/template-factory"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.createTemplateFactory)({id:"cNZzwPnu",block:'[[[8,[39,0],null,[["@name"],[[99,1,["@name"]]]],[["default"],[[[[1,"\\n "],[8,[39,2],null,[["@src"],[[28,[37,3],["settings://consul:client"],null]]],[["default"],[[[[1,"\\n\\n "],[8,[39,4],null,[["@name"],["error"]],[["default"],[[[[1,"\\n "],[8,[39,5],null,[["@error","@login"],[[30,2,["error"]],[30,1,["model","app","login","open"]]]],null],[1,"\\n "]],[]]]]],[1,"\\n\\n "],[8,[39,4],null,[["@name"],["loaded"]],[["default"],[[[[1,"\\n"],[44,[[28,[37,7],[[30,2,["data"]],[28,[37,8],null,[["blocking"],[true]]]],null]],[[[1," "],[8,[39,9],null,null,[["default"],[[[[1,"\\n "],[8,[39,4],null,[["@name"],["header"]],[["default"],[[[[1,"\\n "],[10,"h1"],[12],[1,"\\n "],[8,[30,1,["Title"]],null,[["@title"],["Settings"]],null],[1,"\\n "],[13],[1,"\\n "]],[]]]]],[1,"\\n "],[8,[39,4],null,[["@name"],["content"]],[["default"],[[[[1,"\\n "],[8,[39,10],[[24,0,"mb-3 mt-2"]],[["@type"],["inline"]],[["default"],[[[[1,"\\n "],[8,[30,4,["Title"]],null,null,[["default"],[[[[1,"Local Storage"]],[]]]]],[1,"\\n "],[8,[30,4,["Description"]],null,null,[["default"],[[[[1,"These settings are immediately saved to local storage and persisted through browser usage."]],[]]]]],[1,"\\n "]],[4]]]]],[1,"\\n "],[10,"form"],[12],[1,"\\n"],[41,[28,[37,12],[[28,[37,13],["CONSUL_UI_DISABLE_REALTIME"],null]],null],[[[1," "],[8,[39,14],null,null,[["default"],[[[[1,"\\n "],[8,[30,5,["Details"]],null,null,[["default"],[[[[1,"\\n "],[8,[39,15],null,[["@data","@sink","@onchange"],[[30,3],"settings://consul:client",[28,[37,16],[[30,0],[28,[37,17],[[30,5,["close"]]],null]],null]]],null],[1,"\\n "]],[]]]]],[1,"\\n "],[10,"fieldset"],[12],[1,"\\n "],[10,"h2"],[12],[1,"Blocking Queries"],[13],[1,"\\n "],[10,2],[12],[1,"Keep catalog info up-to-date without refreshing the page. Any changes made to services, nodes and intentions would be reflected in real time."],[13],[1,"\\n "],[10,0],[14,0,"type-toggle"],[12],[1,"\\n "],[10,"label"],[12],[1,"\\n "],[11,"input"],[24,3,"client[blocking]"],[16,"checked",[52,[30,3,["blocking"]],"checked"]],[24,4,"checkbox"],[4,[38,18],["change",[28,[37,19],[[28,[37,20],[[30,3],"blocking",[28,[37,12],[[30,3,["blocking"]]],null]],null],[28,[37,17],[[30,5,["open"]]],null]],null]],null],[12],[13],[1,"\\n "],[10,1],[12],[1,[52,[30,3,["blocking"]],"On","Off"]],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n "]],[5]]]]],[1,"\\n"]],[]],null],[1," "],[13],[1,"\\n "]],[]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[3]]],[1," "]],[]]]]],[1,"\\n"]],[2]]]]],[1,"\\n"]],[1]]]]],[1,"\\n"]],["route","loader","item","A","disclosure"],false,["route","routeName","data-loader","uri","block-slot","app-error","let","or","hash","app-view","hds/alert","if","not","env","disclosure","data-sink","action","fn","on","queue","set"]]',moduleName:"consul-ui/templates/settings.hbs",isStrictMode:!1}) -e.default=n})),define("consul-ui/transforms/array",["exports","ember-data-model-fragments/transforms/array"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=t.default -e.default=n})),define("consul-ui/transforms/boolean",["exports","@ember-data/serializer/-private"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.BooleanTransform}})})),define("consul-ui/transforms/date",["exports","@ember-data/serializer/-private"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.DateTransform}})})),define("consul-ui/transforms/fragment-array",["exports","ember-data-model-fragments/transforms/fragment-array"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=t.default -e.default=n})),define("consul-ui/transforms/fragment",["exports","ember-data-model-fragments/transforms/fragment"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=t.default -e.default=n})),define("consul-ui/transforms/number",["exports","@ember-data/serializer/-private"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.NumberTransform}})})),define("consul-ui/transforms/string",["exports","@ember-data/serializer/-private"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.StringTransform}})})),define("consul-ui/utils/ascend",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,t){const n=e.split("/") -return n.length>t?n.slice(0,-t).concat("").join("/"):""}})),define("consul-ui/utils/atob",["exports","base64-js"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"utf-8" -const l=t.default.toByteArray(e) -return new TextDecoder(n).decode(l)}})),define("consul-ui/utils/btoa",["exports","base64-js"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){const n=(new TextEncoder).encode(e) -return t.default.fromByteArray(n)}})),define("consul-ui/utils/calculate-position",["exports","ember-basic-dropdown/utils/calculate-position"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/utils/callable-type",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){return"function"!=typeof e?function(){return e}:e}})),define("consul-ui/utils/create-fingerprinter",["exports","@ember/object","@ember/utils"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,l,r){let i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:JSON.stringify -return function(o,a,u,s,c){return function(d){if(null==(u=null==u?d[e]:u))throw new Error(`Unable to create fingerprint, missing foreignKey value. Looking for value in \`${e}\` got \`${u}\``) -const p=a.split(",").map((function(e){const l=(0,t.get)(d,e) -if((0,n.isEmpty)(l)){if("PeerName"===e)return -throw new Error(`Unable to create fingerprint, missing slug. Looking for value in \`${e}\` got \`${l}\``)}return l})).compact() -return void 0===d[l]&&("*"===s&&(s="default"),d[l]=s),void 0===d[r]&&("*"===c&&(c="default"),d[r]=c),void 0===d[e]&&(d[e]=u),void 0===d[o]&&(d[o]=i([d[r],d[l],u].concat(p))),d}}}})),define("consul-ui/utils/distance",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,t){e=e.Coord,t=t.Coord -let n=0 -for(let o=0;o0&&(r=i) -return Math.round(1e5*r)/100}})),define("consul-ui/utils/dom/click-first-anchor",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t -return function(t){let l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"tr" -const r=t.target.nodeName.toLowerCase() -switch(r){case"input":case"label":case"a":case"button":return}const i=e(l,t.target).querySelector("a") -i&&n(i)}} -const t=function(e){["mousedown","mouseup","click"].map((function(e){return new MouseEvent(e,{bubbles:!0,cancelable:!0,view:window})})).forEach((function(t){e.dispatchEvent(t)}))}})),define("consul-ui/utils/dom/closest",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,t){try{return t.closest(e)}catch(n){return}}})),define("consul-ui/utils/dom/create-listeners",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[] -return new t(e)} -class t{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[] -this.listeners=e}add(e,n,l){let r -if("function"==typeof e)r=e -else if(e instanceof t)r=e.remove.bind(e) -else{let t="addEventListener",i="removeEventListener" -void 0===e[t]&&(t="on",i="off") -let o=n -"string"==typeof o&&(o={[n]:l}) -const a=Object.keys(o).map((function(n){return function(n,l){return e[t](n,l),function(){return e[i](n,l),l}}(n,o[n])})) -r=()=>a.map((e=>e()))}return this.listeners.push(r),()=>{const e=this.listeners.findIndex((function(e){return e===r})) -return this.listeners.splice(e,1)[0]()}}remove(){const e=this.listeners.map((e=>e())) -return this.listeners.splice(0,this.listeners.length),e}}})),define("consul-ui/utils/dom/event-source/blocking",["exports","@ember/object"],(function(e,t){function n(e,t){if(null==e)return{} -var n,l,r=function(e,t){if(null==e)return{} -var n,l,r={},i=Object.keys(e) -for(l=0;l=0||(r[n]=e[n]) -return r}(e,t) -if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e) -for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){let a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:l() -const u=function(l){let u=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} -const{currentEvent:s}=u,c=n(u,["currentEvent"]) -e.apply(this,[e=>{const{createEvent:u}=e,s=n(e,["createEvent"]) -return l.apply(this,[s,this]).catch(a).then((n=>{if(n instanceof Error)return n -let l=("function"==typeof u?u:o)(n,e) -l.type||(l={type:"message",data:l}) -const a=(0,t.get)(l.data||{},"meta") -a&&(e.cursor=r(a.cursor,e.cursor),e.cacheControl=a.cacheControl,e.interval=a.interval),-1===(e.cacheControl||"").indexOf("no-store")&&(this.currentEvent=l),this.dispatchEvent(l) -const s=i(e,l,this.previousEvent) -return this.previousEvent=this.currentEvent,s(n)}))},c]),void 0!==s&&(this.currentEvent=s),this.addEventListener("open",(e=>{const t=e.target.getCurrentEvent() -void 0!==t&&this.dispatchEvent(t)}))} -return u.prototype=Object.assign(Object.create(e.prototype,{constructor:{value:e,configurable:!0,writable:!0}}),{getCurrentEvent:function(){return this.currentEvent},getPreviousEvent:function(){return this.previousEvent}}),u},e.validateCursor=e.createErrorBackoff=void 0 -const l=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:3e3,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Promise,l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:setTimeout -return function(r){let i=(0,t.get)(r,"errors.firstObject.status")||(0,t.get)(r,"statusCode") -if(void 0!==i)switch(i=i.toString(),!0){case 0===i.indexOf("5")&&3===i.length&&"500"!==i:case"0"===i:return new n((function(t){l((function(){t(r)}),e)}))}throw r}} -e.createErrorBackoff=l -const r=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=parseInt(e) -if(!isNaN(n))return null!==t&&n2&&void 0!==arguments[2]?arguments[2]:Promise -return function(l){return function(r,i){const o=i.key -if(void 0!==l[o]&&i.settings.enabled)return void 0===l[o].configuration&&(l[o].configuration={}),l[o].configuration.settings=i.settings,e(l[o]) -{const a=i.type||t,u=l[o]=new a(r,i) -return e(u).catch((function(e){return delete l[o],n.reject(e)})).then((function(e){return void 0===e.configuration.cursor&&(e.close(),delete l[o]),e}))}}}}})),define("consul-ui/utils/dom/event-source/callable",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Promise,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:n -const a=function(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} -e.call(this),this.readyState=2,this.source="function"!=typeof t?function(e,t){return this.close(),r.resolve()}:t,this.readyState=0,r.resolve().then((()=>{if(!(this.readyState>1))return this.readyState=1,this.dispatchEvent({type:"open"}),i(this,n,l)})).catch((e=>{this.dispatchEvent(o(e)),this.readyState=2,this.dispatchEvent({type:"close",error:e})})).then((()=>{this.readyState=2}))} -return a.prototype=Object.assign(Object.create(e.prototype,{constructor:{value:a,configurable:!0,writable:!0}}),{close:function(){switch(this.readyState){case 0:case 2:this.readyState=2 -break -default:this.readyState=3}return this}}),a},e.defaultRunner=void 0 -const t=function(e,n,l){if(!l(e))return e.source.bind(e)(n,e).then((function(r){return t(e,n,l)})) -e.dispatchEvent({type:"close"})} -e.defaultRunner=t -const n=function(e){return new ErrorEvent("error",{error:e,message:e.message})},l=function(e){switch(e.readyState){case 2:case 3:return!0}return!1}})),define("consul-ui/utils/dom/event-source/index",["exports","@ember/object/proxy","@ember/array/proxy","consul-ui/utils/dom/create-listeners","consul-ui/utils/dom/event-target/rsvp","consul-ui/utils/dom/event-source/cache","consul-ui/utils/dom/event-source/proxy","consul-ui/utils/dom/event-source/resolver","consul-ui/utils/dom/event-source/callable","consul-ui/utils/dom/event-source/openable","consul-ui/utils/dom/event-source/blocking","consul-ui/utils/dom/event-source/storage","@ember/object","ember-concurrency","consul-ui/env"],(function(e,t,n,l,r,i,o,a,u,s,c,d,p,f,m){let h -switch(Object.defineProperty(e,"__esModule",{value:!0}),e.once=e.toPromise=e.fromPromise=e.cache=e.source=e.resolve=e.proxy=e.StorageEventSource=e.BlockingEventSource=e.OpenableEventSource=e.CallableEventSource=void 0,(0,m.env)("CONSUL_UI_REALTIME_RUNNER")){case"ec":h=function(e,t,n){return p.default.extend({task:(0,f.task)((function*(){for(;!n(e);)yield e.source.bind(e)(t)}))}).create().get("task").perform()} -break -case"generator":h=async function(e,t,n){const l=function*(){for(;!n(e);)yield e.source.bind(e)(t)} -let r,i=l().next() -for(;!i.done;)r=await i.value,i=l().next() -return r} -break -case"async":h=async function(e,t,n){let l -for(;!n(e);)l=await e.source.bind(e)(t) -return l}}const b=(0,u.default)(r.default,Promise,h) -e.CallableEventSource=b -const y=(0,s.default)(b) -e.OpenableEventSource=y -const g=(0,c.default)(y) -e.BlockingEventSource=g -const v=(0,d.default)(r.default,Promise) -e.StorageEventSource=v -const O=(0,o.default)(t.default,n.default,l.default) -e.proxy=O -const P=(0,a.default)(Promise) -e.resolve=P -const x=function(e){return P(e,(0,l.default)()).then((function(t){return O(e,t)}))} -e.source=x -const w=(0,i.default)(x,g,Promise) -e.cache=w -e.fromPromise=function(e){return new b((function(t){const n=this.dispatchEvent.bind(this),l=()=>{this.close()} -return e.then((function(e){l(),n({type:"message",data:e})})).catch((function(e){l(),n(function(e){return new ErrorEvent("error",{error:e,message:e.message})}(e))}))}))} -e.toPromise=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"message",l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"error" -return new Promise((function(r,i){const o=function(e){r(e.data)},a=function(e){i(e.error)} -e.addEventListener(n,o),e.addEventListener(l,a),t((function(){"function"==typeof e.close&&e.close(),e.removeEventListener(n,o),e.removeEventListener(l,a)}))}))} -e.once=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:y -return new n((function(t,n){return e(t,n).then((function(e){n.dispatchEvent({type:"message",data:e}),n.close()})).catch((function(e){n.dispatchEvent({type:"error",error:e}),n.close()}))}),t)}})),define("consul-ui/utils/dom/event-source/openable",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:EventSource -const t=function(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} -e.apply(this,arguments),this.configuration=n} -return t.prototype=Object.assign(Object.create(e.prototype,{constructor:{value:t,configurable:!0,writable:!0}}),{open:function(){switch(this.readyState){case 3:this.readyState=1 -break -case 2:e.apply(this,[this.source,this.configuration])}return this}}),t}})),define("consul-ui/utils/dom/event-source/proxy",["exports","@ember/object"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,l,r){return function(i){let o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],a=e,u="object" -return"string"!=typeof o&&void 0!==(0,t.get)(o,"length")&&(a=l,u="array",o=o.filter((function(e){return!(0,t.get)(e,"isDestroyed")&&!(0,t.get)(e,"isDeleted")&&(0,t.get)(e,"isLoaded")}))),void 0===n[u]&&(n[u]=a.extend({init:function(){this.listeners=r(),this.listeners.add(this._source,"message",(e=>(0,t.set)(this,"content",e.data))),this._super(...arguments)},addEventListener:function(e,t){this.listeners.add(this._source,e,t)},getCurrentEvent:function(){return this._source.getCurrentEvent(...arguments)},removeEventListener:function(){return this._source.removeEventListener(...arguments)},dispatchEvent:function(){return this._source.dispatchEvent(...arguments)},close:function(){return this._source.close(...arguments)},open:function(){return this._source.open(...arguments)},willDestroy:function(){this._super(...arguments),this.close(),this.listeners.remove()}})),n[u].create({content:o,_source:i,configuration:i.configuration})}} -const n={}})),define("consul-ui/utils/dom/event-source/resolver",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Promise -return function(t,n){let l -return"function"==typeof t.getCurrentEvent&&(l=t.getCurrentEvent()),null!=l?e.resolve(l.data).then((function(e){return t.open(),e})):new e((function(e,l){n.add(t,"error",(function(e){n.remove(),e.target.close(),l(e.error)})),n.add(t,"message",(function(t){n.remove(),e(t.data)}))}))}}})),define("consul-ui/utils/dom/event-source/storage",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Promise -const n=function(e){if((void 0===e||e.key===this.configuration.key)&&1===this.readyState){const e=this.source(this.configuration) -t.resolve(e).then((e=>{this.configuration.cursor++,this._currentEvent={type:"message",data:e},this.dispatchEvent({type:"message",data:e})}))}} -return class extends e{constructor(e,t){super(...arguments),this.readyState=2,this.target=t.target||window,this.name="storage",this.source=e,this.handler=n.bind(this),this.configuration=t,this.configuration.cursor=1,this.open()}dispatchEvent(){if(1===this.readyState)return super.dispatchEvent(...arguments)}close(){this.target.removeEventListener(this.name,this.handler),this.readyState=2}getCurrentEvent(){return this._currentEvent}open(){const e=this.readyState -this.readyState=1,1!==e&&(this.target.addEventListener(this.name,this.handler),this.handler())}}}})),define("consul-ui/utils/dom/event-target/event-target-shim/event",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.wrapEvent=function(e,t){return new(u(Object.getPrototypeOf(t)))(e,t)},e.isStopped=function(e){return l(e).immediateStopped},e.setEventPhase=function(e,t){l(e).eventPhase=t},e.setCurrentTarget=function(e,t){l(e).currentTarget=t},e.setPassiveListener=function(e,t){l(e).passiveListener=t} -const t=new WeakMap,n=new WeakMap -function l(e){const n=t.get(e) -return console.assert(null!=n,"'this' is expected an Event object, but got",e),n}function r(e){null==e.passiveListener?e.event.cancelable&&(e.canceled=!0,"function"==typeof e.event.preventDefault&&e.event.preventDefault()):"undefined"!=typeof console&&"function"==typeof console.error&&console.error("Unable to preventDefault inside passive event listener invocation.",e.passiveListener)}function i(e,n){t.set(this,{eventTarget:e,event:n,eventPhase:2,currentTarget:e,canceled:!1,stopped:!1,immediateStopped:!1,passiveListener:null,timeStamp:n.timeStamp||Date.now()}),Object.defineProperty(this,"isTrusted",{value:!1,enumerable:!0}) -const l=Object.keys(n) -for(let t=0;t1&&void 0!==arguments[1]?arguments[1]:"-view-registry:main" -const n=e.lookup(t) -return function(e){const t=e.getAttribute("id") -if(t)return n[t]}}})),define("consul-ui/utils/dom/is-outside",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:document -if(e){const l=!t||!n.contains(t),r=e===t||e.contains(t) -return!l&&!r}return!1}})) -define("consul-ui/utils/dom/normalize-event",["exports"],(function(e){function t(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) -t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function n(e){for(var n=1;n2&&void 0!==arguments[2]?arguments[2]:{} -if(void 0!==e.target)return e -return{target:n(n({},l),{name:e,value:t})}}})),define("consul-ui/utils/dom/qsa-factory",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:document -return function(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e -return n.querySelectorAll(t)}}})),define("consul-ui/utils/dom/sibling",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,t){let n=e -for(;n=n.nextSibling;)if(1===n.nodeType&&n.nodeName.toLowerCase()===t)return n}})),define("consul-ui/utils/editor/lint",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,t){n(e,t,(function(){e.getValue().trim().length&&e.performLint()}))},e.createLoader=void 0 -const t=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:document.getElementsByTagName.bind(document),t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:CodeMirror -return t.registerHelper("lint","ruby",(function(e){return[]})),function(n,l,r){let i=[...e("script")] -const o=i.find((function(e){return-1!==e.src.indexOf(`/codemirror/mode/${l}/${l}.js`)})) -t.autoLoadMode(n,l),o?r():(i=[...e("script")],t.on(i[0],"load",(function(){r()})))}} -e.createLoader=t -const n=t()})),define("consul-ui/utils/filter/index",["exports","mnemonist/set"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.andOr=void 0 -e.andOr=e=>{const n=function(e){return Object.entries(e).reduce(((e,t)=>{let[n,l]=t -return e[n]="function"!=typeof l?new Set(Object.keys(l)):null,e}),{})}(e) -return l=>(l=function(e,n){return Object.keys(n).reduce(((l,r)=>{const i=void 0===e[r]?[]:e[r] -return i.length>0&&(null!==n[r]?l[r]=[...t.default.intersection(n[r],new Set(i))]:l[r]=[...new Set(i)]),l}),{})}(l,n),t=>function(e,t,n){return Object.entries(t).every((t=>{let[l,r]=t,i=n[l] -return"function"==typeof i?i(e,r):r.some((t=>i[t](e,t)))}))}(t,l,e))}})),define("consul-ui/utils/form/builder",["exports","@ember/object","ember-changeset","consul-ui/utils/form/changeset","ember-changeset-validations","consul-ui/utils/get-form-name-property"],(function(e,t,n,l,r,i){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:o,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:i.default -return function(){let l=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} -const i={} -let o=null -const a={data:null,name:l,getName:function(){return this.name},setData:function(n){return o&&!Array.isArray(n)&&(n=e(n,o)),(0,t.set)(this,"data",n),this},getData:function(){return this.data},add:function(e){return i[e.getName()]=e,this},handleEvent:function(e,l){const i=e.target,o=n(l||i.name),a=o[0],u=o[1] -let s=r -if(a!==this.getName()){if(this.has(a))return this.form(a).handleEvent(e) -s=s[a]}const c=this.getData(),d="function"==typeof c.toJSON?c.toJSON():(0,t.get)(c,"data").toJSON() -if(!Object.keys(d).includes(u)){const e=new Error(`${u} property doesn't exist`) -throw e.target=i,e}let p=(0,t.get)(c,u) -if(Array.isArray(p)||void 0!==s[u]&&"string"==typeof s[u].type&&"array"===s[u].type.toLowerCase()){null==p&&(p=[]) -p[i.checked?"pushObject":"removeObject"](i.value),(0,t.set)(c,u,p)}else void 0===i.checked||"on"!==i.value.toLowerCase()&&"off"!==i.value.toLowerCase()?(0,t.set)(c,u,i.value):(0,t.set)(c,u,i.checked) -return this.validate()},reset:function(){return"function"==typeof this.getData().rollbackAttributes&&this.getData().rollbackAttributes(),this},clear:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{} -return"function"==typeof e?this.clearer=e:this.setData(this.clearer(e)).getData()},submit:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{} -if("function"==typeof e)return this.submitter=e -this.submitter(this.getData())},setValidators:function(e){return o=e,this},validate:function(){const e=this.getData() -return"function"==typeof e.validate&&e.validate(),this},addError:function(e,t){const n=this.getData() -"function"==typeof n.addError&&n.addError(...arguments)},form:function(e){return null==e?this:i[e]},has:function(e){return void 0!==i[e]}} -return a.submit=a.submit.bind(a),a.reset=a.reset.bind(a),a}},e.defaultChangeset=void 0 -const o=function(e,t){return(0,n.Changeset)(e,(0,r.default)(t),t,{changeset:l.default})} -e.defaultChangeset=o})),define("consul-ui/utils/form/changeset",["exports","@ember/object","ember-changeset"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class l extends n.EmberChangeset{pushObject(e,n){let l -void 0===(0,t.get)(this,`_changes.${e}`)?(l=(0,t.get)(this,`data.${e}`),l=l?l.toArray():[]):l=this.get(e).slice(0),l.push(n),this.set(`${e}`,l)}removeObject(e,n){let l -void 0===(0,t.get)(this,`_changes.${e}`)?(l=(0,t.get)(this,`data.${e}`),l=void 0===l?[]:l.toArray()):l=this.get(e).slice(0) -const r=l.indexOf(n);-1!==r&&l.splice(r,1),this.set(`${e}`,l)}}e.default=l})),define("consul-ui/utils/get-environment",["exports","@ember/debug"],(function(e,t){function n(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) -t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function l(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:window,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:document;(0,t.runInDebug)((()=>{const e=function(e){return e.split(";").map((e=>e.trim())).filter((e=>""!==e)).filter((e=>e.split("=").shift().startsWith("CONSUL_")))} -n.Scenario=function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"" -if(t.length>0)e(t).forEach((e=>{if(e.startsWith("CONSUL_COLOR_SCHEME=")){const[,l]=e.split("=") -let r -try{r=JSON.parse(n.localStorage.getItem("consul:theme"))}catch(t){r={"color-scheme":"light"}}n.localStorage.setItem("consul:theme",`{"color-scheme": "${"!"===l?"light"===r["color-scheme"]?"dark":"light":l}"}`)}else r.cookie=`${e};Path=/`})),n.location.hash="",location.reload() -else{t=e(r.cookie).join(";") -n.open("","_blank").document.write(`
      ${location.href}#${t}

      Scenario`)}},void 0!==n.location&&"string"==typeof n.location.hash&&n.location.hash.length>0&&n.Scenario(n.location.hash.substr(1))})) -const i=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:r.cookie -return e.split(";").filter((e=>""!==e)).map((e=>{const[t,...n]=e.trim().split("=") -return[t,n.join("=")]}))},o=function(e){const t=n.localStorage.getItem(e) -return null===t?void 0:t},a=function(e){try{return n.performance.getEntriesByType("resource").find((t=>"script"===t.initiatorType&&e===t.name))||{}}catch(t){return{}}},u=l(l({},e.operatorConfig),JSON.parse(r.querySelector(`[data-${e.modulePrefix}-config]`).textContent)),s=u.UIConfig||{},c=r.getElementsByTagName("script"),d=c[c.length-1].src -let p -const f=function(e,t){let n,l,r,i -switch(e){case"CONSUL_NSPACES_ENABLED":return void 0!==u.NamespacesEnabled&&u.NamespacesEnabled -case"CONSUL_SSO_ENABLED":return void 0!==u.SSOEnabled&&u.SSOEnabled -case"CONSUL_ACLS_ENABLED":return void 0!==u.ACLsEnabled&&u.ACLsEnabled -case"CONSUL_PARTITIONS_ENABLED":return void 0!==u.PartitionsEnabled&&u.PartitionsEnabled -case"CONSUL_PEERINGS_ENABLED":return void 0!==u.PeeringEnabled&&u.PeeringEnabled -case"CONSUL_HCP_ENABLED":return void 0!==u.HCPEnabled&&u.HCPEnabled -case"CONSUL_DATACENTER_LOCAL":return u.LocalDatacenter -case"CONSUL_DATACENTER_PRIMARY":return u.PrimaryDatacenter -case"CONSUL_HCP_MANAGED_RUNTIME":return u.HCPManagedRuntime -case"CONSUL_API_PREFIX":return u.APIPrefix -case"CONSUL_HCP_URL":return u.HCPURL -case"CONSUL_UI_CONFIG":return l={service:void 0},r=t("CONSUL_METRICS_PROVIDER"),i=t("CONSUL_METRICS_PROXY_ENABLED"),l.service=t("CONSUL_SERVICE_DASHBOARD_URL"),r&&(s.metrics_provider=r),i&&(s.metrics_proxy_enabled=i),l.service&&(s.dashboard_url_templates=l),s -case"CONSUL_BASE_UI_URL":return d.split("/").slice(0,-2).join("/") -case"CONSUL_HTTP_PROTOCOL":return void 0===p&&(p=a(d)),p.nextHopProtocol||"http/1.1" -case"CONSUL_HTTP_MAX_CONNECTIONS":switch(n=t("CONSUL_HTTP_PROTOCOL"),!0){case 0===n.indexOf("h2"):case 0===n.indexOf("hq"):case 0===n.indexOf("spdy"):return -default:return 5}}},m=function(t){let n={} -switch(e.environment){case"development":case"staging":case"coverage":case"test":n=i().reduce((function(e,t){let[n,l]=t -switch(n){case"CONSUL_INTL_LOCALE":e.CONSUL_INTL_LOCALE=String(l).toLowerCase() -break -case"CONSUL_INTL_DEBUG":e.CONSUL_INTL_DEBUG=!!JSON.parse(String(l).toLowerCase()) -break -case"CONSUL_ACLS_ENABLE":e.CONSUL_ACLS_ENABLED=!!JSON.parse(String(l).toLowerCase()) -break -case"CONSUL_AGENTLESS_ENABLE":e.CONSUL_AGENTLESS_ENABLED=!!JSON.parse(String(l).toLowerCase()) -break -case"CONSUL_NSPACES_ENABLE":e.CONSUL_NSPACES_ENABLED=!!JSON.parse(String(l).toLowerCase()) -break -case"CONSUL_SSO_ENABLE":e.CONSUL_SSO_ENABLED=!!JSON.parse(String(l).toLowerCase()) -break -case"CONSUL_PARTITIONS_ENABLE":e.CONSUL_PARTITIONS_ENABLED=!!JSON.parse(String(l).toLowerCase()) -break -case"CONSUL_METRICS_PROXY_ENABLE":e.CONSUL_METRICS_PROXY_ENABLED=!!JSON.parse(String(l).toLowerCase()) -break -case"CONSUL_PEERINGS_ENABLE":e.CONSUL_PEERINGS_ENABLED=!!JSON.parse(String(l).toLowerCase()) -break -case"CONSUL_HCP_ENABLE":e.CONSUL_HCP_ENABLED=!!JSON.parse(String(l).toLowerCase()) -break -case"CONSUL_UI_CONFIG":e.CONSUL_UI_CONFIG=JSON.parse(l) -break -case"TokenSecretID":e.CONSUL_HTTP_TOKEN=l -break -default:e[n]=l}return e}),{}) -break -case"production":n=i().reduce((function(e,t){let[n,l]=t -if("TokenSecretID"===n)e.CONSUL_HTTP_TOKEN=l -return e}),{})}return void 0!==n[t]?n[t]:e[t]} -return function e(t){switch(t){case"CONSUL_UI_DISABLE_REALTIME":case"CONSUL_UI_DISABLE_ANCHOR_SELECTION":return!!JSON.parse(String(o(t)||0).toLowerCase())||m(t) -case"CONSUL_UI_REALTIME_RUNNER":return o(t)||m(t) -case"CONSUL_UI_CONFIG":case"CONSUL_DATACENTER_LOCAL":case"CONSUL_DATACENTER_PRIMARY":case"CONSUL_HCP_MANAGED_RUNTIME":case"CONSUL_API_PREFIX":case"CONSUL_HCP_URL":case"CONSUL_ACLS_ENABLED":case"CONSUL_NSPACES_ENABLED":case"CONSUL_PEERINGS_ENABLED":case"CONSUL_AGENTLESS_ENABLED":case"CONSUL_HCP_ENABLED":case"CONSUL_SSO_ENABLED":case"CONSUL_PARTITIONS_ENABLED":case"CONSUL_METRICS_PROVIDER":case"CONSUL_METRICS_PROXY_ENABLE":case"CONSUL_SERVICE_DASHBOARD_URL":case"CONSUL_BASE_UI_URL":case"CONSUL_HTTP_PROTOCOL":case"CONSUL_HTTP_MAX_CONNECTIONS":{const n=m(t) -return void 0!==n?n:f(t,e)}default:return m(t)}}}})),define("consul-ui/utils/get-form-name-property",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){if(-1!==e.indexOf("["))return e.match(/(.*)\[(.*)\]/).slice(1) -return["",e]}})),define("consul-ui/utils/helpers/call-if-type",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){return function(t){return function(n){let l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} -return typeof n[0]!==e?n[0]:t(n[0],l)}}}})),define("consul-ui/utils/http/consul",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.HEADERS_SYMBOL=e.HEADERS_DIGEST=e.HEADERS_TOKEN=e.HEADERS_INDEX=e.HEADERS_DEFAULT_ACL_POLICY=e.HEADERS_DATACENTER=e.HEADERS_NAMESPACE=e.HEADERS_PARTITION=void 0 -e.HEADERS_PARTITION="X-Consul-Partition" -e.HEADERS_NAMESPACE="X-Consul-Namespace" -e.HEADERS_DATACENTER="X-Consul-Datacenter" -e.HEADERS_DEFAULT_ACL_POLICY="X-Consul-Default-Acl-Policy" -e.HEADERS_INDEX="X-Consul-Index" -e.HEADERS_TOKEN="X-Consul-Token" -e.HEADERS_DIGEST="X-Consul-ContentHash" -e.HEADERS_SYMBOL="__consul_ui_http_headers__"})),define("consul-ui/utils/http/create-headers",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){return function(e){return e.reduce((function(e,t){const[n,...l]=t.split(":") -return l.length>0&&(e[n.trim()]=l.join(":").trim()),e}),{})}}})),define("consul-ui/utils/http/create-query-params",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:encodeURIComponent -return function t(n,l){return Object.entries(n).reduce((function(n,r,i){let[o,a]=r -if(void 0===a)return n -let u=e(o) -return void 0!==l&&(u=`${l}[${u}]`),null===a?n.concat(u):"object"==typeof a?n.concat(t(a,u)):n.concat(`${u}=${e(a)}`)}),[]).join("&")}}})),define("consul-ui/utils/http/create-url",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,t){return function(n){for(var l=arguments.length,r=new Array(l>1?l-1:0),i=1;i0&&void 0!==arguments[0]?arguments[0]:0 -if("text/event-stream"===this.headers()["content-type"]){this.statusCode=e -const t=this.connection() -if(t.readyState)switch(t.readyState){case 0:case 1:t.abort()}}}}e.default=i})),define("consul-ui/utils/http/status",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.INTERNAL_SERVER_ERROR=e.FORBIDDEN=e.UNAUTHORIZED=e.OK=void 0 -e.OK=200 -e.UNAUTHORIZED=401 -e.FORBIDDEN=403 -e.INTERNAL_SERVER_ERROR=500})),define("consul-ui/utils/http/xhr",["exports"],(function(e){function t(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) -t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function n(e){for(var n=1;n=200&&this.status<400){const e=l.converters["text json"](this.response) -l.success(t,e,this.status,this.statusText)}else l.error(t,this.responseText,this.status,this.statusText,this.error) -l.complete(this.status)}} -let i=l.url -i.endsWith("?")&&(i=i.substr(0,i.length-1)),r.open(l.method,i,!0),void 0===l.headers&&(l.headers={}) -const o=n(n({},l.headers),{},{"X-Requested-With":"XMLHttpRequest"}) -return Object.entries(o).forEach((e=>{let[t,n]=e -return r.setRequestHeader(t,n)})),l.beforeSend(r),r.withCredentials=!0,r.send(l.body),r}}})),define("consul-ui/utils/intl/missing-message",["exports","@ember/debug"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,n){(0,t.runInDebug)((t=>console.debug(`Translation key not found: ${e}`))) -const l=e.split(".").pop().split("-").join(" ") -return`${l.substr(0,1).toUpperCase()}${l.substr(1)}`}})),define("consul-ui/utils/isFolder",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"" -return"/"===e.slice(-1)}})),define("consul-ui/utils/keyToArray",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"/" -return(e===t?"":e).split(t)}})),define("consul-ui/utils/left-trim",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"" -return 0===e.indexOf(t)?e.substr(t.length):e}})),define("consul-ui/utils/maybe-call",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,t){return function(n){return t.then((function(t){return t&&e(),n}))}}})),define("consul-ui/utils/merge-checks",["exports","@ember/object","mnemonist/multi-map"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],l=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:n.default -const i=new r,o=e.shift(),a=o.map((e=>(""===e.ServiceName&&i.set(e.Node,e.CheckID),e))).concat(e.reduce(((e,t)=>void 0===t?e:e.concat(t.reduce(((e,t)=>{if(""===t.ServiceName){if((i.get(t.Node)||[]).includes(t.CheckID))return e -i.set(t.Node,t.CheckID)}return e.push(t),e}),[]))),[])) -return l&&a.filter((e=>(0,t.get)(e,"Exposable"))).forEach((e=>{(0,t.set)(e,"Exposed",l)})),a}})),define("consul-ui/utils/minimizeModel",["exports","@ember/object"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){if(Array.isArray(e))return e.filter((function(e){return!(0,t.get)(e,"isNew")})).map((function(e){return{ID:(0,t.get)(e,"ID"),Name:(0,t.get)(e,"Name")}}))}})),define("consul-ui/utils/non-empty-set",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){return function(t){return null==t||""===t?{}:{[e]:t}}}})),define("consul-ui/utils/path/resolve",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=(e,t)=>0===t.indexOf("/")?t:t.split("/").reduce(((e,t,n,l)=>("."!==t&&(".."===t?e.pop():""===t&&n!==l.length-1||e.push(t)),e)),e.split("/")).join("/")})),define("consul-ui/utils/promisedTimeout",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Promise,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:setTimeout -return function(n){let l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(){} -return new e(((e,r)=>{l(t((function(){e(n)}),n))}))}}})) -define("consul-ui/utils/right-trim",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"" -const n=e.length-t.length -if(n>=0)return e.lastIndexOf(t)===n?e.substr(0,n):e -return e}})),define("consul-ui/utils/routing/redirect-to",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,t){return function(t,n){const l=this.routeName.split(".").slice(0,-1).join(".") -this.replaceWith(`${l}.${e}`,t)}}})),define("consul-ui/utils/routing/transitionable",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){let l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2?arguments[2]:void 0 -null===e&&(e=r.lookup("route:application")) -let i,o=n(e,l),a=e -for(;i=a.parent;)o=o.concat(n(i,l)),a=i -return o.reverse(),t(e.name||"application",o,l)} -const t=function(e,t,n){return[e,...t]},n=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} -return(e.paramNames||[]).map((function(n){return void 0!==t[n]?t[n]:e.params[n]})).reverse()}})),define("consul-ui/utils/routing/walk",["exports","@ember/debug"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){return function(){n.apply(this,[e])}},e.dump=e.walk=void 0 -const n=function(e){Object.keys(e).forEach(((t,l)=>{if("_options"===t)return -if(null===e[t])return -const r=e[t]._options -let i -Object.keys(e[t]).length>1&&(i=function(){n.apply(this,[e[t]])}),this.route(t,r,i)})),void 0===e.index&&(e.index={_options:{path:""}})} -e.walk=n -let l=e=>{} -e.dump=l,(0,t.runInDebug)((()=>{const t=function(e){return Array(e).fill(" ",0,e).join("")} -e.dump=l=function(e){let l=2 -const r={out:"",route:function(e,n,r){this.out+=`${t(l)}this.route('${e}', ${JSON.stringify(n)}`,r?(l++,this.out+=", function() {\n",r.apply(this,[]),l--,this.out+=`${t(l)}});\n`):this.out+=");",this.out+="\n"}} -return n.apply(r,[e]),`Router.map(\n function() {\n${r.out}\n }\n);`}}))})),define("consul-ui/utils/routing/wildcard",["exports","@ember/object"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){return function(n){let l=!1 -try{l=-1!==(0,t.get)(e,n)._options.path.indexOf("*")}catch(r){}return l}}})),define("consul-ui/utils/search/exact",["exports","consul-ui/utils/search/predicate"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{predicate(e){return e=e.toLowerCase(),function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"" -return-1!==t.toString().toLowerCase().indexOf(e)}}}e.default=n})),define("consul-ui/utils/search/fuzzy",["exports","fuse.js"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=class{constructor(e,n){this.fuse=new t.default(e,{includeMatches:!0,shouldSort:!1,threshold:.4,keys:Object.keys(n.finders)||[],getFn:(e,t)=>(n.finders[t[0]](e)||[]).toString()})}search(e){return this.fuse.search(e).map((e=>e.item))}}})),define("consul-ui/utils/search/predicate",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=class{constructor(e,t){this.items=e,this.options=t}search(e){const t=this.predicate(e) -return this.items.filter((e=>Object.entries(this.options.finders).some((n=>{let[l,r]=n -const i=r(e) -return Array.isArray(i)?i.some(t):t(i)}))))}}})),define("consul-ui/utils/search/regexp",["exports","consul-ui/utils/search/predicate"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{predicate(e){let t -try{t=new RegExp(e,"i")}catch(n){return()=>!1}return e=>t.test(e)}}e.default=n})),define("consul-ui/utils/storage/local-storage",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:window.localStorage,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:JSON.stringify,l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:JSON.parse,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:function(e){window.dispatchEvent(new StorageEvent("storage",{key:e}))} -const i=`${e}:` -return{getValue:function(e){let n=t.getItem(`${i}${e}`) -"string"!=typeof n&&(n='""') -try{n=l(n)}catch(r){n=""}return n},setValue:function(e,l){if(null===l)return this.removeValue(e) -try{l=n(l)}catch(a){l='""'}const o=t.setItem(`${i}${e}`,l) -return r(`${i}${e}`),o},removeValue:function(e){const n=t.removeItem(`${i}${e}`) -return r(`${i}${e}`),n},all:function(){return Object.keys(t).reduce(((e,t,n,l)=>{if(0===t.indexOf(`${i}`)){const n=t.substr(i.length) -e[n]=this.getValue(n)}return e}),{})}}}})),define("consul-ui/utils/templatize",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[] -return e.map((e=>`template-${e}`))}})),define("consul-ui/utils/ticker/index",["exports","consul-ui/utils/dom/event-target/rsvp","@ember/object"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.Tween=e.Ticker=void 0 -const l=class extends t.default{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1e3/60 -super(),this.setRate(e)}tick(){this.dispatchEvent({type:"tick",target:this})}setRate(e){clearInterval(this._interval),this._interval=setInterval((()=>this.tick()),e)}destroy(){clearInterval(this._interval)}},r=class extends t.default{static destroy(){void 0!==r.defaultTickerGroup&&(r.defaultTickerGroup.destroy(),delete r.defaultTickerGroup)}constructor(e){super(),this.setTickable(e)}tick(){this._tickable.tick()}setTickable(e){this._tickable=e,void 0===this._tickable.getTicker&&(this._tickable.getTicker=()=>this),this.tick=this._tickable.tick.bind(this._tickable)}getTickable(){return this._tickable}isAlive(){return this._isAlive}start(){this._isAlive=!0,this.getTickerGroup().addEventListener("tick",this.tick),this.dispatchEvent({type:"start",target:this})}stop(){this._isAlive=!1,this.getTickerGroup().removeEventListener("tick",this.tick),this.dispatchEvent({type:"stop",target:this})}activeCount(){return this.getTickerGroup().activeCount()}setTickerGroup(e){this._group=e}getTickerGroup(){return void 0===this._group&&(void 0===r.defaultTickerGroup&&(r.defaultTickerGroup=new o),this._group=r.defaultTickerGroup),this._group}} -e.Ticker=r -const i={easeOut:function(e,t,n,l){return e/=l,n*(--e*e*e+1)+t}},o=l,a=class extends class{constructor(){this._currentframe=1,this.setIncrement(1)}isAtStart(){return this._currentframe<=1}isAtEnd(){return this._currentframe>=this._totalframes}addEventListener(){return this.getTicker().addEventListener(...arguments)}removeEventListener(){return this.getTicker().removeEventListener(...arguments)}stop(){return this.gotoAndStop(this._currentframe)}play(){return this.gotoAndPlay(this._currentframe)}start(){return this.gotoAndPlay(this._currentframe)}gotoAndStop(e){this._currentframe=e -const t=this.getTicker() -return t.isAlive()&&t.stop(),this}gotoAndPlay(e){this._currentframe=e -const t=this.getTicker() -return t.isAlive()||t.start(),this}getTicker(){return void 0===this._ticker&&(this._ticker=new r(this)),this._ticker}setFrames(e){return this._totalframes=e,this}setIncrement(e){return this._increment=e,this}}{static destroy(){r.destroy()}static to(e,t,n,l){return Object.keys(t).forEach((function(n){t[n]-=e[n]})),new a(e,t,n,l).play()}constructor(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:12,l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:i.easeOut -super(),this.setMethod(l),this.setProps(t),this.setTarget(e),this.setFrames(n),this.tick=this.forwards}_process(){Object.keys(this._props).forEach((e=>{const t=this._method(this._currentframe,this._initialstate[e],this._props[e],this._totalframes);(0,n.set)(this._target,e,t)}))}forwards(){this._currentframe<=this._totalframes?(this._process(),this._currentframe+=this._increment):(this._currentframe=this._totalframes,this.getTicker().stop())}backwards(){this._currentframe-=this._increment,this._currentframe>=0?this._process():(this.run=this.forwards,this._currentframe=1,this.getTicker().stop())}gotoAndPlay(){return void 0===this._initialstate&&(this._initialstate={},Object.keys(this._props).forEach((e=>{this._initialstate[e]=this._target[e]}))),super.gotoAndPlay(...arguments)}setTarget(e){this._target=e}getTarget(e){return this._target}setProps(e){return this._props=e,this}setMethod(e){this._method=e}} -e.Tween=a})),define("consul-ui/utils/titleize",["exports","ember-cli-string-helpers/utils/titleize"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/utils/tomography",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){return function(t,n){var l=999999999,r=-999999999,i=[] -n.forEach((function(o){if(t==o.Node){var a=o.Segment -n.forEach((function(t){if(o.Node!=t.Node&&t.Segment==a){var n=e(o,t) -i.push({node:t.Node,distance:n,segment:a}),nr&&(r=n)}})),i.sort((function(e,t){return e.distance-t.distance}))}})) -var o,a=i.length,u=Math.floor(a/2) -return a>0?o=a%2?i[u].distance:(i[u-1].distance+i[u].distance)/2:(o=0,l=0,r=0),{distances:i,min:Math.trunc(100*l)/100,median:Math.trunc(100*o)/100,max:Math.trunc(100*r)/100}}}})),define("consul-ui/utils/ucfirst",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){return`${e.substr(0,1).toUpperCase()}${e.substr(1)}`}})),define("consul-ui/utils/update-array-object",["exports","@ember/object","@ember/object/proxy"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,l,r,i){i=void 0===i?(0,t.get)(l,r):i -const o=e.findIndex((function(e){return(0,t.get)(e,r)===i}));-1!==o&&(l instanceof n.default&&(0,t.set)(l,"content",e.objectAt(o)),e.replace(o,1,[l])) -return l}})),define("consul-ui/validations/intention-permission-http-header",["exports","ember-changeset-validations/validators","consul-ui/validations/sometimes"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=e=>({Name:[(0,t.validatePresence)(!0)],Value:[(0,n.default)((0,t.validatePresence)(!0),(function(){return"Present"!==this.get("HeaderType")}))]})})),define("consul-ui/validations/intention-permission",["exports","ember-changeset-validations/validators","consul-ui/validations/sometimes"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=e=>({"*":[(0,n.default)((0,t.validatePresence)(!0),(function(){const e=this.get("HTTP.Methods")||[],t=this.get("HTTP.Header")||[],n=this.get("HTTP.PathType")||"NoPath",l=this.get("HTTP.Path")||"" -return![0!==e.length,0!==t.length,"NoPath"!==n&&""!==l].includes(!0)}))],Action:[(0,t.validateInclusion)({in:e["intention-permission"].Action.allowedValues})],HTTP:{Path:[(0,n.default)((0,t.validateFormat)({regex:/^\//}),(function(){const e=this.get("HTTP.PathType") -return void 0!==e&&"NoPath"!==e}))]}})})),define("consul-ui/validations/intention",["exports","ember-changeset-validations/validators","consul-ui/validations/sometimes"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var l={"*":[(0,n.default)((0,t.validatePresence)(!0),(function(){const e=this.get("Action")||"",t=this.get("Permissions")||[] -return""===e&&0===t.length}))],SourceName:[(0,t.validatePresence)(!0),(0,t.validateLength)({min:1})],DestinationName:[(0,t.validatePresence)(!0),(0,t.validateLength)({min:1})],Permissions:[(0,n.default)((0,t.validateLength)({min:1}),(function(e,t){return!this.get("Action")}))]} -e.default=l})),define("consul-ui/validations/kv",["exports","ember-changeset-validations/validators"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n={Key:[(0,t.validatePresence)(!0),(0,t.validateLength)({min:1})]} -e.default=n})),define("consul-ui/validations/policy",["exports","ember-changeset-validations/validators"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n={Name:(0,t.validateFormat)({regex:/^[A-Za-z0-9\-_]{1,128}$/})} -e.default=n})),define("consul-ui/validations/role",["exports","ember-changeset-validations/validators"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n={Name:(0,t.validateFormat)({regex:/^[A-Za-z0-9\-_]{1,256}$/})} -e.default=n})),define("consul-ui/validations/sometimes",["exports","@ember/object"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,n){return function(e){return function(l,r,i,o,a){let u={get(e){if(e.includes(".")){let n=(0,t.get)(o,e) -if(void 0!==n)return n -let l=e.split("."),r=l.pop(),i=l.join("."),u=(0,t.get)(o,i) -return u&&u.hasOwnProperty&&u.hasOwnProperty(r)?n:(0,t.get)(a,e)}return o.hasOwnProperty(e)?(0,t.get)(o,e):(0,t.get)(a,e)}} -return!n.call(u,o,a)||e(l,r,i,o,a)}}(e)}})),define("consul-ui/validations/token",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={}})),define("consul-ui/config/environment",[],(function(){try{var e="consul-ui/config/environment",t=document.querySelector('meta[name="'+e+'"]').getAttribute("content"),n={default:JSON.parse(decodeURIComponent(t))} -return Object.defineProperty(n,"__esModule",{value:!0}),n}catch(l){throw new Error('Could not read config from meta tag with name "'+e+'".')}})),runningTests||require("consul-ui/app").default.create({name:"consul-ui",version:"2.2.0+63204b51"}) diff --git a/agent/uiserver/dist/assets/consul-ui-ebf15e0a88f8aa4b2e353442d718d20d.css b/agent/uiserver/dist/assets/consul-ui-ebf15e0a88f8aa4b2e353442d718d20d.css new file mode 100644 index 0000000000000..6e8358ba96719 --- /dev/null +++ b/agent/uiserver/dist/assets/consul-ui-ebf15e0a88f8aa4b2e353442d718d20d.css @@ -0,0 +1,2 @@ +@charset "UTF-8";/*! tailwindcss v3.2.7 | MIT License | https://tailwindcss.com + */.hds-table,table{border-spacing:0}input[type=checkbox],input[type=radio],progress,sub,sup{vertical-align:baseline}.hover\:scale-125:hover,.scale-100,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.ease-in-out,.transition{transition-timing-function:cubic-bezier(.4,0,.2,1)}*,::after,::before{border-width:0;border-style:solid;border-color:currentColor}html{line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-feature-settings:normal}a,hr{color:inherit}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}menu,ol,ul{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto}[hidden]{display:none}*,::after,::backdrop,::before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scroll-snap-strictness:proximity;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246 / 0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.hds-side-nav,.sticky{position:sticky}.bottom-0{bottom:0}.isolate{isolation:isolate}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-6{margin-bottom:1.5rem}.ml-4{margin-left:1rem}.mr-0{margin-right:0}.mr-0\.5{margin-right:.125rem}.mr-1{margin-right:.25rem}.mr-1\.5{margin-right:.375rem}.mr-2{margin-right:.5rem}.mr-2\.5{margin-right:.625rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-6{margin-top:1.5rem}.block{display:block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.contents{display:contents}.hidden{display:none}.h-12{height:3rem}.h-16{height:4rem}.h-24{height:6rem}.h-4{height:1rem}.h-48{height:12rem}.h-8{height:2rem}.h-full{height:100%}.\!w-80{width:20rem!important}.w-24{width:6rem}.w-4{width:1rem}.w-8{width:2rem}.w-full{width:100%}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.flex-col,.hds-accordion{flex-direction:column}.scale-100{--tw-scale-x:1;--tw-scale-y:1}.cursor-pointer{cursor:pointer}.resize{resize:both}.flex-nowrap{flex-wrap:nowrap}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.space-x-12>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(3rem * var(--tw-space-x-reverse));margin-left:calc(3rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.overflow-x-auto{overflow-x:auto}.overflow-y-scroll{overflow-y:scroll}.hds-breadcrumb__text,.hds-card__container--overflow-hidden,.truncate{overflow:hidden}.truncate{text-overflow:ellipsis;white-space:nowrap}.rounded{border-radius:.25rem}.border{border-width:1px}.p-6{padding:1.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize,.type-source.popover-select li:not(.partition) button{text-transform:capitalize}.underline{text-decoration-line:underline}.opacity-0{opacity:0}.shadow{--tw-shadow:0 1px 3px 0 rgb(0 0 0 / 0.1),0 1px 2px -1px rgb(0 0 0 / 0.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.hds-elevation-inset,.hds-form-checkbox:not(:checked,:indeterminate){box-shadow:var(--token-elevation-inset-box-shadow)}.outline{outline-style:solid}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-duration:150ms}.consul-surface-nav{background:var(--token-color-palette-neutral-700)}:root{--token-color-palette-blue-500:#1c345f;--token-color-palette-blue-400:#0046d1;--token-color-palette-blue-300:#0c56e9;--token-color-palette-blue-200:#1060ff;--token-color-palette-blue-100:#cce3fe;--token-color-palette-blue-50:#f2f8ff;--token-color-palette-purple-500:#42215b;--token-color-palette-purple-400:#7b00db;--token-color-palette-purple-300:#911ced;--token-color-palette-purple-200:#a737ff;--token-color-palette-purple-100:#ead2fe;--token-color-palette-purple-50:#f9f2ff;--token-color-palette-green-500:#054220;--token-color-palette-green-400:#006619;--token-color-palette-green-300:#00781e;--token-color-palette-green-200:#008a22;--token-color-palette-green-100:#cceeda;--token-color-palette-green-50:#f2fbf6;--token-color-palette-amber-500:#542800;--token-color-palette-amber-400:#803d00;--token-color-palette-amber-300:#9e4b00;--token-color-palette-amber-200:#bb5a00;--token-color-palette-amber-100:#fbeabf;--token-color-palette-amber-50:#fff9e8;--token-color-palette-red-500:#51130a;--token-color-palette-red-400:#940004;--token-color-palette-red-300:#c00005;--token-color-palette-red-200:#e52228;--token-color-palette-red-100:#fbd4d4;--token-color-palette-red-50:#fff5f5;--token-color-palette-neutral-700:#0c0c0e;--token-color-palette-neutral-600:#3b3d45;--token-color-palette-neutral-500:#656a76;--token-color-palette-neutral-400:#8c909c;--token-color-palette-neutral-300:#c2c5cb;--token-color-palette-neutral-200:#dedfe3;--token-color-palette-neutral-100:#f1f2f3;--token-color-palette-neutral-50:#fafafa;--token-color-palette-neutral-0:#ffffff;--token-color-palette-alpha-300:#3b3d4566;--token-color-palette-alpha-200:#656a7633;--token-color-palette-alpha-100:#656a761a;--token-color-border-primary:#656a7633;--token-color-border-faint:#656a761a;--token-color-border-strong:#3b3d4566;--token-color-border-action:#cce3fe;--token-color-border-highlight:#ead2fe;--token-color-border-success:#cceeda;--token-color-border-warning:#fbeabf;--token-color-border-critical:#fbd4d4;--token-color-focus-action-internal:#0c56e9;--token-color-focus-action-external:#5990ff;--token-color-focus-critical-internal:#c00005;--token-color-focus-critical-external:#dd7578;--token-color-foreground-strong:#0c0c0e;--token-color-foreground-primary:#3b3d45;--token-color-foreground-faint:#656a76;--token-color-foreground-high-contrast:#ffffff;--token-color-foreground-disabled:#8c909c;--token-color-foreground-action:#1060ff;--token-color-foreground-action-hover:#0c56e9;--token-color-foreground-action-active:#0046d1;--token-color-foreground-highlight:#a737ff;--token-color-foreground-highlight-on-surface:#911ced;--token-color-foreground-highlight-high-contrast:#42215b;--token-color-foreground-success:#008a22;--token-color-foreground-success-on-surface:#00781e;--token-color-foreground-success-high-contrast:#054220;--token-color-foreground-warning:#bb5a00;--token-color-foreground-warning-on-surface:#9e4b00;--token-color-foreground-warning-high-contrast:#542800;--token-color-foreground-critical:#e52228;--token-color-foreground-critical-on-surface:#c00005;--token-color-foreground-critical-high-contrast:#51130a;--token-color-page-primary:#ffffff;--token-color-page-faint:#fafafa;--token-color-surface-primary:#ffffff;--token-color-surface-faint:#fafafa;--token-color-surface-strong:#f1f2f3;--token-color-surface-interactive:#ffffff;--token-color-surface-interactive-hover:#f1f2f3;--token-color-surface-interactive-active:#dedfe3;--token-color-surface-interactive-disabled:#fafafa;--token-color-surface-action:#f2f8ff;--token-color-surface-highlight:#f9f2ff;--token-color-surface-success:#f2fbf6;--token-color-surface-warning:#fff9e8;--token-color-surface-critical:#fff5f5;--token-color-hashicorp-brand:#000000;--token-color-boundary-brand:#f24c53;--token-color-boundary-foreground:#cf2d32;--token-color-boundary-surface:#ffecec;--token-color-boundary-border:#fbd7d8;--token-color-boundary-gradient-primary-start:#f97076;--token-color-boundary-gradient-primary-stop:#db363b;--token-color-boundary-gradient-faint-start:#fffafa;--token-color-boundary-gradient-faint-stop:#ffecec;--token-color-consul-brand:#e03875;--token-color-consul-foreground:#d01c5b;--token-color-consul-surface:#ffe9f1;--token-color-consul-border:#ffcede;--token-color-consul-gradient-primary-start:#ff99be;--token-color-consul-gradient-primary-stop:#da306e;--token-color-consul-gradient-faint-start:#fff9fb;--token-color-consul-gradient-faint-stop:#ffe9f1;--token-color-hcp-brand:#000000;--token-color-nomad-brand:#06d092;--token-color-nomad-foreground:#008661;--token-color-nomad-surface:#d3fdeb;--token-color-nomad-border:#bff3dd;--token-color-nomad-gradient-primary-start:#bff3dd;--token-color-nomad-gradient-primary-stop:#60dea9;--token-color-nomad-gradient-faint-start:#f3fff9;--token-color-nomad-gradient-faint-stop:#d3fdeb;--token-color-packer-brand:#02a8ef;--token-color-packer-foreground:#007eb4;--token-color-packer-surface:#d4f2ff;--token-color-packer-border:#b4e4ff;--token-color-packer-gradient-primary-start:#b4e4ff;--token-color-packer-gradient-primary-stop:#63d0ff;--token-color-packer-gradient-faint-start:#f3fcff;--token-color-packer-gradient-faint-stop:#d4f2ff;--token-color-terraform-brand:#7b42bc;--token-color-terraform-foreground:#773cb4;--token-color-terraform-surface:#f4ecff;--token-color-terraform-border:#ebdbfc;--token-color-terraform-gradient-primary-start:#bb8deb;--token-color-terraform-gradient-primary-stop:#844fba;--token-color-terraform-gradient-faint-start:#fcfaff;--token-color-terraform-gradient-faint-stop:#f4ecff;--token-color-vagrant-brand:#1868f2;--token-color-vagrant-foreground:#1c61d8;--token-color-vagrant-surface:#d6ebff;--token-color-vagrant-border:#c7dbfc;--token-color-vagrant-gradient-primary-start:#c7dbfc;--token-color-vagrant-gradient-primary-stop:#7dadff;--token-color-vagrant-gradient-faint-start:#f4faff;--token-color-vagrant-gradient-faint-stop:#d6ebff;--token-color-vault-secrets-brand:#ffd814;--token-color-vault-secrets-brand-alt:#000000;--token-color-vault-secrets-foreground:#9a6f00;--token-color-vault-secrets-surface:#fff9cf;--token-color-vault-secrets-border:#feec7b;--token-color-vault-secrets-gradient-primary-start:#feec7b;--token-color-vault-secrets-gradient-primary-stop:#ffe543;--token-color-vault-secrets-gradient-faint-start:#fffdf2;--token-color-vault-secrets-gradient-faint-stop:#fff9cf;--token-color-vault-brand:#ffd814;--token-color-vault-brand-alt:#000000;--token-color-vault-foreground:#9a6f00;--token-color-vault-surface:#fff9cf;--token-color-vault-border:#feec7b;--token-color-vault-gradient-primary-start:#feec7b;--token-color-vault-gradient-primary-stop:#ffe543;--token-color-vault-gradient-faint-start:#fffdf2;--token-color-vault-gradient-faint-stop:#fff9cf;--token-color-waypoint-brand:#14c6cb;--token-color-waypoint-foreground:#008196;--token-color-waypoint-surface:#e0fcff;--token-color-waypoint-border:#cbf1f3;--token-color-waypoint-gradient-primary-start:#cbf1f3;--token-color-waypoint-gradient-primary-stop:#62d4dc;--token-color-waypoint-gradient-faint-start:#f6feff;--token-color-waypoint-gradient-faint-stop:#e0fcff;--token-elevation-inset-box-shadow:inset 0px 1px 2px 1px #656a761a;--token-elevation-low-box-shadow:0px 1px 1px 0px #656a760d,0px 2px 2px 0px #656a760d;--token-elevation-mid-box-shadow:0px 2px 3px 0px #656a761a,0px 8px 16px -10px #656a7633;--token-elevation-high-box-shadow:0px 2px 3px 0px #656a7626,0px 16px 16px -10px #656a7633;--token-elevation-higher-box-shadow:0px 2px 3px 0px #656a761a,0px 12px 28px 0px #656a7640;--token-elevation-overlay-box-shadow:0px 2px 3px 0px #3b3d4540,0px 12px 24px 0px #3b3d4559;--token-surface-inset-box-shadow:inset 0 0 0 1px #656a764d,inset 0px 1px 2px 1px #656a761a;--token-surface-base-box-shadow:0 0 0 1px #656a7633;--token-surface-low-box-shadow:0 0 0 1px #656a7626,0px 1px 1px 0px #656a760d,0px 2px 2px 0px #656a760d;--token-surface-mid-box-shadow:0 0 0 1px #656a7626,0px 2px 3px 0px #656a761a,0px 8px 16px -10px #656a7633;--token-surface-high-box-shadow:0 0 0 1px #656a7640,0px 2px 3px 0px #656a7626,0px 16px 16px -10px #656a7633;--token-surface-higher-box-shadow:0 0 0 1px #656a7633,0px 2px 3px 0px #656a761a,0px 12px 28px 0px #656a7640;--token-surface-overlay-box-shadow:0 0 0 1px #3b3d4540,0px 2px 3px 0px #3b3d4540,0px 12px 24px 0px #3b3d4559;--token-focus-ring-action-box-shadow:inset 0 0 0 1px #0c56e9,0 0 0 3px #5990ff;--token-focus-ring-critical-box-shadow:inset 0 0 0 1px #c00005,0 0 0 3px #dd7578;--token-form-label-color:#0c0c0e;--token-form-legend-color:#0c0c0e;--token-form-helper-text-color:#656a76;--token-form-indicator-optional-color:#656a76;--token-form-error-color:#c00005;--token-form-error-icon-size:14px;--token-form-checkbox-size:16px;--token-form-checkbox-border-radius:3px;--token-form-checkbox-border-width:1px;--token-form-checkbox-background-image-size:12px;--token-form-checkbox-background-image-data-url:url("data:image/svg+xml,%3csvg viewBox='0 0 12 12' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M9.78033 3.21967C10.0732 3.51256 10.0732 3.98744 9.78033 4.28033L5.28033 8.78033C4.98744 9.07322 4.51256 9.07322 4.21967 8.78033L2.21967 6.78033C1.92678 6.48744 1.92678 6.01256 2.21967 5.71967C2.51256 5.42678 2.98744 5.42678 3.28033 5.71967L4.75 7.18934L8.71967 3.21967C9.01256 2.92678 9.48744 2.92678 9.78033 3.21967Z' fill='%23FFF'/%3e%3c/svg%3e");--token-form-checkbox-background-image-data-url-indeterminate:url("data:image/svg+xml,%3csvg viewBox='0 0 12 12' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='m2.03125,6a0.66146,0.75 0 0 1 0.66146,-0.75l6.61458,0a0.66146,0.75 0 0 1 0,1.5l-6.61458,0a0.66146,0.75 0 0 1 -0.66146,-0.75z' fill='%23FFF'/%3e%3c/svg%3e");--token-form-checkbox-background-image-data-url-disabled:url("data:image/svg+xml,%3csvg viewBox='0 0 12 12' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M9.78033 3.21967C10.0732 3.51256 10.0732 3.98744 9.78033 4.28033L5.28033 8.78033C4.98744 9.07322 4.51256 9.07322 4.21967 8.78033L2.21967 6.78033C1.92678 6.48744 1.92678 6.01256 2.21967 5.71967C2.51256 5.42678 2.98744 5.42678 3.28033 5.71967L4.75 7.18934L8.71967 3.21967C9.01256 2.92678 9.48744 2.92678 9.78033 3.21967Z' fill='%238C909C'/%3e%3c/svg%3e");--token-form-checkbox-background-image-data-url-indeterminate-disabled:url("data:image/svg+xml,%3csvg viewBox='0 0 12 12' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='m2.03125,6a0.66146,0.75 0 0 1 0.66146,-0.75l6.61458,0a0.66146,0.75 0 0 1 0,1.5l-6.61458,0a0.66146,0.75 0 0 1 -0.66146,-0.75z' fill='%238C909C'/%3e%3c/svg%3e");--token-form-control-base-foreground-value-color:#0c0c0e;--token-form-control-base-foreground-placeholder-color:#656a76;--token-form-control-base-surface-color-default:#ffffff;--token-form-control-base-surface-color-hover:#f1f2f3;--token-form-control-base-border-color-default:#8c909c;--token-form-control-base-border-color-hover:#656a76;--token-form-control-checked-foreground-color:#ffffff;--token-form-control-checked-surface-color-default:#1060ff;--token-form-control-checked-surface-color-hover:#0c56e9;--token-form-control-checked-border-color-default:#0c56e9;--token-form-control-checked-border-color-hover:#0046d1;--token-form-control-invalid-border-color-default:#c00005;--token-form-control-invalid-border-color-hover:#940004;--token-form-control-readonly-foreground-color:#3b3d45;--token-form-control-readonly-surface-color:#f1f2f3;--token-form-control-readonly-border-color:#656a761a;--token-form-control-disabled-foreground-color:#8c909c;--token-form-control-disabled-surface-color:#fafafa;--token-form-control-disabled-border-color:#656a7633;--token-form-control-padding:7px;--token-form-control-border-radius:5px;--token-form-control-border-width:1px;--token-form-radio-size:16px;--token-form-radio-border-width:1px;--token-form-radio-background-image-size:12px;--token-form-radio-background-image-data-url:url("data:image/svg+xml,%3csvg width='12' height='12' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='6' cy='6' r='2.5' fill='%23ffffff'/%3e%3c/svg%3e");--token-form-radio-background-image-data-url-disabled:url("data:image/svg+xml,%3csvg width='12' height='12' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='6' cy='6' r='2.5' fill='%238C909C'/%3e%3c/svg%3e");--token-form-radiocard-group-gap:16px;--token-form-radiocard-border-width:1px;--token-form-radiocard-border-radius:6px;--token-form-radiocard-content-padding:24px;--token-form-radiocard-control-padding:8px;--token-form-radiocard-transition-duration:0.2s;--token-form-select-background-image-size:16px;--token-form-select-background-image-position-right-x:7px;--token-form-select-background-image-position-top-y:9px;--token-form-select-background-image-data-url:url("data:image/svg+xml,%3Csvg viewBox='0 0 16 16' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M8.55 2.24a.75.75 0 0 0-1.1 0L4.2 5.74a.75.75 0 1 0 1.1 1.02L8 3.852l2.7 2.908a.75.75 0 1 0 1.1-1.02l-3.25-3.5Zm-1.1 11.52a.75.75 0 0 0 1.1 0l3.25-3.5a.75.75 0 1 0-1.1-1.02L8 12.148 5.3 9.24a.75.75 0 0 0-1.1 1.02l3.25 3.5Z' fill='%23656A76'/%3E%3C/svg%3E");--token-form-select-background-image-data-url-disabled:url("data:image/svg+xml,%3Csvg viewBox='0 0 16 16' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M8.55 2.24a.75.75 0 0 0-1.1 0L4.2 5.74a.75.75 0 1 0 1.1 1.02L8 3.852l2.7 2.908a.75.75 0 1 0 1.1-1.02l-3.25-3.5Zm-1.1 11.52a.75.75 0 0 0 1.1 0l3.25-3.5a.75.75 0 1 0-1.1-1.02L8 12.148 5.3 9.24a.75.75 0 0 0-1.1 1.02l3.25 3.5Z' fill='%238C909C'/%3E%3C/svg%3E");--token-form-text-input-background-image-size:16px;--token-form-text-input-background-image-position-x:7px;--token-form-text-input-background-image-data-url-date:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M11.5.75a.75.75 0 00-1.5 0V1H6V.75a.75.75 0 00-1.5 0V1H3.25A2.25 2.25 0 001 3.25v9.5A2.25 2.25 0 003.25 15h9.5A2.25 2.25 0 0015 12.75v-9.5A2.25 2.25 0 0012.75 1H11.5V.75zm-7 2.5V2.5H3.25a.75.75 0 00-.75.75V5h11V3.25a.75.75 0 00-.75-.75H11.5v.75a.75.75 0 01-1.5 0V2.5H6v.75a.75.75 0 01-1.5 0zm9 3.25h-11v6.25c0 .414.336.75.75.75h9.5a.75.75 0 00.75-.75V6.5z' fill-rule='evenodd' clip-rule='evenodd' fill='%233B3D45'/%3e%3c/svg%3e");--token-form-text-input-background-image-data-url-time:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' xmlns='http://www.w3.org/2000/svg'%3e%3cg fill='%233B3D45'%3e%3cpath d='M8.5 3.75a.75.75 0 00-1.5 0V8c0 .284.16.544.415.67l2.5 1.25a.75.75 0 10.67-1.34L8.5 7.535V3.75z'/%3e%3cpath d='M8 0a8 8 0 100 16A8 8 0 008 0zM1.5 8a6.5 6.5 0 1113 0 6.5 6.5 0 01-13 0z' fill-rule='evenodd' clip-rule='evenodd'/%3e%3c/g%3e%3c/svg%3e");--token-form-text-input-background-image-data-url-search:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' xmlns='http://www.w3.org/2000/svg'%3e%3cg fill='%23656A76'%3e%3cpath d='M7.25 2a5.25 5.25 0 103.144 9.455l2.326 2.325a.75.75 0 101.06-1.06l-2.325-2.326A5.25 5.25 0 007.25 2zM3.5 7.25a3.75 3.75 0 117.5 0 3.75 3.75 0 01-7.5 0z' fill-rule='evenodd' clip-rule='evenodd'/%3e%3c/g%3e%3c/svg%3e");--token-form-text-input-background-image-data-url-search-cancel:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.78 4.28a.75.75 0 00-1.06-1.06L8 6.94 4.28 3.22a.75.75 0 00-1.06 1.06L6.94 8l-3.72 3.72a.75.75 0 101.06 1.06L8 9.06l3.72 3.72a.75.75 0 101.06-1.06L9.06 8l3.72-3.72z'/%3e%3c/svg%3e");--token-form-text-input-background-image-data-url-search-loading:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' xmlns='http://www.w3.org/2000/svg' %3e%3cg fill='%23656A76' fill-rule='evenodd' clip-rule='evenodd'%3e%3canimateTransform attributeName='transform' type='rotate' dur='0.9s' from='0 8 8' to='360 8 8' repeatCount='indefinite'/%3e%3cpath d='M8 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM0 8a8 8 0 1116 0A8 8 0 010 8z' opacity='.2'/%3e%3cpath d='M7.25.75A.75.75 0 018 0a8 8 0 018 8 .75.75 0 01-1.5 0A6.5 6.5 0 008 1.5a.75.75 0 01-.75-.75z'/%3e%3c/g%3e%3c/svg%3e");--token-form-toggle-width:32px;--token-form-toggle-height:16px;--token-form-toggle-base-surface-color-default:#f1f2f3;--token-form-toggle-border-radius:3px;--token-form-toggle-border-width:1px;--token-form-toggle-background-image-size:12px;--token-form-toggle-background-image-position-x:2px;--token-form-toggle-background-image-data-url:url("data:image/svg+xml,%3csvg viewBox='0 0 12 12' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M9.78033 3.21967C10.0732 3.51256 10.0732 3.98744 9.78033 4.28033L5.28033 8.78033C4.98744 9.07322 4.51256 9.07322 4.21967 8.78033L2.21967 6.78033C1.92678 6.48744 1.92678 6.01256 2.21967 5.71967C2.51256 5.42678 2.98744 5.42678 3.28033 5.71967L4.75 7.18934L8.71967 3.21967C9.01256 2.92678 9.48744 2.92678 9.78033 3.21967Z' fill='%23FFF'/%3e%3c/svg%3e");--token-form-toggle-background-image-data-url-disabled:url("data:image/svg+xml,%3csvg viewBox='0 0 12 12' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M9.78033 3.21967C10.0732 3.51256 10.0732 3.98744 9.78033 4.28033L5.28033 8.78033C4.98744 9.07322 4.51256 9.07322 4.21967 8.78033L2.21967 6.78033C1.92678 6.48744 1.92678 6.01256 2.21967 5.71967C2.51256 5.42678 2.98744 5.42678 3.28033 5.71967L4.75 7.18934L8.71967 3.21967C9.01256 2.92678 9.48744 2.92678 9.78033 3.21967Z' fill='%238C909C'/%3e%3c/svg%3e");--token-form-toggle-transition-duration:0.2s;--token-form-toggle-transition-timing-function:cubic-bezier(0.68, -0.2, 0.265, 1.15);--token-form-toggle-thumb-size:16px;--token-pagination-nav-control-height:36px;--token-pagination-nav-control-padding-horizontal:12px;--token-pagination-nav-control-focus-inset:4px;--token-pagination-nav-control-icon-spacing:6px;--token-pagination-nav-indicator-height:2px;--token-pagination-nav-indicator-spacing:6px;--token-pagination-child-spacing-vertical:8px;--token-pagination-child-spacing-horizontal:20px;--token-side-nav-wrapper-border-width:1px;--token-side-nav-wrapper-border-color:#656a76;--token-side-nav-wrapper-padding-horizontal:16px;--token-side-nav-wrapper-padding-vertical:16px;--token-side-nav-wrapper-padding-horizontal-minimized:8px;--token-side-nav-wrapper-padding-vertical-minimized:22px;--token-side-nav-toggle-button-border-radius:5px;--token-side-nav-header-home-link-padding:4px;--token-side-nav-header-home-link-logo-size:48px;--token-side-nav-header-home-link-logo-size-minimized:32px;--token-side-nav-header-actions-spacing:8px;--token-side-nav-body-list-margin-vertical:24px;--token-side-nav-body-list-item-height:36px;--token-side-nav-body-list-item-padding-horizontal:8px;--token-side-nav-body-list-item-padding-vertical:4px;--token-side-nav-body-list-item-spacing-vertical:2px;--token-side-nav-body-list-item-content-spacing-horizontal:8px;--token-side-nav-body-list-item-border-radius:5px;--token-side-nav-color-foreground-primary:#dedfe3;--token-side-nav-color-foreground-strong:#fff;--token-side-nav-color-foreground-faint:#8c909c;--token-side-nav-color-surface-primary:#0c0c0e;--token-side-nav-color-surface-interactive-hover:#3b3d45;--token-side-nav-color-surface-interactive-active:#656a76;--token-tabs-tab-height:36px;--token-tabs-tab-padding-horizontal:12px;--token-tabs-tab-padding-vertical:0px;--token-tabs-tab-border-radius:5px;--token-tabs-tab-focus-inset:6px;--token-tabs-tab-gutter:6px;--token-tabs-indicator-height:3px;--token-tabs-indicator-transition-function:cubic-bezier(0.5, 1, 0.89, 1);--token-tabs-indicator-transition-duration:0.6s;--token-tabs-divider-height:1px;--token-tooltip-border-radius:5px;--token-tooltip-color-foreground-primary:var(--token-color-foreground-high-contrast);--token-tooltip-color-surface-primary:var(--token-color-palette-neutral-700);--token-tooltip-focus-offset:-2px;--token-tooltip-max-width:280px;--token-tooltip-padding-horizontal:12px;--token-tooltip-padding-vertical:8px;--token-tooltip-transition-function:cubic-bezier(0.54, 1.5, 0.38, 1.11);--token-typography-font-stack-display:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;--token-typography-font-stack-text:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;--token-typography-font-stack-code:ui-monospace,Menlo,Consolas,monospace;--token-typography-font-weight-regular:400;--token-typography-font-weight-medium:500;--token-typography-font-weight-semibold:600;--token-typography-font-weight-bold:700;--token-typography-display-500-font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;--token-typography-display-500-font-size:1.875rem;--token-typography-display-500-line-height:1.2666;--token-typography-display-400-font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;--token-typography-display-400-font-size:1.5rem;--token-typography-display-400-line-height:1.3333;--token-typography-display-300-font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;--token-typography-display-300-font-size:1.125rem;--token-typography-display-300-line-height:1.3333;--token-typography-display-300-letter-spacing:-0.5px;--token-typography-display-200-font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;--token-typography-display-200-font-size:1rem;--token-typography-display-200-line-height:1.5;--token-typography-display-200-letter-spacing:-0.5px;--token-typography-display-100-font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;--token-typography-display-100-font-size:0.8125rem;--token-typography-display-100-line-height:1.3846;--token-typography-body-300-font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;--token-typography-body-300-font-size:1rem;--token-typography-body-300-line-height:1.5;--token-typography-body-200-font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;--token-typography-body-200-font-size:0.875rem;--token-typography-body-200-line-height:1.4286;--token-typography-body-100-font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;--token-typography-body-100-font-size:0.8125rem;--token-typography-body-100-line-height:1.3846;--token-typography-code-100-font-family:ui-monospace,Menlo,Consolas,monospace;--token-typography-code-100-font-size:0.8125rem;--token-typography-code-100-line-height:1.23;--token-typography-code-200-font-family:ui-monospace,Menlo,Consolas,monospace;--token-typography-code-200-font-size:0.875rem;--token-typography-code-200-line-height:1.125;--token-typography-code-300-font-family:ui-monospace,Menlo,Consolas,monospace;--token-typography-code-300-font-size:1rem;--token-typography-code-300-line-height:1.25;--hds-app-desktop-breakpoint:1088px;--hds-app-sidenav-width-minimized:48px;--hds-app-sidenav-width-expanded:280px;--hds-app-sidenav-width-fixed:var(--hds-app-sidenav-width-expanded);--hds-app-sidenav-animation-duration:200ms;--hds-app-sidenav-animation-delay:var(--hds-app-sidenav-animation-duration);--hds-app-sidenav-animation-easing:cubic-bezier(0.65, 0, 0.35, 1);--decor-radius-000:0;--decor-radius-100:2px;--decor-radius-200:4px;--decor-radius-250:6px;--decor-radius-300:7px;--decor-radius-999:9999px;--decor-radius-full:100%;--decor-border-000:none;--decor-border-100:1px solid;--decor-border-200:2px solid;--decor-border-300:3px solid;--decor-border-400:4px solid;--icon-alert-triangle-16:url('data:image/svg+xml;charset=UTF-8,');--icon-alert-triangle-24:url('data:image/svg+xml;charset=UTF-8,');--icon-arrow-left-16:url('data:image/svg+xml;charset=UTF-8,');--icon-arrow-left-24:url('data:image/svg+xml;charset=UTF-8,');--icon-arrow-right-16:url('data:image/svg+xml;charset=UTF-8,');--icon-arrow-right-24:url('data:image/svg+xml;charset=UTF-8,');--icon-x-square-fill-16:url('data:image/svg+xml;charset=UTF-8,');--icon-x-square-fill-24:url('data:image/svg+xml;charset=UTF-8,');--icon-chevron-down-16:url('data:image/svg+xml;charset=UTF-8,');--icon-chevron-down-24:url('data:image/svg+xml;charset=UTF-8,');--icon-clipboard-copy-16:url('data:image/svg+xml;charset=UTF-8,');--icon-clipboard-copy-24:url('data:image/svg+xml;charset=UTF-8,');--icon-docs-16:url('data:image/svg+xml;charset=UTF-8,');--icon-docs-24:url('data:image/svg+xml;charset=UTF-8,');--icon-external-link-16:url('data:image/svg+xml;charset=UTF-8,');--icon-external-link-24:url('data:image/svg+xml;charset=UTF-8,');--icon-file-16:url('data:image/svg+xml;charset=UTF-8,');--icon-file-24:url('data:image/svg+xml;charset=UTF-8,');--icon-folder-16:url('data:image/svg+xml;charset=UTF-8,');--icon-folder-24:url('data:image/svg+xml;charset=UTF-8,');--icon-activity-16:url('data:image/svg+xml;charset=UTF-8,');--icon-activity-24:url('data:image/svg+xml;charset=UTF-8,');--icon-help-16:url('data:image/svg+xml;charset=UTF-8,');--icon-help-24:url('data:image/svg+xml;charset=UTF-8,');--icon-learn-16:url('data:image/svg+xml;charset=UTF-8,');--icon-learn-24:url('data:image/svg+xml;charset=UTF-8,');--icon-github-color-16:url('data:image/svg+xml;charset=UTF-8,');--icon-github-color-24:url('data:image/svg+xml;charset=UTF-8,');--icon-google-color-16:url('data:image/svg+xml;charset=UTF-8,');--icon-google-color-24:url('data:image/svg+xml;charset=UTF-8,');--icon-kubernetes-color-16:url('data:image/svg+xml;charset=UTF-8,');--icon-kubernetes-color-24:url('data:image/svg+xml;charset=UTF-8,');--icon-menu-16:url('data:image/svg+xml;charset=UTF-8,');--icon-menu-24:url('data:image/svg+xml;charset=UTF-8,');--icon-minus-square-16:url('data:image/svg+xml;charset=UTF-8,');--icon-minus-square-24:url('data:image/svg+xml;charset=UTF-8,');--icon-more-horizontal-16:url('data:image/svg+xml;charset=UTF-8,');--icon-more-horizontal-24:url('data:image/svg+xml;charset=UTF-8,');--icon-globe-16:url('data:image/svg+xml;charset=UTF-8,');--icon-globe-24:url('data:image/svg+xml;charset=UTF-8,');--icon-search-16:url('data:image/svg+xml;charset=UTF-8,');--icon-search-24:url('data:image/svg+xml;charset=UTF-8,');--icon-star-16:url('data:image/svg+xml;charset=UTF-8,');--icon-star-24:url('data:image/svg+xml;charset=UTF-8,');--icon-org-16:url('data:image/svg+xml;charset=UTF-8,');--icon-org-24:url('data:image/svg+xml;charset=UTF-8,');--icon-user-16:url('data:image/svg+xml;charset=UTF-8,');--icon-user-24:url('data:image/svg+xml;charset=UTF-8,');--icon-users-16:url('data:image/svg+xml;charset=UTF-8,');--icon-users-24:url('data:image/svg+xml;charset=UTF-8,');--icon-alert-circle-16:url('data:image/svg+xml;charset=UTF-8,');--icon-alert-circle-24:url('data:image/svg+xml;charset=UTF-8,');--icon-check-16:url('data:image/svg+xml;charset=UTF-8,');--icon-check-24:url('data:image/svg+xml;charset=UTF-8,');--icon-check-circle-16:url('data:image/svg+xml;charset=UTF-8,');--icon-check-circle-24:url('data:image/svg+xml;charset=UTF-8,');--icon-check-circle-fill-16:url('data:image/svg+xml;charset=UTF-8,');--icon-check-circle-fill-24:url('data:image/svg+xml;charset=UTF-8,');--icon-chevron-left-16:url('data:image/svg+xml;charset=UTF-8,');--icon-chevron-left-24:url('data:image/svg+xml;charset=UTF-8,');--icon-chevron-right-16:url('data:image/svg+xml;charset=UTF-8,');--icon-chevron-right-24:url('data:image/svg+xml;charset=UTF-8,');--icon-chevron-up-16:url('data:image/svg+xml;charset=UTF-8,');--icon-chevron-up-24:url('data:image/svg+xml;charset=UTF-8,');--icon-delay-16:url('data:image/svg+xml;charset=UTF-8,');--icon-delay-24:url('data:image/svg+xml;charset=UTF-8,');--icon-docs-link-16:url('data:image/svg+xml;charset=UTF-8,');--icon-docs-link-24:url('data:image/svg+xml;charset=UTF-8,');--icon-eye-16:url('data:image/svg+xml;charset=UTF-8,');--icon-eye-24:url('data:image/svg+xml;charset=UTF-8,');--icon-eye-off-16:url('data:image/svg+xml;charset=UTF-8,');--icon-eye-off-24:url('data:image/svg+xml;charset=UTF-8,');--icon-file-text-16:url('data:image/svg+xml;charset=UTF-8,');--icon-file-text-24:url('data:image/svg+xml;charset=UTF-8,');--icon-gateway-16:url('data:image/svg+xml;charset=UTF-8,');--icon-gateway-24:url('data:image/svg+xml;charset=UTF-8,');--icon-git-commit-16:url('data:image/svg+xml;charset=UTF-8,');--icon-git-commit-24:url('data:image/svg+xml;charset=UTF-8,');--icon-hexagon-16:url('data:image/svg+xml;charset=UTF-8,');--icon-hexagon-24:url('data:image/svg+xml;charset=UTF-8,');--icon-history-16:url('data:image/svg+xml;charset=UTF-8,');--icon-history-24:url('data:image/svg+xml;charset=UTF-8,');--icon-info-16:url('data:image/svg+xml;charset=UTF-8,');--icon-info-24:url('data:image/svg+xml;charset=UTF-8,');--icon-layers-16:url('data:image/svg+xml;charset=UTF-8,');--icon-layers-24:url('data:image/svg+xml;charset=UTF-8,');--icon-loading-16:url('data:image/svg+xml;charset=UTF-8,');--icon-loading-24:url('data:image/svg+xml;charset=UTF-8,');--icon-network-alt-16:url('data:image/svg+xml;charset=UTF-8,');--icon-network-alt-24:url('data:image/svg+xml;charset=UTF-8,');--icon-path-16:url('data:image/svg+xml;charset=UTF-8,');--icon-path-24:url('data:image/svg+xml;charset=UTF-8,');--icon-running-16:url('data:image/svg+xml;charset=UTF-8,');--icon-running-24:url('data:image/svg+xml;charset=UTF-8,');--icon-skip-16:url('data:image/svg+xml;charset=UTF-8,');--icon-skip-24:url('data:image/svg+xml;charset=UTF-8,');--icon-socket-16:url('data:image/svg+xml;charset=UTF-8,');--icon-socket-24:url('data:image/svg+xml;charset=UTF-8,');--icon-star-circle-16:url('data:image/svg+xml;charset=UTF-8,');--icon-star-circle-24:url('data:image/svg+xml;charset=UTF-8,');--icon-star-fill-16:url('data:image/svg+xml;charset=UTF-8,');--icon-star-fill-24:url('data:image/svg+xml;charset=UTF-8,');--icon-tag-16:url('data:image/svg+xml;charset=UTF-8,');--icon-tag-24:url('data:image/svg+xml;charset=UTF-8,');--icon-x-16:url('data:image/svg+xml;charset=UTF-8,');--icon-x-24:url('data:image/svg+xml;charset=UTF-8,');--icon-x-circle-16:url('data:image/svg+xml;charset=UTF-8,');--icon-x-circle-24:url('data:image/svg+xml;charset=UTF-8,');--icon-x-square-16:url('data:image/svg+xml;charset=UTF-8,');--icon-x-square-24:url('data:image/svg+xml;charset=UTF-8,');--icon-cloud-cross-16:url('data:image/svg+xml;charset=UTF-8,');--icon-loading-motion-16:url('data:image/svg+xml;charset=UTF-8,');--icon-auth0-color-16:url('data:image/svg+xml;charset=UTF-8,');--icon-auth0-color-24:url('data:image/svg+xml;charset=UTF-8,');--icon-logo-ember-circle-color-16:url('data:image/svg+xml;charset=UTF-8,');--icon-logo-glimmer-color-16:url('data:image/svg+xml;charset=UTF-8,');--icon-logo-jwt-color-16:url('data:image/svg+xml;charset=UTF-8,');--icon-microsoft-color-16:url('data:image/svg+xml;charset=UTF-8,');--icon-microsoft-color-24:url('data:image/svg+xml;charset=UTF-8,');--icon-logo-oidc-color-16:url('data:image/svg+xml;charset=UTF-8,');--icon-okta-color-16:url('data:image/svg+xml;charset=UTF-8,');--icon-okta-color-24:url('data:image/svg+xml;charset=UTF-8,');--icon-mesh-16:url('data:image/svg+xml;charset=UTF-8,');--icon-mesh-24:url('data:image/svg+xml;charset=UTF-8,');--icon-port-16:url('data:image/svg+xml;charset=UTF-8,');--icon-protocol-16:url('data:image/svg+xml;charset=UTF-8,');--icon-redirect-16:url('data:image/svg+xml;charset=UTF-8,');--icon-redirect-24:url('data:image/svg+xml;charset=UTF-8,');--icon-search-color-16:url('data:image/svg+xml;charset=UTF-8,');--icon-sort-desc-16:url('data:image/svg+xml;charset=UTF-8,');--icon-sort-desc-24:url('data:image/svg+xml;charset=UTF-8,');--icon-union-16:url('data:image/svg+xml;charset=UTF-8,');--chrome-width:280px;--chrome-height:64px;--typo-action:var(--token-color-foreground-action);--decor-error:var(--token-color-foreground-critical);--typo-contrast:var(--token-color-hashicorp-brand);--syntax-light-grey:#dde3e7;--syntax-light-gray:#a4a4a4;--syntax-light-grey-blue:#6c7b81;--syntax-dark-grey:#788290;--syntax-faded-gray:#eaeaea;--syntax-atlas:#127eff;--syntax-vagrant:#2f88f7;--syntax-consul:#69499a;--syntax-terraform:#822ff7;--syntax-serf:#dd4e58;--syntax-packer:#1ddba3;--syntax-gray:lighten(#000, 89%);--syntax-red:#ff3d3d;--syntax-green:#39b54a;--syntax-dark-gray:#535f73;--syntax-gutter-grey:#2a2f36;--syntax-yellow:var(--token-color-vault-brand);--horizontal-kv-list-separator-width:18px;--horizontal-kv-list-key-separator:":";--horizontal-kv-list-key-wrapper-start:"(";--horizontal-kv-list-key-wrapper-end:")";--csv-list-separator:",";--icon-loading:icon-loading-motion;--color-info:var(--token-color-foreground-action);--color-alert:var(--token-color-palette-amber-200)}.hds-border-primary{border:1px solid var(--token-color-border-primary)}.hds-border-faint{border:1px solid var(--token-color-border-faint)}.hds-border-strong{border:1px solid var(--token-color-border-strong)}.hds-border-action{border:1px solid var(--token-color-border-action)}.hds-border-highlight{border:1px solid var(--token-color-border-highlight)}.hds-border-success{border:1px solid var(--token-color-border-success)}.hds-border-warning{border:1px solid var(--token-color-border-warning)}.hds-border-critical{border:1px solid var(--token-color-border-critical)}.hds-foreground-strong{color:var(--token-color-foreground-strong)}.hds-foreground-primary{color:var(--token-color-foreground-primary)}.hds-foreground-faint{color:var(--token-color-foreground-faint)}.hds-foreground-high-contrast{color:var(--token-color-foreground-high-contrast)}.hds-foreground-disabled{color:var(--token-color-foreground-disabled)}.hds-foreground-action{color:var(--token-color-foreground-action)}.hds-foreground-action-hover{color:var(--token-color-foreground-action-hover)}.hds-foreground-action-active{color:var(--token-color-foreground-action-active)}.hds-foreground-highlight{color:var(--token-color-foreground-highlight)}.hds-foreground-highlight-on-surface{color:var(--token-color-foreground-highlight-on-surface)}.hds-foreground-highlight-high-contrast{color:var(--token-color-foreground-highlight-high-contrast)}.hds-foreground-success{color:var(--token-color-foreground-success)}.hds-foreground-success-on-surface{color:var(--token-color-foreground-success-on-surface)}.hds-foreground-success-high-contrast{color:var(--token-color-foreground-success-high-contrast)}.hds-foreground-warning{color:var(--token-color-foreground-warning)}.hds-foreground-warning-on-surface{color:var(--token-color-foreground-warning-on-surface)}.hds-foreground-warning-high-contrast{color:var(--token-color-foreground-warning-high-contrast)}.hds-foreground-critical{color:var(--token-color-foreground-critical)}.hds-foreground-critical-on-surface{color:var(--token-color-foreground-critical-on-surface)}.hds-foreground-critical-high-contrast{color:var(--token-color-foreground-critical-high-contrast)}.hds-page-primary{background-color:var(--token-color-page-primary)}.hds-page-faint{background-color:var(--token-color-page-faint)}.hds-surface-primary{background-color:var(--token-color-surface-primary)}.hds-surface-faint{background-color:var(--token-color-surface-faint)}.hds-badge--color-neutral.hds-badge--type-filled,.hds-surface-strong{background-color:var(--token-color-surface-strong)}.hds-surface-interactive{background-color:var(--token-color-surface-interactive)}.hds-surface-interactive-hover{background-color:var(--token-color-surface-interactive-hover)}.hds-surface-interactive-active{background-color:var(--token-color-surface-interactive-active)}.hds-surface-interactive-disabled{background-color:var(--token-color-surface-interactive-disabled)}.hds-surface-action{background-color:var(--token-color-surface-action)}.hds-surface-highlight{background-color:var(--token-color-surface-highlight)}.hds-surface-success{background-color:var(--token-color-surface-success)}.hds-surface-warning{background-color:var(--token-color-surface-warning)}.hds-surface-critical{background-color:var(--token-color-surface-critical)}.hds-elevation-low{box-shadow:var(--token-elevation-low-box-shadow)}.hds-elevation-mid{box-shadow:var(--token-elevation-mid-box-shadow)}.hds-elevation-high{box-shadow:var(--token-elevation-high-box-shadow)}.hds-elevation-higher{box-shadow:var(--token-elevation-higher-box-shadow)}.consul-server-list a:hover div,.hds-elevation-overlay,.modal-dialog [role=document]{box-shadow:var(--token-elevation-overlay-box-shadow)}.hds-surface-inset{box-shadow:var(--token-surface-inset-box-shadow)}.hds-surface-base{box-shadow:var(--token-surface-base-box-shadow)}.hds-surface-low{box-shadow:var(--token-surface-low-box-shadow)}.hds-accordion-item.hds-accordion-item--does-not-contain-interactive,.hds-surface-mid{box-shadow:var(--token-surface-mid-box-shadow)}.hds-surface-high{box-shadow:var(--token-surface-high-box-shadow)}.hds-surface-higher{box-shadow:var(--token-surface-higher-box-shadow)}.hds-surface-overlay{box-shadow:var(--token-surface-overlay-box-shadow)}.hds-focus-ring-action-box-shadow{box-shadow:var(--token-focus-ring-action-box-shadow)}.hds-focus-ring-critical-box-shadow{box-shadow:var(--token-focus-ring-critical-box-shadow)}.hds-font-family-sans-display{font-family:var(--token-typography-font-stack-display)}.hds-accordion-item__button.hds-accordion-item__button--parent-contains-interactive,.hds-badge-count,.hds-badge__text,.hds-breadcrumb__text,.hds-button,.hds-font-family-sans-text{font-family:var(--token-typography-font-stack-text)}.hds-font-family-mono-code{font-family:var(--token-typography-font-stack-code)}#metrics-container .sparkline-wrapper .tooltip,.app-view h1 span.kind-proxy,.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=password],.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=text],.app-view>div form:not(.filter-bar) [role=radiogroup] label textarea,.app-view>div form:not(.filter-bar) [role=radiogroup] label>em,.app-view>div form:not(.filter-bar) [role=radiogroup] label>span,.app-view>div form:not(.filter-bar) [role=radiogroup] label>strong,.auth-form em,.consul-auth-method-type,.consul-auth-method-view section,.consul-external-source,.consul-health-check-list .health-check-output dd em,.consul-health-check-list .health-check-output dl>dd,.consul-intention-fieldsets .permissions>button,.consul-intention-list td strong,.consul-intention-list td.destination em,.consul-intention-list td.permissions,.consul-intention-list td.source em,.consul-intention-permission-header-list>ul>li dd,.consul-intention-permission-list strong,.consul-intention-permission-list>ul>li dd,.consul-intention-search-bar li button span,.consul-kind,.consul-peer-search-bar li button span,.consul-server-card .health-status+dd,.consul-source,.consul-transparent-proxy,.disclosure-menu [aria-expanded]~*>div,.discovery-chain .resolvers>header>*,.discovery-chain .route-card header dt,.discovery-chain .route-card>header ul li,.discovery-chain .routes>header>*,.discovery-chain .splitters>header>*,.empty-state header :nth-child(2),.empty-state p,.empty-state>ul>li>*,.empty-state>ul>li>::before,.empty-state>ul>li>label>button,.empty-state>ul>li>label>button::before,.has-error>strong,.has-error>strong::before,.hds-font-weight-regular,.informed-action p,.leader,.menu-panel>div,.modal-dialog [role=document] .type-password [type=password],.modal-dialog [role=document] .type-password [type=text],.modal-dialog [role=document] .type-password textarea,.modal-dialog [role=document] .type-password>em,.modal-dialog [role=document] .type-password>span,.modal-dialog [role=document] .type-password>strong,.modal-dialog [role=document] .type-select [type=password],.modal-dialog [role=document] .type-select [type=text],.modal-dialog [role=document] .type-select textarea,.modal-dialog [role=document] .type-select>em,.modal-dialog [role=document] .type-select>span,.modal-dialog [role=document] .type-select>strong,.modal-dialog [role=document] .type-text [type=password],.modal-dialog [role=document] .type-text [type=text],.modal-dialog [role=document] .type-text textarea,.modal-dialog [role=document] .type-text>em,.modal-dialog [role=document] .type-text>span,.modal-dialog [role=document] .type-text>strong,.modal-dialog [role=document] [role=radiogroup] label [type=password],.modal-dialog [role=document] [role=radiogroup] label [type=text],.modal-dialog [role=document] [role=radiogroup] label textarea,.modal-dialog [role=document] [role=radiogroup] label>em,.modal-dialog [role=document] [role=radiogroup] label>span,.modal-dialog [role=document] [role=radiogroup] label>strong,.modal-dialog [role=document] form button+em,.modal-dialog [role=document] label a[rel*=help],.modal-dialog [role=document] p,.modal-dialog [role=document] table td,.modal-dialog [role=document] table td p,.modal-dialog [role=document] table th em,.more-popover-menu>[type=checkbox]+label+div>div,.oidc-select button.reset,.oidc-select label [type=password],.oidc-select label [type=text],.oidc-select label textarea,.oidc-select label>em,.oidc-select label>span,.oidc-select label>strong,.popover-menu>[type=checkbox]+label+div>div,.search-bar-status li:not(.remove-all),.tippy-box[data-theme~=tooltip] .tippy-content,.topology-metrics-source-type,.topology-metrics-status-error,.topology-metrics-status-loader,.type-toggle [type=password],.type-toggle [type=text],.type-toggle textarea,.type-toggle>em,.type-toggle>span,.type-toggle>strong,body,html[data-route^="dc.acls.index"] main td strong,main .type-password [type=password],main .type-password [type=text],main .type-password textarea,main .type-password>em,main .type-password>span,main .type-password>strong,main .type-select [type=password],main .type-select [type=text],main .type-select textarea,main .type-select>em,main .type-select>span,main .type-select>strong,main .type-text [type=password],main .type-text [type=text],main .type-text textarea,main .type-text>em,main .type-text>span,main .type-text>strong,main form button+em,main label a[rel*=help],main p,main table td,main table td p,main table th em,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl,section[data-route="dc.show.serverstatus"] .server-failure-tolerance dt,section[data-route="dc.show.serverstatus"] .server-failure-tolerance header em,section[data-route="dc.show.license"] .validity dl,span.label,span.policy-node-identity,span.policy-service-identity,table.has-actions tr>.actions>[type=checkbox]+label+div>div,table.with-details tr>.actions>[type=checkbox]+label+div>div{font-weight:400}.app-view h1 em,.consul-exposed-path-list>ul>li .copy-button button,.consul-exposed-path-list>ul>li>.header,.consul-lock-session-list ul>li:not(:first-child) .copy-button button,.consul-lock-session-list ul>li:not(:first-child)>.header,.consul-peer-search-bar .value-active span,.consul-peer-search-bar .value-deleting span,.consul-peer-search-bar .value-establishing span,.consul-peer-search-bar .value-failing span,.consul-peer-search-bar .value-pending span,.consul-peer-search-bar .value-terminated span,.consul-upstream-instance-list li .copy-button button,.consul-upstream-instance-list li>.header,.disclosure-menu [aria-expanded]~* [role=separator],.disclosure-menu [aria-expanded]~*>ul>[role=treeitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=menuitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=option],.hds-font-weight-medium,.informed-action>ul>li>*,.list-collection>ul>li:not(:first-child) .copy-button button,.list-collection>ul>li:not(:first-child)>.header,.menu-panel [role=separator],.menu-panel>ul>[role=treeitem],.menu-panel>ul>li>[role=menuitem],.menu-panel>ul>li>[role=option],.more-popover-menu>[type=checkbox]+label+div [role=separator],.more-popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=option],.peerings-badge .peerings-badge__text,.popover-menu>[type=checkbox]+label+div [role=separator],.popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=option],.tab-nav,main header nav:first-child ol li>*,table.has-actions tr>.actions>[type=checkbox]+label+div [role=separator],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=option],table.with-details tr>.actions>[type=checkbox]+label+div [role=separator],table.with-details tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]{font-weight:500}#downstream-container .topology-metrics-card p,#metrics-container .sparkline-wrapper .tooltip .sparkline-time,#metrics-container div:first-child,#upstream-container .topology-metrics-card p,.app-view>div form:not(.filter-bar) [role=radiogroup] label>span,.code-editor .toolbar-container .toolbar .title,.consul-auth-method-binding-list h2,.consul-auth-method-nspace-list thead td,.consul-auth-method-view section h2,.consul-auth-method-view section table thead td,.consul-bucket-list .service+dd,.consul-health-check-list .health-check-output dt,.consul-health-check-list .health-check-output header>*,.consul-intention-action-warn-modal button.dangerous,.consul-intention-list td.destination,.consul-intention-list td.source,.consul-intention-permission-form h2,.consul-intention-view h2,.consul-peer-form-generate li::after,.consul-server-card .name+dd,.copy-button button,.definition-table dt,.empty-state header :first-child,.hds-font-weight-semibold,.informed-action header,.modal-dialog [role=document] .type-password>span,.modal-dialog [role=document] .type-select>span,.modal-dialog [role=document] .type-text>span,.modal-dialog [role=document] [role=radiogroup] label>span,.modal-dialog [role=document] form h2,.modal-dialog [role=document] table caption,.modal-dialog [role=document] table td:first-child,.modal-dialog [role=document] table td:first-child p,.modal-dialog [role=document] table th,.modal-dialog [role=document]>header>:not(button),.modal-dialog-body h2,.oidc-select label>span,.popover-select label>*,.radio-card header,.sparkline-key h3,.topology-notices button,.type-sort.popover-select label>*,.type-toggle label span,.type-toggle>span,.warning.modal-dialog header>:not(label),fieldset>header,html[data-route^="dc.services.instance.metadata"] .tab-section section h2,html[data-route^="dc.kv.edit"] h2,main .type-password>span,main .type-select>span,main .type-text>span,main form h2,main table caption,main table td:first-child,main table td:first-child p,main table th,section[data-route="dc.show.serverstatus"] .redundancy-zones h3,section[data-route="dc.show.serverstatus"] .server-failure-tolerance dd,section[data-route="dc.show.serverstatus"] h2,section[data-route="dc.show.serverstatus"] h3,section[data-route="dc.show.license"] aside header>:first-child,section[data-route="dc.show.license"] h2,span.label,strong{font-weight:600}.discovery-chain .route-card header:not(.short) dd,.discovery-chain .route-card section dt,.discovery-chain .splitter-card>header,.hds-font-weight-bold,h1{font-weight:700}.hds-typography-display-500,h1{font-family:var(--token-typography-display-500-font-family);font-size:var(--token-typography-display-500-font-size);line-height:var(--token-typography-display-500-line-height);margin:0;padding:0}.consul-auth-method-binding-list h2,.consul-auth-method-view section h2,.consul-intention-permission-form h2,.consul-intention-view h2,.empty-state header :first-child,.hds-typography-display-400,.modal-dialog [role=document] form h2,.modal-dialog [role=document]>header>:not(button),.modal-dialog-body h2,html[data-route^="dc.kv.edit"] h2,main form h2,section[data-route="dc.show.license"] h2{font-family:var(--token-typography-display-400-font-family);font-size:var(--token-typography-display-400-font-size);line-height:var(--token-typography-display-400-line-height);margin:0;padding:0}#downstream-container .topology-metrics-card p,#upstream-container .topology-metrics-card p,.consul-exposed-path-list>ul>li>.header,.consul-health-check-list .health-check-output header>*,.consul-lock-session-list ul>li:not(:first-child)>.header,.consul-upstream-instance-list li>.header,.hds-typography-display-300,.list-collection>ul>li:not(:first-child)>.header,.sparkline-key h3,.warning.modal-dialog header>:not(label),html[data-route^="dc.services.instance.metadata"] .tab-section section h2,section[data-route="dc.show.serverstatus"] .redundancy-zones h3,section[data-route="dc.show.serverstatus"] .server-failure-tolerance dd,section[data-route="dc.show.serverstatus"] h2,section[data-route="dc.show.serverstatus"] h3,section[data-route="dc.show.license"] aside header>:first-child{font-family:var(--token-typography-display-300-font-family);font-size:var(--token-typography-display-300-font-size);line-height:var(--token-typography-display-300-line-height);margin:0;padding:0}.consul-server-card .name+dd,.hds-side-nav .ember-a11y-refocus-skip-link,.hds-typography-display-200{font-size:var(--token-typography-display-200-font-size);line-height:var(--token-typography-display-200-line-height)}.consul-server-card .name+dd,.hds-typography-display-200{font-family:var(--token-typography-display-200-font-family);margin:0;padding:0}.app-view>div form:not(.filter-bar) [role=radiogroup] label>span,.consul-intention-list td.destination,.consul-intention-list td.source,.definition-table dt,.hds-typography-display-100,.informed-action header,.modal-dialog [role=document] .type-password>span,.modal-dialog [role=document] .type-select>span,.modal-dialog [role=document] .type-text>span,.modal-dialog [role=document] [role=radiogroup] label>span,.modal-dialog [role=document] table caption,.modal-dialog [role=document] table th,.oidc-select label>span,.radio-card header,.type-toggle>span,fieldset>header,main .type-password>span,main .type-select>span,main .type-text>span,main table caption,main table th{font-family:var(--token-typography-display-100-font-family);font-size:var(--token-typography-display-100-font-size);line-height:var(--token-typography-display-100-line-height);margin:0;padding:0}#metrics-container div:first-child,.hds-typography-body-300,section[data-route="dc.show.license"] .validity dl{font-family:var(--token-typography-body-300-font-family);font-size:var(--token-typography-body-300-font-size);line-height:var(--token-typography-body-300-line-height);margin:0;padding:0}#metrics-container .sparkline-wrapper .tooltip,#metrics-container .sparkline-wrapper .tooltip .sparkline-time,.app-view h1 em,.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=password],.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=text],.app-view>div form:not(.filter-bar) [role=radiogroup] label textarea,.code-editor .toolbar-container .toolbar .title,.consul-auth-method-nspace-list thead td,.consul-auth-method-view section,.consul-auth-method-view section table thead td,.consul-external-source,.consul-health-check-list .health-check-output dl>dd,.consul-health-check-list .health-check-output dt,.consul-kind,.consul-peer-form-generate li::after,.consul-source,.disclosure-menu [aria-expanded]~*>ul>[role=treeitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=menuitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=option],.empty-state>ul>li>::before,.empty-state>ul>li>label>button::before,.has-error>strong::before,.hds-typography-body-200,.informed-action>ul>li>*,.menu-panel>ul>[role=treeitem],.menu-panel>ul>li>[role=menuitem],.menu-panel>ul>li>[role=option],.modal-dialog [role=document] .type-password [type=password],.modal-dialog [role=document] .type-password [type=text],.modal-dialog [role=document] .type-password textarea,.modal-dialog [role=document] .type-select [type=password],.modal-dialog [role=document] .type-select [type=text],.modal-dialog [role=document] .type-select textarea,.modal-dialog [role=document] .type-text [type=password],.modal-dialog [role=document] .type-text [type=text],.modal-dialog [role=document] .type-text textarea,.modal-dialog [role=document] [role=radiogroup] label [type=password],.modal-dialog [role=document] [role=radiogroup] label [type=text],.modal-dialog [role=document] [role=radiogroup] label textarea,.modal-dialog [role=document] table td,.modal-dialog [role=document] table td p,.modal-dialog [role=document] table td:first-child,.modal-dialog [role=document] table td:first-child p,.more-popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=option],.oidc-select label [type=password],.oidc-select label [type=text],.oidc-select label textarea,.popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=option],.tab-nav,.topology-metrics-status-error,.topology-metrics-status-loader,.type-toggle [type=password],.type-toggle [type=text],.type-toggle label span,.type-toggle textarea,body,main .type-password [type=password],main .type-password [type=text],main .type-password textarea,main .type-select [type=password],main .type-select [type=text],main .type-select textarea,main .type-text [type=password],main .type-text [type=text],main .type-text textarea,main header nav:first-child ol li>*,main table td,main table td p,main table td:first-child,main table td:first-child p,strong,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=option],table.with-details tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]{font-family:var(--token-typography-body-200-font-family);font-size:var(--token-typography-body-200-font-size);line-height:var(--token-typography-body-200-line-height);margin:0;padding:0}.app-view h1 span.kind-proxy,.app-view>div form:not(.filter-bar) [role=radiogroup] label>em,.app-view>div form:not(.filter-bar) [role=radiogroup] label>span,.auth-form em,.consul-exposed-path-list>ul>li .copy-button button,.consul-intention-action-warn-modal button.dangerous,.consul-intention-fieldsets .permissions>button,.consul-intention-list td.permissions,.consul-intention-permission-header-list>ul>li dd,.consul-intention-permission-list>ul>li dd,.consul-lock-session-list ul>li:not(:first-child) .copy-button button,.consul-server-card .health-status+dd,.consul-upstream-instance-list li .copy-button button,.copy-button button,.disclosure-menu [aria-expanded]~* [role=separator],.disclosure-menu [aria-expanded]~*>div,.discovery-chain .resolvers>header>*,.discovery-chain .routes>header>*,.discovery-chain .splitters>header>*,.empty-state header :nth-child(2),.empty-state p,.empty-state>ul>li>*,.empty-state>ul>li>label>button,.has-error>strong,.hds-typography-body-100,.informed-action p,.list-collection>ul>li:not(:first-child) .copy-button button,.menu-panel [role=separator],.menu-panel>div,.modal-dialog [role=document] .type-password>em,.modal-dialog [role=document] .type-password>span,.modal-dialog [role=document] .type-select>em,.modal-dialog [role=document] .type-select>span,.modal-dialog [role=document] .type-text>em,.modal-dialog [role=document] .type-text>span,.modal-dialog [role=document] [role=radiogroup] label>em,.modal-dialog [role=document] [role=radiogroup] label>span,.modal-dialog [role=document] form button+em,.modal-dialog [role=document] p,.more-popover-menu>[type=checkbox]+label+div [role=separator],.more-popover-menu>[type=checkbox]+label+div>div,.oidc-select button.reset,.oidc-select label>em,.oidc-select label>span,.peerings-badge .peerings-badge__text,.popover-menu>[type=checkbox]+label+div [role=separator],.popover-menu>[type=checkbox]+label+div>div,.popover-select label>*,.tippy-box[data-theme~=tooltip] .tippy-content,.topology-notices button,.type-sort.popover-select label>*,.type-toggle>em,.type-toggle>span,main .type-password>em,main .type-password>span,main .type-select>em,main .type-select>span,main .type-text>em,main .type-text>span,main form button+em,main p,section[data-route="dc.show.serverstatus"] .server-failure-tolerance dt,section[data-route="dc.show.serverstatus"] .server-failure-tolerance header em,span.label,table.has-actions tr>.actions>[type=checkbox]+label+div [role=separator],table.has-actions tr>.actions>[type=checkbox]+label+div>div,table.with-details tr>.actions>[type=checkbox]+label+div [role=separator],table.with-details tr>.actions>[type=checkbox]+label+div>div{font-family:var(--token-typography-body-100-font-family);font-size:var(--token-typography-body-100-font-size);line-height:var(--token-typography-body-100-line-height);margin:0;padding:0}.hds-typography-code-100{font-family:var(--token-typography-code-100-font-family);font-size:var(--token-typography-code-100-font-size);line-height:var(--token-typography-code-100-line-height);margin:0;padding:0}.hds-typography-code-200{font-family:var(--token-typography-code-200-font-family);font-size:var(--token-typography-code-200-font-size);line-height:var(--token-typography-code-200-line-height);margin:0;padding:0}.hds-typography-code-300{font-family:var(--token-typography-code-300-font-family);font-size:var(--token-typography-code-300-font-size);line-height:var(--token-typography-code-300-line-height);margin:0;padding:0}.hds-accordion{display:flex;gap:12px}.hds-accordion-item{background:var(--token-color-surface-primary);border-radius:6px}.hds-accordion-item.hds-accordion-item--does-not-contain-interactive.mock-hover,.hds-accordion-item.hds-accordion-item--does-not-contain-interactive:hover{box-shadow:var(--token-surface-high-box-shadow)}.hds-accordion-item.hds-accordion-item--contains-interactive{box-shadow:var(--token-surface-base-box-shadow)}.hds-accordion-item__toggle{position:relative;display:flex;gap:12px;align-items:center;padding:16px 16px 16px 12px}.hds-accordion-item__button{padding:0}.hds-accordion-item__button:hover{cursor:pointer}.hds-accordion-item__button.hds-accordion-item__button--parent-does-not-contain-interactive{outline-style:solid;outline-color:transparent;isolation:isolate;position:static;margin:-1px 0;color:var(--token-color-foreground-primary);background:0 0;border:1px solid transparent}.hds-accordion-item__button.hds-accordion-item__button--parent-does-not-contain-interactive::before{position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1;border-radius:5px;content:""}.hds-accordion-item__button.hds-accordion-item__button--parent-does-not-contain-interactive.mock-focus::before,.hds-accordion-item__button.hds-accordion-item__button--parent-does-not-contain-interactive:focus::before{box-shadow:var(--token-focus-ring-action-box-shadow)}.hds-accordion-item__button.hds-accordion-item__button--parent-does-not-contain-interactive:focus:not(:focus-visible)::before{box-shadow:none}.hds-accordion-item__button.hds-accordion-item__button--parent-does-not-contain-interactive:focus-visible::before,.hds-breadcrumb__link.mock-focus,.hds-breadcrumb__link:focus{box-shadow:var(--token-focus-ring-action-box-shadow)}.hds-accordion-item__button.hds-accordion-item__button--parent-does-not-contain-interactive.mock-focus.mock-active::before,.hds-accordion-item__button.hds-accordion-item__button--parent-does-not-contain-interactive:focus:active::before{box-shadow:none}.hds-accordion-item__button.hds-accordion-item__button--parent-does-not-contain-interactive::after{position:absolute;display:block;border-radius:6px;content:"";inset:0}.hds-accordion-item__button.hds-accordion-item__button--parent-contains-interactive{position:relative;display:flex;gap:.375rem;align-items:center;justify-content:center;font-weight:var(--token-typography-font-weight-regular);text-decoration:none;border:1px solid transparent;border-radius:5px;outline-style:solid;outline-color:transparent;isolation:isolate;width:24px;height:24px;color:var(--token-color-foreground-primary);background-color:var(--token-color-surface-faint);border-color:var(--token-color-border-strong);box-shadow:var(--token-elevation-low-box-shadow)}.hds-accordion-item__button.hds-accordion-item__button--parent-contains-interactive.mock-focus::before,.hds-accordion-item__button.hds-accordion-item__button--parent-contains-interactive:focus::before{position:absolute;top:-4px;right:-4px;bottom:-4px;left:-4px;z-index:-1;border:3px solid transparent;border-radius:8px;content:""}.hds-accordion-item__button.hds-accordion-item__button--parent-contains-interactive.mock-hover,.hds-accordion-item__button.hds-accordion-item__button--parent-contains-interactive:hover{color:var(--token-color-foreground-primary);background-color:var(--token-color-surface-primary);border-color:var(--token-color-border-strong);cursor:pointer}.hds-accordion-item__button.hds-accordion-item__button--parent-contains-interactive.mock-focus,.hds-accordion-item__button.hds-accordion-item__button--parent-contains-interactive:focus{box-shadow:none;color:var(--token-color-foreground-primary);background-color:var(--token-color-surface-faint);border-color:var(--token-color-focus-action-internal)}.hds-accordion-item__button.hds-accordion-item__button--parent-contains-interactive.mock-focus::before,.hds-accordion-item__button.hds-accordion-item__button--parent-contains-interactive:focus::before{border-color:var(--token-color-focus-action-external)}.hds-accordion-item__button.hds-accordion-item__button--parent-contains-interactive.mock-active,.hds-accordion-item__button.hds-accordion-item__button--parent-contains-interactive:active{color:var(--token-color-foreground-primary);background-color:var(--token-color-surface-interactive-active);border-color:var(--token-color-border-strong);box-shadow:none}.hds-accordion-item__button.hds-accordion-item__button--parent-contains-interactive.mock-active::before,.hds-accordion-item__button.hds-accordion-item__button--parent-contains-interactive:active::before{border-color:transparent}.hds-accordion-item__button.hds-accordion-item__button--is-open .flight-icon-chevron-down{transform:rotate(-180deg)}.hds-accordion-item__toggle-content{flex:1}.hds-accordion-item__content{padding:4px 16px 16px}.hds-alert{display:flex;align-items:flex-start}.hds-alert__icon{flex:none;width:20px;height:20px;margin-right:12px}.hds-alert__content{flex:1 1 auto}.hds-alert__text{display:flex;flex-direction:column;gap:4px;justify-content:center;color:var(--token-color-foreground-warning-on-surface)}.hds-alert__description{word-break:break-word}.hds-alert__description strong{font-weight:var(--token-typography-font-weight-semibold)}.hds-alert__description code,.hds-alert__description pre{display:inline;padding:1px 5px;font-size:.9em;font-family:var(--token-typography-code-100-font-family);line-height:1em;background-color:var(--token-color-surface-primary);border:1px solid var(--token-color-palette-neutral-200);border-radius:5px}.hds-alert__description a:not([class*=hds-]){color:var(--token-color-foreground-strong)}.hds-alert__description a:not([class*=hds-]):focus,.hds-alert__description a:not([class*=hds-]):focus-visible{text-decoration:none;outline:var(--token-color-focus-action-internal) solid 2px;outline-offset:1px}.hds-alert__description a:not([class*=hds-]):hover{color:var(--token-color-foreground-primary)}.hds-alert--color-neutral .hds-alert__icon,.hds-alert__description a:not([class*=hds-]):active{color:var(--token-color-foreground-faint)}.hds-alert__actions{display:flex;gap:16px;align-items:center}.hds-alert__actions>*{margin-top:16px}.hds-alert__dismiss{margin-top:2px;margin-left:16px}.hds-alert--type-compact .hds-alert__dismiss{margin-top:1px}.hds-alert--type-page{padding:16px 48px}.hds-alert--type-inline{padding:16px;border-style:solid;border-width:1px;border-radius:6px}.hds-alert--type-compact .hds-alert__icon{width:14px;height:14px;margin-top:2px;margin-right:8px}.hds-alert--type-compact .hds-alert__title{display:none}.hds-alert--type-compact .hds-alert__title+.hds-alert__description{margin-top:0}.hds-alert--color-neutral.hds-alert--type-page{background-color:var(--token-color-surface-faint);box-shadow:0 1px 0 0 var(--token-color-palette-alpha-300)}.hds-alert--color-neutral.hds-alert--type-inline{background-color:var(--token-color-surface-faint);border-color:var(--token-color-border-strong)}.hds-alert--color-neutral .hds-alert__title{color:var(--token-color-foreground-primary)}.hds-alert--color-highlight.hds-alert--type-page{background-color:var(--token-color-surface-highlight);box-shadow:0 1px 0 0 var(--token-color-border-highlight)}.hds-alert--color-highlight.hds-alert--type-inline{background-color:var(--token-color-surface-highlight);border-color:var(--token-color-border-highlight)}.hds-alert--color-highlight .hds-alert__icon,.hds-alert--color-highlight .hds-alert__title{color:var(--token-color-foreground-highlight-on-surface)}.hds-alert--color-success.hds-alert--type-page{background-color:var(--token-color-surface-success);box-shadow:0 1px 0 0 var(--token-color-border-success)}.hds-alert--color-success.hds-alert--type-inline{background-color:var(--token-color-surface-success);border-color:var(--token-color-border-success)}.hds-alert--color-success .hds-alert__icon,.hds-alert--color-success .hds-alert__title{color:var(--token-color-foreground-success-on-surface)}.hds-alert--color-warning.hds-alert--type-page{background-color:var(--token-color-surface-warning);box-shadow:0 1px 0 0 var(--token-color-border-warning)}.hds-alert--color-warning.hds-alert--type-inline{background-color:var(--token-color-surface-warning);border-color:var(--token-color-border-warning)}.hds-alert--color-warning .hds-alert__icon,.hds-alert--color-warning .hds-alert__title{color:var(--token-color-foreground-warning-on-surface)}.hds-alert--color-critical.hds-alert--type-page{background-color:var(--token-color-surface-critical);box-shadow:0 1px 0 0 var(--token-color-border-critical)}.hds-alert--color-critical.hds-alert--type-inline{background-color:var(--token-color-surface-critical);border-color:var(--token-color-border-critical)}.hds-alert--color-critical .hds-alert__icon,.hds-alert--color-critical .hds-alert__title{color:var(--token-color-foreground-critical-on-surface)}.hds-app-footer{display:flex;flex-wrap:wrap;gap:24px;justify-content:flex-end;padding:24px;color:var(--app-footer-foreground-color);border-top:1px solid var(--app-footer-border-top-color)}.hds-app-footer__list:not(:has(li)){display:none}.hds-app-footer__legal-links,.hds-app-footer__list{display:flex;flex-wrap:wrap;gap:24px;align-items:center;justify-content:flex-end;width:-moz-fit-content;width:fit-content;min-width:0;margin:0;padding:0;list-style-type:none}.hds-app-footer__status-link.hds-link-inline--icon-leading>.hds-link-inline__icon{margin-right:6px}.hds-app-footer__status-link .flight-icon{fill:var(--hds-app-footer-status-icon-color,currentColor)}.hds-app-footer__status-link--operational .flight-icon{fill:var(--app-footer-status-link-icon-operational-color)}.hds-app-footer__status-link--degraded .flight-icon{fill:var(--app-footer-status-link-icon-degraded-color)}.hds-app-footer__status-link--maintenance .flight-icon{fill:var(--app-footer-status-link-icon-maintenance-color)}.hds-app-footer__status-link--critical .flight-icon{fill:var(--app-footer-status-link-icon-critical-color)}.hds-app-footer__link.hds-link-inline--color-secondary,.hds-app-footer__status-link{color:var(--app-footer-link-default-color);text-align:right}.hds-app-footer__link.hds-link-inline--color-secondary.mock-hover,.hds-app-footer__link.hds-link-inline--color-secondary:hover,.hds-app-footer__status-link.mock-hover,.hds-app-footer__status-link:hover{color:var(--app-footer-link-hover-color)}.hds-app-footer__link.hds-link-inline--color-secondary.mock-active,.hds-app-footer__link.hds-link-inline--color-secondary:active,.hds-app-footer__status-link.mock-active,.hds-app-footer__status-link:active{color:var(--app-footer-link-active-color)}.hds-app-footer__link.hds-link-inline--color-secondary.mock-focus,.hds-app-footer__link.hds-link-inline--color-secondary:focus,.hds-app-footer__link.hds-link-inline--color-secondary:focus-visible,.hds-app-footer__status-link.mock-focus,.hds-app-footer__status-link:focus,.hds-app-footer__status-link:focus-visible{color:var(--app-footer-link-focus-color);outline-color:var(--app-footer-link-focus-outline-color)}.hds-app-footer__list-item{display:flex;align-items:center}.hds-app-footer__copyright{display:flex;gap:6px;align-items:center;color:var(--app-footer-copyright-text-color)}.hds-app-footer__copyright .flight-icon{fill:var(--app-footer-copyright-icon-color)}.hds-app-footer--theme-light{--app-footer-foreground-color:var(--token-color-foreground-primary);--app-footer-border-top-color:var(--token-color-border-primary);--app-footer-link-default-color:var(--token-color-foreground-faint);--app-footer-link-hover-color:var(--token-color-palette-neutral-600);--app-footer-link-active-color:var(--token-color-palette-neutral-700);--app-footer-link-focus-color:var(--token-color-foreground-faint);--app-footer-link-focus-outline-color:var(--token-color-focus-action-internal);--app-footer-copyright-text-color:var(--token-color-foreground-primary);--app-footer-copyright-icon-color:var(--token-color-hashicorp-brand);--app-footer-status-link-icon-operational-color:var(--token-color-foreground-success);--app-footer-status-link-icon-degraded-color:var(--token-color-foreground-warning);--app-footer-status-link-icon-maintenance-color:var(--token-color-foreground-warning);--app-footer-status-link-icon-critical-color:var(--token-color-foreground-critical)}.hds-app-footer--theme-dark{--app-footer-foreground-color:#b2b6bd;--app-footer-border-top-color:#b2b6bd66;--app-footer-link-default-color:#b2b6bd;--app-footer-link-hover-color:#d5d7db;--app-footer-link-active-color:#efeff1;--app-footer-link-focus-color:#b2b6bd;--app-footer-link-focus-outline-color:#389aff;--app-footer-copyright-text-color:#b2b6bd;--app-footer-copyright-icon-color:#fff;--app-footer-status-link-icon-operational-color:#009241;--app-footer-status-link-icon-degraded-color:#e88c03;--app-footer-status-link-icon-maintenance-color:#e88c03;--app-footer-status-link-icon-critical-color:#ef3016}.hds-app-frame{display:grid;grid-template-areas:"header header" "sidebar main" "sidebar footer";grid-template-rows:auto 1fr auto;grid-template-columns:auto 1fr;min-height:100vh}.hds-app-frame__modals:empty,button.hds-button[href] .hds-button__text,button.hds-button[href]::before{display:none}.hds-app-frame__header{z-index:7;grid-area:header}.hds-app-frame__sidebar{z-index:6;grid-area:sidebar}.hds-app-frame__main{grid-area:main}.hds-app-frame__footer{grid-area:footer}.hds-app-frame__modals{position:fixed;top:0;left:0;z-index:100;width:100vw;height:100vh;pointer-events:none}.hds-application-state{width:19.5rem;max-width:100%;margin:0 auto}.hds-application-state__header{display:grid;grid-template-columns:min-content 1fr;align-items:start;color:var(--token-color-foreground-faint)}.hds-application-state__icon{margin-right:8px;padding-top:4px}.hds-application-state__error-code,.hds-application-state__title{grid-column-start:2}.hds-application-state__body{padding:12px 0;color:var(--token-color-foreground-faint)}.hds-application-state__footer{display:flex;gap:8px;justify-content:space-between}.hds-application-state__footer.hds-application-state__footer--has-divider{padding:12px 0;border-top:1px solid var(--token-color-border-strong)}.hds-avatar{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;width:32px;height:32px}.hds-avatar svg,.hds-dropdown--is-inline,.hds-form-toggle{display:inline-block}.hds-avatar img{width:inherit;height:inherit;border-radius:2px}.hds-badge{display:inline-flex;align-items:center;max-width:100%;vertical-align:middle;border:1px solid transparent;border-radius:5px}.hds-badge__icon{display:block;flex:0 0 auto}.hds-badge__text{flex:1 0 0;font-weight:var(--token-typography-font-weight-medium)}.hds-badge--size-small{gap:.25rem;min-height:1.25rem;padding:calc(.125rem - 1px) calc(.375rem - 1px)}.hds-badge--size-small .hds-badge__icon{width:.75rem;height:.75rem}.hds-badge--size-large .hds-badge__icon,.hds-badge--size-medium .hds-badge__icon{width:1rem;height:1rem}.hds-badge--size-small .hds-badge__text{font-size:.8125rem;line-height:1.2308}.hds-badge--size-medium{gap:.25rem;min-height:1.5rem;padding:calc(.25rem - 1px) calc(.5rem - 1px)}.hds-badge--size-medium .hds-badge__text{font-size:.8125rem;line-height:1.2308}.hds-badge--size-large{gap:.375rem;min-height:2rem;padding:calc(.25rem - 1px) calc(.5rem - 1px)}.hds-badge--size-large .hds-badge__text{font-size:1rem;line-height:1.5}.hds-badge--color-neutral.hds-badge--type-filled{color:var(--token-color-foreground-primary)}.hds-badge--color-neutral.hds-badge--type-inverted{color:var(--token-color-foreground-high-contrast);background-color:var(--token-color-foreground-faint)}.hds-badge--color-neutral.hds-badge--type-outlined{color:var(--token-color-foreground-primary);background-color:transparent;border-color:var(--token-color-foreground-faint)}.hds-badge--color-neutral-dark-mode.hds-badge--type-filled{color:var(--token-color-foreground-high-contrast);background-color:var(--token-color-foreground-faint)}.hds-badge--color-neutral-dark-mode.hds-badge--type-inverted{color:var(--token-color-foreground-primary);background-color:var(--token-color-surface-faint)}.hds-badge--color-neutral-dark-mode.hds-badge--type-outlined{color:var(--token-color-foreground-high-contrast);background-color:transparent;border-color:var(--token-color-palette-neutral-100)}.hds-badge--color-highlight.hds-badge--type-filled{color:var(--token-color-foreground-highlight-on-surface);background-color:var(--token-color-surface-highlight)}.hds-badge--color-highlight.hds-badge--type-inverted{color:var(--token-color-foreground-high-contrast);background-color:var(--token-color-foreground-highlight)}.hds-badge--color-highlight.hds-badge--type-outlined{color:var(--token-color-foreground-highlight);background-color:transparent;border-color:currentColor}.hds-badge--color-success.hds-badge--type-filled{color:var(--token-color-foreground-success-on-surface);background-color:var(--token-color-surface-success)}.hds-badge--color-success.hds-badge--type-inverted{color:var(--token-color-foreground-high-contrast);background-color:var(--token-color-foreground-success)}.hds-badge--color-success.hds-badge--type-outlined{color:var(--token-color-foreground-success);background-color:transparent;border-color:currentColor}.hds-badge--color-warning.hds-badge--type-filled{color:var(--token-color-foreground-warning-on-surface);background-color:var(--token-color-surface-warning)}.hds-badge--color-warning.hds-badge--type-inverted{color:var(--token-color-foreground-high-contrast);background-color:var(--token-color-foreground-warning)}.hds-badge--color-warning.hds-badge--type-outlined{color:var(--token-color-foreground-warning);background-color:transparent;border-color:currentColor}.hds-badge--color-critical.hds-badge--type-filled{color:var(--token-color-foreground-critical-on-surface);background-color:var(--token-color-surface-critical)}.hds-badge--color-critical.hds-badge--type-inverted{color:var(--token-color-foreground-high-contrast);background-color:var(--token-color-foreground-critical)}.hds-badge--color-critical.hds-badge--type-outlined{color:var(--token-color-foreground-critical);background-color:transparent;border-color:currentColor}.hds-badge-count{display:inline-flex;align-items:center;max-width:100%;font-weight:var(--token-typography-font-weight-medium);border:1px solid transparent}.hds-button,.hds-dropdown-toggle-button{font-weight:var(--token-typography-font-weight-regular)}.hds-badge-count--size-small{min-height:1.25rem;padding:calc(.125rem - 1px) calc(.5rem - 1px);font-size:.8125rem;line-height:1.2308;border-radius:.625rem}.hds-badge-count--size-medium{min-height:1.5rem;padding:calc(.25rem - 1px) calc(.75rem - 1px);font-size:.8125rem;line-height:1.2308;border-radius:.75rem}.hds-badge-count--size-large{min-height:2rem;padding:calc(.25rem - 1px) calc(.875rem - 1px);font-size:1rem;line-height:1.5;border-radius:1rem}.hds-breadcrumb__list,.hds-breadcrumb__sublist{margin:0;padding:0;list-style:none}.hds-badge-count--color-neutral.hds-badge-count--type-filled{color:var(--token-color-foreground-primary);background-color:var(--token-color-surface-strong)}.hds-badge-count--color-neutral.hds-badge-count--type-inverted{color:var(--token-color-foreground-high-contrast);background-color:var(--token-color-foreground-faint)}.hds-badge-count--color-neutral.hds-badge-count--type-outlined{color:var(--token-color-foreground-primary);background-color:transparent;border-color:var(--token-color-foreground-faint)}.hds-badge-count--color-neutral-dark-mode.hds-badge-count--type-filled{color:var(--token-color-foreground-high-contrast);background-color:var(--token-color-foreground-faint)}.hds-badge-count--color-neutral-dark-mode.hds-badge-count--type-inverted{color:var(--token-color-foreground-primary);background-color:var(--token-color-surface-faint)}.hds-badge-count--color-neutral-dark-mode.hds-badge-count--type-outlined{color:var(--token-color-foreground-high-contrast);background-color:transparent;border-color:var(--token-color-palette-neutral-100)}.hds-breadcrumb{position:relative}.hds-breadcrumb__list{display:flex}.hds-breadcrumb--items-can-wrap .hds-breadcrumb__list{flex-wrap:wrap}.hds-breadcrumb__item{position:relative;display:flex;flex-direction:row;align-items:center;min-width:0}.hds-breadcrumb__list>.hds-breadcrumb__item:not(:last-child)::after{padding:0 8px;color:var(--token-color-palette-neutral-300);content:"/"}.hds-breadcrumb__sublist>.hds-breadcrumb__item+.hds-breadcrumb__item{margin-top:4px}.hds-breadcrumb__current,.hds-breadcrumb__link{margin:0 -4px;padding:0 4px;display:flex;min-width:0}.hds-breadcrumb__item--is-truncation{flex:none}.hds-breadcrumb__link{flex-direction:row;align-items:center;color:var(--token-color-foreground-faint);border-radius:5px;text-decoration-color:transparent;outline-style:solid;outline-color:transparent}.hds-breadcrumb__link.mock-active>.hds-breadcrumb__text,.hds-breadcrumb__link.mock-hover>.hds-breadcrumb__text,.hds-breadcrumb__link:active>.hds-breadcrumb__text,.hds-breadcrumb__link:hover>.hds-breadcrumb__text{text-decoration-color:currentColor}.hds-breadcrumb__link.mock-hover,.hds-breadcrumb__link:hover{color:var(--token-color-palette-neutral-600)}.hds-breadcrumb__link:focus:not(:focus-visible){box-shadow:none}.hds-breadcrumb__link:focus-visible{box-shadow:var(--token-focus-ring-action-box-shadow)}.hds-breadcrumb__link.mock-focus.mock-active,.hds-breadcrumb__link:focus:active{box-shadow:none}.hds-breadcrumb__link.mock-active,.hds-breadcrumb__link:active{color:var(--token-color-foreground-secondary)}.hds-breadcrumb__current{flex-direction:row;align-items:center;color:var(--token-color-foreground-strong)}.hds-breadcrumb__icon{flex:none;width:13px;height:13px;margin-right:6px}.hds-breadcrumb__text{padding:calc((28px - 1rem)/ 2) 0;font-size:.8125rem;line-height:1rem;white-space:nowrap;text-decoration:underline;text-overflow:ellipsis;text-decoration-color:transparent}.hds-breadcrumb__sublist .hds-breadcrumb__text{white-space:normal}.hds-breadcrumb__truncation-toggle{display:flex;flex:none;align-items:center;justify-content:center;width:28px;height:28px;margin:0 -4px;padding:0;color:var(--token-color-foreground-faint);background-color:transparent;border:1px solid transparent;border-radius:5px;outline:transparent solid 0;cursor:pointer}.hds-button,.hds-copy-snippet{align-items:center;isolation:isolate}.hds-button,.hds-copy-snippet,.hds-dismiss-button,.hds-dropdown-toggle-button,.hds-dropdown-toggle-icon{outline-style:solid;outline-color:transparent}.hds-breadcrumb__truncation-toggle.mock-hover,.hds-breadcrumb__truncation-toggle:hover{color:var(--token-color-foreground-faint);border-color:var(--token-color-border-strong)}.hds-breadcrumb__truncation-toggle.mock-focus,.hds-breadcrumb__truncation-toggle:focus{box-shadow:var(--token-focus-ring-action-box-shadow);background-color:transparent;border:none}.hds-breadcrumb__truncation-toggle:focus:not(:focus-visible){box-shadow:none}.hds-breadcrumb__truncation-toggle:focus-visible,.hds-copy-snippet.mock-focus::before,.hds-copy-snippet:focus::before{box-shadow:var(--token-focus-ring-action-box-shadow)}.hds-breadcrumb__truncation-toggle.mock-focus.mock-active,.hds-breadcrumb__truncation-toggle:focus:active{box-shadow:none}.hds-breadcrumb__truncation-toggle.mock-active,.hds-breadcrumb__truncation-toggle:active{color:var(--token-color-foreground-primary);background-color:var(--token-color-surface-interactive-active);border-color:var(--token-color-border-strong)}.hds-breadcrumb__truncation-content{position:absolute;top:100%;left:-4px;z-index:300;width:-moz-max-content;width:max-content;max-width:200px;margin-top:4px;padding:6px 12px;background-color:var(--token-color-surface-primary);border-radius:6px;box-shadow:var(--token-surface-high-box-shadow)}.hds-button.hds-button--width-full,.hds-copy-snippet--is-truncated,.hds-copy-snippet--width-full,.hds-dropdown-toggle-button--width-full{max-width:100%;width:100%}.hds-button--size-small,.hds-dropdown-toggle-button--size-small{padding:.375rem .6875rem;min-height:1.75rem}.hds-button{position:relative;display:flex;gap:.375rem;justify-content:center;width:auto;text-decoration:none;border:1px solid transparent;border-radius:5px}a.hds-button{width:-moz-fit-content;width:fit-content}a.hds-button.mock-active,a.hds-button.mock-focus,a.hds-button.mock-hover,a.hds-button:active,a.hds-button:focus,a.hds-button:hover{text-decoration:underline}.hds-button.mock-disabled,.hds-button.mock-disabled:focus,.hds-button.mock-disabled:hover,.hds-button:disabled,.hds-button:disabled:focus,.hds-button:disabled:hover,.hds-button[disabled],.hds-button[disabled]:focus,.hds-button[disabled]:hover{color:var(--token-color-foreground-disabled);background-color:var(--token-color-surface-faint);border-color:var(--token-color-border-primary);box-shadow:none;cursor:not-allowed}.hds-button.mock-disabled::before,.hds-button.mock-disabled:focus::before,.hds-button.mock-disabled:hover::before,.hds-button:disabled::before,.hds-button:disabled:focus::before,.hds-button:disabled:hover::before,.hds-button[disabled]::before,.hds-button[disabled]:focus::before,.hds-button[disabled]:hover::before{border-color:transparent}.hds-button.hds-button--width-full .hds-button__text{flex:0 0 auto}.hds-button__text,.hds-copy-snippet__text,.hds-form-group--radio-cards .hds-form-radio-card--has-fluid-width{flex:1 0 0}.hds-button.mock-focus,.hds-button:focus{box-shadow:none}.hds-button.mock-focus::before,.hds-button:focus::before{position:absolute;top:-4px;right:-4px;bottom:-4px;left:-4px;z-index:-1;border:3px solid transparent;border-radius:8px;content:""}.hds-button__text{text-align:center}.hds-button--size-small .hds-button__icon{width:.75rem;height:.75rem}.hds-button--size-small .hds-button__text{font-size:.8125rem;line-height:.875rem}.hds-button--size-small.hds-button--is-icon-only{min-width:1.75rem;padding-right:.375rem;padding-left:.375rem}.hds-button--size-medium{min-height:2.25rem;padding:.5625rem .9375rem}.hds-button--size-medium .hds-button__icon{width:1rem;height:1rem}.hds-button--size-medium .hds-button__text{font-size:.875rem;line-height:1rem}.hds-button--size-medium.hds-button--is-icon-only{min-width:2.25rem;padding-right:.5625rem;padding-left:.5625rem}.hds-button--size-large{min-height:3rem;padding:.6875rem 1.1875rem}.hds-button--size-large .hds-button__icon{width:1.5rem;height:1.5rem}.hds-button--size-large .hds-button__text{font-size:1rem;line-height:1.5rem}.hds-button--size-large.hds-button--is-icon-only{min-width:3rem;padding-right:.6875rem;padding-left:.6875rem}.hds-button--color-primary{color:var(--token-color-foreground-high-contrast);background-color:var(--token-color-palette-blue-200);border-color:var(--token-color-palette-blue-300);box-shadow:var(--token-elevation-low-box-shadow)}.hds-button--color-primary.mock-hover,.hds-button--color-primary:hover{color:var(--token-color-foreground-high-contrast);background-color:var(--token-color-palette-blue-300);border-color:var(--token-color-palette-blue-400);cursor:pointer}.hds-button--color-primary.mock-focus,.hds-button--color-primary:focus{color:var(--token-color-foreground-high-contrast);background-color:var(--token-color-palette-blue-200);border-color:var(--token-color-focus-action-internal)}.hds-button--color-primary.mock-focus::before,.hds-button--color-primary:focus::before{top:-6px;right:-6px;bottom:-6px;left:-6px;border-color:var(--token-color-focus-action-external);border-radius:10px}.hds-button--color-primary.mock-active,.hds-button--color-primary:active{color:var(--token-color-foreground-high-contrast);background-color:var(--token-color-palette-blue-400);border-color:var(--token-color-palette-blue-400);box-shadow:none}.hds-button--color-primary.mock-active::before,.hds-button--color-primary:active::before{border-color:transparent}.hds-button--color-secondary{color:var(--token-color-foreground-primary);background-color:var(--token-color-surface-faint);border-color:var(--token-color-border-strong);box-shadow:var(--token-elevation-low-box-shadow)}.hds-button--color-secondary.mock-hover,.hds-button--color-secondary:hover{color:var(--token-color-foreground-primary);background-color:var(--token-color-surface-primary);border-color:var(--token-color-border-strong);cursor:pointer}.hds-button--color-secondary.mock-focus,.hds-button--color-secondary:focus{color:var(--token-color-foreground-primary);background-color:var(--token-color-surface-faint);border-color:var(--token-color-focus-action-internal)}.hds-button--color-secondary.mock-focus::before,.hds-button--color-secondary:focus::before{border-color:var(--token-color-focus-action-external)}.hds-button--color-secondary.mock-active,.hds-button--color-secondary:active{color:var(--token-color-foreground-primary);background-color:var(--token-color-surface-interactive-active);border-color:var(--token-color-border-strong);box-shadow:none}.hds-button--color-secondary.mock-active::before,.hds-button--color-secondary:active::before{border-color:transparent}.hds-button--color-tertiary{color:var(--token-color-foreground-action);background-color:transparent;border-color:transparent}.hds-button--color-tertiary.mock-hover,.hds-button--color-tertiary:hover{color:var(--token-color-foreground-action-hover);background-color:var(--token-color-surface-primary);border-color:var(--token-color-border-strong);cursor:pointer}.hds-button--color-tertiary.mock-focus,.hds-button--color-tertiary:focus{color:var(--token-color-foreground-action);border-color:var(--token-color-focus-action-internal)}.hds-button--color-tertiary.mock-focus::before,.hds-button--color-tertiary:focus::before{border-color:var(--token-color-focus-action-external)}.hds-button--color-tertiary.mock-active,.hds-button--color-tertiary:active{color:var(--token-color-foreground-action-active);background-color:var(--token-color-surface-interactive-active);border-color:var(--token-color-border-strong);box-shadow:none}.hds-button--color-tertiary.mock-active::before,.hds-button--color-tertiary:active::before{border-color:transparent}.hds-button--color-tertiary.mock-disabled,.hds-button--color-tertiary.mock-disabled:focus,.hds-button--color-tertiary.mock-disabled:hover,.hds-button--color-tertiary:disabled,.hds-button--color-tertiary:disabled:focus,.hds-button--color-tertiary:disabled:hover,.hds-button--color-tertiary[disabled],.hds-button--color-tertiary[disabled]:focus,.hds-button--color-tertiary[disabled]:hover{background-color:transparent;border-color:transparent}.hds-button--color-tertiary.mock-disabled::before,.hds-button--color-tertiary.mock-disabled:focus::before,.hds-button--color-tertiary.mock-disabled:hover::before,.hds-button--color-tertiary:disabled::before,.hds-button--color-tertiary:disabled:focus::before,.hds-button--color-tertiary:disabled:hover::before,.hds-button--color-tertiary[disabled]::before,.hds-button--color-tertiary[disabled]:focus::before,.hds-button--color-tertiary[disabled]:hover::before{border-color:transparent}.hds-button--color-critical{color:var(--token-color-foreground-critical-on-surface);background-color:var(--token-color-surface-critical);border-color:var(--token-color-foreground-critical-on-surface);box-shadow:var(--token-elevation-low-box-shadow)}.hds-button--color-critical.mock-hover,.hds-button--color-critical:hover{color:var(--token-color-foreground-high-contrast);background-color:var(--token-color-palette-red-300);border-color:var(--token-color-palette-red-400);cursor:pointer}.hds-button--color-critical.mock-focus,.hds-button--color-critical:focus{color:var(--token-color-foreground-critical-on-surface);background-color:var(--token-color-surface-critical);border-color:var(--token-color-focus-critical-internal)}.hds-button--color-critical.mock-focus::before,.hds-button--color-critical:focus::before{border-color:var(--token-color-focus-critical-external)}.hds-button--color-critical.mock-active,.hds-button--color-critical:active{color:var(--token-color-foreground-high-contrast);background-color:var(--token-color-palette-red-400);border-color:var(--token-color-palette-red-400);box-shadow:none}.hds-button--color-critical.mock-active::before,.hds-button--color-critical:active::before{border-color:transparent}button.hds-button[href]{color:#fff!important;background-color:red!important;border:none}button.hds-button[href]::after{content:' Attention: you’re passing a "href" attribute to the "Hds::Button" component, you should use an "@href" argument.'}.hds-button-set{display:flex;gap:16px}.hds-card__container{position:relative;background-color:#fff;border-radius:6px}.hds-card__container--level-surface-base{box-shadow:var(--token-surface-base-box-shadow)}.hds-card__container--level-surface-mid{box-shadow:var(--token-surface-mid-box-shadow)}.hds-card__container--level-surface-high{box-shadow:var(--token-surface-high-box-shadow)}.hds-card__container--hover-level-surface-base.mock-hover,.hds-card__container--hover-level-surface-base:hover{box-shadow:var(--token-surface-base-box-shadow)}.hds-card__container--hover-level-surface-mid.mock-hover,.hds-card__container--hover-level-surface-mid:hover{box-shadow:var(--token-surface-mid-box-shadow)}.hds-card__container--hover-level-surface-high.mock-hover,.hds-card__container--hover-level-surface-high:hover{box-shadow:var(--token-surface-high-box-shadow)}.hds-card__container--active-level-surface-base.mock-active,.hds-card__container--active-level-surface-base:active{box-shadow:var(--token-surface-base-box-shadow)}.hds-card__container--active-level-surface-mid.mock-active,.hds-card__container--active-level-surface-mid:active{box-shadow:var(--token-surface-mid-box-shadow)}.hds-card__container--active-level-surface-high.mock-active,.hds-card__container--active-level-surface-high:active{box-shadow:var(--token-surface-high-box-shadow)}.hds-card__container--level-elevation-base{box-shadow:var(--token-elevation-base-box-shadow)}.hds-card__container--level-elevation-mid{box-shadow:var(--token-elevation-mid-box-shadow)}.hds-card__container--level-elevation-high{box-shadow:var(--token-elevation-high-box-shadow)}.hds-card__container--hover-level-elevation-base.mock-hover,.hds-card__container--hover-level-elevation-base:hover{box-shadow:var(--token-elevation-base-box-shadow)}.hds-card__container--hover-level-elevation-mid.mock-hover,.hds-card__container--hover-level-elevation-mid:hover{box-shadow:var(--token-elevation-mid-box-shadow)}.hds-card__container--hover-level-elevation-high.mock-hover,.hds-card__container--hover-level-elevation-high:hover{box-shadow:var(--token-elevation-high-box-shadow)}.hds-card__container--active-level-elevation-base.mock-active,.hds-card__container--active-level-elevation-base:active{box-shadow:var(--token-elevation-base-box-shadow)}.hds-card__container--active-level-elevation-mid.mock-active,.hds-card__container--active-level-elevation-mid:active{box-shadow:var(--token-elevation-mid-box-shadow)}.hds-card__container--active-level-elevation-high.mock-active,.hds-card__container--active-level-elevation-high:active{box-shadow:var(--token-elevation-high-box-shadow)}.hds-card__container--background-neutral-primary{background-color:var(--token-color-surface-primary)}.hds-card__container--background-neutral-secondary{background-color:var(--token-color-surface-faint)}.hds-card__container--overflow-visible{overflow:visible}.hds-copy-button{cursor:pointer}.hds-copy-button .hds-button__icon{color:var(--token-color-foreground-action)}.hds-copy-button.hds-copy-button--status-success .hds-button__icon{color:var(--token-color-foreground-success)}.hds-copy-button.hds-copy-button--status-error .hds-button__icon{color:var(--token-color-foreground-critical)}.hds-copy-snippet{position:relative;display:flex;gap:8px;justify-content:space-between;padding:6px 4px;text-align:left;border:1px solid transparent;border-radius:5px;cursor:pointer}.hds-copy-snippet::before,.hds-dismiss-button::before{position:absolute;z-index:-1;content:""}.hds-copy-snippet::before{top:0;right:0;bottom:0;left:0;border-radius:5px}.hds-copy-snippet:focus:not(:focus-visible)::before{box-shadow:none}.hds-copy-snippet:focus-visible::before{box-shadow:var(--token-focus-ring-action-box-shadow)}.hds-copy-snippet.mock-focus.mock-active::before,.hds-copy-snippet:focus:active::before{box-shadow:none}.hds-copy-snippet--color-primary{color:var(--token-color-foreground-action);background-color:transparent}.hds-copy-snippet--color-primary.mock-hover,.hds-copy-snippet--color-primary:hover{color:var(--token-color-foreground-action-hover);background-color:var(--token-color-surface-interactive);border-color:var(--token-color-border-strong)}.hds-copy-snippet--color-primary.mock-active,.hds-copy-snippet--color-primary:active{color:var(--token-color-foreground-action-active);background-color:var(--token-color-surface-interactive-active);border-color:var(--token-color-border-strong)}.hds-copy-snippet--color-primary:focus{background-color:transparent}.hds-copy-snippet--color-secondary{color:var(--token-color-foreground-primary);background-color:transparent}.hds-copy-snippet--color-secondary.mock-hover,.hds-copy-snippet--color-secondary:hover{background-color:var(--token-color-surface-interactive);border-color:var(--token-color-border-strong)}.hds-copy-snippet--color-secondary.mock-active,.hds-copy-snippet--color-secondary:active{background-color:var(--token-color-surface-interactive-active);border-color:var(--token-color-border-strong)}.hds-copy-snippet--status-error,.hds-copy-snippet--status-success{background-color:var(--token-color-surface-interactive)}.hds-copy-snippet--color-secondary .hds-copy-snippet__icon{color:var(--token-color-foreground-action)}.hds-copy-snippet--color-secondary .hds-copy-snippet__icon:hover{color:var(--token-color-foreground-action-hover)}.hds-copy-snippet--color-secondary .hds-copy-snippet__icon:active{color:var(--token-color-foreground-action-active)}.hds-copy-snippet--color-secondary .hds-copy-snippet__icon:focus{color:var(--token-color-foreground-action)}.hds-copy-snippet--status-success .hds-copy-snippet__icon{color:var(--token-color-foreground-success)}.hds-copy-snippet--status-error .hds-copy-snippet__icon{color:var(--token-color-foreground-critical)}.hds-copy-snippet__icon{flex:none}.hds-copy-snippet--is-truncated .hds-copy-snippet__text{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.hds-disclosure-primitive{position:relative}.hds-dismiss-button{flex:none;padding:0;color:var(--token-color-foreground-faint);background-color:transparent;border:none;cursor:pointer;position:relative;isolation:isolate}.hds-dismiss-button.mock-hover::before,.hds-dismiss-button:hover::before{background-color:rgba(222,223,227,.4)}.hds-dismiss-button::before{top:-4px;right:-4px;bottom:-4px;left:-4px;border-radius:5px}.hds-dismiss-button.mock-focus::before,.hds-dismiss-button:focus::before{box-shadow:var(--token-focus-ring-action-box-shadow)}.hds-dismiss-button:focus:not(:focus-visible)::before{box-shadow:none}.hds-dismiss-button:focus-visible::before,.hds-dropdown-toggle-icon.mock-focus::before,.hds-dropdown-toggle-icon:focus::before{box-shadow:var(--token-focus-ring-action-box-shadow)}.hds-dismiss-button.mock-focus.mock-active::before,.hds-dismiss-button:focus:active::before{box-shadow:none}.hds-dismiss-button.mock-active,.hds-dismiss-button:active{color:var(--token-color-foreground-secondary)}.hds-dismiss-button.mock-active::before,.hds-dismiss-button:active::before{background-color:rgba(222,223,227,.4);border:1px solid var(--token-color-border-strong)}.hds-dropdown--is-inline .hds-dropdown-toggle-button,.hds-dropdown--is-inline .hds-dropdown-toggle-icon{display:inline-flex}.hds-dropdown-toggle-icon{display:flex;gap:2px;align-items:center;justify-content:center;padding:1px;background-color:var(--token-color-surface-faint);border:1px solid var(--token-color-border-strong);border-radius:5px;position:relative;isolation:isolate}.hds-dropdown-toggle-button,.hds-link-standalone{gap:.375rem;font-family:var(--token-typography-font-stack-text);isolation:isolate}.hds-dropdown-toggle-icon.mock-hover,.hds-dropdown-toggle-icon:hover{background-color:var(--token-color-surface-interactive);cursor:pointer}.hds-dropdown-toggle-icon::before{position:absolute;top:-1px;right:-1px;bottom:-1px;left:-1px;z-index:-1;border-radius:5px;content:""}.hds-dropdown-toggle-icon:focus:not(:focus-visible)::before{box-shadow:none}.hds-dropdown-toggle-icon:focus-visible::before,.hds-link-standalone.mock-focus::before,.hds-link-standalone:focus::before{box-shadow:var(--token-focus-ring-action-box-shadow)}.hds-dropdown-toggle-icon.mock-focus.mock-active::before,.hds-dropdown-toggle-icon:focus:active::before{box-shadow:none}.hds-dropdown-toggle-icon.mock-active,.hds-dropdown-toggle-icon:active{background-color:var(--token-color-surface-interactive-active);border-color:var(--token-color-border-strong)}.hds-dropdown-toggle-icon.mock-disabled,.hds-dropdown-toggle-icon:disabled{color:var(--token-color-foreground-disabled);background-color:var(--token-color-surface-faint);border-color:var(--token-color-border-primary);box-shadow:none;cursor:not-allowed}.hds-dropdown-toggle-icon.mock-disabled::before,.hds-dropdown-toggle-icon:disabled::before{border-color:transparent}.hds-dropdown-toggle-icon__wrapper{display:flex;align-items:center;justify-content:center;border-radius:3px}.hds-dropdown-toggle-icon__wrapper img{width:100%;height:100%;-o-object-fit:cover;object-fit:cover;border-radius:inherit}.hds-dropdown-toggle-icon--size-small .hds-dropdown-toggle-icon__wrapper{width:24px;height:24px}.hds-dropdown-toggle-icon--size-medium .hds-dropdown-toggle-icon__wrapper{width:32px;height:32px}.hds-dropdown-toggle-button{position:relative;display:flex;align-items:center;justify-content:center;width:auto;text-decoration:none;border:1px solid transparent;border-radius:5px}.hds-dropdown-toggle-button.mock-focus,.hds-dropdown-toggle-button:focus{box-shadow:none}.hds-dropdown-toggle-button.mock-focus::before,.hds-dropdown-toggle-button:focus::before{position:absolute;top:-4px;right:-4px;bottom:-4px;left:-4px;z-index:-1;border:3px solid transparent;border-radius:8px;content:""}.hds-dropdown-toggle-button.mock-disabled,.hds-dropdown-toggle-button.mock-disabled:focus,.hds-dropdown-toggle-button.mock-disabled:hover,.hds-dropdown-toggle-button:disabled,.hds-dropdown-toggle-button:disabled:focus,.hds-dropdown-toggle-button:disabled:hover{color:var(--token-color-foreground-disabled);background-color:var(--token-color-surface-faint);border-color:var(--token-color-border-primary);box-shadow:none;cursor:not-allowed}.hds-dropdown-toggle-button.mock-disabled::before,.hds-dropdown-toggle-button.mock-disabled:focus::before,.hds-dropdown-toggle-button.mock-disabled:hover::before,.hds-dropdown-toggle-button:disabled::before,.hds-dropdown-toggle-button:disabled:focus::before,.hds-dropdown-toggle-button:disabled:hover::before{border-color:transparent}.hds-dropdown-toggle-button.mock-disabled .hds-dropdown-toggle-button__badge,.hds-dropdown-toggle-button.mock-disabled .hds-dropdown-toggle-button__count,.hds-dropdown-toggle-button.mock-disabled:focus .hds-dropdown-toggle-button__badge,.hds-dropdown-toggle-button.mock-disabled:focus .hds-dropdown-toggle-button__count,.hds-dropdown-toggle-button.mock-disabled:hover .hds-dropdown-toggle-button__badge,.hds-dropdown-toggle-button.mock-disabled:hover .hds-dropdown-toggle-button__count,.hds-dropdown-toggle-button:disabled .hds-dropdown-toggle-button__badge,.hds-dropdown-toggle-button:disabled .hds-dropdown-toggle-button__count,.hds-dropdown-toggle-button:disabled:focus .hds-dropdown-toggle-button__badge,.hds-dropdown-toggle-button:disabled:focus .hds-dropdown-toggle-button__count,.hds-dropdown-toggle-button:disabled:hover .hds-dropdown-toggle-button__badge,.hds-dropdown-toggle-button:disabled:hover .hds-dropdown-toggle-button__count{color:var(--token-color-foreground-primary);background-color:var(--token-color-surface-strong)}.hds-dropdown-toggle-button--size-small .hds-dropdown-toggle-button__icon{width:.75rem;height:.75rem}.hds-dropdown-toggle-button--size-small .hds-dropdown-toggle-button__text{font-size:.8125rem;line-height:.875rem}.hds-dropdown-toggle-button--size-small.hds-dropdown-toggle-button--is-icon-only{min-width:1.75rem;padding-right:.375rem;padding-left:.375rem}.hds-dropdown-toggle-button--size-medium{min-height:2.25rem;padding:.5625rem .9375rem}.hds-dropdown-toggle-button--size-medium .hds-dropdown-toggle-button__icon{width:1rem;height:1rem}.hds-dropdown-toggle-button--size-medium .hds-dropdown-toggle-button__text{font-size:.875rem;line-height:1rem}.hds-dropdown-toggle-button--size-medium.hds-dropdown-toggle-button--is-icon-only{min-width:2.25rem;padding-right:.5625rem;padding-left:.5625rem}.hds-dropdown-toggle-button--size-large{min-height:3rem;padding:.6875rem 1.1875rem}.hds-dropdown-toggle-button--size-large .hds-dropdown-toggle-button__icon{width:1.5rem;height:1.5rem}.hds-dropdown-toggle-button--size-large .hds-dropdown-toggle-button__text{font-size:1rem;line-height:1.5rem}.hds-dropdown-toggle-button--size-large.hds-dropdown-toggle-button--is-icon-only{min-width:3rem;padding-right:.6875rem;padding-left:.6875rem}.hds-dropdown-toggle-button--size-small{padding-right:.375rem}.hds-dropdown-toggle-button--size-medium{padding-right:.5625rem}.hds-dropdown-toggle-button--color-primary{color:var(--token-color-foreground-high-contrast);background-color:var(--token-color-palette-blue-200);border-color:var(--token-color-palette-blue-300);box-shadow:var(--token-elevation-low-box-shadow)}.hds-dropdown-toggle-button--color-primary.mock-hover,.hds-dropdown-toggle-button--color-primary:hover{color:var(--token-color-foreground-high-contrast);background-color:var(--token-color-palette-blue-300);border-color:var(--token-color-palette-blue-400);cursor:pointer}.hds-dropdown-toggle-button--color-primary.mock-focus,.hds-dropdown-toggle-button--color-primary:focus{color:var(--token-color-foreground-high-contrast);background-color:var(--token-color-palette-blue-200);border-color:var(--token-color-focus-action-internal)}.hds-dropdown-toggle-button--color-primary.mock-focus::before,.hds-dropdown-toggle-button--color-primary:focus::before{top:-6px;right:-6px;bottom:-6px;left:-6px;border-color:var(--token-color-focus-action-external);border-radius:10px}.hds-dropdown-toggle-button--color-primary.mock-active,.hds-dropdown-toggle-button--color-primary:active{color:var(--token-color-foreground-high-contrast);background-color:var(--token-color-palette-blue-400);border-color:var(--token-color-palette-blue-400);box-shadow:none}.hds-dropdown-toggle-button--color-primary.mock-active::before,.hds-dropdown-toggle-button--color-primary:active::before{border-color:transparent}.hds-dropdown-toggle-button--color-secondary{color:var(--token-color-foreground-primary);background-color:var(--token-color-surface-faint);border-color:var(--token-color-border-strong);box-shadow:var(--token-elevation-low-box-shadow)}.hds-dropdown-toggle-button--color-secondary.mock-hover,.hds-dropdown-toggle-button--color-secondary:hover{color:var(--token-color-foreground-primary);background-color:var(--token-color-surface-primary);border-color:var(--token-color-border-strong);cursor:pointer}.hds-dropdown-toggle-button--color-secondary.mock-focus,.hds-dropdown-toggle-button--color-secondary:focus{color:var(--token-color-foreground-primary);background-color:var(--token-color-surface-faint);border-color:var(--token-color-focus-action-internal)}.hds-dropdown-toggle-button--color-secondary.mock-focus::before,.hds-dropdown-toggle-button--color-secondary:focus::before{border-color:var(--token-color-focus-action-external)}.hds-dropdown-toggle-button--color-secondary.mock-active,.hds-dropdown-toggle-button--color-secondary:active{color:var(--token-color-foreground-primary);background-color:var(--token-color-surface-interactive-active);border-color:var(--token-color-border-strong);box-shadow:none}.hds-dropdown-toggle-button--color-secondary.mock-active::before,.hds-dropdown-toggle-button--color-secondary:active::before{border-color:transparent}.hds-dropdown-list-item--variant-separator::before,.hds-dropdown__header--with-divider{border-bottom:1px solid var(--token-color-border-primary)}.hds-dropdown-toggle-button--width-full{justify-content:space-between}.hds-dropdown-toggle-button__text{text-align:left}.hds-dropdown-toggle-button__icon{flex:none}.hds-dropdown-toggle-button__badge,.hds-dropdown-toggle-button__count{margin:-3px 0}.hds-dropdown-toggle-chevron{margin-left:auto;padding-left:2px}@media (prefers-reduced-motion:no-preference){.hds-accordion-item__button .flight-icon-chevron-down,.hds-dropdown-toggle-chevron .flight-icon-chevron-down{transition:transform .3s}}.hds-dropdown-toggle-button--is-open .hds-dropdown-toggle-chevron .flight-icon-chevron-down,.hds-dropdown-toggle-icon--is-open .hds-dropdown-toggle-chevron .flight-icon-chevron-down{transform:rotate(-180deg)}.hds-dropdown__content{display:flex;flex-direction:column;width:-moz-max-content;width:max-content;min-width:200px;max-width:400px;background-color:var(--token-color-surface-primary);border-radius:6px;box-shadow:var(--token-surface-high-box-shadow)}.hds-dropdown__content--fixed-width{min-width:initial;max-width:initial}.hds-dropdown__content--position-bottom-right{position:absolute;top:calc(100% + 4px);right:0;z-index:2}.hds-dropdown__content--position-bottom-left{position:absolute;top:calc(100% + 4px);left:0;z-index:2}.hds-dropdown__content--position-top-right{position:absolute;right:0;bottom:calc(100% + 4px);z-index:2}.hds-dropdown__content--position-top-left{position:absolute;bottom:calc(100% + 4px);left:0;z-index:2}.hds-dropdown__list{flex:1 1 auto;margin:0;padding:4px 0;overflow-y:auto;list-style:none;overscroll-behavior:contain}.hds-dropdown__footer,.hds-dropdown__header{position:relative;flex:none;padding:0 8px}.hds-dropdown__footer>.hds-link-standalone,.hds-dropdown__header>.hds-link-standalone{width:initial;margin:4px 0;padding:7px 8px}.hds-dropdown__footer>.hds-link-standalone::before,.hds-dropdown__header>.hds-link-standalone::before{top:0;bottom:0}.hds-dropdown__footer>.hds-button,.hds-dropdown__footer>.hds-form-text-input,.hds-dropdown__header>.hds-button,.hds-dropdown__header>.hds-form-text-input{margin:8px 0}.hds-dropdown__footer>.hds-button-set,.hds-dropdown__header>.hds-button-set{gap:8px;margin:8px 0}.hds-dropdown__footer--with-divider{border-top:1px solid var(--token-color-border-primary)}.hds-dropdown-list-item__copy-item-title{padding:2px 0 4px;color:var(--token-color-foreground-faint)}.hds-dropdown-list-item--variant-copy-item{width:100%;padding:10px 16px 12px}.hds-dropdown-list-item--variant-description{padding:2px 16px 4px;color:var(--token-color-foreground-faint)}.hds-dropdown-list-item--variant-generic{padding-right:16px;padding-left:16px}.hds-dropdown-list-item--variant-checkmark,.hds-dropdown-list-item--variant-interactive{position:relative;min-height:36px;isolation:isolate}.hds-dropdown-list-item--variant-checkmark button,.hds-dropdown-list-item--variant-interactive button{width:100%;background-color:transparent}.hds-dropdown-list-item--variant-checkmark button:hover,.hds-dropdown-list-item--variant-interactive button:hover{cursor:pointer}.hds-dropdown-list-item--variant-checkmark a,.hds-dropdown-list-item--variant-checkmark button,.hds-dropdown-list-item--variant-interactive a,.hds-dropdown-list-item--variant-interactive button{display:flex;align-items:flex-start;padding:7px 9px 7px 15px;text-decoration:none;border:1px solid transparent;outline-style:solid;outline-color:transparent}.hds-dropdown-list-item--variant-checkmark a::before,.hds-dropdown-list-item--variant-checkmark button::before,.hds-dropdown-list-item--variant-interactive a::before,.hds-dropdown-list-item--variant-interactive button::before{position:absolute;top:6px;bottom:6px;left:4px;z-index:-1;width:2px;border-radius:1px;content:""}.hds-dropdown-list-item--variant-checkmark a::after,.hds-dropdown-list-item--variant-checkmark button::after,.hds-dropdown-list-item--variant-interactive a::after,.hds-dropdown-list-item--variant-interactive button::after{position:absolute;top:0;right:4px;bottom:0;left:10px;z-index:-1;border-radius:5px;content:""}.hds-dropdown-list-item--variant-checkmark a.mock-hover,.hds-dropdown-list-item--variant-checkmark a:hover,.hds-dropdown-list-item--variant-checkmark button.mock-hover,.hds-dropdown-list-item--variant-checkmark button:hover,.hds-dropdown-list-item--variant-interactive a.mock-hover,.hds-dropdown-list-item--variant-interactive a:hover,.hds-dropdown-list-item--variant-interactive button.mock-hover,.hds-dropdown-list-item--variant-interactive button:hover{color:var(--current-color-hover)}.hds-dropdown-list-item--variant-checkmark a.mock-focus,.hds-dropdown-list-item--variant-checkmark a:focus,.hds-dropdown-list-item--variant-checkmark a:focus-visible,.hds-dropdown-list-item--variant-checkmark button.mock-focus,.hds-dropdown-list-item--variant-checkmark button:focus,.hds-dropdown-list-item--variant-checkmark button:focus-visible,.hds-dropdown-list-item--variant-interactive a.mock-focus,.hds-dropdown-list-item--variant-interactive a:focus,.hds-dropdown-list-item--variant-interactive a:focus-visible,.hds-dropdown-list-item--variant-interactive button.mock-focus,.hds-dropdown-list-item--variant-interactive button:focus,.hds-dropdown-list-item--variant-interactive button:focus-visible{color:var(--current-color-focus)}.hds-dropdown-list-item--variant-checkmark a.mock-hover::before,.hds-dropdown-list-item--variant-checkmark a:hover::before,.hds-dropdown-list-item--variant-checkmark button.mock-hover::before,.hds-dropdown-list-item--variant-checkmark button:hover::before,.hds-dropdown-list-item--variant-interactive a.mock-hover::before,.hds-dropdown-list-item--variant-interactive a:hover::before,.hds-dropdown-list-item--variant-interactive button.mock-hover::before,.hds-dropdown-list-item--variant-interactive button:hover::before{background-color:currentColor}.hds-dropdown-list-item--variant-checkmark a.mock-focus::after,.hds-dropdown-list-item--variant-checkmark a:focus::after,.hds-dropdown-list-item--variant-checkmark button.mock-focus::after,.hds-dropdown-list-item--variant-checkmark button:focus::after,.hds-dropdown-list-item--variant-interactive a.mock-focus::after,.hds-dropdown-list-item--variant-interactive a:focus::after,.hds-dropdown-list-item--variant-interactive button.mock-focus::after,.hds-dropdown-list-item--variant-interactive button:focus::after{left:4px;box-shadow:var(--current-focus-ring-box-shadow)}.hds-dropdown-list-item--variant-checkmark a:focus:not(:focus-visible)::after,.hds-dropdown-list-item--variant-checkmark button:focus:not(:focus-visible)::after,.hds-dropdown-list-item--variant-interactive a:focus:not(:focus-visible)::after,.hds-dropdown-list-item--variant-interactive button:focus:not(:focus-visible)::after{background-color:transparent;box-shadow:none}.hds-dropdown-list-item--variant-checkmark a:focus-visible::after,.hds-dropdown-list-item--variant-checkmark button:focus-visible::after,.hds-dropdown-list-item--variant-interactive a:focus-visible::after,.hds-dropdown-list-item--variant-interactive button:focus-visible::after{left:4px;box-shadow:var(--current-focus-ring-box-shadow)}.hds-dropdown-list-item--variant-checkmark a.mock-focus.mock-active::after,.hds-dropdown-list-item--variant-checkmark a:focus-visible:active::after,.hds-dropdown-list-item--variant-checkmark a:focus:active::after,.hds-dropdown-list-item--variant-checkmark button.mock-focus.mock-active::after,.hds-dropdown-list-item--variant-checkmark button:focus-visible:active::after,.hds-dropdown-list-item--variant-checkmark button:focus:active::after,.hds-dropdown-list-item--variant-interactive a.mock-focus.mock-active::after,.hds-dropdown-list-item--variant-interactive a:focus-visible:active::after,.hds-dropdown-list-item--variant-interactive a:focus:active::after,.hds-dropdown-list-item--variant-interactive button.mock-focus.mock-active::after,.hds-dropdown-list-item--variant-interactive button:focus-visible:active::after,.hds-dropdown-list-item--variant-interactive button:focus:active::after{left:10px;background-color:var(--current-background-color);box-shadow:none}.hds-dropdown-list-item--variant-checkmark a.mock-active,.hds-dropdown-list-item--variant-checkmark a:active,.hds-dropdown-list-item--variant-checkmark button.mock-active,.hds-dropdown-list-item--variant-checkmark button:active,.hds-dropdown-list-item--variant-interactive a.mock-active,.hds-dropdown-list-item--variant-interactive a:active,.hds-dropdown-list-item--variant-interactive button.mock-active,.hds-dropdown-list-item--variant-interactive button:active{color:var(--current-color-active)}.hds-dropdown-list-item--variant-checkmark a.mock-active::before,.hds-dropdown-list-item--variant-checkmark a:active::before,.hds-dropdown-list-item--variant-checkmark button.mock-active::before,.hds-dropdown-list-item--variant-checkmark button:active::before,.hds-dropdown-list-item--variant-interactive a.mock-active::before,.hds-dropdown-list-item--variant-interactive a:active::before,.hds-dropdown-list-item--variant-interactive button.mock-active::before,.hds-dropdown-list-item--variant-interactive button:active::before{background-color:currentColor}.hds-dropdown-list-item__interactive-icon{margin-top:2px;margin-right:8px}.hds-dropdown-list-item__interactive-text{flex:1;text-align:left}.hds-dropdown-list-item--color-action a,.hds-dropdown-list-item--color-action button{color:var(--token-color-foreground-primary);--current-color-hover:var(--token-color-foreground-action-hover);--current-color-focus:var(--token-color-foreground-action-active);--current-color-active:var(--token-color-foreground-action-active)}.hds-dropdown-list-item--color-action a::after,.hds-dropdown-list-item--color-action button::after{--current-focus-ring-box-shadow:var(--token-focus-ring-action-box-shadow)}.hds-dropdown-list-item--color-critical a,.hds-dropdown-list-item--color-critical button{color:var(--token-color-foreground-critical);--current-color-hover:var(--token-color-palette-red-300);--current-color-focus:var(--token-color-palette-red-400);--current-color-active:var(--token-color-palette-red-400)}.hds-dropdown-list-item--color-critical a::after,.hds-dropdown-list-item--color-critical button::after{--current-background-color:var(--token-color-surface-critical);--current-focus-ring-box-shadow:var(--token-focus-ring-critical-box-shadow)}.hds-dropdown-list-item__interactive-loading-wrapper{display:flex;align-items:center;padding:8px 10px 8px 16px}.hds-dropdown-list-item__interactive-loading-wrapper .hds-dropdown-list-item__interactive-text{color:var(--token-color-foreground-faint)}.hds-dropdown-list-item__interactive-loading-wrapper .hds-dropdown-list-item__interactive-icon{color:var(--token-color-foreground-primary)}.hds-dropdown-list-item--variant-separator{position:relative;width:100%;height:4px}.hds-dropdown-list-item--variant-separator::before{position:absolute;right:6px;bottom:0;left:6px;content:""}.hds-dropdown-list-item--variant-title{padding:10px 16px 4px;color:var(--token-color-foreground-strong)}.hds-dropdown-list-item--variant-checkmark-selected .hds-dropdown-list-item__interactive{color:var(--token-color-foreground-action)}.hds-dropdown-list-item__checkmark{display:flex;width:16px;height:20px;margin-left:8px}.hds-dropdown-list-item__checkmark-icon{align-self:center}.hds-dropdown-list-item__interactive[disabled],.hds-dropdown-list-item__interactive[disabled]:hover{color:var(--token-color-foreground-disabled);cursor:not-allowed}.hds-dropdown-list-item--variant-checkbox,.hds-dropdown-list-item--variant-radio{display:flex;align-items:self-start;padding:8px 16px}.hds-dropdown-list-item--variant-checkbox .hds-dropdown-list-item__control,.hds-dropdown-list-item--variant-radio .hds-dropdown-list-item__control{flex-shrink:0;margin-top:2px;margin-right:8px}.hds-dropdown-list-item--variant-checkbox .hds-dropdown-list-item__control[disabled]~.hds-dropdown-list-item__count,.hds-dropdown-list-item--variant-checkbox .hds-dropdown-list-item__control[disabled]~.hds-dropdown-list-item__icon,.hds-dropdown-list-item--variant-checkbox .hds-dropdown-list-item__control[disabled]~.hds-dropdown-list-item__text-content,.hds-dropdown-list-item--variant-radio .hds-dropdown-list-item__control[disabled]~.hds-dropdown-list-item__count,.hds-dropdown-list-item--variant-radio .hds-dropdown-list-item__control[disabled]~.hds-dropdown-list-item__icon,.hds-dropdown-list-item--variant-radio .hds-dropdown-list-item__control[disabled]~.hds-dropdown-list-item__text-content{color:var(--token-color-foreground-disabled)}.hds-dropdown-list-item--variant-checkbox .hds-dropdown-list-item__label,.hds-dropdown-list-item--variant-radio .hds-dropdown-list-item__label{display:flex;flex-grow:1;align-items:flex-start;color:var(--token-color-foreground-primary)}.hds-dropdown-list-item--variant-checkbox .hds-dropdown-list-item__icon,.hds-dropdown-list-item--variant-radio .hds-dropdown-list-item__icon{margin-top:2px;margin-right:4px}.hds-dropdown-list-item__count{margin-left:auto;padding-left:8px;color:var(--token-color-foreground-faint);line-height:20px}.hds-dropdown-list-item--variant-checkbox .hds-badge,.hds-dropdown-list-item--variant-checkmark .hds-badge,.hds-dropdown-list-item--variant-radio .hds-badge{vertical-align:bottom}.hds-flyout{z-index:49;flex-direction:column;height:100vh;max-height:100vh;margin:0;padding:0;background:var(--token-color-surface-primary);border:none;box-shadow:0 2px 3px 0 rgba(59,61,69,.2509803922),0 12px 24px 0 rgba(59,61,69,.3490196078)}.hds-flyout__footer .hds-button-set .hds-button--color-tertiary,.hds-modal__footer .hds-button-set .hds-button--color-tertiary{margin-left:auto}.hds-flyout__body,.hds-flyout__footer{border-top:1px solid var(--token-color-border-primary)}.hds-flyout[open]{position:fixed;display:flex}.hds-flyout::backdrop{display:none}.hds-flyout__overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:49;background:var(--token-color-palette-neutral-700);opacity:.5}.hds-form-masked-input__toggle-button,.hds-form-text-input__visibility-toggle{right:calc(var(--token-form-control-padding) - var(--token-form-control-border-width))}.hds-flyout__header{display:flex;flex:none;gap:16px;align-items:flex-start;padding:16px 24px;color:var(--token-color-foreground-strong)}.hds-flyout__icon{flex:none;align-self:center}.hds-flyout__title{flex-grow:1}.hds-flyout__tagline{margin-bottom:4px}.hds-flyout__dismiss{align-self:center}.hds-flyout__description{padding:0 24px 16px}.hds-flyout__body{flex:1 1 auto;padding:24px;overflow-y:auto;overscroll-behavior:contain}.hds-flyout__footer{flex:none;padding:16px 24px;background:var(--token-color-surface-faint)}.hds-flyout--size-medium{width:min(480px,100vw - 40px);max-width:calc(100vw - 40px)}.hds-flyout--size-medium[open]{margin-left:calc(100% - min(480px,100vw - 40px))}.hds-flyout--size-large{width:min(720px,100vw - 40px);max-width:calc(100vw - 40px)}.hds-flyout--size-large[open]{margin-left:calc(100% - min(720px,100vw - 40px))}.hds-form-label{display:block;width:-moz-max-content;width:max-content;max-width:100%;color:var(--token-form-label-color)}.hds-form-label .hds-badge{vertical-align:initial}.hds-form-helper-text{display:block;color:var(--token-form-helper-text-color)}.hds-form-error{display:flex;gap:8px;align-items:flex-start;color:var(--token-form-error-color)}.hds-form-error__icon{flex:none;width:var(--token-form-error-icon-size);height:var(--token-form-error-icon-size);margin:2px 0}.hds-form-error__content{flex:1 1 auto}.hds-form-error__message{margin:0}.hds-form-field--layout-vertical{display:grid;justify-items:start;width:100%}.hds-form-field--layout-vertical .hds-form-field__label{width:-moz-fit-content;width:fit-content}.hds-form-field--layout-vertical .hds-form-field__helper-text:not(:first-child){margin-top:4px}.hds-form-field--layout-vertical .hds-form-field__helper-text+.hds-form-helper-text{margin-top:2px}.hds-form-field--layout-vertical .hds-form-field__control{display:flex;justify-self:stretch}.hds-form-field--layout-vertical .hds-form-field__control:not(:first-child){margin-top:8px}.hds-form-field--layout-vertical .hds-form-field__control:not(:last-child){margin-bottom:8px}.hds-form-field--layout-flag{display:grid;grid-auto-flow:row;grid-template-areas:"control label" "control helper-text" "control error";grid-template-rows:auto auto auto;grid-template-columns:auto 1fr;justify-items:start}.hds-form-field--layout-flag .hds-form-field__label{grid-area:label;width:-moz-fit-content;width:fit-content}.hds-form-field--layout-flag .hds-form-field__helper-text{grid-area:helper-text;margin-top:4px}.hds-form-field--layout-flag .hds-form-field__control{display:flex;grid-area:control}.hds-form-field--layout-flag .hds-form-field__control:not(:only-child){margin-top:2px;margin-right:8px}.hds-form-field--layout-flag .hds-form-field__error{grid-area:error;margin-top:4px}.hds-form-file-input{margin:-4px 0 -4px -4px;padding:3px 0 3px 3px;color:var(--token-color-foreground-primary)}.hds-form-file-input:focus,.hds-form-file-input:focus-visible{outline:0}.hds-form-file-input::file-selector-button{min-height:36px;margin-right:16px;padding:7px 16px 7px 37px;color:var(--token-color-foreground-primary);font:inherit;background-color:var(--token-color-surface-faint);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none' viewBox='0 0 16 16'%3E%3Cg fill='%233b3d45'%3E%3Cpath d='M4.24 5.8a.75.75 0 001.06-.04l1.95-2.1v6.59a.75.75 0 001.5 0V3.66l1.95 2.1a.75.75 0 101.1-1.02l-3.25-3.5a.75.75 0 00-1.101.001L4.2 4.74a.75.75 0 00.04 1.06z'/%3E%3Cpath d='M1.75 9a.75.75 0 01.75.75v3c0 .414.336.75.75.75h9.5a.75.75 0 00.75-.75v-3a.75.75 0 011.5 0v3A2.25 2.25 0 0112.75 15h-9.5A2.25 2.25 0 011 12.75v-3A.75.75 0 011.75 9z'/%3E%3C/g%3E%3C/svg%3E");background-repeat:no-repeat;background-position:15px 50%;background-size:var(--token-form-text-input-background-image-size);border:1px solid var(--token-color-border-strong);border-radius:5px;box-shadow:var(--token-elevation-low-box-shadow);cursor:pointer}.hds-form-group__legend~.hds-form-group__control-fields-wrapper .hds-form-label,.hds-link-standalone{font-weight:var(--token-typography-font-weight-regular)}.hds-form-file-input.mock-hover::file-selector-button,.hds-form-file-input::file-selector-button:hover{color:var(--token-color-foreground-primary);background-color:var(--token-color-surface-primary);border-color:var(--token-color-border-strong)}.hds-form-file-input.mock-focus::file-selector-button,.hds-form-file-input:focus-within::file-selector-button{color:var(--token-color-foreground-primary);background-color:var(--token-color-surface-faint);border-color:var(--token-color-focus-action-internal);outline:var(--token-color-focus-action-external) solid 3px}.hds-form-file-input:not(:focus,.mock-focus)::file-selector-button{border-color:var(--token-color-border-strong);outline:0}.hds-form-file-input.mock-active::file-selector-button,.hds-form-file-input::file-selector-button:active{color:var(--token-color-foreground-primary);background-color:var(--token-color-surface-interactive-active);border-color:var(--token-color-border-strong);box-shadow:none}.hds-form-file-input.mock-disabled,.hds-form-file-input.mock-disabled:focus,.hds-form-file-input.mock-disabled:hover,.hds-form-file-input:disabled,.hds-form-file-input:disabled:focus,.hds-form-file-input:disabled:hover,.hds-form-file-input[disabled],.hds-form-file-input[disabled]:focus,.hds-form-file-input[disabled]:hover{color:var(--token-color-foreground-disabled)}.hds-form-file-input.mock-disabled::file-selector-button,.hds-form-file-input.mock-disabled:focus::file-selector-button,.hds-form-file-input.mock-disabled:hover::file-selector-button,.hds-form-file-input:disabled::file-selector-button,.hds-form-file-input:disabled:focus::file-selector-button,.hds-form-file-input:disabled:hover::file-selector-button,.hds-form-file-input[disabled]::file-selector-button,.hds-form-file-input[disabled]:focus::file-selector-button,.hds-form-file-input[disabled]:hover::file-selector-button{color:var(--token-color-foreground-disabled);background-color:var(--token-color-surface-faint);border-color:var(--token-color-border-primary);box-shadow:none;cursor:not-allowed;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none' viewBox='0 0 16 16'%3E%3Cg fill='%238c909c'%3E%3Cpath d='M4.24 5.8a.75.75 0 001.06-.04l1.95-2.1v6.59a.75.75 0 001.5 0V3.66l1.95 2.1a.75.75 0 101.1-1.02l-3.25-3.5a.75.75 0 00-1.101.001L4.2 4.74a.75.75 0 00.04 1.06z'/%3E%3Cpath d='M1.75 9a.75.75 0 01.75.75v3c0 .414.336.75.75.75h9.5a.75.75 0 00.75-.75v-3a.75.75 0 011.5 0v3A2.25 2.25 0 0112.75 15h-9.5A2.25 2.25 0 011 12.75v-3A.75.75 0 011.75 9z'/%3E%3C/g%3E%3C/svg%3E")}.hds-form-file-input.mock-disabled::file-selector-button::before,.hds-form-file-input.mock-disabled:focus::file-selector-button::before,.hds-form-file-input.mock-disabled:hover::file-selector-button::before,.hds-form-file-input:disabled::file-selector-button::before,.hds-form-file-input:disabled:focus::file-selector-button::before,.hds-form-file-input:disabled:hover::file-selector-button::before,.hds-form-file-input[disabled]::file-selector-button::before,.hds-form-file-input[disabled]:focus::file-selector-button::before,.hds-form-file-input[disabled]:hover::file-selector-button::before{border-color:transparent}.hds-form-legend{display:block;color:var(--token-form-legend-color)}.hds-form-legend .hds-badge{vertical-align:initial}.hds-form-group{display:block;margin:0;padding:0;border:none}.hds-form-checkbox,.hds-form-radio{background-position:center center;border-style:solid;-moz-appearance:none}.hds-form-group__legend{margin:0 0 4px;padding:0}.hds-form-group--layout-vertical .hds-form-group__control-fields-wrapper{display:flex;flex-direction:column}.hds-form-group--layout-vertical .hds-form-group__control-field+.hds-form-group__control-field{margin-top:12px}.hds-form-group--layout-horizontal .hds-form-group__control-fields-wrapper{display:flex;flex-wrap:wrap;margin-bottom:-4px}.hds-form-group--layout-horizontal .hds-form-group__control-field{margin-right:16px;margin-bottom:4px}.hds-form-group__helper-text{margin-bottom:8px}.hds-form-group__error{margin-top:8px}.hds-form-indicator--optional{color:var(--token-form-indicator-optional-color)}.hds-form-checkbox{width:var(--token-form-checkbox-size);height:var(--token-form-checkbox-size);margin:0;padding:0;background-size:var(--token-form-checkbox-background-image-size) var(--token-form-checkbox-background-image-size);border-width:var(--token-form-checkbox-border-width);border-radius:var(--token-form-checkbox-border-radius);cursor:pointer;-webkit-appearance:none;appearance:none}.hds-form-checkbox:not(:checked,:indeterminate){background-color:var(--token-form-control-base-surface-color-default);border-color:var(--token-form-control-base-border-color-default)}.hds-form-checkbox:checked,.hds-form-checkbox:indeterminate{background-color:var(--token-form-control-checked-surface-color-default);border-color:var(--token-form-control-checked-border-color-default)}.hds-form-checkbox:checked{background-image:var(--token-form-checkbox-background-image-data-url)}.hds-form-checkbox:indeterminate{background-image:var(--token-form-checkbox-background-image-data-url-indeterminate)}.hds-form-checkbox.mock-hover:not(:checked,:indeterminate),.hds-form-checkbox:hover:not(:checked,:indeterminate){background-color:var(--token-form-control-base-surface-color-hover);border-color:var(--token-form-control-base-border-color-hover)}.hds-form-checkbox.mock-hover:checked,.hds-form-checkbox.mock-hover:indeterminate,.hds-form-checkbox:hover:checked,.hds-form-checkbox:hover:indeterminate{background-color:var(--token-form-control-checked-border-color-default);border-color:var(--token-form-control-checked-border-color-hover)}.hds-form-checkbox:disabled:checked,.hds-form-checkbox:disabled:indeterminate,.hds-form-checkbox:disabled:not(:checked,:indeterminate){background-color:var(--token-form-control-disabled-surface-color);border-color:var(--token-form-control-disabled-border-color);box-shadow:none;cursor:not-allowed}.hds-form-checkbox.mock-focus,.hds-form-checkbox:focus{outline:var(--token-color-focus-action-external) solid 3px;outline-offset:1px}.hds-form-checkbox:disabled:checked{background-image:var(--token-form-checkbox-background-image-data-url-disabled)}.hds-form-checkbox:disabled:indeterminate{background-image:var(--token-form-checkbox-background-image-data-url-indeterminate-disabled);background-repeat:no-repeat}.hds-form-masked-input{position:relative;display:grid;grid-template-areas:"input copy-button";grid-template-columns:1fr auto;width:100%}.hds-form-masked-input .hds-form-masked-input__control{grid-area:input;padding-right:calc(var(--token-form-control-padding) + 24px)}.hds-form-masked-input--is-masked .hds-form-masked-input__control{-webkit-text-security:disc}.hds-form-masked-input--is-not-masked .hds-form-masked-input__control{-webkit-text-security:none}.hds-form-masked-input__toggle-button{position:absolute;top:calc(var(--token-form-control-padding) - var(--token-form-control-border-width));grid-area:input}.hds-form-masked-input__copy-button{grid-area:copy-button;align-self:flex-start;margin-left:8px}.hds-form-radio{width:var(--token-form-radio-size);height:var(--token-form-radio-size);margin:0;padding:0;background-size:var(--token-form-radio-background-image-size) var(--token-form-radio-background-image-size);border-width:var(--token-form-radio-border-width);border-radius:50%;cursor:pointer;-webkit-appearance:none;appearance:none}.hds-form-radio:not(:checked){background-color:var(--token-form-control-base-surface-color-default);border-color:var(--token-form-control-base-border-color-default);box-shadow:var(--token-elevation-inset-box-shadow)}.hds-form-radio:checked{background-color:var(--token-form-control-checked-surface-color-default);background-image:var(--token-form-radio-background-image-data-url);border-color:var(--token-form-control-checked-border-color-default)}.hds-form-radio.mock-hover:not(:checked),.hds-form-radio:hover:not(:checked){background-color:var(--token-form-control-base-surface-color-hover);border-color:var(--token-form-control-base-border-color-hover)}.hds-form-radio.mock-hover:checked,.hds-form-radio:hover:checked{background-color:var(--token-form-control-checked-border-color-default);border-color:var(--token-form-control-checked-border-color-hover)}.hds-form-radio:disabled:checked,.hds-form-radio:disabled:not(:checked){background-color:var(--token-form-control-disabled-surface-color);border-color:var(--token-form-control-disabled-border-color);box-shadow:none;cursor:not-allowed}.hds-form-radio.mock-focus,.hds-form-radio:focus{outline:var(--token-color-focus-action-external) solid 3px;outline-offset:1px}.hds-form-radio:disabled:checked{background-image:var(--token-form-radio-background-image-data-url-disabled)}.hds-form-group--radio-cards .hds-form-group__control-fields-wrapper{margin:calc(-1 * var(--token-form-radiocard-group-gap)/ 2)}.hds-form-group--radio-cards .hds-form-group__legend{margin-bottom:12px}.hds-form-group--radio-cards .hds-form-radio-card{margin:calc(var(--token-form-radiocard-group-gap)/ 2)}.hds-form-group--radio-cards .hds-form-radio-card--has-fixed-width{flex:1 0 100%}.hds-form-radio-card{display:flex;flex-direction:column;background-color:var(--token-color-surface-primary);border:var(--token-form-radiocard-border-width) solid var(--token-color-border-primary);border-radius:var(--token-form-radiocard-border-radius);box-shadow:var(--token-elevation-mid-box-shadow);cursor:pointer}.hds-form-radio-card .hds-form-radio-card__control{outline-color:transparent}.hds-form-radio-card.mock-hover,.hds-form-radio-card:hover{box-shadow:var(--token-elevation-high-box-shadow);transition:var(--token-form-radiocard-transition-duration)}.hds-form-radio-card.mock-focus,.hds-form-radio-card:focus-within{border-color:var(--token-color-focus-action-internal);box-shadow:0 0 0 3px var(--token-color-focus-action-external)}.hds-form-radio-card--checked,.hds-form-radio-card.mock-checked{border-color:var(--token-color-focus-action-internal)}.hds-form-radio-card--checked .hds-form-radio-card__control-wrapper,.hds-form-radio-card.mock-checked .hds-form-radio-card__control-wrapper{background-color:var(--token-color-surface-action);border-color:var(--token-color-border-action)}.hds-form-radio-card--disabled,.hds-form-radio-card--disabled .hds-form-radio-card__control-wrapper,.hds-form-radio-card.mock-disabled,.hds-form-radio-card.mock-disabled .hds-form-radio-card__control-wrapper{background-color:var(--token-color-surface-interactive-disabled);border-color:var(--token-color-border-primary)}.hds-form-radio-card--disabled,.hds-form-radio-card.mock-disabled{box-shadow:none;cursor:not-allowed}.hds-form-radio-card--align-left{text-align:left}.hds-form-radio-card--align-center{text-align:center}.hds-form-radio-card--align-center .flight-icon{margin:auto}.hds-form-radio-card--control-bottom .hds-form-radio-card__control-wrapper{border-top-width:var(--token-form-radiocard-border-width);border-top-style:solid;border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.hds-form-radio-card--control-left{flex-direction:row-reverse}.hds-form-radio-card--control-left .hds-form-radio-card__control-wrapper{display:flex;align-items:center;border-right-width:var(--token-form-radiocard-border-width);border-right-style:solid;border-top-left-radius:inherit;border-bottom-left-radius:inherit}.hds-form-radio-card__content{flex:1;padding:var(--token-form-radiocard-content-padding)}.hds-form-radio-card__content .hds-badge{margin-bottom:12px}.hds-form-radio-card__label{display:block;margin:8px 0;color:var(--token-form-label-color);overflow-wrap:break-word}.hds-form-radio-card__label:first-child{margin-top:0}.hds-form-radio-card__description{display:block;color:var(--token-color-foreground-primary)}.hds-form-radio-card__control-wrapper{padding:var(--token-form-radiocard-control-padding);background-color:var(--token-color-surface-faint);border-color:var(--token-color-border-primary)}.hds-form-select,.hds-form-text-input{border:var(--token-form-control-border-width) solid var(--token-form-control-base-border-color-default)}.hds-form-radio-card__control{display:block;margin:auto}.hds-form-select{max-width:100%;padding:var(--token-form-control-padding);padding-right:calc(var(--token-form-control-padding) + 24px);color:var(--token-form-control-base-foreground-value-color);background-color:var(--token-form-control-base-surface-color-default);background-image:var(--token-form-select-background-image-data-url);background-repeat:no-repeat;background-position:right var(--token-form-select-background-image-position-right-x) top var(--token-form-select-background-image-position-top-y);background-size:var(--token-form-select-background-image-size) var(--token-form-select-background-image-size);border-radius:var(--token-form-control-border-radius);box-shadow:var(--token-elevation-low-box-shadow);-webkit-appearance:none;-moz-appearance:none;appearance:none}.hds-form-select.mock-hover,.hds-form-select:hover{border-color:var(--token-form-control-base-border-color-hover)}.hds-form-select.mock-focus,.hds-form-select:focus{border-color:var(--token-color-focus-action-internal);outline:var(--token-color-focus-action-external) solid 3px;outline-offset:0}.hds-form-select:disabled{color:var(--token-form-control-disabled-foreground-color);background-color:var(--token-form-control-disabled-surface-color);background-image:var(--token-form-select-background-image-data-url-disabled);border-color:var(--token-form-control-disabled-border-color);box-shadow:none;cursor:not-allowed}.hds-form-select.hds-form-select--is-invalid{border-color:var(--token-form-control-invalid-border-color-default)}.hds-form-select.hds-form-select--is-invalid.mock-hover,.hds-form-select.hds-form-select--is-invalid:hover{border-color:var(--token-form-control-invalid-border-color-hover)}.hds-form-select.hds-form-select--is-invalid.mock-focus,.hds-form-select.hds-form-select--is-invalid:focus{border-color:var(--token-color-focus-critical-internal);outline-color:var(--token-color-focus-critical-external)}.hds-form-select[multiple],.hds-form-select[size]{background:0 0}.hds-form-select[multiple] option,.hds-form-select[size] option{margin:2px auto;border-radius:3px}.hds-form-select[multiple] option:hover,.hds-form-select[size] option:hover{color:var(--token-color-foreground-action)}.hds-form-select[multiple] option:disabled,.hds-form-select[size] option:disabled{color:var(--token-color-foreground-disabled)}.hds-form-select[multiple] option:checked,.hds-form-select[size] option:checked{color:var(--token-color-foreground-high-contrast);background:var(--token-color-palette-blue-200)}.hds-form-text-input,.hds-form-textarea{background-color:var(--token-form-control-base-surface-color-default);max-width:100%}.hds-form-select[multiple] optgroup,.hds-form-select[size] optgroup{color:var(--token-color-foreground-strong);font-weight:var(--token-typography-font-weight-semibold);font-style:normal}.hds-form-text-input{width:100%;padding:var(--token-form-control-padding);color:var(--token-form-control-base-foreground-value-color);border-radius:var(--token-form-control-border-radius);box-shadow:var(--token-elevation-inset-box-shadow)}.hds-form-text-input ::-moz-placeholder{color:var(--token-form-control-base-foreground-placeholder-color)}.hds-form-text-input ::placeholder{color:var(--token-form-control-base-foreground-placeholder-color)}.hds-form-text-input.mock-hover,.hds-form-text-input:hover{border-color:var(--token-form-control-base-border-color-hover)}.hds-form-text-input.mock-focus,.hds-form-text-input:focus{border-color:var(--token-color-focus-action-internal);outline:var(--token-color-focus-action-external) solid 3px;outline-offset:0}.hds-form-text-input:-moz-read-only{color:var(--token-form-control-readonly-foreground-color);background-color:var(--token-form-control-readonly-surface-color);border-color:var(--token-form-control-readonly-border-color);box-shadow:none}.hds-form-text-input:read-only{color:var(--token-form-control-readonly-foreground-color);background-color:var(--token-form-control-readonly-surface-color);border-color:var(--token-form-control-readonly-border-color);box-shadow:none}.hds-form-text-input:disabled{color:var(--token-form-control-disabled-foreground-color);background-color:var(--token-form-control-disabled-surface-color);border-color:var(--token-form-control-disabled-border-color);box-shadow:none;cursor:not-allowed}.hds-form-text-input.hds-form-text-input--is-invalid{border-color:var(--token-form-control-invalid-border-color-default)}.hds-form-text-input.hds-form-text-input--is-invalid.mock-hover,.hds-form-text-input.hds-form-text-input--is-invalid:hover{border-color:var(--token-form-control-invalid-border-color-hover)}.hds-form-text-input.hds-form-text-input--is-invalid.mock-focus,.hds-form-text-input.hds-form-text-input--is-invalid:focus{border-color:var(--token-color-focus-critical-internal);outline-color:var(--token-color-focus-critical-external)}.hds-form-text-input__wrapper{position:relative;width:100%}.hds-form-text-input--has-visibility-toggle{padding-right:calc(var(--token-form-control-padding) + 24px)}.hds-form-text-input__visibility-toggle{position:absolute;top:calc(var(--token-form-control-padding) - var(--token-form-control-border-width))}.hds-form-text-input[type=date],.hds-form-text-input[type=datetime-local],.hds-form-text-input[type=time]{width:initial}.hds-form-text-input[type=date]:disabled::-webkit-calendar-picker-indicator,.hds-form-text-input[type=datetime-local]:disabled::-webkit-calendar-picker-indicator,.hds-form-text-input[type=time]:disabled::-webkit-calendar-picker-indicator{visibility:visible;opacity:.5}.hds-form-text-input[type=date][readonly]::-webkit-calendar-picker-indicator,.hds-form-text-input[type=datetime-local][readonly]::-webkit-calendar-picker-indicator,.hds-form-text-input[type=time][readonly]::-webkit-calendar-picker-indicator{visibility:visible}.hds-form-text-input[type=date]::-webkit-calendar-picker-indicator,.hds-form-text-input[type=datetime-local]::-webkit-calendar-picker-indicator{background-image:var(--token-form-text-input-background-image-data-url-date);background-position:center center;background-size:var(--token-form-text-input-background-image-size)}.hds-form-text-input[type=time]::-webkit-calendar-picker-indicator{background-image:var(--token-form-text-input-background-image-data-url-time);background-position:center center;background-size:var(--token-form-text-input-background-image-size)}.hds-form-text-input[type=search]{padding-left:calc(var(--token-form-control-padding) + 24px);background-image:var(--token-form-text-input-background-image-data-url-search);background-repeat:no-repeat;background-position:var(--token-form-text-input-background-image-position-x) 50%;background-size:var(--token-form-text-input-background-image-size)}.hds-form-text-input[type=search]::-webkit-search-cancel-button{width:var(--token-form-text-input-background-image-size);height:var(--token-form-text-input-background-image-size);background-image:var(--token-form-text-input-background-image-data-url-search-cancel);background-position:center center;background-size:var(--token-form-text-input-background-image-size);-webkit-appearance:none}.hds-form-text-input[type=search].hds-form-text-input--is-loading{background-image:var(--token-form-text-input-background-image-data-url-search-loading)}.hds-form-textarea{width:100%;min-height:36px;padding:var(--token-form-control-padding);color:var(--token-form-control-base-foreground-value-color);border:var(--token-form-control-border-width) solid var(--token-form-control-base-border-color-default);border-radius:var(--token-form-control-border-radius);box-shadow:var(--token-elevation-inset-box-shadow);resize:vertical}.hds-form-textarea ::-moz-placeholder{color:var(--token-form-control-base-foreground-placeholder-color)}.hds-form-textarea ::placeholder{color:var(--token-form-control-base-foreground-placeholder-color)}.hds-form-textarea.mock-hover,.hds-form-textarea:hover{border-color:var(--token-form-control-base-border-color-hover)}.hds-form-textarea.mock-focus,.hds-form-textarea:focus{border-color:var(--token-color-focus-action-internal);outline:var(--token-color-focus-action-external) solid 3px;outline-offset:0}.hds-form-textarea:-moz-read-only{color:var(--token-form-control-readonly-foreground-color);background-color:var(--token-form-control-readonly-surface-color);border-color:var(--token-form-control-readonly-border-color);box-shadow:none}.hds-form-textarea:read-only{color:var(--token-form-control-readonly-foreground-color);background-color:var(--token-form-control-readonly-surface-color);border-color:var(--token-form-control-readonly-border-color);box-shadow:none}.hds-form-textarea:disabled{color:var(--token-form-control-disabled-foreground-color);background-color:var(--token-form-control-disabled-surface-color);border-color:var(--token-form-control-disabled-border-color);box-shadow:none;cursor:not-allowed}.hds-form-textarea.hds-form-textarea--is-invalid{border-color:var(--token-form-control-invalid-border-color-default)}.hds-form-textarea.hds-form-textarea--is-invalid.mock-hover,.hds-form-textarea.hds-form-textarea--is-invalid:hover{border-color:var(--token-form-control-invalid-border-color-hover)}.hds-form-textarea.hds-form-textarea--is-invalid.mock-focus,.hds-form-textarea.hds-form-textarea--is-invalid:focus{border-color:var(--token-color-focus-critical-internal);outline-color:var(--token-color-focus-critical-external)}.hds-form-toggle{position:relative;isolation:isolate}.hds-form-toggle__control{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;display:block;height:100%;margin:0;padding:0;color:transparent;background-color:transparent;border:none;outline:0;cursor:pointer;opacity:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.hds-form-toggle__control:disabled{cursor:not-allowed}.hds-form-toggle__facade{position:relative;display:block;width:var(--token-form-toggle-width);height:var(--token-form-toggle-height);background-image:var(--token-form-toggle-background-image-data-url);background-repeat:no-repeat;background-position:var(--token-form-toggle-background-image-position-x) 50%;background-size:var(--token-form-toggle-background-image-size) var(--token-form-toggle-background-image-size);border:var(--token-form-radio-border-width) solid var(--border-color);border-radius:calc(var(--token-form-toggle-height)/ 2)}.hds-form-toggle__facade::after{position:absolute;top:calc(var(--token-form-radio-border-width) * -1);left:calc(var(--token-form-radio-border-width) * -1);width:var(--token-form-toggle-thumb-size);height:var(--token-form-toggle-thumb-size);background-color:var(--token-form-control-base-surface-color-default);border:var(--token-form-radio-border-width) solid var(--border-color);border-radius:50%;transform:translate3d(0,0,0);content:""}@media (prefers-reduced-motion:no-preference){.hds-form-toggle__facade,.hds-form-toggle__facade::after{transition-timing-function:var(--token-form-toggle-transition-timing-function);transition-duration:var(--token-form-toggle-transition-duration);transition-property:all}}.hds-form-toggle__facade::before{position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;margin:auto;border-width:3px;border-radius:calc(var(--token-form-toggle-height)/ 2 + 3px + 1px);content:""}:not(:checked)+.hds-form-toggle__facade{--border-color:var(--token-form-control-base-border-color-default);background-color:var(--token-form-toggle-base-surface-color-default)}:checked+.hds-form-toggle__facade{--border-color:var(--token-form-control-checked-border-color-default);background-color:var(--token-form-control-checked-surface-color-default)}:checked+.hds-form-toggle__facade::after{transform:translate3d(calc(var(--token-form-toggle-width) - var(--token-form-toggle-thumb-size)),0,0)}.mock-hover:not(:checked)+.hds-form-toggle__facade,:hover:not(:checked)+.hds-form-toggle__facade{--border-color:var(--token-form-control-base-border-color-hover)}.mock-hover:checked+.hds-form-toggle__facade,:hover:checked+.hds-form-toggle__facade{--border-color:var(--token-form-control-checked-border-color-hover);background-color:var(--token-form-control-checked-border-color-default)}.mock-focus+.hds-form-toggle__facade::before,:focus+.hds-form-toggle__facade::before{border-color:var(--token-color-focus-action-external);border-style:solid}:disabled:checked+.hds-form-toggle__facade,:disabled:not(:checked)+.hds-form-toggle__facade{--border-color:var(--token-form-control-disabled-border-color);background-color:var(--token-form-control-disabled-surface-color);background-image:var(--token-form-toggle-background-image-data-url-disabled)}.hds-form-visibility-toggle{width:24px;height:24px;padding:2px;color:var(--token-color-foreground-primary);background-color:transparent;border-color:transparent;cursor:pointer}.hds-icon-tile--logo,.hds-icon-tile__extra{background-color:var(--token-color-surface-primary)}.hds-icon-tile{position:relative;display:flex;border:1px solid transparent;border-radius:4px;box-shadow:0 1px 1px rgba(101,106,118,.05)}.hds-icon-tile__icon,.hds-icon-tile__logo{display:flex;margin:auto}.hds-icon-tile__extra{position:absolute;right:-6px;bottom:-6px;display:flex;box-sizing:content-box;border:1px solid var(--token-color-border-primary);box-shadow:0 1px 1px rgba(101,106,118,.05)}.hds-icon-tile__extra-icon{display:flex;margin:auto;color:var(--token-color-foreground-strong)}.hds-icon-tile--size-small{width:1.75rem;height:1.75rem;border-radius:5px}.hds-icon-tile--size-small .hds-icon-tile__icon{width:1rem;height:1rem}.hds-icon-tile--size-small .hds-icon-tile__logo{width:1.125rem;height:1.125rem}.hds-icon-tile--size-small .hds-icon-tile__extra{width:1.125rem;height:1.125rem;border-radius:4px}.hds-icon-tile--size-small .hds-icon-tile__extra-icon{width:.75rem;height:.75rem}.hds-icon-tile--size-medium{width:2.5rem;height:2.5rem;border-radius:6px}.hds-icon-tile--size-medium .hds-icon-tile__icon{width:1.5rem;height:1.5rem}.hds-icon-tile--size-medium .hds-icon-tile__logo{width:1.75rem;height:1.75rem}.hds-icon-tile--size-medium .hds-icon-tile__extra{width:1.5rem;height:1.5rem;border-radius:5px}.hds-icon-tile--size-medium .hds-icon-tile__extra-icon{width:1rem;height:1rem}.hds-icon-tile--size-large{width:3rem;height:3rem;border-radius:6px}.hds-icon-tile--size-large .hds-icon-tile__icon{width:1.5rem;height:1.5rem}.hds-icon-tile--size-large .hds-icon-tile__logo{width:2rem;height:2rem}.hds-icon-tile--size-large .hds-icon-tile__extra{width:1.5rem;height:1.5rem;border-radius:5px}.hds-icon-tile--size-large .hds-icon-tile__extra-icon{width:1rem;height:1rem}.hds-icon-tile--logo{border-color:var(--token-color-border-primary)}.hds-icon-tile--icon.hds-icon-tile--color-neutral{color:var(--token-color-foreground-faint);background-color:var(--token-color-surface-faint);border-color:var(--token-color-border-primary)}.hds-icon-tile--icon.hds-icon-tile--color-boundary{color:var(--token-color-boundary-foreground);background:linear-gradient(135deg,var(--token-color-boundary-gradient-faint-start) 0,var(--token-color-boundary-gradient-faint-stop) 100%);border-color:var(--token-color-boundary-border)}.hds-icon-tile--icon.hds-icon-tile--color-consul{color:var(--token-color-consul-foreground);background:linear-gradient(135deg,var(--token-color-consul-gradient-faint-start) 0,var(--token-color-consul-gradient-faint-stop) 100%);border-color:var(--token-color-consul-border)}.hds-icon-tile--icon.hds-icon-tile--color-hcp{color:var(--token-color-palette-hcp-brand);background-color:var(--token-color-surface-faint);border-color:var(--token-color-border-primary)}.hds-icon-tile--icon.hds-icon-tile--color-nomad{color:var(--token-color-nomad-foreground);background:linear-gradient(135deg,var(--token-color-nomad-gradient-faint-start) 0,var(--token-color-nomad-gradient-faint-stop) 100%);border-color:var(--token-color-nomad-border)}.hds-icon-tile--icon.hds-icon-tile--color-packer{color:var(--token-color-packer-foreground);background:linear-gradient(135deg,var(--token-color-packer-gradient-faint-start) 0,var(--token-color-packer-gradient-faint-stop) 100%);border-color:var(--token-color-packer-border)}.hds-icon-tile--icon.hds-icon-tile--color-terraform{color:var(--token-color-terraform-foreground);background:linear-gradient(135deg,var(--token-color-terraform-gradient-faint-start) 0,var(--token-color-terraform-gradient-faint-stop) 100%);border-color:var(--token-color-terraform-border)}.hds-icon-tile--icon.hds-icon-tile--color-vagrant{color:var(--token-color-vagrant-foreground);background:linear-gradient(135deg,var(--token-color-vagrant-gradient-faint-start) 0,var(--token-color-vagrant-gradient-faint-stop) 100%);border-color:var(--token-color-vagrant-border)}.hds-icon-tile--icon.hds-icon-tile--color-vault{color:var(--token-color-vault-foreground);background:linear-gradient(135deg,var(--token-color-vault-gradient-faint-start) 0,var(--token-color-vault-gradient-faint-stop) 100%);border-color:var(--token-color-vault-border)}.hds-icon-tile--icon.hds-icon-tile--color-vault-secrets{color:var(--token-color-vault-secrets-foreground);background:linear-gradient(135deg,var(--token-color-vault-secrets-gradient-faint-start) 0,var(--token-color-vault-secrets-gradient-faint-stop) 100%);border-color:var(--token-color-vault-secrets-border)}.hds-icon-tile--icon.hds-icon-tile--color-waypoint{color:var(--token-color-waypoint-foreground);background:linear-gradient(135deg,var(--token-color-waypoint-gradient-faint-start) 0,var(--token-color-waypoint-gradient-faint-stop) 100%);border-color:var(--token-color-waypoint-border)}.hds-link-inline{border-radius:2px}.hds-link-inline.mock-focus,.hds-link-inline:focus,.hds-link-inline:focus-visible{text-decoration:none;outline:var(--token-color-focus-action-internal) solid 2px;outline-offset:1px}.hds-link-inline__icon{display:inline-block;width:1em;height:1em;vertical-align:text-bottom}.hds-link-inline--icon-leading>.hds-link-inline__icon{margin-right:.25em}.hds-link-inline--icon-trailing>.hds-link-inline__icon{margin-left:.25em}.hds-link-inline--color-primary{color:var(--token-color-foreground-action)}.hds-link-inline--color-primary.mock-hover,.hds-link-inline--color-primary:hover{color:var(--token-color-foreground-action-hover)}.hds-link-inline--color-primary.mock-active,.hds-link-inline--color-primary:active{color:var(--token-color-foreground-action-active)}.hds-link-inline--color-secondary{color:var(--token-color-foreground-strong)}.hds-link-inline--color-secondary.mock-hover,.hds-link-inline--color-secondary:hover{color:var(--token-color-foreground-primary)}.hds-link-inline--color-secondary.mock-active,.hds-link-inline--color-secondary:active{color:var(--token-color-foreground-faint)}.hds-link-standalone{display:flex;align-items:center;justify-content:center;width:-moz-fit-content;width:fit-content;padding-top:4px;padding-bottom:4px;background-color:transparent;border:1px solid transparent;text-decoration-color:transparent;position:relative;outline-style:solid;outline-color:transparent}.hds-link-standalone__text{flex:1 0 0;text-decoration:underline;text-decoration-color:transparent;transition:text-decoration-color .25s ease-in}#login-toggle+div footer button,.consul-intention-fieldsets .permissions>button,.empty-state>ul>li>*,.empty-state>ul>li>:active,.empty-state>ul>li>label>button,.empty-state>ul>li>label>button:active,.hds-pagination-nav__control,.hds-side-nav__list-item-link,.hds-tabs__tab,.modal-dialog [role=document] dd a,.modal-dialog [role=document] p a,.oidc-select button.reset,.search-bar-status .remove-all button,a,main dd a,main dd a:active,main p a,main p a:active{text-decoration:none}.hds-link-standalone--size-small .hds-link-standalone__icon{width:.75rem;height:.75rem}.hds-link-standalone--size-small .hds-link-standalone__text{font-size:.8125rem;line-height:1.231}.hds-link-standalone--size-medium .hds-link-standalone__icon{width:1rem;height:1rem}.hds-link-standalone--size-medium .hds-link-standalone__text{font-size:.875rem;line-height:1.143}.hds-link-standalone--size-large .hds-link-standalone__icon{width:1.5rem;height:1.5rem}.hds-link-standalone--size-large .hds-link-standalone__text{font-size:1rem;line-height:1.5}.hds-link-standalone--color-primary{color:var(--token-color-foreground-action)}.hds-link-standalone--color-primary.mock-hover,.hds-link-standalone--color-primary:hover{color:var(--token-color-foreground-action-hover)}.hds-link-standalone--color-primary.mock-hover .hds-link-standalone__text,.hds-link-standalone--color-primary:hover .hds-link-standalone__text{text-decoration-color:#4e81e8}.hds-link-standalone--color-primary.mock-active,.hds-link-standalone--color-primary:active{color:var(--token-color-foreground-action-active)}.hds-link-standalone--color-primary.mock-active .hds-link-standalone__text,.hds-link-standalone--color-primary:active .hds-link-standalone__text{text-decoration-color:#396ed6}.hds-link-standalone--color-primary.mock-active::before,.hds-link-standalone--color-primary:active::before{background-color:var(--token-color-surface-action)}.hds-link-standalone--color-secondary{color:var(--token-color-foreground-strong)}.hds-link-standalone--color-secondary.mock-hover .hds-link-standalone__text,.hds-link-standalone--color-secondary:hover .hds-link-standalone__text{text-decoration-color:#4d4d4f}.hds-link-standalone--color-secondary.mock-active,.hds-link-standalone--color-secondary:active{color:var(--token-color-foreground-primary)}.hds-link-standalone--color-secondary.mock-active .hds-link-standalone__text,.hds-link-standalone--color-secondary:active .hds-link-standalone__text{text-decoration-color:#6e7075}.hds-link-standalone--color-secondary.mock-active::before,.hds-link-standalone--color-secondary:active::before{background-color:var(--token-color-surface-interactive-active)}.hds-link-standalone::before{position:absolute;top:0;right:-5px;bottom:0;left:-5px;z-index:-1;border-radius:5px;content:""}.hds-link-standalone:focus:not(:focus-visible)::before{box-shadow:none}.hds-link-standalone:focus-visible::before,.hds-pagination-nav__control.mock-focus::before,.hds-pagination-nav__control:focus::before{box-shadow:var(--token-focus-ring-action-box-shadow)}.hds-link-standalone.mock-focus.mock-active::before,.hds-link-standalone:focus:active::before{box-shadow:none}.hds-link-standalone.hds-link-standalone--icon-position-leading::before{right:-7px}.hds-link-standalone.hds-link-standalone--icon-position-trailing::before{left:-7px}.hds-menu-primitive{position:relative;width:-moz-fit-content;width:fit-content}.hds-modal{z-index:50;flex-direction:column;padding:0;background:var(--token-color-surface-primary);border:none;border-radius:8px;box-shadow:var(--token-surface-overlay-box-shadow)}.hds-modal[open]{position:fixed;display:flex}.hds-modal::backdrop{display:none}.hds-modal__overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;background:var(--token-color-palette-neutral-700);opacity:.5}.hds-modal__header{display:flex;flex:none;gap:16px;align-items:flex-start;padding:16px 24px;border-top-left-radius:inherit;border-top-right-radius:inherit}.hds-modal__icon{flex:none;align-self:center}.freetext-filter>label,.freetext-filter_input,.hds-modal__title{flex-grow:1}.hds-modal__tagline{margin-bottom:4px}.hds-modal__dismiss{align-self:center}.hds-modal__body{flex:1 1 auto;padding:24px;overflow-y:auto;overscroll-behavior:contain}.hds-modal__footer{flex:none;padding:16px 24px;background:var(--token-color-surface-faint);border-top:1px solid var(--token-color-border-primary);border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.hds-modal--size-small{width:min(400px,95vw)}.hds-modal--size-medium{width:min(600px,95vw)}.hds-modal--size-large{width:min(800px,95vw)}.hds-modal--color-neutral .hds-modal__header{color:var(--token-color-foreground-strong);background:var(--token-color-surface-faint);border-bottom:1px solid var(--token-color-border-primary)}.hds-modal--color-neutral .hds-modal__tagline{color:var(--token-color-foreground-faint)}.hds-modal--color-warning .hds-modal__header,.hds-modal--color-warning .hds-modal__tagline{color:var(--token-color-foreground-warning-on-surface)}.hds-modal--color-warning .hds-modal__header{background:var(--token-color-surface-warning);border-bottom:1px solid var(--token-color-border-warning)}.hds-modal--color-critical .hds-modal__header,.hds-modal--color-critical .hds-modal__tagline{color:var(--token-color-foreground-critical-on-surface)}.hds-modal--color-critical .hds-modal__header{background:var(--token-color-surface-critical);border-bottom:1px solid var(--token-color-border-critical)}.hds-page-header{position:relative;display:flex;flex-direction:column;gap:16px;container-type:inline-size}.hds-page-header__body{display:flex;flex-direction:column;gap:8px 16px}.hds-page-header__body .hds-icon-tile{flex-shrink:0}@container (min-width:400px){.hds-page-header__body{flex-direction:row}}.hds-page-header__main{display:flex;flex-direction:column;flex-grow:1;gap:16px;align-items:start;justify-content:start}@container (min-width:768px){.hds-page-header__main{flex-direction:row;justify-content:space-between;min-width:0}}.hds-page-header__content{display:flex;flex-direction:column;flex-grow:1;gap:8px;min-width:0;max-width:100%}.hds-page-header__title-wrapper{display:flex;flex-direction:row;flex-wrap:wrap;gap:8px 16px;align-items:center}.hds-page-header__title{max-width:100%;overflow-wrap:break-word}.hds-page-header__badges-wrapper{display:flex;flex-wrap:wrap;gap:8px}.hds-page-header__metadata{display:flex;flex-direction:column;gap:4px}.hds-page-header__description,.hds-page-header__subtitle{overflow-wrap:break-word}.hds-page-header__actions{display:flex;flex-direction:row;flex-shrink:0;flex-wrap:wrap;gap:16px;align-items:center}.hds-pagination{display:grid;grid-template-areas:"info nav selector";grid-template-rows:auto;grid-template-columns:1fr auto 1fr;align-items:center;margin:0 auto}@media screen and (max-width:1000px){.hds-pagination{display:flex;flex-wrap:wrap;justify-content:center}.hds-pagination .hds-pagination-info{margin-top:var(--token-pagination-child-spacing-vertical);margin-left:var(--token-pagination-child-spacing-horizontal)}}.hds-pagination .hds-pagination-info{grid-area:info;justify-self:flex-start;margin-right:var(--token-pagination-child-spacing-horizontal)}.hds-pagination .hds-pagination-nav{grid-area:nav}@media screen and (max-width:1000px){.hds-pagination .hds-pagination-nav{justify-content:center;order:-1;width:100%}.hds-pagination .hds-pagination-size-selector{margin-top:var(--token-pagination-child-spacing-vertical);margin-right:var(--token-pagination-child-spacing-horizontal)}}.hds-pagination .hds-pagination-size-selector{grid-area:selector;justify-self:flex-end;margin-left:var(--token-pagination-child-spacing-horizontal)}.hds-pagination-info{white-space:nowrap}.hds-pagination-nav{display:flex}.hds-pagination-nav__page-list{display:flex;margin:0;padding:0}.hds-pagination-nav__page-item{list-style-type:none}.hds-pagination-nav__control{display:flex;align-items:center;height:var(--token-pagination-nav-control-height);padding:0 calc(var(--token-pagination-nav-control-padding-horizontal) - 1px);color:var(--token-color-foreground-primary);background-color:transparent;border:1px solid transparent;position:relative;outline-style:solid;outline-color:transparent;isolation:isolate}.hds-pagination-nav__control::before{position:absolute;top:var(--token-pagination-nav-control-focus-inset);right:var(--token-pagination-nav-control-focus-inset);bottom:var(--token-pagination-nav-control-focus-inset);left:var(--token-pagination-nav-control-focus-inset);z-index:-1;border-radius:5px;content:""}.hds-pagination-nav__control:focus:not(:focus-visible)::before{box-shadow:none}.hds-pagination-nav__control:focus-visible::before,.hds-side-nav__home-link.mock-focus.mock-focus::before,.hds-side-nav__home-link.mock-focus:focus::before,.hds-side-nav__home-link:focus.mock-focus::before,.hds-side-nav__home-link:focus:focus::before{box-shadow:var(--token-focus-ring-action-box-shadow)}.hds-pagination-nav__control.mock-focus.mock-active::before,.hds-pagination-nav__control:focus:active::before{box-shadow:none}.hds-pagination-nav__control.mock-hover,.hds-pagination-nav__control:hover{color:var(--token-color-foreground-action-hover)}.hds-pagination-nav__control.mock-active,.hds-pagination-nav__control:active{color:var(--token-color-foreground-action-active)}.hds-pagination-nav__arrow{gap:var(--token-pagination-nav-control-icon-spacing)}.hds-pagination-nav__arrow.mock-disabled,.hds-pagination-nav__arrow:disabled{color:var(--token-color-foreground-disabled);cursor:not-allowed}.hds-pagination-nav__arrow--direction-prev{flex-direction:row;justify-content:flex-start}.hds-pagination-nav__arrow--direction-next{flex-direction:row-reverse;justify-content:flex-end}.hds-pagination-nav__number--is-selected{position:relative;color:var(--token-color-foreground-action)}.hds-pagination-nav__number--is-selected:hover{color:var(--token-color-foreground-action-hover)}.hds-pagination-nav__number--is-selected:active{color:var(--token-color-foreground-action-active)}.hds-pagination-nav__number--is-selected::after{position:absolute;right:calc(var(--token-pagination-nav-indicator-spacing) - 1px);bottom:-1px;left:calc(var(--token-pagination-nav-indicator-spacing) - 1px);height:var(--token-pagination-nav-indicator-height);margin:0 auto;background-color:currentColor;border-radius:2px;content:""}.hds-pagination-nav__ellipsis{display:flex;align-items:center;height:var(--token-pagination-nav-control-height);padding:0 var(--token-pagination-nav-control-padding-horizontal);color:var(--token-color-foreground-faint)}.hds-pagination-size-selector{display:flex;align-items:center}.hds-pagination-size-selector>label{white-space:nowrap}.hds-pagination-size-selector>select{height:28px;margin-left:12px;padding:0 24px 0 8px;font-size:var(--token-typography-body-100-font-size);font-family:var(--token-typography-body-100-font-family);line-height:var(--token-typography-body-100-line-height);background-position:center right 5px}.hds-reveal{width:-moz-fit-content;width:fit-content}.hds-reveal__toggle-button{min-height:1.75rem;padding:.313rem .313rem .313rem .188rem}@media (prefers-reduced-motion:no-preference){.hds-reveal__toggle-button .flight-icon-chevron-down{transition:transform .3s}}.hds-reveal__toggle-button--is-open .flight-icon-chevron-down{transform:rotate(-180deg)}.hds-reveal__content{margin-top:4px}.hds-segmented-group{display:inline-flex}.hds-side-nav--is-desktop .hds-side-nav__overlay,.hds-side-nav__toggle-button.mock-focus::after,.hds-side-nav__toggle-button.mock-focus::before,.hds-side-nav__toggle-button:focus-visible::after,.hds-side-nav__toggle-button:focus-visible::before{display:none}.hds-segmented-group>.hds-button:first-child,.hds-segmented-group>.hds-dropdown:first-child,.hds-segmented-group>.hds-form-select:first-child,.hds-segmented-group>.hds-form-text-input:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.hds-segmented-group>.hds-button:first-child .hds-dropdown-toggle-button,.hds-segmented-group>.hds-button:first-child .hds-dropdown-toggle-button::before,.hds-segmented-group>.hds-button:first-child::before,.hds-segmented-group>.hds-dropdown:first-child .hds-dropdown-toggle-button,.hds-segmented-group>.hds-dropdown:first-child .hds-dropdown-toggle-button::before,.hds-segmented-group>.hds-dropdown:first-child::before,.hds-segmented-group>.hds-form-select:first-child .hds-dropdown-toggle-button,.hds-segmented-group>.hds-form-select:first-child .hds-dropdown-toggle-button::before,.hds-segmented-group>.hds-form-select:first-child::before,.hds-segmented-group>.hds-form-text-input:first-child .hds-dropdown-toggle-button,.hds-segmented-group>.hds-form-text-input:first-child .hds-dropdown-toggle-button::before,.hds-segmented-group>.hds-form-text-input:first-child::before{border-top-right-radius:inherit;border-bottom-right-radius:inherit}.hds-segmented-group>.hds-button:last-child,.hds-segmented-group>.hds-dropdown:last-child,.hds-segmented-group>.hds-form-select:last-child,.hds-segmented-group>.hds-form-text-input:last-child{margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0}.hds-segmented-group>.hds-button:last-child .hds-dropdown-toggle-button,.hds-segmented-group>.hds-button:last-child .hds-dropdown-toggle-button::before,.hds-segmented-group>.hds-button:last-child::before,.hds-segmented-group>.hds-dropdown:last-child .hds-dropdown-toggle-button,.hds-segmented-group>.hds-dropdown:last-child .hds-dropdown-toggle-button::before,.hds-segmented-group>.hds-dropdown:last-child::before,.hds-segmented-group>.hds-form-select:last-child .hds-dropdown-toggle-button,.hds-segmented-group>.hds-form-select:last-child .hds-dropdown-toggle-button::before,.hds-segmented-group>.hds-form-select:last-child::before,.hds-segmented-group>.hds-form-text-input:last-child .hds-dropdown-toggle-button,.hds-segmented-group>.hds-form-text-input:last-child .hds-dropdown-toggle-button::before,.hds-segmented-group>.hds-form-text-input:last-child::before{border-top-left-radius:inherit;border-bottom-left-radius:inherit}.hds-segmented-group>.hds-button:not(:first-child,:last-child),.hds-segmented-group>.hds-dropdown:not(:first-child,:last-child),.hds-segmented-group>.hds-form-select:not(:first-child,:last-child),.hds-segmented-group>.hds-form-text-input:not(:first-child,:last-child){margin-left:-1px;border-radius:0}.hds-segmented-group>.hds-button:not(:first-child,:last-child) .hds-dropdown-toggle-button,.hds-segmented-group>.hds-button:not(:first-child,:last-child) .hds-dropdown-toggle-button::before,.hds-segmented-group>.hds-button:not(:first-child,:last-child)::before,.hds-segmented-group>.hds-dropdown:not(:first-child,:last-child) .hds-dropdown-toggle-button,.hds-segmented-group>.hds-dropdown:not(:first-child,:last-child) .hds-dropdown-toggle-button::before,.hds-segmented-group>.hds-dropdown:not(:first-child,:last-child)::before,.hds-segmented-group>.hds-form-select:not(:first-child,:last-child) .hds-dropdown-toggle-button,.hds-segmented-group>.hds-form-select:not(:first-child,:last-child) .hds-dropdown-toggle-button::before,.hds-segmented-group>.hds-form-select:not(:first-child,:last-child)::before,.hds-segmented-group>.hds-form-text-input:not(:first-child,:last-child) .hds-dropdown-toggle-button,.hds-segmented-group>.hds-form-text-input:not(:first-child,:last-child) .hds-dropdown-toggle-button::before,.hds-segmented-group>.hds-form-text-input:not(:first-child,:last-child)::before{border-radius:inherit}.hds-segmented-group>.hds-button .hds-dropdown-toggle-button:focus,.hds-segmented-group>.hds-button.mock-focus,.hds-segmented-group>.hds-button:focus,.hds-segmented-group>.hds-dropdown .hds-dropdown-toggle-button:focus,.hds-segmented-group>.hds-dropdown.mock-focus,.hds-segmented-group>.hds-dropdown:focus,.hds-segmented-group>.hds-form-select .hds-dropdown-toggle-button:focus,.hds-segmented-group>.hds-form-select.mock-focus,.hds-segmented-group>.hds-form-select:focus,.hds-segmented-group>.hds-form-text-input .hds-dropdown-toggle-button:focus,.hds-segmented-group>.hds-form-text-input.mock-focus,.hds-segmented-group>.hds-form-text-input:focus{z-index:1}.hds-separator{border:none;border-top:1px solid var(--token-color-border-primary)}.hds-separator--spacing-24{margin:24px 0}.hds-separator--spacing-0{margin:0}.hds-side-nav{top:0;z-index:20;width:var(--hds-app-sidenav-width-fixed);height:100vh;min-height:100vh;isolation:isolate}.hds-side-nav.hds-side-nav--is-responsive{transition:width var(--hds-app-sidenav-animation-duration) var(--hds-app-sidenav-animation-easing)}.hds-side-nav.hds-side-nav--is-mobile{width:var(--hds-app-sidenav-width-minimized)}.hds-side-nav.hds-side-nav--is-desktop.hds-side-nav--is-not-minimized{width:var(--hds-app-sidenav-width-expanded)}.hds-side-nav--is-minimized .hds-side-nav__wrapper,.hds-side-nav.hds-side-nav--is-desktop.hds-side-nav--is-minimized{width:var(--hds-app-sidenav-width-minimized)}.hds-side-nav__overlay{position:fixed;z-index:-1;inset:0;background-color:var(--token-color-palette-neutral-700);opacity:.2;transition:opacity var(--hds-app-sidenav-animation-duration) var(--hds-app-sidenav-animation-easing) var(--hds-app-sidenav-animation-delay)}.hds-side-nav--is-minimized .hds-side-nav__overlay{opacity:0;pointer-events:none}.hds-side-nav__wrapper{display:flex;flex-direction:column;height:100%;color:var(--token-side-nav-color-foreground-primary);background:var(--token-side-nav-color-surface-primary);border-right:var(--token-side-nav-wrapper-border-width) solid var(--token-side-nav-wrapper-border-color)}.hds-side-nav--is-responsive .hds-side-nav__wrapper{transition:width var(--hds-app-sidenav-animation-duration) var(--hds-app-sidenav-animation-easing)}.hds-side-nav--is-not-minimized .hds-side-nav__wrapper{width:var(--hds-app-sidenav-width-expanded)}.hds-side-nav__wrapper-header{padding-top:var(--token-side-nav-wrapper-padding-vertical);padding-right:var(--token-side-nav-wrapper-padding-horizontal);padding-bottom:8px;padding-left:var(--token-side-nav-wrapper-padding-horizontal);transition:padding var(--hds-app-sidenav-animation-duration) var(--hds-app-sidenav-animation-easing)}.hds-side-nav--is-minimized .hds-side-nav__wrapper-header{padding-top:var(--token-side-nav-wrapper-padding-vertical-minimized);padding-right:var(--token-side-nav-wrapper-padding-horizontal-minimized);padding-left:var(--token-side-nav-wrapper-padding-horizontal-minimized)}.hds-side-nav__wrapper-body,.hds-side-nav__wrapper-footer{padding:var(--token-side-nav-wrapper-padding-vertical) var(--token-side-nav-wrapper-padding-horizontal)}.hds-side-nav__wrapper-body{flex:1;overflow-x:hidden;overflow-y:auto}.hds-side-nav--is-minimized .hds-side-nav-hide-when-minimized{visibility:hidden!important;opacity:0;pointer-events:none}.hds-side-nav--is-not-minimized .hds-side-nav-hide-when-minimized{visibility:visible;opacity:1;transition:opacity var(--hds-app-sidenav-animation-duration) var(--hds-app-sidenav-animation-easing) var(--hds-app-sidenav-animation-delay)}.hds-side-nav--is-animating .hds-side-nav-hide-when-minimized{pointer-events:none}.hds-side-nav-header{display:flex;align-items:center;justify-content:space-between}.hds-side-nav-header__logo-container{display:flex;flex:none;align-items:center;justify-content:center;width:var(--token-side-nav-header-home-link-logo-size);height:var(--token-side-nav-header-home-link-logo-size);transition:width var(--hds-app-sidenav-animation-duration) var(--hds-app-sidenav-animation-easing),height var(--hds-app-sidenav-animation-duration) var(--hds-app-sidenav-animation-easing)}.hds-side-nav--is-minimized .hds-side-nav-header__logo-container{width:var(--token-side-nav-header-home-link-logo-size-minimized);height:var(--token-side-nav-header-home-link-logo-size-minimized)}.hds-side-nav__home-link{color:var(--token-side-nav-color-foreground-strong);background-color:transparent;border:1px solid transparent;border-radius:var(--token-side-nav-body-list-item-border-radius);cursor:pointer;display:block;width:100%;height:100%;padding:calc(var(--token-side-nav-header-home-link-padding) - 1px)}.hds-side-nav__home-link.mock-focus,.hds-side-nav__home-link:focus{position:relative;outline-style:solid;outline-color:transparent;isolation:isolate}.hds-side-nav__home-link.mock-focus::before,.hds-side-nav__home-link:focus::before{position:absolute;top:-1px;right:-1px;bottom:-1px;left:-1px;z-index:-1;border-radius:5px;content:""}.hds-side-nav__home-link.mock-focus:focus:not(:focus-visible)::before,.hds-side-nav__home-link:focus:focus:not(:focus-visible)::before{box-shadow:none}.hds-side-nav__home-link.mock-focus:focus-visible::before,.hds-side-nav__home-link:focus:focus-visible::before{box-shadow:var(--token-focus-ring-action-box-shadow)}.hds-side-nav__home-link.mock-focus.mock-focus.mock-active::before,.hds-side-nav__home-link.mock-focus:focus:active::before,.hds-side-nav__home-link:focus.mock-focus.mock-active::before,.hds-side-nav__home-link:focus:focus:active::before{box-shadow:none}.hds-side-nav__home-link.mock-hover,.hds-side-nav__home-link:hover{color:var(--token-side-nav-color-foreground-strong);background:var(--token-side-nav-color-surface-interactive-hover)}.hds-side-nav__home-link.mock-active,.hds-side-nav__home-link:active{color:var(--token-side-nav-color-foreground-strong);background:var(--token-side-nav-color-surface-interactive-active)}.hds-side-nav-header__actions-container{display:flex;gap:var(--token-side-nav-header-actions-spacing)}.hds-side-nav__dropdown .hds-dropdown-toggle-button,.hds-side-nav__dropdown .hds-dropdown-toggle-icon{color:var(--token-side-nav-color-foreground-strong);background-color:transparent;border:1px solid transparent;border-radius:var(--token-side-nav-body-list-item-border-radius);cursor:pointer;border-color:var(--token-color-palette-neutral-500)}.hds-side-nav__dropdown .hds-dropdown-toggle-button.mock-focus,.hds-side-nav__dropdown .hds-dropdown-toggle-button:focus,.hds-side-nav__dropdown .hds-dropdown-toggle-icon.mock-focus,.hds-side-nav__dropdown .hds-dropdown-toggle-icon:focus{position:relative;outline-style:solid;outline-color:transparent;isolation:isolate}.hds-side-nav__dropdown .hds-dropdown-toggle-button.mock-focus::before,.hds-side-nav__dropdown .hds-dropdown-toggle-button:focus::before,.hds-side-nav__dropdown .hds-dropdown-toggle-icon.mock-focus::before,.hds-side-nav__dropdown .hds-dropdown-toggle-icon:focus::before{position:absolute;top:-1px;right:-1px;bottom:-1px;left:-1px;z-index:-1;border-radius:5px;content:""}.hds-side-nav__dropdown .hds-dropdown-toggle-button.mock-focus.mock-focus::before,.hds-side-nav__dropdown .hds-dropdown-toggle-button.mock-focus:focus::before,.hds-side-nav__dropdown .hds-dropdown-toggle-button:focus.mock-focus::before,.hds-side-nav__dropdown .hds-dropdown-toggle-button:focus:focus::before,.hds-side-nav__dropdown .hds-dropdown-toggle-icon.mock-focus.mock-focus::before,.hds-side-nav__dropdown .hds-dropdown-toggle-icon.mock-focus:focus::before,.hds-side-nav__dropdown .hds-dropdown-toggle-icon:focus.mock-focus::before,.hds-side-nav__dropdown .hds-dropdown-toggle-icon:focus:focus::before{box-shadow:var(--token-focus-ring-action-box-shadow)}.hds-side-nav__dropdown .hds-dropdown-toggle-button.mock-focus:focus:not(:focus-visible)::before,.hds-side-nav__dropdown .hds-dropdown-toggle-button:focus:focus:not(:focus-visible)::before,.hds-side-nav__dropdown .hds-dropdown-toggle-icon.mock-focus:focus:not(:focus-visible)::before,.hds-side-nav__dropdown .hds-dropdown-toggle-icon:focus:focus:not(:focus-visible)::before{box-shadow:none}.hds-side-nav__dropdown .hds-dropdown-toggle-button.mock-focus:focus-visible::before,.hds-side-nav__dropdown .hds-dropdown-toggle-button:focus:focus-visible::before,.hds-side-nav__dropdown .hds-dropdown-toggle-icon.mock-focus:focus-visible::before,.hds-side-nav__dropdown .hds-dropdown-toggle-icon:focus:focus-visible::before{box-shadow:var(--token-focus-ring-action-box-shadow)}.hds-side-nav__dropdown .hds-dropdown-toggle-button.mock-focus.mock-focus.mock-active::before,.hds-side-nav__dropdown .hds-dropdown-toggle-button.mock-focus:focus:active::before,.hds-side-nav__dropdown .hds-dropdown-toggle-button:focus.mock-focus.mock-active::before,.hds-side-nav__dropdown .hds-dropdown-toggle-button:focus:focus:active::before,.hds-side-nav__dropdown .hds-dropdown-toggle-icon.mock-focus.mock-focus.mock-active::before,.hds-side-nav__dropdown .hds-dropdown-toggle-icon.mock-focus:focus:active::before,.hds-side-nav__dropdown .hds-dropdown-toggle-icon:focus.mock-focus.mock-active::before,.hds-side-nav__dropdown .hds-dropdown-toggle-icon:focus:focus:active::before{box-shadow:none}.hds-side-nav__dropdown .hds-dropdown-toggle-button.mock-hover,.hds-side-nav__dropdown .hds-dropdown-toggle-button:hover,.hds-side-nav__dropdown .hds-dropdown-toggle-icon.mock-hover,.hds-side-nav__dropdown .hds-dropdown-toggle-icon:hover{color:var(--token-side-nav-color-foreground-strong);background:var(--token-side-nav-color-surface-interactive-hover)}.hds-side-nav__dropdown .hds-dropdown-toggle-button.mock-active,.hds-side-nav__dropdown .hds-dropdown-toggle-button:active,.hds-side-nav__dropdown .hds-dropdown-toggle-icon.mock-active,.hds-side-nav__dropdown .hds-dropdown-toggle-icon:active{color:var(--token-side-nav-color-foreground-strong);background:var(--token-side-nav-color-surface-interactive-active);border-color:var(--token-color-palette-neutral-400)}.hds-side-nav__icon-button{color:var(--token-side-nav-color-foreground-strong);background-color:transparent;border:1px solid transparent;border-radius:var(--token-side-nav-body-list-item-border-radius);cursor:pointer;border-color:var(--token-color-palette-neutral-500);display:flex;align-items:center;justify-content:center;width:36px;height:36px;padding:5px}.hds-side-nav__icon-button.mock-focus,.hds-side-nav__icon-button:focus{position:relative;outline-style:solid;outline-color:transparent;isolation:isolate}.hds-side-nav__icon-button.mock-focus::before,.hds-side-nav__icon-button:focus::before{position:absolute;top:-1px;right:-1px;bottom:-1px;left:-1px;z-index:-1;border-radius:5px;content:""}.hds-side-nav__icon-button.mock-focus.mock-focus::before,.hds-side-nav__icon-button.mock-focus:focus::before,.hds-side-nav__icon-button:focus.mock-focus::before,.hds-side-nav__icon-button:focus:focus::before{box-shadow:var(--token-focus-ring-action-box-shadow)}.hds-side-nav__icon-button.mock-focus:focus:not(:focus-visible)::before,.hds-side-nav__icon-button:focus:focus:not(:focus-visible)::before{box-shadow:none}.hds-side-nav__icon-button.mock-focus:focus-visible::before,.hds-side-nav__icon-button:focus:focus-visible::before{box-shadow:var(--token-focus-ring-action-box-shadow)}.hds-side-nav__icon-button.mock-focus.mock-focus.mock-active::before,.hds-side-nav__icon-button.mock-focus:focus:active::before,.hds-side-nav__icon-button:focus.mock-focus.mock-active::before,.hds-side-nav__icon-button:focus:focus:active::before{box-shadow:none}.hds-side-nav__icon-button.mock-hover,.hds-side-nav__icon-button:hover{color:var(--token-side-nav-color-foreground-strong);background:var(--token-side-nav-color-surface-interactive-hover)}.hds-side-nav__icon-button.mock-active,.hds-side-nav__icon-button:active{color:var(--token-side-nav-color-foreground-strong);background:var(--token-side-nav-color-surface-interactive-active);border-color:var(--token-color-palette-neutral-400)}.hds-side-nav__content{margin:0 calc(var(--token-side-nav-wrapper-padding-horizontal) * -1)}.hds-side-nav__content-panels{display:grid;grid-template-columns:repeat(5,var(--hds-app-sidenav-width-expanded));width:100%}.hds-side-nav__content-panel{padding:0 var(--token-side-nav-wrapper-padding-horizontal)}.hds-side-nav__list-title{display:flex;align-items:center;min-height:var(--token-side-nav-body-list-item-height);margin-top:var(--token-side-nav-body-list-margin-vertical);padding:9px var(--token-side-nav-body-list-item-padding-horizontal);color:var(--token-side-nav-color-foreground-faint)}.hds-side-nav__list-wrapper:first-child .hds-side-nav__list-item:first-child>.hds-side-nav__list-title{margin-top:0}.hds-side-nav__list,.hds-side-nav__list-wrapper{margin:0;padding:0}.hds-side-nav__list-item{list-style-type:none}.hds-side-nav__list-item+.hds-side-nav__list-item{margin-top:var(--token-side-nav-body-list-item-spacing-vertical)}.hds-side-nav__list-item-link{display:flex;gap:var(--token-side-nav-body-list-item-content-spacing-horizontal);align-items:center;width:100%;min-height:var(--token-side-nav-body-list-item-height);padding:var(--token-side-nav-body-list-item-padding-vertical) var(--token-side-nav-body-list-item-padding-horizontal);color:var(--token-side-nav-color-foreground-primary);background:var(--token-side-nav-color-surface-primary);border-color:transparent;border-radius:var(--token-side-nav-body-list-item-border-radius)}.hds-side-nav__list-item-link.active .hds-side-nav__list-item-icon-leading,.hds-side-nav__list-item-link.active .hds-side-nav__list-item-icon-trailing,.hds-side-nav__list-item-link.active .hds-side-nav__list-item-text,.hds-side-nav__list-item-link.mock-active .hds-side-nav__list-item-icon-leading,.hds-side-nav__list-item-link.mock-active .hds-side-nav__list-item-icon-trailing,.hds-side-nav__list-item-link.mock-active .hds-side-nav__list-item-text,.hds-side-nav__list-item-link.mock-hover .hds-side-nav__list-item-icon-leading,.hds-side-nav__list-item-link.mock-hover .hds-side-nav__list-item-icon-trailing,.hds-side-nav__list-item-link.mock-hover .hds-side-nav__list-item-text,.hds-side-nav__list-item-link:active .hds-side-nav__list-item-icon-leading,.hds-side-nav__list-item-link:active .hds-side-nav__list-item-icon-trailing,.hds-side-nav__list-item-link:active .hds-side-nav__list-item-text,.hds-side-nav__list-item-link:hover .hds-side-nav__list-item-icon-leading,.hds-side-nav__list-item-link:hover .hds-side-nav__list-item-icon-trailing,.hds-side-nav__list-item-link:hover .hds-side-nav__list-item-text,.hds-side-nav__list-item-link:hover:focus .hds-side-nav__list-item-icon-leading,.hds-side-nav__list-item-link:hover:focus .hds-side-nav__list-item-icon-trailing,.hds-side-nav__list-item-link:hover:focus .hds-side-nav__list-item-text{color:var(--token-side-nav-color-foreground-strong)}.hds-side-nav__list-item-link.mock-focus,.hds-side-nav__list-item-link:focus{position:relative;outline-style:solid;outline-color:transparent;isolation:isolate}.hds-side-nav__list-item-link.mock-focus::before,.hds-side-nav__list-item-link:focus::before{position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1;border-radius:5px;content:""}.hds-side-nav__list-item-link.mock-focus.mock-focus::before,.hds-side-nav__list-item-link.mock-focus:focus::before,.hds-side-nav__list-item-link:focus.mock-focus::before,.hds-side-nav__list-item-link:focus:focus::before{box-shadow:var(--token-focus-ring-action-box-shadow)}.hds-side-nav__list-item-link.mock-focus:focus:not(:focus-visible)::before,.hds-side-nav__list-item-link:focus:focus:not(:focus-visible)::before{box-shadow:none}.hds-side-nav__list-item-link.mock-focus:focus-visible::before,.hds-side-nav__list-item-link:focus:focus-visible::before,.hds-table__th-sort button.mock-focus::before,.hds-table__th-sort button:focus::before{box-shadow:var(--token-focus-ring-action-box-shadow)}.hds-side-nav__list-item-link.mock-focus.mock-focus.mock-active::before,.hds-side-nav__list-item-link.mock-focus:focus:active::before,.hds-side-nav__list-item-link:focus.mock-focus.mock-active::before,.hds-side-nav__list-item-link:focus:focus:active::before{box-shadow:none}.hds-side-nav__list-item-link.mock-hover,.hds-side-nav__list-item-link:hover{background:var(--token-side-nav-color-surface-interactive-hover);border-color:transparent}.hds-side-nav__list-item-link.active,.hds-side-nav__list-item-link.mock-active,.hds-side-nav__list-item-link:active,.hds-side-nav__list-item-link:hover:focus{background:var(--token-side-nav-color-surface-interactive-active)}.hds-side-nav__list-item-link.active .hds-badge,.hds-side-nav__list-item-link.active .hds-badge-count,.hds-side-nav__list-item-link.mock-active .hds-badge,.hds-side-nav__list-item-link.mock-active .hds-badge-count,.hds-side-nav__list-item-link:active .hds-badge,.hds-side-nav__list-item-link:active .hds-badge-count,.hds-side-nav__list-item-link:hover:focus .hds-badge,.hds-side-nav__list-item-link:hover:focus .hds-badge-count{color:var(--token-color-foreground-primary);background:var(--token-color-surface-strong)}.hds-side-nav__list-item-link--back-link.mock-active .hds-side-nav__list-item-icon-leading,.hds-side-nav__list-item-link--back-link.mock-active .hds-side-nav__list-item-icon-trailing,.hds-side-nav__list-item-link--back-link.mock-active .hds-side-nav__list-item-text,.hds-side-nav__list-item-link--back-link:active .hds-side-nav__list-item-icon-leading,.hds-side-nav__list-item-link--back-link:active .hds-side-nav__list-item-icon-trailing,.hds-side-nav__list-item-link--back-link:active .hds-side-nav__list-item-text,.hds-side-nav__list-item-text{color:var(--token-side-nav-color-foreground-primary)}.hds-side-nav__list-item-link--back-link.mock-active,.hds-side-nav__list-item-link--back-link:active{background:var(--token-side-nav-color-surface-primary)}.hds-side-nav__list-item-text{text-align:left}.hds-side-nav__list-item-icon-leading{flex:none}.hds-side-nav__list-item-icon-trailing{flex:none;margin-left:auto}.hds-side-nav__toggle-button{position:absolute;top:22px;left:calc(var(--token-side-nav-wrapper-border-width) * -1);z-index:1;display:flex;flex-direction:row-reverse;align-items:center;width:26px;height:36px;padding:0 4px;color:var(--token-color-foreground-high-contrast);background:0 0;background-color:var(--token-side-nav-color-surface-primary);border:var(--token-side-nav-wrapper-border-width) solid var(--token-side-nav-wrapper-border-color);border-left-color:transparent;border-top-right-radius:var(--token-side-nav-toggle-button-border-radius);border-bottom-right-radius:var(--token-side-nav-toggle-button-border-radius);transform:translateX(var(--hds-app-sidenav-width-expanded));cursor:pointer;transition:transform var(--hds-app-sidenav-animation-duration) var(--hds-app-sidenav-animation-easing),width var(--hds-app-sidenav-animation-duration) var(--hds-app-sidenav-animation-easing)}.hds-side-nav__toggle-button::after,.hds-side-nav__toggle-button::before{position:absolute;left:calc(var(--token-side-nav-wrapper-border-width) * -1);width:calc(var(--token-side-nav-toggle-button-border-radius) * 2);height:calc(var(--token-side-nav-toggle-button-border-radius) * 2);border-left:var(--token-side-nav-wrapper-border-width) solid var(--token-side-nav-wrapper-border-color);box-sizing:border-box;content:""}.hds-side-nav__toggle-button::before{top:calc(var(--token-side-nav-toggle-button-border-radius) * -2);border-bottom:var(--token-side-nav-wrapper-border-width) solid var(--token-side-nav-wrapper-border-color);border-bottom-left-radius:var(--token-side-nav-toggle-button-border-radius);box-shadow:0 var(--token-side-nav-toggle-button-border-radius) 0 var(--token-side-nav-color-surface-primary)}.hds-side-nav__toggle-button::after{bottom:calc(var(--token-side-nav-toggle-button-border-radius) * -2);border-top:var(--token-side-nav-wrapper-border-width) solid var(--token-side-nav-wrapper-border-color);border-top-left-radius:var(--token-side-nav-toggle-button-border-radius);box-shadow:0 calc(var(--token-side-nav-toggle-button-border-radius) * -1) 0 var(--token-side-nav-color-surface-primary)}.hds-side-nav__toggle-button.mock-hover,.hds-side-nav__toggle-button:hover{width:30px;background-color:var(--token-side-nav-color-surface-interactive-hover)}.hds-side-nav__toggle-button.mock-hover::before,.hds-side-nav__toggle-button:hover::before{box-shadow:0 var(--token-side-nav-toggle-button-border-radius) 0 var(--token-side-nav-color-surface-interactive-hover)}.hds-side-nav__toggle-button.mock-hover::after,.hds-side-nav__toggle-button:hover::after{box-shadow:0 calc(var(--token-side-nav-toggle-button-border-radius) * -1) 0 var(--token-side-nav-color-surface-interactive-hover)}.hds-side-nav__toggle-button.mock-active,.hds-side-nav__toggle-button:active{background-color:var(--token-side-nav-color-surface-interactive-active)}.hds-side-nav__toggle-button.mock-active::before,.hds-side-nav__toggle-button:active::before{box-shadow:0 var(--token-side-nav-toggle-button-border-radius) 0 var(--token-side-nav-color-surface-interactive-active)}.hds-side-nav__toggle-button.mock-active::after,.hds-side-nav__toggle-button:active::after{box-shadow:0 calc(var(--token-side-nav-toggle-button-border-radius) * -1) 0 var(--token-side-nav-color-surface-interactive-active)}.hds-side-nav__toggle-button.mock-focus,.hds-side-nav__toggle-button:focus-visible{border-color:var(--token-color-focus-action-internal);outline:var(--token-color-focus-action-external) solid 3px}.hds-table__th-sort button,.hds-tabs__tab-button,.hds-tooltip-button{outline-color:transparent;outline-style:solid}.hds-side-nav--is-minimized .hds-side-nav__toggle-button{transform:translateX(var(--hds-app-sidenav-width-minimized))}.hds-side-nav .ember-a11y-refocus-skip-link{top:10px;left:10px;z-index:20;width:-moz-max-content;width:max-content;padding:2px 10px 4px;color:var(--token-color-foreground-action);font-family:var(--token-typography-display-200-font-family);background-color:var(--token-color-surface-faint);border-radius:3px;transform:translateY(-200%);transition:.6s ease-in-out}.hds-side-nav .ember-a11y-refocus-skip-link:focus{transform:translateY(0)}.hds-stepper-indicator-step{position:relative;width:24px;height:24px}.hds-stepper-indicator-step__svg-hexagon{width:100%;height:100%;filter:drop-shadow(0 1px 1px rgba(101, 106, 118, .05))}.hds-stepper-indicator-step__status{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center}.hds-stepper-indicator-step__icon{width:12px;height:12px}.hds-stepper-indicator-step__text{width:20px;overflow:hidden;white-space:nowrap;text-align:center;-webkit-user-select:none;-moz-user-select:none;user-select:none}.hds-stepper-indicator-step--status-incomplete .hds-stepper-indicator-step__status{color:var(--token-color-foreground-strong)}.hds-stepper-indicator-step--status-complete .hds-stepper-indicator-step__status,.hds-stepper-indicator-step--status-processing .hds-stepper-indicator-step__status,.hds-stepper-indicator-step--status-progress .hds-stepper-indicator-step__status{color:var(--token-color-foreground-high-contrast)}.hds-stepper-indicator-step--status-incomplete .hds-stepper-indicator-step__svg-hexagon path{fill:var(--token-color-surface-faint);stroke:var(--token-color-foreground-strong)}.hds-stepper-indicator-step--status-complete .hds-stepper-indicator-step__svg-hexagon path,.hds-stepper-indicator-step--status-processing .hds-stepper-indicator-step__svg-hexagon path,.hds-stepper-indicator-step--status-progress .hds-stepper-indicator-step__svg-hexagon path{fill:var(--token-color-foreground-strong);stroke:var(--token-color-foreground-strong)}.hds-stepper-indicator-step--is-interactive{cursor:pointer}.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-incomplete .hds-stepper-indicator-step__status{color:var(--token-color-foreground-primary)}.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-processing .hds-stepper-indicator-step__status,.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-progress .hds-stepper-indicator-step__status{color:var(--token-color-foreground-high-contrast)}.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-incomplete .hds-stepper-indicator-step__svg-hexagon path{fill:var(--token-color-surface-interactive);stroke:var(--token-color-border-strong)}.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-incomplete.mock-hover .hds-stepper-indicator-step__svg-hexagon path,.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-incomplete:hover .hds-stepper-indicator-step__svg-hexagon path{fill:var(--token-color-surface-interactive-hover)}.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-incomplete.mock-active .hds-stepper-indicator-step__svg-hexagon path,.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-incomplete:active .hds-stepper-indicator-step__svg-hexagon path{fill:var(--token-color-surface-interactive-active)}.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-progress .hds-stepper-indicator-step__svg-hexagon path{fill:var(--token-color-palette-blue-200);stroke:var(--token-color-palette-blue-300)}.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-progress.mock-hover .hds-stepper-indicator-step__svg-hexagon path,.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-progress:hover .hds-stepper-indicator-step__svg-hexagon path{fill:var(--token-color-palette-blue-300);stroke:var(--token-color-palette-blue-400)}.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-progress.mock-active .hds-stepper-indicator-step__svg-hexagon path,.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-progress:active .hds-stepper-indicator-step__svg-hexagon path{fill:var(--token-color-palette-blue-400);stroke:var(--token-color-palette-blue-400)}.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-processing .hds-stepper-indicator-step__svg-hexagon path{fill:var(--token-color-palette-blue-200);stroke:var(--token-color-palette-blue-300)}.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-processing.mock-hover .hds-stepper-indicator-step__svg-hexagon path,.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-processing:hover .hds-stepper-indicator-step__svg-hexagon path{fill:var(--token-color-palette-blue-300);stroke:var(--token-color-palette-blue-400)}.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-processing.mock-active .hds-stepper-indicator-step__svg-hexagon path,.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-processing:active .hds-stepper-indicator-step__svg-hexagon path{fill:var(--token-color-palette-blue-400);stroke:var(--token-color-palette-blue-400)}.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-complete .hds-stepper-indicator-step__status{color:var(--token-color-palette-blue-200)}.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-complete .hds-stepper-indicator-step__svg-hexagon path{fill:var(--token-color-palette-blue-50);stroke:var(--token-color-palette-blue-300)}.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-complete.mock-active .hds-stepper-indicator-step__svg-hexagon path,.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-complete.mock-hover .hds-stepper-indicator-step__svg-hexagon path,.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-complete:active .hds-stepper-indicator-step__svg-hexagon path,.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-complete:hover .hds-stepper-indicator-step__svg-hexagon path{fill:var(--token-color-palette-blue-100);stroke:var(--token-color-palette-blue-400)}.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-complete.mock-hover .hds-stepper-indicator-step__status,.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-complete:hover .hds-stepper-indicator-step__status{color:var(--token-color-palette-blue-300)}.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-complete.mock-active .hds-stepper-indicator-step__status,.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-complete:active .hds-stepper-indicator-step__status{color:var(--token-color-palette-blue-400)}.hds-stepper-indicator-task{position:relative;display:flex;align-items:center;justify-content:center;width:16px;height:16px;color:var(--token-color-foreground-strong)}.hds-stepper-indicator-task__icon{width:12px;height:12px}.hds-stepper-indicator-task--is-interactive{cursor:pointer}.hds-stepper-indicator-task--is-interactive.hds-stepper-indicator-task--status-incomplete{color:var(--token-color-palette-neutral-300)}.hds-stepper-indicator-task--is-interactive.hds-stepper-indicator-task--status-incomplete.mock-hover,.hds-stepper-indicator-task--is-interactive.hds-stepper-indicator-task--status-incomplete:hover{color:var(--token-color-palette-blue-300)}.hds-stepper-indicator-task--is-interactive.hds-stepper-indicator-task--status-incomplete.mock-active,.hds-stepper-indicator-task--is-interactive.hds-stepper-indicator-task--status-incomplete:active{color:var(--token-color-palette-blue-400)}.hds-stepper-indicator-task--is-interactive.hds-stepper-indicator-task--status-progress{color:var(--token-color-palette-blue-200)}.hds-stepper-indicator-task--is-interactive.hds-stepper-indicator-task--status-progress.mock-hover,.hds-stepper-indicator-task--is-interactive.hds-stepper-indicator-task--status-progress:hover{color:var(--token-color-palette-blue-300)}.hds-stepper-indicator-task--is-interactive.hds-stepper-indicator-task--status-progress.mock-active,.hds-stepper-indicator-task--is-interactive.hds-stepper-indicator-task--status-progress:active{color:var(--token-color-palette-blue-400)}.hds-stepper-indicator-task--is-interactive.hds-stepper-indicator-task--status-processing{color:var(--token-color-palette-blue-200)}.hds-stepper-indicator-task--is-interactive.hds-stepper-indicator-task--status-processing.mock-hover,.hds-stepper-indicator-task--is-interactive.hds-stepper-indicator-task--status-processing:hover{color:var(--token-color-palette-blue-300)}.hds-stepper-indicator-task--is-interactive.hds-stepper-indicator-task--status-processing.mock-active,.hds-stepper-indicator-task--is-interactive.hds-stepper-indicator-task--status-processing:active{color:var(--token-color-palette-blue-400)}.hds-stepper-indicator-task--is-interactive.hds-stepper-indicator-task--status-complete{color:var(--token-color-palette-green-200)}.hds-stepper-indicator-task--is-interactive.hds-stepper-indicator-task--status-complete.mock-hover,.hds-stepper-indicator-task--is-interactive.hds-stepper-indicator-task--status-complete:hover{color:var(--token-color-palette-green-300)}.hds-stepper-indicator-task--is-interactive.hds-stepper-indicator-task--status-complete.mock-active,.hds-stepper-indicator-task--is-interactive.hds-stepper-indicator-task--status-complete:active{color:var(--token-color-palette-green-400)}.hds-table{width:100%;border:1px solid var(--token-color-border-primary);border-radius:6px}.hds-table--layout-fixed{table-layout:fixed}.hds-table__thead .hds-table__tr{color:var(--token-color-foreground-strong);background-color:var(--token-color-surface-strong)}.hds-table__thead .hds-table__tr:first-of-type th:first-child{border-top-left-radius:5px}.hds-table__thead .hds-table__tr:first-of-type th:last-child{border-top-right-radius:5px}.hds-table__thead .hds-table__th,.hds-table__thead .hds-table__th-sort{min-height:48px}.hds-table__th,.hds-table__th-sort{text-align:left;border-top:none;border-right:none;border-bottom:1px solid var(--token-color-border-primary);border-left:none}.hds-table__th{padding:14px 16px 13px}.hds-table__th-sort{padding:0}.hds-table__th-sort button{width:100%;height:100%;min-height:48px;margin:0;padding:14px 16px 13px;text-align:inherit;background-color:transparent;border:1px solid transparent;border-radius:inherit;position:relative;isolation:isolate}.hds-table__th-sort button .hds-table__th-sort--button-content{display:flex;align-items:center}.hds-table__th-sort button .hds-table__th-sort--button-content .flight-icon{flex:none;margin-left:8px;color:var(--token-color-foreground-action)}.hds-table__th-sort button.mock-hover,.hds-table__th-sort button:hover{color:var(--token-color-foreground-strong);background-color:var(--token-color-palette-neutral-200);cursor:pointer}.hds-table__th-sort button::before{position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1;border-radius:inherit;content:""}.hds-table__th-sort button:focus:not(:focus-visible)::before{box-shadow:none}.hds-table__th-sort button:focus-visible::before{box-shadow:var(--token-focus-ring-action-box-shadow)}.hds-table__th-sort button.mock-focus.mock-active::before,.hds-table__th-sort button:focus:active::before{box-shadow:none}.hds-table__th-sort button.mock-active,.hds-table__th-sort button:active{color:var(--token-color-foreground-strong);background-color:var(--token-color-palette-neutral-300)}.hds-table__tbody .hds-table__tr,.hds-tabs__tab,.hds-tag__dismiss-icon{color:var(--token-color-foreground-primary)}.hds-table--striped .hds-table__tbody .hds-table__tr:nth-child(even){background-color:var(--token-color-surface-faint)}.hds-table--density-short .hds-table__tbody td,.hds-table--density-short .hds-table__tbody th{padding:6px 16px 5px}.hds-table--density-medium .hds-table__tbody td,.hds-table--density-medium .hds-table__tbody th{padding:14px 16px 13px}.hds-table--density-tall .hds-table__tbody td,.hds-table--density-tall .hds-table__tbody th{padding:22px 16px 21px}.hds-table--valign-top .hds-table__tbody td,.hds-table--valign-top .hds-table__tbody th{vertical-align:top}.hds-table--valign-middle .hds-table__tbody td,.hds-table--valign-middle .hds-table__tbody th,.hds-tag{vertical-align:middle}.hds-table__td--text-right,.hds-table__th--text-right,.hds-table__th-sort--text-right{text-align:right}.hds-table__th-sort--text-right .hds-table__th-sort--button-content{justify-content:flex-end}.hds-table__td--text-center,.hds-table__th--text-center,.hds-table__th-sort--text-center{text-align:center}.hds-table__tbody .hds-table__tr{background-color:var(--token-color-surface-primary)}.hds-table__tbody .hds-table__tr td,.hds-table__tbody .hds-table__tr th{border-top:none;border-right:none;border-bottom:1px solid var(--token-color-border-primary);border-left:none}.hds-table__tbody .hds-table__tr:last-of-type td,.hds-table__tbody .hds-table__tr:last-of-type th{border-bottom:none}.hds-table__tbody .hds-table__tr:last-of-type td:first-child,.hds-table__tbody .hds-table__tr:last-of-type th:first-child{border-bottom-left-radius:5px}.hds-table__tbody .hds-table__tr:last-of-type td:last-child{border-bottom-right-radius:5px}.hds-tabs__tablist-wrapper{position:relative}.hds-tabs__tablist-wrapper::before{position:absolute;right:0;bottom:calc((var(--token-tabs-indicator-height) - var(--token-tabs-divider-height))/ 2);left:0;display:block;border-top:var(--token-tabs-divider-height) solid var(--token-color-border-primary);content:""}.hds-tabs__tablist{position:relative;display:flex;margin:0;padding:0;overflow-x:auto;-webkit-overflow-scrolling:touch}.hds-tabs__tab{position:relative;display:flex;align-items:center;height:var(--token-tabs-tab-height);margin:0;padding:var(--token-tabs-tab-padding-vertical) var(--token-tabs-tab-padding-horizontal);white-space:nowrap;list-style:none}.hds-tabs__tab.hds-tabs__tab--is-selected,.hds-tabs__tab.mock-hover,.hds-tabs__tab:hover{color:var(--token-color-foreground-action)}.hds-tabs__tab.hds-tabs__tab--is-selected:hover{color:var(--token-color-foreground-action-hover)}.hds-tabs__tab.hds-tabs__tab--is-selected:hover~.hds-tabs__tab-indicator{background:var(--token-color-foreground-action-hover)}.hds-tabs__tab-button{isolation:isolate;position:static;display:flex;gap:var(--token-tabs-tab-gutter);align-items:center;padding:0;color:inherit;background-color:transparent;border:none;border-radius:var(--token-tabs-tab-border-radius);cursor:pointer}.hds-tabs__tab-button::before{position:absolute;top:var(--token-tabs-tab-focus-inset);right:var(--token-tabs-tab-focus-inset);bottom:var(--token-tabs-tab-focus-inset);left:var(--token-tabs-tab-focus-inset);z-index:-1;border-radius:5px;content:""}.hds-tabs__tab-button.mock-focus::before,.hds-tabs__tab-button:focus::before{box-shadow:var(--token-focus-ring-action-box-shadow)}.hds-tabs__tab-button:focus:not(:focus-visible)::before{box-shadow:none}.hds-tabs__tab-button:focus-visible::before,.hds-tag__dismiss.mock-focus.mock-focus,.hds-tag__dismiss.mock-focus:focus,.hds-tag__dismiss:focus.mock-focus,.hds-tag__dismiss:focus:focus,.hds-tag__link.mock-focus.mock-focus,.hds-tag__link.mock-focus:focus,.hds-tag__link:focus.mock-focus,.hds-tag__link:focus:focus{box-shadow:var(--token-focus-ring-action-box-shadow)}.hds-tabs__tab-button.mock-focus.mock-active::before,.hds-tabs__tab-button:focus:active::before{box-shadow:none}.hds-tabs__tab-button::after{position:absolute;content:"";inset:0}.hds-tabs__tab-indicator{position:absolute;right:0;bottom:0;left:var(--indicator-left-pos);z-index:10;display:block;width:var(--indicator-width);height:var(--token-tabs-indicator-height);background-color:var(--token-color-foreground-action);border-radius:var(--token-tabs-indicator-height)}.hds-tabs__panel[hidden],.readonly-codemirror .CodeMirror-cursors{display:none}.hds-tag,.hds-tag__dismiss,.hds-tag__link{background-color:var(--token-color-surface-interactive)}@media screen and (prefers-reduced-motion:no-preference){.hds-tabs__tab-indicator{transition-timing-function:var(--token-tabs-indicator-transition-function);transition-duration:var(--token-tabs-indicator-transition-duration);transition-property:left,width}}.tippy-box,.tippy-box[data-theme~=hds]{transition-property:transform,visibility,opacity}.hds-tag,:where(.hds-tooltip-button--is-inline){display:inline-flex}.hds-tag{align-items:stretch;line-height:1rem;border:1px solid var(--token-color-border-strong);border-radius:50px}.hds-tag__dismiss{flex:0 0 auto;margin:0;padding:6px 4px 6px 8px;border:none;border-radius:inherit;border-top-right-radius:0;border-bottom-right-radius:0}.hds-tag__dismiss-icon{width:12px;height:12px}.hds-tag__link,.hds-tag__text{flex:1 0 0;padding:3px 10px 5px;border-radius:inherit}.hds-tag__dismiss~.hds-tag__link,.hds-tag__dismiss~.hds-tag__text{padding:3px 8px 5px 6px;border-top-left-radius:0;border-bottom-left-radius:0}.hds-tag__dismiss,.hds-tag__link{cursor:pointer}.hds-tag__dismiss.mock-hover,.hds-tag__dismiss:hover,.hds-tag__link.mock-hover,.hds-tag__link:hover{background-color:var(--token-color-surface-interactive-hover)}.hds-tag__dismiss.mock-active,.hds-tag__dismiss:active,.hds-tag__link.mock-active,.hds-tag__link:active{background-color:var(--token-color-surface-interactive-active)}.hds-tag__dismiss.mock-focus,.hds-tag__dismiss:focus,.hds-tag__link.mock-focus,.hds-tag__link:focus{outline-style:solid;outline-color:transparent;z-index:1}.hds-tag__dismiss.mock-focus:focus:not(:focus-visible),.hds-tag__dismiss:focus:focus:not(:focus-visible),.hds-tag__link.mock-focus:focus:not(:focus-visible),.hds-tag__link:focus:focus:not(:focus-visible){box-shadow:none}.hds-tag__dismiss.mock-focus:focus-visible,.hds-tag__dismiss:focus:focus-visible,.hds-tag__link.mock-focus:focus-visible,.hds-tag__link:focus:focus-visible{box-shadow:var(--token-focus-ring-action-box-shadow)}.hds-tag__dismiss.mock-focus.mock-focus.mock-active,.hds-tag__dismiss.mock-focus:focus:active,.hds-tag__dismiss:focus.mock-focus.mock-active,.hds-tag__dismiss:focus:focus:active,.hds-tag__link.mock-focus.mock-focus.mock-active,.hds-tag__link.mock-focus:focus:active,.hds-tag__link:focus.mock-focus.mock-active,.hds-tag__link:focus:focus:active{box-shadow:none}.hds-tag--color-primary .hds-tag__link{color:var(--token-color-foreground-action)}.hds-tag--color-primary .hds-tag__link.mock-hover,.hds-tag--color-primary .hds-tag__link:hover{color:var(--token-color-foreground-action-hover)}.hds-tag--color-primary .hds-tag__link.mock-active,.hds-tag--color-primary .hds-tag__link:active{color:var(--token-color-foreground-action-active)}.hds-tag--color-secondary .hds-tag__link{color:var(--token-color-foreground-strong)}.hds-text--align-left{text-align:left}.hds-text--align-center{text-align:center}.hds-text--align-right{text-align:right}.hds-toast{width:-moz-fit-content;width:fit-content;min-width:min(360px,80vw);max-width:min(500px,80vw);box-shadow:var(--token-elevation-higher-box-shadow)}.hds-tooltip-button{position:relative;isolation:isolate}.hds-tooltip-button::before{position:absolute;top:var(--token-tooltip-focus-offset);right:var(--token-tooltip-focus-offset);bottom:var(--token-tooltip-focus-offset);left:var(--token-tooltip-focus-offset);z-index:-1;border-radius:5px;content:""}.hds-tooltip-button.mock-focus::before,.hds-tooltip-button:focus::before{box-shadow:var(--token-focus-ring-action-box-shadow)}.hds-tooltip-button:focus:not(:focus-visible)::before{box-shadow:none}.hds-tooltip-button:focus-visible::before{box-shadow:var(--token-focus-ring-action-box-shadow)}.hds-tooltip-button.mock-focus.mock-active::before,.hds-tooltip-button:focus:active::before{box-shadow:none}:where(.hds-tooltip-button){margin:0;padding:0;color:inherit;font:inherit;text-align:inherit;background-color:inherit;border:none}.disclosure-menu [aria-expanded]~*>ul>[role=treeitem],.disclosure-menu [aria-expanded]~*>ul>li,.disclosure-menu [aria-expanded]~*>ul>li>[role=menuitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=option],.menu-panel>ul>[role=treeitem],.menu-panel>ul>li,.menu-panel>ul>li>[role=menuitem],.menu-panel>ul>li>[role=option],.modal-dialog [role=document] table caption,.modal-dialog [role=document] table thead th,.more-popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.more-popover-menu>[type=checkbox]+label+div>ul>li,.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=option],.popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.popover-menu>[type=checkbox]+label+div>ul>li,.popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=option],main table caption,main table thead th,table td,table th,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=option],table.with-details tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=option],td,th{text-align:left}:where(.hds-tooltip-button--is-block){display:flex}article,aside,figure,footer,header,hgroup,hr,section{display:block}.tippy-box[data-theme~=hds]{padding:var(--token-tooltip-padding-vertical) var(--token-tooltip-padding-horizontal);color:var(--token-tooltip-color-foreground-primary);font-weight:var(--token-typography-font-weight-regular);font-size:var(--token-typography-body-200-font-size);font-family:var(--token-typography-body-200-font-family);line-height:var(--token-typography-body-200-line-height);overflow-wrap:break-word;background-color:var(--token-tooltip-color-surface-primary);border-radius:var(--token-tooltip-border-radius);box-shadow:var(--token-elevation-higher-box-shadow)}.tippy-box[data-theme~=hds][data-animation=fade][data-state=hidden]{opacity:0}.tippy-box[data-theme~=hds][data-inertia][data-state=visible]{transition-timing-function:var(--token-tooltip-transition-function)}.tippy-box[data-theme~=hds] .tippy-content{position:relative;z-index:1;max-width:var(--token-tooltip-max-width);white-space:normal}.tippy-box[data-theme~=hds] .tippy-svg-arrow{fill:var(--token-tooltip-color-surface-primary)}.sr-only{position:absolute!important;width:1px!important;height:1px!important;margin:-1px!important;padding:0!important;overflow:hidden!important;white-space:nowrap!important;border:0!important;clip:rect(1px,1px,1px,1px)!important;-webkit-clip-path:inset(50%)!important;clip-path:inset(50%)!important}fieldset,hr{border:none}blockquote,body,dd,dl,dt,fieldset,figure,hr,html,iframe,legend,li,ol,p,textarea,ul{margin:0;padding:0}ul{list-style:none}table td,table th{padding:0}audio,embed,img,object,video{height:auto;max-width:100%}.consul-intention-action-warn-modal button.dangerous,.copy-button button,.disclosure-menu [aria-expanded]~*>ul>[role=treeitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=menuitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=option],.informed-action>ul>li>*,.menu-panel>ul>[role=treeitem],.menu-panel>ul>li>[role=menuitem],.menu-panel>ul>li>[role=option],.more-popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=option],.popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=option],.popover-select label>*,.topology-notices button,.type-sort.popover-select label>*,label span,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=option],table.with-details tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}a{color:var(--token-color-foreground-action)}span,strong,td,th{color:inherit}body{color:var(--token-color-foreground-strong)}html{background-color:var(--token-color-surface-primary);font-size:16px;text-rendering:optimizeLegibility;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;overflow-x:hidden;overflow-y:scroll;box-sizing:border-box;min-width:300px}hr{background-color:var(--token-color-surface-interactive-active);height:1px;margin:1.5rem 0}body,input,select,textarea{font-family:var(--token-typography-font-stack-text)}strong{font-style:inherit}code,pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}pre{-webkit-overflow-scrolling:touch;overflow-x:auto;white-space:pre;word-wrap:normal}*,::after,::before{box-sizing:inherit;animation-play-state:paused;animation-fill-mode:forwards}fieldset{width:100%}a,input[type=checkbox],input[type=radio]{cursor:pointer}td,th{vertical-align:top}button,input,select,textarea{margin:0}iframe{border:0}.consul-bucket-list .service,.consul-bucket-list:not([class]) dt:not([class]),.consul-exposed-path-list>ul>li>.detail dl:not([class]) dt:not([class]),.consul-instance-checks:not([class]) dt:not([class]),.consul-lock-session-list dl:not([class]) dt:not([class]),.consul-server-card dt:not(.name),.consul-upstream-instance-list dl.local-bind-address dt,.consul-upstream-instance-list dl.local-bind-socket-path dt,.consul-upstream-instance-list dl:not([class]) dt:not([class]),.list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dt:not([class]),.route-title,.tag-list:not([class]) dt:not([class]),section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) dt:not([class]),section[data-route="dc.show.license"] .validity dl .expired+dd,section[data-route="dc.show.license"] .validity dl:not([class]) dt:not([class]),td.tags:not([class]) dt:not([class]){position:absolute;overflow:hidden;clip:rect(0 0 0 0);width:1px;height:1px;margin:-1px;padding:0;border:0}.consul-upstream-instance-list dl.local-bind-socket-mode dt,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dt{position:static!important;clip:unset!important;overflow:visible!important;width:auto!important;height:auto!important;margin:0!important;padding:0!important}.animatable.tab-nav ul::after,.consul-auth-method-type,.consul-external-source,.consul-intention-action-warn-modal button.dangerous,.consul-intention-action-warn-modal button.dangerous:hover:active,.consul-intention-action-warn-modal button.dangerous:hover:not(:disabled):not(:active),.consul-intention-list td.intent- strong,.consul-intention-permission-form button.type-submit,.consul-intention-permission-form button.type-submit:disabled,.consul-intention-permission-form button.type-submit:focus:not(:disabled),.consul-intention-permission-form button.type-submit:hover:not(:disabled),.consul-intention-search-bar .value- span,.consul-kind,.consul-source,.consul-transparent-proxy,.disclosure-menu [aria-expanded]~*>ul>li.dangerous>:first-child,.discovery-chain .route-card>header ul li,.informed-action>ul>.dangerous>*,.informed-action>ul>.dangerous>:focus,.informed-action>ul>.dangerous>:hover,.leader,.menu-panel>ul>li.dangerous>:first-child,.modal-dialog [role=document]>footer,.modal-dialog [role=document]>header,.more-popover-menu>[type=checkbox]+label+div>ul>li.dangerous>:first-child,.popover-menu>[type=checkbox]+label+div>ul>li.dangerous>:first-child,.tab-nav .selected>*,.topology-metrics-source-type,html[data-route^="dc.acls.index"] main td strong,span.policy-node-identity,span.policy-service-identity,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li.dangerous>:first-child,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li.dangerous>:first-child{border-style:solid}.ember-power-select-trigger,.ember-power-select-trigger--active,.ember-power-select-trigger:focus{border-top:1px solid #aaa;border-bottom:1px solid #aaa;border-right:1px solid #aaa;border-left:1px solid #aaa}.animatable.tab-nav ul::after,.app .notifications .app-notification,.tab-nav li>*{transition-duration:.15s;transition-timing-function:ease-out}html body>.brand-loader{transition-timing-function:cubic-bezier(.1,.1,.25,.9);transition-duration:.1s}html[data-state]:not(.ember-loading) body>.brand-loader{animation-timing-function:cubic-bezier(.1,.1,.25,.9);animation-duration:.1s;animation-name:remove-from-flow;animation-fill-mode:forwards}@keyframes remove-from-flow{100%{visibility:hidden;overflow:hidden;clip:rect(0 0 0 0)}}@keyframes typo-truncate{100%{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}}.CodeMirror-lint-tooltip,dd code,dd pre code{font-family:var(--token-typography-font-stack-code);font-size:var(--token-typography-code-100-font-size);line-height:var(--token-typography-code-100-line-height);font-weight:var(--token-typography-font-weight-regular)}.consul-health-check-list .health-check-output pre code,code,pre,pre code{font-family:var(--token-typography-font-stack-code);font-size:var(--token-typography-code-200-font-size);line-height:var(--token-typography-code-200-line-height);font-weight:var(--token-typography-font-weight-regular)}.informed-action header>*{font-size:inherit;font-weight:inherit;line-height:inherit;font-style:inherit}::after,::before{--tw-content:'';display:inline-block;vertical-align:text-top;background-repeat:no-repeat;background-position:center;mask-repeat:no-repeat;-webkit-mask-repeat:no-repeat;mask-position:center;-webkit-mask-position:center}::before{animation-name:var(--icon-name-start,var(--icon-name)),var(--icon-size-start,var(--icon-size,icon-000));background-color:var(--icon-color-start,var(--icon-color))}::after{animation-name:var(--icon-name-end,var(--icon-name)),var(--icon-size-end,var(--icon-size,icon-000));background-color:var(--icon-color-end,var(--icon-color))}[style*="--icon-color-start"]::before{color:var(--icon-color-start)}[style*="--icon-color-end"]::after{color:var(--icon-color-end)}[style*="--icon-name-start"]::before,[style*="--icon-name-end"]::after{content:""}@keyframes icon-000{100%{width:1.2em;height:1.2em}}@keyframes icon-100{100%{width:.625rem;height:.625rem}}@keyframes icon-200{100%{width:.75rem;height:.75rem}}@keyframes icon-300{100%{width:1rem;height:1rem}}@keyframes icon-400{100%{width:1.125rem;height:1.125rem}}@keyframes icon-500{100%{width:1.25rem;height:1.25rem}}@keyframes icon-600{100%{width:1.375rem;height:1.375rem}}@keyframes icon-700{100%{width:1.5rem;height:1.5rem}}@keyframes icon-800{100%{width:1.625rem;height:1.625rem}}@keyframes icon-900{100%{width:1.75rem;height:1.75rem}}@keyframes icon-999{100%{width:100%;height:100%}}.consul-intention-permission-header-list dt::before,.consul-intention-permission-list dt::before,.discovery-chain .resolver-card dt,.discovery-chain .route-card section header>::before{font-weight:var(--token-typography-font-weight-regular);background-color:var(--token-color-surface-strong);visibility:visible;padding:0 4px}#downstream-container .topology-metrics-card .details .group span::before,#downstream-container .topology-metrics-card div .critical::before,#downstream-container .topology-metrics-card div .empty::before,#downstream-container .topology-metrics-card div .health dt::before,#downstream-container .topology-metrics-card div .nspace dt::before,#downstream-container .topology-metrics-card div .partition dt::before,#downstream-container .topology-metrics-card div .passing::before,#downstream-container .topology-metrics-card div .warning::before,#downstream-container>div:first-child span::before,#login-toggle+div footer button::after,#metrics-container .link .config-link::before,#metrics-container .link .metrics-link::before,#metrics-container:hover .sparkline-key-link::before,#upstream-container .topology-metrics-card .details .group span::before,#upstream-container .topology-metrics-card div .critical::before,#upstream-container .topology-metrics-card div .empty::before,#upstream-container .topology-metrics-card div .health dt::before,#upstream-container .topology-metrics-card div .nspace dt::before,#upstream-container .topology-metrics-card div .partition dt::before,#upstream-container .topology-metrics-card div .passing::before,#upstream-container .topology-metrics-card div .warning::before,.animatable.tab-nav ul::after,.consul-auth-method-binding-list dl dt.type+dd span::before,.consul-auth-method-list ul .locality::before,.consul-auth-method-view dl dt.type+dd span::before,.consul-auth-method-view section dl dt.type+dd span::before,.consul-bucket-list .nspace::before,.consul-bucket-list .partition::before,.consul-bucket-list .peer::before,.consul-exposed-path-list>ul>li>.detail .policy-management::before,.consul-exposed-path-list>ul>li>.detail .policy::before,.consul-exposed-path-list>ul>li>.detail .role::before,.consul-exposed-path-list>ul>li>.detail dl.address dt::before,.consul-exposed-path-list>ul>li>.detail dl.behavior dt::before,.consul-exposed-path-list>ul>li>.detail dl.checks dt::before,.consul-exposed-path-list>ul>li>.detail dl.critical dt::before,.consul-exposed-path-list>ul>li>.detail dl.datacenter dt::before,.consul-exposed-path-list>ul>li>.detail dl.empty dt::before,.consul-exposed-path-list>ul>li>.detail dl.lock-delay dt::before,.consul-exposed-path-list>ul>li>.detail dl.mesh dt::before,.consul-exposed-path-list>ul>li>.detail dl.node dt::before,.consul-exposed-path-list>ul>li>.detail dl.nspace dt::before,.consul-exposed-path-list>ul>li>.detail dl.passing dt::before,.consul-exposed-path-list>ul>li>.detail dl.path dt::before,.consul-exposed-path-list>ul>li>.detail dl.port dt::before,.consul-exposed-path-list>ul>li>.detail dl.protocol dt::before,.consul-exposed-path-list>ul>li>.detail dl.socket dt::before,.consul-exposed-path-list>ul>li>.detail dl.ttl dt::before,.consul-exposed-path-list>ul>li>.detail dl.unknown dt::before,.consul-exposed-path-list>ul>li>.detail dl.warning dt::before,.consul-exposed-path-list>ul>li>.header .critical dd::before,.consul-exposed-path-list>ul>li>.header .empty dd::before,.consul-exposed-path-list>ul>li>.header .passing dd::before,.consul-exposed-path-list>ul>li>.header .policy-management dd::before,.consul-exposed-path-list>ul>li>.header .unknown dd::before,.consul-exposed-path-list>ul>li>.header .warning dd::before,.consul-exposed-path-list>ul>li>.header [rel=me] dd::before,.consul-external-source.jwt::before,.consul-external-source.oidc::before,.consul-health-check-list .health-check-output dd em.jwt::before,.consul-health-check-list .health-check-output dd em.oidc::before,.consul-health-check-list .health-check-output::before,.consul-instance-checks dt::before,.consul-intention-fieldsets .value->:last-child::before,.consul-intention-fieldsets .value-allow>:last-child::before,.consul-intention-fieldsets .value-deny>:last-child::before,.consul-intention-list em span::before,.consul-intention-list td strong.jwt::before,.consul-intention-list td strong.oidc::before,.consul-intention-list td.intent- strong::before,.consul-intention-list td.intent-allow strong::before,.consul-intention-list td.intent-deny strong::before,.consul-intention-permission-list .intent-allow::before,.consul-intention-permission-list .intent-deny::before,.consul-intention-permission-list strong.jwt::before,.consul-intention-permission-list strong.oidc::before,.consul-intention-search-bar .value- span::before,.consul-intention-search-bar .value-allow span::before,.consul-intention-search-bar .value-deny span::before,.consul-intention-search-bar li button span.jwt::before,.consul-intention-search-bar li button span.oidc::before,.consul-kind::before,.consul-lock-session-list ul>li:not(:first-child)>.detail .policy-management::before,.consul-lock-session-list ul>li:not(:first-child)>.detail .policy::before,.consul-lock-session-list ul>li:not(:first-child)>.detail .role::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.address dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.behavior dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.checks dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.critical dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.datacenter dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.empty dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.lock-delay dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.mesh dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.node dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.nspace dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.passing dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.path dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.port dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.protocol dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.socket dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.ttl dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.unknown dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.warning dt::before,.consul-lock-session-list ul>li:not(:first-child)>.header .critical dd::before,.consul-lock-session-list ul>li:not(:first-child)>.header .empty dd::before,.consul-lock-session-list ul>li:not(:first-child)>.header .passing dd::before,.consul-lock-session-list ul>li:not(:first-child)>.header .policy-management dd::before,.consul-lock-session-list ul>li:not(:first-child)>.header .unknown dd::before,.consul-lock-session-list ul>li:not(:first-child)>.header .warning dd::before,.consul-lock-session-list ul>li:not(:first-child)>.header [rel=me] dd::before,.consul-peer-search-bar li button span.jwt::before,.consul-peer-search-bar li button span.oidc::before,.consul-server-card .health-status+dd.jwt::before,.consul-server-card .health-status+dd.oidc::before,.consul-upstream-instance-list dl.datacenter dt::before,.consul-upstream-instance-list dl.nspace dt::before,.consul-upstream-instance-list dl.partition dt::before,.consul-upstream-instance-list li>.detail .policy-management::before,.consul-upstream-instance-list li>.detail .policy::before,.consul-upstream-instance-list li>.detail .role::before,.consul-upstream-instance-list li>.detail dl.address dt::before,.consul-upstream-instance-list li>.detail dl.behavior dt::before,.consul-upstream-instance-list li>.detail dl.checks dt::before,.consul-upstream-instance-list li>.detail dl.critical dt::before,.consul-upstream-instance-list li>.detail dl.datacenter dt::before,.consul-upstream-instance-list li>.detail dl.empty dt::before,.consul-upstream-instance-list li>.detail dl.lock-delay dt::before,.consul-upstream-instance-list li>.detail dl.mesh dt::before,.consul-upstream-instance-list li>.detail dl.node dt::before,.consul-upstream-instance-list li>.detail dl.nspace dt::before,.consul-upstream-instance-list li>.detail dl.passing dt::before,.consul-upstream-instance-list li>.detail dl.path dt::before,.consul-upstream-instance-list li>.detail dl.port dt::before,.consul-upstream-instance-list li>.detail dl.protocol dt::before,.consul-upstream-instance-list li>.detail dl.socket dt::before,.consul-upstream-instance-list li>.detail dl.ttl dt::before,.consul-upstream-instance-list li>.detail dl.unknown dt::before,.consul-upstream-instance-list li>.detail dl.warning dt::before,.consul-upstream-instance-list li>.header .critical dd::before,.consul-upstream-instance-list li>.header .empty dd::before,.consul-upstream-instance-list li>.header .passing dd::before,.consul-upstream-instance-list li>.header .policy-management dd::before,.consul-upstream-instance-list li>.header .unknown dd::before,.consul-upstream-instance-list li>.header .warning dd::before,.consul-upstream-instance-list li>.header [rel=me] dd::before,.consul-upstream-list dl.partition dt::before,.copy-button button::before,.dangerous.informed-action header::before,.disclosure-menu [aria-expanded]~*>ul>li.is-active>::after,.disclosure-menu [aria-expanded]~*>ul>li[aria-checked]>::after,.disclosure-menu [aria-expanded]~*>ul>li[aria-current]>::after,.disclosure-menu [aria-expanded]~*>ul>li[aria-selected]>::after,.discovery-chain .resolvers>header span::after,.discovery-chain .route-card::before,.discovery-chain .route-card>header ul li.jwt::before,.discovery-chain .route-card>header ul li.oidc::before,.discovery-chain .routes>header span::after,.discovery-chain .splitter-card::before,.discovery-chain .splitters>header span::after,.empty-state li[class*=-link]>::after,.has-error>strong::before,.info.informed-action header::before,.jwt.consul-auth-method-type::before,.jwt.consul-external-source::before,.jwt.consul-kind::before,.jwt.consul-source::before,.jwt.consul-transparent-proxy::before,.jwt.leader::before,.jwt.topology-metrics-source-type::before,.leader::before,.list-collection>button::after,.list-collection>ul>li:not(:first-child)>.detail .policy-management::before,.list-collection>ul>li:not(:first-child)>.detail .policy::before,.list-collection>ul>li:not(:first-child)>.detail .role::before,.list-collection>ul>li:not(:first-child)>.detail dl.address dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.behavior dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.checks dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.critical dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.datacenter dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.empty dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.lock-delay dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.mesh dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.node dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.nspace dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.passing dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.path dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.port dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.protocol dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.socket dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.ttl dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.unknown dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.warning dt::before,.list-collection>ul>li:not(:first-child)>.header .critical dd::before,.list-collection>ul>li:not(:first-child)>.header .empty dd::before,.list-collection>ul>li:not(:first-child)>.header .passing dd::before,.list-collection>ul>li:not(:first-child)>.header .policy-management dd::before,.list-collection>ul>li:not(:first-child)>.header .unknown dd::before,.list-collection>ul>li:not(:first-child)>.header .warning dd::before,.list-collection>ul>li:not(:first-child)>.header [rel=me] dd::before,.menu-panel>ul>li.is-active>::after,.menu-panel>ul>li[aria-checked]>::after,.menu-panel>ul>li[aria-current]>::after,.menu-panel>ul>li[aria-selected]>::after,.modal-dialog [role=document] a[rel*=help]::after,.modal-dialog [role=document] table td.folder::before,.modal-dialog [role=document] table th span::after,.more-popover-menu>[type=checkbox]+label+div>ul>li.is-active>::after,.more-popover-menu>[type=checkbox]+label+div>ul>li[aria-checked]>::after,.more-popover-menu>[type=checkbox]+label+div>ul>li[aria-current]>::after,.more-popover-menu>[type=checkbox]+label+div>ul>li[aria-selected]>::after,.more-popover-menu>[type=checkbox]+label>::after,.oidc-select .auth0-oidc-provider::before,.oidc-select .google-oidc-provider::before,.oidc-select .microsoft-oidc-provider::before,.oidc-select .okta-oidc-provider::before,.oidc.consul-auth-method-type::before,.oidc.consul-external-source::before,.oidc.consul-kind::before,.oidc.consul-source::before,.oidc.consul-transparent-proxy::before,.oidc.leader::before,.oidc.topology-metrics-source-type::before,.popover-menu>[type=checkbox]+label+div>ul>li.is-active>::after,.popover-menu>[type=checkbox]+label+div>ul>li[aria-checked]>::after,.popover-menu>[type=checkbox]+label+div>ul>li[aria-current]>::after,.popover-menu>[type=checkbox]+label+div>ul>li[aria-selected]>::after,.popover-menu>[type=checkbox]+label>::after,.popover-select .jwt button::before,.popover-select .oidc button::before,.popover-select .value-critical button::before,.popover-select .value-empty button::before,.popover-select .value-passing button::before,.popover-select .value-unknown button::before,.popover-select .value-warning button::before,.search-bar-status li.jwt:not(.remove-all)::before,.search-bar-status li.oidc:not(.remove-all)::before,.search-bar-status li:not(.remove-all) button::before,.sparkline-key h3::before,.tag-list dt::before,.tooltip-panel dd>div::before,.topology-metrics-popover.deny .tippy-arrow::after,.topology-metrics-popover.deny>button::before,.topology-metrics-popover.l7 .tippy-arrow::after,.topology-metrics-popover.l7>button::before,.topology-metrics-popover.not-defined .tippy-arrow::after,.topology-metrics-popover.not-defined>button::before,.topology-metrics-status-error span::before,.topology-metrics-status-loader span::before,.topology-notices button::before,.type-sort.popover-select label>::before,.type-source.popover-select li.partition button::before,.warning.informed-action header::before,.warning.modal-dialog header::before,[class*=status-].empty-state header::before,a[rel*=external]::after,html[data-route^="dc.acls.index"] main td strong.jwt::before,html[data-route^="dc.acls.index"] main td strong.oidc::before,main a[rel*=help]::after,main header nav:first-child ol li:first-child a::before,main table td.folder::before,main table th span::after,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl.jwt::before,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl.oidc::before,section[data-route="dc.show.serverstatus"] .server-failure-tolerance header em.jwt::before,section[data-route="dc.show.serverstatus"] .server-failure-tolerance header em.oidc::before,span.jwt.policy-node-identity::before,span.jwt.policy-service-identity::before,span.oidc.policy-node-identity::before,span.oidc.policy-service-identity::before,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li.is-active>::after,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li[aria-checked]>::after,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li[aria-current]>::after,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li[aria-selected]>::after,table.has-actions tr>.actions>[type=checkbox]+label>::after,table.with-details td:only-child>div>label::before,table.with-details td>label::before,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li.is-active>::after,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li[aria-checked]>::after,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li[aria-current]>::after,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li[aria-selected]>::after,table.with-details tr>.actions>[type=checkbox]+label>::after,td.tags dt::before{content:""}@keyframes icon-alert-circle-outline{100%{-webkit-mask-image:var(--icon-alert-circle-16);mask-image:var(--icon-alert-circle-16);background-color:var(--icon-color,var(--color-alert-circle-outline-500,currentColor))}}[class*=status-].empty-state header::before{--icon-name:icon-alert-circle-outline;content:""}@keyframes icon-alert-triangle{100%{-webkit-mask-image:var(--icon-alert-triangle-16);mask-image:var(--icon-alert-triangle-16);background-color:var(--icon-color,var(--color-alert-triangle-500,currentColor))}}#downstream-container .topology-metrics-card div .warning::before,#upstream-container .topology-metrics-card div .warning::before,.consul-exposed-path-list>ul>li>.detail dl.warning dt::before,.consul-exposed-path-list>ul>li>.header .warning dd::before,.consul-health-check-list .warning.health-check-output::before,.consul-instance-checks.warning dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.warning dt::before,.consul-lock-session-list ul>li:not(:first-child)>.header .warning dd::before,.consul-upstream-instance-list li>.detail dl.warning dt::before,.consul-upstream-instance-list li>.header .warning dd::before,.dangerous.informed-action header::before,.list-collection>ul>li:not(:first-child)>.detail dl.warning dt::before,.list-collection>ul>li:not(:first-child)>.header .warning dd::before,.popover-select .value-warning button::before,.topology-metrics-popover.not-defined .tippy-arrow::after,.topology-metrics-popover.not-defined>button::before,.warning.informed-action header::before,.warning.modal-dialog header::before{--icon-name:icon-alert-triangle;content:""}@keyframes icon-arrow-left{100%{-webkit-mask-image:var(--icon-arrow-left-16);mask-image:var(--icon-arrow-left-16);background-color:var(--icon-color,var(--color-arrow-left-500,currentColor))}}@keyframes icon-arrow-right{100%{-webkit-mask-image:var(--icon-arrow-right-16);mask-image:var(--icon-arrow-right-16);background-color:var(--icon-color,var(--color-arrow-right-500,currentColor))}}@keyframes icon-cancel-plain{100%{-webkit-mask-image:var(--icon-x-16);mask-image:var(--icon-x-16);background-color:var(--icon-color,var(--color-cancel-plain-500,currentColor))}}.search-bar-status li:not(.remove-all) button::before{--icon-name:icon-cancel-plain;content:""}@keyframes icon-cancel-square-fill{100%{-webkit-mask-image:var(--icon-x-square-fill-16);mask-image:var(--icon-x-square-fill-16);background-color:var(--icon-color,var(--color-cancel-square-fill-500,currentColor))}}#downstream-container .topology-metrics-card div .critical::before,#upstream-container .topology-metrics-card div .critical::before,.consul-exposed-path-list>ul>li>.detail dl.critical dt::before,.consul-exposed-path-list>ul>li>.header .critical dd::before,.consul-health-check-list .critical.health-check-output::before,.consul-instance-checks.critical dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.critical dt::before,.consul-lock-session-list ul>li:not(:first-child)>.header .critical dd::before,.consul-upstream-instance-list li>.detail dl.critical dt::before,.consul-upstream-instance-list li>.header .critical dd::before,.has-error>strong::before,.list-collection>ul>li:not(:first-child)>.detail dl.critical dt::before,.list-collection>ul>li:not(:first-child)>.header .critical dd::before,.popover-select .value-critical button::before,.topology-metrics-popover.deny .tippy-arrow::after,.topology-metrics-popover.deny>button::before{--icon-name:icon-cancel-square-fill;content:""}@keyframes icon-check-plain{100%{-webkit-mask-image:var(--icon-check-16);mask-image:var(--icon-check-16);background-color:var(--icon-color,var(--color-check-plain-500,currentColor))}}.disclosure-menu [aria-expanded]~*>ul>li.is-active>::after,.disclosure-menu [aria-expanded]~*>ul>li[aria-checked]>::after,.disclosure-menu [aria-expanded]~*>ul>li[aria-current]>::after,.disclosure-menu [aria-expanded]~*>ul>li[aria-selected]>::after,.menu-panel>ul>li.is-active>::after,.menu-panel>ul>li[aria-checked]>::after,.menu-panel>ul>li[aria-current]>::after,.menu-panel>ul>li[aria-selected]>::after,.more-popover-menu>[type=checkbox]+label+div>ul>li.is-active>::after,.more-popover-menu>[type=checkbox]+label+div>ul>li[aria-checked]>::after,.more-popover-menu>[type=checkbox]+label+div>ul>li[aria-current]>::after,.more-popover-menu>[type=checkbox]+label+div>ul>li[aria-selected]>::after,.popover-menu>[type=checkbox]+label+div>ul>li.is-active>::after,.popover-menu>[type=checkbox]+label+div>ul>li[aria-checked]>::after,.popover-menu>[type=checkbox]+label+div>ul>li[aria-current]>::after,.popover-menu>[type=checkbox]+label+div>ul>li[aria-selected]>::after,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li.is-active>::after,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li[aria-checked]>::after,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li[aria-current]>::after,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li[aria-selected]>::after,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li.is-active>::after,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li[aria-checked]>::after,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li[aria-current]>::after,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li[aria-selected]>::after{--icon-name:icon-check-plain;content:""}@keyframes icon-chevron-down{100%{-webkit-mask-image:var(--icon-chevron-down-16);mask-image:var(--icon-chevron-down-16);background-color:var(--icon-color,var(--color-chevron-down-500,currentColor))}}.list-collection>button.closed::after,.more-popover-menu>[type=checkbox]+label>::after,.popover-menu>[type=checkbox]+label>::after,.topology-notices button::before,table.has-actions tr>.actions>[type=checkbox]+label>::after,table.with-details td:only-child>div>label::before,table.with-details td>label::before,table.with-details tr>.actions>[type=checkbox]+label>::after{--icon-name:icon-chevron-down;content:""}@keyframes icon-copy-action{100%{-webkit-mask-image:var(--icon-clipboard-copy-16);mask-image:var(--icon-clipboard-copy-16);background-color:var(--icon-color,var(--color-copy-action-500,currentColor))}}.copy-button button::before{--icon-name:icon-copy-action;content:"";--icon-color:var(--token-color-foreground-faint)}@keyframes icon-deny-alt{100%{-webkit-mask-image:var(--icon-skip-16);mask-image:var(--icon-skip-16);background-color:var(--icon-color,var(--color-deny-alt-500,currentColor))}}@keyframes icon-deny-default{100%{-webkit-mask-image:var(--icon-skip-16);mask-image:var(--icon-skip-16);background-color:var(--icon-color,var(--color-deny-default-500,currentColor))}}@keyframes icon-disabled{100%{-webkit-mask-image:var(--icon-skip-16);mask-image:var(--icon-skip-16);background-color:var(--icon-color,var(--color-disabled-500,currentColor))}}.status-403.empty-state header::before{--icon-name:icon-disabled;content:""}@keyframes icon-docs{100%{-webkit-mask-image:var(--icon-docs-16);mask-image:var(--icon-docs-16);background-color:var(--icon-color,var(--color-docs-500,currentColor))}}#metrics-container .link .config-link::before,.empty-state .docs-link>::after{--icon-name:icon-docs;content:""}@keyframes icon-exit{100%{-webkit-mask-image:var(--icon-external-link-16);mask-image:var(--icon-external-link-16);background-color:var(--icon-color,var(--color-exit-500,currentColor))}}#metrics-container .link .metrics-link::before,a[rel*=external]::after{--icon-name:icon-exit;content:""}@keyframes icon-file-fill{100%{-webkit-mask-image:var(--icon-file-16);mask-image:var(--icon-file-16);background-color:var(--icon-color,var(--color-file-fill-500,currentColor))}}@keyframes icon-folder-outline{100%{-webkit-mask-image:var(--icon-folder-16);mask-image:var(--icon-folder-16);background-color:var(--icon-color,var(--color-folder-outline-500,currentColor))}}#downstream-container .topology-metrics-card div .nspace dt::before,#upstream-container .topology-metrics-card div .nspace dt::before,.consul-bucket-list .nspace::before,.consul-exposed-path-list>ul>li>.detail dl.nspace dt::before,.consul-intention-list span[class|=nspace]::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.nspace dt::before,.consul-upstream-instance-list dl.nspace dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.nspace dt::before,.modal-dialog [role=document] table td.folder::before,main table td.folder::before{--icon-name:icon-folder-outline;content:""}@keyframes icon-health{100%{-webkit-mask-image:var(--icon-activity-16);mask-image:var(--icon-activity-16);background-color:var(--icon-color,var(--color-health-500,currentColor))}}.consul-exposed-path-list>ul>li>.detail dl.checks dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.checks dt::before,.consul-upstream-instance-list li>.detail dl.checks dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.checks dt::before{--icon-name:icon-health;content:""}@keyframes icon-help-circle-outline{100%{-webkit-mask-image:var(--icon-help-16);mask-image:var(--icon-help-16);background-color:var(--icon-color,var(--color-help-circle-outline-500,currentColor))}}#downstream-container .topology-metrics-card div .health dt::before,#upstream-container .topology-metrics-card div .health dt::before,.consul-exposed-path-list>ul>li>.detail dl.unknown dt::before,.consul-exposed-path-list>ul>li>.header .unknown dd::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.unknown dt::before,.consul-lock-session-list ul>li:not(:first-child)>.header .unknown dd::before,.consul-upstream-instance-list li>.detail dl.unknown dt::before,.consul-upstream-instance-list li>.header .unknown dd::before,.list-collection>ul>li:not(:first-child)>.detail dl.unknown dt::before,.list-collection>ul>li:not(:first-child)>.header .unknown dd::before,.popover-select .value-unknown button::before,.status-404.empty-state header::before{--icon-name:icon-help-circle-outline;content:""}@keyframes icon-info-circle-fill{100%{-webkit-mask-image:var(--icon-info-16);mask-image:var(--icon-info-16);background-color:var(--icon-color,var(--color-info-circle-fill-500,currentColor))}}#metrics-container:hover .sparkline-key-link::before,.info.informed-action header::before,.sparkline-key h3::before{--icon-name:icon-info-circle-fill;content:""}@keyframes icon-info-circle-outline{100%{-webkit-mask-image:var(--icon-info-16);mask-image:var(--icon-info-16);background-color:var(--icon-color,var(--color-info-circle-outline-500,currentColor))}}#downstream-container>div:first-child span::before,.consul-auth-method-binding-list dl dt.type+dd span::before,.consul-auth-method-view dl dt.type+dd span::before,.consul-exposed-path-list>ul>li>.detail dl.behavior dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.behavior dt::before,.consul-upstream-instance-list li>.detail dl.behavior dt::before,.discovery-chain .resolvers>header span::after,.discovery-chain .routes>header span::after,.discovery-chain .splitters>header span::after,.list-collection>ul>li:not(:first-child)>.detail dl.behavior dt::before,.modal-dialog [role=document] a[rel*=help]::after,.modal-dialog [role=document] table th span::after,.topology-metrics-status-error span::before,.topology-metrics-status-loader span::before,main a[rel*=help]::after,main table th span::after{--icon-name:icon-info-circle-outline;content:""}@keyframes icon-learn{100%{-webkit-mask-image:var(--icon-learn-16);mask-image:var(--icon-learn-16);background-color:var(--icon-color,var(--color-learn-500,currentColor))}}.empty-state .learn-link>::after{--icon-name:icon-learn;content:""}@keyframes icon-logo-github-monochrome{100%{-webkit-mask-image:var(--icon-github-color-16);mask-image:var(--icon-github-color-16);background-color:var(--icon-color,var(--color-logo-github-monochrome-500,currentColor))}}@keyframes icon-logo-google-color{100%{background-image:var(--icon-google-color-16)}}.oidc-select .google-oidc-provider::before{--icon-name:icon-logo-google-color;content:""}@keyframes icon-logo-kubernetes-color{100%{background-image:var(--icon-kubernetes-color-16)}}@keyframes icon-menu{100%{-webkit-mask-image:var(--icon-menu-16);mask-image:var(--icon-menu-16);background-color:var(--icon-color,var(--color-menu-500,currentColor))}}@keyframes icon-minus-square-fill{100%{-webkit-mask-image:var(--icon-minus-square-16);mask-image:var(--icon-minus-square-16);background-color:var(--icon-color,var(--color-minus-square-fill-500,currentColor))}}#downstream-container .topology-metrics-card div .empty::before,#upstream-container .topology-metrics-card div .empty::before,.consul-exposed-path-list>ul>li>.detail dl.empty dt::before,.consul-exposed-path-list>ul>li>.header .empty dd::before,.consul-instance-checks.empty dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.empty dt::before,.consul-lock-session-list ul>li:not(:first-child)>.header .empty dd::before,.consul-upstream-instance-list li>.detail dl.empty dt::before,.consul-upstream-instance-list li>.header .empty dd::before,.list-collection>ul>li:not(:first-child)>.detail dl.empty dt::before,.list-collection>ul>li:not(:first-child)>.header .empty dd::before,.popover-select .value-empty button::before{--icon-name:icon-minus-square-fill;content:""}@keyframes icon-more-horizontal{100%{-webkit-mask-image:var(--icon-more-horizontal-16);mask-image:var(--icon-more-horizontal-16);background-color:var(--icon-color,var(--color-more-horizontal-500,currentColor))}}@keyframes icon-public-default{100%{-webkit-mask-image:var(--icon-globe-16);mask-image:var(--icon-globe-16);background-color:var(--icon-color,var(--color-public-default-500,currentColor))}}.consul-auth-method-list ul .locality::before,.consul-exposed-path-list>ul>li>.detail dl.address dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.address dt::before,.consul-upstream-instance-list li>.detail dl.address dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.address dt::before{--icon-name:icon-public-default;content:""}@keyframes icon-search{100%{-webkit-mask-image:var(--icon-search-16);mask-image:var(--icon-search-16);background-color:var(--icon-color,var(--color-search-500,currentColor))}}@keyframes icon-star-outline{100%{-webkit-mask-image:var(--icon-star-16);mask-image:var(--icon-star-16);background-color:var(--icon-color,var(--color-star-outline-500,currentColor))}}.leader::before{--icon-name:icon-star-outline;content:""}@keyframes icon-user-organization{100%{-webkit-mask-image:var(--icon-org-16);mask-image:var(--icon-org-16);background-color:var(--icon-color,var(--color-user-organization-500,currentColor))}}.consul-exposed-path-list>ul>li>.detail dl.datacenter dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.datacenter dt::before,.consul-upstream-instance-list dl.datacenter dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.datacenter dt::before{--icon-name:icon-user-organization;content:""}@keyframes icon-user-plain{100%{-webkit-mask-image:var(--icon-user-16);mask-image:var(--icon-user-16);background-color:var(--icon-color,var(--color-user-plain-500,currentColor))}}.consul-exposed-path-list>ul>li>.detail .role::before,.consul-lock-session-list ul>li:not(:first-child)>.detail .role::before,.consul-upstream-instance-list li>.detail .role::before,.list-collection>ul>li:not(:first-child)>.detail .role::before{--icon-name:icon-user-plain;content:""}@keyframes icon-user-team{100%{-webkit-mask-image:var(--icon-users-16);mask-image:var(--icon-users-16);background-color:var(--icon-color,var(--color-user-team-500,currentColor))}}#downstream-container .topology-metrics-card div .partition dt::before,#upstream-container .topology-metrics-card div .partition dt::before,.consul-bucket-list .partition::before,.consul-intention-list span[class|=partition]::before,.consul-upstream-instance-list dl.partition dt::before,.consul-upstream-list dl.partition dt::before,.type-source.popover-select li.partition button::before{--icon-name:icon-user-team;content:""}@keyframes icon-alert-circle{100%{-webkit-mask-image:var(--icon-alert-circle-16);mask-image:var(--icon-alert-circle-16);background-color:var(--icon-color,var(--color-alert-circle-500,currentColor))}}@keyframes icon-check{100%{-webkit-mask-image:var(--icon-check-16);mask-image:var(--icon-check-16);background-color:var(--icon-color,var(--color-check-500,currentColor))}}@keyframes icon-check-circle{100%{-webkit-mask-image:var(--icon-check-circle-16);mask-image:var(--icon-check-circle-16);background-color:var(--icon-color,var(--color-check-circle-500,currentColor))}}@keyframes icon-check-circle-fill{100%{-webkit-mask-image:var(--icon-check-circle-fill-16);mask-image:var(--icon-check-circle-fill-16);background-color:var(--icon-color,var(--color-check-circle-fill-500,currentColor))}}#downstream-container .topology-metrics-card div .passing::before,#upstream-container .topology-metrics-card div .passing::before,.consul-exposed-path-list>ul>li>.detail dl.passing dt::before,.consul-exposed-path-list>ul>li>.header .passing dd::before,.consul-exposed-path-list>ul>li>.header [rel=me] dd::before,.consul-health-check-list .passing.health-check-output::before,.consul-instance-checks.passing dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.passing dt::before,.consul-lock-session-list ul>li:not(:first-child)>.header .passing dd::before,.consul-lock-session-list ul>li:not(:first-child)>.header [rel=me] dd::before,.consul-upstream-instance-list li>.detail dl.passing dt::before,.consul-upstream-instance-list li>.header .passing dd::before,.consul-upstream-instance-list li>.header [rel=me] dd::before,.list-collection>ul>li:not(:first-child)>.detail dl.passing dt::before,.list-collection>ul>li:not(:first-child)>.header .passing dd::before,.list-collection>ul>li:not(:first-child)>.header [rel=me] dd::before,.popover-select .value-passing button::before{--icon-name:icon-check-circle-fill;content:""}@keyframes icon-chevron-left{100%{-webkit-mask-image:var(--icon-chevron-left-16);mask-image:var(--icon-chevron-left-16);background-color:var(--icon-color,var(--color-chevron-left-500,currentColor))}}.empty-state .back-link>::after,main header nav:first-child ol li:first-child a::before{--icon-name:icon-chevron-left;content:""}@keyframes icon-chevron-right{100%{-webkit-mask-image:var(--icon-chevron-right-16);mask-image:var(--icon-chevron-right-16);background-color:var(--icon-color,var(--color-chevron-right-500,currentColor))}}#login-toggle+div footer button::after{--icon-name:icon-chevron-right;content:""}@keyframes icon-chevron-up{100%{-webkit-mask-image:var(--icon-chevron-up-16);mask-image:var(--icon-chevron-up-16);background-color:var(--icon-color,var(--color-chevron-up-500,currentColor))}}.list-collection>button::after,.more-popover-menu>[type=checkbox]:checked+label>::after,.popover-menu>[type=checkbox]:checked+label>::after,.topology-notices button[aria-expanded=true]::before,table.has-actions tr>.actions>[type=checkbox]:checked+label>::after,table.with-details tr>.actions>[type=checkbox]:checked+label>::after{--icon-name:icon-chevron-up;content:""}@keyframes icon-delay{100%{-webkit-mask-image:var(--icon-delay-16);mask-image:var(--icon-delay-16);background-color:var(--icon-color,var(--color-delay-500,currentColor))}}.consul-exposed-path-list>ul>li>.detail dl.lock-delay dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.lock-delay dt::before,.consul-upstream-instance-list li>.detail dl.lock-delay dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.lock-delay dt::before{--icon-name:icon-delay;content:""}@keyframes icon-docs-link{100%{-webkit-mask-image:var(--icon-docs-link-16);mask-image:var(--icon-docs-link-16);background-color:var(--icon-color,var(--color-docs-link-500,currentColor))}}@keyframes icon-eye{100%{-webkit-mask-image:var(--icon-eye-16);mask-image:var(--icon-eye-16);background-color:var(--icon-color,var(--color-eye-500,currentColor))}}@keyframes icon-eye-off{100%{-webkit-mask-image:var(--icon-eye-off-16);mask-image:var(--icon-eye-off-16);background-color:var(--icon-color,var(--color-eye-off-500,currentColor))}}@keyframes icon-file-text{100%{-webkit-mask-image:var(--icon-file-text-16);mask-image:var(--icon-file-text-16);background-color:var(--icon-color,var(--color-file-text-500,currentColor))}}.consul-exposed-path-list>ul>li>.detail .policy::before,.consul-lock-session-list ul>li:not(:first-child)>.detail .policy::before,.consul-upstream-instance-list li>.detail .policy::before,.list-collection>ul>li:not(:first-child)>.detail .policy::before{--icon-name:icon-file-text;content:""}@keyframes icon-gateway{100%{-webkit-mask-image:var(--icon-gateway-16);mask-image:var(--icon-gateway-16);background-color:var(--icon-color,var(--color-gateway-500,currentColor))}}.consul-kind::before{--icon-name:icon-gateway;content:""}@keyframes icon-git-commit{100%{-webkit-mask-image:var(--icon-git-commit-16);mask-image:var(--icon-git-commit-16);background-color:var(--icon-color,var(--color-git-commit-500,currentColor))}}.consul-exposed-path-list>ul>li>.detail dl.node dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.node dt::before,.consul-upstream-instance-list li>.detail dl.node dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.node dt::before{--icon-name:icon-git-commit;content:""}@keyframes icon-hexagon{100%{-webkit-mask-image:var(--icon-hexagon-16);mask-image:var(--icon-hexagon-16);background-color:var(--icon-color,var(--color-hexagon-500,currentColor))}}@keyframes icon-history{100%{-webkit-mask-image:var(--icon-history-16);mask-image:var(--icon-history-16);background-color:var(--icon-color,var(--color-history-500,currentColor))}}.consul-exposed-path-list>ul>li>.detail dl.ttl dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.ttl dt::before,.consul-upstream-instance-list li>.detail dl.ttl dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.ttl dt::before{--icon-name:icon-history;content:""}@keyframes icon-info{100%{-webkit-mask-image:var(--icon-info-16);mask-image:var(--icon-info-16);background-color:var(--icon-color,var(--color-info-500,currentColor))}}@keyframes icon-layers{100%{-webkit-mask-image:var(--icon-layers-16);mask-image:var(--icon-layers-16);background-color:var(--icon-color,var(--color-layers-500,currentColor))}}.topology-metrics-popover.l7 .tippy-arrow::after,.topology-metrics-popover.l7>button::before{--icon-name:icon-layers;content:"";--icon-color:var(--token-color-palette-neutral-300)}@keyframes icon-loading{100%{-webkit-mask-image:var(--icon-loading-16);mask-image:var(--icon-loading-16);background-color:var(--icon-color,var(--color-loading-500,currentColor))}}@keyframes icon-network-alt{100%{-webkit-mask-image:var(--icon-network-alt-16);mask-image:var(--icon-network-alt-16);background-color:var(--icon-color,var(--color-network-alt-500,currentColor))}}.consul-bucket-list .peer::before{--icon-name:icon-network-alt;content:""}@keyframes icon-path{100%{-webkit-mask-image:var(--icon-path-16);mask-image:var(--icon-path-16);background-color:var(--icon-color,var(--color-path-500,currentColor))}}.consul-exposed-path-list>ul>li>.detail dl.path dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.path dt::before,.consul-upstream-instance-list li>.detail dl.path dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.path dt::before{--icon-name:icon-path;content:""}@keyframes icon-running{100%{-webkit-mask-image:var(--icon-running-16);mask-image:var(--icon-running-16);background-color:var(--icon-color,var(--color-running-500,currentColor))}}@keyframes icon-skip{100%{-webkit-mask-image:var(--icon-skip-16);mask-image:var(--icon-skip-16);background-color:var(--icon-color,var(--color-skip-500,currentColor))}}@keyframes icon-socket{100%{-webkit-mask-image:var(--icon-socket-16);mask-image:var(--icon-socket-16);background-color:var(--icon-color,var(--color-socket-500,currentColor))}}.consul-exposed-path-list>ul>li>.detail dl.socket dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.socket dt::before,.consul-upstream-instance-list li>.detail dl.socket dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.socket dt::before{--icon-name:icon-socket;content:""}@keyframes icon-star-circle{100%{-webkit-mask-image:var(--icon-star-circle-16);mask-image:var(--icon-star-circle-16);background-color:var(--icon-color,var(--color-star-circle-500,currentColor))}}@keyframes icon-star-fill{100%{-webkit-mask-image:var(--icon-star-fill-16);mask-image:var(--icon-star-fill-16);background-color:var(--icon-color,var(--color-star-fill-500,currentColor))}}.consul-exposed-path-list>ul>li>.detail .policy-management::before,.consul-exposed-path-list>ul>li>.header .policy-management dd::before,.consul-lock-session-list ul>li:not(:first-child)>.detail .policy-management::before,.consul-lock-session-list ul>li:not(:first-child)>.header .policy-management dd::before,.consul-upstream-instance-list li>.detail .policy-management::before,.consul-upstream-instance-list li>.header .policy-management dd::before,.list-collection>ul>li:not(:first-child)>.detail .policy-management::before,.list-collection>ul>li:not(:first-child)>.header .policy-management dd::before{--icon-name:icon-star-fill;content:"";--icon-color:var(--token-color-consul-brand)}@keyframes icon-tag{100%{-webkit-mask-image:var(--icon-tag-16);mask-image:var(--icon-tag-16);background-color:var(--icon-color,var(--color-tag-500,currentColor))}}.tag-list dt::before,td.tags dt::before{--icon-name:icon-tag;content:""}@keyframes icon-x{100%{-webkit-mask-image:var(--icon-x-16);mask-image:var(--icon-x-16);background-color:var(--icon-color,var(--color-x-500,currentColor))}}@keyframes icon-x-circle{100%{-webkit-mask-image:var(--icon-x-circle-16);mask-image:var(--icon-x-circle-16);background-color:var(--icon-color,var(--color-x-circle-500,currentColor))}}@keyframes icon-x-square{100%{-webkit-mask-image:var(--icon-x-square-16);mask-image:var(--icon-x-square-16);background-color:var(--icon-color,var(--color-x-square-500,currentColor))}}@keyframes icon-cloud-cross{100%{-webkit-mask-image:var(--icon-cloud-cross-16);mask-image:var(--icon-cloud-cross-16);background-color:var(--icon-color,var(--color-cloud-cross-500,currentColor))}}@keyframes icon-loading-motion{100%{-webkit-mask-image:var(--icon-loading-motion-16);mask-image:var(--icon-loading-motion-16);background-color:var(--icon-color,var(--color-loading-motion-500,currentColor))}}@keyframes icon-logo-auth0-color{100%{background-image:var(--icon-auth0-color-16)}}.oidc-select .auth0-oidc-provider::before{--icon-name:icon-logo-auth0-color;content:""}@keyframes icon-logo-ember-circle-color{100%{background-image:var(--icon-logo-ember-circle-color-16)}}@keyframes icon-logo-glimmer-color{100%{background-image:var(--icon-logo-glimmer-color-16)}}@keyframes icon-logo-jwt-color{100%{background-image:var(--icon-logo-jwt-color-16)}}.consul-external-source.jwt::before,.consul-health-check-list .health-check-output dd em.jwt::before,.consul-intention-list td strong.jwt::before,.consul-intention-permission-list strong.jwt::before,.consul-intention-search-bar li button span.jwt::before,.consul-peer-search-bar li button span.jwt::before,.consul-server-card .health-status+dd.jwt::before,.discovery-chain .route-card>header ul li.jwt::before,.jwt.consul-auth-method-type::before,.jwt.consul-kind::before,.jwt.consul-source::before,.jwt.consul-transparent-proxy::before,.jwt.leader::before,.jwt.topology-metrics-source-type::before,.popover-select .jwt button::before,.search-bar-status li.jwt:not(.remove-all)::before,html[data-route^="dc.acls.index"] main td strong.jwt::before,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl.jwt::before,section[data-route="dc.show.serverstatus"] .server-failure-tolerance header em.jwt::before,span.jwt.policy-node-identity::before,span.jwt.policy-service-identity::before{--icon-name:icon-logo-jwt-color;content:""}@keyframes icon-logo-microsoft-color{100%{background-image:var(--icon-microsoft-color-16)}}.oidc-select .microsoft-oidc-provider::before{--icon-name:icon-logo-microsoft-color;content:""}@keyframes icon-logo-oidc-color{100%{background-image:var(--icon-logo-oidc-color-16)}}.consul-external-source.oidc::before,.consul-health-check-list .health-check-output dd em.oidc::before,.consul-intention-list td strong.oidc::before,.consul-intention-permission-list strong.oidc::before,.consul-intention-search-bar li button span.oidc::before,.consul-peer-search-bar li button span.oidc::before,.consul-server-card .health-status+dd.oidc::before,.discovery-chain .route-card>header ul li.oidc::before,.oidc.consul-auth-method-type::before,.oidc.consul-kind::before,.oidc.consul-source::before,.oidc.consul-transparent-proxy::before,.oidc.leader::before,.oidc.topology-metrics-source-type::before,.popover-select .oidc button::before,.search-bar-status li.oidc:not(.remove-all)::before,html[data-route^="dc.acls.index"] main td strong.oidc::before,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl.oidc::before,section[data-route="dc.show.serverstatus"] .server-failure-tolerance header em.oidc::before,span.oidc.policy-node-identity::before,span.oidc.policy-service-identity::before{--icon-name:icon-logo-oidc-color;content:""}@keyframes icon-logo-okta-color{100%{background-image:var(--icon-okta-color-16)}}.oidc-select .okta-oidc-provider::before{--icon-name:icon-logo-okta-color;content:""}@keyframes icon-mesh{100%{-webkit-mask-image:var(--icon-mesh-16);mask-image:var(--icon-mesh-16);background-color:var(--icon-color,var(--color-mesh-500,currentColor))}}.consul-exposed-path-list>ul>li>.detail dl.mesh dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.mesh dt::before,.consul-upstream-instance-list li>.detail dl.mesh dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.mesh dt::before{--icon-name:icon-mesh;content:""}@keyframes icon-port{100%{-webkit-mask-image:var(--icon-port-16);mask-image:var(--icon-port-16);background-color:var(--icon-color,var(--color-port-500,currentColor))}}.consul-exposed-path-list>ul>li>.detail dl.port dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.port dt::before,.consul-upstream-instance-list li>.detail dl.port dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.port dt::before{--icon-name:icon-port;content:""}@keyframes icon-protocol{100%{-webkit-mask-image:var(--icon-protocol-16);mask-image:var(--icon-protocol-16);background-color:var(--icon-color,var(--color-protocol-500,currentColor))}}.consul-exposed-path-list>ul>li>.detail dl.protocol dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.protocol dt::before,.consul-upstream-instance-list li>.detail dl.protocol dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.protocol dt::before{--icon-name:icon-protocol;content:""}@keyframes icon-redirect{100%{-webkit-mask-image:var(--icon-redirect-16);mask-image:var(--icon-redirect-16);background-color:var(--icon-color,var(--color-redirect-500,currentColor))}}@keyframes icon-search-color{100%{background-image:var(--icon-search-color-16)}}[for=toolbar-toggle]{--icon-name:icon-search-color;content:""}@keyframes icon-sort{100%{-webkit-mask-image:var(--icon-sort-desc-16);mask-image:var(--icon-sort-desc-16);background-color:var(--icon-color,var(--color-sort-500,currentColor))}}.type-sort.popover-select label>::before{--icon-name:icon-sort;content:""}@keyframes icon-union{100%{-webkit-mask-image:var(--icon-union-16);mask-image:var(--icon-union-16);background-color:var(--icon-color,var(--color-union-500,currentColor))}}#downstream-container .topology-metrics-card .details .group span::before,#upstream-container .topology-metrics-card .details .group span::before{--icon-name:icon-union;content:""}.ember-basic-dropdown{position:relative}.ember-basic-dropdown,.ember-basic-dropdown-content,.ember-basic-dropdown-content *{box-sizing:border-box}.ember-basic-dropdown-content{position:absolute;width:auto;z-index:1000;background-color:#fff}.ember-basic-dropdown-content--left{left:0}.ember-basic-dropdown-content--right{right:0}.ember-basic-dropdown-overlay{position:fixed;background:rgba(0,0,0,.5);width:100%;height:100%;z-index:10;top:0;left:0;pointer-events:none}.ember-basic-dropdown-content-wormhole-origin{display:inline}.ember-power-select-dropdown *{box-sizing:border-box}.ember-power-select-trigger{position:relative;border-radius:4px;background-color:#fff;line-height:1.75;overflow-x:hidden;text-overflow:ellipsis;min-height:1.75em;-moz-user-select:none;user-select:none;-webkit-user-select:none;color:inherit}.ember-power-select-trigger:after{content:"";display:table;clear:both}.ember-power-select-trigger--active,.ember-power-select-trigger:focus{box-shadow:none}.ember-basic-dropdown-trigger--below.ember-power-select-trigger[aria-expanded=true],.ember-basic-dropdown-trigger--in-place.ember-power-select-trigger[aria-expanded=true]{border-bottom-left-radius:0;border-bottom-right-radius:0}.ember-basic-dropdown-trigger--above.ember-power-select-trigger[aria-expanded=true]{border-top-left-radius:0;border-top-right-radius:0}.ember-power-select-placeholder{color:#999;display:block;overflow-x:hidden;white-space:nowrap;text-overflow:ellipsis}.ember-power-select-status-icon{position:absolute;display:inline-block;width:0;height:0;top:0;bottom:0;margin:auto;border-style:solid;border-width:7px 4px 0;border-color:#aaa transparent transparent;right:5px}.ember-basic-dropdown-trigger[aria-expanded=true] .ember-power-select-status-icon{transform:rotate(180deg)}.ember-power-select-clear-btn{position:absolute;cursor:pointer;right:25px}.ember-power-select-trigger-multiple-input{font-family:inherit;font-size:inherit;border:none;display:inline-block;line-height:inherit;-webkit-appearance:none;outline:0;padding:0;float:left;background-color:transparent;text-indent:2px}.ember-power-select-trigger-multiple-input:disabled{background-color:#eee}.ember-power-select-trigger-multiple-input::placeholder{opacity:1;color:#999}.ember-power-select-trigger-multiple-input::-webkit-input-placeholder{opacity:1;color:#999}.ember-power-select-trigger-multiple-input::-moz-placeholder{opacity:1;color:#999}.ember-power-select-trigger-multiple-input::-ms-input-placeholder{opacity:1;color:#999}.active.discovery-chain [id*=":"],.discovery-chain path,.ember-power-select-multiple-remove-btn:not(:hover){opacity:.5}.ember-power-select-multiple-options{padding:0;margin:0}.ember-power-select-multiple-option{border:1px solid gray;border-radius:4px;color:#333;background-color:#e4e4e4;padding:0 4px;display:inline-block;line-height:1.45;float:left;margin:2px 0 2px 3px}.ember-power-select-multiple-remove-btn{cursor:pointer}.ember-power-select-search{padding:4px}.ember-power-select-search-input{border:1px solid #aaa;border-radius:0;width:100%;font-size:inherit;line-height:inherit;padding:0 5px}.ember-power-select-search-input:focus{border:1px solid #aaa;box-shadow:none}.ember-power-select-dropdown{border-left:1px solid #aaa;border-right:1px solid #aaa;line-height:1.75;border-radius:4px;box-shadow:none;overflow:hidden;color:inherit}.ember-power-select-dropdown.ember-basic-dropdown-content--above{border-top:1px solid #aaa;border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.ember-power-select-dropdown.ember-basic-dropdown-content--below,.ember-power-select-dropdown.ember-basic-dropdown-content--in-place{border-top:none;border-bottom:1px solid #aaa;border-top-left-radius:0;border-top-right-radius:0}.ember-power-select-dropdown.ember-basic-dropdown-content--in-place{width:100%}.ember-power-select-options{list-style:none;margin:0;padding:0;-moz-user-select:none;user-select:none;-webkit-user-select:none}.ember-power-select-placeholder,.ember-power-select-selected-item,a[rel*=external]::after{margin-left:8px}.ember-power-select-options[role=listbox]{overflow-y:auto;-webkit-overflow-scrolling:touch;max-height:12.25em}.ember-power-select-option{cursor:pointer;padding:0 8px}.ember-power-select-group[aria-disabled=true]{color:#999;cursor:not-allowed}.ember-power-select-group[aria-disabled=true] .ember-power-select-option,.ember-power-select-option[aria-disabled=true]{color:#999;pointer-events:none;cursor:not-allowed}.ember-power-select-option[aria-selected=true]{background-color:#ddd}.ember-power-select-option[aria-current=true]{background-color:#5897fb;color:#fff}.ember-power-select-group-name{cursor:default;font-weight:700}.ember-power-select-trigger[aria-disabled=true]{background-color:#eee}.ember-power-select-trigger{padding:0 16px 0 0}.ember-power-select-group .ember-power-select-group .ember-power-select-group-name{padding-left:24px}.ember-power-select-group .ember-power-select-group .ember-power-select-option{padding-left:40px}.ember-power-select-group .ember-power-select-option{padding-left:24px}.ember-power-select-group .ember-power-select-group-name{padding-left:8px}.ember-power-select-trigger[dir=rtl]{padding:0 0 0 16px}.ember-power-select-trigger[dir=rtl] .ember-power-select-placeholder,.ember-power-select-trigger[dir=rtl] .ember-power-select-selected-item{margin-right:8px}.ember-power-select-trigger[dir=rtl] .ember-power-select-multiple-option,.ember-power-select-trigger[dir=rtl] .ember-power-select-trigger-multiple-input{float:right}.ember-power-select-trigger[dir=rtl] .ember-power-select-status-icon{left:5px;right:initial}.ember-power-select-trigger[dir=rtl] .ember-power-select-clear-btn{left:25px;right:initial}.ember-power-select-dropdown[dir=rtl] .ember-power-select-group .ember-power-select-group .ember-power-select-group-name{padding-right:24px}.ember-power-select-dropdown[dir=rtl] .ember-power-select-group .ember-power-select-group .ember-power-select-option{padding-right:40px}.ember-power-select-dropdown[dir=rtl] .ember-power-select-group .ember-power-select-option{padding-right:24px}.ember-power-select-dropdown[dir=rtl] .ember-power-select-group .ember-power-select-group-name{padding-right:8px}#login-toggle+div footer button:focus,#login-toggle+div footer button:hover,.consul-intention-fieldsets .permissions>button:focus,.consul-intention-fieldsets .permissions>button:hover,.empty-state>ul>li>:focus,.empty-state>ul>li>:hover,.empty-state>ul>li>label>button:focus,.empty-state>ul>li>label>button:hover,.modal-dialog [role=document] dd a:focus,.modal-dialog [role=document] dd a:hover,.modal-dialog [role=document] p a:focus,.modal-dialog [role=document] p a:hover,.oidc-select button.reset:focus,.oidc-select button.reset:hover,.search-bar-status .remove-all button:focus,.search-bar-status .remove-all button:hover,main dd a:focus,main dd a:hover,main p a:focus,main p a:hover{text-decoration:underline}#login-toggle+div footer button,.consul-intention-fieldsets .permissions>button,.empty-state>ul>li>*,.empty-state>ul>li>:active,.empty-state>ul>li>:focus,.empty-state>ul>li>:hover,.empty-state>ul>li>label>button,.empty-state>ul>li>label>button:active,.empty-state>ul>li>label>button:focus,.empty-state>ul>li>label>button:hover,.modal-dialog [role=document] dd a,.modal-dialog [role=document] p a,.oidc-select button.reset,.search-bar-status .remove-all button,main dd a,main dd a:active,main dd a:focus,main dd a:hover,main p a,main p a:active,main p a:focus,main p a:hover{color:var(--token-color-foreground-action)}.modal-dialog [role=document] label a[rel*=help],div.with-confirmation p,main label a[rel*=help]{color:var(--token-color-foreground-disabled)}#login-toggle+div footer button,.consul-intention-fieldsets .permissions>button,.empty-state>ul>li>*,.empty-state>ul>li>label>button,.modal-dialog [role=document] dd a,.modal-dialog [role=document] p a,.oidc-select button.reset,.search-bar-status .remove-all button,main dd a,main p a{cursor:pointer;background-color:transparent}#login-toggle+div footer button:active,.consul-intention-fieldsets .permissions>button:active,.empty-state>ul>li>:active,.empty-state>ul>li>label>button:active,.modal-dialog [role=document] dd a:active,.modal-dialog [role=document] p a:active,.oidc-select button.reset:active,.search-bar-status .remove-all button:active,main dd a:active,main p a:active{outline:0}.modal-dialog [role=document] a[rel*=help]::after,main a[rel*=help]::after{opacity:.4}.modal-dialog [role=document] h2 a,main h2 a{color:var(--token-color-foreground-strong)}.auth-form em,.empty-state,main header nav:first-child ol li a,main header nav:first-child ol li:not(:first-child) a::before{color:var(--token-color-foreground-faint)}.modal-dialog [role=document] h2 a[rel*=help]::after,main h2 a[rel*=help]::after{font-size:.65em;margin-top:.2em;margin-left:.2em}.tab-section>p:only-child [rel*=help]::after{content:none}.auth-form{width:320px;margin:-20px 25px 0}.auth-form em{font-style:normal;display:inline-block;margin-top:1em}.auth-form .oidc-select,.auth-form form{padding-top:1em}.auth-form form{margin-bottom:0!important}.auth-form .ember-basic-dropdown-trigger,.auth-form button:not(.reset){width:100%}.auth-form .progress{margin:0 auto}#login-toggle+div footer button::after{font-size:120%;position:relative;top:-1px;left:-3px}#login-toggle+div footer{border-top:0;background-color:transparent;padding:10px 42px 20px}#login-toggle+div>div>div>div{padding-bottom:0}main header nav:first-child ol li a{text-decoration:none}main header nav:first-child ol li a:hover{color:var(--token-color-foreground-action);text-decoration:underline}main header nav:first-child ol li a::before{text-decoration:none}main header nav:first-child ol{display:grid;grid-auto-flow:column;white-space:nowrap;overflow:hidden}main header nav:first-child ol>li{list-style-type:none;display:inline-flex;overflow:hidden}main header nav:first-child ol li:first-child a::before{background-color:var(--token-color-foreground-faint);margin-right:4px;display:inline-block}main header nav:first-child ol li:not(:first-child) a{margin-left:6px;overflow:hidden;text-overflow:ellipsis}main header nav:first-child ol li:not(:first-child) a::before{content:"/";margin-right:8px;display:inline-block}main header nav:first-child{position:absolute;top:12px}.consul-intention-action-warn-modal button.dangerous,.copy-button button,.disclosure-menu [aria-expanded]~*>ul>[role=treeitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=menuitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=option],.informed-action>ul>li>*,.menu-panel>ul>[role=treeitem],.menu-panel>ul>li>[role=menuitem],.menu-panel>ul>li>[role=option],.more-popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=option],.popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=option],.popover-select label>*,.topology-notices button,.type-sort.popover-select label>*,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=option],table.with-details tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]{cursor:pointer;white-space:nowrap;text-decoration:none}.consul-intention-action-warn-modal button.dangerous:disabled,.copy-button button:disabled,.disclosure-menu [aria-expanded]~*>ul>[role=treeitem]:disabled,.disclosure-menu [aria-expanded]~*>ul>li>[role=menuitem]:disabled,.disclosure-menu [aria-expanded]~*>ul>li>[role=option]:disabled,.informed-action>ul>li>:disabled,.menu-panel>ul>[role=treeitem]:disabled,.menu-panel>ul>li>[role=menuitem]:disabled,.menu-panel>ul>li>[role=option]:disabled,.more-popover-menu>[type=checkbox]+label+div>ul>[role=treeitem]:disabled,.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem]:disabled,.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=option]:disabled,.popover-menu>[type=checkbox]+label+div>ul>[role=treeitem]:disabled,.popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem]:disabled,.popover-menu>[type=checkbox]+label+div>ul>li>[role=option]:disabled,.popover-select label>:disabled,.topology-notices button:disabled,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem]:disabled,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem]:disabled,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]:disabled,table.with-details tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem]:disabled,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem]:disabled,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]:disabled{cursor:default;box-shadow:none}.checkbox-group label,.more-popover-menu>[type=checkbox]~label,.popover-menu>[type=checkbox]~label,html[data-route^="dc.acls.index"] .filter-bar [role=radiogroup] label,table.has-actions tr>.actions>[type=checkbox]~label,table.with-details tr>.actions>[type=checkbox]~label{cursor:pointer}.consul-intention-action-warn-modal button.dangerous{border-width:1px;border-radius:var(--decor-radius-100);box-shadow:var(--token-elevation-high-box-shadow)}.disclosure-menu [aria-expanded]~*>ul>[role=treeitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=menuitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=option],.informed-action>ul>li>*,.menu-panel>ul>[role=treeitem],.menu-panel>ul>li>[role=menuitem],.menu-panel>ul>li>[role=option],.more-popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=option],.popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=option],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=option],table.with-details tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]{color:var(--token-color-foreground-strong);background-color:var(--token-color-surface-primary)}.disclosure-menu [aria-expanded]~*>ul>[role=treeitem]:focus,.disclosure-menu [aria-expanded]~*>ul>[role=treeitem]:hover,.disclosure-menu [aria-expanded]~*>ul>li>[role=menuitem]:focus,.disclosure-menu [aria-expanded]~*>ul>li>[role=menuitem]:hover,.disclosure-menu [aria-expanded]~*>ul>li>[role=option]:focus,.disclosure-menu [aria-expanded]~*>ul>li>[role=option]:hover,.informed-action>ul>li>:focus,.informed-action>ul>li>:hover,.menu-panel>ul>[role=treeitem]:focus,.menu-panel>ul>[role=treeitem]:hover,.menu-panel>ul>li>[role=menuitem]:focus,.menu-panel>ul>li>[role=menuitem]:hover,.menu-panel>ul>li>[role=option]:focus,.menu-panel>ul>li>[role=option]:hover,.more-popover-menu>[type=checkbox]+label+div>ul>[role=treeitem]:focus,.more-popover-menu>[type=checkbox]+label+div>ul>[role=treeitem]:hover,.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem]:focus,.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem]:hover,.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=option]:focus,.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=option]:hover,.popover-menu>[type=checkbox]+label+div>ul>[role=treeitem]:focus,.popover-menu>[type=checkbox]+label+div>ul>[role=treeitem]:hover,.popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem]:focus,.popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem]:hover,.popover-menu>[type=checkbox]+label+div>ul>li>[role=option]:focus,.popover-menu>[type=checkbox]+label+div>ul>li>[role=option]:hover,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem]:focus,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem]:hover,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem]:focus,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem]:hover,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]:focus,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]:hover,table.with-details tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem]:focus,table.with-details tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem]:hover,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem]:focus,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem]:hover,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]:focus,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]:hover{background-color:var(--token-color-surface-strong)}.type-sort.popover-select label>::before{position:relative;width:16px;height:16px}.type-sort.popover-select label>::after{top:0!important}.consul-intention-action-warn-modal button.dangerous,.copy-button button,.popover-select label>*,.topology-notices button,.type-sort.popover-select label>*{position:relative}.consul-intention-action-warn-modal button.dangerous .progress.indeterminate,.copy-button button .progress.indeterminate,.popover-select label>* .progress.indeterminate,.topology-notices button .progress.indeterminate{position:absolute;top:50%;left:50%;margin-left:-12px;margin-top:-12px}.consul-intention-action-warn-modal button.dangerous:disabled .progress+*,.copy-button button:disabled .progress+*,.popover-select label>:disabled .progress+*,.topology-notices button:disabled .progress+*{visibility:hidden}.consul-intention-action-warn-modal button.dangerous:empty,.copy-button button:empty,.popover-select label>:empty,.topology-notices button:empty{padding-right:0!important;padding-left:18px!important;margin-right:5px}.consul-intention-action-warn-modal button.dangerous:empty::before,.copy-button button:empty::before,.popover-select label>:empty::before,.topology-notices button:empty::before{left:1px}.consul-intention-action-warn-modal button.dangerous:not(:empty),.copy-button button:not(:empty),.popover-select label>:not(:empty),.topology-notices button:not(:empty){display:inline-flex;text-align:center;justify-content:center;align-items:center;padding:calc(.5em - 1px) calc(2.2em - 1px);min-width:100px}.consul-intention-action-warn-modal button.dangerous:not(:last-child),.copy-button button:not(:last-child),.popover-select label>:not(:last-child),.topology-notices button:not(:last-child){margin-right:8px}.app-view>header .actions a{padding-top:calc(.4em - 1px)!important;padding-bottom:calc(.4em - 1px)!important}.disclosure-menu [aria-expanded]~*>ul>[role=treeitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=menuitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=option],.informed-action>ul>li>*,.menu-panel>ul>[role=treeitem],.menu-panel>ul>li>[role=menuitem],.menu-panel>ul>li>[role=option],.more-popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=option],.popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=option],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=option],table.with-details tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]{padding:.9em 1em;text-align:center;display:inline-block;box-sizing:border-box}.type-sort.popover-select label>*{height:35px!important}.discovery-chain .resolver-card,.discovery-chain .route-card,.discovery-chain .splitter-card{border:var(--decor-border-100);border-radius:var(--decor-radius-100);background-color:var(--token-color-surface-faint);display:block;position:relative}.discovery-chain .resolver-card>section,.discovery-chain .resolver-card>ul>li,.discovery-chain .route-card>section,.discovery-chain .route-card>ul>li,.discovery-chain .splitter-card>section,.discovery-chain .splitter-card>ul>li{border-top:var(--decor-border-100)}.discovery-chain .resolver-card,.discovery-chain .resolver-card>section,.discovery-chain .resolver-card>ul>li,.discovery-chain .route-card,.discovery-chain .route-card>section,.discovery-chain .route-card>ul>li,.discovery-chain .splitter-card,.discovery-chain .splitter-card>section,.discovery-chain .splitter-card>ul>li{border-color:var(--token-color-surface-interactive-active)}.discovery-chain .resolver-card:focus,.discovery-chain .resolver-card:hover,.discovery-chain .route-card:focus,.discovery-chain .route-card:hover,.discovery-chain .splitter-card:focus,.discovery-chain .splitter-card:hover{box-shadow:var(--token-surface-mid-box-shadow)}.discovery-chain .resolver-card>header,.discovery-chain .route-card>header,.discovery-chain .splitter-card>header{padding:10px}.discovery-chain .resolver-card>section,.discovery-chain .resolver-card>ul>li,.discovery-chain .route-card>section,.discovery-chain .route-card>ul>li,.discovery-chain .splitter-card>section,.discovery-chain .splitter-card>ul>li{padding:5px 10px}.discovery-chain .resolver-card ul,.discovery-chain .route-card ul,.discovery-chain .splitter-card ul{list-style-type:none;margin:0;padding:0}.checkbox-group label{margin-right:10px;white-space:nowrap}.checkbox-group span{display:inline-block;margin-left:10px;min-width:50px}.CodeMirror{max-width:1260px;min-height:300px;height:auto;padding-bottom:20px}.CodeMirror-scroll{overflow-x:hidden!important}.CodeMirror-lint-tooltip{background-color:#f9f9fa;border:1px solid var(--syntax-light-gray);border-radius:0;color:#212121;padding:7px 8px 9px}.cm-s-hashi.CodeMirror{width:100%;background-color:var(--token-color-hashicorp-brand)!important;color:#cfd2d1!important;border:none;font-family:var(--token-typography-font-stack-code);-webkit-font-smoothing:auto;line-height:1.4}.cm-s-hashi .CodeMirror-gutters{color:var(--syntax-dark-grey);background-color:var(--syntax-gutter-grey);border:none}.cm-s-hashi .CodeMirror-cursor{border-left:solid thin #f8f8f0}.cm-s-hashi .CodeMirror-linenumber{color:#6d8a88}.cm-s-hashi.CodeMirror-focused div.CodeMirror-selected{background:#214283}.cm-s-hashi .CodeMirror-line::selection,.cm-s-hashi .CodeMirror-line>span::selection,.cm-s-hashi .CodeMirror-line>span>span::selection{background:#214283}.cm-s-hashi .CodeMirror-line::-moz-selection,.cm-s-hashi .CodeMirror-line>span::-moz-selection,.cm-s-hashi .CodeMirror-line>span>span::-moz-selection{background:var(--token-color-surface-interactive)}.cm-s-hashi span.cm-comment{color:var(--syntax-light-grey)}.cm-s-hashi span.cm-string,.cm-s-hashi span.cm-string-2{color:var(--syntax-packer)}.cm-s-hashi span.cm-number{color:var(--syntax-serf)}.cm-s-hashi span.cm-variable,.cm-s-hashi span.cm-variable-2{color:#9e84c5}.cm-s-hashi span.cm-def{color:var(--syntax-packer)}.cm-s-hashi span.cm-operator{color:var(--syntax-gray)}.cm-s-hashi span.cm-keyword{color:var(--syntax-yellow)}.cm-s-hashi span.cm-atom{color:var(--syntax-serf)}.cm-s-hashi span.cm-meta,.cm-s-hashi span.cm-tag{color:var(--syntax-packer)}.cm-s-hashi span.cm-error{color:var(--syntax-red)}.cm-s-hashi span.cm-attribute,.cm-s-hashi span.cm-qualifier{color:#9fca56}.cm-s-hashi span.cm-property{color:#9e84c5}.cm-s-hashi span.cm-builtin,.cm-s-hashi span.cm-variable-3{color:#9fca56}.cm-s-hashi .CodeMirror-activeline-background{background:#101213}.cm-s-hashi .CodeMirror-matchingbracket{text-decoration:underline;color:var(--token-color-surface-primary)!important}.readonly-codemirror .cm-s-hashi span{color:var(--syntax-light-grey)}.readonly-codemirror .cm-s-hashi span.cm-string,.readonly-codemirror .cm-s-hashi span.cm-string-2{color:var(--syntax-faded-gray)}.readonly-codemirror .cm-s-hashi span.cm-number{color:#a3acbc}.readonly-codemirror .cm-s-hashi span.cm-property,.tippy-box[data-theme~=tooltip]{color:var(--token-color-surface-primary)}.readonly-codemirror .cm-s-hashi span.cm-variable-2{color:var(--syntax-light-grey-blue)}.code-editor .toolbar-container{background:var(--token-color-surface-strong);background:linear-gradient(180deg,var(--token-color-surface-strong) 50%,var(--token-color-surface-interactive-active) 100%);border:1px solid var(--token-color-surface-interactive-active);border-bottom-color:var(--token-color-foreground-faint);border-top-color:var(--token-color-foreground-disabled)}.code-editor .toolbar-container .toolbar .title{color:var(--token-color-foreground-strong);padding:0 8px}.code-editor .toolbar-container .toolbar .toolbar-separator{border-right:1px solid var(--token-color-palette-neutral-300)}.code-editor .toolbar-container .ember-power-select-trigger{background-color:var(--token-color-surface-primary);color:var(--token-color-hashicorp-brand);border-radius:var(--decor-radius-100);border:var(--decor-border-100);border-color:var(--token-color-foreground-faint)}.code-editor{display:block;border:10px;overflow:hidden;position:relative;clear:both}.code-editor::after{position:absolute;bottom:0;width:100%;height:25px;background-color:var(--token-color-hashicorp-brand);content:"";display:block}.code-editor>pre{display:none}.code-editor .toolbar-container,.code-editor .toolbar-container .toolbar{align-items:center;justify-content:space-between;display:flex}.code-editor .toolbar-container{position:relative;margin-top:4px;height:44px}.code-editor .toolbar-container .toolbar{flex:1;white-space:nowrap}.code-editor .toolbar-container .toolbar .toolbar-separator{height:32px;margin:0 4px;width:0}.code-editor .toolbar-container .toolbar .tools{display:flex;flex-direction:row;margin:0 10px;align-items:center}.code-editor .toolbar-container .toolbar .tools .copy-button{margin-left:10px}.code-editor .toolbar-container .ember-basic-dropdown-trigger{margin:0 8px;width:120px;height:32px;display:flex;align-items:center;flex-direction:row}.consul-exposed-path-list>ul>li,.consul-lock-session-list ul>li:not(:first-child),.consul-upstream-instance-list li,.list-collection>ul>li:not(:first-child){display:grid;grid-template-columns:1fr auto;grid-template-rows:50% 50%;grid-template-areas:"header actions" "detail actions"}.consul-exposed-path-list>ul>li>.header,.consul-lock-session-list ul>li:not(:first-child)>.header,.consul-upstream-instance-list li>.header,.list-collection>ul>li:not(:first-child)>.header{grid-area:header;align-self:start}.consul-exposed-path-list>ul>li>.detail,.consul-lock-session-list ul>li:not(:first-child)>.detail,.consul-upstream-instance-list li>.detail,.list-collection>ul>li:not(:first-child)>.detail{grid-area:detail;align-self:end}.consul-exposed-path-list>ul>li>.detail *,.consul-lock-session-list ul>li:not(:first-child)>.detail *,.consul-upstream-instance-list li>.detail *,.list-collection>ul>li:not(:first-child)>.detail *{flex-wrap:nowrap!important}.consul-exposed-path-list>ul>li>.actions,.consul-lock-session-list ul>li:not(:first-child)>.actions,.consul-upstream-instance-list li>.actions,.list-collection>ul>li:not(:first-child)>.actions{grid-area:actions;display:inline-flex}.consul-nspace-list>ul>li:not(:first-child) dt,.consul-policy-list>ul li:not(:first-child) dl:not(.datacenter) dt,.consul-role-list>ul>li:not(:first-child) dt,.consul-service-instance-list .port dt,.consul-service-instance-list .port dt::before,.consul-token-list>ul>li:not(:first-child) dt{display:none}.consul-exposed-path-list>ul>li>.header:nth-last-child(2),.consul-lock-session-list ul>li:not(:first-child)>.header:nth-last-child(2),.consul-upstream-instance-list li>.header:nth-last-child(2),.list-collection>ul>li:not(:first-child)>.header:nth-last-child(2){grid-column-start:header;grid-column-end:actions}.consul-exposed-path-list>ul>li>.detail:last-child,.consul-lock-session-list ul>li:not(:first-child)>.detail:last-child,.consul-upstream-instance-list li>.detail:last-child,.list-collection>ul>li:not(:first-child)>.detail:last-child{grid-column-start:detail;grid-column-end:actions}.consul-nspace-list>ul>li:not(:first-child) dt+dd,.consul-policy-list>ul li:not(:first-child) dl:not(.datacenter) dt+dd,.consul-role-list>ul>li:not(:first-child) dt+dd,.consul-token-list>ul>li:not(:first-child) dt+dd{margin-left:0!important}.consul-policy-list dl.datacenter dt,.consul-service-list li>div:first-child>dl:first-child dd{margin-top:1px}.consul-service-instance-list .detail,.consul-service-list .detail{overflow-x:visible!important}.consul-intention-permission-list>ul{border-top:1px solid var(--token-color-surface-interactive-active)}.consul-service-instance-list .port .copy-button{margin-right:0}.consul-exposed-path-list>ul>li .copy-button,.consul-lock-session-list ul>li:not(:first-child) .copy-button,.consul-upstream-instance-list li .copy-button,.list-collection>ul>li:not(:first-child) .copy-button{display:inline-flex}.consul-exposed-path-list>ul>li>.header .copy-button,.consul-lock-session-list ul>li:not(:first-child)>.header .copy-button,.consul-upstream-instance-list li>.header .copy-button,.list-collection>ul>li:not(:first-child)>.header .copy-button{margin-left:4px}.consul-exposed-path-list>ul>li>.detail .copy-button,.consul-lock-session-list ul>li:not(:first-child)>.detail .copy-button,.consul-upstream-instance-list li>.detail .copy-button,.list-collection>ul>li:not(:first-child)>.detail .copy-button{margin-top:2px}.consul-exposed-path-list>ul>li .copy-button button,.consul-lock-session-list ul>li:not(:first-child) .copy-button button,.consul-upstream-instance-list li .copy-button button,.list-collection>ul>li:not(:first-child) .copy-button button{padding:0!important;margin:0!important}.consul-exposed-path-list>ul>li>.header .copy-button button,.consul-lock-session-list ul>li:not(:first-child)>.header .copy-button button,.consul-upstream-instance-list li>.header .copy-button button,.list-collection>ul>li:not(:first-child)>.header .copy-button button{display:none}.consul-exposed-path-list>ul>li>.header:hover .copy-button button,.consul-lock-session-list ul>li:not(:first-child)>.header:hover .copy-button button,.consul-upstream-instance-list li>.header:hover .copy-button button,.list-collection>ul>li:not(:first-child)>.header:hover .copy-button button{display:block}.consul-exposed-path-list>ul>li .copy-button button:hover,.consul-lock-session-list ul>li:not(:first-child) .copy-button button:hover,.consul-upstream-instance-list li .copy-button button:hover,.list-collection>ul>li:not(:first-child) .copy-button button:hover{background-color:transparent!important}.consul-exposed-path-list>ul>li>.detail>.consul-external-source:first-child,.consul-exposed-path-list>ul>li>.detail>.consul-kind:first-child,.consul-lock-session-list ul>li:not(:first-child)>.detail>.consul-external-source:first-child,.consul-lock-session-list ul>li:not(:first-child)>.detail>.consul-kind:first-child,.consul-upstream-instance-list li>.detail>.consul-external-source:first-child,.consul-upstream-instance-list li>.detail>.consul-kind:first-child,.list-collection>ul>li:not(:first-child)>.detail>.consul-external-source:first-child,.list-collection>ul>li:not(:first-child)>.detail>.consul-kind:first-child{margin-left:-5px}.consul-exposed-path-list>ul>li>.detail .policy-management::before,.consul-exposed-path-list>ul>li>.detail .policy::before,.consul-exposed-path-list>ul>li>.detail .role::before,.consul-lock-session-list ul>li:not(:first-child)>.detail .policy-management::before,.consul-lock-session-list ul>li:not(:first-child)>.detail .policy::before,.consul-lock-session-list ul>li:not(:first-child)>.detail .role::before,.consul-upstream-instance-list li>.detail .policy-management::before,.consul-upstream-instance-list li>.detail .policy::before,.consul-upstream-instance-list li>.detail .role::before,.list-collection>ul>li:not(:first-child)>.detail .policy-management::before,.list-collection>ul>li:not(:first-child)>.detail .policy::before,.list-collection>ul>li:not(:first-child)>.detail .role::before{margin-right:3px}table div.with-confirmation.confirming{background-color:var(--token-color-surface-primary)}div.with-confirmation p{margin-right:12px;padding-left:12px;margin-bottom:0!important}div.with-confirmation{justify-content:end;width:100%;display:flex;align-items:center}table td>div.with-confirmation.confirming{position:absolute;right:0}@media (max-width:420px){div.with-confirmation{float:none;margin-top:1em;display:block}div.with-confirmation p{margin-bottom:1em}}.copy-button button{color:var(--token-color-foreground-action);--icon-color:transparent;min-height:17px}.copy-button button::after{--icon-color:var(--token-color-surface-strong)}.copy-button button:focus,.copy-button button:hover:not(:disabled):not(:active){color:var(--token-color-foreground-action);--icon-color:var(--token-color-surface-strong)}.copy-button button:hover::before{--icon-color:var(--token-color-foreground-action)}.copy-button button:active{--icon-color:var(--token-color-surface-interactive-active)}.copy-button button:empty{padding:0!important;margin-right:0;top:-1px}.copy-button button:empty::after{content:"";display:none;position:absolute;top:-2px;left:-3px;width:20px;height:22px}.copy-button button:empty:hover::after{display:block}.copy-button button:empty::before{position:relative;z-index:1}.copy-button button:not(:empty)::before{margin-right:4px}.consul-bucket-list .copy-button,.consul-exposed-path-list>ul>li>.detail dl .copy-button,.consul-instance-checks .copy-button,.consul-lock-session-list dl .copy-button,.consul-lock-session-list ul>li:not(:first-child)>.detail dl .copy-button,.consul-upstream-instance-list dl .copy-button,.list-collection>ul>li:not(:first-child)>.detail dl .copy-button,.tag-list .copy-button,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl .copy-button,section[data-route="dc.show.license"] .validity dl .copy-button,td.tags .copy-button{margin-top:0!important}.consul-bucket-list .copy-btn,.consul-exposed-path-list>ul>li>.detail dl .copy-btn,.consul-instance-checks .copy-btn,.consul-lock-session-list dl .copy-btn,.consul-lock-session-list ul>li:not(:first-child)>.detail dl .copy-btn,.consul-upstream-instance-list dl .copy-btn,.list-collection>ul>li:not(:first-child)>.detail dl .copy-btn,.tag-list .copy-btn,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl .copy-btn,section[data-route="dc.show.license"] .validity dl .copy-btn,td.tags .copy-btn{top:0!important}.consul-bucket-list .copy-btn:empty::before,.consul-exposed-path-list>ul>li>.detail dl .copy-btn:empty::before,.consul-instance-checks .copy-btn:empty::before,.consul-lock-session-list dl .copy-btn:empty::before,.consul-upstream-instance-list dl .copy-btn:empty::before,.list-collection>ul>li:not(:first-child)>.detail dl .copy-btn:empty::before,.tag-list .copy-btn:empty::before,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl .copy-btn:empty::before,section[data-route="dc.show.license"] .validity dl .copy-btn:empty::before,td.tags .copy-btn:empty::before{left:0!important}.definition-table>dl{display:grid;grid-template-columns:140px auto;grid-gap:.4em 20px;margin-bottom:1.4em}.disclosure-menu{position:relative}.disclosure-menu [aria-expanded]~*{overflow-y:auto!important;will-change:scrollPosition}.more-popover-menu>[type=checkbox],.more-popover-menu>[type=checkbox]~:not(.animating):not(label),.popover-menu>[type=checkbox],.popover-menu>[type=checkbox]~:not(.animating):not(label),table.has-actions tr>.actions>[type=checkbox],table.has-actions tr>.actions>[type=checkbox]~:not(.animating):not(label),table.with-details tr>.actions>[type=checkbox],table.with-details tr>.actions>[type=checkbox]~:not(.animating):not(label){display:none}.more-popover-menu>[type=checkbox]:checked~:not(label),.popover-menu>[type=checkbox]:checked~:not(label),table.has-actions tr>.actions>[type=checkbox]:checked~:not(label),table.with-details tr>.actions>[type=checkbox]:checked~:not(label){display:block}table.dom-recycling{position:relative}table.dom-recycling tr>*{overflow:hidden}.list-collection-scroll-virtual>ul,table.dom-recycling tbody{overflow-x:hidden!important}table.dom-recycling dd{flex-wrap:nowrap}table.dom-recycling dd>*{margin-bottom:0}.empty-state,.empty-state>div{display:flex;flex-direction:column}.empty-state header :first-child{padding:0;margin:0}.empty-state{margin-top:0!important;padding-bottom:2.8em;background-color:var(--token-color-surface-faint)}.empty-state>*{width:370px;margin:0 auto}.empty-state button{margin:0 auto;display:inline}.empty-state header :first-child{margin-bottom:-3px;border-bottom:none}.empty-state header{margin-top:1.8em;margin-bottom:.5em}.empty-state>ul{display:flex;justify-content:space-between;margin-top:1em}.empty-state>ul>li>*,.empty-state>ul>li>label>button{display:inline-flex;align-items:center}.empty-state>div:only-child{padding:50px 0 10px;text-align:center}.empty-state header::before{font-size:2.6em;position:relative;top:-3px;float:left;margin-right:10px}.oidc-select button.reset,.type-dialog{float:right}.empty-state>ul>li>::before,.empty-state>ul>li>label>button::before{margin-top:-1px;margin-right:.5em}.empty-state li[class*=-link]>::after{margin-left:5px}html[data-route^="dc.acls.index"] .filter-bar [role=radiogroup]{border:var(--decor-border-100);border-color:var(--token-color-palette-neutral-300);border-radius:var(--decor-radius-100)}html[data-route^="dc.acls.index"] .filter-bar [role=radiogroup] input[type=radio]:checked+*,html[data-route^="dc.acls.index"] .filter-bar [role=radiogroup] input[type=radio]:focus+*,html[data-route^="dc.acls.index"] .filter-bar [role=radiogroup] input[type=radio]:hover+*{box-shadow:var(--token-elevation-high-box-shadow);background-color:var(--token-color-surface-primary)}@media (min-width:996px){html[data-route^="dc.acls.index"] .filter-bar [role=radiogroup]{display:flex}html[data-route^="dc.acls.index"] .filter-bar [role=radiogroup] label{flex-grow:1}}html[data-route^="dc.acls.index"] .filter-bar [role=radiogroup] input[type=radio]{display:none}.app-view>div form:not(.filter-bar) [role=radiogroup] label,.app-view>div form:not(.filter-bar) [role=radiogroup] label textarea,.app-view>div form:not(.filter-bar) [role=radiogroup] label>em,.app-view>div form:not(.filter-bar) [role=radiogroup] label>span,.modal-dialog [role=document] .type-password,.modal-dialog [role=document] .type-password textarea,.modal-dialog [role=document] .type-password>em,.modal-dialog [role=document] .type-password>span,.modal-dialog [role=document] .type-select,.modal-dialog [role=document] .type-select textarea,.modal-dialog [role=document] .type-select>em,.modal-dialog [role=document] .type-select>span,.modal-dialog [role=document] .type-text,.modal-dialog [role=document] .type-text textarea,.modal-dialog [role=document] .type-text>em,.modal-dialog [role=document] .type-text>span,.modal-dialog [role=document] [role=radiogroup] label,.modal-dialog [role=document] [role=radiogroup] label textarea,.modal-dialog [role=document] [role=radiogroup] label>em,.modal-dialog [role=document] [role=radiogroup] label>span,.modal-dialog [role=document] form button+em,.oidc-select label,.oidc-select label textarea,.oidc-select label>em,.oidc-select label>span,.type-toggle,.type-toggle textarea,.type-toggle>em,.type-toggle>span,html[data-route^="dc.acls.index"] .filter-bar [role=radiogroup] label,html[data-route^="dc.acls.index"] .filter-bar [role=radiogroup] label span,main .type-password,main .type-password textarea,main .type-password>em,main .type-password>span,main .type-select,main .type-select textarea,main .type-select>em,main .type-select>span,main .type-text,main .type-text textarea,main .type-text>em,main .type-text>span,main form button+em,span.label{display:block}html[data-route^="dc.acls.index"] .filter-bar [role=radiogroup],html[data-route^="dc.acls.index"] .filter-bar [role=radiogroup] label,html[data-route^="dc.acls.index"] .filter-bar [role=radiogroup] label span{height:100%}html[data-route^="dc.acls.index"] .filter-bar [role=radiogroup] label span{padding:5px 14px}.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=password],.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=text],.app-view>div form:not(.filter-bar) [role=radiogroup] label textarea,.modal-dialog [role=document] .type-password [type=password],.modal-dialog [role=document] .type-password [type=text],.modal-dialog [role=document] .type-password textarea,.modal-dialog [role=document] .type-select [type=password],.modal-dialog [role=document] .type-select [type=text],.modal-dialog [role=document] .type-select textarea,.modal-dialog [role=document] .type-text [type=password],.modal-dialog [role=document] .type-text [type=text],.modal-dialog [role=document] .type-text textarea,.modal-dialog [role=document] [role=radiogroup] label [type=password],.modal-dialog [role=document] [role=radiogroup] label [type=text],.modal-dialog [role=document] [role=radiogroup] label textarea,.oidc-select label [type=password],.oidc-select label [type=text],.oidc-select label textarea,.type-toggle [type=password],.type-toggle [type=text],.type-toggle textarea,main .type-password [type=password],main .type-password [type=text],main .type-password textarea,main .type-select [type=password],main .type-select [type=text],main .type-select textarea,main .type-text [type=password],main .type-text [type=text],main .type-text textarea{-moz-appearance:none;-webkit-appearance:none;box-shadow:var(--token-surface-inset-box-shadow);border-radius:var(--decor-radius-100);border:var(--decor-border-100);outline:0}.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=password]:-moz-read-only,.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=text]:-moz-read-only,.app-view>div form:not(.filter-bar) [role=radiogroup] label textarea:-moz-read-only,.modal-dialog [role=document] .type-password [type=password]:-moz-read-only,.modal-dialog [role=document] .type-password [type=text]:-moz-read-only,.modal-dialog [role=document] .type-password textarea:-moz-read-only,.modal-dialog [role=document] .type-select [type=password]:-moz-read-only,.modal-dialog [role=document] .type-select [type=text]:-moz-read-only,.modal-dialog [role=document] .type-select textarea:-moz-read-only,.modal-dialog [role=document] .type-text [type=password]:-moz-read-only,.modal-dialog [role=document] .type-text [type=text]:-moz-read-only,.modal-dialog [role=document] .type-text textarea:-moz-read-only,.modal-dialog [role=document] [role=radiogroup] label [type=password]:-moz-read-only,.modal-dialog [role=document] [role=radiogroup] label [type=text]:-moz-read-only,.modal-dialog [role=document] [role=radiogroup] label textarea:-moz-read-only,.oidc-select label [type=password]:-moz-read-only,.oidc-select label [type=text]:-moz-read-only,.oidc-select label textarea:-moz-read-only,.type-toggle [type=password]:-moz-read-only,.type-toggle [type=text]:-moz-read-only,.type-toggle textarea:-moz-read-only,main .type-password [type=password]:-moz-read-only,main .type-password [type=text]:-moz-read-only,main .type-password textarea:-moz-read-only,main .type-select [type=password]:-moz-read-only,main .type-select [type=text]:-moz-read-only,main .type-select textarea:-moz-read-only,main .type-text [type=password]:-moz-read-only,main .type-text [type=text]:-moz-read-only,main .type-text textarea:-moz-read-only{cursor:not-allowed}.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=password]:disabled,.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=password]:read-only,.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=text]:disabled,.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=text]:read-only,.app-view>div form:not(.filter-bar) [role=radiogroup] label textarea:disabled,.app-view>div form:not(.filter-bar) [role=radiogroup] label textarea:read-only,.modal-dialog [role=document] .type-password [type=password]:disabled,.modal-dialog [role=document] .type-password [type=password]:read-only,.modal-dialog [role=document] .type-password [type=text]:disabled,.modal-dialog [role=document] .type-password [type=text]:read-only,.modal-dialog [role=document] .type-password textarea:disabled,.modal-dialog [role=document] .type-password textarea:read-only,.modal-dialog [role=document] .type-select [type=password]:disabled,.modal-dialog [role=document] .type-select [type=password]:read-only,.modal-dialog [role=document] .type-select [type=text]:disabled,.modal-dialog [role=document] .type-select [type=text]:read-only,.modal-dialog [role=document] .type-select textarea:disabled,.modal-dialog [role=document] .type-select textarea:read-only,.modal-dialog [role=document] .type-text [type=password]:disabled,.modal-dialog [role=document] .type-text [type=password]:read-only,.modal-dialog [role=document] .type-text [type=text]:disabled,.modal-dialog [role=document] .type-text [type=text]:read-only,.modal-dialog [role=document] .type-text textarea:disabled,.modal-dialog [role=document] .type-text textarea:read-only,.modal-dialog [role=document] [role=radiogroup] label [type=password]:disabled,.modal-dialog [role=document] [role=radiogroup] label [type=password]:read-only,.modal-dialog [role=document] [role=radiogroup] label [type=text]:disabled,.modal-dialog [role=document] [role=radiogroup] label [type=text]:read-only,.modal-dialog [role=document] [role=radiogroup] label textarea:disabled,.modal-dialog [role=document] [role=radiogroup] label textarea:read-only,.oidc-select label [type=password]:disabled,.oidc-select label [type=password]:read-only,.oidc-select label [type=text]:disabled,.oidc-select label [type=text]:read-only,.oidc-select label textarea:disabled,.oidc-select label textarea:read-only,.type-toggle [type=password]:disabled,.type-toggle [type=password]:read-only,.type-toggle [type=text]:disabled,.type-toggle [type=text]:read-only,.type-toggle textarea:disabled,.type-toggle textarea:read-only,main .type-password [type=password]:disabled,main .type-password [type=password]:read-only,main .type-password [type=text]:disabled,main .type-password [type=text]:read-only,main .type-password textarea:disabled,main .type-password textarea:read-only,main .type-select [type=password]:disabled,main .type-select [type=password]:read-only,main .type-select [type=text]:disabled,main .type-select [type=text]:read-only,main .type-select textarea:disabled,main .type-select textarea:read-only,main .type-text [type=password]:disabled,main .type-text [type=password]:read-only,main .type-text [type=text]:disabled,main .type-text [type=text]:read-only,main .type-text textarea:disabled,main .type-text textarea:read-only,textarea:disabled+.CodeMirror{cursor:not-allowed}.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=password]::-moz-placeholder,.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=text]::-moz-placeholder,.app-view>div form:not(.filter-bar) [role=radiogroup] label textarea::-moz-placeholder,.modal-dialog [role=document] .type-password [type=password]::-moz-placeholder,.modal-dialog [role=document] .type-password [type=text]::-moz-placeholder,.modal-dialog [role=document] .type-password textarea::-moz-placeholder,.modal-dialog [role=document] .type-select [type=password]::-moz-placeholder,.modal-dialog [role=document] .type-select [type=text]::-moz-placeholder,.modal-dialog [role=document] .type-select textarea::-moz-placeholder,.modal-dialog [role=document] .type-text [type=password]::-moz-placeholder,.modal-dialog [role=document] .type-text [type=text]::-moz-placeholder,.modal-dialog [role=document] .type-text textarea::-moz-placeholder,.modal-dialog [role=document] [role=radiogroup] label [type=password]::-moz-placeholder,.modal-dialog [role=document] [role=radiogroup] label [type=text]::-moz-placeholder,.modal-dialog [role=document] [role=radiogroup] label textarea::-moz-placeholder,.oidc-select label [type=password]::-moz-placeholder,.oidc-select label [type=text]::-moz-placeholder,.oidc-select label textarea::-moz-placeholder,.type-toggle [type=password]::-moz-placeholder,.type-toggle [type=text]::-moz-placeholder,.type-toggle textarea::-moz-placeholder,main .type-password [type=password]::-moz-placeholder,main .type-password [type=text]::-moz-placeholder,main .type-password textarea::-moz-placeholder,main .type-select [type=password]::-moz-placeholder,main .type-select [type=text]::-moz-placeholder,main .type-select textarea::-moz-placeholder,main .type-text [type=password]::-moz-placeholder,main .type-text [type=text]::-moz-placeholder,main .type-text textarea::-moz-placeholder{color:var(--token-color-foreground-disabled)}.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=password]::placeholder,.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=text]::placeholder,.app-view>div form:not(.filter-bar) [role=radiogroup] label textarea::placeholder,.app-view>div form:not(.filter-bar) [role=radiogroup] label>em,.modal-dialog [role=document] .type-password [type=password]::placeholder,.modal-dialog [role=document] .type-password [type=text]::placeholder,.modal-dialog [role=document] .type-password textarea::placeholder,.modal-dialog [role=document] .type-password>em,.modal-dialog [role=document] .type-select [type=password]::placeholder,.modal-dialog [role=document] .type-select [type=text]::placeholder,.modal-dialog [role=document] .type-select textarea::placeholder,.modal-dialog [role=document] .type-select>em,.modal-dialog [role=document] .type-text [type=password]::placeholder,.modal-dialog [role=document] .type-text [type=text]::placeholder,.modal-dialog [role=document] .type-text textarea::placeholder,.modal-dialog [role=document] .type-text>em,.modal-dialog [role=document] [role=radiogroup] label [type=password]::placeholder,.modal-dialog [role=document] [role=radiogroup] label [type=text]::placeholder,.modal-dialog [role=document] [role=radiogroup] label textarea::placeholder,.modal-dialog [role=document] [role=radiogroup] label>em,.modal-dialog [role=document] form button+em,.modal-dialog [role=document] form fieldset>p,.oidc-select label [type=password]::placeholder,.oidc-select label [type=text]::placeholder,.oidc-select label textarea::placeholder,.oidc-select label>em,.type-toggle [type=password]::placeholder,.type-toggle [type=text]::placeholder,.type-toggle textarea::placeholder,.type-toggle>em,main .type-password [type=password]::placeholder,main .type-password [type=text]::placeholder,main .type-password textarea::placeholder,main .type-password>em,main .type-select [type=password]::placeholder,main .type-select [type=text]::placeholder,main .type-select textarea::placeholder,main .type-select>em,main .type-text [type=password]::placeholder,main .type-text [type=text]::placeholder,main .type-text textarea::placeholder,main .type-text>em,main form button+em,main form fieldset>p{color:var(--token-color-foreground-disabled)}.has-error>input,.has-error>textarea{border-color:var(--decor-error,var(--token-color-foreground-critical))!important}.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=password],.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=text],.app-view>div form:not(.filter-bar) [role=radiogroup] label textarea,.modal-dialog [role=document] .type-password [type=password],.modal-dialog [role=document] .type-password [type=text],.modal-dialog [role=document] .type-password textarea,.modal-dialog [role=document] .type-select [type=password],.modal-dialog [role=document] .type-select [type=text],.modal-dialog [role=document] .type-select textarea,.modal-dialog [role=document] .type-text [type=password],.modal-dialog [role=document] .type-text [type=text],.modal-dialog [role=document] .type-text textarea,.modal-dialog [role=document] [role=radiogroup] label [type=password],.modal-dialog [role=document] [role=radiogroup] label [type=text],.modal-dialog [role=document] [role=radiogroup] label textarea,.oidc-select label [type=password],.oidc-select label [type=text],.oidc-select label textarea,.type-toggle [type=password],.type-toggle [type=text],.type-toggle textarea,main .type-password [type=password],main .type-password [type=text],main .type-password textarea,main .type-select [type=password],main .type-select [type=text],main .type-select textarea,main .type-text [type=password],main .type-text [type=text],main .type-text textarea{color:var(--token-color-foreground-faint);border-color:var(--token-color-palette-neutral-300)}.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=password]:hover,.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=text]:hover,.app-view>div form:not(.filter-bar) [role=radiogroup] label textarea:hover,.modal-dialog [role=document] .type-password [type=password]:hover,.modal-dialog [role=document] .type-password [type=text]:hover,.modal-dialog [role=document] .type-password textarea:hover,.modal-dialog [role=document] .type-select [type=password]:hover,.modal-dialog [role=document] .type-select [type=text]:hover,.modal-dialog [role=document] .type-select textarea:hover,.modal-dialog [role=document] .type-text [type=password]:hover,.modal-dialog [role=document] .type-text [type=text]:hover,.modal-dialog [role=document] .type-text textarea:hover,.modal-dialog [role=document] [role=radiogroup] label [type=password]:hover,.modal-dialog [role=document] [role=radiogroup] label [type=text]:hover,.modal-dialog [role=document] [role=radiogroup] label textarea:hover,.oidc-select label [type=password]:hover,.oidc-select label [type=text]:hover,.oidc-select label textarea:hover,.type-toggle [type=password]:hover,.type-toggle [type=text]:hover,.type-toggle textarea:hover,main .type-password [type=password]:hover,main .type-password [type=text]:hover,main .type-password textarea:hover,main .type-select [type=password]:hover,main .type-select [type=text]:hover,main .type-select textarea:hover,main .type-text [type=password]:hover,main .type-text [type=text]:hover,main .type-text textarea:hover{border-color:var(--token-color-foreground-faint)}.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=password]:focus,.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=text]:focus,.app-view>div form:not(.filter-bar) [role=radiogroup] label textarea:focus,.modal-dialog [role=document] .type-password [type=password]:focus,.modal-dialog [role=document] .type-password [type=text]:focus,.modal-dialog [role=document] .type-password textarea:focus,.modal-dialog [role=document] .type-select [type=password]:focus,.modal-dialog [role=document] .type-select [type=text]:focus,.modal-dialog [role=document] .type-select textarea:focus,.modal-dialog [role=document] .type-text [type=password]:focus,.modal-dialog [role=document] .type-text [type=text]:focus,.modal-dialog [role=document] .type-text textarea:focus,.modal-dialog [role=document] [role=radiogroup] label [type=password]:focus,.modal-dialog [role=document] [role=radiogroup] label [type=text]:focus,.modal-dialog [role=document] [role=radiogroup] label textarea:focus,.oidc-select label [type=password]:focus,.oidc-select label [type=text]:focus,.oidc-select label textarea:focus,.type-toggle [type=password]:focus,.type-toggle [type=text]:focus,.type-toggle textarea:focus,main .type-password [type=password]:focus,main .type-password [type=text]:focus,main .type-password textarea:focus,main .type-select [type=password]:focus,main .type-select [type=text]:focus,main .type-select textarea:focus,main .type-text [type=password]:focus,main .type-text [type=text]:focus,main .type-text textarea:focus{border-color:var(--typo-action,var(--token-color-foreground-action))}.app-view>div form:not(.filter-bar) [role=radiogroup] label a,.modal-dialog [role=document] .type-password a,.modal-dialog [role=document] .type-select a,.modal-dialog [role=document] .type-text a,.modal-dialog [role=document] [role=radiogroup] label a,.oidc-select label a,.type-toggle a,main .type-password a,main .type-select a,main .type-text a{display:inline}.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=password],.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=text],.modal-dialog [role=document] .type-password [type=password],.modal-dialog [role=document] .type-password [type=text],.modal-dialog [role=document] .type-select [type=password],.modal-dialog [role=document] .type-select [type=text],.modal-dialog [role=document] .type-text [type=password],.modal-dialog [role=document] .type-text [type=text],.modal-dialog [role=document] [role=radiogroup] label [type=password],.modal-dialog [role=document] [role=radiogroup] label [type=text],.oidc-select label [type=password],.oidc-select label [type=text],.type-toggle [type=password],.type-toggle [type=text],main .type-password [type=password],main .type-password [type=text],main .type-select [type=password],main .type-select [type=text],main .type-text [type=password],main .type-text [type=text]{display:inline-flex;justify-content:flex-start;max-width:100%;width:100%;height:0;padding:17px 13px}.consul-exposed-path-list>ul>li>.header dt,.consul-lock-session-list ul>li:not(:first-child)>.header dt,.consul-upstream-instance-list li>.header dt,.list-collection>ul>li:not(:first-child)>.header dt,.type-toggle input{display:none}.app-view>div form:not(.filter-bar) [role=radiogroup] label textarea,.modal-dialog [role=document] .type-password textarea,.modal-dialog [role=document] .type-select textarea,.modal-dialog [role=document] .type-text textarea,.modal-dialog [role=document] [role=radiogroup] label textarea,.oidc-select label textarea,.type-toggle textarea,main .type-password textarea,main .type-select textarea,main .type-text textarea{resize:vertical;max-width:100%;min-width:100%;min-height:70px;padding:6px 13px}.app-view>div form:not(.filter-bar) [role=radiogroup],.app-view>div form:not(.filter-bar) [role=radiogroup] label,.checkbox-group,.modal-dialog [role=document] .type-password,.modal-dialog [role=document] .type-select,.modal-dialog [role=document] .type-text,.modal-dialog [role=document] [role=radiogroup],.modal-dialog [role=document] [role=radiogroup] label,.modal-dialog [role=document] form table,.oidc-select label,.type-toggle,main .type-password,main .type-select,main .type-text,main form table{margin-bottom:1.4em}.app-view>div form:not(.filter-bar) [role=radiogroup] label>span,.modal-dialog [role=document] .type-password>span,.modal-dialog [role=document] .type-select>span,.modal-dialog [role=document] .type-text>span,.modal-dialog [role=document] [role=radiogroup] label>span,.oidc-select label>span,.type-toggle>span,main .type-password>span,main .type-select>span,main .type-text>span,span.label{color:var(--typo-contrast,inherit);margin-bottom:.3em}.app-view>div form:not(.filter-bar) [role=radiogroup] label>em,.modal-dialog [role=document] .type-password>em,.modal-dialog [role=document] .type-select>em,.modal-dialog [role=document] .type-text>em,.modal-dialog [role=document] [role=radiogroup] label>em,.modal-dialog [role=document] form button+em,.oidc-select label>em,.type-toggle>em,main .type-password>em,main .type-select>em,main .type-text>em,main form button+em{margin-top:2px}.app-view>div form:not(.filter-bar) [role=radiogroup] label>span+em,.modal-dialog [role=document] .type-password>span+em,.modal-dialog [role=document] .type-select>span+em,.modal-dialog [role=document] .type-text>span+em,.modal-dialog [role=document] [role=radiogroup] label>span+em,.oidc-select label>span+em,.type-toggle>span+em,main .type-password>span+em,main .type-select>span+em,main .type-text>span+em,span.label+em{margin-top:-.5em;margin-bottom:.5em}.modal-dialog [role=document] .type-password>span,.modal-dialog [role=document] .type-select>span,.modal-dialog [role=document] label.type-text>span,main .type-password>span,main .type-select>span,main label.type-text>span{line-height:2.2em}.type-toggle+.checkbox-group{margin-top:-1em}.consul-exposed-path-list>ul>li,.consul-intention-permission-header-list>ul>li,.consul-intention-permission-list>ul>li,.consul-lock-session-list ul>li:not(:first-child),.consul-upstream-instance-list li,.list-collection>ul>li:not(:first-child){list-style-type:none;border:var(--decor-border-100);border-top-color:transparent;border-bottom-color:var(--token-color-surface-interactive-active);border-right-color:transparent;border-left-color:transparent;--horizontal-padding:12px;--vertical-padding:10px;padding:var(--vertical-padding) 0;padding-left:var(--horizontal-padding)}.consul-auth-method-list>ul>li:active:not(:first-child),.consul-auth-method-list>ul>li:focus:not(:first-child),.consul-auth-method-list>ul>li:hover:not(:first-child),.consul-exposed-path-list>ul>li.linkable:active,.consul-exposed-path-list>ul>li.linkable:focus,.consul-exposed-path-list>ul>li.linkable:hover,.consul-intention-permission-list:not(.readonly)>ul>li:active,.consul-intention-permission-list:not(.readonly)>ul>li:focus,.consul-intention-permission-list:not(.readonly)>ul>li:hover,.consul-lock-session-list ul>li.linkable:active:not(:first-child),.consul-lock-session-list ul>li.linkable:focus:not(:first-child),.consul-lock-session-list ul>li.linkable:hover:not(:first-child),.consul-node-list>ul>li:active:not(:first-child),.consul-node-list>ul>li:focus:not(:first-child),.consul-node-list>ul>li:hover:not(:first-child),.consul-policy-list>ul>li:active:not(:first-child),.consul-policy-list>ul>li:focus:not(:first-child),.consul-policy-list>ul>li:hover:not(:first-child),.consul-role-list>ul>li:active:not(:first-child),.consul-role-list>ul>li:focus:not(:first-child),.consul-role-list>ul>li:hover:not(:first-child),.consul-service-instance-list>ul>li:active:not(:first-child),.consul-service-instance-list>ul>li:focus:not(:first-child),.consul-service-instance-list>ul>li:hover:not(:first-child),.consul-token-list>ul>li:active:not(:first-child),.consul-token-list>ul>li:focus:not(:first-child),.consul-token-list>ul>li:hover:not(:first-child),.consul-upstream-instance-list li.linkable:active,.consul-upstream-instance-list li.linkable:focus,.consul-upstream-instance-list li.linkable:hover,.list-collection>ul>li.linkable:active:not(:first-child),.list-collection>ul>li.linkable:focus:not(:first-child),.list-collection>ul>li.linkable:hover:not(:first-child){border-color:var(--token-color-surface-interactive-active);box-shadow:var(--token-elevation-high-box-shadow);border-top-color:transparent;cursor:pointer}.radio-card,.tippy-box{box-shadow:var(--token-surface-mid-box-shadow)}.consul-exposed-path-list>ul>li>.header,.consul-lock-session-list ul>li:not(:first-child)>.header,.consul-upstream-instance-list li>.header,.list-collection>ul>li:not(:first-child)>.header{color:var(--token-color-hashicorp-brand)}.consul-exposed-path-list>ul>li>.header *,.consul-lock-session-list ul>li:not(:first-child)>.header *,.consul-upstream-instance-list li>.header *,.list-collection>ul>li:not(:first-child)>.header *{color:inherit}.consul-exposed-path-list>ul>li>.detail,.consul-lock-session-list ul>li:not(:first-child)>.detail,.consul-upstream-instance-list li>.detail,.list-collection>ul>li:not(:first-child)>.detail,.radio-card{color:var(--token-color-foreground-faint)}.consul-exposed-path-list>ul>li>.detail a,.consul-lock-session-list ul>li:not(:first-child)>.detail a,.consul-upstream-instance-list li>.detail a,.list-collection>ul>li:not(:first-child)>.detail a{color:inherit}.consul-exposed-path-list>ul>li>.detail a:hover,.consul-lock-session-list ul>li:not(:first-child)>.detail a:hover,.consul-upstream-instance-list li>.detail a:hover,.list-collection>ul>li:not(:first-child)>.detail a:hover{color:var(--token-color-foreground-action);text-decoration:underline}.consul-exposed-path-list>ul>li>.detail,.consul-exposed-path-list>ul>li>.header>dl:first-child,.consul-lock-session-list ul>li:not(:first-child)>.detail,.consul-lock-session-list ul>li:not(:first-child)>.header>dl:first-child,.consul-upstream-instance-list li>.detail,.consul-upstream-instance-list li>.header>dl:first-child,.list-collection>ul>li:not(:first-child)>.detail,.list-collection>ul>li:not(:first-child)>.header>dl:first-child{margin-right:6px}.consul-exposed-path-list>ul>li>.header dd::before,.consul-lock-session-list ul>li:not(:first-child)>.header dd::before,.consul-upstream-instance-list li>.header dd::before,.list-collection>ul>li:not(:first-child)>.header dd::before{font-size:.9em}.consul-exposed-path-list>ul>li>.detail,.consul-exposed-path-list>ul>li>.header,.consul-lock-session-list ul>li:not(:first-child)>.detail,.consul-lock-session-list ul>li:not(:first-child)>.header,.consul-upstream-instance-list li>.detail,.consul-upstream-instance-list li>.header,.list-collection>ul>li:not(:first-child)>.detail,.list-collection>ul>li:not(:first-child)>.header{display:flex;flex-wrap:nowrap;overflow-x:hidden}.consul-exposed-path-list>ul>li>.detail *,.consul-exposed-path-list>ul>li>.header *,.consul-lock-session-list ul>li:not(:first-child)>.detail *,.consul-lock-session-list ul>li:not(:first-child)>.header *,.consul-upstream-instance-list li>.detail *,.consul-upstream-instance-list li>.header *,.list-collection>ul>li:not(:first-child)>.detail *,.list-collection>ul>li:not(:first-child)>.header *{white-space:nowrap;flex-wrap:nowrap}.consul-exposed-path-list>ul>li>.detail>span,.consul-lock-session-list ul>li:not(:first-child)>.detail>span,.consul-upstream-instance-list li>.detail>span,.list-collection>ul>li:not(:first-child)>.detail>span{margin-right:18px}.consul-intention-permission-header-list>ul>li,.consul-intention-permission-list>ul>li{padding-top:0!important;padding-bottom:0!important}.consul-intention-permission-header-list>ul>li .detail,.consul-intention-permission-list>ul>li .detail{grid-row-start:header!important;grid-row-end:detail!important;align-self:center!important;padding:5px 0}.consul-intention-permission-header-list>ul>li .popover-menu>[type=checkbox]+label,.consul-intention-permission-list>ul>li .popover-menu>[type=checkbox]+label{padding:0}.consul-intention-permission-header-list>ul>li .popover-menu>[type=checkbox]+label+div:not(.above),.consul-intention-permission-list>ul>li .popover-menu>[type=checkbox]+label+div:not(.above){top:30px}.has-error>strong{font-style:normal;font-weight:var(--token-typography-font-weight-regular);color:inherit;color:var(--token-color-foreground-critical);position:relative;padding-left:20px}.has-error>strong::before{color:var(--token-color-foreground-critical);position:absolute;top:50%;left:0;margin-top:-8px}.more-popover-menu .popover-menu>[type=checkbox]+label,table.has-actions tr>.actions .popover-menu>[type=checkbox]+label,table.with-details tr>.actions .popover-menu>[type=checkbox]+label{padding:7px}.more-popover-menu .popover-menu>[type=checkbox]+label>*,table.has-actions tr>.actions .popover-menu>[type=checkbox]+label>*,table.with-details tr>.actions .popover-menu>[type=checkbox]+label>*{background-color:transparent;border-radius:var(--decor-radius-100);width:30px;height:30px;font-size:0}.more-popover-menu .popover-menu>[type=checkbox]+label>:active,.more-popover-menu .popover-menu>[type=checkbox]+label>:focus,.more-popover-menu .popover-menu>[type=checkbox]+label>:hover,.radio-card>:first-child,table.has-actions tr>.actions .popover-menu>[type=checkbox]+label>:active,table.has-actions tr>.actions .popover-menu>[type=checkbox]+label>:focus,table.has-actions tr>.actions .popover-menu>[type=checkbox]+label>:hover,table.with-details tr>.actions .popover-menu>[type=checkbox]+label>:active,table.with-details tr>.actions .popover-menu>[type=checkbox]+label>:focus,table.with-details tr>.actions .popover-menu>[type=checkbox]+label>:hover{background-color:var(--token-color-surface-strong)}.more-popover-menu .popover-menu>[type=checkbox]+label>::after,table.has-actions tr>.actions .popover-menu>[type=checkbox]+label>::after,table.with-details tr>.actions .popover-menu>[type=checkbox]+label>::after{--icon-name:icon-more-horizontal;--icon-color:var(--token-color-foreground-strong);--icon-size:icon-300;content:"";position:absolute;top:50%;left:50%;margin-top:-8px;margin-left:-8px}.oidc-select [class$=-oidc-provider]::before{width:22px;height:22px;flex:0 0 auto;margin-right:10px}.oidc-select .ember-power-select-trigger,.oidc-select li{margin-bottom:1em}.informed-action header,.radio-card header{margin-bottom:.5em}.oidc-select .ember-power-select-trigger{width:100%}.radio-card{border:var(--decor-border-100);border-radius:var(--decor-radius-100);border-color:var(--token-color-surface-interactive-active);cursor:pointer;float:none!important;margin-right:0!important;display:flex!important}.checked.radio-card{border-color:var(--token-color-foreground-action)}.checked.radio-card>:first-child{background-color:var(--token-color-surface-action)}.radio-card header{color:var(--token-color-hashicorp-brand)}.consul-intention-fieldsets .radio-card>:last-child{padding-left:47px;position:relative}.consul-intention-fieldsets .radio-card>:last-child::before{position:absolute;left:14px;font-size:1rem}.radio-card>:first-child{padding:10px;display:grid;align-items:center;justify-items:center}.radio-card>:last-child{padding:18px}.consul-server-card,.disclosure-menu [aria-expanded]~*,.menu-panel,.more-popover-menu>[type=checkbox]+label+div,.popover-menu>[type=checkbox]+label+div,section[data-route="dc.show.serverstatus"] .server-failure-tolerance,section[data-route="dc.show.license"] aside,table.has-actions tr>.actions>[type=checkbox]+label+div,table.with-details tr>.actions>[type=checkbox]+label+div{--tone-border:var(--token-color-palette-neutral-300);border:var(--decor-border-100);border-radius:var(--decor-radius-200);box-shadow:var(--token-surface-high-box-shadow);color:var(--token-color-foreground-strong);background-color:var(--token-color-surface-primary);--padding-x:14px;--padding-y:14px;position:relative}.disclosure-menu [aria-expanded]~* [role=separator],.menu-panel [role=separator],.more-popover-menu>[type=checkbox]+label+div [role=separator],.popover-menu>[type=checkbox]+label+div [role=separator],table.has-actions tr>.actions>[type=checkbox]+label+div [role=separator],table.with-details tr>.actions>[type=checkbox]+label+div [role=separator]{border-top:var(--decor-border-100);margin:0}.consul-server-card,.disclosure-menu [aria-expanded]~*,.disclosure-menu [aria-expanded]~* [role=separator],.menu-panel,.menu-panel [role=separator],.more-popover-menu>[type=checkbox]+label+div,.more-popover-menu>[type=checkbox]+label+div [role=separator],.popover-menu>[type=checkbox]+label+div,.popover-menu>[type=checkbox]+label+div [role=separator],section[data-route="dc.show.serverstatus"] .server-failure-tolerance,section[data-route="dc.show.license"] aside,table.has-actions tr>.actions>[type=checkbox]+label+div,table.has-actions tr>.actions>[type=checkbox]+label+div [role=separator],table.with-details tr>.actions>[type=checkbox]+label+div,table.with-details tr>.actions>[type=checkbox]+label+div [role=separator]{border-color:var(--tone-border)}.paged-collection-scroll,[style*="--paged-row-height"]{overflow-y:auto!important;will-change:scrollPosition}[style*="--paged-start"]::before{content:"";display:block;height:var(--paged-start)}.consul-auth-method-type,.consul-external-source,.consul-health-check-list .health-check-output dd em,.consul-intention-list td strong,.consul-intention-permission-list strong,.consul-intention-search-bar li button span,.consul-kind,.consul-peer-search-bar li button span,.consul-server-card .health-status+dd,.consul-source,.consul-transparent-proxy,.discovery-chain .route-card>header ul li,.leader,.search-bar-status li:not(.remove-all),.topology-metrics-source-type,html[data-route^="dc.acls.index"] main td strong,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl,section[data-route="dc.show.serverstatus"] .server-failure-tolerance header em,span.policy-node-identity,span.policy-service-identity{border-radius:var(--decor-radius-100);display:inline-flex;position:relative;align-items:center;white-space:nowrap}.consul-auth-method-type::before,.consul-external-source::before,.consul-health-check-list .health-check-output dd em::before,.consul-intention-list td strong::before,.consul-intention-permission-list strong::before,.consul-intention-search-bar li button span::before,.consul-kind::before,.consul-peer-search-bar li button span::before,.consul-server-card .health-status+dd::before,.consul-source::before,.consul-transparent-proxy::before,.discovery-chain .route-card>header ul li::before,.leader::before,.search-bar-status li:not(.remove-all)::before,.topology-metrics-source-type::before,html[data-route^="dc.acls.index"] main td strong::before,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl::before,section[data-route="dc.show.serverstatus"] .server-failure-tolerance header em::before,span.policy-node-identity::before,span.policy-service-identity::before{margin-right:4px;--icon-size:icon-300}.consul-auth-method-type,.consul-external-source,.consul-kind,.consul-server-card .health-status+dd,.consul-source,.consul-transparent-proxy,.leader,.search-bar-status li:not(.remove-all),.topology-metrics-source-type,section[data-route="dc.show.serverstatus"] .server-failure-tolerance header em,span.policy-node-identity,span.policy-service-identity{padding:0 8px;--icon-size:icon-200}.consul-intention-permission-list strong,.consul-peer-search-bar li button span,.discovery-chain .route-card>header ul li,html[data-route^="dc.acls.index"] main td strong,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl{padding:1px 5px}.consul-intention-list td strong,.consul-intention-search-bar li button span{padding:4px 8px}span.policy-node-identity::before,span.policy-service-identity::before{vertical-align:unset}span.policy-node-identity::before{content:"Node Identity: "}span.policy-service-identity::before{content:"Service Identity: "}.more-popover-menu>[type=checkbox]+label>*,.popover-menu>[type=checkbox]+label>*,table.has-actions tr>.actions>[type=checkbox]+label>*,table.with-details tr>.actions>[type=checkbox]+label>*{cursor:pointer}.more-popover-menu>[type=checkbox]+label>::after,.popover-menu>[type=checkbox]+label>::after,table.has-actions tr>.actions>[type=checkbox]+label>::after,table.with-details tr>.actions>[type=checkbox]+label>::after{width:16px;height:16px;position:relative}.more-popover-menu,.popover-menu,table.has-actions tr>.actions,table.with-details tr>.actions{position:relative}.more-popover-menu>[type=checkbox]+label,.popover-menu>[type=checkbox]+label,table.has-actions tr>.actions>[type=checkbox]+label,table.with-details tr>.actions>[type=checkbox]+label{display:block}.more-popover-menu>[type=checkbox]+label+div,.popover-menu>[type=checkbox]+label+div,table.has-actions tr>.actions>[type=checkbox]+label+div,table.with-details tr>.actions>[type=checkbox]+label+div{min-width:192px}.more-popover-menu>[type=checkbox]+label+div:not(.above),.popover-menu>[type=checkbox]+label+div:not(.above),table.has-actions tr>.actions>[type=checkbox]+label+div:not(.above),table.with-details tr>.actions>[type=checkbox]+label+div:not(.above){top:38px}.more-popover-menu>[type=checkbox]+label+div:not(.left),.popover-menu>[type=checkbox]+label+div:not(.left),table.has-actions tr>.actions>[type=checkbox]+label+div:not(.left),table.with-details tr>.actions>[type=checkbox]+label+div:not(.left){right:5px}.popover-menu .menu-panel{position:absolute!important}.popover-select label{height:100%}.popover-select label>*{padding:0 8px!important;height:100%!important;justify-content:space-between!important;min-width:auto!important}.popover-select label>::after{margin-left:6px}.popover-select button::before{margin-right:10px}.popover-select .value-passing button::before{color:var(--token-color-foreground-success)}.popover-select .value-warning button::before{color:var(--token-color-foreground-warning)}.popover-select .value-critical button::before{color:var(--token-color-foreground-critical)}.popover-select .value-empty button::before{color:var(--token-color-foreground-disabled)}.popover-select .value-unknown button::before,.type-source.popover-select li.partition button::before{color:var(--token-color-foreground-faint)}.type-source.popover-select li.aws button{text-transform:uppercase}.progress.indeterminate{width:100%;display:flex;align-items:center;justify-content:center;--icon-size:icon-700;--icon-name:var(--icon-loading);--icon-color:var(--token-color-foreground-faint)}.progress.indeterminate::before{content:""}.app-view>div form:not(.filter-bar) [role=radiogroup],.modal-dialog [role=document] [role=radiogroup]{overflow:hidden;padding-left:1px}.app-view>div form:not(.filter-bar) [role=radiogroup] label,.modal-dialog [role=document] [role=radiogroup] label{float:left}.app-view>div form:not(.filter-bar) [role=radiogroup] label>span,.modal-dialog [role=document] [role=radiogroup] label>span{float:right;margin-left:1em}.app-view>div form:not(.filter-bar) [role=radiogroup] label:not(:last-child),.modal-dialog [role=document] [role=radiogroup] label:not(:last-child){margin-right:25px}.app-view>div form:not(.filter-bar) [role=radiogroup] label,.app-view>div form:not(.filter-bar) [role=radiogroup] label>span,.modal-dialog [role=document] [role=radiogroup] label,.modal-dialog [role=document] [role=radiogroup] label>span{margin-bottom:0!important}.type-toggle label span{cursor:pointer}.type-toggle label span::after{border-radius:var(--decor-radius-full)}.type-toggle label span::before{border-radius:7px;left:0;width:24px;height:12px;margin-top:-5px}.type-negative.type-toggle{border:0}.app-view>header .title,.modal-dialog [role=document] table td,.modal-dialog [role=document] table th,main table td,main table th{border-bottom:var(--decor-border-100)}.type-toggle label span::after{background-color:var(--token-color-surface-primary);margin-top:-3px;width:8px;height:8px}.type-negative.type-toggle label input+span::before,.type-toggle label input:checked+span::before{background-color:var(--token-color-foreground-action)}.type-negative.type-toggle label input:checked+span::before,.type-toggle label span::before{background-color:var(--token-color-palette-neutral-300)}.type-toggle label{position:relative}.type-toggle label span{color:var(--token-color-foreground-strong);display:inline-block;padding-left:34px}.type-toggle label span::after,.type-toggle label span::before{position:absolute;display:block;content:"";top:50%}.type-negative.type-toggle label input+span::after,.type-toggle label input:checked+span::after{left:14px}.type-negative.type-toggle label input:checked+span::after,.type-toggle label span::after{left:2px}.consul-intention-list td.destination,.consul-intention-list td.source,.modal-dialog [role=document] table th,main table th{border-color:var(--token-color-palette-neutral-300)}.modal-dialog [role=document] table td,main table td{border-color:var(--token-color-palette-neutral-300);color:var(--token-color-foreground-faint);height:50px;vertical-align:middle}.modal-dialog [role=document] table td strong,.modal-dialog [role=document] table th,main table td strong,main table th{color:var(--token-color-foreground-faint)}.modal-dialog [role=document] table a,.tomography-graph .tick text,main table a{color:var(--token-color-foreground-strong)}.modal-dialog [role=document] table,main table{width:100%;border-collapse:collapse}table.dom-recycling tr{display:flex}table.dom-recycling tr>*{flex:1 1 auto;display:inline-flex;align-items:center}.modal-dialog [role=document] table th.actions input,main table th.actions input{display:none}.modal-dialog [role=document] table th.actions,main table th.actions{text-align:right}.modal-dialog [role=document] table td a,main table td a{display:block}.modal-dialog [role=document] table td.no-actions~.actions,main table td.no-actions~.actions{display:none}.modal-dialog [role=document] table td:not(.actions)>:only-child,main table td:not(.actions)>:only-child{overflow:hidden;text-overflow:ellipsis}.modal-dialog [role=document] table td:not(.actions)>*,main table td:not(.actions)>*{white-space:nowrap}.modal-dialog [role=document] table caption,main table caption{margin-bottom:.8em}.modal-dialog [role=document] table th,main table th{padding:.6em 0}.modal-dialog [role=document] table td a,.modal-dialog [role=document] table td:not(.actions),.modal-dialog [role=document] table th:not(.actions),main table td a,main table td:not(.actions),main table th:not(.actions){padding-right:.9em}.modal-dialog [role=document] table tbody td em,main table tbody td em{display:block;font-style:normal;font-weight:var(--token-typography-font-weight-regular);color:var(--token-color-foreground-faint)}table.has-actions tr>.actions,table.with-details tr>.actions{width:60px!important;overflow:visible}table.has-actions tr>.actions>[type=checkbox]+label,table.with-details tr>.actions>[type=checkbox]+label{position:absolute;right:5px}table.consul-metadata-list tbody tr{cursor:default}table.consul-metadata-list tbody tr:hover{box-shadow:none}.modal-dialog [role=document] table th span::after,main table th span::after{color:var(--token-color-foreground-faint);margin-left:4px}.modal-dialog [role=document] table tbody tr,main table tbody tr{cursor:pointer}.modal-dialog [role=document] table td:first-child,main table td:first-child{padding:0}.modal-dialog [role=document] table tbody tr:hover,main table tbody tr:hover{box-shadow:var(--token-elevation-high-box-shadow)}.modal-dialog [role=document] table td.folder::before,main table td.folder::before{background-color:var(--token-color-palette-neutral-300);margin-top:1px;margin-right:5px}@media (max-width:420px){.consul-intention-list tr>:nth-last-child(2),.modal-dialog [role=document] table tr>.actions,main table tr>.actions{display:none}}.voting-status-leader.consul-server-card .name{width:var(--tile-size,3rem);height:var(--tile-size,3rem)}.voting-status-leader.consul-server-card .name::before{display:block;content:"";width:100%;height:100%;border-radius:var(--decor-radius-250);border:var(--decor-border-100);background-image:linear-gradient(135deg,var(--token-color-consul-surface) 0,var(--token-color-consul-border) 100%);border-color:var(--token-color-border-faint)}.voting-status-leader.consul-server-card .name::after{content:"";position:absolute;top:calc(var(--tile-size,3rem)/ 4);left:calc(var(--tile-size,3rem)/ 4);--icon-name:icon-star-fill;--icon-size:icon-700;color:var(--token-color-consul-brand)}table.with-details td:only-child>div>label,table.with-details td>label{border-radius:var(--decor-radius-100);cursor:pointer;min-width:30px;min-height:30px;display:inline-flex;align-items:center;justify-content:center}table.with-details td:only-child>div>label:active,table.with-details td:only-child>div>label:focus,table.with-details td:only-child>div>label:hover,table.with-details td>label:active,table.with-details td>label:focus,table.with-details td>label:hover{background-color:var(--token-color-surface-strong)}table.dom-recycling tbody{top:33px!important;width:100%}table.dom-recycling caption~tbody{top:57px!important}table tr>:nth-last-child(2):first-child,table tr>:nth-last-child(2):first-child~*{width:50%}table tr>:nth-last-child(3):first-child,table tr>:nth-last-child(3):first-child~*{width:33.3333333333%}table tr>:nth-last-child(4):first-child,table tr>:nth-last-child(4):first-child~*{width:25%}table tr>:nth-last-child(5):first-child,table tr>:nth-last-child(5):first-child~*{width:20%}table.has-actions tr>:nth-last-child(2):first-child,table.has-actions tr>:nth-last-child(2):first-child~*{width:calc(100% - 60px)}table.has-actions tr>:nth-last-child(3):first-child,table.has-actions tr>:nth-last-child(3):first-child~*{width:calc(50% - 30px)}table.has-actions tr>:nth-last-child(4):first-child,table.has-actions tr>:nth-last-child(4):first-child~*{width:calc(33% - 20px)}table.has-actions tr>:nth-last-child(5):first-child,table.has-actions tr>:nth-last-child(5):first-child~*{width:calc(25% - 15px)}html[data-route^="dc.acls.policies"] [role=dialog] table tr>:not(last-child),html[data-route^="dc.acls.policies"] table tr>:not(last-child),html[data-route^="dc.acls.roles"] [role=dialog] table tr>:not(last-child),html[data-route^="dc.acls.roles"] main table.token-list tr>:not(last-child){width:120px}html[data-route^="dc.acls.policies"] table tr>:last-child,html[data-route^="dc.acls.roles"] [role=dialog] table tr>:last-child,html[data-route^="dc.acls.roles"] main table.token-list tr>:last-child{width:calc(100% - 240px)!important}table.with-details td:only-child{cursor:default;border:0}table.with-details td:only-child>div::before,table.with-details td:only-child>div>div,table.with-details td:only-child>div>label{background-color:var(--token-color-surface-primary)}table.with-details td:only-child>div>label::before{transform:rotate(180deg)}table.with-details td:only-child>div::before{background:var(--token-color-surface-interactive-active);content:"";display:block;height:1px;position:absolute;bottom:-20px;left:10px;width:calc(100% - 20px)}table.with-details tr>.actions{position:relative}table.with-details td:only-child>div>label,table.with-details td>label{pointer-events:auto;position:absolute;top:8px}table.with-details td:only-child>div>label span,table.with-details td>label span{display:none}table.with-details td>label{right:2px}table.with-details tr:nth-child(even) td{height:auto;position:relative;display:table-cell}table.with-details tr:nth-child(even) td>*{display:none}table.with-details td:only-child>div>label{right:11px}table.with-details tr:nth-child(even) td>input:checked+*{display:block}table.with-details td:only-child{overflow:visible;width:100%}table.with-details td:only-child>div{border:1px solid var(--token-color-palette-neutral-300);border-radius:var(--decor-radius-100);box-shadow:var(--token-surface-high-box-shadow);margin-bottom:20px;position:relative;left:-10px;right:-10px;width:calc(100% + 20px);margin-top:-51px;pointer-events:none;padding:10px}table.with-details td:only-child>div::after{content:"";display:block;clear:both}table.with-details td:only-child>div>div{pointer-events:auto;margin-top:36px}.consul-auth-method-binding-list dl,.consul-auth-method-view dl,.consul-auth-method-view section dl{display:flex;flex-wrap:wrap}.consul-auth-method-binding-list dl dd,.consul-auth-method-binding-list dl dt,.consul-auth-method-view dl dd,.consul-auth-method-view dl dt{padding:12px 0;margin:0;border-top:1px solid!important}.consul-auth-method-binding-list dl dt,.consul-auth-method-view dl dt{width:20%;font-weight:var(--token-typography-font-weight-bold)}.consul-auth-method-binding-list dl dd,.consul-auth-method-view dl dd{margin-left:auto;width:80%;display:flex}.consul-auth-method-binding-list dl dd>ul li,.consul-auth-method-view dl dd>ul li{display:flex}.consul-auth-method-binding-list dl dd>ul li:not(:last-of-type),.consul-auth-method-view dl dd>ul li:not(:last-of-type){padding-bottom:12px}.consul-auth-method-binding-list dl dt.check+dd,.consul-auth-method-view dl dt.check+dd{padding-top:16px}.consul-auth-method-binding-list dl>dd:last-of-type,.consul-auth-method-binding-list dl>dt:last-of-type,.consul-auth-method-view dl>dd:last-of-type,.consul-auth-method-view dl>dt:last-of-type{border-bottom:1px solid!important;border-color:var(--token-color-palette-neutral-300)!important}.consul-auth-method-binding-list dl dd,.consul-auth-method-binding-list dl dt,.consul-auth-method-view dl dd,.consul-auth-method-view dl dt{border-color:var(--token-color-palette-neutral-300)!important;color:var(--token-color-hashicorp-brand)!important}.consul-auth-method-binding-list dl dd .copy-button button::before,.consul-auth-method-view dl dd .copy-button button::before{background-color:var(--token-color-hashicorp-brand)}.consul-auth-method-binding-list dl dt.type+dd span::before,.consul-auth-method-view dl dt.type+dd span::before{margin-left:4px;background-color:var(--token-color-foreground-faint)}.tooltip-panel dt{cursor:pointer}.tooltip-panel dd>div::before{width:12px;height:12px;background-color:var(--token-color-surface-primary);border-top:1px solid var(--token-color-palette-neutral-300);border-right:1px solid var(--token-color-palette-neutral-300);transform:rotate(-45deg);position:absolute;left:16px;top:-7px}.tooltip-panel,.tooltip-panel dt{display:flex;flex-direction:column}.tooltip-panel dd>div.menu-panel{top:auto;overflow:visible}.tooltip-panel dd{display:none;position:relative;z-index:1;padding-top:10px;margin-bottom:-10px}.tooltip-panel:hover dd{display:block}.tooltip-panel dd>div{width:250px}.app-view>header .title{display:grid;grid-template-columns:1fr auto;grid-template-areas:"title actions";position:relative;z-index:5;padding-bottom:1.4em}.app-view>div form:not(.filter-bar) fieldset{border-bottom:var(--decor-border-200)}.app-view>header h1>em{color:var(--token-color-foreground-faint)}.app-view>header dd>a{color:var(--token-color-hashicorp-brand)}.app-view>div div>dl>dd{color:var(--token-color-foreground-disabled)}.app-view>div form:not(.filter-bar) fieldset,.app-view>header .title{border-color:var(--token-color-surface-interactive-active)}.app-view>header .title .title-left-container{grid-area:title;display:flex;flex-wrap:wrap;align-items:center;white-space:normal}.app-view>header .title .title-left-container>:first-child{flex-basis:100%}.app-view>header .title .title-left-container>:not(:first-child){margin-right:8px}.app-view>header .actions{grid-area:actions;align-self:end;display:flex;align-items:flex-start;margin-left:auto;margin-top:9px}.app-view>div form:not(.filter-bar) fieldset{padding-bottom:.3em;margin-bottom:2em}[for=toolbar-toggle]{background-position:0 4px;display:inline-block;width:26px;height:26px;cursor:pointer;color:var(--token-color-foreground-action)}#toolbar-toggle{display:none}@media (max-width:849px){.app-view>header .actions{margin-top:9px}}@media (min-width:996px){[for=toolbar-toggle]{display:none}}@media (max-width:995px){.app-view>header h1{display:inline-block}html[data-route$="dc.services.instance.show"] h1{display:block}#toolbar-toggle+*{display:none}#toolbar-toggle:checked+*{display:flex}}.brand-loader{position:absolute;top:50%;margin-top:-26px;left:50%}.app .notifications{position:fixed;z-index:100;bottom:2rem;left:1.5rem;pointer-events:none}.app .notifications .app-notification>*{min-width:400px}.app .notifications .app-notification{transition-property:opacity;width:-moz-fit-content;width:fit-content;max-width:80%;pointer-events:auto}.hashicorp-consul .consul-side-nav li.consul-disabled-nav{width:100%;min-height:var(--token-side-nav-body-list-item-height);padding:var(--token-side-nav-body-list-item-padding-vertical) var(--token-side-nav-body-list-item-padding-horizontal);color:var(--token-color-foreground-disabled)}.hashicorp-consul .consul-side-nav li.consul-side-nav__selector .consul-side-nav__selector-toggle{min-width:15.5rem}.hashicorp-consul .consul-side-nav li.consul-side-nav__selector .consul-side-nav__selector-toggle:disabled{color:var(--token-color-foreground-disabled);border-color:var(--token-color-border-primary)}.hashicorp-consul .consul-side-nav li.consul-side-nav__selector .consul-side-nav__selector-toggle:disabled:hover{background-color:transparent}.hashicorp-consul .consul-side-nav li.consul-side-nav__selector .hds-dropdown__content{min-width:15.5rem;max-height:500px}.hashicorp-consul .consul-side-nav .hds-side-nav__wrapper-body{overflow-y:unset;overflow-x:unset}.hashicorp-consul .consul-side-nav li.consul-side-nav__datacenter{display:flex;gap:.5rem;align-items:center;padding-left:.5rem}.hashicorp-consul .consul-side-nav .consul-side-nav__selector-group{margin-bottom:1.5rem}.hashicorp-consul .consul-side-nav .consul-datacenter-selector__dc-name{display:flex;align-items:center;gap:.5rem}.hashicorp-consul .consul-side-nav .consul-datacenter-selector__dc-name .consul-datacenter-selector__badges{display:flex;gap:.25rem}.hashicorp-consul .consul-side-nav .consul-side-nav__selector-title{margin-top:.5rem}.hashicorp-consul .consul-side-nav .consul-side-nav__selector-description{padding-top:.5rem}.disclosure-menu [aria-expanded]~*>div+ul,.menu-panel>div+ul,.more-popover-menu>[type=checkbox]+label+div>div+ul,.popover-menu>[type=checkbox]+label+div>div+ul,table.has-actions tr>.actions>[type=checkbox]+label+div>div+ul,table.with-details tr>.actions>[type=checkbox]+label+div>div+ul{border-top:var(--decor-border-100);border-color:var(--token-form--base-border-color-default)}.disclosure-menu [aria-expanded]~* [role=separator]:first-child:not(:empty),.menu-panel [role=separator]:first-child:not(:empty),.more-popover-menu>[type=checkbox]+label+div [role=separator]:first-child:not(:empty),.popover-menu>[type=checkbox]+label+div [role=separator]:first-child:not(:empty),table.has-actions tr>.actions>[type=checkbox]+label+div [role=separator]:first-child:not(:empty),table.with-details tr>.actions>[type=checkbox]+label+div [role=separator]:first-child:not(:empty){border:none}.disclosure-menu [aria-expanded]~*>ul>li,.menu-panel>ul>li,.more-popover-menu>[type=checkbox]+label+div>ul>li,.popover-menu>[type=checkbox]+label+div>ul>li,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li{list-style-type:none}.disclosure-menu [aria-expanded]~*>ul .informed-action,.menu-panel>ul .informed-action,.more-popover-menu>[type=checkbox]+label+div>ul .informed-action,.popover-menu>[type=checkbox]+label+div>ul .informed-action,table.has-actions tr>.actions>[type=checkbox]+label+div>ul .informed-action,table.with-details tr>.actions>[type=checkbox]+label+div>ul .informed-action{border:0!important}.disclosure-menu [aria-expanded]~*>div,.menu-panel>div,.more-popover-menu>[type=checkbox]+label+div>div,.popover-menu>[type=checkbox]+label+div>div,table.has-actions tr>.actions>[type=checkbox]+label+div>div,table.with-details tr>.actions>[type=checkbox]+label+div>div{padding:.625rem var(--padding-x);white-space:normal;max-width:-moz-fit-content;max-width:fit-content}@supports not ((max-width:-moz-fit-content) or (max-width:fit-content)){.disclosure-menu [aria-expanded]~*>div,.menu-panel>div,.more-popover-menu>[type=checkbox]+label+div>div,.popover-menu>[type=checkbox]+label+div>div,table.has-actions tr>.actions>[type=checkbox]+label+div>div,table.with-details tr>.actions>[type=checkbox]+label+div>div{max-width:200px}}.disclosure-menu [aria-expanded]~*>div::before,.menu-panel>div::before,.more-popover-menu>[type=checkbox]+label+div>div::before,.popover-menu>[type=checkbox]+label+div>div::before,table.has-actions tr>.actions>[type=checkbox]+label+div>div::before,table.with-details tr>.actions>[type=checkbox]+label+div>div::before{position:absolute;left:15px;top:calc(10px + .1em)}.disclosure-menu [aria-expanded]~*>ul>[role=treeitem]+*,.disclosure-menu [aria-expanded]~*>ul>li>[role=menuitem]+*,.disclosure-menu [aria-expanded]~*>ul>li>[role=option]+*,.menu-panel-deprecated>ul>li>div[role=menu],.menu-panel>ul>[role=treeitem]+*,.menu-panel>ul>li>[role=menuitem]+*,.menu-panel>ul>li>[role=option]+*,.more-popover-menu>[type=checkbox]+label+div>ul>[role=treeitem]+*,.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem]+*,.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=option]+*,.popover-menu>[type=checkbox]+label+div>ul>[role=treeitem]+*,.popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem]+*,.popover-menu>[type=checkbox]+label+div>ul>li>[role=option]+*,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem]+*,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem]+*,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]+*,table.with-details tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem]+*,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem]+*,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]+*{position:absolute;top:0;left:calc(100% + 10px)}.disclosure-menu [aria-expanded]~*>ul,.menu-panel>ul,.more-popover-menu>[type=checkbox]+label+div>ul,.popover-menu>[type=checkbox]+label+div>ul,table.has-actions tr>.actions>[type=checkbox]+label+div>ul,table.with-details tr>.actions>[type=checkbox]+label+div>ul{margin:0;padding:calc(var(--padding-y) - .625rem) 0;transition:transform 150ms}.disclosure-menu [aria-expanded]~*>ul,.disclosure-menu [aria-expanded]~*>ul>li,.disclosure-menu [aria-expanded]~*>ul>li>*,.menu-panel>ul,.menu-panel>ul>li,.menu-panel>ul>li>*,.more-popover-menu>[type=checkbox]+label+div>ul,.more-popover-menu>[type=checkbox]+label+div>ul>li,.more-popover-menu>[type=checkbox]+label+div>ul>li>*,.popover-menu>[type=checkbox]+label+div>ul,.popover-menu>[type=checkbox]+label+div>ul>li,.popover-menu>[type=checkbox]+label+div>ul>li>*,table.has-actions tr>.actions>[type=checkbox]+label+div>ul,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>*,table.with-details tr>.actions>[type=checkbox]+label+div>ul,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>*{width:100%}.disclosure-menu [aria-expanded]~*>ul>[role=treeitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=menuitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=option],.menu-panel>ul>[role=treeitem],.menu-panel>ul>li>[role=menuitem],.menu-panel>ul>li>[role=option],.more-popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=option],.popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=option],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=option],table.with-details tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]{display:flex}.disclosure-menu [aria-expanded]~*>ul>[role=treeitem]::after,.disclosure-menu [aria-expanded]~*>ul>li>[role=menuitem]::after,.disclosure-menu [aria-expanded]~*>ul>li>[role=option]::after,.menu-panel>ul>[role=treeitem]::after,.menu-panel>ul>li>[role=menuitem]::after,.menu-panel>ul>li>[role=option]::after,.more-popover-menu>[type=checkbox]+label+div>ul>[role=treeitem]::after,.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem]::after,.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=option]::after,.popover-menu>[type=checkbox]+label+div>ul>[role=treeitem]::after,.popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem]::after,.popover-menu>[type=checkbox]+label+div>ul>li>[role=option]::after,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem]::after,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem]::after,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]::after,table.with-details tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem]::after,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem]::after,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]::after{margin-left:auto;padding-right:var(--padding-x);transform:translate(calc(var(--padding-x)/ 2),0)}.disclosure-menu [aria-expanded]~* [role=separator],.menu-panel [role=separator],.more-popover-menu>[type=checkbox]+label+div [role=separator],.popover-menu>[type=checkbox]+label+div [role=separator],table.has-actions tr>.actions>[type=checkbox]+label+div [role=separator],table.with-details tr>.actions>[type=checkbox]+label+div [role=separator]{text-transform:uppercase;color:var(--token-color-foreground-faint);padding-top:.375rem}.disclosure-menu [aria-expanded]~* [role=separator]:not(:first-child),.menu-panel [role=separator]:not(:first-child),.more-popover-menu>[type=checkbox]+label+div [role=separator]:not(:first-child),.popover-menu>[type=checkbox]+label+div [role=separator]:not(:first-child),table.has-actions tr>.actions>[type=checkbox]+label+div [role=separator]:not(:first-child),table.with-details tr>.actions>[type=checkbox]+label+div [role=separator]:not(:first-child){margin-top:.275rem}.disclosure-menu [aria-expanded]~* [role=separator]:not(:empty),.menu-panel [role=separator]:not(:empty),.more-popover-menu>[type=checkbox]+label+div [role=separator]:not(:empty),.popover-menu>[type=checkbox]+label+div [role=separator]:not(:empty),table.has-actions tr>.actions>[type=checkbox]+label+div [role=separator]:not(:empty),table.with-details tr>.actions>[type=checkbox]+label+div [role=separator]:not(:empty){padding-left:var(--padding-x);padding-right:var(--padding-x);padding-bottom:.125rem}.disclosure-menu [aria-expanded]~.menu-panel-confirming,.menu-panel-confirming.menu-panel,.more-popover-menu>[type=checkbox]+label+div.menu-panel-confirming,.popover-menu>[type=checkbox]+label+div.menu-panel-confirming,table.has-actions tr>.actions>[type=checkbox]+label+div.menu-panel-confirming,table.with-details tr>.actions>[type=checkbox]+label+div.menu-panel-confirming{overflow:hidden}.disclosure-menu [aria-expanded]~.menu-panel-confirming>ul,.menu-panel-confirming.menu-panel>ul,.more-popover-menu>[type=checkbox]+label+div.menu-panel-confirming>ul,.popover-menu>[type=checkbox]+label+div.menu-panel-confirming>ul,table.has-actions tr>.actions>[type=checkbox]+label+div.menu-panel-confirming>ul,table.with-details tr>.actions>[type=checkbox]+label+div.menu-panel-confirming>ul{transform:translateX(calc(-100% - 10px))}.disclosure-menu [aria-expanded]~*,.menu-panel,.more-popover-menu>[type=checkbox]+label+div,.popover-menu>[type=checkbox]+label+div,table.has-actions tr>.actions>[type=checkbox]+label+div,table.with-details tr>.actions>[type=checkbox]+label+div{overflow:hidden}.menu-panel-deprecated{position:absolute;transition:max-height 150ms;transition:min-height 150ms,max-height 150ms;min-height:0}.menu-panel-deprecated [type=checkbox]{display:none}.menu-panel-deprecated:not(.confirmation) [type=checkbox]~*{transition:transform 150ms}.confirmation.menu-panel-deprecated [role=menu]{min-height:205px!important}.menu-panel-deprecated [type=checkbox]:checked~*{transform:translateX(calc(-100% - 10px));min-height:143px;max-height:143px}.menu-panel-deprecated [id$="-"]:first-child:checked~ul label[for$="-"] * [role=menu],.menu-panel-deprecated [id$="-"]:first-child:checked~ul>li>[role=menu]{display:block}.menu-panel-deprecated>ul>li>:not(div[role=menu]),.tippy-box{position:relative}.menu-panel-deprecated:not(.left){right:0!important;left:auto!important}.left.menu-panel-deprecated{left:0}.menu-panel-deprecated:not(.above){top:28px}.above.menu-panel-deprecated{bottom:42px}.consul-upstream-instance-list dl.local-bind-socket-mode dt::after{display:inline;content:var(--horizontal-kv-list-key-separator)}.consul-bucket-list,.consul-exposed-path-list>ul>li>.detail dl,.consul-instance-checks,.consul-lock-session-list dl,.consul-lock-session-list ul>li:not(:first-child)>.detail dl,.consul-upstream-instance-list dl,.consul-upstream-instance-list li>.detail dl,.list-collection>ul>li:not(:first-child)>.detail dl,.tag-list,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl,section[data-route="dc.show.license"] .validity dl,td.tags{display:inline-flex;flex-wrap:nowrap;align-items:center}.consul-bucket-list:empty,.consul-exposed-path-list>ul>li>.detail dl:empty,.consul-instance-checks:empty,.consul-lock-session-list dl:empty,.consul-lock-session-list ul>li:not(:first-child)>.detail dl:empty,.consul-upstream-instance-list dl:empty,.list-collection>ul>li:not(:first-child)>.detail dl:empty,.tag-list:empty,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:empty,section[data-route="dc.show.license"] .validity dl:empty,td.tags:empty{display:none}.consul-bucket-list>*>*,.consul-exposed-path-list>ul>li>.detail dl>*>*,.consul-instance-checks>*>*,.consul-lock-session-list dl>*>*,.consul-lock-session-list ul>li:not(:first-child)>.detail dl>*>*,.consul-upstream-instance-list dl>*>*,.consul-upstream-instance-list li>.detail dl>*>*,.list-collection>ul>li:not(:first-child)>.detail dl>*>*,.tag-list>*>*,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl>*>*,section[data-route="dc.show.license"] .validity dl>*>*,td.tags>*>*{display:inline-block}.consul-bucket-list>*,.consul-exposed-path-list>ul>li>.detail dl>*,.consul-instance-checks>*,.consul-lock-session-list dl>*,.consul-lock-session-list ul>li:not(:first-child)>.detail dl>*,.consul-upstream-instance-list dl>*,.consul-upstream-instance-list li>.detail dl>*,.list-collection>ul>li:not(:first-child)>.detail dl>*,.tag-list>*,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl>*,section[data-route="dc.show.license"] .validity dl>*,td.tags>*{white-space:nowrap}.consul-bucket-list>dd,.consul-exposed-path-list>ul>li>.detail dl>dd,.consul-instance-checks>dd,.consul-lock-session-list dl>dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl>dd,.consul-upstream-instance-list dl>dd,.consul-upstream-instance-list li>.detail dl>dd,.list-collection>ul>li:not(:first-child)>.detail dl>dd,.tag-list>dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl>dd,section[data-route="dc.show.license"] .validity dl>dd,td.tags>dd{flex-wrap:wrap}.consul-upstream-instance-list dl.local-bind-socket-mode dt{display:inline-flex;min-width:18px;overflow:hidden}.consul-lock-session-list .checks dd,.discovery-chain .resolver-card ol,.filter-bar,.filter-bar>div,.modal-dialog,.tag-list dd,td.tags dd{display:flex}.consul-bucket-list .consul-exposed-path-list>ul>li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-bucket-list .consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-bucket-list .consul-upstream-instance-list dl.local-bind-address dd+dt+dd,.consul-bucket-list .consul-upstream-instance-list dl.local-bind-socket-path dd+dt+dd,.consul-bucket-list .consul-upstream-instance-list li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-bucket-list .list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-bucket-list .tag-list:not([class]) dd+dt:not([class])+dd,.consul-bucket-list dd+dt,.consul-bucket-list td.tags:not([class]) dd+dt:not([class])+dd,.consul-bucket-list+.consul-bucket-list:not(:first-of-type),.consul-bucket-list+.consul-instance-checks:not(:first-of-type),.consul-bucket-list+.tag-list:not(:first-of-type),.consul-bucket-list+td.tags:not(:first-of-type),.consul-bucket-list:not([class]) .consul-exposed-path-list>ul>li>.detail dl dd+dt:not([class])+dd,.consul-bucket-list:not([class]) .consul-lock-session-list ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.consul-bucket-list:not([class]) .consul-upstream-instance-list li>.detail dl dd+dt:not([class])+dd,.consul-bucket-list:not([class]) .list-collection>ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.consul-bucket-list:not([class]) .tag-list dd+dt:not([class])+dd,.consul-bucket-list:not([class]) dd+dt:not([class])+dd,.consul-bucket-list:not([class]) td.tags dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail .consul-bucket-list+dl:not(:first-of-type),.consul-exposed-path-list>ul>li>.detail .consul-instance-checks+dl:not(:first-of-type),.consul-exposed-path-list>ul>li>.detail .consul-lock-session-list dl+dl:not(:first-of-type),.consul-exposed-path-list>ul>li>.detail .consul-upstream-instance-list dl+dl:not(:first-of-type),.consul-exposed-path-list>ul>li>.detail .consul-upstream-instance-list dl.local-bind-address dd+dt+dd,.consul-exposed-path-list>ul>li>.detail .consul-upstream-instance-list dl.local-bind-socket-path dd+dt+dd,.consul-exposed-path-list>ul>li>.detail .list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail .tag-list+dl:not(:first-of-type),.consul-exposed-path-list>ul>li>.detail dl .consul-bucket-list:not([class]) dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl .consul-instance-checks:not([class]) dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl .consul-lock-session-list dl:not([class]) dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl .consul-upstream-instance-list dl:not([class]) dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl .tag-list:not([class]) dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl dd+dt,.consul-exposed-path-list>ul>li>.detail dl section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl section[data-route="dc.show.license"] .validity dl:not([class]) dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl td.tags:not([class]) dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl+.consul-bucket-list:not(:first-of-type),.consul-exposed-path-list>ul>li>.detail dl+.consul-instance-checks:not(:first-of-type),.consul-exposed-path-list>ul>li>.detail dl+.tag-list:not(:first-of-type),.consul-exposed-path-list>ul>li>.detail dl+dl:not(:first-of-type),.consul-exposed-path-list>ul>li>.detail dl+td.tags:not(:first-of-type),.consul-exposed-path-list>ul>li>.detail dl:not([class]) .consul-bucket-list dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl:not([class]) .consul-instance-checks dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl:not([class]) .consul-lock-session-list dl dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl:not([class]) .consul-upstream-instance-list dl dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl:not([class]) .tag-list dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl:not([class]) section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl:not([class]) section[data-route="dc.show.license"] .validity dl dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl:not([class]) td.tags dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl+dl:not(:first-of-type),.consul-exposed-path-list>ul>li>.detail section[data-route="dc.show.license"] .validity dl+dl:not(:first-of-type),.consul-exposed-path-list>ul>li>.detail td.tags+dl:not(:first-of-type),.consul-instance-checks .consul-exposed-path-list>ul>li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-instance-checks .consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-instance-checks .consul-upstream-instance-list dl.local-bind-address dd+dt+dd,.consul-instance-checks .consul-upstream-instance-list dl.local-bind-socket-path dd+dt+dd,.consul-instance-checks .consul-upstream-instance-list li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-instance-checks .list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-instance-checks .tag-list:not([class]) dd+dt:not([class])+dd,.consul-instance-checks dd+dt,.consul-instance-checks td.tags:not([class]) dd+dt:not([class])+dd,.consul-instance-checks+.consul-bucket-list:not(:first-of-type),.consul-instance-checks+.consul-instance-checks:not(:first-of-type),.consul-instance-checks+.tag-list:not(:first-of-type),.consul-instance-checks+td.tags:not(:first-of-type),.consul-instance-checks:not([class]) .consul-exposed-path-list>ul>li>.detail dl dd+dt:not([class])+dd,.consul-instance-checks:not([class]) .consul-lock-session-list ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.consul-instance-checks:not([class]) .consul-upstream-instance-list li>.detail dl dd+dt:not([class])+dd,.consul-instance-checks:not([class]) .list-collection>ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.consul-instance-checks:not([class]) .tag-list dd+dt:not([class])+dd,.consul-instance-checks:not([class]) dd+dt:not([class])+dd,.consul-instance-checks:not([class]) td.tags dd+dt:not([class])+dd,.consul-lock-session-list .consul-bucket-list ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list .consul-bucket-list+dl:not(:first-of-type),.consul-lock-session-list .consul-bucket-list:not([class]) ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.consul-lock-session-list .consul-exposed-path-list>ul>li>.detail dl dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list .consul-exposed-path-list>ul>li>.detail dl+dl:not(:first-of-type),.consul-lock-session-list .consul-exposed-path-list>ul>li>.detail dl:not([class]) dl dd+dt:not([class])+dd,.consul-lock-session-list .consul-instance-checks ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list .consul-instance-checks+dl:not(:first-of-type),.consul-lock-session-list .consul-instance-checks:not([class]) ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.consul-lock-session-list .consul-upstream-instance-list dl li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list .consul-upstream-instance-list dl ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list .consul-upstream-instance-list dl+dl:not(:first-of-type),.consul-lock-session-list .consul-upstream-instance-list dl.local-bind-address dl dd+dt+dd,.consul-lock-session-list .consul-upstream-instance-list dl.local-bind-socket-path dl dd+dt+dd,.consul-lock-session-list .consul-upstream-instance-list dl:not([class]) li>.detail dl dd+dt:not([class])+dd,.consul-lock-session-list .consul-upstream-instance-list dl:not([class]) ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.consul-lock-session-list .consul-upstream-instance-list li>.detail dl dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list .consul-upstream-instance-list li>.detail dl+dl:not(:first-of-type),.consul-lock-session-list .consul-upstream-instance-list li>.detail dl:not([class]) dl dd+dt:not([class])+dd,.consul-lock-session-list .consul-upstream-instance-list ul>li:not(:first-child)>.detail dl dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list .consul-upstream-instance-list ul>li:not(:first-child)>.detail dl+dl:not(:first-of-type),.consul-lock-session-list .consul-upstream-instance-list ul>li:not(:first-child)>.detail dl.local-bind-address dd+dt+dd,.consul-lock-session-list .consul-upstream-instance-list ul>li:not(:first-child)>.detail dl.local-bind-socket-path dd+dt+dd,.consul-lock-session-list .consul-upstream-instance-list ul>li:not(:first-child)>.detail dl:not([class]) dl dd+dt:not([class])+dd,.consul-lock-session-list .list-collection>ul>li:not(:first-child)>.detail dl dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list .list-collection>ul>li:not(:first-child)>.detail dl+dl:not(:first-of-type),.consul-lock-session-list .list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dl dd+dt:not([class])+dd,.consul-lock-session-list .list-collection>ul>li:not(:first-child)>.detail ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list .tag-list dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list .tag-list ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list .tag-list+dl:not(:first-of-type),.consul-lock-session-list .tag-list:not([class]) dl dd+dt:not([class])+dd,.consul-lock-session-list .tag-list:not([class]) ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.consul-lock-session-list dl .consul-exposed-path-list>ul>li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list dl .consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list dl .consul-upstream-instance-list dl.local-bind-address dd+dt+dd,.consul-lock-session-list dl .consul-upstream-instance-list dl.local-bind-socket-path dd+dt+dd,.consul-lock-session-list dl .consul-upstream-instance-list li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list dl .list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list dl .tag-list:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list dl dd+dt,.consul-lock-session-list dl td.tags:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list dl ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list dl+.consul-bucket-list:not(:first-of-type),.consul-lock-session-list dl+.consul-instance-checks:not(:first-of-type),.consul-lock-session-list dl+.tag-list:not(:first-of-type),.consul-lock-session-list dl+dl:not(:first-of-type),.consul-lock-session-list dl+td.tags:not(:first-of-type),.consul-lock-session-list dl:not([class]) .consul-exposed-path-list>ul>li>.detail dl dd+dt:not([class])+dd,.consul-lock-session-list dl:not([class]) .consul-lock-session-list ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.consul-lock-session-list dl:not([class]) .consul-upstream-instance-list li>.detail dl dd+dt:not([class])+dd,.consul-lock-session-list dl:not([class]) .list-collection>ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.consul-lock-session-list dl:not([class]) .tag-list dd+dt:not([class])+dd,.consul-lock-session-list dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list dl:not([class]) td.tags dd+dt:not([class])+dd,.consul-lock-session-list dl:not([class]) ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.consul-lock-session-list section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl+dl:not(:first-of-type),.consul-lock-session-list section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.consul-lock-session-list section[data-route="dc.show.license"] .validity dl ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list section[data-route="dc.show.license"] .validity dl+dl:not(:first-of-type),.consul-lock-session-list section[data-route="dc.show.license"] .validity dl:not([class]) ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.consul-lock-session-list td.tags dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list td.tags ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list td.tags+dl:not(:first-of-type),.consul-lock-session-list td.tags:not([class]) dl dd+dt:not([class])+dd,.consul-lock-session-list td.tags:not([class]) ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail .consul-bucket-list+dl:not(:first-of-type),.consul-lock-session-list ul>li:not(:first-child)>.detail .consul-instance-checks+dl:not(:first-of-type),.consul-lock-session-list ul>li:not(:first-child)>.detail .consul-upstream-instance-list dl+dl:not(:first-of-type),.consul-lock-session-list ul>li:not(:first-child)>.detail .consul-upstream-instance-list dl.local-bind-address dd+dt+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail .consul-upstream-instance-list dl.local-bind-socket-path dd+dt+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail .list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail .tag-list+dl:not(:first-of-type),.consul-lock-session-list ul>li:not(:first-child)>.detail dl .consul-bucket-list:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl .consul-instance-checks:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl .consul-upstream-instance-list dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl .tag-list:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl dd+dt,.consul-lock-session-list ul>li:not(:first-child)>.detail dl dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl section[data-route="dc.show.license"] .validity dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl td.tags:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl+.consul-bucket-list:not(:first-of-type),.consul-lock-session-list ul>li:not(:first-child)>.detail dl+.consul-instance-checks:not(:first-of-type),.consul-lock-session-list ul>li:not(:first-child)>.detail dl+.tag-list:not(:first-of-type),.consul-lock-session-list ul>li:not(:first-child)>.detail dl+dl:not(:first-of-type),.consul-lock-session-list ul>li:not(:first-child)>.detail dl+td.tags:not(:first-of-type),.consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) .consul-bucket-list dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) .consul-instance-checks dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) .consul-upstream-instance-list dl dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) .tag-list dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) dl dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) section[data-route="dc.show.license"] .validity dl dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) td.tags dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl+dl:not(:first-of-type),.consul-lock-session-list ul>li:not(:first-child)>.detail section[data-route="dc.show.license"] .validity dl+dl:not(:first-of-type),.consul-lock-session-list ul>li:not(:first-child)>.detail td.tags+dl:not(:first-of-type),.consul-upstream-instance-list .consul-bucket-list li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list .consul-bucket-list+dl:not(:first-of-type),.consul-upstream-instance-list .consul-bucket-list:not([class]) li>.detail dl dd+dt:not([class])+dd,.consul-upstream-instance-list .consul-exposed-path-list>ul>li>.detail dl dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list .consul-exposed-path-list>ul>li>.detail dl+dl:not(:first-of-type),.consul-upstream-instance-list .consul-exposed-path-list>ul>li>.detail dl.local-bind-address dd+dt+dd,.consul-upstream-instance-list .consul-exposed-path-list>ul>li>.detail dl.local-bind-socket-path dd+dt+dd,.consul-upstream-instance-list .consul-exposed-path-list>ul>li>.detail dl:not([class]) dl dd+dt:not([class])+dd,.consul-upstream-instance-list .consul-instance-checks li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list .consul-instance-checks+dl:not(:first-of-type),.consul-upstream-instance-list .consul-instance-checks:not([class]) li>.detail dl dd+dt:not([class])+dd,.consul-upstream-instance-list .consul-lock-session-list dl li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list .consul-lock-session-list dl+dl:not(:first-of-type),.consul-upstream-instance-list .consul-lock-session-list dl:not([class]) li>.detail dl dd+dt:not([class])+dd,.consul-upstream-instance-list .consul-lock-session-list ul>li:not(:first-child)>.detail dl dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list .consul-lock-session-list ul>li:not(:first-child)>.detail dl+dl:not(:first-of-type),.consul-upstream-instance-list .consul-lock-session-list ul>li:not(:first-child)>.detail dl.local-bind-address dd+dt+dd,.consul-upstream-instance-list .consul-lock-session-list ul>li:not(:first-child)>.detail dl.local-bind-socket-path dd+dt+dd,.consul-upstream-instance-list .consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) dl dd+dt:not([class])+dd,.consul-upstream-instance-list .list-collection>ul>li:not(:first-child)>.detail dl dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list .list-collection>ul>li:not(:first-child)>.detail dl+dl:not(:first-of-type),.consul-upstream-instance-list .list-collection>ul>li:not(:first-child)>.detail dl.local-bind-address dd+dt+dd,.consul-upstream-instance-list .list-collection>ul>li:not(:first-child)>.detail dl.local-bind-socket-path dd+dt+dd,.consul-upstream-instance-list .list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dl dd+dt:not([class])+dd,.consul-upstream-instance-list .list-collection>ul>li:not(:first-child)>.detail li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list .tag-list dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list .tag-list li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list .tag-list+dl:not(:first-of-type),.consul-upstream-instance-list .tag-list:not([class]) dl dd+dt:not([class])+dd,.consul-upstream-instance-list .tag-list:not([class]) li>.detail dl dd+dt:not([class])+dd,.consul-upstream-instance-list dl .consul-exposed-path-list>ul>li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list dl .consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list dl .consul-upstream-instance-list li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list dl .list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list dl .tag-list:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list dl dd+dt,.consul-upstream-instance-list dl li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list dl td.tags:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list dl+.consul-bucket-list:not(:first-of-type),.consul-upstream-instance-list dl+.consul-instance-checks:not(:first-of-type),.consul-upstream-instance-list dl+.tag-list:not(:first-of-type),.consul-upstream-instance-list dl+dl:not(:first-of-type),.consul-upstream-instance-list dl+td.tags:not(:first-of-type),.consul-upstream-instance-list dl.local-bind-address .consul-bucket-list dd+dt+dd,.consul-upstream-instance-list dl.local-bind-address .consul-instance-checks dd+dt+dd,.consul-upstream-instance-list dl.local-bind-address .consul-lock-session-list dl dd+dt+dd,.consul-upstream-instance-list dl.local-bind-address .tag-list dd+dt+dd,.consul-upstream-instance-list dl.local-bind-address dd+dt+dd,.consul-upstream-instance-list dl.local-bind-address section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl dd+dt+dd,.consul-upstream-instance-list dl.local-bind-address section[data-route="dc.show.license"] .validity dl dd+dt+dd,.consul-upstream-instance-list dl.local-bind-address td.tags dd+dt+dd,.consul-upstream-instance-list dl.local-bind-socket-path .consul-bucket-list dd+dt+dd,.consul-upstream-instance-list dl.local-bind-socket-path .consul-instance-checks dd+dt+dd,.consul-upstream-instance-list dl.local-bind-socket-path .consul-lock-session-list dl dd+dt+dd,.consul-upstream-instance-list dl.local-bind-socket-path .tag-list dd+dt+dd,.consul-upstream-instance-list dl.local-bind-socket-path dd+dt+dd,.consul-upstream-instance-list dl.local-bind-socket-path section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl dd+dt+dd,.consul-upstream-instance-list dl.local-bind-socket-path section[data-route="dc.show.license"] .validity dl dd+dt+dd,.consul-upstream-instance-list dl.local-bind-socket-path td.tags dd+dt+dd,.consul-upstream-instance-list dl:not([class]) .consul-exposed-path-list>ul>li>.detail dl dd+dt:not([class])+dd,.consul-upstream-instance-list dl:not([class]) .consul-lock-session-list ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.consul-upstream-instance-list dl:not([class]) .consul-upstream-instance-list li>.detail dl dd+dt:not([class])+dd,.consul-upstream-instance-list dl:not([class]) .list-collection>ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.consul-upstream-instance-list dl:not([class]) .tag-list dd+dt:not([class])+dd,.consul-upstream-instance-list dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list dl:not([class]) li>.detail dl dd+dt:not([class])+dd,.consul-upstream-instance-list dl:not([class]) td.tags dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail .consul-bucket-list+dl:not(:first-of-type),.consul-upstream-instance-list li>.detail .consul-instance-checks+dl:not(:first-of-type),.consul-upstream-instance-list li>.detail .consul-lock-session-list dl+dl:not(:first-of-type),.consul-upstream-instance-list li>.detail .list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail .tag-list+dl:not(:first-of-type),.consul-upstream-instance-list li>.detail dl .consul-bucket-list:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail dl .consul-instance-checks:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail dl .consul-lock-session-list dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail dl .tag-list:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail dl dd+dt,.consul-upstream-instance-list li>.detail dl dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail dl section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail dl section[data-route="dc.show.license"] .validity dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail dl td.tags:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail dl+.consul-bucket-list:not(:first-of-type),.consul-upstream-instance-list li>.detail dl+.consul-instance-checks:not(:first-of-type),.consul-upstream-instance-list li>.detail dl+.tag-list:not(:first-of-type),.consul-upstream-instance-list li>.detail dl+dl:not(:first-of-type),.consul-upstream-instance-list li>.detail dl+td.tags:not(:first-of-type),.consul-upstream-instance-list li>.detail dl.local-bind-address dd+dt+dd,.consul-upstream-instance-list li>.detail dl.local-bind-socket-path dd+dt+dd,.consul-upstream-instance-list li>.detail dl:not([class]) .consul-bucket-list dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail dl:not([class]) .consul-instance-checks dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail dl:not([class]) .consul-lock-session-list dl dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail dl:not([class]) .tag-list dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail dl:not([class]) dl dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail dl:not([class]) section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail dl:not([class]) section[data-route="dc.show.license"] .validity dl dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail dl:not([class]) td.tags dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl+dl:not(:first-of-type),.consul-upstream-instance-list li>.detail section[data-route="dc.show.license"] .validity dl+dl:not(:first-of-type),.consul-upstream-instance-list li>.detail td.tags+dl:not(:first-of-type),.consul-upstream-instance-list section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl+dl:not(:first-of-type),.consul-upstream-instance-list section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) li>.detail dl dd+dt:not([class])+dd,.consul-upstream-instance-list section[data-route="dc.show.license"] .validity dl li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list section[data-route="dc.show.license"] .validity dl+dl:not(:first-of-type),.consul-upstream-instance-list section[data-route="dc.show.license"] .validity dl:not([class]) li>.detail dl dd+dt:not([class])+dd,.consul-upstream-instance-list td.tags dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list td.tags li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list td.tags+dl:not(:first-of-type),.consul-upstream-instance-list td.tags:not([class]) dl dd+dt:not([class])+dd,.consul-upstream-instance-list td.tags:not([class]) li>.detail dl dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail .consul-bucket-list+dl:not(:first-of-type),.list-collection>ul>li:not(:first-child)>.detail .consul-exposed-path-list>ul>li>.detail dl:not([class]) dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail .consul-instance-checks+dl:not(:first-of-type),.list-collection>ul>li:not(:first-child)>.detail .consul-lock-session-list dl+dl:not(:first-of-type),.list-collection>ul>li:not(:first-child)>.detail .consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail .consul-upstream-instance-list dl+dl:not(:first-of-type),.list-collection>ul>li:not(:first-child)>.detail .consul-upstream-instance-list dl.local-bind-address dd+dt+dd,.list-collection>ul>li:not(:first-child)>.detail .consul-upstream-instance-list dl.local-bind-socket-path dd+dt+dd,.list-collection>ul>li:not(:first-child)>.detail .consul-upstream-instance-list li>.detail dl:not([class]) dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail .tag-list+dl:not(:first-of-type),.list-collection>ul>li:not(:first-child)>.detail dl .consul-bucket-list:not([class]) dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl .consul-instance-checks:not([class]) dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl .consul-lock-session-list dl:not([class]) dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl .consul-upstream-instance-list dl:not([class]) dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl .tag-list:not([class]) dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl dd+dt,.list-collection>ul>li:not(:first-child)>.detail dl section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl section[data-route="dc.show.license"] .validity dl:not([class]) dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl td.tags:not([class]) dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl+.consul-bucket-list:not(:first-of-type),.list-collection>ul>li:not(:first-child)>.detail dl+.consul-instance-checks:not(:first-of-type),.list-collection>ul>li:not(:first-child)>.detail dl+.tag-list:not(:first-of-type),.list-collection>ul>li:not(:first-child)>.detail dl+dl:not(:first-of-type),.list-collection>ul>li:not(:first-child)>.detail dl+td.tags:not(:first-of-type),.list-collection>ul>li:not(:first-child)>.detail dl:not([class]) .consul-bucket-list dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl:not([class]) .consul-instance-checks dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl:not([class]) .consul-lock-session-list dl dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl:not([class]) .consul-upstream-instance-list dl dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl:not([class]) .tag-list dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl:not([class]) section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl:not([class]) section[data-route="dc.show.license"] .validity dl dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl:not([class]) td.tags dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl+dl:not(:first-of-type),.list-collection>ul>li:not(:first-child)>.detail section[data-route="dc.show.license"] .validity dl+dl:not(:first-of-type),.list-collection>ul>li:not(:first-child)>.detail td.tags+dl:not(:first-of-type),.tag-list .consul-bucket-list:not([class]) dd+dt:not([class])+dd,.tag-list .consul-exposed-path-list>ul>li>.detail dl:not([class]) dd+dt:not([class])+dd,.tag-list .consul-instance-checks:not([class]) dd+dt:not([class])+dd,.tag-list .consul-lock-session-list dl:not([class]) dd+dt:not([class])+dd,.tag-list .consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.tag-list .consul-upstream-instance-list dl.local-bind-address dd+dt+dd,.tag-list .consul-upstream-instance-list dl.local-bind-socket-path dd+dt+dd,.tag-list .consul-upstream-instance-list dl:not([class]) dd+dt:not([class])+dd,.tag-list .consul-upstream-instance-list li>.detail dl:not([class]) dd+dt:not([class])+dd,.tag-list .list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.tag-list dd+dt,.tag-list section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) dd+dt:not([class])+dd,.tag-list section[data-route="dc.show.license"] .validity dl:not([class]) dd+dt:not([class])+dd,.tag-list td.tags:not([class]) dd+dt:not([class])+dd,.tag-list+.consul-bucket-list:not(:first-of-type),.tag-list+.consul-instance-checks:not(:first-of-type),.tag-list+.tag-list:not(:first-of-type),.tag-list+td.tags:not(:first-of-type),.tag-list:not([class]) .consul-bucket-list dd+dt:not([class])+dd,.tag-list:not([class]) .consul-exposed-path-list>ul>li>.detail dl dd+dt:not([class])+dd,.tag-list:not([class]) .consul-instance-checks dd+dt:not([class])+dd,.tag-list:not([class]) .consul-lock-session-list dl dd+dt:not([class])+dd,.tag-list:not([class]) .consul-lock-session-list ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.tag-list:not([class]) .consul-upstream-instance-list dl dd+dt:not([class])+dd,.tag-list:not([class]) .consul-upstream-instance-list li>.detail dl dd+dt:not([class])+dd,.tag-list:not([class]) .list-collection>ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.tag-list:not([class]) dd+dt:not([class])+dd,.tag-list:not([class]) section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl dd+dt:not([class])+dd,.tag-list:not([class]) section[data-route="dc.show.license"] .validity dl dd+dt:not([class])+dd,.tag-list:not([class]) td.tags dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-bucket-list+dl:not(:first-of-type),section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-exposed-path-list>ul>li>.detail dl dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-exposed-path-list>ul>li>.detail dl+dl:not(:first-of-type),section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-exposed-path-list>ul>li>.detail dl:not([class]) dl dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-instance-checks+dl:not(:first-of-type),section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-lock-session-list dl ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-lock-session-list dl+dl:not(:first-of-type),section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-lock-session-list dl:not([class]) ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-lock-session-list ul>li:not(:first-child)>.detail dl dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-lock-session-list ul>li:not(:first-child)>.detail dl+dl:not(:first-of-type),section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) dl dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-upstream-instance-list dl li>.detail dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-upstream-instance-list dl+dl:not(:first-of-type),section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-upstream-instance-list dl.local-bind-address dl dd+dt+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-upstream-instance-list dl.local-bind-socket-path dl dd+dt+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-upstream-instance-list dl:not([class]) li>.detail dl dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-upstream-instance-list li>.detail dl dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-upstream-instance-list li>.detail dl+dl:not(:first-of-type),section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-upstream-instance-list li>.detail dl:not([class]) dl dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header .list-collection>ul>li:not(:first-child)>.detail dl dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header .list-collection>ul>li:not(:first-child)>.detail dl+dl:not(:first-of-type),section[data-route="dc.show.serverstatus"] .redundancy-zones section header .list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dl dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header .tag-list dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header .tag-list+dl:not(:first-of-type),section[data-route="dc.show.serverstatus"] .redundancy-zones section header .tag-list:not([class]) dl dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl .consul-exposed-path-list>ul>li>.detail dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl .consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl .consul-upstream-instance-list dl.local-bind-address dd+dt+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl .consul-upstream-instance-list dl.local-bind-socket-path dd+dt+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl .consul-upstream-instance-list li>.detail dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl .list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl .tag-list:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl dd+dt,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl td.tags:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl+.consul-bucket-list:not(:first-of-type),section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl+.consul-instance-checks:not(:first-of-type),section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl+.tag-list:not(:first-of-type),section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl+dl:not(:first-of-type),section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl+td.tags:not(:first-of-type),section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) .consul-exposed-path-list>ul>li>.detail dl dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) .consul-lock-session-list ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) .consul-upstream-instance-list li>.detail dl dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) .list-collection>ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) .tag-list dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) td.tags dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header td.tags dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header td.tags+dl:not(:first-of-type),section[data-route="dc.show.serverstatus"] .redundancy-zones section header td.tags:not([class]) dl dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section[data-route="dc.show.license"] .validity header dl+dl:not(:first-of-type),section[data-route="dc.show.serverstatus"] .redundancy-zones section[data-route="dc.show.license"] header .validity dl+dl:not(:first-of-type),section[data-route="dc.show.license"] .validity .consul-bucket-list+dl:not(:first-of-type),section[data-route="dc.show.license"] .validity .consul-exposed-path-list>ul>li>.detail dl dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity .consul-exposed-path-list>ul>li>.detail dl+dl:not(:first-of-type),section[data-route="dc.show.license"] .validity .consul-exposed-path-list>ul>li>.detail dl:not([class]) dl dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity .consul-instance-checks+dl:not(:first-of-type),section[data-route="dc.show.license"] .validity .consul-lock-session-list dl ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity .consul-lock-session-list dl+dl:not(:first-of-type),section[data-route="dc.show.license"] .validity .consul-lock-session-list dl:not([class]) ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity .consul-lock-session-list ul>li:not(:first-child)>.detail dl dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity .consul-lock-session-list ul>li:not(:first-child)>.detail dl+dl:not(:first-of-type),section[data-route="dc.show.license"] .validity .consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) dl dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity .consul-upstream-instance-list dl li>.detail dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity .consul-upstream-instance-list dl+dl:not(:first-of-type),section[data-route="dc.show.license"] .validity .consul-upstream-instance-list dl.local-bind-address dl dd+dt+dd,section[data-route="dc.show.license"] .validity .consul-upstream-instance-list dl.local-bind-socket-path dl dd+dt+dd,section[data-route="dc.show.license"] .validity .consul-upstream-instance-list dl:not([class]) li>.detail dl dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity .consul-upstream-instance-list li>.detail dl dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity .consul-upstream-instance-list li>.detail dl+dl:not(:first-of-type),section[data-route="dc.show.license"] .validity .consul-upstream-instance-list li>.detail dl:not([class]) dl dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity .list-collection>ul>li:not(:first-child)>.detail dl dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity .list-collection>ul>li:not(:first-child)>.detail dl+dl:not(:first-of-type),section[data-route="dc.show.license"] .validity .list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dl dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity .tag-list dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity .tag-list+dl:not(:first-of-type),section[data-route="dc.show.license"] .validity .tag-list:not([class]) dl dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity dl .consul-exposed-path-list>ul>li>.detail dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity dl .consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity dl .consul-upstream-instance-list dl.local-bind-address dd+dt+dd,section[data-route="dc.show.license"] .validity dl .consul-upstream-instance-list dl.local-bind-socket-path dd+dt+dd,section[data-route="dc.show.license"] .validity dl .consul-upstream-instance-list li>.detail dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity dl .list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity dl .tag-list:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity dl dd+dt,section[data-route="dc.show.license"] .validity dl td.tags:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity dl+.consul-bucket-list:not(:first-of-type),section[data-route="dc.show.license"] .validity dl+.consul-instance-checks:not(:first-of-type),section[data-route="dc.show.license"] .validity dl+.tag-list:not(:first-of-type),section[data-route="dc.show.license"] .validity dl+dl:not(:first-of-type),section[data-route="dc.show.license"] .validity dl+td.tags:not(:first-of-type),section[data-route="dc.show.license"] .validity dl:not([class]) .consul-exposed-path-list>ul>li>.detail dl dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity dl:not([class]) .consul-lock-session-list ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity dl:not([class]) .consul-upstream-instance-list li>.detail dl dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity dl:not([class]) .list-collection>ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity dl:not([class]) .tag-list dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity dl:not([class]) td.tags dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity td.tags dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity td.tags+dl:not(:first-of-type),section[data-route="dc.show.license"] .validity td.tags:not([class]) dl dd+dt:not([class])+dd,td.tags .consul-bucket-list:not([class]) dd+dt:not([class])+dd,td.tags .consul-exposed-path-list>ul>li>.detail dl:not([class]) dd+dt:not([class])+dd,td.tags .consul-instance-checks:not([class]) dd+dt:not([class])+dd,td.tags .consul-lock-session-list dl:not([class]) dd+dt:not([class])+dd,td.tags .consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,td.tags .consul-upstream-instance-list dl.local-bind-address dd+dt+dd,td.tags .consul-upstream-instance-list dl.local-bind-socket-path dd+dt+dd,td.tags .consul-upstream-instance-list dl:not([class]) dd+dt:not([class])+dd,td.tags .consul-upstream-instance-list li>.detail dl:not([class]) dd+dt:not([class])+dd,td.tags .list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,td.tags .tag-list:not([class]) dd+dt:not([class])+dd,td.tags dd+dt,td.tags section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) dd+dt:not([class])+dd,td.tags section[data-route="dc.show.license"] .validity dl:not([class]) dd+dt:not([class])+dd,td.tags+.consul-bucket-list:not(:first-of-type),td.tags+.consul-instance-checks:not(:first-of-type),td.tags+.tag-list:not(:first-of-type),td.tags+td.tags:not(:first-of-type),td.tags:not([class]) .consul-bucket-list dd+dt:not([class])+dd,td.tags:not([class]) .consul-exposed-path-list>ul>li>.detail dl dd+dt:not([class])+dd,td.tags:not([class]) .consul-instance-checks dd+dt:not([class])+dd,td.tags:not([class]) .consul-lock-session-list dl dd+dt:not([class])+dd,td.tags:not([class]) .consul-lock-session-list ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,td.tags:not([class]) .consul-upstream-instance-list dl dd+dt:not([class])+dd,td.tags:not([class]) .consul-upstream-instance-list li>.detail dl dd+dt:not([class])+dd,td.tags:not([class]) .list-collection>ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,td.tags:not([class]) .tag-list dd+dt:not([class])+dd,td.tags:not([class]) dd+dt:not([class])+dd,td.tags:not([class]) section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl dd+dt:not([class])+dd,td.tags:not([class]) section[data-route="dc.show.license"] .validity dl dd+dt:not([class])+dd{margin-left:var(--horizontal-kv-list-separator-width)}.consul-bucket-list dt+dd,.consul-exposed-path-list>ul>li>.detail dl dt+dd,.consul-instance-checks dt+dd,.consul-lock-session-list dl dt+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl dt+dd,.consul-upstream-instance-list dl dt+dd,.consul-upstream-instance-list li>.detail dl dt+dd,.list-collection>ul>li:not(:first-child)>.detail dl dt+dd,.tag-list dt+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl dt+dd,section[data-route="dc.show.license"] .validity dl dt+dd,td.tags dt+dd{margin-left:4px}.consul-bucket-list:not([class]) dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl:not([class]) dt:not([class])+dd,.consul-instance-checks:not([class]) dt:not([class])+dd,.consul-lock-session-list dl:not([class]) dt:not([class])+dd,.consul-upstream-instance-list dl.local-bind-address dt+dd,.consul-upstream-instance-list dl.local-bind-socket-path dt+dd,.consul-upstream-instance-list dl:not([class]) dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dt:not([class])+dd,.tag-list:not([class]) dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) dt:not([class])+dd,section[data-route="dc.show.license"] .validity dl:not([class]) dt:not([class])+dd,td.tags:not([class]) dt:not([class])+dd{margin-left:0!important}.consul-lock-session-list .checks dd>:not(:last-child)::after,.discovery-chain .resolver-card ol>:not(:last-child)::after,.tag-list dd>:not(:last-child)::after,td.tags dd>:not(:last-child)::after{display:inline;content:var(--csv-list-separator);vertical-align:initial;margin-right:.3em}.freetext-filter_label::after,.tippy-box .tippy-arrow::before{content:"";position:absolute}.tag-list dt::before,td.tags dt::before{color:inherit;color:var(--token-color-foreground-faint)}.consul-exposed-path-list>ul>li>.detail dl>dt>*,.consul-lock-session-list ul>li:not(:first-child)>.detail dl>dt>*,.consul-upstream-instance-list li>.detail dl>dt>*,.list-collection>ul>li:not(:first-child)>.detail dl>dt>*{display:none}.consul-exposed-path-list>ul>li>.detail dl.passing dt::before,.consul-exposed-path-list>ul>li>.header .passing dd::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.passing dt::before,.consul-lock-session-list ul>li:not(:first-child)>.header .passing dd::before,.consul-upstream-instance-list li>.detail dl.passing dt::before,.consul-upstream-instance-list li>.header .passing dd::before,.list-collection>ul>li:not(:first-child)>.detail dl.passing dt::before,.list-collection>ul>li:not(:first-child)>.header .passing dd::before{color:var(--token-color-foreground-success)}.consul-exposed-path-list>ul>li>.detail dl.warning dt::before,.consul-exposed-path-list>ul>li>.header .warning dd::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.warning dt::before,.consul-lock-session-list ul>li:not(:first-child)>.header .warning dd::before,.consul-upstream-instance-list li>.detail dl.warning dt::before,.consul-upstream-instance-list li>.header .warning dd::before,.list-collection>ul>li:not(:first-child)>.detail dl.warning dt::before,.list-collection>ul>li:not(:first-child)>.header .warning dd::before{color:var(--token-color-foreground-warning)}.consul-exposed-path-list>ul>li>.detail dl.critical dt::before,.consul-exposed-path-list>ul>li>.header .critical dd::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.critical dt::before,.consul-lock-session-list ul>li:not(:first-child)>.header .critical dd::before,.consul-upstream-instance-list li>.detail dl.critical dt::before,.consul-upstream-instance-list li>.header .critical dd::before,.list-collection>ul>li:not(:first-child)>.detail dl.critical dt::before,.list-collection>ul>li:not(:first-child)>.header .critical dd::before{color:var(--token-color-foreground-critical)}.consul-exposed-path-list>ul>li>.detail dl.empty dt::before,.consul-exposed-path-list>ul>li>.detail dl.unknown dt::before,.consul-exposed-path-list>ul>li>.header .empty dd::before,.consul-exposed-path-list>ul>li>.header .unknown dd::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.empty dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.unknown dt::before,.consul-lock-session-list ul>li:not(:first-child)>.header .empty dd::before,.consul-lock-session-list ul>li:not(:first-child)>.header .unknown dd::before,.consul-upstream-instance-list li>.detail dl.empty dt::before,.consul-upstream-instance-list li>.detail dl.unknown dt::before,.consul-upstream-instance-list li>.header .empty dd::before,.consul-upstream-instance-list li>.header .unknown dd::before,.list-collection>ul>li:not(:first-child)>.detail dl.empty dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.unknown dt::before,.list-collection>ul>li:not(:first-child)>.header .empty dd::before,.list-collection>ul>li:not(:first-child)>.header .unknown dd::before{color:var(--token-color-foreground-faint)}.consul-exposed-path-list>ul>li>.header [rel=me] dd::before,.consul-lock-session-list ul>li:not(:first-child)>.header [rel=me] dd::before,.consul-upstream-instance-list li>.header [rel=me] dd::before,.list-collection>ul>li:not(:first-child)>.header [rel=me] dd::before{color:var(--token-color-foreground-action)}.app-view>div form:not(.filter-bar) [role=radiogroup] label>em>code,.modal-dialog [role=document] .type-password>em>code,.modal-dialog [role=document] .type-select>em>code,.modal-dialog [role=document] .type-text>em>code,.modal-dialog [role=document] [role=radiogroup] label>em>code,.modal-dialog [role=document] form button+em>code,.modal-dialog [role=document] p code,.oidc-select label>em>code,.type-toggle>em>code,main .type-password>em>code,main .type-select>em>code,main .type-text>em>code,main form button+em>code,main p code{border:1px solid;color:var(--token-color-consul-brand);background-color:var(--token-color-surface-strong);border-color:var(--token-color-surface-interactive-active);display:inline-block;padding:0 4px}[data-tippy-root]{max-width:calc(100vw - 10px)}.tippy-box{outline:0;background-color:var(--token-color-surface-primary);border-radius:var(--decor-radius-100)}[data-animation=fade][data-state=hidden].tippy-box{opacity:0}[data-inertia][data-state=visible].tippy-box{transition-timing-function:cubic-bezier(.54,1.5,.38,1.11)}.tippy-box .tippy-arrow{--size:5px}[data-placement^=top].tippy-box>.tippy-arrow{bottom:0}[data-placement^=top].tippy-box>.tippy-arrow::before{left:0;bottom:calc(0px - var(--size));transform-origin:center top}[data-placement^=bottom].tippy-box>.tippy-arrow{top:0}[data-placement^=bottom].tippy-box>.tippy-arrow::before{left:0;top:calc(0px - var(--size));transform-origin:center bottom}[data-placement^=left].tippy-box>.tippy-arrow{right:0}[data-placement^=left].tippy-box>.tippy-arrow::before{right:calc(0px - var(--size));transform-origin:center left}[data-placement^=right].tippy-box>.tippy-arrow{left:0}[data-placement^=right].tippy-box>.tippy-arrow::before{left:calc(0px - var(--size));transform-origin:center right}[data-theme~=square-tail] .tippy-arrow{--size:18px;left:calc(0px - var(--size)/ 2)!important}[data-theme~=square-tail] .tippy-arrow::before{background-color:var(--token-color-surface-primary);width:calc(1px + var(--size));height:calc(1px + var(--size));border:var(--decor-border-100);border-color:var(--token-color-palette-neutral-300)}[data-theme~=square-tail] .tippy-arrow::after{position:absolute;left:1px}[data-theme~=square-tail][data-placement^=top]{bottom:-10px}[data-theme~=square-tail][data-placement^=top] .informed-action{border-bottom-left-radius:0!important}[data-theme~=square-tail][data-placement^=top] .tippy-arrow::before{border-bottom-left-radius:var(--decor-radius-200);border-bottom-right-radius:var(--decor-radius-200);border-top:0!important}[data-theme~=square-tail][data-placement^=top] .tippy-arrow::after{bottom:calc(0px - var(--size))}[data-theme~=square-tail][data-placement^=bottom]{top:-10px}[data-theme~=square-tail][data-placement^=bottom] .informed-action{border-top-left-radius:0!important}[data-theme~=square-tail][data-placement^=bottom] .tippy-arrow::before{border-top-left-radius:var(--decor-radius-200);border-top-right-radius:var(--decor-radius-200);border-bottom:0!important}[data-theme~=square-tail][data-placement^=bottom] .tippy-arrow::after{top:calc(0px - var(--size))}.tippy-box[data-theme~=tooltip] .tippy-content{padding:12px;max-width:224px;position:relative;z-index:1}.tippy-box[data-theme~=tooltip]{background-color:var(--token-color-foreground-faint)}.tippy-box[data-theme~=tooltip] .tippy-arrow{--size:5px;color:var(--token-color-foreground-faint);width:calc(var(--size) * 2);height:calc(var(--size) * 2)}.tippy-box[data-theme~=tooltip] .tippy-arrow::before{border-color:transparent;border-style:solid}.tippy-box[data-theme~=tooltip][data-placement^=top]>.tippy-arrow::before{border-width:var(--size) var(--size) 0;border-top-color:initial}.tippy-box[data-theme~=tooltip][data-placement^=bottom]>.tippy-arrow::before{border-width:0 var(--size) var(--size);border-bottom-color:initial}.tippy-box[data-theme~=tooltip][data-placement^=left]>.tippy-arrow::before{border-width:var(--size) 0 var(--size) var(--size);border-left-color:initial}.tippy-box[data-theme~=tooltip][data-placement^=right]>.tippy-arrow::before{border-width:var(--size) var(--size) var(--size) 0;border-right-color:initial}.warning.modal-dialog header{background-color:var(--token-color-vault-gradient-faint-start);border-color:var(--token-color-vault-brand);color:var(--token-color-vault-foreground)}.warning.modal-dialog header::before{color:var(--token-color-vault-brand);float:left;margin-top:2px;margin-right:3px}.modal-dialog>div:first-child{background-color:var(--token-color-surface-interactive);opacity:.9}.modal-dialog [role=document]>footer,.modal-dialog [role=document]>header,.modal-dialog-body{border-color:var(--token-color-palette-neutral-300)}.modal-dialog-body{border-style:solid;border-left-width:1px;border-right-width:1px}.modal-layer{height:0}.modal-dialog [role=document] table{height:150px!important}.modal-dialog [role=document] tbody{max-height:100px}.modal-dialog table{min-height:149px}.modal-dialog,.modal-dialog>div:first-child{position:fixed;top:0;right:0;bottom:0;left:0}.modal-dialog{z-index:500;align-items:center;justify-content:center;height:100%}[aria-hidden=true].modal-dialog{display:none}.modal-dialog [role=document]{background-color:var(--token-color-surface-primary);margin:auto;z-index:2;max-width:855px;position:relative}.modal-dialog [role=document]>*{padding-left:15px;padding-right:15px}.modal-dialog [role=document]>div{overflow-y:auto;max-height:80vh;padding:20px 23px}.modal-dialog [role=document]>footer,.modal-dialog [role=document]>header{border-width:1px;padding-top:12px;padding-bottom:10px}.modal-dialog [role=document]>header{position:relative}.modal-dialog [role=document]>header button{float:right;margin-top:-3px}.list-collection>ul{border-top:1px solid;border-color:var(--token-color-surface-interactive-active)}.list-collection>button{cursor:pointer;background-color:var(--token-color-surface-strong);color:var(--token-color-foreground-action);width:100%;padding:15px}.list-collection-scroll-virtual,.list-collection>ul>li{position:relative}.list-collection-scroll-virtual{height:500px}.filter-bar{background-color:var(--token-color-foreground-high-contrast);border-bottom:var(--decor-border-100);border-color:var(--token-color-surface-interactive-active);padding:4px 8px}.filter-bar .filters .popover-menu>[type=checkbox]:checked+label button,.filter-bar .sort .popover-menu>[type=checkbox]:checked+label button{color:var(--token-color-foreground-action);background-color:var(--token-color-foreground-high-contrast)}.filter-bar .sort{margin-left:auto}.filter-bar .popover-select{position:relative;z-index:3}.filter-bar .popover-menu>[type=checkbox]+label button{padding-left:1.5rem!important;padding-right:1.5rem!important}.filter-bar .popover-menu [role=menuitem]{justify-content:normal!important}@media (max-width:1379px){.filter-bar,.filter-bar>div{flex-wrap:wrap}.filter-bar .search{position:relative;z-index:4;width:100%;margin-bottom:.3rem}}@media (max-width:995px){.filter-bar .filters,.filter-bar .sort{display:none}}html[data-route^="dc.acls.index"] .filter-bar{color:inherit}.freetext-filter{border:var(--decor-border-100);border-radius:var(--decor-radius-100);background-color:var(--token-color-surface-primary);border-color:var(--token-color-surface-interactive-active);color:var(--token-color-foreground-disabled)}.freetext-filter:hover,.freetext-filter:hover *{border-color:var(--token-color-foreground-disabled)}.freetext-filter_input::-moz-placeholder{cursor:inherit;color:inherit;border-color:inherit}.freetext-filter *,.freetext-filter_input::placeholder{cursor:inherit;color:inherit;border-color:inherit}.freetext-filter_input{-webkit-appearance:none;border:none}.freetext-filter_label::after{visibility:visible;--icon-name:icon-search;top:50%;left:50%;width:16px;height:16px;margin-left:-8px;margin-top:-8px}.freetext-filter .popover-menu{background-color:var(--token-color-surface-strong);color:var(--token-color-foreground-primary);border-left:1px solid;border-color:inherit}.freetext-filter .popover-menu>[type=checkbox]:checked+label button{background-color:var(--token-color-surface-interactive-active)}.freetext-filter{--height:2.2rem;display:flex;position:relative;height:var(--height);width:100%}.freetext-filter_input,.freetext-filter_label{height:100%}.freetext-filter_input{padding:8px 10px;padding-left:var(--height);min-width:12.7rem;width:100%}.freetext-filter_label{visibility:hidden;position:absolute;z-index:1;width:var(--height)}.informed-action{border-radius:var(--decor-radius-200);border:var(--decor-border-100);border-color:var(--token-color-palette-neutral-300);background-color:var(--token-color-surface-primary);min-width:190px}.informed-action>div{border-top-left-radius:var(--decor-radius-200);border-top-right-radius:var(--decor-radius-200);cursor:default;padding:1rem}.informed-action p{color:var(--token-color-hashicorp-brand)}.informed-action>ul>li>:focus,.informed-action>ul>li>:hover{background-color:var(--token-color-surface-strong)}.info.informed-action header{color:var(--token-color-foreground-action-active)}.info.informed-action header::before{background-color:var(--token-color-foreground-action);margin-right:5px}.info.informed-action>div{background-color:var(--token-color-surface-action)}.dangerous.informed-action header{color:var(--token-color-palette-red-400)}.dangerous.informed-action header::before{background-color:var(--token-color-foreground-critical)}.dangerous.informed-action>div{background-color:var(--token-color-surface-critical)}.warning.informed-action header{color:var(--token-color-foreground-warning-on-surface)}.warning.informed-action header::before{background-color:var(--token-color-vault-brand);margin-right:5px}.warning.informed-action>div{background-color:var(--token-color-vault-gradient-faint-start)}.copyable-code::after,.tab-nav li:not(.selected)>:active,.tab-nav li:not(.selected)>:focus,.tab-nav li:not(.selected)>:hover{background-color:var(--token-color-surface-strong)}.informed-action>ul>.action>*{color:var(--token-color-foreground-action)}.documentation.informed-action{min-width:270px}.informed-action header::before{float:left;margin-right:5px}.informed-action>ul{list-style:none;display:flex;margin:0;padding:4px}.informed-action>ul>li{width:50%}.informed-action>ul>li>*{width:100%}.tab-nav ul{list-style-type:none;display:inline-flex;align-items:center;position:relative;padding:0;margin:0}.tab-nav li>:not(:disabled){cursor:pointer}.tab-nav{border-bottom:var(--decor-border-100)}.animatable.tab-nav ul::after,.tab-nav li>*{border-bottom:var(--decor-border-300)}.tab-nav{border-color:var(--token-color-surface-interactive-active);clear:both;overflow:auto}.tab-nav li>*{white-space:nowrap;text-decoration:none;transition-property:background-color,border-color;border-color:transparent;color:var(--token-color-foreground-faint);display:inline-block;padding:16px 13px}.tab-nav li:not(.selected)>:focus,.tab-nav li:not(.selected)>:hover{border-color:var(--token-color-palette-neutral-300)}.animatable.tab-nav .selected a{border-color:transparent!important}.animatable.tab-nav ul::after{position:absolute;bottom:0;height:0;border-top:0;width:calc(var(--selected-width,0) * 1px);transform:translate(calc(var(--selected-left,0) * 1px),0);transition-property:transform,width}.search-bar-status{border-bottom:var(--decor-border-100);border-bottom-color:var(--token-color-surface-interactive-active);padding:.5rem 0 .5rem .5rem}.search-bar-status li:not(.remove-all) button::before{color:var(--token-color-foreground-faint);margin-top:1px;margin-right:.2rem}.search-bar-status dt::after{content:":";padding-right:.3rem}.search-bar-status>dl>dt{float:left}.search-bar-status dt{white-space:nowrap}.search-bar-status li{display:inline-flex}.search-bar-status li:not(:last-child){margin-right:.3rem;margin-bottom:.3rem}.search-bar-status li:not(.remove-all){border:var(--decor-border-100);border-color:var(--token-color-surface-interactive-active);color:var(--token-color-foreground-faint);padding:0 .2rem}.search-bar-status li:not(.remove-all) dl{display:flex}.search-bar-status li:not(.remove-all) button{cursor:pointer;padding:0}.copyable-code{display:flex;align-items:flex-start;position:relative;width:100%;padding:8px 14px 3px;border:var(--decor-border-100);border-color:var(--token-color-surface-interactive-active);border-radius:var(--decor-radius-200)}.copyable-code.obfuscated{padding-left:4px}.copyable-code::after{position:absolute;top:0;right:0;width:40px;height:100%;display:block;content:""}.copyable-code .copy-button{position:absolute;top:0;right:0;z-index:1}.copyable-code .copy-button button{width:40px;height:40px}.copyable-code .copy-button button:empty::after{display:none}.copyable-code button[aria-expanded]{margin-top:1px;margin-right:4px;cursor:pointer}.copyable-code button[aria-expanded]::before{content:"";--icon-size:icon-000;--icon-color:var(--token-color-foreground-faint)}.copyable-code button[aria-expanded=true]::before{--icon-name:icon-eye-off}.copyable-code button[aria-expanded=false]::before{--icon-name:icon-eye}.copyable-code pre{padding-right:30px}.copyable-code code{display:inline-block;overflow:hidden;text-overflow:ellipsis;width:100%}.copyable-code hr{width:calc(100% - 80px);margin:8px 0 13px;border:3px dashed var(--token-color-palette-neutral-300);background-color:var(--token-color-surface-primary)}.consul-loader circle{fill:var(--token-color-consul-gradient-faint-stop);animation:loader-animation 1.5s infinite ease-in-out;transform-origin:50% 50%}.consul-loader g:nth-last-child(2) circle{animation-delay:.2s}.consul-loader g:nth-last-child(3) circle{animation-delay:.3s}.consul-loader g:nth-last-child(4) circle{animation-delay:.4s}.consul-loader g:nth-last-child(5) circle{animation-delay:.5s}@keyframes loader-animation{0%,100%{transform:scale3D(1,1,1)}33%{transform:scale3D(0,0,1)}}.consul-loader{display:flex;align-items:center;justify-content:center;height:100%;position:absolute;width:100%;top:0;margin-top:0!important}.tomography-graph .background{fill:var(--token-color-surface-strong)}.tomography-graph .axis{fill:none;stroke:var(--token-color-palette-neutral-300);stroke-dasharray:4 4}.tomography-graph .border{fill:none;stroke:var(--token-color-palette-neutral-300)}.tomography-graph .point{stroke:var(--token-color-foreground-disabled);fill:var(--token-color-consul-foreground)}.tomography-graph .lines rect{fill:var(--token-color-consul-foreground);stroke:transparent;stroke-width:5px}.tomography-graph .lines rect:hover{fill:var(--token-color-palette-neutral-300);height:3px;y:-1px}.tomography-graph .tick line{stroke:var(--token-color-palette-neutral-300)}.tomography-graph .tick text{text-anchor:start}.discovery-chain .resolver-card,.discovery-chain .route-card,.discovery-chain .splitter-card,.discovery-chain path{transition-duration:.1s;transition-timing-function:linear;cursor:pointer}.discovery-chain path{transition-property:stroke;fill:none;stroke:var(--token-color-foreground-disabled);stroke-width:2;vector-effect:non-scaling-stroke}#downstream-lines svg circle,#upstream-lines svg circle,.discovery-chain circle{fill:var(--token-color-surface-primary)}.discovery-chain .resolver-card,.discovery-chain .resolver-card a,.discovery-chain .route-card,.discovery-chain .route-card a,.discovery-chain .splitter-card,.discovery-chain .splitter-card a{color:var(--token-color-foreground-strong)!important}.discovery-chain path:focus,.discovery-chain path:hover{stroke:var(--token-color-foreground-strong)}.discovery-chain .resolvers,.discovery-chain .routes,.discovery-chain .splitters{border-radius:var(--decor-radius-100);border:1px solid;border-color:var(--token-color-surface-interactive-active);background-color:var(--token-color-surface-strong);pointer-events:none}.discovery-chain .resolver-card,.discovery-chain .resolvers>header span,.discovery-chain .route-card,.discovery-chain .routes>header span,.discovery-chain .splitter-card,.discovery-chain .splitters>header span{pointer-events:all}.discovery-chain .resolvers>header>*,.discovery-chain .routes>header>*,.discovery-chain .splitters>header>*{text-transform:uppercase}.discovery-chain .resolvers>header span::after,.discovery-chain .routes>header span::after,.discovery-chain .splitters>header span::after{width:1.2em;height:1.2em;opacity:.6}.discovery-chain .resolver-card,.discovery-chain .route-card,.discovery-chain .splitter-card{transition-property:opacity background-color border-color;margin-top:0!important}.discovery-chain [id*=":"]:not(path):hover{opacity:1;background-color:var(--token-color-surface-primary);border-color:var(--token-color-foreground-faint)}.discovery-chain .route-card header:not(.short) dd{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.discovery-chain .route-card section header>*{visibility:hidden}.discovery-chain .route-card .match-headers header ::before{content:"H"}.discovery-chain .route-card .match-queryparams header>::before{content:"Q"}.discovery-chain .resolver-card dt::before{content:"";--icon-size:icon-999}.discovery-chain .resolver-card dl.failover dt::before{--icon-name:icon-cloud-cross}.discovery-chain .resolver-card dl.redirect dt::before{--icon-name:icon-redirect}.discovery-chain circle{stroke-width:2;stroke:var(--token-color-foreground-disabled)}.discovery-chain{position:relative;display:flex;justify-content:space-between}.discovery-chain svg{position:absolute}.discovery-chain .resolvers,.discovery-chain .routes,.discovery-chain .splitters{padding:10px 1%;width:32%}.discovery-chain .resolvers>header,.discovery-chain .routes>header,.discovery-chain .splitters>header{height:18px}.discovery-chain .resolvers>header span,.discovery-chain .routes>header span,.discovery-chain .splitters>header span{position:relative;z-index:1;margin-left:2px}.discovery-chain .resolvers [role=group],.discovery-chain .routes [role=group],.discovery-chain .splitters [role=group]{position:relative;z-index:1;display:flex;flex-direction:column;justify-content:space-around;height:100%}.discovery-chain .resolver-card dl,.discovery-chain .route-card dl,.discovery-chain .splitter-card dl{margin:0;float:none}.discovery-chain .resolver-card,.discovery-chain .route-card,.discovery-chain .splitter-card{margin-bottom:20px}.discovery-chain .route-card header.short dl{display:flex}.discovery-chain .route-card header.short dt::after{content:" ";display:inline-block}.discovery-chain .route-card>header ul{float:right;margin-top:-2px}.discovery-chain .route-card>header ul li{margin-left:5px}.discovery-chain .route-card section{display:flex}.discovery-chain .route-card section header{display:block;width:19px;margin-right:14px}.discovery-chain .resolver-card a{display:block}.discovery-chain .resolver-card dl{display:flex;flex-wrap:wrap;margin-top:5px}.discovery-chain .resolver-card dt{font-size:0;margin-right:6px;margin-top:1px;width:23px;height:20px}.discovery-chain .resolver-card ol{display:flex;flex-wrap:wrap;list-style-type:none}.discovery-chain .route-card,.discovery-chain .splitter-card{position:relative}.discovery-chain .route-card::before,.discovery-chain .splitter-card::before{background-color:var(--token-color-surface-primary);border-radius:var(--decor-radius-full);border:2px solid;border-color:var(--token-color-foreground-disabled);position:absolute;z-index:1;right:-5px;top:50%;margin-top:-5px;width:10px;height:10px}.discovery-chain .resolver-inlets,.discovery-chain .splitter-inlets{width:10px;height:100%;z-index:1}.discovery-chain .splitter-inlets{left:50%;margin-left:calc(-15% - 3px)}.discovery-chain .resolver-inlets{right:calc(31% - 7px)}.consul-bucket-list dd:not(:last-child)::after{display:inline-block;content:"/";margin:0 6px 0 3px}.consul-bucket-list .service+dd,.consul-bucket-list dd+dt{margin-left:0!important}.consul-upstream-instance-list dl.local-bind-socket-mode dt{text-transform:lowercase;font-weight:var(--token-typography-font-weight-semibold)}.consul-health-check-list .health-check-output::before{min-width:20px;min-height:20px;margin-right:15px}@media (max-width:650px){.consul-health-check-list .health-check-output::before{min-width:18px;min-height:18px;margin-right:8px}}.consul-health-check-list .health-check-output dd em{background-color:var(--token-color-surface-strong);cursor:default;font-style:normal;margin-top:-2px;margin-left:.5em}.consul-health-check-list .passing.health-check-output::before{color:var(--token-color-foreground-success)}.consul-health-check-list .warning.health-check-output::before{color:var(--token-color-foreground-warning)}.consul-health-check-list .critical.health-check-output::before{color:var(--token-color-foreground-critical)}.consul-health-check-list .health-check-output,.consul-health-check-list .health-check-output pre{border-radius:var(--decor-radius-100)}.consul-health-check-list .health-check-output dd:first-of-type{color:var(--token-color-foreground-disabled)}.consul-health-check-list .health-check-output pre{background-color:var(--token-color-surface-strong);color:var(--token-color-foreground-faint)}.consul-health-check-list .health-check-output{border-width:1px 1px 1px 4px;color:var(--token-color-foreground-strong);border-color:var(--token-color-surface-interactive-active);border-style:solid;display:flex;padding:20px 24px 20px 16px}.consul-health-check-list .passing.health-check-output{border-left-color:var(--token-color-foreground-success)}.consul-health-check-list .warning.health-check-output{border-left-color:var(--token-color-vault-brand)}.consul-health-check-list .critical.health-check-output{border-left-color:var(--token-color-foreground-critical)}.consul-health-check-list .health-check-output:not(:last-child){margin-bottom:24px}.consul-health-check-list .health-check-output dl:last-of-type,.consul-health-check-list .health-check-output header{width:100%}.consul-health-check-list .health-check-output header{margin-bottom:.9em}.consul-health-check-list .health-check-output>div{flex:1 1 auto;width:calc(100% - 26px);display:flex;flex-wrap:wrap;justify-content:space-between}.consul-health-check-list .health-check-output dl{min-width:110px}.consul-health-check-list .health-check-output dl>*{display:block;width:auto;position:static;padding-left:0}.consul-health-check-list .health-check-output dt{margin-bottom:0}.consul-health-check-list .health-check-output dd{position:relative}.consul-health-check-list .health-check-output dl:nth-last-of-type(2){width:50%}.consul-health-check-list .health-check-output dl:last-of-type{margin-top:1em;margin-bottom:0}.consul-health-check-list .health-check-output dl:last-of-type dt{margin-bottom:.3em}.consul-health-check-list .health-check-output pre{padding:12px 40px 12px 12px;white-space:pre-wrap;position:relative}.consul-health-check-list .health-check-output pre code{word-wrap:break-word}.consul-health-check-list .health-check-output .copy-button{position:absolute;right:.5em;top:.7em}@media (max-width:650px){.consul-health-check-list .health-check-output{padding:15px 19px 15px 14px}.consul-health-check-list .health-check-output::before{margin-right:8px}.consul-health-check-list .health-check-output dl:nth-last-of-type(2){width:100%}.consul-health-check-list .health-check-output dl:not(:last-of-type){margin-right:0}}.consul-instance-checks.passing dt::before{color:var(--token-color-foreground-success)}.consul-instance-checks.warning dt::before{color:var(--token-color-foreground-warning)}.consul-instance-checks.critical dt::before{color:var(--token-color-foreground-critical)}.consul-instance-checks.empty dt::before{color:var(--token-color-foreground-faint)}.consul-exposed-path-list>ul{border-top:1px solid var(--token-color-surface-interactive-active)}.consul-external-source::before,.consul-kind::before{--icon-size:icon-300}.consul-intention-list td.intent- strong::before,.consul-intention-list td.intent-allow strong::before,.consul-intention-list td.intent-deny strong::before,.consul-intention-permission-list .intent-allow::before,.consul-intention-permission-list .intent-deny::before,.consul-intention-search-bar .value- span::before,.consul-intention-search-bar .value-allow span::before,.consul-intention-search-bar .value-deny span::before{margin-right:5px}.consul-intention-list td.intent- strong,.consul-intention-list td.intent-allow strong,.consul-intention-list td.intent-deny strong,.consul-intention-permission-list .intent-allow,.consul-intention-permission-list .intent-deny,.consul-intention-search-bar .value- span,.consul-intention-search-bar .value-allow span,.consul-intention-search-bar .value-deny span{font-weight:var(--token-typography-font-weight-regular);font-size:var(--token-typography-body-200-font-size);display:inline-block}.consul-intention-list td.intent-allow strong,.consul-intention-permission-list .intent-allow,.consul-intention-search-bar .value-allow span{color:var(--token-color-foreground-success-on-surface);background-color:var(--token-color-border-success)}.consul-intention-list td.intent-deny strong,.consul-intention-permission-list .intent-deny,.consul-intention-search-bar .value-deny span{color:var(--token-color-foreground-critical-on-surface);background-color:var(--token-color-border-critical)}.consul-intention-list td.permissions{color:var(--token-color-foreground-action)}.consul-intention-list em{--word-spacing:0.25rem}.consul-intention-list em span::before,.consul-intention-list em span:first-child{margin-right:var(--word-spacing)}.consul-intention-list em span:last-child{margin-left:var(--word-spacing)}.consul-intention-list td{height:59px}.consul-intention-list tr>:nth-child(1){width:calc(30% - 50px)}.consul-intention-list tr>:nth-child(2){width:120px}.consul-intention-list tr>:nth-child(3){width:calc(30% - 50px)}.consul-intention-list tr>:nth-child(4){width:calc(40% - 240px)}.consul-intention-list tr>:nth-child(5){width:160px}.consul-intention-list tr>:last-child{width:60px}.consul-intention-list .menu-panel.confirmation{width:200px}@media (max-width:849px){.consul-intention-list tr>:not(.source):not(.destination):not(.intent){display:none}}.consul-intention-action-warn-modal .modal-dialog-window{max-width:450px}.consul-intention-fieldsets [role=radiogroup]{overflow:visible!important;display:grid;grid-gap:12px;grid-template-columns:repeat(auto-fit,minmax(270px,auto))}.consul-intention-fieldsets .radio-card header>*{display:inline}.consul-intention-fieldsets .permissions>button{float:right}.consul-intention-permission-modal [role=dialog]{width:100%}.consul-intention-permission-list dl.permission-methods dt::before{content:"M"}.consul-intention-permission-list dl.permission-path dt::before{content:"P"}.consul-intention-permission-header-list dt::before,.consul-intention-permission-list dl.permission-header dt::before{content:"H"}.consul-intention-permission-list .detail>div{display:flex;width:100%}.consul-intention-permission-list strong{margin-right:8px}.consul-intention-permission-form h2{border-top:1px solid var(--token-color-foreground-action);padding-top:1.4em;margin-top:.2em;margin-bottom:.6em}.consul-intention-permission-form .consul-intention-permission-header-form{margin-top:10px}.consul-intention-permission-form .consul-intention-permission-header-form fieldset>div,.consul-intention-permission-form fieldset:nth-child(2)>div{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));grid-gap:12px}.consul-intention-permission-form fieldset:nth-child(2)>div label:last-child{grid-column:span 2}.consul-intention-permission-form .ember-basic-dropdown-trigger{padding:5px}.consul-intention-permission-form .checkbox-group{flex-direction:column}.consul-intention-permission-header-list{max-height:200px;overflow:auto}.consul-lock-session-list button{margin-right:var(--horizontal-padding)}.consul-lock-session-form{overflow:hidden}.consul-server-list ul{display:grid;grid-template-columns:repeat(4,minmax(215px,25%));gap:12px}.consul-server-list a:hover div{--tone-border:var(--token-color-foreground-faint)}.consul-server-card .name+dd{color:var(--token-color-hashicorp-brand);animation-name:typo-truncate}.voting-status-non-voter.consul-server-card .health-status+dd{background-color:var(--token-color-surface-strong);color:var(--token-color-foreground-faint)}.consul-server-card:not(.voting-status-non-voter) .health-status.healthy+dd{background-color:var(--token-color-surface-success);color:var(--token-color-palette-green-400)}.consul-server-card:not(.voting-status-non-voter) .health-status:not(.healthy)+dd{background-color:var(--token-color-surface-critical);color:var(--token-color-foreground-critical)}.consul-server-card .health-status+dd::before{--icon-size:icon-000;content:""}.consul-server-card .health-status.healthy+dd::before{--icon-name:icon-check}.consul-server-card .health-status:not(.healthy)+dd::before{--icon-name:icon-x}.consul-server-card{position:relative;overflow:hidden;--padding-x:24px;--padding-y:24px;padding:var(--padding-y) var(--padding-x);--tile-size:3rem}.consul-auth-method-binding-list h2,.consul-auth-method-view section h2{padding-bottom:12px}.voting-status-leader.consul-server-card .name{position:absolute!important}.consul-server-card dd:not(:last-of-type){margin-bottom:calc(var(--padding-y)/ 2)}.voting-status-leader.consul-server-card dd{margin-left:calc(var(--tile-size) + 1rem)}.consul-auth-method-list ul .locality::before{margin-right:4px}.consul-auth-method-view{margin-bottom:32px}.consul-auth-method-view section{width:100%;position:relative;overflow-y:auto}.consul-auth-method-view section table thead td{color:var(--token-color-foreground-faint)}.consul-auth-method-view section table tbody td{color:var(--token-color-hashicorp-brand)}.consul-auth-method-view section table tbody tr{cursor:default}.consul-auth-method-view section table tbody tr:hover{box-shadow:none}.consul-auth-method-view section dt{width:30%}.consul-auth-method-view section dd{width:70%}.consul-auth-method-binding-list p{margin-bottom:4px!important}.consul-auth-method-binding-list code{background-color:var(--token-color-surface-strong);padding:0 12px}.consul-auth-method-nspace-list thead td{color:var(--token-color-foreground-faint)!important}.consul-auth-method-nspace-list tbody td{color:var(--token-color-hashicorp-brand)}.consul-auth-method-nspace-list tbody tr{cursor:default}.consul-auth-method-nspace-list tbody tr:hover{box-shadow:none}.role-selector [name="role[state]"],.role-selector [name="role[state]"]+*{display:none}.role-selector [name="role[state]"]:checked+*{display:block}.topology-notices button{color:var(--token-color-foreground-action);float:right;margin-top:16px;margin-bottom:32px}#metrics-container .link a,.topology-container{color:var(--token-color-foreground-faint)}#downstream-container .topology-metrics-card:not(:last-child),#upstream-column #upstream-container:not(:last-child),#upstream-container .topology-metrics-card:not(:last-child){margin-bottom:8px}#downstream-container,#metrics-container,#upstream-container{border-radius:var(--decor-radius-100);border:1px solid;border-color:var(--token-color-surface-interactive-active)}#downstream-container,#upstream-container{background-color:var(--token-color-surface-strong);padding:12px}#downstream-container>div:first-child{display:inline-flex}#downstream-container>div:first-child span::before{background-color:var(--token-color-foreground-faint)}#metrics-container div:first-child{background-color:var(--token-color-surface-primary);padding:12px;border:none}#metrics-container .link{background-color:var(--token-color-surface-strong);padding:18px}#metrics-container .link a:hover{color:var(--token-color-foreground-action)}#downstream-lines svg path,#upstream-lines svg path{fill:transparent}#downstream-lines svg .allow-arrow,#upstream-lines svg .allow-arrow{fill:var(--token-color-palette-neutral-300);stroke-linejoin:round}#downstream-lines svg .allow-arrow,#downstream-lines svg .allow-dot,#downstream-lines svg path,#upstream-lines svg .allow-arrow,#upstream-lines svg .allow-dot,#upstream-lines svg path{stroke:var(--token-color-palette-neutral-300);stroke-width:2}#downstream-lines svg path[data-permission=empty],#downstream-lines svg path[data-permission=not-defined],#upstream-lines svg path[data-permission=empty],#upstream-lines svg path[data-permission=not-defined]{stroke-dasharray:4}#downstream-lines svg path[data-permission=deny],#upstream-lines svg path[data-permission=deny]{stroke:var(--token-color-foreground-critical)}#downstream-lines svg .deny-dot,#upstream-lines svg .deny-dot{stroke:var(--token-color-foreground-critical);stroke-width:2}#downstream-lines svg .deny-arrow,#upstream-lines svg .deny-arrow{fill:var(--token-color-foreground-critical);stroke:var(--token-color-foreground-critical);stroke-linejoin:round}.topology-notices{display:flow-root}.topology-container{display:grid;height:100%;align-items:start;grid-template-columns:2fr 1fr 2fr 1fr 2fr;grid-template-rows:50px 1fr 50px;grid-template-areas:"down-cards down-lines . up-lines up-cards" "down-cards down-lines metrics up-lines up-cards" "down-cards down-lines . up-lines up-cards"}#downstream-container{grid-area:down-cards}#downstream-lines{grid-area:down-lines;margin-left:-20px}#upstream-lines{grid-area:up-lines;margin-right:-20px}#upstream-column{grid-area:up-cards}#downstream-lines,#upstream-lines{position:relative}#metrics-container{grid-area:metrics}#metrics-container .link a::before{background-color:var(--token-color-foreground-faint);margin-right:4px}#downstream-container .topology-metrics-card,#upstream-container .topology-metrics-card{display:block;color:var(--token-color-foreground-faint);overflow:hidden;background-color:var(--token-color-surface-primary);border-radius:var(--decor-radius-100);border:1px solid;border-color:var(--token-color-surface-interactive-active)}#downstream-container .topology-metrics-card p,#upstream-container .topology-metrics-card p{padding:12px 12px 0;margin-bottom:0!important}#downstream-container .topology-metrics-card p.empty,#upstream-container .topology-metrics-card p.empty{padding:12px!important}#downstream-container .topology-metrics-card div dl,#upstream-container .topology-metrics-card div dl{display:inline-flex;margin-right:8px}#downstream-container .topology-metrics-card div dd,#upstream-container .topology-metrics-card div dd{color:var(--token-color-foreground-faint)}#downstream-container .topology-metrics-card div span,#upstream-container .topology-metrics-card div span{margin-right:8px}#downstream-container .topology-metrics-card div dt::before,#downstream-container .topology-metrics-card div span::before,#upstream-container .topology-metrics-card div dt::before,#upstream-container .topology-metrics-card div span::before{margin-right:4px}#downstream-container .topology-metrics-card div .health dt::before,#downstream-container .topology-metrics-card div .nspace dt::before,#upstream-container .topology-metrics-card div .health dt::before,#upstream-container .topology-metrics-card div .nspace dt::before{margin-top:2px}#downstream-container .topology-metrics-card div .health dt::before,#downstream-container .topology-metrics-card div .nspace dt::before,#downstream-container .topology-metrics-card div .partition dt::before,#upstream-container .topology-metrics-card div .health dt::before,#upstream-container .topology-metrics-card div .nspace dt::before,#upstream-container .topology-metrics-card div .partition dt::before{--icon-color:var(--token-color-foreground-faint)}#downstream-container .topology-metrics-card div .passing::before,#upstream-container .topology-metrics-card div .passing::before{--icon-color:var(--token-color-foreground-success)}#downstream-container .topology-metrics-card div .warning::before,#upstream-container .topology-metrics-card div .warning::before{--icon-color:var(--token-color-foreground-warning)}#downstream-container .topology-metrics-card div .critical::before,#upstream-container .topology-metrics-card div .critical::before{--icon-color:var(--token-color-foreground-critical)}#downstream-container .topology-metrics-card div .empty::before,#upstream-container .topology-metrics-card div .empty::before{--icon-color:var(--token-color-foreground-faint)}#downstream-container .topology-metrics-card .details,#upstream-container .topology-metrics-card .details{padding:0 12px 12px}#downstream-container .topology-metrics-card .details>:not(:last-child),#upstream-container .topology-metrics-card .details>:not(:last-child){padding-bottom:6px}#downstream-container .topology-metrics-card .details .group,#upstream-container .topology-metrics-card .details .group{display:grid;grid-template-columns:20px 1fr;grid-template-rows:repeat(2,1fr);grid-template-areas:"partition partition" "union namespace"}#downstream-container .topology-metrics-card .details .group span,#upstream-container .topology-metrics-card .details .group span{display:inline-block;grid-area:union;padding-left:7px;margin-right:0}#downstream-container .topology-metrics-card .details .group span::before,#upstream-container .topology-metrics-card .details .group span::before{margin-right:0;--icon-color:var(--token-color-foreground-faint)}#downstream-container .topology-metrics-card .details .group dl:first-child,#upstream-container .topology-metrics-card .details .group dl:first-child{grid-area:partition;padding-bottom:6px}#downstream-container .topology-metrics-card .details .group dl:nth-child(2),#upstream-container .topology-metrics-card .details .group dl:nth-child(2){grid-area:namespace}.topology-metrics-source-type{margin:6px 0 6px 12px;display:table}.topology-metrics-popover>button{position:absolute;transform:translate(-50%,-50%);background-color:var(--token-color-surface-primary);padding:1px}.topology-metrics-popover>button:hover{cursor:pointer}.topology-metrics-popover>button:disabled,html[data-route^="dc.nodes.show.metadata"] table tr{cursor:default}.topology-metrics-popover>button:active,.topology-metrics-popover>button:focus{outline:0}.topology-metrics-popover.deny .informed-action header::before{display:none}.topology-metrics-popover.deny .tippy-arrow::after,.topology-metrics-popover.deny>button::before{--icon-color:var(--token-color-foreground-critical)}.topology-metrics-popover.not-defined .tippy-arrow::after,.topology-metrics-popover.not-defined>button::before{--icon-color:var(--token-color-vault-brand)}#metrics-container .sparkline-wrapper svg path{stroke-width:0}#metrics-container .sparkline-wrapper .tooltip{padding:0 0 10px;border:1px solid var(--token-color-palette-neutral-300);background:#fff;border-radius:2px;box-sizing:border-box;box-shadow:var(--token-elevation-higher-box-shadow)}#metrics-container .sparkline-wrapper .tooltip .sparkline-time{padding:8px 10px;color:#000;border-bottom:1px solid var(--token-color-surface-interactive-active);margin-bottom:4px;text-align:center}#metrics-container .sparkline-wrapper .tooltip .sparkline-tt-legend,#metrics-container .sparkline-wrapper .tooltip .sparkline-tt-sum{border:0;padding:3px 10px 0}#metrics-container .sparkline-wrapper .tooltip .sparkline-tt-sum{border-top:1px solid var(--token-color-surface-interactive-active);margin-top:4px;padding:8px 10px 0}#metrics-container .sparkline-wrapper .tooltip .sparkline-tt-legend-color{width:12px;height:12px;border-radius:2px;margin:0 5px 0 0;padding:0}#metrics-container .sparkline-wrapper .tooltip .sparkline-tt-legend-value,#metrics-container .sparkline-wrapper .tooltip .sparkline-tt-sum-value{float:right}#metrics-container .sparkline-wrapper div.tooltip:before{content:"";display:block;position:absolute;width:12px;height:12px;left:15px;bottom:-7px;border:1px solid var(--token-color-palette-neutral-300);border-top:0;border-left:0;background:#fff;transform:rotate(45deg)}.sparkline-key h3::before{margin:2px 3px 0 0;font-size:var(--token-typography-body-200-font-size)}.sparkline-key h3{color:var(--token-color-foreground-strong)}.sparkline-key .sparkline-key-content dd,.sparkline-key-link{color:var(--token-color-foreground-faint)}.sparkline-key-link:hover{color:var(--token-color-foreground-action)}#metrics-container:hover .sparkline-key-link::before{margin:1px 3px 0 0;font-size:12px}#metrics-container div .sparkline-wrapper,#metrics-container div .sparkline-wrapper svg.sparkline{width:100%;height:70px;padding:0;margin:0}#metrics-container div .sparkline-wrapper{position:relative}#metrics-container div .sparkline-wrapper .tooltip{visibility:hidden;position:absolute;z-index:10;bottom:78px;width:217px}#metrics-container div .sparkline-wrapper .sparkline-tt-legend-color{display:inline-block}#metrics-container div .sparkline-wrapper .topology-metrics-error,#metrics-container div .sparkline-wrapper .topology-metrics-loader{padding-top:15px}.sparkline-key .sparkline-key-content{width:500px;min-height:100px}.sparkline-key .sparkline-key-content dl{padding:10px 0 0}.sparkline-key .sparkline-key-content dt{font-weight:var(--token-typography-font-weight-semibold);width:125px;float:left}.sparkline-key .sparkline-key-content dd{margin:0 0 12px 135px}.sparkline-key-link{visibility:hidden;float:right;margin-top:-35px;margin-right:12px}#metrics-container:hover .sparkline-key-link{visibility:visible}.topology-metrics-stats{padding:12px 12px 0;display:flex;flex-flow:row wrap;justify-content:space-between;align-items:stretch;width:100%;border-top:1px solid var(--token-color-surface-interactive-active)}.topology-metrics-stats dl{display:flex;padding-bottom:12px}.topology-metrics-stats dt{margin-right:5px;line-height:1.5em!important}.topology-metrics-stats dd{color:var(--token-color-foreground-disabled)!important}.topology-metrics-stats span{padding-bottom:12px}.topology-metrics-status-error,.topology-metrics-status-loader{color:var(--token-color-foreground-faint);text-align:center;margin:0 auto!important;display:block}.topology-metrics-status-error span::before,.topology-metrics-status-loader span::before{background-color:var(--token-color-foreground-faint)}span.topology-metrics-status-loader::after{--icon-name:var(--icon-loading);content:"";margin-left:.5rem}.consul-node-peer-info .consul-node-peer-info__name,.consul-peer-info .consul-peer-info__description{margin-left:4px}.consul-intention-list-table__meta-info{display:flex}.consul-intention-list-table__meta-info .consul-intention-list-table__meta-info__peer{display:flex;align-items:center}.consul-node-peer-info,.peerings-badge{align-items:center;display:flex}.consul-peer-search-bar .value-active span::before,.consul-peer-search-bar .value-deleting span::before,.consul-peer-search-bar .value-establishing span::before,.consul-peer-search-bar .value-failing span::before,.consul-peer-search-bar .value-pending span::before,.consul-peer-search-bar .value-terminated span::before{--icon-size:icon-000;content:""}.consul-peer-search-bar .value-active span,.consul-peer-search-bar .value-deleting span,.consul-peer-search-bar .value-establishing span,.consul-peer-search-bar .value-failing span,.consul-peer-search-bar .value-pending span,.consul-peer-search-bar .value-terminated span{font-size:var(--token-typography-body-200-font-size)}.consul-peer-search-bar .value-pending span::before{--icon-name:icon-running;--icon-color:var(--token-color-palette-neutral-600)}.consul-peer-search-bar .value-pending span{background-color:var(--token-color-consul-surface);color:var(--token-color-consul-foreground)}.consul-peer-search-bar .value-establishing span::before{--icon-name:icon-running;--icon-color:var(--token-color-palette-neutral-600)}.consul-peer-search-bar .value-establishing span{background-color:var(--token-color-palette-blue-50);color:var(--token-color-palette-blue-200)}.consul-peer-search-bar .value-active span::before{--icon-name:icon-check;--icon-color:var(--token-color-palette-green-400)}.consul-peer-search-bar .value-active span{background-color:var(--token-color-palette-green-50);color:var(--token-color-palette-green-200)}.consul-peer-search-bar .value-failing span::before{--icon-name:icon-x;--icon-color:var(--token-color-palette-red-200)}.consul-peer-search-bar .value-failing span{background-color:var(--token-color-palette-red-50);color:var(--token-color-palette-red-200)}.consul-peer-search-bar .value-terminated span::before{--icon-name:icon-x-square;--icon-color:var(--token-color-palette-neutral-600)}.consul-peer-search-bar .value-terminated span{background-color:var(--token-color-palette-neutral-200);color:var(--token-color-palette-neutral-600)}.consul-peer-search-bar .value-deleting span::before{--icon-name:icon-loading;--icon-color:var(--token-color-foreground-warning-on-surface)}.consul-peer-search-bar .value-deleting span{background-color:var(--token-color-surface-warning);color:var(--token-color-foreground-warning-on-surface)}.peers__list__peer-detail{display:flex;align-content:center;gap:18px}.border-bottom-primary{border-bottom:1px solid var(--token-color-border-primary)}.peerings-badge{justify-content:center;padding:2px 8px;border-radius:5px;gap:4px}.peerings-badge.active{background:var(--token-color-surface-success);color:var(--token-color-foreground-success)}.peerings-badge.pending{background:var(--token-color-consul-surface);color:var(--token-color-consul-brand)}.peerings-badge.establishing{background:var(--token-color-surface-action);color:var(--token-color-foreground-action)}.peerings-badge.failing{background:var(--token-color-surface-critical);color:var(--token-color-foreground-critical)}.peerings-badge.deleting{background:var(--token-color-surface-warning);color:var(--token-color-foreground-warning-on-surface)}.peerings-badge.terminated,.peerings-badge.undefined{background:var(--token-color-surface-interactive-active);color:var(--token-color-foreground-primary)}.consul-peer-info,section[data-route="dc.show.serverstatus"] .server-failure-tolerance dt{color:var(--token-color-foreground-faint)}.consul-peer-info{background:var(--token-color-surface-faint);padding:0 8px;border-radius:2px;display:flex;align-items:center}.consul-peer-form{width:416px}.consul-peer-form nav{margin-bottom:20px}.consul-peer-form-generate{width:416px;min-height:200px}.consul-peer-form-generate ol{list-style-position:outside;list-style-type:none;counter-reset:hexagonal-counter;position:relative}.consul-peer-form-generate ol::before{content:"";border-left:var(--decor-border-100);border-color:var(--token-color-palette-neutral-300);height:100%;position:absolute;left:2rem}.consul-peer-form-generate li{counter-increment:hexagonal-counter;position:relative;margin-left:60px;margin-bottom:1rem}.consul-peer-form-generate li .copyable-code{margin-top:1rem}.consul-peer-form-generate li::before{--icon-name:icon-hexagon;--icon-size:icon-600;content:"";position:absolute;z-index:2}.consul-peer-form-generate li::after{content:counter(hexagonal-counter);position:absolute;top:0;background-color:var(--token-color-palette-neutral-0);z-index:1;text-align:center}.consul-peer-form-generate li::after,.consul-peer-form-generate li::before{left:-2.4rem;width:20px;height:20px}.agentless-node-notice .hds-alert__title{display:flex;justify-content:space-between}.definition-table dt{line-height:var(--token-typography-body-300-line-height)}.app-view>div form:not(.filter-bar) [role=radiogroup] label,.modal-dialog [role=document] [role=radiogroup] label{line-height:var(--token-typography-body-100-line-height)}.app-view h1 em,.app-view>div form:not(.filter-bar) [role=radiogroup] label>em,.consul-intention-list td.destination em,.consul-intention-list td.source em,.modal-dialog [role=document] .type-password>em,.modal-dialog [role=document] .type-select>em,.modal-dialog [role=document] .type-text>em,.modal-dialog [role=document] [role=radiogroup] label>em,.modal-dialog [role=document] form button+em,.modal-dialog [role=document] table th em,.oidc-select label>em,.type-toggle>em,main .type-password>em,main .type-select>em,main .type-text>em,main form button+em,main table th em{font-style:normal}.consul-exposed-path-list>ul>li>.header :not(button),.consul-lock-session-list ul>li:not(:first-child)>.header :not(button),.consul-upstream-instance-list li>.header :not(button),.list-collection>ul>li:not(:first-child)>.header :not(button){font-size:inherit;font-weight:inherit}@media (max-width:420px) and (-webkit-min-device-pixel-ratio:0){input{font-size:var(--token-typography-body-300-font-size)!important}}#wrapper,#wrapper>footer>*,.modal-dialog>*,main>*{box-sizing:border-box}html[data-route$=create] main,html[data-route$=edit] main{max-width:1260px}fieldset [role=group]{display:flex;flex-wrap:wrap;flex-direction:row}.outlet[data-state=loading],html.ember-loading .view-loader,html:not(.has-nspaces) [class*=nspace-],html:not(.has-partitions) [class*=partition-],html[data-state=idle] .view-loader{display:none}[role=group] fieldset{width:50%}[role=group] fieldset:not(:first-of-type){padding-left:20px;border-left:1px solid;border-left:var(--token-color-foreground-faint)}[role=group] fieldset:not(:last-of-type){padding-right:20px}.app-view{margin-top:50px}@media (max-width:849px){html:not(.with-breadcrumbs) .app-view{margin-top:10px}}html body>.brand-loader{transition-property:transform,opacity;transform:translate(0,0);opacity:1}html[data-state]:not(.ember-loading) body>.brand-loader{opacity:0}@media (min-width:900px){html[data-state] body>.brand-loader{transform:translate(calc(var(--chrome-width)/ 2),0)}}html[data-route$=create] .app-view>header+div>:first-child,html[data-route$=edit] .app-view>header+div>:first-child{margin-top:1.8em}.app-view>div .container,.app-view>div .tab-section .consul-health-check-list,.app-view>div .tab-section>.search-bar+p,.app-view>div .tab-section>:first-child:not(.filter-bar):not(table){margin-top:1.25em}.consul-upstream-instance-list,html[data-route^="dc.nodes.show.sessions"] .consul-lock-session-list{margin-top:0!important}.consul-auth-method-list ul,.consul-node-list ul,.consul-nspace-list ul,.consul-peer-list ul,.consul-policy-list ul,.consul-role-list ul,.consul-service-instance-list ul,.consul-token-list ul,html[data-route="dc.services.index"] .consul-service-list ul,html[data-route^="dc.nodes.show.sessions"] .consul-lock-session-list ul{border-top-width:0!important}#wrapper{display:flex;min-height:100vh}main{padding:0 48px;position:relative;flex:1}html:not([data-route$=index]):not([data-route$=instances]) main{margin-bottom:2em}@media (max-width:849px){.actions button.copy-btn{margin-top:-56px;padding:0}}.modal-dialog [role=document] p:not(:last-child),main p:not(:last-child){margin-bottom:1em}.modal-dialog [role=document] form+div .with-confirmation,.modal-dialog [role=document] form:not(.filter-bar),main form+div .with-confirmation,main form:not(.filter-bar){margin-bottom:2em}@media (max-width:420px){main form [type=reset]{float:right;margin-right:0!important}}html[data-route^="dc.services.show"] .app-view .actions .external-dashboard{position:absolute;top:50px;right:0}html[data-route^="dc.services.instance"] .app-view>header dl{float:left;margin-top:19px;margin-bottom:23px;margin-right:50px}html[data-route^="dc.services.instance"] .app-view>header dt{font-weight:var(--token-typography-font-weight-bold)}html[data-route^="dc.services.instance"] .tab-nav{border-top:var(--decor-border-100)}html[data-route^="dc.services.instance"] .tab-section section:not(:last-child){border-bottom:var(--decor-border-100);padding-bottom:24px}html[data-route^="dc.services.instance"] .tab-nav,html[data-route^="dc.services.instance"] .tab-section section:not(:last-child){border-color:var(--token-color-surface-interactive-active)}html[data-route^="dc.services.instance.metadata"] .tab-section section h2{margin:24px 0 12px}html[data-route^="dc.kv"] .type-toggle{float:right;margin-bottom:0!important}html[data-route^="dc.kv.edit"] h2{border-bottom:var(--decor-border-200);border-color:var(--token-color-surface-interactive-active);padding-bottom:.2em;margin-bottom:.5em}html[data-route^="dc.acls.index"] main td strong{margin-right:3px}@media (max-width:420px){html[data-route^="dc.acls.create"] main header .actions,html[data-route^="dc.acls.edit"] main header .actions{float:none;display:flex;justify-content:space-between;margin-bottom:1em}html[data-route^="dc.acls.create"] main header .actions .with-feedback,html[data-route^="dc.acls.edit"] main header .actions .with-feedback{position:absolute;right:0}html[data-route^="dc.acls.create"] main header .actions .with-confirmation,html[data-route^="dc.acls.edit"] main header .actions .with-confirmation{margin-top:0}}html[data-route^="dc.intentions.edit"] .definition-table{margin-bottom:1em}section[data-route="dc.show.serverstatus"] .server-failure-tolerance{box-shadow:none;padding:var(--padding-y) var(--padding-x);max-width:770px;display:flex;flex-wrap:wrap}section[data-route="dc.show.serverstatus"] .server-failure-tolerance>header{width:100%;display:flex;flex-direction:row;justify-content:space-between;align-items:center;padding-bottom:.5rem;margin-bottom:1rem;border-bottom:var(--decor-border-100);border-color:var(--tone-border)}section[data-route="dc.show.serverstatus"] .server-failure-tolerance header em{background-color:var(--token-color-surface-interactive-active);text-transform:uppercase;font-style:normal}section[data-route="dc.show.serverstatus"] .server-failure-tolerance>section{width:50%}section[data-route="dc.show.serverstatus"] .server-failure-tolerance dl,section[data-route="dc.show.serverstatus"] .server-failure-tolerance>section{display:flex;flex-direction:column}section[data-route="dc.show.serverstatus"] .server-failure-tolerance dl{flex-grow:1;justify-content:space-between}section[data-route="dc.show.serverstatus"] .server-failure-tolerance dl.warning dd::before{--icon-name:icon-alert-circle;--icon-size:icon-800;--icon-color:var(--token-color-foreground-warning);content:"";margin-right:.5rem}section[data-route="dc.show.serverstatus"] .server-failure-tolerance section:first-of-type dl{padding-right:1.5rem}section[data-route="dc.show.serverstatus"] .server-failure-tolerance dd{display:flex;align-items:center;color:var(--token-color-hashicorp-brand)}section[data-route="dc.show.serverstatus"] .server-failure-tolerance header span::before{--icon-name:icon-info;--icon-size:icon-300;--icon-color:var(--token-color-foreground-faint);vertical-align:unset;content:""}section[data-route="dc.show.serverstatus"] section:not([class*=-tolerance]) h2{margin-top:1.5rem;margin-bottom:1.5rem}section[data-route="dc.show.serverstatus"] section:not([class*=-tolerance]) header{margin-top:18px;margin-bottom:18px}section[data-route="dc.show.serverstatus"] .redundancy-zones section header{display:flow-root}section[data-route="dc.show.serverstatus"] .redundancy-zones section header h3{float:left;margin-right:.5rem}section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not(.warning){background-color:var(--token-color-surface-strong)}section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl.warning{background-color:var(--token-color-border-warning);color:var(--token-color-palette-amber-400)}section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl.warning::before{--icon-name:icon-alert-circle;--icon-size:icon-000;margin-right:.312rem;content:""}section[data-route="dc.show.serverstatus"] .redundancy-zones section header dt::after{content:":";display:inline-block;vertical-align:revert;background-color:transparent}section[data-route="dc.show.license"] .validity p{color:var(--token-color-foreground-faint)}section[data-route="dc.show.license"] .validity dl dt::before{content:"";margin-right:.25rem}section[data-route="dc.show.license"] .validity dl .expired::before{--icon-name:icon-x-circle;--icon-color:var(--token-color-foreground-critical)}section[data-route="dc.show.license"] .validity dl .warning::before{--icon-name:icon-alert-circle;--icon-color:var(--token-color-foreground-warning)}section[data-route="dc.show.license"] .validity dl .valid:not(.warning)::before{--icon-name:icon-check-circle;--icon-color:var(--token-color-foreground-success)}section[data-route="dc.show.license"] aside{box-shadow:none;padding:var(--padding-y) var(--padding-x);width:40%;min-width:413px;margin-top:1rem}section[data-route="dc.show.license"] aside header{margin-bottom:1rem}.prefers-reduced-motion{--icon-loading:icon-loading}@media (prefers-reduced-motion){:root{--hds-app-sidenav-animation-duration:0;--icon-loading:icon-loading}}.consul-intention-fieldsets .value->:last-child::before,.consul-intention-fieldsets .value-allow>:last-child::before,.consul-intention-fieldsets .value-deny>:last-child::before{--icon-size:icon-500;--icon-resolution:0.5}.consul-intention-fieldsets .value-allow>:last-child::before,.consul-intention-list td.intent-allow strong::before,.consul-intention-permission-list .intent-allow::before,.consul-intention-search-bar .value-allow span::before{--icon-name:icon-arrow-right;--icon-color:var(--token-color-foreground-success-on-surface)}.consul-intention-fieldsets .value-deny>:last-child::before,.consul-intention-list td.intent-deny strong::before,.consul-intention-permission-list .intent-deny::before,.consul-intention-search-bar .value-deny span::before{--icon-name:icon-skip;--icon-color:var(--token-color-foreground-critical-on-surface)}.consul-intention-fieldsets .value->:last-child::before,.consul-intention-list td.intent- strong::before,.consul-intention-search-bar .value- span::before{--icon-name:icon-layers}*{border-width:0}.animatable.tab-nav ul::after,.consul-auth-method-type,.consul-external-source,.consul-intention-action-warn-modal button.dangerous,.consul-intention-action-warn-modal button.dangerous:disabled,.consul-intention-action-warn-modal button.dangerous:focus,.consul-intention-action-warn-modal button.dangerous:hover:active,.consul-intention-action-warn-modal button.dangerous:hover:not(:disabled):not(:active),.consul-intention-list td.intent- strong,.consul-intention-permission-form button.type-submit,.consul-intention-permission-form button.type-submit:disabled,.consul-intention-permission-form button.type-submit:focus:not(:disabled),.consul-intention-permission-form button.type-submit:hover:not(:disabled),.consul-intention-search-bar .value- span,.consul-kind,.consul-source,.consul-transparent-proxy,.disclosure-menu [aria-expanded]~*>ul>li.dangerous>:first-child,.disclosure-menu [aria-expanded]~*>ul>li.dangerous>:focus:first-child,.disclosure-menu [aria-expanded]~*>ul>li.dangerous>:hover:first-child,.discovery-chain .route-card>header ul li,.informed-action>ul>.dangerous>*,.informed-action>ul>.dangerous>:focus,.informed-action>ul>.dangerous>:hover,.leader,.menu-panel>ul>li.dangerous>:first-child,.menu-panel>ul>li.dangerous>:focus:first-child,.menu-panel>ul>li.dangerous>:hover:first-child,.modal-dialog [role=document]>footer,.modal-dialog [role=document]>header,.more-popover-menu>[type=checkbox]+label+div>ul>li.dangerous>:first-child,.more-popover-menu>[type=checkbox]+label+div>ul>li.dangerous>:focus:first-child,.more-popover-menu>[type=checkbox]+label+div>ul>li.dangerous>:hover:first-child,.popover-menu>[type=checkbox]+label+div>ul>li.dangerous>:first-child,.popover-menu>[type=checkbox]+label+div>ul>li.dangerous>:focus:first-child,.popover-menu>[type=checkbox]+label+div>ul>li.dangerous>:hover:first-child,.tab-nav .selected>*,.topology-metrics-source-type,html[data-route^="dc.acls.index"] main td strong,span.policy-node-identity,span.policy-service-identity,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li.dangerous>:first-child,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li.dangerous>:focus:first-child,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li.dangerous>:hover:first-child,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li.dangerous>:first-child,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li.dangerous>:focus:first-child,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li.dangerous>:hover:first-child{border-style:solid}.consul-auth-method-type,.consul-external-source,.consul-kind,.consul-source,.consul-transparent-proxy,.leader,.topology-metrics-source-type,span.policy-node-identity,span.policy-service-identity{background-color:var(--token-color-surface-strong);border-color:var(--token-color-foreground-faint);color:var(--token-color-foreground-primary)}.consul-intention-list td.intent- strong,.consul-intention-search-bar .value- span,.discovery-chain .route-card>header ul li,.modal-dialog [role=document]>footer,.modal-dialog [role=document]>header,html[data-route^="dc.acls.index"] main td strong{background-color:var(--token-color-surface-strong);border-color:var(--token-color-palette-neutral-300);color:var(--token-color-foreground-strong)}.animatable.tab-nav ul::after,.consul-intention-permission-form button.type-submit,.consul-intention-permission-form button.type-submit:disabled,.tab-nav .selected>*{background-color:var(--token-color-surface-primary);border-color:var(--token-color-foreground-action);color:var(--token-color-foreground-action)}.consul-intention-permission-form button.type-submit:focus:not(:disabled),.consul-intention-permission-form button.type-submit:hover:not(:disabled){background-color:var(--token-color-surface-action);border-color:var(--token-color-foreground-action);color:var(--token-color-palette-blue-500)}.consul-intention-action-warn-modal button.dangerous,.disclosure-menu [aria-expanded]~*>ul>li.dangerous>:first-child,.informed-action>ul>.dangerous>*,.menu-panel>ul>li.dangerous>:first-child,.more-popover-menu>[type=checkbox]+label+div>ul>li.dangerous>:first-child,.popover-menu>[type=checkbox]+label+div>ul>li.dangerous>:first-child,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li.dangerous>:first-child,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li.dangerous>:first-child{background-color:transparent;border-color:var(--token-color-foreground-critical);color:var(--token-color-foreground-critical)}.consul-intention-action-warn-modal button.dangerous:disabled{background-color:var(--token-color-border-critical);border-color:var(--token-color-foreground-disabled);color:var(--token-color-surface-primary)}.consul-intention-action-warn-modal button.dangerous:focus,.consul-intention-action-warn-modal button.dangerous:hover:not(:disabled):not(:active),.disclosure-menu [aria-expanded]~*>ul>li.dangerous>:focus:first-child,.disclosure-menu [aria-expanded]~*>ul>li.dangerous>:hover:first-child,.informed-action>ul>.dangerous>:focus,.informed-action>ul>.dangerous>:hover,.menu-panel>ul>li.dangerous>:focus:first-child,.menu-panel>ul>li.dangerous>:hover:first-child,.more-popover-menu>[type=checkbox]+label+div>ul>li.dangerous>:focus:first-child,.more-popover-menu>[type=checkbox]+label+div>ul>li.dangerous>:hover:first-child,.popover-menu>[type=checkbox]+label+div>ul>li.dangerous>:focus:first-child,.popover-menu>[type=checkbox]+label+div>ul>li.dangerous>:hover:first-child,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li.dangerous>:focus:first-child,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li.dangerous>:hover:first-child,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li.dangerous>:focus:first-child,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li.dangerous>:hover:first-child{background-color:var(--token-color-foreground-critical);border-color:var(--token-color-foreground-critical-high-contrast);color:var(--token-color-surface-primary)}.consul-intention-action-warn-modal button.dangerous:hover:active{background-color:var(--token-color-palette-red-400);border-color:var(--token-color-foreground-critical-high-contrast);color:var(--token-color-surface-primary)}.hover\:scale-125:hover{--tw-scale-x:1.25;--tw-scale-y:1.25}.group:hover .group-hover\:opacity-100{opacity:1} \ No newline at end of file diff --git a/agent/uiserver/dist/assets/consul-ui-f5d0ec3be8cca14adb133c8e2f488419.css b/agent/uiserver/dist/assets/consul-ui-f5d0ec3be8cca14adb133c8e2f488419.css deleted file mode 100644 index f09dcd203cfe2..0000000000000 --- a/agent/uiserver/dist/assets/consul-ui-f5d0ec3be8cca14adb133c8e2f488419.css +++ /dev/null @@ -1 +0,0 @@ -@charset "UTF-8";.hds-table,table{border-spacing:0}progress,sub,sup{vertical-align:baseline}.container,.w-full{width:100%}.hover\:scale-125:hover,.scale-100,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.ease-in-out,.transition{transition-timing-function:cubic-bezier(.4,0,.2,1)}*,::after,::before{border-width:0;border-style:solid;border-color:currentColor}html{line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}a,hr{color:inherit}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}menu,ol,ul{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto}::-webkit-backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scroll-snap-strictness:proximity;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246 / 0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scroll-snap-strictness:proximity;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246 / 0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.visible{visibility:visible}.invisible{visibility:hidden}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.hds-breadcrumb,.hds-breadcrumb__item,.relative{position:relative}.sticky{position:-webkit-sticky;position:sticky}.bottom-0{bottom:0}.isolate{isolation:isolate}.ml-4{margin-left:1rem}.mb-3{margin-bottom:.75rem}.mt-2{margin-top:.5rem}.mb-1{margin-bottom:.25rem}.mr-1\.5{margin-right:.375rem}.mr-1{margin-right:.25rem}.mr-2\.5{margin-right:.625rem}.mr-2{margin-right:.5rem}.mt-6{margin-top:1.5rem}.mb-2{margin-bottom:.5rem}.mr-0\.5{margin-right:.125rem}.mr-0{margin-right:0}.mb-6{margin-bottom:1.5rem}.mt-3{margin-top:.75rem}.block{display:block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.contents{display:contents}.hidden{display:none}.h-16{height:4rem}.h-8{height:2rem}.h-4{height:1rem}.h-48{height:12rem}.h-full{height:100%}.h-12{height:3rem}.h-24{height:6rem}.w-8{width:2rem}.w-4{width:1rem}.w-24{width:6rem}.\!w-80{width:20rem!important}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.scale-100{--tw-scale-x:1;--tw-scale-y:1}.cursor-pointer{cursor:pointer}.resize{resize:both}.flex-col{flex-direction:column}.flex-nowrap{flex-wrap:nowrap}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1\.5{gap:.375rem}.gap-1{gap:.25rem}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-12>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(3rem * var(--tw-space-x-reverse));margin-left:calc(3rem * calc(1 - var(--tw-space-x-reverse)))}.overflow-x-auto{overflow-x:auto}.overflow-y-scroll{overflow-y:scroll}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rounded{border-radius:.25rem}.border{border-width:1px}.p-6{padding:1.5rem}.px-4{padding-left:1rem;padding-right:1rem}.px-3{padding-left:.75rem;padding-right:.75rem}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize,.type-source.popover-select li:not(.partition) button{text-transform:capitalize}.underline{-webkit-text-decoration-line:underline;text-decoration-line:underline}.opacity-0{opacity:0}.shadow{--tw-shadow:0 1px 3px 0 rgb(0 0 0 / 0.1),0 1px 2px -1px rgb(0 0 0 / 0.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline{outline-style:solid}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-duration:150ms}.consul-surface-nav{background:var(--token-color-palette-neutral-700)}:root{--token-color-palette-blue-500:#1c345f;--token-color-palette-blue-400:#0046d1;--token-color-palette-blue-300:#0c56e9;--token-color-palette-blue-200:#1060ff;--token-color-palette-blue-100:#cce3fe;--token-color-palette-blue-50:#f2f8ff;--token-color-palette-purple-500:#42215b;--token-color-palette-purple-400:#7b00db;--token-color-palette-purple-300:#911ced;--token-color-palette-purple-200:#a737ff;--token-color-palette-purple-100:#ead2fe;--token-color-palette-purple-50:#f9f2ff;--token-color-palette-green-500:#054220;--token-color-palette-green-400:#006619;--token-color-palette-green-300:#00781e;--token-color-palette-green-200:#008a22;--token-color-palette-green-100:#cceeda;--token-color-palette-green-50:#f2fbf6;--token-color-palette-amber-500:#542800;--token-color-palette-amber-400:#803d00;--token-color-palette-amber-300:#9e4b00;--token-color-palette-amber-200:#bb5a00;--token-color-palette-amber-100:#fbeabf;--token-color-palette-amber-50:#fff9e8;--token-color-palette-red-500:#51130a;--token-color-palette-red-400:#940004;--token-color-palette-red-300:#c00005;--token-color-palette-red-200:#e52228;--token-color-palette-red-100:#fbd4d4;--token-color-palette-red-50:#fff5f5;--token-color-palette-neutral-700:#0c0c0e;--token-color-palette-neutral-600:#3b3d45;--token-color-palette-neutral-500:#656a76;--token-color-palette-neutral-400:#8c909c;--token-color-palette-neutral-300:#c2c5cb;--token-color-palette-neutral-200:#dedfe3;--token-color-palette-neutral-100:#f1f2f3;--token-color-palette-neutral-50:#fafafa;--token-color-palette-neutral-0:#ffffff;--token-color-palette-alpha-300:#3b3d4566;--token-color-palette-alpha-200:#656a7633;--token-color-palette-alpha-100:#656a761a;--token-color-border-primary:#656a7633;--token-color-border-faint:#656a761a;--token-color-border-strong:#3b3d4566;--token-color-border-action:#cce3fe;--token-color-border-highlight:#ead2fe;--token-color-border-success:#cceeda;--token-color-border-warning:#fbeabf;--token-color-border-critical:#fbd4d4;--token-color-focus-action-internal:#0c56e9;--token-color-focus-action-external:#5990ff;--token-color-focus-critical-internal:#c00005;--token-color-focus-critical-external:#dd7578;--token-color-foreground-strong:#0c0c0e;--token-color-foreground-primary:#3b3d45;--token-color-foreground-faint:#656a76;--token-color-foreground-high-contrast:#ffffff;--token-color-foreground-disabled:#8c909c;--token-color-foreground-action:#1060ff;--token-color-foreground-action-hover:#0c56e9;--token-color-foreground-action-active:#0046d1;--token-color-foreground-highlight:#a737ff;--token-color-foreground-highlight-on-surface:#911ced;--token-color-foreground-highlight-high-contrast:#42215b;--token-color-foreground-success:#008a22;--token-color-foreground-success-on-surface:#00781e;--token-color-foreground-success-high-contrast:#054220;--token-color-foreground-warning:#bb5a00;--token-color-foreground-warning-on-surface:#9e4b00;--token-color-foreground-warning-high-contrast:#542800;--token-color-foreground-critical:#e52228;--token-color-foreground-critical-on-surface:#c00005;--token-color-foreground-critical-high-contrast:#51130a;--token-color-page-primary:#ffffff;--token-color-page-faint:#fafafa;--token-color-surface-primary:#ffffff;--token-color-surface-faint:#fafafa;--token-color-surface-strong:#f1f2f3;--token-color-surface-interactive:#ffffff;--token-color-surface-interactive-hover:#f1f2f3;--token-color-surface-interactive-active:#dedfe3;--token-color-surface-interactive-disabled:#fafafa;--token-color-surface-action:#f2f8ff;--token-color-surface-highlight:#f9f2ff;--token-color-surface-success:#f2fbf6;--token-color-surface-warning:#fff9e8;--token-color-surface-critical:#fff5f5;--token-color-hashicorp-brand:#000000;--token-color-boundary-brand:#f24c53;--token-color-boundary-foreground:#cf2d32;--token-color-boundary-surface:#ffecec;--token-color-boundary-border:#fbd7d8;--token-color-boundary-gradient-primary-start:#f97076;--token-color-boundary-gradient-primary-stop:#db363b;--token-color-boundary-gradient-faint-start:#fffafa;--token-color-boundary-gradient-faint-stop:#ffecec;--token-color-consul-brand:#e03875;--token-color-consul-foreground:#d01c5b;--token-color-consul-surface:#ffe9f1;--token-color-consul-border:#ffcede;--token-color-consul-gradient-primary-start:#ff99be;--token-color-consul-gradient-primary-stop:#da306e;--token-color-consul-gradient-faint-start:#fff9fb;--token-color-consul-gradient-faint-stop:#ffe9f1;--token-color-hcp-brand:#000000;--token-color-nomad-brand:#06d092;--token-color-nomad-foreground:#008661;--token-color-nomad-surface:#d3fdeb;--token-color-nomad-border:#bff3dd;--token-color-nomad-gradient-primary-start:#bff3dd;--token-color-nomad-gradient-primary-stop:#60dea9;--token-color-nomad-gradient-faint-start:#f3fff9;--token-color-nomad-gradient-faint-stop:#d3fdeb;--token-color-packer-brand:#02a8ef;--token-color-packer-foreground:#007eb4;--token-color-packer-surface:#d4f2ff;--token-color-packer-border:#b4e4ff;--token-color-packer-gradient-primary-start:#b4e4ff;--token-color-packer-gradient-primary-stop:#63d0ff;--token-color-packer-gradient-faint-start:#f3fcff;--token-color-packer-gradient-faint-stop:#d4f2ff;--token-color-terraform-brand:#7b42bc;--token-color-terraform-foreground:#773cb4;--token-color-terraform-surface:#f4ecff;--token-color-terraform-border:#ebdbfc;--token-color-terraform-gradient-primary-start:#bb8deb;--token-color-terraform-gradient-primary-stop:#844fba;--token-color-terraform-gradient-faint-start:#fcfaff;--token-color-terraform-gradient-faint-stop:#f4ecff;--token-color-vagrant-brand:#1868f2;--token-color-vagrant-foreground:#1c61d8;--token-color-vagrant-surface:#d6ebff;--token-color-vagrant-border:#c7dbfc;--token-color-vagrant-gradient-primary-start:#c7dbfc;--token-color-vagrant-gradient-primary-stop:#7dadff;--token-color-vagrant-gradient-faint-start:#f4faff;--token-color-vagrant-gradient-faint-stop:#d6ebff;--token-color-vault-brand:#ffd814;--token-color-vault-brand-alt:#000000;--token-color-vault-foreground:#9a6f00;--token-color-vault-surface:#fff9cf;--token-color-vault-border:#feec7b;--token-color-vault-gradient-primary-start:#feec7b;--token-color-vault-gradient-primary-stop:#ffe543;--token-color-vault-gradient-faint-start:#fffdf2;--token-color-vault-gradient-faint-stop:#fff9cf;--token-color-waypoint-brand:#14c6cb;--token-color-waypoint-foreground:#008196;--token-color-waypoint-surface:#e0fcff;--token-color-waypoint-border:#cbf1f3;--token-color-waypoint-gradient-primary-start:#cbf1f3;--token-color-waypoint-gradient-primary-stop:#62d4dc;--token-color-waypoint-gradient-faint-start:#f6feff;--token-color-waypoint-gradient-faint-stop:#e0fcff;--token-elevation-inset-box-shadow:inset 0px 1px 2px 1px #656a761a;--token-elevation-low-box-shadow:0px 1px 1px 0px #656a760d,0px 2px 2px 0px #656a760d;--token-elevation-mid-box-shadow:0px 2px 3px 0px #656a761a,0px 8px 16px -10px #656a7633;--token-elevation-high-box-shadow:0px 2px 3px 0px #656a7626,0px 16px 16px -10px #656a7633;--token-elevation-higher-box-shadow:0px 2px 3px 0px #656a761a,0px 12px 28px 0px #656a7640;--token-elevation-overlay-box-shadow:0px 2px 3px 0px #3b3d4580,0px 12px 24px 0px #3b3d4599;--token-surface-inset-box-shadow:inset 0 0 0 1px #656a764d,inset 0px 1px 2px 1px #656a761a;--token-surface-base-box-shadow:0 0 0 1px #656a7633;--token-surface-low-box-shadow:0 0 0 1px #656a7626,0px 1px 1px 0px #656a760d,0px 2px 2px 0px #656a760d;--token-surface-mid-box-shadow:0 0 0 1px #656a7626,0px 2px 3px 0px #656a761a,0px 8px 16px -10px #656a7633;--token-surface-high-box-shadow:0 0 0 1px #656a7640,0px 2px 3px 0px #656a7626,0px 16px 16px -10px #656a7633;--token-surface-higher-box-shadow:0 0 0 1px #656a7633,0px 2px 3px 0px #656a761a,0px 12px 28px 0px #656a7640;--token-surface-overlay-box-shadow:0 0 0 1px #3b3d4566,0px 2px 3px 0px #3b3d4580,0px 12px 24px 0px #3b3d4599;--token-focus-ring-action-box-shadow:inset 0 0 0 1px #0c56e9,0 0 0 3px #5990ff;--token-focus-ring-critical-box-shadow:inset 0 0 0 1px #c00005,0 0 0 3px #dd7578;--token-form-label-color:#0c0c0e;--token-form-legend-color:#0c0c0e;--token-form-helper-text-color:#656a76;--token-form-indicator-optional-color:#656a76;--token-form-error-color:#c00005;--token-form-error-icon-size:14px;--token-form-checkbox-size:16px;--token-form-checkbox-border-radius:3px;--token-form-checkbox-border-width:1px;--token-form-checkbox-background-image-size:12px;--token-form-checkbox-background-image-data-url:url("data:image/svg+xml,%3csvg viewBox='0 0 12 12' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M9.78033 3.21967C10.0732 3.51256 10.0732 3.98744 9.78033 4.28033L5.28033 8.78033C4.98744 9.07322 4.51256 9.07322 4.21967 8.78033L2.21967 6.78033C1.92678 6.48744 1.92678 6.01256 2.21967 5.71967C2.51256 5.42678 2.98744 5.42678 3.28033 5.71967L4.75 7.18934L8.71967 3.21967C9.01256 2.92678 9.48744 2.92678 9.78033 3.21967Z' fill='%23FFF'/%3e%3c/svg%3e");--token-form-checkbox-background-image-data-url-disabled:url("data:image/svg+xml,%3csvg viewBox='0 0 12 12' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M9.78033 3.21967C10.0732 3.51256 10.0732 3.98744 9.78033 4.28033L5.28033 8.78033C4.98744 9.07322 4.51256 9.07322 4.21967 8.78033L2.21967 6.78033C1.92678 6.48744 1.92678 6.01256 2.21967 5.71967C2.51256 5.42678 2.98744 5.42678 3.28033 5.71967L4.75 7.18934L8.71967 3.21967C9.01256 2.92678 9.48744 2.92678 9.78033 3.21967Z' fill='%238C909C'/%3e%3c/svg%3e");--token-form-control-base-foreground-value-color:#0c0c0e;--token-form-control-base-foreground-placeholder-color:#656a76;--token-form-control-base-surface-color-default:#ffffff;--token-form-control-base-surface-color-hover:#f1f2f3;--token-form-control-base-border-color-default:#8c909c;--token-form-control-base-border-color-hover:#656a76;--token-form-control-checked-foreground-color:#ffffff;--token-form-control-checked-surface-color-default:#1060ff;--token-form-control-checked-surface-color-hover:#0c56e9;--token-form-control-checked-border-color-default:#0c56e9;--token-form-control-checked-border-color-hover:#0046d1;--token-form-control-invalid-border-color-default:#c00005;--token-form-control-invalid-border-color-hover:#940004;--token-form-control-readonly-foreground-color:#3b3d45;--token-form-control-readonly-surface-color:#f1f2f3;--token-form-control-readonly-border-color:#656a761a;--token-form-control-disabled-foreground-color:#8c909c;--token-form-control-disabled-surface-color:#fafafa;--token-form-control-disabled-border-color:#656a7633;--token-form-control-padding:7px;--token-form-control-border-radius:5px;--token-form-control-border-width:1px;--token-form-radio-size:16px;--token-form-radio-border-width:1px;--token-form-radio-background-image-size:12px;--token-form-radio-background-image-data-url:url("data:image/svg+xml,%3csvg width='12' height='12' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='6' cy='6' r='2.5' fill='%23ffffff'/%3e%3c/svg%3e");--token-form-radio-background-image-data-url-disabled:url("data:image/svg+xml,%3csvg width='12' height='12' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='6' cy='6' r='2.5' fill='%238C909C'/%3e%3c/svg%3e");--token-form-select-background-image-size:16px;--token-form-select-background-image-position-right-x:7px;--token-form-select-background-image-position-top-y:9px;--token-form-select-background-image-data-url:url("data:image/svg+xml,%3Csvg viewBox='0 0 16 16' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M8.55 2.24a.75.75 0 0 0-1.1 0L4.2 5.74a.75.75 0 1 0 1.1 1.02L8 3.852l2.7 2.908a.75.75 0 1 0 1.1-1.02l-3.25-3.5Zm-1.1 11.52a.75.75 0 0 0 1.1 0l3.25-3.5a.75.75 0 1 0-1.1-1.02L8 12.148 5.3 9.24a.75.75 0 0 0-1.1 1.02l3.25 3.5Z' fill='%23656A76'/%3E%3C/svg%3E");--token-form-select-background-image-data-url-disabled:url("data:image/svg+xml,%3Csvg viewBox='0 0 16 16' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M8.55 2.24a.75.75 0 0 0-1.1 0L4.2 5.74a.75.75 0 1 0 1.1 1.02L8 3.852l2.7 2.908a.75.75 0 1 0 1.1-1.02l-3.25-3.5Zm-1.1 11.52a.75.75 0 0 0 1.1 0l3.25-3.5a.75.75 0 1 0-1.1-1.02L8 12.148 5.3 9.24a.75.75 0 0 0-1.1 1.02l3.25 3.5Z' fill='%238C909C'/%3E%3C/svg%3E");--token-form-text-input-background-image-size:16px;--token-form-text-input-background-image-position-x:7px;--token-form-text-input-background-image-data-url-date:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M11.5.75a.75.75 0 00-1.5 0V1H6V.75a.75.75 0 00-1.5 0V1H3.25A2.25 2.25 0 001 3.25v9.5A2.25 2.25 0 003.25 15h9.5A2.25 2.25 0 0015 12.75v-9.5A2.25 2.25 0 0012.75 1H11.5V.75zm-7 2.5V2.5H3.25a.75.75 0 00-.75.75V5h11V3.25a.75.75 0 00-.75-.75H11.5v.75a.75.75 0 01-1.5 0V2.5H6v.75a.75.75 0 01-1.5 0zm9 3.25h-11v6.25c0 .414.336.75.75.75h9.5a.75.75 0 00.75-.75V6.5z' fill-rule='evenodd' clip-rule='evenodd' fill='%233B3D45'/%3e%3c/svg%3e");--token-form-text-input-background-image-data-url-time:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' xmlns='http://www.w3.org/2000/svg'%3e%3cg fill='%233B3D45'%3e%3cpath d='M8.5 3.75a.75.75 0 00-1.5 0V8c0 .284.16.544.415.67l2.5 1.25a.75.75 0 10.67-1.34L8.5 7.535V3.75z'/%3e%3cpath d='M8 0a8 8 0 100 16A8 8 0 008 0zM1.5 8a6.5 6.5 0 1113 0 6.5 6.5 0 01-13 0z' fill-rule='evenodd' clip-rule='evenodd'/%3e%3c/g%3e%3c/svg%3e");--token-form-text-input-background-image-data-url-search:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' xmlns='http://www.w3.org/2000/svg'%3e%3cg fill='%23656A76'%3e%3cpath d='M7.25 2a5.25 5.25 0 103.144 9.455l2.326 2.325a.75.75 0 101.06-1.06l-2.325-2.326A5.25 5.25 0 007.25 2zM3.5 7.25a3.75 3.75 0 117.5 0 3.75 3.75 0 01-7.5 0z' fill-rule='evenodd' clip-rule='evenodd'/%3e%3c/g%3e%3c/svg%3e");--token-form-text-input-background-image-data-url-search-cancel:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.78 4.28a.75.75 0 00-1.06-1.06L8 6.94 4.28 3.22a.75.75 0 00-1.06 1.06L6.94 8l-3.72 3.72a.75.75 0 101.06 1.06L8 9.06l3.72 3.72a.75.75 0 101.06-1.06L9.06 8l3.72-3.72z'/%3e%3c/svg%3e");--token-form-toggle-width:32px;--token-form-toggle-height:16px;--token-form-toggle-base-surface-color-default:#f1f2f3;--token-form-toggle-border-radius:3px;--token-form-toggle-border-width:1px;--token-form-toggle-background-image-size:12px;--token-form-toggle-background-image-position-x:2px;--token-form-toggle-background-image-data-url:url("data:image/svg+xml,%3csvg viewBox='0 0 12 12' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M9.78033 3.21967C10.0732 3.51256 10.0732 3.98744 9.78033 4.28033L5.28033 8.78033C4.98744 9.07322 4.51256 9.07322 4.21967 8.78033L2.21967 6.78033C1.92678 6.48744 1.92678 6.01256 2.21967 5.71967C2.51256 5.42678 2.98744 5.42678 3.28033 5.71967L4.75 7.18934L8.71967 3.21967C9.01256 2.92678 9.48744 2.92678 9.78033 3.21967Z' fill='%23FFF'/%3e%3c/svg%3e");--token-form-toggle-background-image-data-url-disabled:url("data:image/svg+xml,%3csvg viewBox='0 0 12 12' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M9.78033 3.21967C10.0732 3.51256 10.0732 3.98744 9.78033 4.28033L5.28033 8.78033C4.98744 9.07322 4.51256 9.07322 4.21967 8.78033L2.21967 6.78033C1.92678 6.48744 1.92678 6.01256 2.21967 5.71967C2.51256 5.42678 2.98744 5.42678 3.28033 5.71967L4.75 7.18934L8.71967 3.21967C9.01256 2.92678 9.48744 2.92678 9.78033 3.21967Z' fill='%238C909C'/%3e%3c/svg%3e");--token-form-toggle-transition-duration:0.2s;--token-form-toggle-transition-timing-function:cubic-bezier(0.68, -0.2, 0.265, 1.15);--token-form-toggle-thumb-size:16px;--token-typography-font-stack-display:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;--token-typography-font-stack-text:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;--token-typography-font-stack-code:ui-monospace,Menlo,Consolas,monospace;--token-typography-font-weight-regular:400;--token-typography-font-weight-medium:500;--token-typography-font-weight-semibold:600;--token-typography-font-weight-bold:700;--token-typography-display-500-font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;--token-typography-display-500-font-size:1.875rem;--token-typography-display-500-line-height:1.2666;--token-typography-display-400-font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;--token-typography-display-400-font-size:1.5rem;--token-typography-display-400-line-height:1.3333;--token-typography-display-300-font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;--token-typography-display-300-font-size:1.125rem;--token-typography-display-300-line-height:1.3333;--token-typography-display-300-letter-spacing:-0.5px;--token-typography-display-200-font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;--token-typography-display-200-font-size:1rem;--token-typography-display-200-line-height:1.5;--token-typography-display-200-letter-spacing:-0.5px;--token-typography-display-100-font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;--token-typography-display-100-font-size:0.8125rem;--token-typography-display-100-line-height:1.3846;--token-typography-body-300-font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;--token-typography-body-300-font-size:1rem;--token-typography-body-300-line-height:1.5;--token-typography-body-200-font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;--token-typography-body-200-font-size:0.875rem;--token-typography-body-200-line-height:1.4286;--token-typography-body-100-font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;--token-typography-body-100-font-size:0.8125rem;--token-typography-body-100-line-height:1.3846;--token-typography-code-100-font-family:ui-monospace,Menlo,Consolas,monospace;--token-typography-code-100-font-size:0.8125rem;--token-typography-code-100-line-height:1.23;--decor-radius-000:0;--decor-radius-100:2px;--decor-radius-200:4px;--decor-radius-250:6px;--decor-radius-300:7px;--decor-radius-999:9999px;--decor-radius-full:100%;--decor-border-000:none;--decor-border-100:1px solid;--decor-border-200:2px solid;--decor-border-300:3px solid;--decor-border-400:4px solid;--color-info:var(--token-color-foreground-action);--color-alert:var(--token-color-palette-amber-200);--typo-family-sans:BlinkMacSystemFont,-apple-system,"Segoe UI","Roboto","Oxygen","Ubuntu","Cantarell","Fira Sans","Droid Sans","Helvetica Neue","Helvetica","Arial",sans-serif;--typo-family-mono:monospace;--typo-size-000:16px;--typo-size-100:3.5rem;--typo-size-200:1.8rem;--typo-size-250:1.750rem;--typo-size-300:1.3rem;--typo-size-400:1.2rem;--typo-size-450:1.125rem;--typo-size-500:1rem;--typo-size-600:0.875rem;--typo-size-700:0.8125rem;--typo-size-800:0.75rem;--typo-weight-light:300;--typo-weight-normal:400;--typo-weight-medium:500;--typo-weight-semibold:600;--typo-weight-bold:700;--typo-lead-000:0;--typo-lead-050:1;--typo-lead-100:1.2;--typo-lead-200:1.25;--typo-lead-300:1.28;--typo-lead-500:1.33;--typo-lead-600:1.4;--typo-lead-700:1.5;--typo-lead-800:1.7;--icon-alert-triangle-16:url('data:image/svg+xml;charset=UTF-8,');--icon-alert-triangle-24:url('data:image/svg+xml;charset=UTF-8,');--icon-arrow-left-16:url('data:image/svg+xml;charset=UTF-8,');--icon-arrow-left-24:url('data:image/svg+xml;charset=UTF-8,');--icon-arrow-right-16:url('data:image/svg+xml;charset=UTF-8,');--icon-arrow-right-24:url('data:image/svg+xml;charset=UTF-8,');--icon-x-square-fill-16:url('data:image/svg+xml;charset=UTF-8,');--icon-x-square-fill-24:url('data:image/svg+xml;charset=UTF-8,');--icon-chevron-down-16:url('data:image/svg+xml;charset=UTF-8,');--icon-chevron-down-24:url('data:image/svg+xml;charset=UTF-8,');--icon-clipboard-copy-16:url('data:image/svg+xml;charset=UTF-8,');--icon-clipboard-copy-24:url('data:image/svg+xml;charset=UTF-8,');--icon-docs-16:url('data:image/svg+xml;charset=UTF-8,');--icon-docs-24:url('data:image/svg+xml;charset=UTF-8,');--icon-external-link-16:url('data:image/svg+xml;charset=UTF-8,');--icon-external-link-24:url('data:image/svg+xml;charset=UTF-8,');--icon-file-16:url('data:image/svg+xml;charset=UTF-8,');--icon-file-24:url('data:image/svg+xml;charset=UTF-8,');--icon-folder-16:url('data:image/svg+xml;charset=UTF-8,');--icon-folder-24:url('data:image/svg+xml;charset=UTF-8,');--icon-activity-16:url('data:image/svg+xml;charset=UTF-8,');--icon-activity-24:url('data:image/svg+xml;charset=UTF-8,');--icon-help-16:url('data:image/svg+xml;charset=UTF-8,');--icon-help-24:url('data:image/svg+xml;charset=UTF-8,');--icon-learn-16:url('data:image/svg+xml;charset=UTF-8,');--icon-learn-24:url('data:image/svg+xml;charset=UTF-8,');--icon-github-color-16:url('data:image/svg+xml;charset=UTF-8,');--icon-github-color-24:url('data:image/svg+xml;charset=UTF-8,');--icon-google-color-16:url('data:image/svg+xml;charset=UTF-8,');--icon-google-color-24:url('data:image/svg+xml;charset=UTF-8,');--icon-kubernetes-color-16:url('data:image/svg+xml;charset=UTF-8,');--icon-kubernetes-color-24:url('data:image/svg+xml;charset=UTF-8,');--icon-menu-16:url('data:image/svg+xml;charset=UTF-8,');--icon-menu-24:url('data:image/svg+xml;charset=UTF-8,');--icon-minus-square-16:url('data:image/svg+xml;charset=UTF-8,');--icon-minus-square-24:url('data:image/svg+xml;charset=UTF-8,');--icon-more-horizontal-16:url('data:image/svg+xml;charset=UTF-8,');--icon-more-horizontal-24:url('data:image/svg+xml;charset=UTF-8,');--icon-globe-16:url('data:image/svg+xml;charset=UTF-8,');--icon-globe-24:url('data:image/svg+xml;charset=UTF-8,');--icon-search-16:url('data:image/svg+xml;charset=UTF-8,');--icon-search-24:url('data:image/svg+xml;charset=UTF-8,');--icon-star-16:url('data:image/svg+xml;charset=UTF-8,');--icon-star-24:url('data:image/svg+xml;charset=UTF-8,');--icon-org-16:url('data:image/svg+xml;charset=UTF-8,');--icon-org-24:url('data:image/svg+xml;charset=UTF-8,');--icon-user-16:url('data:image/svg+xml;charset=UTF-8,');--icon-user-24:url('data:image/svg+xml;charset=UTF-8,');--icon-users-16:url('data:image/svg+xml;charset=UTF-8,');--icon-users-24:url('data:image/svg+xml;charset=UTF-8,');--icon-alert-circle-16:url('data:image/svg+xml;charset=UTF-8,');--icon-alert-circle-24:url('data:image/svg+xml;charset=UTF-8,');--icon-check-16:url('data:image/svg+xml;charset=UTF-8,');--icon-check-24:url('data:image/svg+xml;charset=UTF-8,');--icon-check-circle-16:url('data:image/svg+xml;charset=UTF-8,');--icon-check-circle-24:url('data:image/svg+xml;charset=UTF-8,');--icon-check-circle-fill-16:url('data:image/svg+xml;charset=UTF-8,');--icon-check-circle-fill-24:url('data:image/svg+xml;charset=UTF-8,');--icon-chevron-left-16:url('data:image/svg+xml;charset=UTF-8,');--icon-chevron-left-24:url('data:image/svg+xml;charset=UTF-8,');--icon-chevron-right-16:url('data:image/svg+xml;charset=UTF-8,');--icon-chevron-right-24:url('data:image/svg+xml;charset=UTF-8,');--icon-chevron-up-16:url('data:image/svg+xml;charset=UTF-8,');--icon-chevron-up-24:url('data:image/svg+xml;charset=UTF-8,');--icon-delay-16:url('data:image/svg+xml;charset=UTF-8,');--icon-delay-24:url('data:image/svg+xml;charset=UTF-8,');--icon-docs-link-16:url('data:image/svg+xml;charset=UTF-8,');--icon-docs-link-24:url('data:image/svg+xml;charset=UTF-8,');--icon-eye-16:url('data:image/svg+xml;charset=UTF-8,');--icon-eye-24:url('data:image/svg+xml;charset=UTF-8,');--icon-eye-off-16:url('data:image/svg+xml;charset=UTF-8,');--icon-eye-off-24:url('data:image/svg+xml;charset=UTF-8,');--icon-file-text-16:url('data:image/svg+xml;charset=UTF-8,');--icon-file-text-24:url('data:image/svg+xml;charset=UTF-8,');--icon-gateway-16:url('data:image/svg+xml;charset=UTF-8,');--icon-gateway-24:url('data:image/svg+xml;charset=UTF-8,');--icon-git-commit-16:url('data:image/svg+xml;charset=UTF-8,');--icon-git-commit-24:url('data:image/svg+xml;charset=UTF-8,');--icon-hexagon-16:url('data:image/svg+xml;charset=UTF-8,');--icon-hexagon-24:url('data:image/svg+xml;charset=UTF-8,');--icon-history-16:url('data:image/svg+xml;charset=UTF-8,');--icon-history-24:url('data:image/svg+xml;charset=UTF-8,');--icon-info-16:url('data:image/svg+xml;charset=UTF-8,');--icon-info-24:url('data:image/svg+xml;charset=UTF-8,');--icon-layers-16:url('data:image/svg+xml;charset=UTF-8,');--icon-layers-24:url('data:image/svg+xml;charset=UTF-8,');--icon-loading-16:url('data:image/svg+xml;charset=UTF-8,');--icon-loading-24:url('data:image/svg+xml;charset=UTF-8,');--icon-network-alt-16:url('data:image/svg+xml;charset=UTF-8,');--icon-network-alt-24:url('data:image/svg+xml;charset=UTF-8,');--icon-path-16:url('data:image/svg+xml;charset=UTF-8,');--icon-path-24:url('data:image/svg+xml;charset=UTF-8,');--icon-running-16:url('data:image/svg+xml;charset=UTF-8,');--icon-running-24:url('data:image/svg+xml;charset=UTF-8,');--icon-skip-16:url('data:image/svg+xml;charset=UTF-8,');--icon-skip-24:url('data:image/svg+xml;charset=UTF-8,');--icon-socket-16:url('data:image/svg+xml;charset=UTF-8,');--icon-socket-24:url('data:image/svg+xml;charset=UTF-8,');--icon-star-circle-16:url('data:image/svg+xml;charset=UTF-8,');--icon-star-circle-24:url('data:image/svg+xml;charset=UTF-8,');--icon-star-fill-16:url('data:image/svg+xml;charset=UTF-8,');--icon-star-fill-24:url('data:image/svg+xml;charset=UTF-8,');--icon-tag-16:url('data:image/svg+xml;charset=UTF-8,');--icon-tag-24:url('data:image/svg+xml;charset=UTF-8,');--icon-x-16:url('data:image/svg+xml;charset=UTF-8,');--icon-x-24:url('data:image/svg+xml;charset=UTF-8,');--icon-x-circle-16:url('data:image/svg+xml;charset=UTF-8,');--icon-x-circle-24:url('data:image/svg+xml;charset=UTF-8,');--icon-x-square-16:url('data:image/svg+xml;charset=UTF-8,');--icon-x-square-24:url('data:image/svg+xml;charset=UTF-8,');--icon-cloud-cross-16:url('data:image/svg+xml;charset=UTF-8,');--icon-loading-motion-16:url('data:image/svg+xml;charset=UTF-8,');--icon-auth0-color-16:url('data:image/svg+xml;charset=UTF-8,');--icon-auth0-color-24:url('data:image/svg+xml;charset=UTF-8,');--icon-logo-ember-circle-color-16:url('data:image/svg+xml;charset=UTF-8,');--icon-logo-glimmer-color-16:url('data:image/svg+xml;charset=UTF-8,');--icon-logo-jwt-color-16:url('data:image/svg+xml;charset=UTF-8,');--icon-microsoft-color-16:url('data:image/svg+xml;charset=UTF-8,');--icon-microsoft-color-24:url('data:image/svg+xml;charset=UTF-8,');--icon-logo-oidc-color-16:url('data:image/svg+xml;charset=UTF-8,');--icon-okta-color-16:url('data:image/svg+xml;charset=UTF-8,');--icon-okta-color-24:url('data:image/svg+xml;charset=UTF-8,');--icon-mesh-16:url('data:image/svg+xml;charset=UTF-8,');--icon-mesh-24:url('data:image/svg+xml;charset=UTF-8,');--icon-port-16:url('data:image/svg+xml;charset=UTF-8,');--icon-protocol-16:url('data:image/svg+xml;charset=UTF-8,');--icon-redirect-16:url('data:image/svg+xml;charset=UTF-8,');--icon-redirect-24:url('data:image/svg+xml;charset=UTF-8,');--icon-search-color-16:url('data:image/svg+xml;charset=UTF-8,');--icon-sort-desc-16:url('data:image/svg+xml;charset=UTF-8,');--icon-sort-desc-24:url('data:image/svg+xml;charset=UTF-8,');--icon-union-16:url('data:image/svg+xml;charset=UTF-8,');--chrome-width:280px;--chrome-height:64px;--typo-action:var(--token-color-foreground-action);--decor-error:var(--token-color-foreground-critical);--typo-contrast:var(--token-color-hashicorp-brand);--syntax-light-grey:#dde3e7;--syntax-light-gray:#a4a4a4;--syntax-light-grey-blue:#6c7b81;--syntax-dark-grey:#788290;--syntax-faded-gray:#eaeaea;--syntax-atlas:#127eff;--syntax-vagrant:#2f88f7;--syntax-consul:#69499a;--syntax-terraform:#822ff7;--syntax-serf:#dd4e58;--syntax-packer:#1ddba3;--syntax-gray:lighten(#000, 89%);--syntax-red:#ff3d3d;--syntax-green:#39b54a;--syntax-dark-gray:#535f73;--syntax-gutter-grey:#2a2f36;--syntax-yellow:var(--token-color-vault-brand);--horizontal-kv-list-separator-width:18px;--horizontal-kv-list-key-separator:":";--horizontal-kv-list-key-wrapper-start:"(";--horizontal-kv-list-key-wrapper-end:")";--csv-list-separator:",";--icon-loading:icon-loading-motion}.hds-border-primary{border:1px solid var(--token-color-border-primary)}.hds-border-faint{border:1px solid var(--token-color-border-faint)}.hds-border-strong{border:1px solid var(--token-color-border-strong)}.hds-border-action{border:1px solid var(--token-color-border-action)}.hds-border-highlight{border:1px solid var(--token-color-border-highlight)}.hds-border-success{border:1px solid var(--token-color-border-success)}.hds-border-warning{border:1px solid var(--token-color-border-warning)}.hds-border-critical{border:1px solid var(--token-color-border-critical)}.hds-foreground-strong{color:var(--token-color-foreground-strong)}.hds-foreground-primary{color:var(--token-color-foreground-primary)}.hds-foreground-faint{color:var(--token-color-foreground-faint)}.hds-foreground-high-contrast{color:var(--token-color-foreground-high-contrast)}.hds-foreground-disabled{color:var(--token-color-foreground-disabled)}.hds-foreground-action{color:var(--token-color-foreground-action)}.hds-foreground-action-hover{color:var(--token-color-foreground-action-hover)}.hds-foreground-action-active{color:var(--token-color-foreground-action-active)}.hds-foreground-highlight{color:var(--token-color-foreground-highlight)}.hds-foreground-highlight-on-surface{color:var(--token-color-foreground-highlight-on-surface)}.hds-foreground-highlight-high-contrast{color:var(--token-color-foreground-highlight-high-contrast)}.hds-foreground-success{color:var(--token-color-foreground-success)}.hds-foreground-success-on-surface{color:var(--token-color-foreground-success-on-surface)}.hds-foreground-success-high-contrast{color:var(--token-color-foreground-success-high-contrast)}.hds-foreground-warning{color:var(--token-color-foreground-warning)}.hds-alert__text,.hds-foreground-warning-on-surface{color:var(--token-color-foreground-warning-on-surface)}.hds-foreground-warning-high-contrast{color:var(--token-color-foreground-warning-high-contrast)}.hds-foreground-critical{color:var(--token-color-foreground-critical)}.hds-foreground-critical-on-surface{color:var(--token-color-foreground-critical-on-surface)}.hds-foreground-critical-high-contrast{color:var(--token-color-foreground-critical-high-contrast)}.hds-page-primary{background-color:var(--token-color-page-primary)}.hds-page-faint{background-color:var(--token-color-page-faint)}.hds-surface-primary{background-color:var(--token-color-surface-primary)}.hds-surface-faint{background-color:var(--token-color-surface-faint)}.hds-surface-strong{background-color:var(--token-color-surface-strong)}.hds-surface-interactive{background-color:var(--token-color-surface-interactive)}.hds-surface-interactive-hover{background-color:var(--token-color-surface-interactive-hover)}.hds-surface-interactive-active{background-color:var(--token-color-surface-interactive-active)}.hds-surface-interactive-disabled{background-color:var(--token-color-surface-interactive-disabled)}.hds-surface-action{background-color:var(--token-color-surface-action)}.hds-surface-highlight{background-color:var(--token-color-surface-highlight)}.hds-surface-success{background-color:var(--token-color-surface-success)}.hds-surface-warning{background-color:var(--token-color-surface-warning)}.hds-surface-critical{background-color:var(--token-color-surface-critical)}.hds-elevation-inset{box-shadow:var(--token-elevation-inset-box-shadow)}.hds-elevation-low{box-shadow:var(--token-elevation-low-box-shadow)}.hds-elevation-mid{box-shadow:var(--token-elevation-mid-box-shadow)}.hds-elevation-high{box-shadow:var(--token-elevation-high-box-shadow)}.hds-elevation-higher{box-shadow:var(--token-elevation-higher-box-shadow)}.hds-elevation-overlay{box-shadow:var(--token-elevation-overlay-box-shadow)}.hds-surface-inset{box-shadow:var(--token-surface-inset-box-shadow)}.hds-surface-base{box-shadow:var(--token-surface-base-box-shadow)}.hds-surface-low{box-shadow:var(--token-surface-low-box-shadow)}.hds-surface-mid{box-shadow:var(--token-surface-mid-box-shadow)}.hds-surface-high{box-shadow:var(--token-surface-high-box-shadow)}.hds-surface-higher{box-shadow:var(--token-surface-higher-box-shadow)}.hds-surface-overlay{box-shadow:var(--token-surface-overlay-box-shadow)}.hds-breadcrumb__link.mock-focus,.hds-breadcrumb__link:focus,.hds-focus-ring-action-box-shadow{box-shadow:var(--token-focus-ring-action-box-shadow)}.hds-focus-ring-critical-box-shadow{box-shadow:var(--token-focus-ring-critical-box-shadow)}.hds-font-family-sans-display{font-family:var(--token-typography-font-stack-display)}.hds-font-family-sans-text{font-family:var(--token-typography-font-stack-text)}.hds-font-family-mono-code{font-family:var(--token-typography-font-stack-code)}.hds-font-weight-regular{font-weight:400}.hds-font-weight-medium{font-weight:500}.hds-font-weight-semibold{font-weight:600}.hds-font-weight-bold{font-weight:700}.hds-typography-display-500{font-family:var(--token-typography-display-500-font-family);font-size:var(--token-typography-display-500-font-size);line-height:var(--token-typography-display-500-line-height);margin:0;padding:0}.hds-typography-display-400{font-family:var(--token-typography-display-400-font-family);font-size:var(--token-typography-display-400-font-size);line-height:var(--token-typography-display-400-line-height);margin:0;padding:0}.hds-typography-display-300{font-family:var(--token-typography-display-300-font-family);font-size:var(--token-typography-display-300-font-size);line-height:var(--token-typography-display-300-line-height);margin:0;padding:0}.hds-typography-display-200{font-family:var(--token-typography-display-200-font-family);font-size:var(--token-typography-display-200-font-size);line-height:var(--token-typography-display-200-line-height);margin:0;padding:0}.hds-typography-display-100{font-family:var(--token-typography-display-100-font-family);font-size:var(--token-typography-display-100-font-size);line-height:var(--token-typography-display-100-line-height);margin:0;padding:0}.hds-typography-body-300{font-family:var(--token-typography-body-300-font-family);font-size:var(--token-typography-body-300-font-size);line-height:var(--token-typography-body-300-line-height);margin:0;padding:0}.hds-typography-body-200{font-family:var(--token-typography-body-200-font-family);font-size:var(--token-typography-body-200-font-size);line-height:var(--token-typography-body-200-line-height);margin:0;padding:0}.hds-typography-body-100{font-family:var(--token-typography-body-100-font-family);font-size:var(--token-typography-body-100-font-size);line-height:var(--token-typography-body-100-line-height);margin:0;padding:0}.hds-typography-code-100{font-family:var(--token-typography-code-100-font-family);font-size:var(--token-typography-code-100-font-size);line-height:var(--token-typography-code-100-line-height);margin:0;padding:0}.hds-alert{display:flex;align-items:flex-start}.hds-alert__icon{flex:none;width:20px;height:20px;margin-right:12px}.hds-alert__content{flex:1 1 auto}.hds-alert__text{display:flex;flex-direction:column;justify-content:center;font-size:var(--token-typography-body-200-font-size);font-family:var(--token-typography-body-200-font-family);line-height:var(--token-typography-body-200-line-height)}.hds-alert--type-compact .hds-alert__text,.hds-pagination-size-selector>select{font-size:var(--token-typography-body-100-font-size);font-family:var(--token-typography-body-100-font-family);line-height:var(--token-typography-body-100-line-height)}.hds-alert__title{font-weight:var(--token-typography-font-weight-semibold)}.hds-alert__description{color:var(--token-color-foreground-primary);font-weight:var(--token-typography-font-weight-regular);word-break:break-word}.hds-alert__title+.hds-alert__description{margin-top:4px}.hds-alert__description strong{font-weight:var(--token-typography-font-weight-semibold)}.hds-badge-count,.hds-badge__text,.hds-link-standalone{font-weight:var(--token-typography-font-weight-medium)}.hds-alert__description code,.hds-alert__description pre{display:inline;padding:1px 5px;font-size:.9em;font-family:var(--token-typography-code-100-font-family);line-height:1em;background-color:var(--token-color-surface-primary);border:1px solid var(--token-color-palette-neutral-200);border-radius:5px}.hds-badge-count,.hds-badge__text,.hds-breadcrumb__text,.hds-button,.hds-link-standalone,.hds-stepper-indicator-step__text,.hds-tag{font-family:var(--token-typography-font-stack-text)}.hds-alert__description a{color:var(--token-color-foreground-action)}.hds-alert__description a:focus,.hds-alert__description a:focus-visible{text-decoration:none;outline:var(--token-color-focus-action-internal) solid 2px;outline-offset:1px}.hds-alert__description a:hover{color:var(--token-color-foreground-action-hover)}.hds-alert__description a:active{color:var(--token-color-foreground-action-active)}.hds-alert__actions{display:flex;align-items:center}.hds-alert--type-compact .hds-alert__title,button.hds-button[href] .hds-button__text,button.hds-button[href]::before{display:none}.hds-alert__actions>*{margin-top:16px}.hds-alert__actions>*+*{margin-left:8px}.hds-alert__dismiss{margin-top:2px;margin-left:16px}.hds-alert--type-compact .hds-alert__dismiss{margin-top:1px}.hds-alert--type-page{padding:16px 48px}.hds-alert--type-inline{padding:16px;border-style:solid;border-width:1px;border-radius:6px}.hds-alert--type-compact .hds-alert__icon{width:14px;height:14px;margin-top:2px;margin-right:8px}.hds-alert--type-compact .hds-alert__title+.hds-alert__description{margin-top:0}.hds-alert--color-neutral.hds-alert--type-page{background-color:var(--token-color-surface-faint);box-shadow:0 1px 0 0 var(--token-color-palette-alpha-300)}.hds-alert--color-neutral.hds-alert--type-inline{background-color:var(--token-color-surface-faint);border-color:var(--token-color-border-strong)}.hds-alert--color-neutral .hds-alert__icon{color:var(--token-color-foreground-faint)}.hds-alert--color-neutral .hds-alert__title{color:var(--token-color-foreground-primary)}.hds-alert--color-highlight.hds-alert--type-page{background-color:var(--token-color-surface-highlight);box-shadow:0 1px 0 0 var(--token-color-border-highlight)}.hds-alert--color-highlight.hds-alert--type-inline{background-color:var(--token-color-surface-highlight);border-color:var(--token-color-border-highlight)}.hds-alert--color-highlight .hds-alert__icon,.hds-alert--color-highlight .hds-alert__title{color:var(--token-color-foreground-highlight-on-surface)}.hds-alert--color-success.hds-alert--type-page{background-color:var(--token-color-surface-success);box-shadow:0 1px 0 0 var(--token-color-border-success)}.hds-alert--color-success.hds-alert--type-inline{background-color:var(--token-color-surface-success);border-color:var(--token-color-border-success)}.hds-alert--color-success .hds-alert__icon,.hds-alert--color-success .hds-alert__title{color:var(--token-color-foreground-success-on-surface)}.hds-alert--color-warning.hds-alert--type-page{background-color:var(--token-color-surface-warning);box-shadow:0 1px 0 0 var(--token-color-border-warning)}.hds-alert--color-warning.hds-alert--type-inline{background-color:var(--token-color-surface-warning);border-color:var(--token-color-border-warning)}.hds-alert--color-warning .hds-alert__icon,.hds-alert--color-warning .hds-alert__title{color:var(--token-color-foreground-warning-on-surface)}.hds-alert--color-critical.hds-alert--type-page{background-color:var(--token-color-surface-critical);box-shadow:0 1px 0 0 var(--token-color-border-critical)}.hds-alert--color-critical.hds-alert--type-inline{background-color:var(--token-color-surface-critical);border-color:var(--token-color-border-critical)}.hds-alert--color-critical .hds-alert__icon,.hds-alert--color-critical .hds-alert__title{color:var(--token-color-foreground-critical-on-surface)}.hds-avatar{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;width:32px;height:32px}.hds-avatar svg,.hds-form-toggle{display:inline-block}.hds-avatar img{width:inherit;height:inherit;border-radius:2px}.hds-badge{display:inline-flex;align-items:center;max-width:100%;vertical-align:middle;border:1px solid transparent;border-radius:5px}.hds-badge__icon{display:block;flex:0 0 auto}.hds-badge__text{flex:1 0 0}.hds-badge--size-small{min-height:1.25rem;padding:calc(.125rem - 1px) calc(.375rem - 1px)}.hds-badge--size-small .hds-badge__icon{width:.75rem;height:.75rem}.hds-badge--size-large .hds-badge__icon,.hds-badge--size-medium .hds-badge__icon{width:1rem;height:1rem}.hds-badge--size-small .hds-badge__text{font-size:.8125rem;line-height:1.2308}.hds-badge--size-small .hds-badge__icon+.hds-badge__text{-webkit-margin-start:.25rem;margin-inline-start:.25rem}.hds-badge--size-medium{min-height:1.5rem;padding:calc(.25rem - 1px) calc(.5rem - 1px)}.hds-badge--size-medium .hds-badge__text{font-size:.8125rem;line-height:1.2308}.hds-badge--size-medium .hds-badge__icon+.hds-badge__text{-webkit-margin-start:.25rem;margin-inline-start:.25rem}.hds-badge--size-large{min-height:2rem;padding:calc(.25rem - 1px) calc(.5rem - 1px)}.hds-badge--size-large .hds-badge__text{font-size:1rem;line-height:1.5}.hds-badge--size-large .hds-badge__icon+.hds-badge__text{-webkit-margin-start:.375rem;margin-inline-start:.375rem}.hds-badge--color-neutral.hds-badge--type-filled{color:var(--token-color-foreground-primary);background-color:var(--token-color-surface-strong)}.hds-badge--color-neutral.hds-badge--type-inverted{color:var(--token-color-foreground-high-contrast);background-color:var(--token-color-foreground-faint)}.hds-badge--color-neutral.hds-badge--type-outlined{color:var(--token-color-foreground-primary);background-color:transparent;border-color:var(--token-color-foreground-faint)}.hds-badge--color-neutral-dark-mode.hds-badge--type-filled{color:var(--token-color-foreground-high-contrast);background-color:var(--token-color-foreground-faint)}.hds-badge--color-neutral-dark-mode.hds-badge--type-inverted{color:var(--token-color-foreground-primary);background-color:var(--token-color-surface-faint)}.hds-badge--color-neutral-dark-mode.hds-badge--type-outlined{color:var(--token-color-foreground-high-contrast);background-color:transparent;border-color:var(--token-color-palette-neutral-100)}.hds-badge--color-highlight.hds-badge--type-filled{color:var(--token-color-foreground-highlight-on-surface);background-color:var(--token-color-surface-highlight)}.hds-badge--color-highlight.hds-badge--type-inverted{color:var(--token-color-foreground-high-contrast);background-color:var(--token-color-foreground-highlight)}.hds-badge--color-highlight.hds-badge--type-outlined{color:var(--token-color-foreground-highlight);background-color:transparent;border-color:currentColor}.hds-badge--color-success.hds-badge--type-filled{color:var(--token-color-foreground-success-on-surface);background-color:var(--token-color-surface-success)}.hds-badge--color-success.hds-badge--type-inverted{color:var(--token-color-foreground-high-contrast);background-color:var(--token-color-foreground-success)}.hds-badge--color-success.hds-badge--type-outlined{color:var(--token-color-foreground-success);background-color:transparent;border-color:currentColor}.hds-badge--color-warning.hds-badge--type-filled{color:var(--token-color-foreground-warning-on-surface);background-color:var(--token-color-surface-warning)}.hds-badge--color-warning.hds-badge--type-inverted{color:var(--token-color-foreground-high-contrast);background-color:var(--token-color-foreground-warning)}.hds-badge--color-warning.hds-badge--type-outlined{color:var(--token-color-foreground-warning);background-color:transparent;border-color:currentColor}.hds-badge--color-critical.hds-badge--type-filled{color:var(--token-color-foreground-critical-on-surface);background-color:var(--token-color-surface-critical)}.hds-badge--color-critical.hds-badge--type-inverted{color:var(--token-color-foreground-high-contrast);background-color:var(--token-color-foreground-critical)}.hds-badge--color-critical.hds-badge--type-outlined{color:var(--token-color-foreground-critical);background-color:transparent;border-color:currentColor}.hds-badge-count{display:inline-flex;align-items:center;max-width:100%;border:1px solid transparent}.hds-badge-count--size-small{min-height:1.25rem;padding:calc(.125rem - 1px) calc(.5rem - 1px);font-size:.8125rem;line-height:1.2308;border-radius:.625rem}.hds-badge-count--size-medium{min-height:1.5rem;padding:calc(.25rem - 1px) calc(.75rem - 1px);font-size:.8125rem;line-height:1.2308;border-radius:.75rem}.hds-badge-count--size-large{min-height:2rem;padding:calc(.25rem - 1px) calc(.875rem - 1px);font-size:1rem;line-height:1.5;border-radius:1rem}.hds-breadcrumb__list,.hds-breadcrumb__sublist{margin:0;padding:0;list-style:none}.hds-badge-count--color-neutral.hds-badge-count--type-filled{color:var(--token-color-foreground-primary);background-color:var(--token-color-surface-strong)}.hds-badge-count--color-neutral.hds-badge-count--type-inverted{color:var(--token-color-foreground-high-contrast);background-color:var(--token-color-foreground-faint)}.hds-badge-count--color-neutral.hds-badge-count--type-outlined{color:var(--token-color-foreground-primary);background-color:transparent;border-color:var(--token-color-foreground-faint)}.hds-badge-count--color-neutral-dark-mode.hds-badge-count--type-filled{color:var(--token-color-foreground-high-contrast);background-color:var(--token-color-foreground-faint)}.hds-badge-count--color-neutral-dark-mode.hds-badge-count--type-inverted{color:var(--token-color-foreground-primary);background-color:var(--token-color-surface-faint)}.hds-badge-count--color-neutral-dark-mode.hds-badge-count--type-outlined{color:var(--token-color-foreground-high-contrast);background-color:transparent;border-color:var(--token-color-palette-neutral-100)}.hds-breadcrumb__list{display:flex}.hds-breadcrumb--items-can-wrap .hds-breadcrumb__list{flex-wrap:wrap}.hds-breadcrumb__item{display:flex;flex-direction:row;align-items:center;min-width:0}.hds-breadcrumb__list>.hds-breadcrumb__item:not(:last-child)::after{padding:0 8px;color:var(--token-color-palette-neutral-300);content:"/"}.hds-breadcrumb__sublist>.hds-breadcrumb__item+.hds-breadcrumb__item{margin-top:4px}.hds-breadcrumb__item--is-truncation{flex:none}.hds-breadcrumb__link{display:flex;flex-direction:row;align-items:center;min-width:0;margin:0 -4px;padding:0 4px;color:var(--token-color-foreground-faint);border-radius:5px;-webkit-text-decoration-color:transparent;text-decoration-color:transparent;outline-style:solid;outline-color:transparent}.hds-breadcrumb__link.mock-active>.hds-breadcrumb__text,.hds-breadcrumb__link.mock-hover>.hds-breadcrumb__text,.hds-breadcrumb__link:active>.hds-breadcrumb__text,.hds-breadcrumb__link:hover>.hds-breadcrumb__text{-webkit-text-decoration-color:currentColor;text-decoration-color:currentColor}.hds-breadcrumb__link.mock-hover,.hds-breadcrumb__link:hover{color:var(--token-color-palette-neutral-600)}.hds-breadcrumb__link:focus:not(:focus-visible){box-shadow:none}.hds-breadcrumb__link:focus-visible{box-shadow:var(--token-focus-ring-action-box-shadow)}.hds-breadcrumb__link.mock-focus.mock-active,.hds-breadcrumb__link:focus:active{box-shadow:none}.hds-breadcrumb__link.mock-active,.hds-breadcrumb__link:active{color:var(--token-color-foreground-secondary)}.hds-breadcrumb__text,.hds-link-standalone,.hds-link-standalone__text{-webkit-text-decoration-color:transparent;text-decoration-color:transparent}.hds-breadcrumb__current{display:flex;flex-direction:row;align-items:center;min-width:0;margin:0 -4px;padding:0 4px;color:var(--token-color-foreground-strong)}.consul-exposed-path-list>ul>li>.detail,.consul-exposed-path-list>ul>li>.header>dl:first-child,.consul-lock-session-list ul>li:not(:first-child)>.detail,.consul-lock-session-list ul>li:not(:first-child)>.header>dl:first-child,.consul-upstream-instance-list li>.detail,.consul-upstream-instance-list li>.header>dl:first-child,.hds-breadcrumb__icon,.hds-pagination-nav__arrow--direction-next .hds-pagination-nav__arrow-label,.list-collection>ul>li:not(:first-child)>.detail,.list-collection>ul>li:not(:first-child)>.header>dl:first-child{margin-right:6px}.hds-breadcrumb__icon{flex:none;width:13px;height:13px}.hds-breadcrumb__text{padding:calc((28px - 1rem)/ 2) 0;overflow:hidden;font-size:.8125rem;line-height:1rem;white-space:nowrap;text-decoration:underline;text-overflow:ellipsis}.hds-breadcrumb__sublist .hds-breadcrumb__text{white-space:normal}.hds-breadcrumb__truncation-toggle{display:flex;flex:none;align-items:center;justify-content:center;width:28px;height:28px;margin:0 -4px;padding:0;color:var(--token-color-foreground-faint);background-color:transparent;border:1px solid transparent;border-radius:5px;outline:transparent solid 0;cursor:pointer}.hds-button,.hds-dismiss-button,.hds-dropdown-list-item--copy-item button,.hds-dropdown-list-item--interactive a,.hds-dropdown-list-item--interactive button,.hds-dropdown-toggle-icon{outline-style:solid;outline-color:transparent}.hds-breadcrumb__truncation-toggle.mock-hover,.hds-breadcrumb__truncation-toggle:hover{color:var(--token-color-foreground-faint);border-color:var(--token-color-border-strong)}.hds-breadcrumb__truncation-toggle.mock-focus,.hds-breadcrumb__truncation-toggle:focus{box-shadow:var(--token-focus-ring-action-box-shadow);background-color:transparent;border:none}.hds-breadcrumb__truncation-toggle:focus:not(:focus-visible){box-shadow:none}.hds-breadcrumb__truncation-toggle:focus-visible,.hds-dismiss-button.mock-focus::before,.hds-dismiss-button:focus::before{box-shadow:var(--token-focus-ring-action-box-shadow)}.hds-breadcrumb__truncation-toggle.mock-focus.mock-active,.hds-breadcrumb__truncation-toggle:focus:active{box-shadow:none}.hds-breadcrumb__truncation-toggle.mock-active,.hds-breadcrumb__truncation-toggle:active{color:var(--token-color-foreground-primary);background-color:var(--token-color-surface-interactive-active);border-color:var(--token-color-border-strong)}.hds-breadcrumb__truncation-content{position:absolute;top:100%;left:-4px;z-index:300;width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:200px;margin-top:4px;padding:6px 12px;background-color:var(--token-color-surface-primary);border-radius:6px;box-shadow:var(--token-surface-high-box-shadow)}.hds-button{position:relative;display:flex;align-items:center;justify-content:center;width:auto;text-decoration:none;border:1px solid transparent;border-radius:5px;isolation:isolate}.hds-disclosure,.hds-form-field--layout-vertical .hds-form-field__label,a.hds-button{width:-webkit-fit-content;width:-moz-fit-content}a.hds-button{width:fit-content}a.hds-button.mock-active,a.hds-button.mock-focus,a.hds-button.mock-hover,a.hds-button:active,a.hds-button:focus,a.hds-button:hover{text-decoration:underline}.hds-button.mock-disabled,.hds-button.mock-disabled:focus,.hds-button.mock-disabled:hover,.hds-button:disabled,.hds-button:disabled:focus,.hds-button:disabled:hover,.hds-button[disabled],.hds-button[disabled]:focus,.hds-button[disabled]:hover{color:var(--token-color-foreground-disabled);background-color:var(--token-color-surface-faint);border-color:var(--token-color-border-primary);box-shadow:none;cursor:not-allowed}.hds-button.mock-disabled::before,.hds-button.mock-disabled:focus::before,.hds-button.mock-disabled:hover::before,.hds-button:disabled::before,.hds-button:disabled:focus::before,.hds-button:disabled:hover::before,.hds-button[disabled]::before,.hds-button[disabled]:focus::before,.hds-button[disabled]:hover::before{border-color:transparent}.hds-button.hds-button--width-full{width:100%;max-width:100%}.hds-button.hds-button--width-full .hds-button__text{flex:0 0 auto}.hds-button__text,.hds-form-group--radio-cards .hds-form-radio-card--layout-fluid{flex:1 0 0}.hds-button.mock-focus,.hds-button:focus{box-shadow:none}.hds-button.mock-focus::before,.hds-button:focus::before{position:absolute;top:-4px;right:-4px;bottom:-4px;left:-4px;z-index:-1;border:3px solid transparent;border-radius:8px;content:""}.hds-button__icon+.hds-button__text,.hds-button__text+.hds-button__icon{margin-left:.375rem}.hds-button--size-small{min-height:1.75rem;padding:.375rem .6875rem}.hds-button--size-small .hds-button__icon{width:.75rem;height:.75rem}.hds-button--size-small .hds-button__text{font-size:.8125rem;line-height:.875rem}.hds-button--size-medium{min-height:2.25rem;padding:.5625rem .9375rem}.hds-button--size-medium .hds-button__icon{width:1rem;height:1rem}.hds-button--size-medium .hds-button__text{font-size:.875rem;line-height:1rem}.hds-button--size-large{min-height:3rem;padding:.6875rem 1.1875rem}.hds-button--size-large .hds-button__icon{width:1.5rem;height:1.5rem}.hds-button--size-large .hds-button__text{font-size:1rem;line-height:1.5rem}.hds-button--color-primary{color:var(--token-color-foreground-high-contrast);background-color:var(--token-color-palette-blue-200);border-color:var(--token-color-palette-blue-300);box-shadow:var(--token-elevation-low-box-shadow)}.hds-button--color-primary.mock-hover,.hds-button--color-primary:hover{color:var(--token-color-foreground-high-contrast);background-color:var(--token-color-palette-blue-300);border-color:var(--token-color-palette-blue-400);cursor:pointer}.hds-button--color-primary.mock-focus,.hds-button--color-primary:focus{color:var(--token-color-foreground-high-contrast);background-color:var(--token-color-palette-blue-200);border-color:var(--token-color-focus-action-internal)}.hds-button--color-primary.mock-focus::before,.hds-button--color-primary:focus::before{top:-6px;right:-6px;bottom:-6px;left:-6px;border-color:var(--token-color-focus-action-external);border-radius:10px}.hds-button--color-primary.mock-active,.hds-button--color-primary:active{color:var(--token-color-foreground-high-contrast);background-color:var(--token-color-palette-blue-400);border-color:var(--token-color-palette-blue-400);box-shadow:none}.hds-button--color-primary.mock-active::before,.hds-button--color-primary:active::before{border-color:transparent}.hds-button--color-secondary{color:var(--token-color-foreground-primary);background-color:var(--token-color-surface-faint);border-color:var(--token-color-border-strong);box-shadow:var(--token-elevation-low-box-shadow)}.hds-button--color-secondary.mock-hover,.hds-button--color-secondary:hover{color:var(--token-color-foreground-primary);background-color:var(--token-color-surface-primary);border-color:var(--token-color-border-strong);cursor:pointer}.hds-button--color-secondary.mock-focus,.hds-button--color-secondary:focus{color:var(--token-color-foreground-primary);background-color:var(--token-color-surface-faint);border-color:var(--token-color-focus-action-internal)}.hds-button--color-secondary.mock-focus::before,.hds-button--color-secondary:focus::before{border-color:var(--token-color-focus-action-external)}.hds-button--color-secondary.mock-active,.hds-button--color-secondary:active{color:var(--token-color-foreground-primary);background-color:var(--token-color-surface-interactive-active);border-color:var(--token-color-border-strong);box-shadow:none}.hds-button--color-secondary.mock-active::before,.hds-button--color-secondary:active::before{border-color:transparent}.hds-button--color-tertiary{color:var(--token-color-foreground-action);background-color:transparent;border-color:transparent}.hds-button--color-tertiary.mock-hover,.hds-button--color-tertiary:hover{color:var(--token-color-foreground-action-hover);background-color:var(--token-color-surface-primary);border-color:var(--token-color-border-strong);cursor:pointer}.hds-button--color-tertiary.mock-focus,.hds-button--color-tertiary:focus{color:var(--token-color-foreground-action);border-color:var(--token-color-focus-action-internal)}.hds-button--color-tertiary.mock-focus::before,.hds-button--color-tertiary:focus::before{border-color:var(--token-color-focus-action-external)}.hds-button--color-tertiary.mock-active,.hds-button--color-tertiary:active{color:var(--token-color-foreground-action-active);background-color:var(--token-color-surface-interactive-active);border-color:var(--token-color-border-strong);box-shadow:none}.hds-button--color-tertiary.mock-active::before,.hds-button--color-tertiary:active::before{border-color:transparent}.hds-button--color-tertiary.mock-disabled,.hds-button--color-tertiary.mock-disabled:focus,.hds-button--color-tertiary.mock-disabled:hover,.hds-button--color-tertiary:disabled,.hds-button--color-tertiary:disabled:focus,.hds-button--color-tertiary:disabled:hover,.hds-button--color-tertiary[disabled],.hds-button--color-tertiary[disabled]:focus,.hds-button--color-tertiary[disabled]:hover{background-color:transparent;border-color:transparent}.hds-button--color-tertiary.mock-disabled::before,.hds-button--color-tertiary.mock-disabled:focus::before,.hds-button--color-tertiary.mock-disabled:hover::before,.hds-button--color-tertiary:disabled::before,.hds-button--color-tertiary:disabled:focus::before,.hds-button--color-tertiary:disabled:hover::before,.hds-button--color-tertiary[disabled]::before,.hds-button--color-tertiary[disabled]:focus::before,.hds-button--color-tertiary[disabled]:hover::before{border-color:transparent}.hds-button--color-critical{color:var(--token-color-foreground-critical-on-surface);background-color:var(--token-color-surface-critical);border-color:var(--token-color-foreground-critical-on-surface);box-shadow:var(--token-elevation-low-box-shadow)}.hds-button--color-critical.mock-hover,.hds-button--color-critical:hover{color:var(--token-color-foreground-high-contrast);background-color:var(--token-color-palette-red-300);border-color:var(--token-color-palette-red-400);cursor:pointer}.hds-button--color-critical.mock-focus,.hds-button--color-critical:focus{color:var(--token-color-foreground-critical-on-surface);background-color:var(--token-color-surface-critical);border-color:var(--token-color-focus-critical-internal)}.hds-button--color-critical.mock-focus::before,.hds-button--color-critical:focus::before{border-color:var(--token-color-focus-critical-external)}.hds-button--color-critical.mock-active,.hds-button--color-critical:active{color:var(--token-color-foreground-high-contrast);background-color:var(--token-color-palette-red-400);border-color:var(--token-color-palette-red-400);box-shadow:none}.hds-button--color-critical.mock-active::before,.hds-button--color-critical:active::before{border-color:transparent}button.hds-button[href]{color:#fff!important;background-color:red!important;border:none}button.hds-button[href]::after{content:' Attention: you’re passing a "href" attribute to the "Hds::Button" component, you should use an "@href" argument.'}.hds-button-set{display:flex}.hds-button-set>*+*{margin-left:16px}.hds-card__container{position:relative;background-color:#fff;border-radius:6px}.hds-card__container--level-surface-base{box-shadow:var(--token-surface-base-box-shadow)}.hds-card__container--level-surface-mid{box-shadow:var(--token-surface-mid-box-shadow)}.hds-card__container--level-surface-high{box-shadow:var(--token-surface-high-box-shadow)}.hds-card__container--hover-level-surface-base.mock-hover,.hds-card__container--hover-level-surface-base:hover{box-shadow:var(--token-surface-base-box-shadow)}.hds-card__container--hover-level-surface-mid.mock-hover,.hds-card__container--hover-level-surface-mid:hover{box-shadow:var(--token-surface-mid-box-shadow)}.hds-card__container--hover-level-surface-high.mock-hover,.hds-card__container--hover-level-surface-high:hover{box-shadow:var(--token-surface-high-box-shadow)}.hds-card__container--active-level-surface-base.mock-active,.hds-card__container--active-level-surface-base:active{box-shadow:var(--token-surface-base-box-shadow)}.hds-card__container--active-level-surface-mid.mock-active,.hds-card__container--active-level-surface-mid:active{box-shadow:var(--token-surface-mid-box-shadow)}.hds-card__container--active-level-surface-high.mock-active,.hds-card__container--active-level-surface-high:active{box-shadow:var(--token-surface-high-box-shadow)}.hds-card__container--level-elevation-base{box-shadow:var(--token-elevation-base-box-shadow)}.hds-card__container--level-elevation-mid{box-shadow:var(--token-elevation-mid-box-shadow)}.hds-card__container--level-elevation-high{box-shadow:var(--token-elevation-high-box-shadow)}.hds-card__container--hover-level-elevation-base.mock-hover,.hds-card__container--hover-level-elevation-base:hover{box-shadow:var(--token-elevation-base-box-shadow)}.hds-card__container--hover-level-elevation-mid.mock-hover,.hds-card__container--hover-level-elevation-mid:hover{box-shadow:var(--token-elevation-mid-box-shadow)}.hds-card__container--hover-level-elevation-high.mock-hover,.hds-card__container--hover-level-elevation-high:hover{box-shadow:var(--token-elevation-high-box-shadow)}.hds-card__container--active-level-elevation-base.mock-active,.hds-card__container--active-level-elevation-base:active{box-shadow:var(--token-elevation-base-box-shadow)}.hds-card__container--active-level-elevation-mid.mock-active,.hds-card__container--active-level-elevation-mid:active{box-shadow:var(--token-elevation-mid-box-shadow)}.hds-card__container--active-level-elevation-high.mock-active,.hds-card__container--active-level-elevation-high:active{box-shadow:var(--token-elevation-high-box-shadow)}.hds-card__container--background-neutral-primary{background-color:var(--token-color-surface-primary)}.hds-card__container--background-neutral-secondary{background-color:var(--token-color-surface-faint)}.hds-card__container--overflow-hidden{overflow:hidden}.hds-card__container--overflow-visible{overflow:visible}.hds-disclosure{position:relative;width:fit-content}.hds-dismiss-button{flex:none;padding:0;color:var(--token-color-foreground-faint);background-color:transparent;border:none;cursor:pointer;position:relative;isolation:isolate}.hds-dismiss-button.mock-hover::before,.hds-dismiss-button:hover::before{background-color:rgba(222,223,227,.4)}.hds-dismiss-button::before{position:absolute;top:-4px;right:-4px;bottom:-4px;left:-4px;z-index:-1;border-radius:5px;content:""}.hds-dismiss-button:focus:not(:focus-visible)::before{box-shadow:none}.hds-dismiss-button:focus-visible::before{box-shadow:var(--token-focus-ring-action-box-shadow)}.hds-dismiss-button.mock-focus.mock-active::before,.hds-dismiss-button:focus:active::before{box-shadow:none}.hds-dismiss-button.mock-active,.hds-dismiss-button:active{color:var(--token-color-foreground-secondary)}.hds-dismiss-button.mock-active::before,.hds-dismiss-button:active::before{background-color:rgba(222,223,227,.4);border:1px solid var(--token-color-border-strong)}.hds-dropdown-toggle-icon{display:flex;align-items:center;justify-content:center;min-width:36px;height:36px;padding:1px;background-color:transparent;border:1px solid transparent;border-radius:5px;position:relative;isolation:isolate}.hds-dropdown-toggle-icon.mock-hover,.hds-dropdown-toggle-icon:hover{background-color:var(--token-color-surface-interactive);border-color:var(--token-color-border-strong);cursor:pointer}.hds-dropdown-toggle-icon::before{position:absolute;top:-1px;right:-1px;bottom:-1px;left:-1px;z-index:-1;border-radius:5px;content:""}.hds-dropdown-toggle-icon.mock-focus::before,.hds-dropdown-toggle-icon:focus::before{box-shadow:var(--token-focus-ring-action-box-shadow)}.hds-dropdown-toggle-icon:focus:not(:focus-visible)::before{box-shadow:none}.hds-dropdown-toggle-icon:focus-visible::before{box-shadow:var(--token-focus-ring-action-box-shadow)}.hds-dropdown-toggle-button,.hds-dropdown-toggle-icon.mock-focus.mock-active::before,.hds-dropdown-toggle-icon:focus:active::before{box-shadow:none}.hds-dropdown-toggle-icon.mock-active,.hds-dropdown-toggle-icon:active{background-color:var(--token-color-surface-interactive-active);border-color:var(--token-color-border-strong)}.hds-dropdown-toggle-icon__wrapper{display:flex;align-items:center;justify-content:center;width:32px;height:32px;padding:1px;border-radius:3px}.hds-dropdown-toggle-icon__wrapper img{width:100%;height:100%;-o-object-fit:cover;object-fit:cover;border-radius:inherit}.hds-dropdown-toggle-icon__chevron{margin-left:4px}.hds-dropdown-toggle-icon--is-open .hds-dropdown-toggle-icon__chevron{transform:rotate(-180deg)}.hds-dropdown-toggle-button .hds-button__icon{margin-right:-6px;margin-left:8px}@media (prefers-reduced-motion:no-preference){.hds-dropdown-toggle-button .hds-button__icon,.hds-dropdown-toggle-icon__chevron{transition:transform .3s}}.hds-dropdown-toggle-button--is-open .hds-button__icon{transform:rotate(-180deg)}.hds-dropdown-list{width:-webkit-max-content;width:-moz-max-content;width:max-content;min-width:200px;max-width:400px;margin:0;padding:4px 0;list-style:none;background-color:var(--token-color-surface-primary);border-radius:6px;box-shadow:var(--token-surface-high-box-shadow)}.hds-dropdown-list--fixed-width{min-width:initial;max-width:initial}.hds-dropdown-list--position-right{position:absolute;top:calc(100% + 4px);right:0;z-index:2}.hds-dropdown-list--position-left{position:absolute;top:calc(100% + 4px);left:0;z-index:2}.hds-dropdown-list-item__copy-item-title{padding:2px 0 4px;color:var(--token-color-foreground-faint)}.hds-dropdown-list-item--copy-item{width:100%;padding:10px 16px 12px}.hds-dropdown-list-item--copy-item button{display:flex;justify-content:space-between;width:100%;padding:12px 8px;color:var(--token-color-foreground-primary);background-color:transparent;border:1px solid var(--token-color-border-primary);border-radius:5px}.hds-dropdown-list-item--copy-item button.mock-hover,.hds-dropdown-list-item--copy-item button:hover{background-color:var(--token-color-surface-interactive-hover);cursor:pointer}.hds-dropdown-list-item--copy-item button.mock-focus,.hds-dropdown-list-item--copy-item button:focus{box-shadow:var(--token-focus-ring-action-box-shadow);background-color:var(--token-color-surface-action);border-color:var(--token-color-focus-action-internal)}.hds-dropdown-list-item--copy-item button:focus:not(:focus-visible){box-shadow:none}.hds-dropdown-list-item--copy-item button:focus-visible{box-shadow:var(--token-focus-ring-action-box-shadow)}.hds-dropdown-list-item--copy-item button.mock-focus.mock-active,.hds-dropdown-list-item--copy-item button:focus:active{box-shadow:none}.hds-dropdown-list-item--copy-item button.mock-active,.hds-dropdown-list-item--copy-item button:active{background-color:var(--token-color-surface-interactive-active)}.hds-dropdown-list-item--copy-item button.is-success{background-color:var(--token-color-surface-success);border-color:var(--token-color-border-success)}.hds-dropdown-list-item--copy-item button.is-success .hds-dropdown-list-item__copy-item-icon{color:var(--token-color-foreground-success)}.hds-dropdown-list-item__copy-item-text{overflow:hidden;white-space:nowrap;text-align:left;text-overflow:ellipsis}.hds-dropdown-list-item__copy-item-icon{flex:none;margin-left:8px;color:var(--token-color-foreground-action)}.hds-dropdown-list-item--description{padding:2px 16px 4px;color:var(--token-color-foreground-faint)}.hds-dropdown-list-item--generic{padding-right:16px;padding-left:16px}.hds-dropdown-list-item--interactive{position:relative;min-height:36px;isolation:isolate}.hds-dropdown-list-item--interactive button{width:100%;background-color:transparent}.hds-dropdown-list-item--interactive button:hover{cursor:pointer}.hds-dropdown-list-item--interactive a,.hds-dropdown-list-item--interactive button{display:flex;align-items:center;padding:7px 9px 7px 15px;text-decoration:none;border:1px solid transparent}.hds-dropdown-list-item--interactive a::before,.hds-dropdown-list-item--interactive button::before{position:absolute;top:6px;bottom:6px;left:4px;z-index:-1;width:2px;border-radius:1px;content:""}.hds-dropdown-list-item--interactive a::after,.hds-dropdown-list-item--interactive button::after{position:absolute;top:0;right:4px;bottom:0;left:10px;z-index:-1;border-radius:5px;content:""}.hds-dropdown-list-item--interactive a.mock-hover,.hds-dropdown-list-item--interactive a:hover,.hds-dropdown-list-item--interactive button.mock-hover,.hds-dropdown-list-item--interactive button:hover{color:var(--current-color-hover)}.hds-dropdown-list-item--interactive a.mock-focus,.hds-dropdown-list-item--interactive a:focus,.hds-dropdown-list-item--interactive a:focus-visible,.hds-dropdown-list-item--interactive button.mock-focus,.hds-dropdown-list-item--interactive button:focus,.hds-dropdown-list-item--interactive button:focus-visible{color:var(--current-color-focus)}.hds-dropdown-list-item--interactive a.mock-hover::before,.hds-dropdown-list-item--interactive a:hover::before,.hds-dropdown-list-item--interactive button.mock-hover::before,.hds-dropdown-list-item--interactive button:hover::before{background-color:currentColor}.hds-dropdown-list-item--interactive a.mock-focus::after,.hds-dropdown-list-item--interactive a:focus::after,.hds-dropdown-list-item--interactive button.mock-focus::after,.hds-dropdown-list-item--interactive button:focus::after{left:4px;background-color:var(--current-background-color);box-shadow:var(--current-focus-ring-box-shadow)}.hds-dropdown-list-item--interactive a:focus:not(:focus-visible)::after,.hds-dropdown-list-item--interactive button:focus:not(:focus-visible)::after{background-color:transparent;box-shadow:none}.hds-dropdown-list-item--interactive a:focus-visible::after,.hds-dropdown-list-item--interactive button:focus-visible::after{left:4px;background-color:var(--current-background-color);box-shadow:var(--current-focus-ring-box-shadow)}.hds-dropdown-list-item--interactive a.mock-focus.mock-active::after,.hds-dropdown-list-item--interactive a:focus-visible:active::after,.hds-dropdown-list-item--interactive a:focus:active::after,.hds-dropdown-list-item--interactive button.mock-focus.mock-active::after,.hds-dropdown-list-item--interactive button:focus-visible:active::after,.hds-dropdown-list-item--interactive button:focus:active::after{left:10px;background-color:var(--current-background-color);box-shadow:none}.hds-dropdown-list-item--interactive a.mock-active,.hds-dropdown-list-item--interactive a:active,.hds-dropdown-list-item--interactive button.mock-active,.hds-dropdown-list-item--interactive button:active{color:var(--current-color-active)}.hds-dropdown-list-item--interactive a.mock-active::before,.hds-dropdown-list-item--interactive a:active::before,.hds-dropdown-list-item--interactive button.mock-active::before,.hds-dropdown-list-item--interactive button:active::before{background-color:currentColor}.hds-dropdown-list-item--interactive a.mock-active::after,.hds-dropdown-list-item--interactive a:active::after,.hds-dropdown-list-item--interactive button.mock-active::after,.hds-dropdown-list-item--interactive button:active::after{background-color:var(--current-background-color)}.hds-dropdown-list-item__interactive-icon{margin-right:8px}.hds-dropdown-list-item__interactive-text{text-align:left}.hds-dropdown-list-item--color-action a,.hds-dropdown-list-item--color-action button{color:var(--token-color-foreground-primary);--current-color-hover:var(--token-color-foreground-action-hover);--current-color-focus:var(--token-color-foreground-action-active);--current-color-active:var(--token-color-foreground-action-active)}.hds-dropdown-list-item--color-action a::after,.hds-dropdown-list-item--color-action button::after{--current-background-color:var(--token-color-surface-action);--current-focus-ring-box-shadow:var(--token-focus-ring-action-box-shadow)}.hds-dropdown-list-item--color-critical a,.hds-dropdown-list-item--color-critical button{color:var(--token-color-foreground-critical);--current-color-hover:var(--token-color-palette-red-300);--current-color-focus:var(--token-color-palette-red-400);--current-color-active:var(--token-color-palette-red-400)}.hds-dropdown-list-item--color-critical a::after,.hds-dropdown-list-item--color-critical button::after{--current-background-color:var(--token-color-surface-critical);--current-focus-ring-box-shadow:var(--token-focus-ring-critical-box-shadow)}.hds-dropdown-list-item__interactive-loading-wrapper{display:flex;align-items:center;padding:8px 10px 8px 16px}.hds-dropdown-list-item__interactive-loading-wrapper .hds-dropdown-list-item__interactive-text{color:var(--token-color-foreground-faint)}.hds-dropdown-list-item__interactive-loading-wrapper .hds-dropdown-list-item__interactive-icon{color:var(--token-color-foreground-primary)}.hds-dropdown-list-item--separator{position:relative;width:100%;height:4px}.hds-dropdown-list-item--separator::before{position:absolute;right:6px;bottom:0;left:6px;border-bottom:1px solid var(--token-color-border-primary);content:""}.hds-dropdown-list-item--title{padding:10px 16px 4px;color:var(--token-color-foreground-strong)}.hds-empty-state{display:block;max-width:40ch;margin:0 auto;padding:0;color:var(--token-color-foreground-faint)}.hds-empty-state>*{margin:0;padding:0}.hds-empty-state__body{font-weight:400;font-size:1rem;line-height:1.5}.hds-empty-state__body+*{-webkit-margin-before:1rem;margin-block-start:1rem}.hds-empty-state__header{font-weight:700;font-size:1.25rem;line-height:1.2}.hds-flyout{z-index:49;flex-direction:column;height:100vh;max-height:100vh;margin:0;padding:0;background:var(--token-color-surface-primary);border:none;box-shadow:0 2px 3px 0 rgba(59,61,69,.2509803922),0 12px 24px 0 rgba(59,61,69,.3490196078)}.hds-flyout[open]{position:fixed;display:flex}.hds-flyout::-webkit-backdrop{display:none}.hds-flyout::backdrop{display:none}.hds-flyout__overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;background:var(--token-color-palette-neutral-700);opacity:.5}.hds-flyout__header{display:flex;flex:none;align-items:flex-start;padding:16px 24px;color:var(--token-color-foreground-strong)}.hds-flyout__icon{flex:none;align-self:center;margin-right:16px}.hds-flyout__title{flex-grow:1}.hds-flyout__tagline{margin-bottom:4px;color:var(--token-color-foreground-faint)}.hds-flyout__dismiss{align-self:center;margin-left:16px}.hds-flyout__description{padding:0 24px 16px;color:var(--token-color-foreground-primary)}.hds-flyout__body{flex:1 1 auto;padding:24px;overflow-y:auto;overscroll-behavior:contain;border-top:1px solid var(--token-color-border-primary)}.hds-flyout--size-medium{width:min(480px,100vw - 40px);max-width:calc(100vw - 40px)}.hds-flyout--size-medium[open]{margin-left:calc(100% - min(480px,100vw - 40px))}.hds-flyout--size-large{width:min(720px,100vw - 40px);max-width:calc(100vw - 40px)}.hds-flyout--size-large[open]{margin-left:calc(100% - min(720px,100vw - 40px))}.hds-form-label{display:block;width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:100%;color:var(--token-form-label-color)}.hds-form-label .hds-badge{vertical-align:initial}.hds-form-helper-text{display:block;color:var(--token-form-helper-text-color)}.hds-form-error{display:flex;align-items:flex-start;color:var(--token-form-error-color)}.hds-form-error__icon{flex:none;width:var(--token-form-error-icon-size);height:var(--token-form-error-icon-size);margin:2px 8px 2px 0}.hds-form-error__content{flex:1 1 auto}.hds-form-error__message{margin:0}.hds-form-field--layout-vertical{display:grid;justify-items:start;width:100%}.hds-form-field--layout-vertical .hds-form-field__label{width:fit-content}.hds-form-field--layout-vertical .hds-form-field__helper-text:not(:first-child){margin-top:4px}.hds-form-field--layout-vertical .hds-form-field__helper-text+.hds-form-helper-text{margin-top:2px}.hds-form-field--layout-vertical .hds-form-field__control:not(:first-child){margin-top:8px}.hds-form-field--layout-vertical .hds-form-field__control:not(:last-child){margin-bottom:8px}.hds-form-field--layout-flag{display:grid;grid-auto-flow:row;grid-template-areas:"control label" "control helper-text" "control error";grid-template-rows:auto auto auto;grid-template-columns:auto 1fr;justify-items:start}.hds-form-field--layout-flag .hds-form-field__label{grid-area:label;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.hds-form-field--layout-flag .hds-form-field__helper-text{grid-area:helper-text;margin-top:4px}.hds-form-field--layout-flag .hds-form-field__control{grid-area:control}.hds-form-field--layout-flag .hds-form-field__control:not(:only-child){margin-top:2px;margin-right:8px}.hds-form-field--layout-flag .hds-form-field__error{grid-area:error;margin-top:4px}.hds-form-legend{display:block;color:var(--token-form-legend-color)}.hds-form-legend .hds-badge{vertical-align:initial}.hds-form-group{display:block;margin:0;padding:0;border:none}.hds-form-checkbox,.hds-form-radio{padding:0;background-position:center center;border-style:solid}.hds-form-group__legend{margin:0 0 4px;padding:0}.hds-form-group__legend~.hds-form-group__control-fields-wrapper .hds-form-label{font-weight:var(--token-typography-font-weight-regular)}.hds-form-group--layout-vertical .hds-form-group__control-field+.hds-form-group__control-field{margin-top:12px}.hds-form-group--layout-horizontal .hds-form-group__control-fields-wrapper{display:flex;flex-wrap:wrap;margin-bottom:-4px}.hds-form-group--layout-horizontal .hds-form-group__control-field{margin-right:16px;margin-bottom:4px}.hds-form-group__helper-text{margin-bottom:8px}.hds-form-group__error{margin-top:8px}.hds-form-indicator--optional{color:var(--token-form-indicator-optional-color)}.hds-form-checkbox{width:var(--token-form-checkbox-size);height:var(--token-form-checkbox-size);margin:0;background-size:var(--token-form-checkbox-background-image-size) var(--token-form-checkbox-background-image-size);border-width:var(--token-form-checkbox-border-width);border-radius:var(--token-form-checkbox-border-radius);cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none}.hds-form-radio,.hds-form-select{-webkit-appearance:none;-moz-appearance:none}.hds-form-checkbox:not(:checked,:indeterminate){background-color:var(--token-form-control-base-surface-color-default);border-color:var(--token-form-control-base-border-color-default);box-shadow:var(--hds-elevation-inset-box-shadow)}.hds-form-checkbox:checked,.hds-form-checkbox:indeterminate{background-color:var(--token-form-control-checked-surface-color-default);border-color:var(--token-form-control-checked-border-color-default)}.hds-form-checkbox:checked{background-image:var(--token-form-checkbox-background-image-data-url)}.hds-form-checkbox:indeterminate{background-image:var(--token-form-checkbox-background-image-data-url-indeterminate)}.hds-form-checkbox.mock-hover:not(:checked,:indeterminate),.hds-form-checkbox:hover:not(:checked,:indeterminate){background-color:var(--token-form-control-base-surface-color-hover);border-color:var(--token-form-control-base-border-color-hover)}.hds-form-checkbox.mock-hover:checked,.hds-form-checkbox.mock-hover:indeterminate,.hds-form-checkbox:hover:checked,.hds-form-checkbox:hover:indeterminate{background-color:var(--token-form-control-checked-border-color-default);border-color:var(--token-form-control-checked-border-color-hover)}.hds-form-checkbox:disabled:checked,.hds-form-checkbox:disabled:indeterminate,.hds-form-checkbox:disabled:not(:checked,:indeterminate){background-color:var(--token-form-control-disabled-surface-color);border-color:var(--token-form-control-disabled-border-color);box-shadow:none;cursor:not-allowed}.hds-form-checkbox.mock-focus,.hds-form-checkbox:focus{outline:var(--token-color-focus-action-external) solid 3px;outline-offset:1px}.hds-form-checkbox:disabled:checked{background-image:var(--token-form-checkbox-background-image-data-url-disabled)}.hds-form-checkbox:disabled:indeterminate{background-image:var(--token-form-checkbox-background-image-data-url-indeterminate-disabled);background-repeat:no-repeat}.hds-form-radio{width:var(--token-form-radio-size);height:var(--token-form-radio-size);margin:0;background-size:var(--token-form-radio-background-image-size) var(--token-form-radio-background-image-size);border-width:var(--token-form-radio-border-width);border-radius:50%;cursor:pointer;appearance:none}.hds-form-radio:not(:checked){background-color:var(--token-form-control-base-surface-color-default);border-color:var(--token-form-control-base-border-color-default);box-shadow:var(--hds-elevation-inset-box-shadow)}.hds-form-radio:checked{background-color:var(--token-form-control-checked-surface-color-default);background-image:var(--token-form-radio-background-image-data-url);border-color:var(--token-form-control-checked-border-color-default)}.hds-form-radio.mock-hover:not(:checked),.hds-form-radio:hover:not(:checked){background-color:var(--token-form-control-base-surface-color-hover);border-color:var(--token-form-control-base-border-color-hover)}.hds-form-radio.mock-hover:checked,.hds-form-radio:hover:checked{background-color:var(--token-form-control-checked-border-color-default);border-color:var(--token-form-control-checked-border-color-hover)}.hds-form-radio:disabled:checked,.hds-form-radio:disabled:not(:checked){background-color:var(--token-form-control-disabled-surface-color);border-color:var(--token-form-control-disabled-border-color);box-shadow:none;cursor:not-allowed}.hds-form-radio.mock-focus,.hds-form-radio:focus{outline:var(--token-color-focus-action-external) solid 3px;outline-offset:1px}.hds-form-radio:disabled:checked{background-image:var(--token-form-radio-background-image-data-url-disabled)}.hds-form-group--radio-cards .hds-form-group__control-fields-wrapper{margin:calc(-1 * var(--token-form-radiocard-group-gap)/ 2)}.hds-form-group--radio-cards .hds-form-group__legend{margin-bottom:12px}.hds-form-group--radio-cards .hds-form-radio-card{margin:calc(var(--token-form-radiocard-group-gap)/ 2)}.hds-form-group--radio-cards .hds-form-radio-card--layout-fixed{flex:1 0 100%}.hds-form-radio-card{display:flex;flex-direction:column;background-color:var(--token-color-surface-primary);border:var(--token-form-radiocard-border-width) solid var(--token-color-border-primary);border-radius:var(--token-form-radiocard-border-radius);box-shadow:var(--token-elevation-mid-box-shadow);cursor:pointer}.hds-form-radio-card .hds-form-radio-card__control{outline-color:transparent}.hds-form-radio-card.mock-hover,.hds-form-radio-card:hover{box-shadow:var(--token-elevation-high-box-shadow);transition:var(--token-form-radiocard-transition-duration)}.hds-form-radio-card.mock-focus,.hds-form-radio-card:focus-within{border-color:var(--token-color-focus-action-internal);box-shadow:0 0 0 3px var(--token-color-focus-action-external)}.hds-form-radio-card--checked,.hds-form-radio-card.mock-checked{border-color:var(--token-color-focus-action-internal)}.hds-form-radio-card--checked .hds-form-radio-card__control-wrapper,.hds-form-radio-card.mock-checked .hds-form-radio-card__control-wrapper{background-color:var(--token-color-surface-action);border-color:var(--token-color-border-action)}.hds-form-radio-card--disabled,.hds-form-radio-card--disabled .hds-form-radio-card__control-wrapper,.hds-form-radio-card.mock-disabled,.hds-form-radio-card.mock-disabled .hds-form-radio-card__control-wrapper{background-color:var(--token-color-surface-interactive-disabled);border-color:var(--token-color-border-primary)}.hds-form-radio-card--disabled,.hds-form-radio-card.mock-disabled{box-shadow:none;cursor:not-allowed}.hds-form-radio-card--align-left{text-align:left}.hds-form-radio-card--align-center{text-align:center}.hds-form-radio-card--align-center .flight-icon{margin:auto}.hds-form-radio-card--control-bottom .hds-form-radio-card__control-wrapper{border-top-width:var(--token-form-radiocard-border-width);border-top-style:solid;border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.hds-form-radio-card--control-left{flex-direction:row-reverse}.hds-form-radio-card--control-left .hds-form-radio-card__control-wrapper{display:flex;align-items:center;border-right-width:var(--token-form-radiocard-border-width);border-right-style:solid;border-top-left-radius:inherit;border-bottom-left-radius:inherit}.hds-form-radio-card__content{flex:1;padding:var(--token-form-radiocard-content-padding)}.hds-form-radio-card__content .hds-badge{margin-bottom:12px}.hds-form-radio-card__label{display:block;margin:8px 0;color:var(--token-form-label-color)}.hds-form-radio-card__label:first-child{margin-top:0}.hds-form-radio-card__description{display:block;color:var(--token-color-foreground-primary)}.hds-form-radio-card__control-wrapper{padding:var(--token-form-radiocard-control-padding);background-color:var(--token-color-surface-faint);border-color:var(--token-color-border-primary)}.hds-form-radio-card__control{display:block;margin:auto}.hds-form-select{max-width:100%;padding:var(--token-form-control-padding);padding-right:calc(var(--token-form-control-padding) + 24px);color:var(--token-form-control-base-foreground-value-color);background-color:var(--token-form-control-base-surface-color-default);background-image:var(--token-form-select-background-image-data-url);background-repeat:no-repeat;background-position:right var(--token-form-select-background-image-position-right-x) top var(--token-form-select-background-image-position-top-y);background-size:var(--token-form-select-background-image-size) var(--token-form-select-background-image-size);border:var(--token-form-control-border-width) solid var(--token-form-control-base-border-color-default);border-radius:var(--token-form-control-border-radius);box-shadow:var(--token-elevation-low-box-shadow);appearance:none}.hds-form-select.mock-hover,.hds-form-select:hover{border-color:var(--token-form-control-base-border-color-hover)}.hds-form-select.mock-focus,.hds-form-select:focus{border-color:var(--token-color-focus-action-internal);outline:var(--token-color-focus-action-external) solid 3px;outline-offset:0}.hds-form-select:disabled{color:var(--token-form-control-disabled-foreground-color);background-color:var(--token-form-control-disabled-surface-color);background-image:var(--token-form-select-background-image-data-url-disabled);border-color:var(--token-form-control-disabled-border-color);box-shadow:none;cursor:not-allowed}.hds-form-select.hds-form-select--is-invalid{border-color:var(--token-form-control-invalid-border-color-default)}.hds-form-select.hds-form-select--is-invalid.mock-hover,.hds-form-select.hds-form-select--is-invalid:hover{border-color:var(--token-form-control-invalid-border-color-hover)}.hds-form-select.hds-form-select--is-invalid.mock-focus,.hds-form-select.hds-form-select--is-invalid:focus{border-color:var(--token-color-focus-critical-internal);outline-color:var(--token-color-focus-critical-external)}.hds-form-select[multiple],.hds-form-select[size]{background:0 0}.hds-form-select[multiple] option,.hds-form-select[size] option{margin:2px auto;border-radius:3px}.hds-form-select[multiple] option:hover,.hds-form-select[size] option:hover{color:var(--token-color-foreground-action)}.hds-form-select[multiple] option:disabled,.hds-form-select[size] option:disabled{color:var(--token-color-foreground-disabled)}.hds-form-select[multiple] option:checked,.hds-form-select[size] option:checked{color:var(--token-color-foreground-high-contrast);background:var(--token-color-palette-blue-200)}.hds-form-text-input,.hds-form-textarea{max-width:100%;background-color:var(--token-form-control-base-surface-color-default)}.hds-form-select[multiple] optgroup,.hds-form-select[size] optgroup{color:var(--token-color-foreground-strong);font-weight:var(--token-typography-font-weight-semibold);font-style:normal}.hds-form-text-input{width:100%;padding:var(--token-form-control-padding);color:var(--token-form-control-base-foreground-value-color);border:var(--token-form-control-border-width) solid var(--token-form-control-base-border-color-default);border-radius:var(--token-form-control-border-radius);box-shadow:var(--hds-elevation-inset-box-shadow)}.hds-form-text-input ::-moz-placeholder{color:var(--token-form-control-base-foreground-placeholder-color)}.hds-form-text-input ::placeholder{color:var(--token-form-control-base-foreground-placeholder-color)}.hds-form-text-input.mock-hover,.hds-form-text-input:hover{border-color:var(--token-form-control-base-border-color-hover)}.hds-form-text-input.mock-focus,.hds-form-text-input:focus{border-color:var(--token-color-focus-action-internal);outline:var(--token-color-focus-action-external) solid 3px;outline-offset:0}.hds-form-text-input:-moz-read-only{color:var(--token-form-control-readonly-foreground-color);background-color:var(--token-form-control-readonly-surface-color);border-color:var(--token-form-control-readonly-border-color);box-shadow:none}.hds-form-text-input:read-only{color:var(--token-form-control-readonly-foreground-color);background-color:var(--token-form-control-readonly-surface-color);border-color:var(--token-form-control-readonly-border-color);box-shadow:none}.hds-form-text-input:disabled{color:var(--token-form-control-disabled-foreground-color);background-color:var(--token-form-control-disabled-surface-color);border-color:var(--token-form-control-disabled-border-color);box-shadow:none;cursor:not-allowed}.hds-form-text-input.hds-form-text-input--is-invalid{border-color:var(--token-form-control-invalid-border-color-default)}.hds-form-text-input.hds-form-text-input--is-invalid.mock-hover,.hds-form-text-input.hds-form-text-input--is-invalid:hover{border-color:var(--token-form-control-invalid-border-color-hover)}.hds-form-text-input.hds-form-text-input--is-invalid.mock-focus,.hds-form-text-input.hds-form-text-input--is-invalid:focus{border-color:var(--token-color-focus-critical-internal);outline-color:var(--token-color-focus-critical-external)}.hds-form-text-input[type=date],.hds-form-text-input[type=time]{width:initial}.hds-form-text-input[type=date]:disabled::-webkit-calendar-picker-indicator,.hds-form-text-input[type=time]:disabled::-webkit-calendar-picker-indicator{visibility:visible;opacity:.5}.hds-form-text-input[type=date][readonly]::-webkit-calendar-picker-indicator,.hds-form-text-input[type=time][readonly]::-webkit-calendar-picker-indicator{visibility:visible}.hds-form-text-input[type=date]::-webkit-calendar-picker-indicator{background-image:var(--token-form-text-input-background-image-data-url-date);background-position:center center;background-size:var(--token-form-text-input-background-image-size)}.hds-form-text-input[type=time]::-webkit-calendar-picker-indicator{background-image:var(--token-form-text-input-background-image-data-url-time);background-position:center center;background-size:var(--token-form-text-input-background-image-size)}.hds-form-text-input[type=search]{padding-left:calc(var(--token-form-control-padding) + 24px);background-image:var(--token-form-text-input-background-image-data-url-search);background-repeat:no-repeat;background-position:var(--token-form-text-input-background-image-position-x) 50%;background-size:var(--token-form-text-input-background-image-size)}.hds-form-text-input[type=search]::-webkit-search-cancel-button{width:var(--token-form-text-input-background-image-size);height:var(--token-form-text-input-background-image-size);background-image:var(--token-form-text-input-background-image-data-url-search-cancel);background-position:center center;background-size:var(--token-form-text-input-background-image-size);-webkit-appearance:none}.hds-form-textarea{width:100%;padding:var(--token-form-control-padding);color:var(--token-form-control-base-foreground-value-color);border:var(--token-form-control-border-width) solid var(--token-form-control-base-border-color-default);border-radius:var(--token-form-control-border-radius);box-shadow:var(--hds-elevation-inset-box-shadow);resize:vertical}.hds-form-textarea ::-moz-placeholder{color:var(--token-form-control-base-foreground-placeholder-color)}.hds-form-textarea ::placeholder{color:var(--token-form-control-base-foreground-placeholder-color)}.hds-form-textarea.mock-hover,.hds-form-textarea:hover{border-color:var(--token-form-control-base-border-color-hover)}.hds-form-textarea.mock-focus,.hds-form-textarea:focus{border-color:var(--token-color-focus-action-internal);outline:var(--token-color-focus-action-external) solid 3px;outline-offset:0}.hds-form-textarea:-moz-read-only{color:var(--token-form-control-disabled-foreground-color);background-color:var(--token-form-control-readonly-surface-color);border-color:var(--token-form-control-disabled-border-color);box-shadow:none}.hds-form-textarea:read-only{color:var(--token-form-control-disabled-foreground-color);background-color:var(--token-form-control-readonly-surface-color);border-color:var(--token-form-control-disabled-border-color);box-shadow:none}.hds-form-textarea:disabled{color:var(--token-form-control-disabled-foreground-color);background-color:var(--token-form-control-disabled-surface-color);border-color:var(--token-form-control-disabled-border-color);box-shadow:none;cursor:not-allowed}.hds-form-textarea.hds-form-textarea--is-invalid{border-color:var(--token-form-control-invalid-border-color-default)}.hds-form-textarea.hds-form-textarea--is-invalid.mock-hover,.hds-form-textarea.hds-form-textarea--is-invalid:hover{border-color:var(--token-form-control-invalid-border-color-hover)}.hds-form-textarea.hds-form-textarea--is-invalid.mock-focus,.hds-form-textarea.hds-form-textarea--is-invalid:focus{border-color:var(--token-color-focus-critical-internal);outline-color:var(--token-color-focus-critical-external)}.hds-form-toggle{position:relative;isolation:isolate}.hds-form-toggle__control{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;display:block;height:100%;margin:0;padding:0;color:transparent;background-color:transparent;border:none;outline:0;cursor:pointer;opacity:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.hds-form-toggle__control:disabled{cursor:not-allowed}.hds-form-toggle__facade{position:relative;display:block;width:var(--token-form-toggle-width);height:var(--token-form-toggle-height);background-image:var(--token-form-toggle-background-image-data-url);background-repeat:no-repeat;background-position:var(--token-form-toggle-background-image-position-x) 50%;background-size:var(--token-form-toggle-background-image-size) var(--token-form-toggle-background-image-size);border:var(--token-form-radio-border-width) solid var(--border-color);border-radius:calc(var(--token-form-toggle-height)/ 2)}.hds-form-toggle__facade::after{position:absolute;top:calc(var(--token-form-radio-border-width) * -1);left:calc(var(--token-form-radio-border-width) * -1);width:var(--token-form-toggle-thumb-size);height:var(--token-form-toggle-thumb-size);background-color:var(--token-form-control-base-surface-color-default);border:var(--token-form-radio-border-width) solid var(--border-color);border-radius:50%;transform:translate3d(0,0,0);content:""}@media (prefers-reduced-motion:no-preference){.hds-form-toggle__facade,.hds-form-toggle__facade::after{transition-timing-function:var(--token-form-toggle-transition-timing-function);transition-duration:var(--token-form-toggle-transition-duration);transition-property:all}}.hds-form-toggle__facade::before{position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;margin:auto;border-width:3px;border-radius:calc(var(--token-form-toggle-height)/ 2 + 3px + 1px);content:""}:not(:checked)+.hds-form-toggle__facade{--border-color:var(--token-form-control-base-border-color-default);background-color:var(--token-form-toggle-base-surface-color-default)}:checked+.hds-form-toggle__facade{--border-color:var(--token-form-control-checked-border-color-default);background-color:var(--token-form-control-checked-surface-color-default)}:checked+.hds-form-toggle__facade::after{transform:translate3d(calc(var(--token-form-toggle-width) - var(--token-form-toggle-thumb-size)),0,0)}.mock-hover:not(:checked)+.hds-form-toggle__facade,:hover:not(:checked)+.hds-form-toggle__facade{--border-color:var(--token-form-control-base-border-color-hover)}.mock-hover:checked+.hds-form-toggle__facade,:hover:checked+.hds-form-toggle__facade{--border-color:var(--token-form-control-checked-border-color-hover);background-color:var(--token-form-control-checked-border-color-default)}.mock-focus+.hds-form-toggle__facade::before,:focus+.hds-form-toggle__facade::before{border-color:var(--token-color-focus-action-external);border-style:solid}:disabled:checked+.hds-form-toggle__facade,:disabled:not(:checked)+.hds-form-toggle__facade{--border-color:var(--token-form-control-disabled-border-color);background-color:var(--token-form-control-disabled-surface-color);background-image:var(--token-form-toggle-background-image-data-url-disabled)}.hds-icon-tile--logo,.hds-icon-tile__extra{background-color:var(--token-color-surface-primary)}.hds-icon-tile{position:relative;display:flex;border:1px solid transparent;border-radius:4px;box-shadow:0 1px 1px rgba(101,106,118,.05)}.hds-icon-tile__icon,.hds-icon-tile__logo{display:flex;margin:auto}.hds-icon-tile__extra{position:absolute;right:-6px;bottom:-6px;display:flex;box-sizing:content-box;border:1px solid var(--token-color-border-primary);box-shadow:0 1px 1px rgba(101,106,118,.05)}.hds-icon-tile__extra-icon{display:flex;margin:auto;color:var(--token-color-foreground-strong)}.hds-icon-tile--size-small{width:1.75rem;height:1.75rem;border-radius:5px}.hds-icon-tile--size-small .hds-icon-tile__icon{width:1rem;height:1rem}.hds-icon-tile--size-small .hds-icon-tile__logo{width:1.125rem;height:1.125rem}.hds-icon-tile--size-small .hds-icon-tile__extra{width:1.125rem;height:1.125rem;border-radius:4px}.hds-icon-tile--size-small .hds-icon-tile__extra-icon{width:.75rem;height:.75rem}.hds-icon-tile--size-medium{width:2.5rem;height:2.5rem;border-radius:6px}.hds-icon-tile--size-medium .hds-icon-tile__icon{width:1.5rem;height:1.5rem}.hds-icon-tile--size-medium .hds-icon-tile__logo{width:1.75rem;height:1.75rem}.hds-icon-tile--size-medium .hds-icon-tile__extra{width:1.5rem;height:1.5rem;border-radius:5px}.hds-icon-tile--size-medium .hds-icon-tile__extra-icon{width:1rem;height:1rem}.hds-icon-tile--size-large{width:3rem;height:3rem;border-radius:6px}.hds-icon-tile--size-large .hds-icon-tile__icon{width:1.5rem;height:1.5rem}.hds-icon-tile--size-large .hds-icon-tile__logo{width:2rem;height:2rem}.hds-icon-tile--size-large .hds-icon-tile__extra{width:1.5rem;height:1.5rem;border-radius:5px}.hds-icon-tile--size-large .hds-icon-tile__extra-icon{width:1rem;height:1rem}.hds-icon-tile--logo{border-color:var(--token-color-border-primary)}.hds-icon-tile--icon.hds-icon-tile--color-neutral{color:var(--token-color-foreground-faint);background-color:var(--token-color-surface-faint);border-color:var(--token-color-border-primary)}.hds-icon-tile--icon.hds-icon-tile--color-boundary{color:var(--token-color-boundary-foreground);background:linear-gradient(135deg,var(--token-color-boundary-gradient-faint-start) 0,var(--token-color-boundary-gradient-faint-stop) 100%);border-color:var(--token-color-boundary-border)}.hds-icon-tile--icon.hds-icon-tile--color-consul{color:var(--token-color-consul-foreground);background:linear-gradient(135deg,var(--token-color-consul-gradient-faint-start) 0,var(--token-color-consul-gradient-faint-stop) 100%);border-color:var(--token-color-consul-border)}.hds-icon-tile--icon.hds-icon-tile--color-hcp{color:var(--token-color-palette-hcp-brand);background-color:var(--token-color-surface-faint);border-color:var(--token-color-border-primary)}.hds-icon-tile--icon.hds-icon-tile--color-nomad{color:var(--token-color-nomad-foreground);background:linear-gradient(135deg,var(--token-color-nomad-gradient-faint-start) 0,var(--token-color-nomad-gradient-faint-stop) 100%);border-color:var(--token-color-nomad-border)}.hds-icon-tile--icon.hds-icon-tile--color-packer{color:var(--token-color-packer-foreground);background:linear-gradient(135deg,var(--token-color-packer-gradient-faint-start) 0,var(--token-color-packer-gradient-faint-stop) 100%);border-color:var(--token-color-packer-border)}.hds-icon-tile--icon.hds-icon-tile--color-terraform{color:var(--token-color-terraform-foreground);background:linear-gradient(135deg,var(--token-color-terraform-gradient-faint-start) 0,var(--token-color-terraform-gradient-faint-stop) 100%);border-color:var(--token-color-terraform-border)}.hds-icon-tile--icon.hds-icon-tile--color-vagrant{color:var(--token-color-vagrant-foreground);background:linear-gradient(135deg,var(--token-color-vagrant-gradient-faint-start) 0,var(--token-color-vagrant-gradient-faint-stop) 100%);border-color:var(--token-color-vagrant-border)}.hds-icon-tile--icon.hds-icon-tile--color-vault{color:var(--token-color-vault-foreground);background:linear-gradient(135deg,var(--token-color-vault-gradient-faint-start) 0,var(--token-color-vault-gradient-faint-stop) 100%);border-color:var(--token-color-vault-border)}.hds-icon-tile--icon.hds-icon-tile--color-waypoint{color:var(--token-color-waypoint-foreground);background:linear-gradient(135deg,var(--token-color-waypoint-gradient-faint-start) 0,var(--token-color-waypoint-gradient-faint-stop) 100%);border-color:var(--token-color-waypoint-border)}.hds-link-inline--color-primary,.hds-link-standalone--color-primary{color:var(--token-color-foreground-action)}.hds-link-inline{border-radius:2px}.hds-link-inline.mock-focus,.hds-link-inline:focus,.hds-link-inline:focus-visible{text-decoration:none;outline:var(--token-color-focus-action-internal) solid 2px;outline-offset:1px}.hds-link-standalone,.hds-pagination-nav__control,.hds-table__th-sort button,.hds-tabs__tab-button{outline-style:solid;outline-color:transparent}.hds-link-inline__icon{display:inline-block;width:1em;height:1em;vertical-align:text-bottom}.hds-link-inline--icon-leading>.hds-link-inline__icon{margin-right:.25em}.hds-link-inline--icon-trailing>.hds-link-inline__icon{margin-left:.25em}.hds-link-inline--color-primary.mock-hover,.hds-link-inline--color-primary:hover{color:var(--token-color-foreground-action-hover)}.hds-link-inline--color-primary.mock-active,.hds-link-inline--color-primary:active{color:var(--token-color-foreground-action-active)}.hds-link-inline--color-secondary{color:var(--token-color-foreground-strong)}.hds-link-inline--color-secondary.mock-hover,.hds-link-inline--color-secondary:hover{color:var(--token-color-foreground-primary)}.hds-link-inline--color-secondary.mock-active,.hds-link-inline--color-secondary:active{color:var(--token-color-foreground-faint)}.hds-link-standalone{display:flex;align-items:center;justify-content:center;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;background-color:transparent;border:1px solid transparent;position:relative;isolation:isolate}.hds-link-standalone--size-medium .hds-link-standalone__icon,.hds-link-standalone--size-small .hds-link-standalone__icon{width:1rem;height:1rem}.hds-link-standalone__text{flex:1 0 0;text-decoration:underline;transition:-webkit-text-decoration-color .25s ease-in;transition:text-decoration-color .25s ease-in;transition:text-decoration-color .25s ease-in,-webkit-text-decoration-color .25s ease-in}#login-toggle+div footer button,.consul-intention-fieldsets .permissions>button,.empty-state>ul>li>*,.empty-state>ul>li>:active,.empty-state>ul>li>label>button,.empty-state>ul>li>label>button:active,.hds-pagination-nav__control,.hds-tabs__tab,.modal-dialog [role=document] dd a,.modal-dialog [role=document] p a,.oidc-select button.reset,.search-bar-status .remove-all button,a,main dd a,main dd a:active,main p a,main p a:active{text-decoration:none}.hds-link-standalone__icon+.hds-link-standalone__text,.hds-link-standalone__text+.hds-link-standalone__icon{margin-left:.375rem}.hds-link-standalone--size-small .hds-link-standalone__text{font-size:.8125rem;line-height:1.231}.hds-link-standalone--size-medium .hds-link-standalone__text{font-size:.875rem;line-height:1.143}.hds-link-standalone--size-large .hds-link-standalone__icon{width:1.5rem;height:1.5rem}.hds-link-standalone--size-large .hds-link-standalone__text{font-size:1rem;line-height:1.5}.hds-link-standalone--color-primary.mock-hover,.hds-link-standalone--color-primary:hover{color:var(--token-color-foreground-action-hover)}.hds-link-standalone--color-primary.mock-hover .hds-link-standalone__text,.hds-link-standalone--color-primary:hover .hds-link-standalone__text{-webkit-text-decoration-color:#4e81e8;text-decoration-color:#4e81e8}.hds-link-standalone--color-primary.mock-active,.hds-link-standalone--color-primary:active{color:var(--token-color-foreground-action-active)}.hds-link-standalone--color-primary.mock-active .hds-link-standalone__text,.hds-link-standalone--color-primary:active .hds-link-standalone__text{-webkit-text-decoration-color:#396ed6;text-decoration-color:#396ed6}.hds-link-standalone--color-primary.mock-active::before,.hds-link-standalone--color-primary:active::before{background-color:var(--token-color-surface-action)}.hds-link-standalone--color-secondary{color:var(--token-color-foreground-strong)}.hds-link-standalone--color-secondary.mock-hover .hds-link-standalone__text,.hds-link-standalone--color-secondary:hover .hds-link-standalone__text{-webkit-text-decoration-color:#4d4d4f;text-decoration-color:#4d4d4f}.hds-link-standalone--color-secondary.mock-active,.hds-link-standalone--color-secondary:active{color:var(--token-color-foreground-primary)}.hds-link-standalone--color-secondary.mock-active .hds-link-standalone__text,.hds-link-standalone--color-secondary:active .hds-link-standalone__text{-webkit-text-decoration-color:#6e7075;text-decoration-color:#6e7075}.hds-link-standalone--color-secondary.mock-active::before,.hds-link-standalone--color-secondary:active::before{background-color:var(--token-color-surface-interactive-active)}.hds-link-standalone::before{position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px;z-index:-1;border-radius:5px;content:""}.hds-link-standalone.mock-focus::before,.hds-link-standalone:focus::before{box-shadow:var(--token-focus-ring-action-box-shadow)}.hds-link-standalone:focus:not(:focus-visible)::before{box-shadow:none}.hds-link-standalone:focus-visible::before,.hds-pagination-nav__control.mock-focus::before,.hds-pagination-nav__control:focus::before{box-shadow:var(--token-focus-ring-action-box-shadow)}.hds-link-standalone.mock-focus.mock-active::before,.hds-link-standalone:focus:active::before{box-shadow:none}.hds-link-standalone.hds-link-standalone--icon-position-leading::before{right:-7px}.hds-link-standalone.hds-link-standalone--icon-position-trailing::before{left:-7px}.hds-modal{z-index:50;flex-direction:column;padding:0;background:var(--token-color-surface-primary);border:none;border-radius:8px;box-shadow:var(--token-surface-overlay-box-shadow)}.hds-modal[open]{position:fixed;display:flex}.hds-modal::backdrop,.readonly-codemirror .CodeMirror-cursors{display:none}.hds-modal::-webkit-backdrop{display:none}.hds-modal__overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;background:var(--token-color-palette-neutral-700);opacity:.5}.hds-modal__header{display:flex;flex:none;align-items:flex-start;padding:16px 24px;border-top-left-radius:inherit;border-top-right-radius:inherit}.hds-modal__icon{flex:none;align-self:center;margin-right:16px}.freetext-filter>label,.freetext-filter_input,.hds-modal__title{flex-grow:1}.hds-modal__tagline{margin-bottom:4px}.hds-modal__dismiss{align-self:center;margin-left:16px}.hds-modal__body{flex:1 1 auto;padding:24px;overflow-y:auto;overscroll-behavior:contain}.hds-modal__footer{flex:none;padding:16px 24px;background:var(--token-color-surface-faint);border-top:1px solid var(--token-color-border-primary);border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.hds-modal__footer .hds-button-set .hds-button--color-tertiary{margin-left:auto}.hds-modal--size-small{width:min(400px,95vw)}.hds-modal--size-medium{width:min(600px,95vw)}.hds-modal--size-large{width:min(800px,95vw)}.hds-modal--color-neutral .hds-modal__header{color:var(--token-color-foreground-strong);background:var(--token-color-surface-faint);border-bottom:1px solid var(--token-color-border-primary)}.hds-modal--color-neutral .hds-modal__tagline{color:var(--token-color-foreground-faint)}.hds-modal--color-warning .hds-modal__header,.hds-modal--color-warning .hds-modal__tagline{color:var(--token-color-foreground-warning-on-surface)}.hds-modal--color-warning .hds-modal__header{background:var(--token-color-surface-warning);border-bottom:1px solid var(--token-color-border-warning)}.hds-modal--color-critical .hds-modal__header,.hds-modal--color-critical .hds-modal__tagline{color:var(--token-color-foreground-critical-on-surface)}.hds-modal--color-critical .hds-modal__header{background:var(--token-color-surface-critical);border-bottom:1px solid var(--token-color-border-critical)}.hds-pagination{display:grid;grid-template-areas:"info nav selector";grid-template-rows:auto;grid-template-columns:1fr auto 1fr;align-items:center;margin:0 auto}@media screen and (max-width:1000px){.hds-pagination{display:flex;flex-wrap:wrap;justify-content:center}.hds-pagination-info{margin-top:var(--token-pagination-child-spacing-vertical);margin-left:var(--token-pagination-child-spacing-horizontal)}}.hds-pagination-info{grid-area:info;justify-self:flex-start;margin-right:var(--token-pagination-child-spacing-horizontal);white-space:nowrap}.hds-pagination-nav{display:flex;grid-area:nav}@media screen and (max-width:1000px){.hds-pagination-nav{justify-content:center;order:-1;width:100%}}.hds-pagination-nav__page-list{display:flex;margin:0;padding:0}.hds-pagination-nav__page-item{list-style-type:none}.hds-pagination-nav__control{display:flex;align-items:center;height:var(--token-pagination-nav-control-height);padding:0 calc(var(--token-pagination-nav-control-padding-horizontal) - 1px);color:var(--token-color-foreground-primary);background-color:transparent;border:1px solid transparent;position:relative;isolation:isolate}.hds-pagination-nav__control::before{position:absolute;top:var(--token-pagination-nav-control-focus-inset);right:var(--token-pagination-nav-control-focus-inset);bottom:var(--token-pagination-nav-control-focus-inset);left:var(--token-pagination-nav-control-focus-inset);z-index:-1;border-radius:5px;content:""}.hds-pagination-nav__control:focus:not(:focus-visible)::before{box-shadow:none}.hds-pagination-nav__control:focus-visible::before,.hds-table__th-sort button.mock-focus::before,.hds-table__th-sort button:focus::before{box-shadow:var(--token-focus-ring-action-box-shadow)}.hds-pagination-nav__control.mock-focus.mock-active::before,.hds-pagination-nav__control:focus:active::before{box-shadow:none}.hds-pagination-nav__control.mock-hover,.hds-pagination-nav__control:hover{color:var(--token-color-foreground-action-hover)}.hds-pagination-nav__control.mock-active,.hds-pagination-nav__control:active{color:var(--token-color-foreground-action-active)}.hds-pagination-nav__arrow.mock-disabled,.hds-pagination-nav__arrow:disabled{color:var(--token-color-foreground-disabled);cursor:not-allowed}.hds-pagination-nav__arrow--direction-prev{flex-direction:row;justify-content:flex-start}.hds-pagination-nav__arrow--direction-prev .hds-pagination-nav__arrow-label{margin-left:var(--token-pagination-nav-control-icon-spacing)}.hds-pagination-nav__arrow--direction-next{flex-direction:row-reverse;justify-content:flex-end}.hds-pagination-nav__number--is-selected{position:relative;color:var(--token-color-foreground-action)}.hds-pagination-nav__number--is-selected:hover{color:var(--token-color-foreground-action-hover)}.hds-pagination-nav__number--is-selected:active{color:var(--token-color-foreground-action-active)}.hds-pagination-nav__number--is-selected::after{position:absolute;right:calc(var(--token-pagination-nav-indicator-spacing) - 1px);bottom:-1px;left:calc(var(--token-pagination-nav-indicator-spacing) - 1px);height:var(--token-pagination-nav-indicator-height);margin:0 auto;background-color:currentColor;border-radius:2px;content:""}.hds-pagination-nav__ellipsis{display:flex;align-items:center;height:var(--token-pagination-nav-control-height);padding:0 var(--token-pagination-nav-control-padding-horizontal);color:var(--token-color-foreground-faint)}.hds-pagination-size-selector{display:flex;grid-area:selector;align-items:center;justify-self:flex-end;margin-left:var(--token-pagination-child-spacing-horizontal)}@media screen and (max-width:1000px){.hds-pagination-size-selector{margin-top:var(--token-pagination-child-spacing-vertical);margin-right:var(--token-pagination-child-spacing-horizontal)}}.hds-pagination-size-selector>label{white-space:nowrap}.hds-pagination-size-selector>select{height:28px;margin-left:12px;padding:0 24px 0 8px;background-position:center right 5px}.hds-stepper-indicator-step__text,.hds-tag{font-weight:var(--token-typography-font-weight-medium);font-size:.8125rem}.hds-stepper-indicator-step{position:relative;width:24px;height:24px}.hds-stepper-indicator-step__svg-hexagon{width:100%;height:100%;filter:drop-shadow(0 1px 1px rgba(101, 106, 118, .05))}.hds-stepper-indicator-step__svg-hexagon path{fill:--status-fill-color;stroke:--status-stroke-color}.hds-stepper-indicator-step__status{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center}.hds-stepper-indicator-step__icon{width:12px;height:12px;color:--status-text-color}.hds-stepper-indicator-step__text{width:20px;overflow:hidden;color:--status-text-color;white-space:nowrap;text-align:center;-webkit-user-select:none;-moz-user-select:none;user-select:none}.hds-stepper-indicator-step--status-incomplete .hds-stepper-indicator-step__status{color:var(--token-color-foreground-strong)}.hds-stepper-indicator-step--status-complete .hds-stepper-indicator-step__status,.hds-stepper-indicator-step--status-processing .hds-stepper-indicator-step__status,.hds-stepper-indicator-step--status-progress .hds-stepper-indicator-step__status{color:var(--token-color-foreground-high-contrast)}.hds-stepper-indicator-step--status-incomplete .hds-stepper-indicator-step__svg-hexagon path{fill:var(--token-color-surface-faint);stroke:var(--token-color-foreground-strong)}.hds-stepper-indicator-step--status-complete .hds-stepper-indicator-step__svg-hexagon path,.hds-stepper-indicator-step--status-processing .hds-stepper-indicator-step__svg-hexagon path,.hds-stepper-indicator-step--status-progress .hds-stepper-indicator-step__svg-hexagon path{fill:var(--token-color-foreground-strong);stroke:var(--token-color-foreground-strong)}.hds-stepper-indicator-step--is-interactive{cursor:pointer}.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-incomplete .hds-stepper-indicator-step__status{color:var(--token-color-foreground-primary)}.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-processing .hds-stepper-indicator-step__status,.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-progress .hds-stepper-indicator-step__status{color:var(--token-color-foreground-high-contrast)}.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-incomplete .hds-stepper-indicator-step__svg-hexagon path{fill:var(--token-color-surface-interactive);stroke:var(--token-color-border-strong)}.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-incomplete.mock-hover .hds-stepper-indicator-step__svg-hexagon path,.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-incomplete:hover .hds-stepper-indicator-step__svg-hexagon path{fill:var(--token-color-surface-interactive-hover)}.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-incomplete.mock-active .hds-stepper-indicator-step__svg-hexagon path,.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-incomplete:active .hds-stepper-indicator-step__svg-hexagon path{fill:var(--token-color-surface-interactive-active)}.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-progress .hds-stepper-indicator-step__svg-hexagon path{fill:var(--token-color-palette-blue-200);stroke:var(--token-color-palette-blue-300)}.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-progress.mock-hover .hds-stepper-indicator-step__svg-hexagon path,.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-progress:hover .hds-stepper-indicator-step__svg-hexagon path{fill:var(--token-color-palette-blue-300);stroke:var(--token-color-palette-blue-400)}.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-progress.mock-active .hds-stepper-indicator-step__svg-hexagon path,.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-progress:active .hds-stepper-indicator-step__svg-hexagon path{fill:var(--token-color-palette-blue-400);stroke:var(--token-color-palette-blue-400)}.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-processing .hds-stepper-indicator-step__svg-hexagon path{fill:var(--token-color-palette-blue-200);stroke:var(--token-color-palette-blue-300)}.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-processing.mock-hover .hds-stepper-indicator-step__svg-hexagon path,.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-processing:hover .hds-stepper-indicator-step__svg-hexagon path{fill:var(--token-color-palette-blue-300);stroke:var(--token-color-palette-blue-400)}.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-processing.mock-active .hds-stepper-indicator-step__svg-hexagon path,.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-processing:active .hds-stepper-indicator-step__svg-hexagon path{fill:var(--token-color-palette-blue-400);stroke:var(--token-color-palette-blue-400)}.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-complete .hds-stepper-indicator-step__status{color:var(--token-color-palette-blue-200)}.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-complete .hds-stepper-indicator-step__svg-hexagon path{fill:var(--token-color-palette-blue-50);stroke:var(--token-color-palette-blue-300)}.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-complete.mock-active .hds-stepper-indicator-step__svg-hexagon path,.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-complete.mock-hover .hds-stepper-indicator-step__svg-hexagon path,.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-complete:active .hds-stepper-indicator-step__svg-hexagon path,.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-complete:hover .hds-stepper-indicator-step__svg-hexagon path{fill:var(--token-color-palette-blue-100);stroke:var(--token-color-palette-blue-400)}.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-complete.mock-hover .hds-stepper-indicator-step__status,.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-complete:hover .hds-stepper-indicator-step__status{color:var(--token-color-palette-blue-300)}.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-complete.mock-active .hds-stepper-indicator-step__status,.hds-stepper-indicator-step--is-interactive.hds-stepper-indicator-step--status-complete:active .hds-stepper-indicator-step__status{color:var(--token-color-palette-blue-400)}.hds-stepper-indicator-task{position:relative;display:flex;align-items:center;justify-content:center;width:16px;height:16px;color:var(--token-color-foreground-strong)}.hds-stepper-indicator-task__icon{width:12px;height:12px}.hds-stepper-indicator-task--is-interactive{cursor:pointer}.hds-stepper-indicator-task--is-interactive.hds-stepper-indicator-task--status-incomplete{color:var(--token-color-palette-neutral-300)}.hds-stepper-indicator-task--is-interactive.hds-stepper-indicator-task--status-incomplete.mock-hover,.hds-stepper-indicator-task--is-interactive.hds-stepper-indicator-task--status-incomplete:hover{color:var(--token-color-palette-blue-300)}.hds-stepper-indicator-task--is-interactive.hds-stepper-indicator-task--status-incomplete.mock-active,.hds-stepper-indicator-task--is-interactive.hds-stepper-indicator-task--status-incomplete:active{color:var(--token-color-palette-blue-400)}.hds-stepper-indicator-task--is-interactive.hds-stepper-indicator-task--status-progress{color:var(--token-color-palette-blue-200)}.hds-stepper-indicator-task--is-interactive.hds-stepper-indicator-task--status-progress.mock-hover,.hds-stepper-indicator-task--is-interactive.hds-stepper-indicator-task--status-progress:hover{color:var(--token-color-palette-blue-300)}.hds-stepper-indicator-task--is-interactive.hds-stepper-indicator-task--status-progress.mock-active,.hds-stepper-indicator-task--is-interactive.hds-stepper-indicator-task--status-progress:active{color:var(--token-color-palette-blue-400)}.hds-stepper-indicator-task--is-interactive.hds-stepper-indicator-task--status-processing{color:var(--token-color-palette-blue-200)}.hds-stepper-indicator-task--is-interactive.hds-stepper-indicator-task--status-processing.mock-hover,.hds-stepper-indicator-task--is-interactive.hds-stepper-indicator-task--status-processing:hover{color:var(--token-color-palette-blue-300)}.hds-stepper-indicator-task--is-interactive.hds-stepper-indicator-task--status-processing.mock-active,.hds-stepper-indicator-task--is-interactive.hds-stepper-indicator-task--status-processing:active{color:var(--token-color-palette-blue-400)}.hds-stepper-indicator-task--is-interactive.hds-stepper-indicator-task--status-complete{color:var(--token-color-palette-green-200)}.hds-stepper-indicator-task--is-interactive.hds-stepper-indicator-task--status-complete.mock-hover,.hds-stepper-indicator-task--is-interactive.hds-stepper-indicator-task--status-complete:hover{color:var(--token-color-palette-green-300)}.hds-stepper-indicator-task--is-interactive.hds-stepper-indicator-task--status-complete.mock-active,.hds-stepper-indicator-task--is-interactive.hds-stepper-indicator-task--status-complete:active{color:var(--token-color-palette-green-400)}.hds-table{width:100%;border:1px solid var(--token-color-border-primary);border-radius:6px}.hds-table--layout-fixed{table-layout:fixed}.hds-table__thead .hds-table__tr{color:var(--token-color-foreground-strong);background-color:var(--token-color-surface-strong)}.hds-table__thead .hds-table__tr:first-of-type th:first-child{border-top-left-radius:5px}.hds-table__thead .hds-table__tr:first-of-type th:last-child{border-top-right-radius:5px}.hds-table__th,.hds-table__th-sort{height:48px;text-align:left;border-top:none;border-right:none;border-bottom:1px solid var(--token-color-border-primary);border-left:none}.hds-table__th{padding:12px 16px}.hds-table__th-sort{padding:0}.hds-table__th-sort button{width:100%;height:100%;min-height:48px;margin:0;padding:12px 16px;text-align:inherit;background-color:transparent;border:1px solid transparent;border-radius:inherit;position:relative;isolation:isolate}.hds-table__th-sort button .hds-table__th-sort--button-content{display:flex;align-items:center}.hds-table__th-sort button .hds-table__th-sort--button-content .flight-icon{flex:none;margin-left:8px;color:var(--token-color-foreground-action)}.hds-tabs__tab,.hds-tabs__tablist{margin:0;position:relative;display:flex}.hds-table__th-sort button.mock-hover,.hds-table__th-sort button:hover{color:var(--token-color-foreground-strong);background-color:var(--token-color-palette-neutral-200);cursor:pointer}.hds-table__th-sort button::before{position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1;border-radius:inherit;content:""}.hds-table__th-sort button:focus:not(:focus-visible)::before{box-shadow:none}.hds-table__th-sort button:focus-visible::before{box-shadow:var(--token-focus-ring-action-box-shadow)}.hds-table__th-sort button.mock-focus.mock-active::before,.hds-table__th-sort button:focus:active::before{box-shadow:none}.hds-table__th-sort button.mock-active,.hds-table__th-sort button:active{color:var(--token-color-foreground-strong);background-color:var(--token-color-palette-neutral-300)}.hds-table__tbody .hds-table__tr,.hds-tabs__tab,.hds-tag,.hds-tag__dismiss-icon{color:var(--token-color-foreground-primary)}.hds-table--striped .hds-table__tbody .hds-table__tr:nth-child(even){background-color:var(--token-color-surface-faint)}.hds-table--density-short .hds-table__tbody td{padding:4px 16px}.hds-table--density-medium .hds-table__tbody td{padding:12px 16px}.hds-table--density-tall .hds-table__tbody td{padding:20px 16px}.hds-table--valign-top .hds-table__tbody td{vertical-align:top}.hds-table--valign-middle .hds-table__tbody td,.hds-tag{vertical-align:middle}.hds-table__td--text-right,.hds-table__th--text-right,.hds-table__th-sort--text-right{text-align:right}.hds-table__td--text-center,.hds-table__th--text-center,.hds-table__th-sort--text-center{text-align:center}.hds-table__tbody .hds-table__tr{background-color:var(--token-color-surface-primary)}.hds-table__tbody .hds-table__tr td{border-top:none;border-right:none;border-bottom:1px solid var(--token-color-border-primary);border-left:none}.hds-table__tbody .hds-table__tr:last-of-type td{border-bottom:none}.hds-table__tbody .hds-table__tr:last-of-type td:first-child{border-bottom-left-radius:5px}.hds-table__tbody .hds-table__tr:last-of-type td:last-child{border-bottom-right-radius:5px}.hds-tabs__tablist-wrapper{position:relative}.hds-tabs__tablist-wrapper::before{position:absolute;right:0;bottom:calc((var(--token-tabs-indicator-height) - var(--token-tabs-divider-height))/ 2);left:0;display:block;border-top:var(--token-tabs-divider-height) solid var(--token-color-border-primary);content:""}.hds-tabs__tablist{padding:0;overflow-x:auto;-webkit-overflow-scrolling:touch}.hds-tabs__tab{align-items:center;height:var(--token-tabs-tab-height);padding:var(--token-tabs-tab-padding-vertical) var(--token-tabs-tab-padding-horizontal);white-space:nowrap;list-style:none}.hds-tabs__tab.hds-tabs__tab--is-selected,.hds-tabs__tab.mock-hover,.hds-tabs__tab:hover{color:var(--token-color-foreground-action)}.hds-tabs__tab.hds-tabs__tab--is-selected:hover{color:var(--token-color-foreground-action-hover)}.hds-tabs__tab.hds-tabs__tab--is-selected:hover~.hds-tabs__tab-indicator{background:var(--token-color-foreground-action-hover)}.hds-tabs__tab-button{isolation:isolate;position:static;display:flex;align-items:center;padding:0;color:inherit;background-color:transparent;border:none;border-radius:var(--token-tabs-tab-border-radius);cursor:pointer}.hds-tabs__tab-button::before{position:absolute;top:var(--token-tabs-tab-focus-inset);right:var(--token-tabs-tab-focus-inset);bottom:var(--token-tabs-tab-focus-inset);left:var(--token-tabs-tab-focus-inset);z-index:-1;border-radius:5px;content:""}.hds-tabs__tab-button.mock-focus::before,.hds-tabs__tab-button:focus::before{box-shadow:var(--token-focus-ring-action-box-shadow)}.hds-tabs__tab-button:focus:not(:focus-visible)::before{box-shadow:none}.hds-tabs__tab-button:focus-visible::before{box-shadow:var(--token-focus-ring-action-box-shadow)}.hds-tabs__tab-button.mock-focus.mock-active::before,.hds-tabs__tab-button:focus:active::before{box-shadow:none}.hds-tabs__tab-button::after{position:absolute;content:"";inset:0}.hds-tabs__tab-icon{margin-right:var(--token-tabs-tab-gutter)}.hds-tabs__tab-count{margin-left:var(--token-tabs-tab-gutter)}.hds-tabs__tab-indicator{position:absolute;right:0;bottom:0;left:var(--indicator-left-pos);z-index:10;display:block;width:var(--indicator-width);height:var(--token-tabs-indicator-height);background-color:var(--token-color-foreground-action);border-radius:var(--token-tabs-indicator-height)}.hds-tag,.hds-tag__dismiss,.hds-tag__link{background-color:var(--token-color-surface-interactive)}@media screen and (prefers-reduced-motion:no-preference){.hds-tabs__tab-indicator{transition-timing-function:var(--token-tabs-indicator-transition-function);transition-duration:var(--token-tabs-indicator-transition-duration);transition-property:left,width}}.hds-tag{display:inline-flex;align-items:stretch;line-height:1rem;border:1px solid var(--token-color-border-strong);border-radius:50px}article,aside,figure,footer,header,hgroup,hr,section{display:block}.hds-tag__dismiss{flex:0 0 auto;margin:0;padding:6px 2px 6px 8px;border:none;border-radius:inherit;border-top-right-radius:0;border-bottom-right-radius:0}.hds-tag__dismiss-icon{width:12px;height:12px}.hds-tag__link,.hds-tag__text{flex:1 0 0;padding:3px 10px 5px;border-radius:inherit}.hds-tag__dismiss~.hds-tag__link,.hds-tag__dismiss~.hds-tag__text{padding:3px 8px 5px 6px;border-top-left-radius:0;border-bottom-left-radius:0}.hds-tag__dismiss,.hds-tag__link{cursor:pointer}.hds-tag__dismiss.mock-hover,.hds-tag__dismiss:hover,.hds-tag__link.mock-hover,.hds-tag__link:hover{background-color:var(--token-color-surface-interactive-hover)}.hds-tag__dismiss.mock-active,.hds-tag__dismiss:active,.hds-tag__link.mock-active,.hds-tag__link:active,hr{background-color:var(--token-color-surface-interactive-active)}.hds-tag__dismiss.mock-focus,.hds-tag__dismiss:focus,.hds-tag__link.mock-focus,.hds-tag__link:focus{outline-style:solid;outline-color:transparent;z-index:1}.hds-tag__dismiss.mock-focus.mock-focus,.hds-tag__dismiss.mock-focus:focus,.hds-tag__dismiss:focus.mock-focus,.hds-tag__dismiss:focus:focus,.hds-tag__link.mock-focus.mock-focus,.hds-tag__link.mock-focus:focus,.hds-tag__link:focus.mock-focus,.hds-tag__link:focus:focus{box-shadow:var(--token-focus-ring-action-box-shadow)}.hds-tag__dismiss.mock-focus:focus:not(:focus-visible),.hds-tag__dismiss:focus:focus:not(:focus-visible),.hds-tag__link.mock-focus:focus:not(:focus-visible),.hds-tag__link:focus:focus:not(:focus-visible){box-shadow:none}.hds-tag__dismiss.mock-focus:focus-visible,.hds-tag__dismiss:focus:focus-visible,.hds-tag__link.mock-focus:focus-visible,.hds-tag__link:focus:focus-visible{box-shadow:var(--token-focus-ring-action-box-shadow)}.hds-tag__dismiss.mock-focus.mock-focus.mock-active,.hds-tag__dismiss.mock-focus:focus:active,.hds-tag__dismiss:focus.mock-focus.mock-active,.hds-tag__dismiss:focus:focus:active,.hds-tag__link.mock-focus.mock-focus.mock-active,.hds-tag__link.mock-focus:focus:active,.hds-tag__link:focus.mock-focus.mock-active,.hds-tag__link:focus:focus:active{box-shadow:none}.hds-tag--color-primary .hds-tag__link{color:var(--token-color-foreground-action)}.hds-tag--color-primary .hds-tag__link.mock-hover,.hds-tag--color-primary .hds-tag__link:hover{color:var(--token-color-foreground-action-hover)}.hds-tag--color-primary .hds-tag__link.mock-active,.hds-tag--color-primary .hds-tag__link:active{color:var(--token-color-foreground-action-active)}.hds-tag--color-secondary .hds-tag__link,body{color:var(--token-color-foreground-strong)}.hds-toast{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;min-width:min(360px,80vw);max-width:min(500px,80vw);box-shadow:var(--token-elevation-higher-box-shadow)}.sr-only{position:absolute!important;width:1px!important;height:1px!important;margin:-1px!important;padding:0!important;overflow:hidden!important;white-space:nowrap!important;border:0!important;clip:rect(1px,1px,1px,1px)!important;-webkit-clip-path:inset(50%)!important;clip-path:inset(50%)!important}fieldset,hr{border:none}blockquote,body,dd,dl,dt,fieldset,figure,h1,h2,h3,h4,h5,h6,hr,html,iframe,legend,li,ol,p,pre,textarea,ul{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:400}ul{list-style:none}table td,table th{padding:0;text-align:left}audio,embed,img,object,video{height:auto;max-width:100%}.consul-intention-action-warn-modal button.dangerous,.copy-button button,.disclosure-menu [aria-expanded]~*>ul>[role=treeitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=menuitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=option],.hashicorp-consul nav li.nspaces .disclosure-menu>button,.hashicorp-consul nav li.partitions .disclosure-menu>button,.informed-action>ul>li>*,.menu-panel>ul>[role=treeitem],.menu-panel>ul>li>[role=menuitem],.menu-panel>ul>li>[role=option],.more-popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=option],.popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=option],.popover-select label>*,.topology-notices button,.type-sort.popover-select label>*,label span,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=option],table.with-details tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}a{color:var(--token-color-foreground-action)}span,strong,td,th{color:inherit}html{background-color:var(--token-color-surface-primary);font-size:var(--typo-size-000);text-rendering:optimizeLegibility;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;overflow-x:hidden;overflow-y:scroll;box-sizing:border-box;min-width:300px}hr{height:1px;margin:1.5rem 0}body,input,select,textarea{font-family:var(--typo-family-sans)}.CodeMirror-lint-tooltip,.cm-s-hashi.CodeMirror,code,pre{font-family:var(--typo-family-mono)}strong{font-style:inherit;font-weight:var(--typo-weight-bold)}code,pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}pre{-webkit-overflow-scrolling:touch;overflow-x:auto;white-space:pre;word-wrap:normal}*,::after,::before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scroll-snap-strictness:proximity;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246 / 0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-sizing:inherit;-webkit-animation-play-state:paused;animation-play-state:paused;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}fieldset{width:100%}a,input[type=checkbox],input[type=radio]{cursor:pointer}input[type=checkbox],input[type=radio]{vertical-align:baseline}td,th{text-align:left;vertical-align:top}button,input,select,textarea{margin:0}iframe{border:0}.consul-bucket-list .service,.consul-bucket-list:not([class]) dt:not([class]),.consul-exposed-path-list>ul>li>.detail dl:not([class]) dt:not([class]),.consul-instance-checks:not([class]) dt:not([class]),.consul-lock-session-list dl:not([class]) dt:not([class]),.consul-server-card dt:not(.name),.consul-upstream-instance-list dl.local-bind-address dt,.consul-upstream-instance-list dl.local-bind-socket-path dt,.consul-upstream-instance-list dl:not([class]) dt:not([class]),.list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dt:not([class]),.route-title,.tag-list:not([class]) dt:not([class]),section[data-route="dc.show.license"] .validity dl .expired+dd,section[data-route="dc.show.license"] .validity dl:not([class]) dt:not([class]),section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) dt:not([class]),td.tags:not([class]) dt:not([class]){position:absolute;overflow:hidden;clip:rect(0 0 0 0);width:1px;height:1px;margin:-1px;padding:0;border:0}.consul-upstream-instance-list dl.local-bind-socket-mode dt,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dt{position:static!important;clip:unset!important;overflow:visible!important;width:auto!important;height:auto!important;margin:0!important;padding:0!important}.animatable.tab-nav ul::after,.consul-auth-method-type,.consul-external-source,.consul-intention-action-warn-modal button.dangerous,.consul-intention-action-warn-modal button.dangerous:hover:active,.consul-intention-action-warn-modal button.dangerous:hover:not(:disabled):not(:active),.consul-intention-list td.intent- strong,.consul-intention-permission-form button.type-submit,.consul-intention-permission-form button.type-submit:disabled,.consul-intention-permission-form button.type-submit:focus:not(:disabled),.consul-intention-permission-form button.type-submit:hover:not(:disabled),.consul-intention-search-bar .value- span,.consul-kind,.consul-source,.consul-transparent-proxy,.disclosure-menu [aria-expanded]~*>ul>li.dangerous>:first-child,.discovery-chain .route-card>header ul li,.informed-action>ul>.dangerous>*,.informed-action>ul>.dangerous>:focus,.informed-action>ul>.dangerous>:hover,.leader,.menu-panel>ul>li.dangerous>:first-child,.modal-dialog [role=document]>footer,.modal-dialog [role=document]>header,.more-popover-menu>[type=checkbox]+label+div>ul>li.dangerous>:first-child,.popover-menu>[type=checkbox]+label+div>ul>li.dangerous>:first-child,.tab-nav .selected>*,.topology-metrics-source-type,html[data-route^="dc.acls.index"] main td strong,span.policy-node-identity,span.policy-service-identity,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li.dangerous>:first-child,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li.dangerous>:first-child{border-style:solid}.animatable.tab-nav ul::after,.app .notifications .app-notification,.tab-nav li>*{transition-duration:.15s;transition-timing-function:ease-out}[role=banner] nav:first-of-type,[role=contentinfo],html body>.brand-loader,main{transition-timing-function:cubic-bezier(.1,.1,.25,.9);transition-duration:.1s}html[data-state]:not(.ember-loading) body>.brand-loader{-webkit-animation-timing-function:cubic-bezier(.1,.1,.25,.9);animation-timing-function:cubic-bezier(.1,.1,.25,.9);-webkit-animation-duration:.1s;animation-duration:.1s;-webkit-animation-name:remove-from-flow;animation-name:remove-from-flow;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}@-webkit-keyframes remove-from-flow{100%{visibility:hidden;overflow:hidden;clip:rect(0 0 0 0)}}@keyframes remove-from-flow{100%{visibility:hidden;overflow:hidden;clip:rect(0 0 0 0)}}@-webkit-keyframes typo-truncate{100%{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}}@keyframes typo-truncate{100%{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}}.informed-action header>*{font-size:inherit;font-weight:inherit;line-height:inherit;font-style:inherit}.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=password],.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=text],.app-view>div form:not(.filter-bar) [role=radiogroup] label textarea,.modal-dialog [role=document] .type-password [type=password],.modal-dialog [role=document] .type-password [type=text],.modal-dialog [role=document] .type-password textarea,.modal-dialog [role=document] .type-select [type=password],.modal-dialog [role=document] .type-select [type=text],.modal-dialog [role=document] .type-select textarea,.modal-dialog [role=document] .type-text [type=password],.modal-dialog [role=document] .type-text [type=text],.modal-dialog [role=document] .type-text textarea,.modal-dialog [role=document] [role=radiogroup] label [type=password],.modal-dialog [role=document] [role=radiogroup] label [type=text],.modal-dialog [role=document] [role=radiogroup] label textarea,.oidc-select label [type=password],.oidc-select label [type=text],.oidc-select label textarea,.type-toggle [type=password],.type-toggle [type=text],.type-toggle textarea,body,main .type-password [type=password],main .type-password [type=text],main .type-password textarea,main .type-select [type=password],main .type-select [type=text],main .type-select textarea,main .type-text [type=password],main .type-text [type=text],main .type-text textarea{font-size:var(--typo-size-600);font-family:var(--typo-family-sans);line-height:var(--typo-lead-700)}.app-view>div form:not(.filter-bar) [role=radiogroup] label>span,.app-view>header .title .title-left-container>:first-child,.consul-auth-method-binding-list h2,.consul-auth-method-view section h2,.consul-health-check-list .health-check-output dt,.consul-health-check-list .health-check-output header>*,.consul-intention-list td.destination,.consul-intention-list td.source,.consul-intention-permission-form h2,.consul-intention-view h2,.consul-server-card .name+dd,.definition-table dt,.disclosure-menu [aria-expanded]~*>ul>[role=treeitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=menuitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=option],.empty-state header :first-child,.hashicorp-consul nav .dcs [aria-expanded],.hashicorp-consul nav li.nspaces .disclosure-menu>button,.hashicorp-consul nav li.partitions .disclosure-menu>button,.informed-action header,.informed-action>ul>li>*,.menu-panel>ul>[role=treeitem],.menu-panel>ul>li>[role=menuitem],.menu-panel>ul>li>[role=option],.modal-dialog [role=document] .type-password>span,.modal-dialog [role=document] .type-select>span,.modal-dialog [role=document] .type-text>span,.modal-dialog [role=document] [role=radiogroup] label>span,.modal-dialog [role=document] form h2,.modal-dialog [role=document] table caption,.modal-dialog [role=document] table td strong,.modal-dialog [role=document] table td:first-child,.modal-dialog [role=document] table th,.modal-dialog [role=document]>header>:not(button),.modal-dialog-body h2,.more-popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=option],.oidc-select label>span,.popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=option],.radio-card header,.tab-nav,.type-toggle label span,.type-toggle>span,[role=banner] nav:last-of-type [aria-expanded],[role=banner] nav:last-of-type>ul>li>.popover-menu>label>button,[role=banner] nav:last-of-type>ul>li>a,[role=banner] nav:last-of-type>ul>li>button,[role=banner] nav:last-of-type>ul>li>span,fieldset>header,html[data-route^="dc.kv.edit"] h2,html[data-route^="dc.services.instance.metadata"] .tab-section section h2,main .type-password>span,main .type-select>span,main .type-text>span,main form h2,main header nav:first-child ol li>*,main table caption,main table td strong,main table td:first-child,main table th,section[data-route="dc.show.license"] aside header>:first-child,section[data-route="dc.show.license"] h2,section[data-route="dc.show.serverstatus"] .redundancy-zones h3,section[data-route="dc.show.serverstatus"] h2,section[data-route="dc.show.serverstatus"] h3,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=option],table.with-details tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]{line-height:var(--typo-lead-200)}.app-view>header .title .title-left-container>:first-child{font-weight:var(--typo-weight-bold);font-size:var(--typo-size-200)}.app-view>div form:not(.filter-bar) [role=radiogroup] label>span,.consul-auth-method-binding-list h2,.consul-auth-method-view section h2,.consul-health-check-list .health-check-output header>*,.consul-intention-list td.destination,.consul-intention-list td.source,.consul-intention-permission-form h2,.consul-intention-view h2,.consul-server-card .name+dd,.definition-table dt,.empty-state header :first-child,.hashicorp-consul nav .dcs [aria-expanded],.informed-action header,.modal-dialog [role=document] .type-password>span,.modal-dialog [role=document] .type-select>span,.modal-dialog [role=document] .type-text>span,.modal-dialog [role=document] [role=radiogroup] label>span,.modal-dialog [role=document] form h2,.modal-dialog [role=document] table caption,.modal-dialog [role=document] table td:first-child,.modal-dialog [role=document]>header>:not(button),.modal-dialog-body h2,.oidc-select label>span,.radio-card header,.type-toggle>span,[role=banner] nav:last-of-type [aria-expanded],[role=banner] nav:last-of-type>ul>li>.popover-menu>label>button,[role=banner] nav:last-of-type>ul>li>a,[role=banner] nav:last-of-type>ul>li>button,[role=banner] nav:last-of-type>ul>li>span,fieldset>header,html[data-route^="dc.kv.edit"] h2,html[data-route^="dc.services.instance.metadata"] .tab-section section h2,main .type-password>span,main .type-select>span,main .type-text>span,main form h2,main table caption,main table td:first-child,section[data-route="dc.show.license"] aside header>:first-child,section[data-route="dc.show.license"] h2,section[data-route="dc.show.serverstatus"] .redundancy-zones h3,section[data-route="dc.show.serverstatus"] h2,section[data-route="dc.show.serverstatus"] h3{font-weight:var(--typo-weight-semibold)}.consul-health-check-list .health-check-output dt,.disclosure-menu [aria-expanded]~*>ul>[role=treeitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=menuitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=option],.hashicorp-consul nav li.nspaces .disclosure-menu>button,.hashicorp-consul nav li.partitions .disclosure-menu>button,.informed-action>ul>li>*,.menu-panel>ul>[role=treeitem],.menu-panel>ul>li>[role=menuitem],.menu-panel>ul>li>[role=option],.modal-dialog [role=document] table td strong,.modal-dialog [role=document] table th,.more-popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=option],.popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=option],.tab-nav,.type-toggle label span,main header nav:first-child ol li>*,main table td strong,main table th,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=option],table.with-details tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]{font-weight:var(--typo-weight-medium)}.consul-auth-method-binding-list h2,.consul-auth-method-view section h2,.consul-intention-permission-form h2,.consul-intention-view h2,.empty-state header :first-child,.modal-dialog [role=document] form h2,.modal-dialog [role=document]>header>:not(button),.modal-dialog-body h2,html[data-route^="dc.kv.edit"] h2,main form h2,section[data-route="dc.show.license"] h2,section[data-route="dc.show.serverstatus"] h2,section[data-route="dc.show.serverstatus"] h3{font-size:var(--typo-size-300)}.consul-health-check-list .health-check-output header>*,.consul-server-card .name+dd,html[data-route^="dc.services.instance.metadata"] .tab-section section h2,section[data-route="dc.show.license"] aside header>:first-child,section[data-route="dc.show.serverstatus"] .redundancy-zones h3{font-size:var(--typo-size-500)}.app-view>div form:not(.filter-bar) [role=radiogroup] label>span,.consul-intention-list td.destination,.consul-intention-list td.source,.definition-table dt,.disclosure-menu [aria-expanded]~*>ul>[role=treeitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=menuitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=option],.hashicorp-consul nav .dcs [aria-expanded],.hashicorp-consul nav li.nspaces .disclosure-menu>button,.hashicorp-consul nav li.partitions .disclosure-menu>button,.informed-action header,.informed-action>ul>li>*,.menu-panel>ul>[role=treeitem],.menu-panel>ul>li>[role=menuitem],.menu-panel>ul>li>[role=option],.modal-dialog [role=document] .type-password>span,.modal-dialog [role=document] .type-select>span,.modal-dialog [role=document] .type-text>span,.modal-dialog [role=document] [role=radiogroup] label>span,.modal-dialog [role=document] table caption,.modal-dialog [role=document] table td:first-child,.more-popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=option],.oidc-select label>span,.popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=option],.radio-card header,.tab-nav,.type-toggle>span,[role=banner] nav:last-of-type [aria-expanded],[role=banner] nav:last-of-type>ul>li>.popover-menu>label>button,[role=banner] nav:last-of-type>ul>li>a,[role=banner] nav:last-of-type>ul>li>button,[role=banner] nav:last-of-type>ul>li>span,fieldset>header,main .type-password>span,main .type-select>span,main .type-text>span,main header nav:first-child ol li>*,main table caption,main table td:first-child,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=option],table.with-details tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]{font-size:var(--typo-size-600)}.consul-health-check-list .health-check-output dt,.modal-dialog [role=document] table td strong,.modal-dialog [role=document] table th,.type-toggle label span,main table td strong,main table th{font-size:var(--typo-size-700)}.app-view h1 span.kind-proxy,.app-view>div form:not(.filter-bar) [role=radiogroup] label>em,.app-view>div form:not(.filter-bar) [role=radiogroup] label>span,.auth-form em,.auth-profile,.consul-auth-method-view section,.consul-external-source,.consul-health-check-list .health-check-output dl>dd,.consul-intention-action-warn-modal button.dangerous,.consul-intention-fieldsets .permissions>button,.consul-intention-permission-header-list>ul>li dd,.consul-intention-permission-list>ul>li dd,.consul-kind,.consul-source,.copy-button button,.disclosure-menu [aria-expanded]~* [role=separator],.disclosure-menu [aria-expanded]~*>div,.discovery-chain .resolvers>header>*,.discovery-chain .routes>header>*,.discovery-chain .splitters>header>*,.empty-state header :nth-child(2),.empty-state p,.empty-state>ul>li>*,.empty-state>ul>li>label>button,.has-error>strong,.informed-action p,.menu-panel [role=separator],.menu-panel>div,.modal-dialog [role=document] .type-password>em,.modal-dialog [role=document] .type-password>span,.modal-dialog [role=document] .type-select>em,.modal-dialog [role=document] .type-select>span,.modal-dialog [role=document] .type-text>em,.modal-dialog [role=document] .type-text>span,.modal-dialog [role=document] [role=radiogroup] label>em,.modal-dialog [role=document] [role=radiogroup] label>span,.modal-dialog [role=document] form button+em,.modal-dialog [role=document] p,.modal-dialog [role=document] table td,.modal-dialog [role=document] table td p,.more-popover-menu>[type=checkbox]+label+div [role=separator],.more-popover-menu>[type=checkbox]+label+div>div,.oidc-select button.reset,.oidc-select label>em,.oidc-select label>span,.popover-menu>[type=checkbox]+label+div [role=separator],.popover-menu>[type=checkbox]+label+div>div,.popover-select label>*,.tippy-box[data-theme~=tooltip] .tippy-content,.topology-notices button,.type-sort.popover-select label>*,.type-toggle>em,.type-toggle>span,[role=banner] nav:first-of-type [role=separator],[role=banner] nav:first-of-type a,[role=banner] nav:first-of-type>ul>li>label,[role=contentinfo],main .type-password>em,main .type-password>span,main .type-select>em,main .type-select>span,main .type-text>em,main .type-text>span,main form button+em,main p,main table td,main table td p,pre code,section[data-route="dc.show.serverstatus"] .server-failure-tolerance dt,span.label,table.has-actions tr>.actions>[type=checkbox]+label+div [role=separator],table.has-actions tr>.actions>[type=checkbox]+label+div>div,table.with-details tr>.actions>[type=checkbox]+label+div [role=separator],table.with-details tr>.actions>[type=checkbox]+label+div>div{line-height:inherit;font-size:inherit}.consul-auth-method-view section,.consul-external-source,.consul-kind,.consul-source,[role=banner] nav:first-of-type a,[role=banner] nav:first-of-type>ul>li>label,pre code{font-size:var(--typo-size-600)}.app-view h1 span.kind-proxy,.app-view>div form:not(.filter-bar) [role=radiogroup] label>span,.auth-profile,.consul-health-check-list .health-check-output dl>dd,.consul-intention-fieldsets .permissions>button,.consul-intention-permission-header-list>ul>li dd,.consul-intention-permission-list>ul>li dd,.disclosure-menu [aria-expanded]~*>div,.empty-state>ul>li>*,.empty-state>ul>li>label>button,.informed-action p,.menu-panel>div,.modal-dialog [role=document] .type-password>span,.modal-dialog [role=document] .type-select>span,.modal-dialog [role=document] .type-text>span,.modal-dialog [role=document] [role=radiogroup] label>span,.modal-dialog [role=document] table td,.modal-dialog [role=document] table td p,.more-popover-menu>[type=checkbox]+label+div>div,.oidc-select label>span,.popover-menu>[type=checkbox]+label+div>div,.type-toggle>span,[role=contentinfo],main .type-password>span,main .type-select>span,main .type-text>span,main table td,main table td p,section[data-route="dc.show.serverstatus"] .server-failure-tolerance dt,span.label,table.has-actions tr>.actions>[type=checkbox]+label+div>div,table.with-details tr>.actions>[type=checkbox]+label+div>div{font-size:var(--typo-size-700)}.app-view>div form:not(.filter-bar) [role=radiogroup] label>em,.auth-form em,.consul-intention-action-warn-modal button.dangerous,.copy-button button,.disclosure-menu [aria-expanded]~* [role=separator],.discovery-chain .resolvers>header>*,.discovery-chain .routes>header>*,.discovery-chain .splitters>header>*,.empty-state header :nth-child(2),.empty-state p,.has-error>strong,.menu-panel [role=separator],.modal-dialog [role=document] .type-password>em,.modal-dialog [role=document] .type-select>em,.modal-dialog [role=document] .type-text>em,.modal-dialog [role=document] [role=radiogroup] label>em,.modal-dialog [role=document] form button+em,.modal-dialog [role=document] p,.more-popover-menu>[type=checkbox]+label+div [role=separator],.oidc-select button.reset,.oidc-select label>em,.popover-menu>[type=checkbox]+label+div [role=separator],.popover-select label>*,.tippy-box[data-theme~=tooltip] .tippy-content,.topology-notices button,.type-sort.popover-select label>*,.type-toggle>em,[role=banner] nav:first-of-type [role=separator],[role=contentinfo],main .type-password>em,main .type-select>em,main .type-text>em,main form button+em,main p,table.has-actions tr>.actions>[type=checkbox]+label+div [role=separator],table.with-details tr>.actions>[type=checkbox]+label+div [role=separator]{font-size:var(--typo-size-800)}::after,::before{--tw-content:'';display:inline-block;vertical-align:text-top;background-repeat:no-repeat;background-position:center;mask-repeat:no-repeat;-webkit-mask-repeat:no-repeat;mask-position:center;-webkit-mask-position:center}::before{-webkit-animation-name:var(--icon-name-start,var(--icon-name)),var(--icon-size-start,var(--icon-size,icon-000));animation-name:var(--icon-name-start,var(--icon-name)),var(--icon-size-start,var(--icon-size,icon-000));background-color:var(--icon-color-start,var(--icon-color))}::after{-webkit-animation-name:var(--icon-name-end,var(--icon-name)),var(--icon-size-end,var(--icon-size,icon-000));animation-name:var(--icon-name-end,var(--icon-name)),var(--icon-size-end,var(--icon-size,icon-000));background-color:var(--icon-color-end,var(--icon-color))}[style*="--icon-color-start"]::before{color:var(--icon-color-start)}[style*="--icon-color-end"]::after{color:var(--icon-color-end)}[style*="--icon-name-start"]::before,[style*="--icon-name-end"]::after{content:""}@-webkit-keyframes icon-000{100%{width:1.2em;height:1.2em}}@keyframes icon-000{100%{width:1.2em;height:1.2em}}@-webkit-keyframes icon-100{100%{width:.625rem;height:.625rem}}@keyframes icon-100{100%{width:.625rem;height:.625rem}}@-webkit-keyframes icon-200{100%{width:.75rem;height:.75rem}}@keyframes icon-200{100%{width:.75rem;height:.75rem}}@-webkit-keyframes icon-300{100%{width:1rem;height:1rem}}@keyframes icon-300{100%{width:1rem;height:1rem}}@-webkit-keyframes icon-400{100%{width:1.125rem;height:1.125rem}}@keyframes icon-400{100%{width:1.125rem;height:1.125rem}}@-webkit-keyframes icon-500{100%{width:1.25rem;height:1.25rem}}@keyframes icon-500{100%{width:1.25rem;height:1.25rem}}@-webkit-keyframes icon-600{100%{width:1.375rem;height:1.375rem}}@keyframes icon-600{100%{width:1.375rem;height:1.375rem}}@-webkit-keyframes icon-700{100%{width:1.5rem;height:1.5rem}}@keyframes icon-700{100%{width:1.5rem;height:1.5rem}}@-webkit-keyframes icon-800{100%{width:1.625rem;height:1.625rem}}@keyframes icon-800{100%{width:1.625rem;height:1.625rem}}@-webkit-keyframes icon-900{100%{width:1.75rem;height:1.75rem}}@keyframes icon-900{100%{width:1.75rem;height:1.75rem}}@-webkit-keyframes icon-999{100%{width:100%;height:100%}}@keyframes icon-999{100%{width:100%;height:100%}}.consul-intention-permission-header-list dt::before,.consul-intention-permission-list dt::before,.discovery-chain .resolver-card dt,.discovery-chain .route-card section header>::before{font-weight:var(--typo-weight-normal);background-color:var(--token-color-surface-strong);visibility:visible;padding:0 4px}.consul-intention-action-warn-modal button.dangerous:disabled .progress+*,.copy-button button:disabled .progress+*,.popover-select label>:disabled .progress+*,.topology-notices button:disabled .progress+*,[role=banner] nav:not(.in-viewport):first-of-type{visibility:hidden}#downstream-container .topology-metrics-card .details .group span::before,#downstream-container .topology-metrics-card div .critical::before,#downstream-container .topology-metrics-card div .empty::before,#downstream-container .topology-metrics-card div .health dt::before,#downstream-container .topology-metrics-card div .nspace dt::before,#downstream-container .topology-metrics-card div .partition dt::before,#downstream-container .topology-metrics-card div .passing::before,#downstream-container .topology-metrics-card div .warning::before,#downstream-container>div:first-child span::before,#login-toggle+div footer button::after,#metrics-container .link .config-link::before,#metrics-container .link .metrics-link::before,#metrics-container:hover .sparkline-key-link::before,#upstream-container .topology-metrics-card .details .group span::before,#upstream-container .topology-metrics-card div .critical::before,#upstream-container .topology-metrics-card div .empty::before,#upstream-container .topology-metrics-card div .health dt::before,#upstream-container .topology-metrics-card div .nspace dt::before,#upstream-container .topology-metrics-card div .partition dt::before,#upstream-container .topology-metrics-card div .passing::before,#upstream-container .topology-metrics-card div .warning::before,.animatable.tab-nav ul::after,.consul-auth-method-binding-list dl dt.type+dd span::before,.consul-auth-method-list ul .locality::before,.consul-auth-method-view dl dt.type+dd span::before,.consul-auth-method-view section dl dt.type+dd span::before,.consul-bucket-list .nspace::before,.consul-bucket-list .partition::before,.consul-bucket-list .peer::before,.consul-exposed-path-list>ul>li>.detail .policy-management::before,.consul-exposed-path-list>ul>li>.detail .policy::before,.consul-exposed-path-list>ul>li>.detail .role::before,.consul-exposed-path-list>ul>li>.detail dl.address dt::before,.consul-exposed-path-list>ul>li>.detail dl.behavior dt::before,.consul-exposed-path-list>ul>li>.detail dl.checks dt::before,.consul-exposed-path-list>ul>li>.detail dl.critical dt::before,.consul-exposed-path-list>ul>li>.detail dl.datacenter dt::before,.consul-exposed-path-list>ul>li>.detail dl.empty dt::before,.consul-exposed-path-list>ul>li>.detail dl.lock-delay dt::before,.consul-exposed-path-list>ul>li>.detail dl.mesh dt::before,.consul-exposed-path-list>ul>li>.detail dl.node dt::before,.consul-exposed-path-list>ul>li>.detail dl.nspace dt::before,.consul-exposed-path-list>ul>li>.detail dl.passing dt::before,.consul-exposed-path-list>ul>li>.detail dl.path dt::before,.consul-exposed-path-list>ul>li>.detail dl.port dt::before,.consul-exposed-path-list>ul>li>.detail dl.protocol dt::before,.consul-exposed-path-list>ul>li>.detail dl.socket dt::before,.consul-exposed-path-list>ul>li>.detail dl.ttl dt::before,.consul-exposed-path-list>ul>li>.detail dl.unknown dt::before,.consul-exposed-path-list>ul>li>.detail dl.warning dt::before,.consul-exposed-path-list>ul>li>.header .critical dd::before,.consul-exposed-path-list>ul>li>.header .empty dd::before,.consul-exposed-path-list>ul>li>.header .passing dd::before,.consul-exposed-path-list>ul>li>.header .policy-management dd::before,.consul-exposed-path-list>ul>li>.header .unknown dd::before,.consul-exposed-path-list>ul>li>.header .warning dd::before,.consul-exposed-path-list>ul>li>.header [rel=me] dd::before,.consul-external-source.jwt::before,.consul-external-source.oidc::before,.consul-health-check-list .health-check-output dd em.jwt::before,.consul-health-check-list .health-check-output dd em.oidc::before,.consul-health-check-list .health-check-output::before,.consul-instance-checks dt::before,.consul-intention-fieldsets .value->:last-child::before,.consul-intention-fieldsets .value-allow>:last-child::before,.consul-intention-fieldsets .value-deny>:last-child::before,.consul-intention-list em span::before,.consul-intention-list td strong.jwt::before,.consul-intention-list td strong.oidc::before,.consul-intention-list td.intent- strong::before,.consul-intention-list td.intent-allow strong::before,.consul-intention-list td.intent-deny strong::before,.consul-intention-permission-list .intent-allow::before,.consul-intention-permission-list .intent-deny::before,.consul-intention-permission-list strong.jwt::before,.consul-intention-permission-list strong.oidc::before,.consul-intention-search-bar .value- span::before,.consul-intention-search-bar .value-allow span::before,.consul-intention-search-bar .value-deny span::before,.consul-intention-search-bar li button span.jwt::before,.consul-intention-search-bar li button span.oidc::before,.consul-kind::before,.consul-lock-session-list ul>li:not(:first-child)>.detail .policy-management::before,.consul-lock-session-list ul>li:not(:first-child)>.detail .policy::before,.consul-lock-session-list ul>li:not(:first-child)>.detail .role::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.address dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.behavior dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.checks dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.critical dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.datacenter dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.empty dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.lock-delay dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.mesh dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.node dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.nspace dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.passing dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.path dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.port dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.protocol dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.socket dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.ttl dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.unknown dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.warning dt::before,.consul-lock-session-list ul>li:not(:first-child)>.header .critical dd::before,.consul-lock-session-list ul>li:not(:first-child)>.header .empty dd::before,.consul-lock-session-list ul>li:not(:first-child)>.header .passing dd::before,.consul-lock-session-list ul>li:not(:first-child)>.header .policy-management dd::before,.consul-lock-session-list ul>li:not(:first-child)>.header .unknown dd::before,.consul-lock-session-list ul>li:not(:first-child)>.header .warning dd::before,.consul-lock-session-list ul>li:not(:first-child)>.header [rel=me] dd::before,.consul-peer-search-bar li button span.jwt::before,.consul-peer-search-bar li button span.oidc::before,.consul-server-card .health-status+dd.jwt::before,.consul-server-card .health-status+dd.oidc::before,.consul-upstream-instance-list dl.datacenter dt::before,.consul-upstream-instance-list dl.nspace dt::before,.consul-upstream-instance-list dl.partition dt::before,.consul-upstream-instance-list li>.detail .policy-management::before,.consul-upstream-instance-list li>.detail .policy::before,.consul-upstream-instance-list li>.detail .role::before,.consul-upstream-instance-list li>.detail dl.address dt::before,.consul-upstream-instance-list li>.detail dl.behavior dt::before,.consul-upstream-instance-list li>.detail dl.checks dt::before,.consul-upstream-instance-list li>.detail dl.critical dt::before,.consul-upstream-instance-list li>.detail dl.datacenter dt::before,.consul-upstream-instance-list li>.detail dl.empty dt::before,.consul-upstream-instance-list li>.detail dl.lock-delay dt::before,.consul-upstream-instance-list li>.detail dl.mesh dt::before,.consul-upstream-instance-list li>.detail dl.node dt::before,.consul-upstream-instance-list li>.detail dl.nspace dt::before,.consul-upstream-instance-list li>.detail dl.passing dt::before,.consul-upstream-instance-list li>.detail dl.path dt::before,.consul-upstream-instance-list li>.detail dl.port dt::before,.consul-upstream-instance-list li>.detail dl.protocol dt::before,.consul-upstream-instance-list li>.detail dl.socket dt::before,.consul-upstream-instance-list li>.detail dl.ttl dt::before,.consul-upstream-instance-list li>.detail dl.unknown dt::before,.consul-upstream-instance-list li>.detail dl.warning dt::before,.consul-upstream-instance-list li>.header .critical dd::before,.consul-upstream-instance-list li>.header .empty dd::before,.consul-upstream-instance-list li>.header .passing dd::before,.consul-upstream-instance-list li>.header .policy-management dd::before,.consul-upstream-instance-list li>.header .unknown dd::before,.consul-upstream-instance-list li>.header .warning dd::before,.consul-upstream-instance-list li>.header [rel=me] dd::before,.consul-upstream-list dl.partition dt::before,.copy-button button::before,.dangerous.informed-action header::before,.disclosure-menu [aria-expanded]~*>ul>li.is-active>::after,.disclosure-menu [aria-expanded]~*>ul>li[aria-checked]>::after,.disclosure-menu [aria-expanded]~*>ul>li[aria-current]>::after,.disclosure-menu [aria-expanded]~*>ul>li[aria-selected]>::after,.discovery-chain .resolvers>header span::after,.discovery-chain .route-card::before,.discovery-chain .route-card>header ul li.jwt::before,.discovery-chain .route-card>header ul li.oidc::before,.discovery-chain .routes>header span::after,.discovery-chain .splitter-card::before,.discovery-chain .splitters>header span::after,.empty-state li[class*=-link]>::after,.has-error>strong::before,.hashicorp-consul .docs-link a::after,.hashicorp-consul .feedback-link a::after,.hashicorp-consul .learn-link a::after,.hashicorp-consul nav .dcs .dc-name span.jwt::before,.hashicorp-consul nav .dcs .dc-name span.oidc::before,.hashicorp-consul nav .dcs li.is-local span.jwt::before,.hashicorp-consul nav .dcs li.is-local span.oidc::before,.hashicorp-consul nav .dcs li.is-primary span.jwt::before,.hashicorp-consul nav .dcs li.is-primary span.oidc::before,.hashicorp-consul nav li.nspaces .disclosure-menu>button::after,.hashicorp-consul nav li.partitions .disclosure-menu>button::after,.info.informed-action header::before,.jwt.consul-auth-method-type::before,.jwt.consul-external-source::before,.jwt.consul-kind::before,.jwt.consul-source::before,.jwt.consul-transparent-proxy::before,.jwt.leader::before,.jwt.topology-metrics-source-type::before,.leader::before,.list-collection>button::after,.list-collection>ul>li:not(:first-child)>.detail .policy-management::before,.list-collection>ul>li:not(:first-child)>.detail .policy::before,.list-collection>ul>li:not(:first-child)>.detail .role::before,.list-collection>ul>li:not(:first-child)>.detail dl.address dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.behavior dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.checks dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.critical dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.datacenter dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.empty dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.lock-delay dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.mesh dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.node dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.nspace dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.passing dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.path dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.port dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.protocol dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.socket dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.ttl dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.unknown dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.warning dt::before,.list-collection>ul>li:not(:first-child)>.header .critical dd::before,.list-collection>ul>li:not(:first-child)>.header .empty dd::before,.list-collection>ul>li:not(:first-child)>.header .passing dd::before,.list-collection>ul>li:not(:first-child)>.header .policy-management dd::before,.list-collection>ul>li:not(:first-child)>.header .unknown dd::before,.list-collection>ul>li:not(:first-child)>.header .warning dd::before,.list-collection>ul>li:not(:first-child)>.header [rel=me] dd::before,.menu-panel>ul>li.is-active>::after,.menu-panel>ul>li[aria-checked]>::after,.menu-panel>ul>li[aria-current]>::after,.menu-panel>ul>li[aria-selected]>::after,.modal-dialog [role=document] a[rel*=help]::after,.modal-dialog [role=document] table td.folder::before,.modal-dialog [role=document] table th span::after,.more-popover-menu>[type=checkbox]+label+div>ul>li.is-active>::after,.more-popover-menu>[type=checkbox]+label+div>ul>li[aria-checked]>::after,.more-popover-menu>[type=checkbox]+label+div>ul>li[aria-current]>::after,.more-popover-menu>[type=checkbox]+label+div>ul>li[aria-selected]>::after,.more-popover-menu>[type=checkbox]+label>::after,.oidc-select .auth0-oidc-provider::before,.oidc-select .google-oidc-provider::before,.oidc-select .microsoft-oidc-provider::before,.oidc-select .okta-oidc-provider::before,.oidc.consul-auth-method-type::before,.oidc.consul-external-source::before,.oidc.consul-kind::before,.oidc.consul-source::before,.oidc.consul-transparent-proxy::before,.oidc.leader::before,.oidc.topology-metrics-source-type::before,.popover-menu>[type=checkbox]+label+div>ul>li.is-active>::after,.popover-menu>[type=checkbox]+label+div>ul>li[aria-checked]>::after,.popover-menu>[type=checkbox]+label+div>ul>li[aria-current]>::after,.popover-menu>[type=checkbox]+label+div>ul>li[aria-selected]>::after,.popover-menu>[type=checkbox]+label>::after,.popover-select .jwt button::before,.popover-select .oidc button::before,.popover-select .value-critical button::before,.popover-select .value-empty button::before,.popover-select .value-passing button::before,.popover-select .value-unknown button::before,.popover-select .value-warning button::before,.search-bar-status li.jwt:not(.remove-all)::before,.search-bar-status li.oidc:not(.remove-all)::before,.search-bar-status li:not(.remove-all) button::before,.sparkline-key h3::before,.tag-list dt::before,.tooltip-panel dd>div::before,.topology-metrics-popover.deny .tippy-arrow::after,.topology-metrics-popover.deny>button::before,.topology-metrics-popover.l7 .tippy-arrow::after,.topology-metrics-popover.l7>button::before,.topology-metrics-popover.not-defined .tippy-arrow::after,.topology-metrics-popover.not-defined>button::before,.topology-metrics-status-error span::before,.topology-metrics-status-loader span::before,.topology-notices button::before,.type-sort.popover-select label>::before,.type-source.popover-select li.partition button::before,.warning.informed-action header::before,.warning.modal-dialog header::before,[class*=status-].empty-state header::before,a[rel*=external]::after,html[data-route^="dc.acls.index"] main td strong.jwt::before,html[data-route^="dc.acls.index"] main td strong.oidc::before,main a[rel*=help]::after,main header nav:first-child ol li:first-child a::before,main table td.folder::before,main table th span::after,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl.jwt::before,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl.oidc::before,section[data-route="dc.show.serverstatus"] .server-failure-tolerance header em.jwt::before,section[data-route="dc.show.serverstatus"] .server-failure-tolerance header em.oidc::before,span.jwt.policy-node-identity::before,span.jwt.policy-service-identity::before,span.oidc.policy-node-identity::before,span.oidc.policy-service-identity::before,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li.is-active>::after,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li[aria-checked]>::after,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li[aria-current]>::after,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li[aria-selected]>::after,table.has-actions tr>.actions>[type=checkbox]+label>::after,table.with-details td:only-child>div>label::before,table.with-details td>label::before,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li.is-active>::after,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li[aria-checked]>::after,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li[aria-current]>::after,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li[aria-selected]>::after,table.with-details tr>.actions>[type=checkbox]+label>::after,td.tags dt::before{content:""}.hashicorp-consul .acls-separator span{box-sizing:border-box;width:12px;height:12px}.hashicorp-consul .acls-separator span::after,.hashicorp-consul .acls-separator span::before{content:"";display:block;width:100%;height:100%;border-radius:100%}.hashicorp-consul .acls-separator span::before{border:1px solid currentColor;opacity:.5}.ember-power-select-trigger,.ember-power-select-trigger--active,.ember-power-select-trigger:focus{border-top:1px solid #aaa;border-bottom:1px solid #aaa;border-right:1px solid #aaa;border-left:1px solid #aaa}.hashicorp-consul .acls-separator span::after{position:absolute;top:2px;left:2px;width:calc(100% - 4px);height:calc(100% - 4px);background-color:currentColor}@-webkit-keyframes icon-alert-circle-outline{100%{-webkit-mask-image:var(--icon-alert-circle-16);mask-image:var(--icon-alert-circle-16);background-color:var(--icon-color,var(--color-alert-circle-outline-500,currentColor))}}@keyframes icon-alert-circle-outline{100%{-webkit-mask-image:var(--icon-alert-circle-16);mask-image:var(--icon-alert-circle-16);background-color:var(--icon-color,var(--color-alert-circle-outline-500,currentColor))}}[class*=status-].empty-state header::before{--icon-name:icon-alert-circle-outline;content:""}@-webkit-keyframes icon-alert-triangle{100%{-webkit-mask-image:var(--icon-alert-triangle-16);mask-image:var(--icon-alert-triangle-16);background-color:var(--icon-color,var(--color-alert-triangle-500,currentColor))}}@keyframes icon-alert-triangle{100%{-webkit-mask-image:var(--icon-alert-triangle-16);mask-image:var(--icon-alert-triangle-16);background-color:var(--icon-color,var(--color-alert-triangle-500,currentColor))}}#downstream-container .topology-metrics-card div .warning::before,#upstream-container .topology-metrics-card div .warning::before,.consul-exposed-path-list>ul>li>.detail dl.warning dt::before,.consul-exposed-path-list>ul>li>.header .warning dd::before,.consul-health-check-list .warning.health-check-output::before,.consul-instance-checks.warning dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.warning dt::before,.consul-lock-session-list ul>li:not(:first-child)>.header .warning dd::before,.consul-upstream-instance-list li>.detail dl.warning dt::before,.consul-upstream-instance-list li>.header .warning dd::before,.dangerous.informed-action header::before,.list-collection>ul>li:not(:first-child)>.detail dl.warning dt::before,.list-collection>ul>li:not(:first-child)>.header .warning dd::before,.popover-select .value-warning button::before,.topology-metrics-popover.not-defined .tippy-arrow::after,.topology-metrics-popover.not-defined>button::before,.warning.informed-action header::before,.warning.modal-dialog header::before{--icon-name:icon-alert-triangle;content:""}@-webkit-keyframes icon-arrow-left{100%{-webkit-mask-image:var(--icon-arrow-left-16);mask-image:var(--icon-arrow-left-16);background-color:var(--icon-color,var(--color-arrow-left-500,currentColor))}}@keyframes icon-arrow-left{100%{-webkit-mask-image:var(--icon-arrow-left-16);mask-image:var(--icon-arrow-left-16);background-color:var(--icon-color,var(--color-arrow-left-500,currentColor))}}@-webkit-keyframes icon-arrow-right{100%{-webkit-mask-image:var(--icon-arrow-right-16);mask-image:var(--icon-arrow-right-16);background-color:var(--icon-color,var(--color-arrow-right-500,currentColor))}}@keyframes icon-arrow-right{100%{-webkit-mask-image:var(--icon-arrow-right-16);mask-image:var(--icon-arrow-right-16);background-color:var(--icon-color,var(--color-arrow-right-500,currentColor))}}@-webkit-keyframes icon-cancel-plain{100%{-webkit-mask-image:var(--icon-x-16);mask-image:var(--icon-x-16);background-color:var(--icon-color,var(--color-cancel-plain-500,currentColor))}}@keyframes icon-cancel-plain{100%{-webkit-mask-image:var(--icon-x-16);mask-image:var(--icon-x-16);background-color:var(--icon-color,var(--color-cancel-plain-500,currentColor))}}.search-bar-status li:not(.remove-all) button::before{--icon-name:icon-cancel-plain;content:""}@-webkit-keyframes icon-cancel-square-fill{100%{-webkit-mask-image:var(--icon-x-square-fill-16);mask-image:var(--icon-x-square-fill-16);background-color:var(--icon-color,var(--color-cancel-square-fill-500,currentColor))}}@keyframes icon-cancel-square-fill{100%{-webkit-mask-image:var(--icon-x-square-fill-16);mask-image:var(--icon-x-square-fill-16);background-color:var(--icon-color,var(--color-cancel-square-fill-500,currentColor))}}#downstream-container .topology-metrics-card div .critical::before,#upstream-container .topology-metrics-card div .critical::before,.consul-exposed-path-list>ul>li>.detail dl.critical dt::before,.consul-exposed-path-list>ul>li>.header .critical dd::before,.consul-health-check-list .critical.health-check-output::before,.consul-instance-checks.critical dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.critical dt::before,.consul-lock-session-list ul>li:not(:first-child)>.header .critical dd::before,.consul-upstream-instance-list li>.detail dl.critical dt::before,.consul-upstream-instance-list li>.header .critical dd::before,.has-error>strong::before,.list-collection>ul>li:not(:first-child)>.detail dl.critical dt::before,.list-collection>ul>li:not(:first-child)>.header .critical dd::before,.popover-select .value-critical button::before,.topology-metrics-popover.deny .tippy-arrow::after,.topology-metrics-popover.deny>button::before{--icon-name:icon-cancel-square-fill;content:""}@-webkit-keyframes icon-check-plain{100%{-webkit-mask-image:var(--icon-check-16);mask-image:var(--icon-check-16);background-color:var(--icon-color,var(--color-check-plain-500,currentColor))}}@keyframes icon-check-plain{100%{-webkit-mask-image:var(--icon-check-16);mask-image:var(--icon-check-16);background-color:var(--icon-color,var(--color-check-plain-500,currentColor))}}.disclosure-menu [aria-expanded]~*>ul>li.is-active>::after,.disclosure-menu [aria-expanded]~*>ul>li[aria-checked]>::after,.disclosure-menu [aria-expanded]~*>ul>li[aria-current]>::after,.disclosure-menu [aria-expanded]~*>ul>li[aria-selected]>::after,.menu-panel>ul>li.is-active>::after,.menu-panel>ul>li[aria-checked]>::after,.menu-panel>ul>li[aria-current]>::after,.menu-panel>ul>li[aria-selected]>::after,.more-popover-menu>[type=checkbox]+label+div>ul>li.is-active>::after,.more-popover-menu>[type=checkbox]+label+div>ul>li[aria-checked]>::after,.more-popover-menu>[type=checkbox]+label+div>ul>li[aria-current]>::after,.more-popover-menu>[type=checkbox]+label+div>ul>li[aria-selected]>::after,.popover-menu>[type=checkbox]+label+div>ul>li.is-active>::after,.popover-menu>[type=checkbox]+label+div>ul>li[aria-checked]>::after,.popover-menu>[type=checkbox]+label+div>ul>li[aria-current]>::after,.popover-menu>[type=checkbox]+label+div>ul>li[aria-selected]>::after,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li.is-active>::after,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li[aria-checked]>::after,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li[aria-current]>::after,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li[aria-selected]>::after,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li.is-active>::after,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li[aria-checked]>::after,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li[aria-current]>::after,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li[aria-selected]>::after{--icon-name:icon-check-plain;content:""}@-webkit-keyframes icon-chevron-down{100%{-webkit-mask-image:var(--icon-chevron-down-16);mask-image:var(--icon-chevron-down-16);background-color:var(--icon-color,var(--color-chevron-down-500,currentColor))}}@keyframes icon-chevron-down{100%{-webkit-mask-image:var(--icon-chevron-down-16);mask-image:var(--icon-chevron-down-16);background-color:var(--icon-color,var(--color-chevron-down-500,currentColor))}}.hashicorp-consul nav li.nspaces .disclosure-menu>button::after,.hashicorp-consul nav li.partitions .disclosure-menu>button::after,.list-collection>button.closed::after,.more-popover-menu>[type=checkbox]+label>::after,.popover-menu>[type=checkbox]+label>::after,.topology-notices button::before,table.has-actions tr>.actions>[type=checkbox]+label>::after,table.with-details td:only-child>div>label::before,table.with-details td>label::before,table.with-details tr>.actions>[type=checkbox]+label>::after{--icon-name:icon-chevron-down;content:""}@-webkit-keyframes icon-copy-action{100%{-webkit-mask-image:var(--icon-clipboard-copy-16);mask-image:var(--icon-clipboard-copy-16);background-color:var(--icon-color,var(--color-copy-action-500,currentColor))}}@keyframes icon-copy-action{100%{-webkit-mask-image:var(--icon-clipboard-copy-16);mask-image:var(--icon-clipboard-copy-16);background-color:var(--icon-color,var(--color-copy-action-500,currentColor))}}.copy-button button::before{--icon-name:icon-copy-action;content:"";--icon-color:var(--token-color-foreground-faint)}@-webkit-keyframes icon-deny-alt{100%{-webkit-mask-image:var(--icon-skip-16);mask-image:var(--icon-skip-16);background-color:var(--icon-color,var(--color-deny-alt-500,currentColor))}}@keyframes icon-deny-alt{100%{-webkit-mask-image:var(--icon-skip-16);mask-image:var(--icon-skip-16);background-color:var(--icon-color,var(--color-deny-alt-500,currentColor))}}@-webkit-keyframes icon-deny-default{100%{-webkit-mask-image:var(--icon-skip-16);mask-image:var(--icon-skip-16);background-color:var(--icon-color,var(--color-deny-default-500,currentColor))}}@keyframes icon-deny-default{100%{-webkit-mask-image:var(--icon-skip-16);mask-image:var(--icon-skip-16);background-color:var(--icon-color,var(--color-deny-default-500,currentColor))}}@-webkit-keyframes icon-disabled{100%{-webkit-mask-image:var(--icon-skip-16);mask-image:var(--icon-skip-16);background-color:var(--icon-color,var(--color-disabled-500,currentColor))}}@keyframes icon-disabled{100%{-webkit-mask-image:var(--icon-skip-16);mask-image:var(--icon-skip-16);background-color:var(--icon-color,var(--color-disabled-500,currentColor))}}.status-403.empty-state header::before{--icon-name:icon-disabled;content:""}@-webkit-keyframes icon-docs{100%{-webkit-mask-image:var(--icon-docs-16);mask-image:var(--icon-docs-16);background-color:var(--icon-color,var(--color-docs-500,currentColor))}}@keyframes icon-docs{100%{-webkit-mask-image:var(--icon-docs-16);mask-image:var(--icon-docs-16);background-color:var(--icon-color,var(--color-docs-500,currentColor))}}#metrics-container .link .config-link::before,.empty-state .docs-link>::after,.hashicorp-consul .docs-link a::after{--icon-name:icon-docs;content:""}@-webkit-keyframes icon-exit{100%{-webkit-mask-image:var(--icon-external-link-16);mask-image:var(--icon-external-link-16);background-color:var(--icon-color,var(--color-exit-500,currentColor))}}@keyframes icon-exit{100%{-webkit-mask-image:var(--icon-external-link-16);mask-image:var(--icon-external-link-16);background-color:var(--icon-color,var(--color-exit-500,currentColor))}}#metrics-container .link .metrics-link::before,a[rel*=external]::after{--icon-name:icon-exit;content:""}@-webkit-keyframes icon-file-fill{100%{-webkit-mask-image:var(--icon-file-16);mask-image:var(--icon-file-16);background-color:var(--icon-color,var(--color-file-fill-500,currentColor))}}@keyframes icon-file-fill{100%{-webkit-mask-image:var(--icon-file-16);mask-image:var(--icon-file-16);background-color:var(--icon-color,var(--color-file-fill-500,currentColor))}}@-webkit-keyframes icon-folder-outline{100%{-webkit-mask-image:var(--icon-folder-16);mask-image:var(--icon-folder-16);background-color:var(--icon-color,var(--color-folder-outline-500,currentColor))}}@keyframes icon-folder-outline{100%{-webkit-mask-image:var(--icon-folder-16);mask-image:var(--icon-folder-16);background-color:var(--icon-color,var(--color-folder-outline-500,currentColor))}}#downstream-container .topology-metrics-card div .nspace dt::before,#upstream-container .topology-metrics-card div .nspace dt::before,.consul-bucket-list .nspace::before,.consul-exposed-path-list>ul>li>.detail dl.nspace dt::before,.consul-intention-list span[class|=nspace]::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.nspace dt::before,.consul-upstream-instance-list dl.nspace dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.nspace dt::before,.modal-dialog [role=document] table td.folder::before,main table td.folder::before{--icon-name:icon-folder-outline;content:""}@-webkit-keyframes icon-health{100%{-webkit-mask-image:var(--icon-activity-16);mask-image:var(--icon-activity-16);background-color:var(--icon-color,var(--color-health-500,currentColor))}}@keyframes icon-health{100%{-webkit-mask-image:var(--icon-activity-16);mask-image:var(--icon-activity-16);background-color:var(--icon-color,var(--color-health-500,currentColor))}}.consul-exposed-path-list>ul>li>.detail dl.checks dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.checks dt::before,.consul-upstream-instance-list li>.detail dl.checks dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.checks dt::before{--icon-name:icon-health;content:""}@-webkit-keyframes icon-help-circle-outline{100%{-webkit-mask-image:var(--icon-help-16);mask-image:var(--icon-help-16);background-color:var(--icon-color,var(--color-help-circle-outline-500,currentColor))}}@keyframes icon-help-circle-outline{100%{-webkit-mask-image:var(--icon-help-16);mask-image:var(--icon-help-16);background-color:var(--icon-color,var(--color-help-circle-outline-500,currentColor))}}#downstream-container .topology-metrics-card div .health dt::before,#upstream-container .topology-metrics-card div .health dt::before,.consul-exposed-path-list>ul>li>.detail dl.unknown dt::before,.consul-exposed-path-list>ul>li>.header .unknown dd::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.unknown dt::before,.consul-lock-session-list ul>li:not(:first-child)>.header .unknown dd::before,.consul-upstream-instance-list li>.detail dl.unknown dt::before,.consul-upstream-instance-list li>.header .unknown dd::before,.list-collection>ul>li:not(:first-child)>.detail dl.unknown dt::before,.list-collection>ul>li:not(:first-child)>.header .unknown dd::before,.popover-select .value-unknown button::before,.status-404.empty-state header::before{--icon-name:icon-help-circle-outline;content:""}@-webkit-keyframes icon-info-circle-fill{100%{-webkit-mask-image:var(--icon-info-16);mask-image:var(--icon-info-16);background-color:var(--icon-color,var(--color-info-circle-fill-500,currentColor))}}@keyframes icon-info-circle-fill{100%{-webkit-mask-image:var(--icon-info-16);mask-image:var(--icon-info-16);background-color:var(--icon-color,var(--color-info-circle-fill-500,currentColor))}}#metrics-container:hover .sparkline-key-link::before,.info.informed-action header::before,.sparkline-key h3::before{--icon-name:icon-info-circle-fill;content:""}@-webkit-keyframes icon-info-circle-outline{100%{-webkit-mask-image:var(--icon-info-16);mask-image:var(--icon-info-16);background-color:var(--icon-color,var(--color-info-circle-outline-500,currentColor))}}@keyframes icon-info-circle-outline{100%{-webkit-mask-image:var(--icon-info-16);mask-image:var(--icon-info-16);background-color:var(--icon-color,var(--color-info-circle-outline-500,currentColor))}}#downstream-container>div:first-child span::before,.consul-auth-method-binding-list dl dt.type+dd span::before,.consul-auth-method-view dl dt.type+dd span::before,.consul-exposed-path-list>ul>li>.detail dl.behavior dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.behavior dt::before,.consul-upstream-instance-list li>.detail dl.behavior dt::before,.discovery-chain .resolvers>header span::after,.discovery-chain .routes>header span::after,.discovery-chain .splitters>header span::after,.list-collection>ul>li:not(:first-child)>.detail dl.behavior dt::before,.modal-dialog [role=document] a[rel*=help]::after,.modal-dialog [role=document] table th span::after,.topology-metrics-status-error span::before,.topology-metrics-status-loader span::before,main a[rel*=help]::after,main table th span::after{--icon-name:icon-info-circle-outline;content:""}@-webkit-keyframes icon-learn{100%{-webkit-mask-image:var(--icon-learn-16);mask-image:var(--icon-learn-16);background-color:var(--icon-color,var(--color-learn-500,currentColor))}}@keyframes icon-learn{100%{-webkit-mask-image:var(--icon-learn-16);mask-image:var(--icon-learn-16);background-color:var(--icon-color,var(--color-learn-500,currentColor))}}.empty-state .learn-link>::after,.hashicorp-consul .learn-link a::after{--icon-name:icon-learn;content:""}@-webkit-keyframes icon-loading{100%{-webkit-mask-image:var(--icon-loading-16);mask-image:var(--icon-loading-16);background-color:var(--icon-color,var(--color-loading-500,currentColor))}}@-webkit-keyframes icon-logo-github-monochrome{100%{-webkit-mask-image:var(--icon-github-color-16);mask-image:var(--icon-github-color-16);background-color:var(--icon-color,var(--color-logo-github-monochrome-500,currentColor))}}@keyframes icon-logo-github-monochrome{100%{-webkit-mask-image:var(--icon-github-color-16);mask-image:var(--icon-github-color-16);background-color:var(--icon-color,var(--color-logo-github-monochrome-500,currentColor))}}.hashicorp-consul .feedback-link a::after{--icon-name:icon-logo-github-monochrome;content:""}@-webkit-keyframes icon-logo-google-color{100%{background-image:var(--icon-google-color-16)}}@keyframes icon-logo-google-color{100%{background-image:var(--icon-google-color-16)}}.oidc-select .google-oidc-provider::before{--icon-name:icon-logo-google-color;content:""}@-webkit-keyframes icon-logo-kubernetes-color{100%{background-image:var(--icon-kubernetes-color-16)}}@keyframes icon-logo-kubernetes-color{100%{background-image:var(--icon-kubernetes-color-16)}}@-webkit-keyframes icon-menu{100%{-webkit-mask-image:var(--icon-menu-16);mask-image:var(--icon-menu-16);background-color:var(--icon-color,var(--color-menu-500,currentColor))}}@keyframes icon-menu{100%{-webkit-mask-image:var(--icon-menu-16);mask-image:var(--icon-menu-16);background-color:var(--icon-color,var(--color-menu-500,currentColor))}}@-webkit-keyframes icon-minus-square-fill{100%{-webkit-mask-image:var(--icon-minus-square-16);mask-image:var(--icon-minus-square-16);background-color:var(--icon-color,var(--color-minus-square-fill-500,currentColor))}}@keyframes icon-minus-square-fill{100%{-webkit-mask-image:var(--icon-minus-square-16);mask-image:var(--icon-minus-square-16);background-color:var(--icon-color,var(--color-minus-square-fill-500,currentColor))}}#downstream-container .topology-metrics-card div .empty::before,#upstream-container .topology-metrics-card div .empty::before,.consul-exposed-path-list>ul>li>.detail dl.empty dt::before,.consul-exposed-path-list>ul>li>.header .empty dd::before,.consul-instance-checks.empty dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.empty dt::before,.consul-lock-session-list ul>li:not(:first-child)>.header .empty dd::before,.consul-upstream-instance-list li>.detail dl.empty dt::before,.consul-upstream-instance-list li>.header .empty dd::before,.list-collection>ul>li:not(:first-child)>.detail dl.empty dt::before,.list-collection>ul>li:not(:first-child)>.header .empty dd::before,.popover-select .value-empty button::before{--icon-name:icon-minus-square-fill;content:""}@-webkit-keyframes icon-more-horizontal{100%{-webkit-mask-image:var(--icon-more-horizontal-16);mask-image:var(--icon-more-horizontal-16);background-color:var(--icon-color,var(--color-more-horizontal-500,currentColor))}}@keyframes icon-more-horizontal{100%{-webkit-mask-image:var(--icon-more-horizontal-16);mask-image:var(--icon-more-horizontal-16);background-color:var(--icon-color,var(--color-more-horizontal-500,currentColor))}}@-webkit-keyframes icon-public-default{100%{-webkit-mask-image:var(--icon-globe-16);mask-image:var(--icon-globe-16);background-color:var(--icon-color,var(--color-public-default-500,currentColor))}}@keyframes icon-public-default{100%{-webkit-mask-image:var(--icon-globe-16);mask-image:var(--icon-globe-16);background-color:var(--icon-color,var(--color-public-default-500,currentColor))}}.consul-auth-method-list ul .locality::before,.consul-exposed-path-list>ul>li>.detail dl.address dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.address dt::before,.consul-upstream-instance-list li>.detail dl.address dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.address dt::before{--icon-name:icon-public-default;content:""}@-webkit-keyframes icon-search{100%{-webkit-mask-image:var(--icon-search-16);mask-image:var(--icon-search-16);background-color:var(--icon-color,var(--color-search-500,currentColor))}}@keyframes icon-search{100%{-webkit-mask-image:var(--icon-search-16);mask-image:var(--icon-search-16);background-color:var(--icon-color,var(--color-search-500,currentColor))}}@-webkit-keyframes icon-star-outline{100%{-webkit-mask-image:var(--icon-star-16);mask-image:var(--icon-star-16);background-color:var(--icon-color,var(--color-star-outline-500,currentColor))}}@keyframes icon-star-outline{100%{-webkit-mask-image:var(--icon-star-16);mask-image:var(--icon-star-16);background-color:var(--icon-color,var(--color-star-outline-500,currentColor))}}.leader::before{--icon-name:icon-star-outline;content:""}@-webkit-keyframes icon-user-organization{100%{-webkit-mask-image:var(--icon-org-16);mask-image:var(--icon-org-16);background-color:var(--icon-color,var(--color-user-organization-500,currentColor))}}@keyframes icon-user-organization{100%{-webkit-mask-image:var(--icon-org-16);mask-image:var(--icon-org-16);background-color:var(--icon-color,var(--color-user-organization-500,currentColor))}}.consul-exposed-path-list>ul>li>.detail dl.datacenter dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.datacenter dt::before,.consul-upstream-instance-list dl.datacenter dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.datacenter dt::before{--icon-name:icon-user-organization;content:""}@-webkit-keyframes icon-user-plain{100%{-webkit-mask-image:var(--icon-user-16);mask-image:var(--icon-user-16);background-color:var(--icon-color,var(--color-user-plain-500,currentColor))}}@keyframes icon-user-plain{100%{-webkit-mask-image:var(--icon-user-16);mask-image:var(--icon-user-16);background-color:var(--icon-color,var(--color-user-plain-500,currentColor))}}.consul-exposed-path-list>ul>li>.detail .role::before,.consul-lock-session-list ul>li:not(:first-child)>.detail .role::before,.consul-upstream-instance-list li>.detail .role::before,.list-collection>ul>li:not(:first-child)>.detail .role::before{--icon-name:icon-user-plain;content:""}@-webkit-keyframes icon-user-team{100%{-webkit-mask-image:var(--icon-users-16);mask-image:var(--icon-users-16);background-color:var(--icon-color,var(--color-user-team-500,currentColor))}}@keyframes icon-user-team{100%{-webkit-mask-image:var(--icon-users-16);mask-image:var(--icon-users-16);background-color:var(--icon-color,var(--color-user-team-500,currentColor))}}#downstream-container .topology-metrics-card div .partition dt::before,#upstream-container .topology-metrics-card div .partition dt::before,.consul-bucket-list .partition::before,.consul-intention-list span[class|=partition]::before,.consul-upstream-instance-list dl.partition dt::before,.consul-upstream-list dl.partition dt::before,.type-source.popover-select li.partition button::before{--icon-name:icon-user-team;content:""}@-webkit-keyframes icon-alert-circle{100%{-webkit-mask-image:var(--icon-alert-circle-16);mask-image:var(--icon-alert-circle-16);background-color:var(--icon-color,var(--color-alert-circle-500,currentColor))}}@keyframes icon-alert-circle{100%{-webkit-mask-image:var(--icon-alert-circle-16);mask-image:var(--icon-alert-circle-16);background-color:var(--icon-color,var(--color-alert-circle-500,currentColor))}}@-webkit-keyframes icon-check{100%{-webkit-mask-image:var(--icon-check-16);mask-image:var(--icon-check-16);background-color:var(--icon-color,var(--color-check-500,currentColor))}}@keyframes icon-check{100%{-webkit-mask-image:var(--icon-check-16);mask-image:var(--icon-check-16);background-color:var(--icon-color,var(--color-check-500,currentColor))}}@-webkit-keyframes icon-check-circle{100%{-webkit-mask-image:var(--icon-check-circle-16);mask-image:var(--icon-check-circle-16);background-color:var(--icon-color,var(--color-check-circle-500,currentColor))}}@keyframes icon-check-circle{100%{-webkit-mask-image:var(--icon-check-circle-16);mask-image:var(--icon-check-circle-16);background-color:var(--icon-color,var(--color-check-circle-500,currentColor))}}@-webkit-keyframes icon-check-circle-fill{100%{-webkit-mask-image:var(--icon-check-circle-fill-16);mask-image:var(--icon-check-circle-fill-16);background-color:var(--icon-color,var(--color-check-circle-fill-500,currentColor))}}@keyframes icon-check-circle-fill{100%{-webkit-mask-image:var(--icon-check-circle-fill-16);mask-image:var(--icon-check-circle-fill-16);background-color:var(--icon-color,var(--color-check-circle-fill-500,currentColor))}}#downstream-container .topology-metrics-card div .passing::before,#upstream-container .topology-metrics-card div .passing::before,.consul-exposed-path-list>ul>li>.detail dl.passing dt::before,.consul-exposed-path-list>ul>li>.header .passing dd::before,.consul-exposed-path-list>ul>li>.header [rel=me] dd::before,.consul-health-check-list .passing.health-check-output::before,.consul-instance-checks.passing dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.passing dt::before,.consul-lock-session-list ul>li:not(:first-child)>.header .passing dd::before,.consul-lock-session-list ul>li:not(:first-child)>.header [rel=me] dd::before,.consul-upstream-instance-list li>.detail dl.passing dt::before,.consul-upstream-instance-list li>.header .passing dd::before,.consul-upstream-instance-list li>.header [rel=me] dd::before,.list-collection>ul>li:not(:first-child)>.detail dl.passing dt::before,.list-collection>ul>li:not(:first-child)>.header .passing dd::before,.list-collection>ul>li:not(:first-child)>.header [rel=me] dd::before,.popover-select .value-passing button::before{--icon-name:icon-check-circle-fill;content:""}@-webkit-keyframes icon-chevron-left{100%{-webkit-mask-image:var(--icon-chevron-left-16);mask-image:var(--icon-chevron-left-16);background-color:var(--icon-color,var(--color-chevron-left-500,currentColor))}}@keyframes icon-chevron-left{100%{-webkit-mask-image:var(--icon-chevron-left-16);mask-image:var(--icon-chevron-left-16);background-color:var(--icon-color,var(--color-chevron-left-500,currentColor))}}.empty-state .back-link>::after,main header nav:first-child ol li:first-child a::before{--icon-name:icon-chevron-left;content:""}@-webkit-keyframes icon-chevron-right{100%{-webkit-mask-image:var(--icon-chevron-right-16);mask-image:var(--icon-chevron-right-16);background-color:var(--icon-color,var(--color-chevron-right-500,currentColor))}}@keyframes icon-chevron-right{100%{-webkit-mask-image:var(--icon-chevron-right-16);mask-image:var(--icon-chevron-right-16);background-color:var(--icon-color,var(--color-chevron-right-500,currentColor))}}#login-toggle+div footer button::after{--icon-name:icon-chevron-right;content:""}@-webkit-keyframes icon-chevron-up{100%{-webkit-mask-image:var(--icon-chevron-up-16);mask-image:var(--icon-chevron-up-16);background-color:var(--icon-color,var(--color-chevron-up-500,currentColor))}}@keyframes icon-chevron-up{100%{-webkit-mask-image:var(--icon-chevron-up-16);mask-image:var(--icon-chevron-up-16);background-color:var(--icon-color,var(--color-chevron-up-500,currentColor))}}.hashicorp-consul nav li.nspaces .disclosure-menu>button[aria-expanded=true]::after,.hashicorp-consul nav li.partitions .disclosure-menu>button[aria-expanded=true]::after,.list-collection>button::after,.more-popover-menu>[type=checkbox]:checked+label>::after,.popover-menu>[type=checkbox]:checked+label>::after,.topology-notices button[aria-expanded=true]::before,table.has-actions tr>.actions>[type=checkbox]:checked+label>::after,table.with-details tr>.actions>[type=checkbox]:checked+label>::after{--icon-name:icon-chevron-up;content:""}@-webkit-keyframes icon-delay{100%{-webkit-mask-image:var(--icon-delay-16);mask-image:var(--icon-delay-16);background-color:var(--icon-color,var(--color-delay-500,currentColor))}}@keyframes icon-delay{100%{-webkit-mask-image:var(--icon-delay-16);mask-image:var(--icon-delay-16);background-color:var(--icon-color,var(--color-delay-500,currentColor))}}.consul-exposed-path-list>ul>li>.detail dl.lock-delay dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.lock-delay dt::before,.consul-upstream-instance-list li>.detail dl.lock-delay dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.lock-delay dt::before{--icon-name:icon-delay;content:""}@-webkit-keyframes icon-docs-link{100%{-webkit-mask-image:var(--icon-docs-link-16);mask-image:var(--icon-docs-link-16);background-color:var(--icon-color,var(--color-docs-link-500,currentColor))}}@keyframes icon-docs-link{100%{-webkit-mask-image:var(--icon-docs-link-16);mask-image:var(--icon-docs-link-16);background-color:var(--icon-color,var(--color-docs-link-500,currentColor))}}@-webkit-keyframes icon-eye{100%{-webkit-mask-image:var(--icon-eye-16);mask-image:var(--icon-eye-16);background-color:var(--icon-color,var(--color-eye-500,currentColor))}}@keyframes icon-eye{100%{-webkit-mask-image:var(--icon-eye-16);mask-image:var(--icon-eye-16);background-color:var(--icon-color,var(--color-eye-500,currentColor))}}@-webkit-keyframes icon-eye-off{100%{-webkit-mask-image:var(--icon-eye-off-16);mask-image:var(--icon-eye-off-16);background-color:var(--icon-color,var(--color-eye-off-500,currentColor))}}@keyframes icon-eye-off{100%{-webkit-mask-image:var(--icon-eye-off-16);mask-image:var(--icon-eye-off-16);background-color:var(--icon-color,var(--color-eye-off-500,currentColor))}}@-webkit-keyframes icon-file-text{100%{-webkit-mask-image:var(--icon-file-text-16);mask-image:var(--icon-file-text-16);background-color:var(--icon-color,var(--color-file-text-500,currentColor))}}@keyframes icon-file-text{100%{-webkit-mask-image:var(--icon-file-text-16);mask-image:var(--icon-file-text-16);background-color:var(--icon-color,var(--color-file-text-500,currentColor))}}.consul-exposed-path-list>ul>li>.detail .policy::before,.consul-lock-session-list ul>li:not(:first-child)>.detail .policy::before,.consul-upstream-instance-list li>.detail .policy::before,.list-collection>ul>li:not(:first-child)>.detail .policy::before{--icon-name:icon-file-text;content:""}@-webkit-keyframes icon-gateway{100%{-webkit-mask-image:var(--icon-gateway-16);mask-image:var(--icon-gateway-16);background-color:var(--icon-color,var(--color-gateway-500,currentColor))}}@keyframes icon-gateway{100%{-webkit-mask-image:var(--icon-gateway-16);mask-image:var(--icon-gateway-16);background-color:var(--icon-color,var(--color-gateway-500,currentColor))}}.consul-kind::before{--icon-name:icon-gateway;content:""}@-webkit-keyframes icon-git-commit{100%{-webkit-mask-image:var(--icon-git-commit-16);mask-image:var(--icon-git-commit-16);background-color:var(--icon-color,var(--color-git-commit-500,currentColor))}}@keyframes icon-git-commit{100%{-webkit-mask-image:var(--icon-git-commit-16);mask-image:var(--icon-git-commit-16);background-color:var(--icon-color,var(--color-git-commit-500,currentColor))}}.consul-exposed-path-list>ul>li>.detail dl.node dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.node dt::before,.consul-upstream-instance-list li>.detail dl.node dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.node dt::before{--icon-name:icon-git-commit;content:""}@-webkit-keyframes icon-hexagon{100%{-webkit-mask-image:var(--icon-hexagon-16);mask-image:var(--icon-hexagon-16);background-color:var(--icon-color,var(--color-hexagon-500,currentColor))}}@keyframes icon-hexagon{100%{-webkit-mask-image:var(--icon-hexagon-16);mask-image:var(--icon-hexagon-16);background-color:var(--icon-color,var(--color-hexagon-500,currentColor))}}@-webkit-keyframes icon-history{100%{-webkit-mask-image:var(--icon-history-16);mask-image:var(--icon-history-16);background-color:var(--icon-color,var(--color-history-500,currentColor))}}@keyframes icon-history{100%{-webkit-mask-image:var(--icon-history-16);mask-image:var(--icon-history-16);background-color:var(--icon-color,var(--color-history-500,currentColor))}}.consul-exposed-path-list>ul>li>.detail dl.ttl dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.ttl dt::before,.consul-upstream-instance-list li>.detail dl.ttl dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.ttl dt::before{--icon-name:icon-history;content:""}@-webkit-keyframes icon-info{100%{-webkit-mask-image:var(--icon-info-16);mask-image:var(--icon-info-16);background-color:var(--icon-color,var(--color-info-500,currentColor))}}@keyframes icon-info{100%{-webkit-mask-image:var(--icon-info-16);mask-image:var(--icon-info-16);background-color:var(--icon-color,var(--color-info-500,currentColor))}}@-webkit-keyframes icon-layers{100%{-webkit-mask-image:var(--icon-layers-16);mask-image:var(--icon-layers-16);background-color:var(--icon-color,var(--color-layers-500,currentColor))}}@keyframes icon-layers{100%{-webkit-mask-image:var(--icon-layers-16);mask-image:var(--icon-layers-16);background-color:var(--icon-color,var(--color-layers-500,currentColor))}}.topology-metrics-popover.l7 .tippy-arrow::after,.topology-metrics-popover.l7>button::before{--icon-name:icon-layers;content:"";--icon-color:var(--token-color-palette-neutral-300)}@keyframes icon-loading{100%{-webkit-mask-image:var(--icon-loading-16);mask-image:var(--icon-loading-16);background-color:var(--icon-color,var(--color-loading-500,currentColor))}}@-webkit-keyframes icon-network-alt{100%{-webkit-mask-image:var(--icon-network-alt-16);mask-image:var(--icon-network-alt-16);background-color:var(--icon-color,var(--color-network-alt-500,currentColor))}}@keyframes icon-network-alt{100%{-webkit-mask-image:var(--icon-network-alt-16);mask-image:var(--icon-network-alt-16);background-color:var(--icon-color,var(--color-network-alt-500,currentColor))}}.consul-bucket-list .peer::before{--icon-name:icon-network-alt;content:""}@-webkit-keyframes icon-path{100%{-webkit-mask-image:var(--icon-path-16);mask-image:var(--icon-path-16);background-color:var(--icon-color,var(--color-path-500,currentColor))}}@keyframes icon-path{100%{-webkit-mask-image:var(--icon-path-16);mask-image:var(--icon-path-16);background-color:var(--icon-color,var(--color-path-500,currentColor))}}.consul-exposed-path-list>ul>li>.detail dl.path dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.path dt::before,.consul-upstream-instance-list li>.detail dl.path dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.path dt::before{--icon-name:icon-path;content:""}@-webkit-keyframes icon-running{100%{-webkit-mask-image:var(--icon-running-16);mask-image:var(--icon-running-16);background-color:var(--icon-color,var(--color-running-500,currentColor))}}@keyframes icon-running{100%{-webkit-mask-image:var(--icon-running-16);mask-image:var(--icon-running-16);background-color:var(--icon-color,var(--color-running-500,currentColor))}}@-webkit-keyframes icon-skip{100%{-webkit-mask-image:var(--icon-skip-16);mask-image:var(--icon-skip-16);background-color:var(--icon-color,var(--color-skip-500,currentColor))}}@keyframes icon-skip{100%{-webkit-mask-image:var(--icon-skip-16);mask-image:var(--icon-skip-16);background-color:var(--icon-color,var(--color-skip-500,currentColor))}}@-webkit-keyframes icon-socket{100%{-webkit-mask-image:var(--icon-socket-16);mask-image:var(--icon-socket-16);background-color:var(--icon-color,var(--color-socket-500,currentColor))}}@keyframes icon-socket{100%{-webkit-mask-image:var(--icon-socket-16);mask-image:var(--icon-socket-16);background-color:var(--icon-color,var(--color-socket-500,currentColor))}}.consul-exposed-path-list>ul>li>.detail dl.socket dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.socket dt::before,.consul-upstream-instance-list li>.detail dl.socket dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.socket dt::before{--icon-name:icon-socket;content:""}@-webkit-keyframes icon-star-circle{100%{-webkit-mask-image:var(--icon-star-circle-16);mask-image:var(--icon-star-circle-16);background-color:var(--icon-color,var(--color-star-circle-500,currentColor))}}@keyframes icon-star-circle{100%{-webkit-mask-image:var(--icon-star-circle-16);mask-image:var(--icon-star-circle-16);background-color:var(--icon-color,var(--color-star-circle-500,currentColor))}}@-webkit-keyframes icon-star-fill{100%{-webkit-mask-image:var(--icon-star-fill-16);mask-image:var(--icon-star-fill-16);background-color:var(--icon-color,var(--color-star-fill-500,currentColor))}}@keyframes icon-star-fill{100%{-webkit-mask-image:var(--icon-star-fill-16);mask-image:var(--icon-star-fill-16);background-color:var(--icon-color,var(--color-star-fill-500,currentColor))}}.consul-exposed-path-list>ul>li>.detail .policy-management::before,.consul-exposed-path-list>ul>li>.header .policy-management dd::before,.consul-lock-session-list ul>li:not(:first-child)>.detail .policy-management::before,.consul-lock-session-list ul>li:not(:first-child)>.header .policy-management dd::before,.consul-upstream-instance-list li>.detail .policy-management::before,.consul-upstream-instance-list li>.header .policy-management dd::before,.list-collection>ul>li:not(:first-child)>.detail .policy-management::before,.list-collection>ul>li:not(:first-child)>.header .policy-management dd::before{--icon-name:icon-star-fill;content:"";--icon-color:var(--token-color-consul-brand)}@-webkit-keyframes icon-tag{100%{-webkit-mask-image:var(--icon-tag-16);mask-image:var(--icon-tag-16);background-color:var(--icon-color,var(--color-tag-500,currentColor))}}@keyframes icon-tag{100%{-webkit-mask-image:var(--icon-tag-16);mask-image:var(--icon-tag-16);background-color:var(--icon-color,var(--color-tag-500,currentColor))}}.tag-list dt::before,td.tags dt::before{--icon-name:icon-tag;content:""}@-webkit-keyframes icon-x{100%{-webkit-mask-image:var(--icon-x-16);mask-image:var(--icon-x-16);background-color:var(--icon-color,var(--color-x-500,currentColor))}}@keyframes icon-x{100%{-webkit-mask-image:var(--icon-x-16);mask-image:var(--icon-x-16);background-color:var(--icon-color,var(--color-x-500,currentColor))}}@-webkit-keyframes icon-x-circle{100%{-webkit-mask-image:var(--icon-x-circle-16);mask-image:var(--icon-x-circle-16);background-color:var(--icon-color,var(--color-x-circle-500,currentColor))}}@keyframes icon-x-circle{100%{-webkit-mask-image:var(--icon-x-circle-16);mask-image:var(--icon-x-circle-16);background-color:var(--icon-color,var(--color-x-circle-500,currentColor))}}@-webkit-keyframes icon-x-square{100%{-webkit-mask-image:var(--icon-x-square-16);mask-image:var(--icon-x-square-16);background-color:var(--icon-color,var(--color-x-square-500,currentColor))}}@keyframes icon-x-square{100%{-webkit-mask-image:var(--icon-x-square-16);mask-image:var(--icon-x-square-16);background-color:var(--icon-color,var(--color-x-square-500,currentColor))}}@-webkit-keyframes icon-cloud-cross{100%{-webkit-mask-image:var(--icon-cloud-cross-16);mask-image:var(--icon-cloud-cross-16);background-color:var(--icon-color,var(--color-cloud-cross-500,currentColor))}}@keyframes icon-cloud-cross{100%{-webkit-mask-image:var(--icon-cloud-cross-16);mask-image:var(--icon-cloud-cross-16);background-color:var(--icon-color,var(--color-cloud-cross-500,currentColor))}}@-webkit-keyframes icon-loading-motion{100%{-webkit-mask-image:var(--icon-loading-motion-16);mask-image:var(--icon-loading-motion-16);background-color:var(--icon-color,var(--color-loading-motion-500,currentColor))}}@keyframes icon-loading-motion{100%{-webkit-mask-image:var(--icon-loading-motion-16);mask-image:var(--icon-loading-motion-16);background-color:var(--icon-color,var(--color-loading-motion-500,currentColor))}}@-webkit-keyframes icon-logo-auth0-color{100%{background-image:var(--icon-auth0-color-16)}}@keyframes icon-logo-auth0-color{100%{background-image:var(--icon-auth0-color-16)}}.oidc-select .auth0-oidc-provider::before{--icon-name:icon-logo-auth0-color;content:""}@-webkit-keyframes icon-logo-ember-circle-color{100%{background-image:var(--icon-logo-ember-circle-color-16)}}@keyframes icon-logo-ember-circle-color{100%{background-image:var(--icon-logo-ember-circle-color-16)}}@-webkit-keyframes icon-logo-glimmer-color{100%{background-image:var(--icon-logo-glimmer-color-16)}}@keyframes icon-logo-glimmer-color{100%{background-image:var(--icon-logo-glimmer-color-16)}}@-webkit-keyframes icon-logo-jwt-color{100%{background-image:var(--icon-logo-jwt-color-16)}}@keyframes icon-logo-jwt-color{100%{background-image:var(--icon-logo-jwt-color-16)}}.consul-external-source.jwt::before,.consul-health-check-list .health-check-output dd em.jwt::before,.consul-intention-list td strong.jwt::before,.consul-intention-permission-list strong.jwt::before,.consul-intention-search-bar li button span.jwt::before,.consul-peer-search-bar li button span.jwt::before,.consul-server-card .health-status+dd.jwt::before,.discovery-chain .route-card>header ul li.jwt::before,.hashicorp-consul nav .dcs .dc-name span.jwt::before,.hashicorp-consul nav .dcs li.is-local span.jwt::before,.hashicorp-consul nav .dcs li.is-primary span.jwt::before,.jwt.consul-auth-method-type::before,.jwt.consul-kind::before,.jwt.consul-source::before,.jwt.consul-transparent-proxy::before,.jwt.leader::before,.jwt.topology-metrics-source-type::before,.popover-select .jwt button::before,.search-bar-status li.jwt:not(.remove-all)::before,html[data-route^="dc.acls.index"] main td strong.jwt::before,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl.jwt::before,section[data-route="dc.show.serverstatus"] .server-failure-tolerance header em.jwt::before,span.jwt.policy-node-identity::before,span.jwt.policy-service-identity::before{--icon-name:icon-logo-jwt-color;content:""}@-webkit-keyframes icon-logo-microsoft-color{100%{background-image:var(--icon-microsoft-color-16)}}@keyframes icon-logo-microsoft-color{100%{background-image:var(--icon-microsoft-color-16)}}.oidc-select .microsoft-oidc-provider::before{--icon-name:icon-logo-microsoft-color;content:""}@-webkit-keyframes icon-logo-oidc-color{100%{background-image:var(--icon-logo-oidc-color-16)}}@keyframes icon-logo-oidc-color{100%{background-image:var(--icon-logo-oidc-color-16)}}.consul-external-source.oidc::before,.consul-health-check-list .health-check-output dd em.oidc::before,.consul-intention-list td strong.oidc::before,.consul-intention-permission-list strong.oidc::before,.consul-intention-search-bar li button span.oidc::before,.consul-peer-search-bar li button span.oidc::before,.consul-server-card .health-status+dd.oidc::before,.discovery-chain .route-card>header ul li.oidc::before,.hashicorp-consul nav .dcs .dc-name span.oidc::before,.hashicorp-consul nav .dcs li.is-local span.oidc::before,.hashicorp-consul nav .dcs li.is-primary span.oidc::before,.oidc.consul-auth-method-type::before,.oidc.consul-kind::before,.oidc.consul-source::before,.oidc.consul-transparent-proxy::before,.oidc.leader::before,.oidc.topology-metrics-source-type::before,.popover-select .oidc button::before,.search-bar-status li.oidc:not(.remove-all)::before,html[data-route^="dc.acls.index"] main td strong.oidc::before,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl.oidc::before,section[data-route="dc.show.serverstatus"] .server-failure-tolerance header em.oidc::before,span.oidc.policy-node-identity::before,span.oidc.policy-service-identity::before{--icon-name:icon-logo-oidc-color;content:""}@-webkit-keyframes icon-logo-okta-color{100%{background-image:var(--icon-okta-color-16)}}@keyframes icon-logo-okta-color{100%{background-image:var(--icon-okta-color-16)}}.oidc-select .okta-oidc-provider::before{--icon-name:icon-logo-okta-color;content:""}@-webkit-keyframes icon-mesh{100%{-webkit-mask-image:var(--icon-mesh-16);mask-image:var(--icon-mesh-16);background-color:var(--icon-color,var(--color-mesh-500,currentColor))}}@keyframes icon-mesh{100%{-webkit-mask-image:var(--icon-mesh-16);mask-image:var(--icon-mesh-16);background-color:var(--icon-color,var(--color-mesh-500,currentColor))}}.consul-exposed-path-list>ul>li>.detail dl.mesh dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.mesh dt::before,.consul-upstream-instance-list li>.detail dl.mesh dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.mesh dt::before{--icon-name:icon-mesh;content:""}@-webkit-keyframes icon-port{100%{-webkit-mask-image:var(--icon-port-16);mask-image:var(--icon-port-16);background-color:var(--icon-color,var(--color-port-500,currentColor))}}@keyframes icon-port{100%{-webkit-mask-image:var(--icon-port-16);mask-image:var(--icon-port-16);background-color:var(--icon-color,var(--color-port-500,currentColor))}}.consul-exposed-path-list>ul>li>.detail dl.port dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.port dt::before,.consul-upstream-instance-list li>.detail dl.port dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.port dt::before{--icon-name:icon-port;content:""}@-webkit-keyframes icon-protocol{100%{-webkit-mask-image:var(--icon-protocol-16);mask-image:var(--icon-protocol-16);background-color:var(--icon-color,var(--color-protocol-500,currentColor))}}@keyframes icon-protocol{100%{-webkit-mask-image:var(--icon-protocol-16);mask-image:var(--icon-protocol-16);background-color:var(--icon-color,var(--color-protocol-500,currentColor))}}.consul-exposed-path-list>ul>li>.detail dl.protocol dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.protocol dt::before,.consul-upstream-instance-list li>.detail dl.protocol dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.protocol dt::before{--icon-name:icon-protocol;content:""}@-webkit-keyframes icon-redirect{100%{-webkit-mask-image:var(--icon-redirect-16);mask-image:var(--icon-redirect-16);background-color:var(--icon-color,var(--color-redirect-500,currentColor))}}@keyframes icon-redirect{100%{-webkit-mask-image:var(--icon-redirect-16);mask-image:var(--icon-redirect-16);background-color:var(--icon-color,var(--color-redirect-500,currentColor))}}@-webkit-keyframes icon-search-color{100%{background-image:var(--icon-search-color-16)}}@keyframes icon-search-color{100%{background-image:var(--icon-search-color-16)}}[for=toolbar-toggle]{--icon-name:icon-search-color;content:""}@-webkit-keyframes icon-sort{100%{-webkit-mask-image:var(--icon-sort-desc-16);mask-image:var(--icon-sort-desc-16);background-color:var(--icon-color,var(--color-sort-500,currentColor))}}@keyframes icon-sort{100%{-webkit-mask-image:var(--icon-sort-desc-16);mask-image:var(--icon-sort-desc-16);background-color:var(--icon-color,var(--color-sort-500,currentColor))}}.type-sort.popover-select label>::before{--icon-name:icon-sort;content:""}@-webkit-keyframes icon-union{100%{-webkit-mask-image:var(--icon-union-16);mask-image:var(--icon-union-16);background-color:var(--icon-color,var(--color-union-500,currentColor))}}@keyframes icon-union{100%{-webkit-mask-image:var(--icon-union-16);mask-image:var(--icon-union-16);background-color:var(--icon-color,var(--color-union-500,currentColor))}}#downstream-container .topology-metrics-card .details .group span::before,#upstream-container .topology-metrics-card .details .group span::before{--icon-name:icon-union;content:""}.ember-basic-dropdown{position:relative}.ember-basic-dropdown,.ember-basic-dropdown-content,.ember-basic-dropdown-content *{box-sizing:border-box}.ember-basic-dropdown-content{position:absolute;width:auto;z-index:1000;background-color:#fff}.ember-basic-dropdown-content--left{left:0}.ember-basic-dropdown-content--right{right:0}.ember-basic-dropdown-overlay{position:fixed;background:rgba(0,0,0,.5);width:100%;height:100%;z-index:10;top:0;left:0;pointer-events:none}.ember-basic-dropdown-content-wormhole-origin{display:inline}.ember-power-select-dropdown *{box-sizing:border-box}.ember-power-select-trigger{position:relative;border-radius:4px;background-color:#fff;line-height:1.75;overflow-x:hidden;text-overflow:ellipsis;min-height:1.75em;-moz-user-select:none;user-select:none;-webkit-user-select:none;color:inherit}.ember-power-select-trigger:after{content:"";display:table;clear:both}.ember-power-select-trigger--active,.ember-power-select-trigger:focus{box-shadow:none}.ember-basic-dropdown-trigger--below.ember-power-select-trigger[aria-expanded=true],.ember-basic-dropdown-trigger--in-place.ember-power-select-trigger[aria-expanded=true]{border-bottom-left-radius:0;border-bottom-right-radius:0}.ember-basic-dropdown-trigger--above.ember-power-select-trigger[aria-expanded=true]{border-top-left-radius:0;border-top-right-radius:0}.ember-power-select-placeholder{color:#999;display:block;overflow-x:hidden;white-space:nowrap;text-overflow:ellipsis}.ember-power-select-status-icon{position:absolute;display:inline-block;width:0;height:0;top:0;bottom:0;margin:auto;border-style:solid;border-width:7px 4px 0;border-color:#aaa transparent transparent;right:5px}.ember-basic-dropdown-trigger[aria-expanded=true] .ember-power-select-status-icon{transform:rotate(180deg)}.ember-power-select-clear-btn{position:absolute;cursor:pointer;right:25px}.ember-power-select-trigger-multiple-input{font-family:inherit;font-size:inherit;border:none;display:inline-block;line-height:inherit;-webkit-appearance:none;outline:0;padding:0;float:left;background-color:transparent;text-indent:2px}.ember-power-select-trigger-multiple-input:disabled{background-color:#eee}.ember-power-select-trigger-multiple-input::placeholder{opacity:1;color:#999}.ember-power-select-trigger-multiple-input::-webkit-input-placeholder{opacity:1;color:#999}.ember-power-select-trigger-multiple-input::-moz-placeholder{opacity:1;color:#999}.ember-power-select-trigger-multiple-input::-ms-input-placeholder{opacity:1;color:#999}.active.discovery-chain [id*=":"],.discovery-chain path,.ember-power-select-multiple-remove-btn:not(:hover){opacity:.5}.ember-power-select-multiple-options{padding:0;margin:0}.ember-power-select-multiple-option{border:1px solid gray;border-radius:4px;color:#333;background-color:#e4e4e4;padding:0 4px;display:inline-block;line-height:1.45;float:left;margin:2px 0 2px 3px}.ember-power-select-multiple-remove-btn{cursor:pointer}.ember-power-select-search{padding:4px}.ember-power-select-search-input{border:1px solid #aaa;border-radius:0;width:100%;font-size:inherit;line-height:inherit;padding:0 5px}.ember-power-select-search-input:focus{border:1px solid #aaa;box-shadow:none}.ember-power-select-dropdown{border-left:1px solid #aaa;border-right:1px solid #aaa;line-height:1.75;border-radius:4px;box-shadow:none;overflow:hidden;color:inherit}.ember-power-select-dropdown.ember-basic-dropdown-content--above{border-top:1px solid #aaa;border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.ember-power-select-dropdown.ember-basic-dropdown-content--below,.ember-power-select-dropdown.ember-basic-dropdown-content--in-place{border-top:none;border-bottom:1px solid #aaa;border-top-left-radius:0;border-top-right-radius:0}.ember-power-select-dropdown.ember-basic-dropdown-content--in-place{width:100%}.ember-power-select-options{list-style:none;margin:0;padding:0;-moz-user-select:none;user-select:none;-webkit-user-select:none}.ember-power-select-placeholder,.ember-power-select-selected-item,a[rel*=external]::after{margin-left:8px}.ember-power-select-options[role=listbox]{overflow-y:auto;-webkit-overflow-scrolling:touch;max-height:12.25em}.ember-power-select-option{cursor:pointer;padding:0 8px}.ember-power-select-group[aria-disabled=true]{color:#999;cursor:not-allowed}.ember-power-select-group[aria-disabled=true] .ember-power-select-option,.ember-power-select-option[aria-disabled=true]{color:#999;pointer-events:none;cursor:not-allowed}.ember-power-select-option[aria-selected=true]{background-color:#ddd}.ember-power-select-option[aria-current=true]{background-color:#5897fb;color:#fff}.ember-power-select-group-name{cursor:default;font-weight:700}.ember-power-select-trigger[aria-disabled=true]{background-color:#eee}.ember-power-select-trigger{padding:0 16px 0 0}.ember-power-select-group .ember-power-select-group .ember-power-select-group-name{padding-left:24px}.ember-power-select-group .ember-power-select-group .ember-power-select-option{padding-left:40px}.ember-power-select-group .ember-power-select-option{padding-left:24px}.ember-power-select-group .ember-power-select-group-name{padding-left:8px}.ember-power-select-trigger[dir=rtl]{padding:0 0 0 16px}.ember-power-select-trigger[dir=rtl] .ember-power-select-placeholder,.ember-power-select-trigger[dir=rtl] .ember-power-select-selected-item{margin-right:8px}.ember-power-select-trigger[dir=rtl] .ember-power-select-multiple-option,.ember-power-select-trigger[dir=rtl] .ember-power-select-trigger-multiple-input{float:right}.ember-power-select-trigger[dir=rtl] .ember-power-select-status-icon{left:5px;right:initial}.ember-power-select-trigger[dir=rtl] .ember-power-select-clear-btn{left:25px;right:initial}.ember-power-select-dropdown[dir=rtl] .ember-power-select-group .ember-power-select-group .ember-power-select-group-name{padding-right:24px}.ember-power-select-dropdown[dir=rtl] .ember-power-select-group .ember-power-select-group .ember-power-select-option{padding-right:40px}.ember-power-select-dropdown[dir=rtl] .ember-power-select-group .ember-power-select-option{padding-right:24px}.ember-power-select-dropdown[dir=rtl] .ember-power-select-group .ember-power-select-group-name{padding-right:8px}#login-toggle+div footer button:focus,#login-toggle+div footer button:hover,.consul-intention-fieldsets .permissions>button:focus,.consul-intention-fieldsets .permissions>button:hover,.empty-state>ul>li>:focus,.empty-state>ul>li>:hover,.empty-state>ul>li>label>button:focus,.empty-state>ul>li>label>button:hover,.modal-dialog [role=document] dd a:focus,.modal-dialog [role=document] dd a:hover,.modal-dialog [role=document] p a:focus,.modal-dialog [role=document] p a:hover,.oidc-select button.reset:focus,.oidc-select button.reset:hover,.search-bar-status .remove-all button:focus,.search-bar-status .remove-all button:hover,main dd a:focus,main dd a:hover,main p a:focus,main p a:hover{text-decoration:underline}#login-toggle+div footer button,.consul-intention-fieldsets .permissions>button,.empty-state>ul>li>*,.empty-state>ul>li>:active,.empty-state>ul>li>:focus,.empty-state>ul>li>:hover,.empty-state>ul>li>label>button,.empty-state>ul>li>label>button:active,.empty-state>ul>li>label>button:focus,.empty-state>ul>li>label>button:hover,.modal-dialog [role=document] dd a,.modal-dialog [role=document] p a,.oidc-select button.reset,.search-bar-status .remove-all button,main dd a,main dd a:active,main dd a:focus,main dd a:hover,main p a,main p a:active,main p a:focus,main p a:hover{color:var(--token-color-foreground-action)}.modal-dialog [role=document] label a[rel*=help],div.with-confirmation p,main label a[rel*=help]{color:var(--token-color-foreground-disabled)}#login-toggle+div footer button,.consul-intention-fieldsets .permissions>button,.empty-state>ul>li>*,.empty-state>ul>li>label>button,.modal-dialog [role=document] dd a,.modal-dialog [role=document] p a,.oidc-select button.reset,.search-bar-status .remove-all button,main dd a,main p a{cursor:pointer;background-color:transparent}#login-toggle+div footer button:active,.consul-intention-fieldsets .permissions>button:active,.empty-state>ul>li>:active,.empty-state>ul>li>label>button:active,.modal-dialog [role=document] dd a:active,.modal-dialog [role=document] p a:active,.oidc-select button.reset:active,.search-bar-status .remove-all button:active,main dd a:active,main p a:active{outline:0}.modal-dialog [role=document] a[rel*=help]::after,main a[rel*=help]::after{opacity:.4}.modal-dialog [role=document] h2 a,main h2 a{color:var(--token-color-foreground-strong)}.modal-dialog [role=document] h2 a[rel*=help]::after,main h2 a[rel*=help]::after{font-size:.65em;margin-top:.2em;margin-left:.2em}.tab-section>p:only-child [rel*=help]::after{content:none}.auth-form{width:320px;margin:-20px 25px 0}.auth-form em{color:var(--token-color-foreground-faint);font-style:normal;display:inline-block;margin-top:1em}.auth-form .oidc-select,.auth-form form{padding-top:1em}.auth-form form{margin-bottom:0!important}.auth-form .ember-basic-dropdown-trigger,.auth-form button:not(.reset){width:100%}.auth-form .progress{margin:0 auto}#login-toggle+div footer button::after{font-size:120%;position:relative;top:-1px;left:-3px}#login-toggle+div footer{border-top:0;background-color:transparent;padding:10px 42px 20px}#login-toggle+div>div>div>div{padding-bottom:0}.auth-profile{padding:.9em 1em}.auth-profile dt span{font-weight:var(--typo-weight-normal)}.auth-profile dt{font-weight:var(--typo-weight-bold)}.auth-profile dd,.auth-profile dt{color:var(--token-color-paletter-neutral-300)}.auth-profile dt span,.empty-state,main header nav:first-child ol li a,main header nav:first-child ol li:not(:first-child) a::before{color:var(--token-color-foreground-faint)}main header nav:first-child ol li a{text-decoration:none}main header nav:first-child ol li a:hover{color:var(--token-color-foreground-action);text-decoration:underline}main header nav:first-child ol li a::before{text-decoration:none}main header nav:first-child ol{display:grid;grid-auto-flow:column;white-space:nowrap;overflow:hidden}main header nav:first-child ol>li{list-style-type:none;display:inline-flex;overflow:hidden}main header nav:first-child ol li:first-child a::before{background-color:var(--token-color-foreground-faint);margin-right:4px;display:inline-block}main header nav:first-child ol li:not(:first-child) a{margin-left:6px;overflow:hidden;text-overflow:ellipsis}main header nav:first-child ol li:not(:first-child) a::before{content:"/";margin-right:8px;display:inline-block}main header nav:first-child{position:absolute;top:12px}.consul-intention-action-warn-modal button.dangerous,.copy-button button,.disclosure-menu [aria-expanded]~*>ul>[role=treeitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=menuitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=option],.hashicorp-consul nav li.nspaces .disclosure-menu>button,.hashicorp-consul nav li.partitions .disclosure-menu>button,.informed-action>ul>li>*,.menu-panel>ul>[role=treeitem],.menu-panel>ul>li>[role=menuitem],.menu-panel>ul>li>[role=option],.more-popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=option],.popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=option],.popover-select label>*,.topology-notices button,.type-sort.popover-select label>*,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=option],table.with-details tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]{cursor:pointer;white-space:nowrap;text-decoration:none}.consul-intention-action-warn-modal button.dangerous:disabled,.copy-button button:disabled,.disclosure-menu [aria-expanded]~*>ul>[role=treeitem]:disabled,.disclosure-menu [aria-expanded]~*>ul>li>[role=menuitem]:disabled,.disclosure-menu [aria-expanded]~*>ul>li>[role=option]:disabled,.hashicorp-consul nav li.nspaces .disclosure-menu>button:disabled,.hashicorp-consul nav li.partitions .disclosure-menu>button:disabled,.informed-action>ul>li>:disabled,.menu-panel>ul>[role=treeitem]:disabled,.menu-panel>ul>li>[role=menuitem]:disabled,.menu-panel>ul>li>[role=option]:disabled,.more-popover-menu>[type=checkbox]+label+div>ul>[role=treeitem]:disabled,.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem]:disabled,.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=option]:disabled,.popover-menu>[type=checkbox]+label+div>ul>[role=treeitem]:disabled,.popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem]:disabled,.popover-menu>[type=checkbox]+label+div>ul>li>[role=option]:disabled,.popover-select label>:disabled,.topology-notices button:disabled,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem]:disabled,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem]:disabled,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]:disabled,table.with-details tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem]:disabled,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem]:disabled,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]:disabled{cursor:default;box-shadow:none}.checkbox-group label,.more-popover-menu>[type=checkbox]~label,.popover-menu>[type=checkbox]~label,html[data-route^="dc.acls.index"] .filter-bar [role=radiogroup] label,table.has-actions tr>.actions>[type=checkbox]~label,table.with-details tr>.actions>[type=checkbox]~label{cursor:pointer}.consul-intention-action-warn-modal button.dangerous{border-width:1px;border-radius:var(--decor-radius-100);box-shadow:var(--token-elevation-high-box-shadow)}.disclosure-menu [aria-expanded]~*>ul>[role=treeitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=menuitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=option],.hashicorp-consul nav li.nspaces .disclosure-menu>button,.hashicorp-consul nav li.partitions .disclosure-menu>button,.informed-action>ul>li>*,.menu-panel>ul>[role=treeitem],.menu-panel>ul>li>[role=menuitem],.menu-panel>ul>li>[role=option],.more-popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=option],.popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=option],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=option],table.with-details tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]{color:var(--token-color-foreground-strong);background-color:var(--token-color-surface-primary)}.disclosure-menu [aria-expanded]~*>ul>[role=treeitem]:focus,.disclosure-menu [aria-expanded]~*>ul>[role=treeitem]:hover,.disclosure-menu [aria-expanded]~*>ul>li>[role=menuitem]:focus,.disclosure-menu [aria-expanded]~*>ul>li>[role=menuitem]:hover,.disclosure-menu [aria-expanded]~*>ul>li>[role=option]:focus,.disclosure-menu [aria-expanded]~*>ul>li>[role=option]:hover,.hashicorp-consul nav li.nspaces .disclosure-menu>button:focus,.hashicorp-consul nav li.nspaces .disclosure-menu>button:hover,.hashicorp-consul nav li.partitions .disclosure-menu>button:focus,.hashicorp-consul nav li.partitions .disclosure-menu>button:hover,.informed-action>ul>li>:focus,.informed-action>ul>li>:hover,.menu-panel>ul>[role=treeitem]:focus,.menu-panel>ul>[role=treeitem]:hover,.menu-panel>ul>li>[role=menuitem]:focus,.menu-panel>ul>li>[role=menuitem]:hover,.menu-panel>ul>li>[role=option]:focus,.menu-panel>ul>li>[role=option]:hover,.more-popover-menu>[type=checkbox]+label+div>ul>[role=treeitem]:focus,.more-popover-menu>[type=checkbox]+label+div>ul>[role=treeitem]:hover,.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem]:focus,.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem]:hover,.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=option]:focus,.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=option]:hover,.popover-menu>[type=checkbox]+label+div>ul>[role=treeitem]:focus,.popover-menu>[type=checkbox]+label+div>ul>[role=treeitem]:hover,.popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem]:focus,.popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem]:hover,.popover-menu>[type=checkbox]+label+div>ul>li>[role=option]:focus,.popover-menu>[type=checkbox]+label+div>ul>li>[role=option]:hover,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem]:focus,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem]:hover,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem]:focus,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem]:hover,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]:focus,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]:hover,table.with-details tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem]:focus,table.with-details tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem]:hover,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem]:focus,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem]:hover,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]:focus,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]:hover{background-color:var(--token-color-surface-strong)}.type-sort.popover-select label>::before{position:relative;width:16px;height:16px}.type-sort.popover-select label>::after{top:0!important}.consul-intention-action-warn-modal button.dangerous,.copy-button button,.popover-select label>*,.topology-notices button,.type-sort.popover-select label>*{position:relative}.consul-intention-action-warn-modal button.dangerous .progress.indeterminate,.copy-button button .progress.indeterminate,.popover-select label>* .progress.indeterminate,.topology-notices button .progress.indeterminate{position:absolute;top:50%;left:50%;margin-left:-12px;margin-top:-12px}.consul-intention-action-warn-modal button.dangerous:empty,.copy-button button:empty,.popover-select label>:empty,.topology-notices button:empty{padding-right:0!important;padding-left:18px!important;margin-right:5px}.consul-intention-action-warn-modal button.dangerous:empty::before,.copy-button button:empty::before,.popover-select label>:empty::before,.topology-notices button:empty::before{left:1px}.consul-intention-action-warn-modal button.dangerous:not(:empty),.copy-button button:not(:empty),.popover-select label>:not(:empty),.topology-notices button:not(:empty){display:inline-flex;text-align:center;justify-content:center;align-items:center;padding:calc(.5em - 1px) calc(2.2em - 1px);min-width:100px}.consul-intention-action-warn-modal button.dangerous:not(:last-child),.copy-button button:not(:last-child),.popover-select label>:not(:last-child),.topology-notices button:not(:last-child){margin-right:8px}.app-view>header .actions a{padding-top:calc(.4em - 1px)!important;padding-bottom:calc(.4em - 1px)!important}.disclosure-menu [aria-expanded]~*>ul>[role=treeitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=menuitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=option],.hashicorp-consul nav li.nspaces .disclosure-menu>button,.hashicorp-consul nav li.partitions .disclosure-menu>button,.informed-action>ul>li>*,.menu-panel>ul>[role=treeitem],.menu-panel>ul>li>[role=menuitem],.menu-panel>ul>li>[role=option],.more-popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=option],.popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=option],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=option],table.with-details tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]{padding:.9em 1em;text-align:center;display:inline-block;box-sizing:border-box}.type-sort.popover-select label>*{height:35px!important}.discovery-chain .resolver-card,.discovery-chain .route-card,.discovery-chain .splitter-card{border:var(--decor-border-100);border-radius:var(--decor-radius-100);background-color:var(--token-color-surface-faint);display:block;position:relative}.discovery-chain .resolver-card>section,.discovery-chain .resolver-card>ul>li,.discovery-chain .route-card>section,.discovery-chain .route-card>ul>li,.discovery-chain .splitter-card>section,.discovery-chain .splitter-card>ul>li{border-top:var(--decor-border-100)}.discovery-chain .resolver-card,.discovery-chain .resolver-card>section,.discovery-chain .resolver-card>ul>li,.discovery-chain .route-card,.discovery-chain .route-card>section,.discovery-chain .route-card>ul>li,.discovery-chain .splitter-card,.discovery-chain .splitter-card>section,.discovery-chain .splitter-card>ul>li{border-color:var(--token-color-surface-interactive-active)}.discovery-chain .resolver-card:focus,.discovery-chain .resolver-card:hover,.discovery-chain .route-card:focus,.discovery-chain .route-card:hover,.discovery-chain .splitter-card:focus,.discovery-chain .splitter-card:hover{box-shadow:var(--token-surface-mid-box-shadow)}.discovery-chain .resolver-card>header,.discovery-chain .route-card>header,.discovery-chain .splitter-card>header{padding:10px}.discovery-chain .resolver-card>section,.discovery-chain .resolver-card>ul>li,.discovery-chain .route-card>section,.discovery-chain .route-card>ul>li,.discovery-chain .splitter-card>section,.discovery-chain .splitter-card>ul>li{padding:5px 10px}.discovery-chain .resolver-card ul,.discovery-chain .route-card ul,.discovery-chain .splitter-card ul{list-style-type:none;margin:0;padding:0}.checkbox-group label{margin-right:10px;white-space:nowrap}.checkbox-group span{display:inline-block;margin-left:10px;min-width:50px}.CodeMirror{max-width:1260px;min-height:300px;height:auto;padding-bottom:20px}.CodeMirror-scroll{overflow-x:hidden!important}.CodeMirror-lint-tooltip{background-color:#f9f9fa;border:1px solid var(--syntax-light-gray);border-radius:0;color:#212121;font-size:13px;padding:7px 8px 9px}.cm-s-hashi.CodeMirror{width:100%;background-color:var(--token-color-hashicorp-brand)!important;color:#cfd2d1!important;border:none;-webkit-font-smoothing:auto;line-height:1.4}.cm-s-hashi .CodeMirror-gutters{color:var(--syntax-dark-grey);background-color:var(--syntax-gutter-grey);border:none}.cm-s-hashi .CodeMirror-cursor{border-left:solid thin #f8f8f0}.cm-s-hashi .CodeMirror-linenumber{color:#6d8a88}.cm-s-hashi.CodeMirror-focused div.CodeMirror-selected{background:#214283}.cm-s-hashi .CodeMirror-line::selection,.cm-s-hashi .CodeMirror-line>span::selection,.cm-s-hashi .CodeMirror-line>span>span::selection{background:#214283}.cm-s-hashi .CodeMirror-line::-moz-selection,.cm-s-hashi .CodeMirror-line>span::-moz-selection,.cm-s-hashi .CodeMirror-line>span>span::-moz-selection{background:var(--token-color-surface-interactive)}.cm-s-hashi span.cm-comment{color:var(--syntax-light-grey)}.cm-s-hashi span.cm-string,.cm-s-hashi span.cm-string-2{color:var(--syntax-packer)}.cm-s-hashi span.cm-number{color:var(--syntax-serf)}.cm-s-hashi span.cm-variable,.cm-s-hashi span.cm-variable-2{color:#9e84c5}.cm-s-hashi span.cm-def{color:var(--syntax-packer)}.cm-s-hashi span.cm-operator{color:var(--syntax-gray)}.cm-s-hashi span.cm-keyword{color:var(--syntax-yellow)}.cm-s-hashi span.cm-atom{color:var(--syntax-serf)}.cm-s-hashi span.cm-meta,.cm-s-hashi span.cm-tag{color:var(--syntax-packer)}.cm-s-hashi span.cm-error{color:var(--syntax-red)}.cm-s-hashi span.cm-attribute,.cm-s-hashi span.cm-qualifier{color:#9fca56}.cm-s-hashi span.cm-property{color:#9e84c5}.cm-s-hashi span.cm-builtin,.cm-s-hashi span.cm-variable-3{color:#9fca56}.cm-s-hashi .CodeMirror-activeline-background{background:#101213}.cm-s-hashi .CodeMirror-matchingbracket{text-decoration:underline;color:var(--token-color-surface-primary)!important}.readonly-codemirror .cm-s-hashi span{color:var(--syntax-light-grey)}.readonly-codemirror .cm-s-hashi span.cm-string,.readonly-codemirror .cm-s-hashi span.cm-string-2{color:var(--syntax-faded-gray)}.readonly-codemirror .cm-s-hashi span.cm-number{color:#a3acbc}.readonly-codemirror .cm-s-hashi span.cm-property{color:var(--token-color-surface-primary)}.readonly-codemirror .cm-s-hashi span.cm-variable-2{color:var(--syntax-light-grey-blue)}.code-editor .toolbar-container{background:var(--token-color-surface-strong);background:linear-gradient(180deg,var(--token-color-surface-strong) 50%,var(--token-color-surface-interactive-active) 100%);border:1px solid var(--token-color-surface-interactive-active);border-bottom-color:var(--token-color-foreground-faint);border-top-color:var(--token-color-foreground-disabled)}.code-editor .toolbar-container .toolbar .title{color:var(--token-color-foreground-strong);font-size:14px;font-weight:700;padding:0 8px}.code-editor .toolbar-container .toolbar .toolbar-separator{border-right:1px solid var(--token-color-palette-neutral-300)}.code-editor .toolbar-container .ember-power-select-trigger{background-color:var(--token-color-surface-primary);color:var(--token-color-hashicorp-brand);border-radius:var(--decor-radius-100);border:var(--decor-border-100);border-color:var(--token-color-foreground-faint)}.code-editor{display:block;border:10px;overflow:hidden;position:relative;clear:both}.code-editor::after{position:absolute;bottom:0;width:100%;height:25px;background-color:var(--token-color-hashicorp-brand);content:"";display:block}.code-editor>pre{display:none}.code-editor .toolbar-container,.code-editor .toolbar-container .toolbar{align-items:center;justify-content:space-between;display:flex}.code-editor .toolbar-container{position:relative;margin-top:4px;height:44px}.code-editor .toolbar-container .toolbar{flex:1;white-space:nowrap}.code-editor .toolbar-container .toolbar .toolbar-separator{height:32px;margin:0 4px;width:0}.code-editor .toolbar-container .toolbar .tools{display:flex;flex-direction:row;margin:0 10px;align-items:center}.code-editor .toolbar-container .toolbar .tools .copy-button{margin-left:10px}.code-editor .toolbar-container .ember-basic-dropdown-trigger{margin:0 8px;width:120px;height:32px;display:flex;align-items:center;flex-direction:row}.consul-exposed-path-list>ul>li,.consul-lock-session-list ul>li:not(:first-child),.consul-upstream-instance-list li,.list-collection>ul>li:not(:first-child){display:grid;grid-template-columns:1fr auto;grid-template-rows:50% 50%;grid-template-areas:"header actions" "detail actions"}.consul-exposed-path-list>ul>li>.header,.consul-lock-session-list ul>li:not(:first-child)>.header,.consul-upstream-instance-list li>.header,.list-collection>ul>li:not(:first-child)>.header{grid-area:header;align-self:start}.consul-exposed-path-list>ul>li>.detail,.consul-lock-session-list ul>li:not(:first-child)>.detail,.consul-upstream-instance-list li>.detail,.list-collection>ul>li:not(:first-child)>.detail{grid-area:detail;align-self:end}.consul-exposed-path-list>ul>li>.detail *,.consul-lock-session-list ul>li:not(:first-child)>.detail *,.consul-upstream-instance-list li>.detail *,.list-collection>ul>li:not(:first-child)>.detail *{flex-wrap:nowrap!important}.consul-exposed-path-list>ul>li>.actions,.consul-lock-session-list ul>li:not(:first-child)>.actions,.consul-upstream-instance-list li>.actions,.list-collection>ul>li:not(:first-child)>.actions{grid-area:actions;display:inline-flex}.consul-nspace-list>ul>li:not(:first-child) dt,.consul-policy-list>ul li:not(:first-child) dl:not(.datacenter) dt,.consul-role-list>ul>li:not(:first-child) dt,.consul-service-instance-list .port dt,.consul-service-instance-list .port dt::before,.consul-token-list>ul>li:not(:first-child) dt{display:none}.consul-exposed-path-list>ul>li>.header:nth-last-child(2),.consul-lock-session-list ul>li:not(:first-child)>.header:nth-last-child(2),.consul-upstream-instance-list li>.header:nth-last-child(2),.list-collection>ul>li:not(:first-child)>.header:nth-last-child(2){grid-column-start:header;grid-column-end:actions}.consul-exposed-path-list>ul>li>.detail:last-child,.consul-lock-session-list ul>li:not(:first-child)>.detail:last-child,.consul-upstream-instance-list li>.detail:last-child,.list-collection>ul>li:not(:first-child)>.detail:last-child{grid-column-start:detail;grid-column-end:actions}.consul-nspace-list>ul>li:not(:first-child) dt+dd,.consul-policy-list>ul li:not(:first-child) dl:not(.datacenter) dt+dd,.consul-role-list>ul>li:not(:first-child) dt+dd,.consul-token-list>ul>li:not(:first-child) dt+dd{margin-left:0!important}.consul-policy-list dl.datacenter dt,.consul-service-list li>div:first-child>dl:first-child dd{margin-top:1px}.consul-service-instance-list .detail,.consul-service-list .detail{overflow-x:visible!important}.consul-intention-permission-list>ul{border-top:1px solid var(--token-color-surface-interactive-active)}.consul-service-instance-list .port .copy-button{margin-right:0}.consul-exposed-path-list>ul>li .copy-button,.consul-lock-session-list ul>li:not(:first-child) .copy-button,.consul-upstream-instance-list li .copy-button,.list-collection>ul>li:not(:first-child) .copy-button{display:inline-flex}.consul-exposed-path-list>ul>li>.header .copy-button,.consul-lock-session-list ul>li:not(:first-child)>.header .copy-button,.consul-upstream-instance-list li>.header .copy-button,.list-collection>ul>li:not(:first-child)>.header .copy-button{margin-left:4px}.consul-exposed-path-list>ul>li>.detail .copy-button,.consul-lock-session-list ul>li:not(:first-child)>.detail .copy-button,.consul-upstream-instance-list li>.detail .copy-button,.list-collection>ul>li:not(:first-child)>.detail .copy-button{margin-top:2px}.consul-exposed-path-list>ul>li .copy-button button,.consul-lock-session-list ul>li:not(:first-child) .copy-button button,.consul-upstream-instance-list li .copy-button button,.list-collection>ul>li:not(:first-child) .copy-button button{padding:0!important;margin:0!important}.consul-exposed-path-list>ul>li>.header .copy-button button,.consul-lock-session-list ul>li:not(:first-child)>.header .copy-button button,.consul-upstream-instance-list li>.header .copy-button button,.list-collection>ul>li:not(:first-child)>.header .copy-button button{display:none}.consul-exposed-path-list>ul>li>.header:hover .copy-button button,.consul-lock-session-list ul>li:not(:first-child)>.header:hover .copy-button button,.consul-upstream-instance-list li>.header:hover .copy-button button,.list-collection>ul>li:not(:first-child)>.header:hover .copy-button button{display:block}.consul-exposed-path-list>ul>li .copy-button button:hover,.consul-lock-session-list ul>li:not(:first-child) .copy-button button:hover,.consul-upstream-instance-list li .copy-button button:hover,.list-collection>ul>li:not(:first-child) .copy-button button:hover{background-color:transparent!important}.consul-exposed-path-list>ul>li>.detail>.consul-external-source:first-child,.consul-exposed-path-list>ul>li>.detail>.consul-kind:first-child,.consul-lock-session-list ul>li:not(:first-child)>.detail>.consul-external-source:first-child,.consul-lock-session-list ul>li:not(:first-child)>.detail>.consul-kind:first-child,.consul-upstream-instance-list li>.detail>.consul-external-source:first-child,.consul-upstream-instance-list li>.detail>.consul-kind:first-child,.list-collection>ul>li:not(:first-child)>.detail>.consul-external-source:first-child,.list-collection>ul>li:not(:first-child)>.detail>.consul-kind:first-child{margin-left:-5px}.consul-exposed-path-list>ul>li>.detail .policy-management::before,.consul-exposed-path-list>ul>li>.detail .policy::before,.consul-exposed-path-list>ul>li>.detail .role::before,.consul-lock-session-list ul>li:not(:first-child)>.detail .policy-management::before,.consul-lock-session-list ul>li:not(:first-child)>.detail .policy::before,.consul-lock-session-list ul>li:not(:first-child)>.detail .role::before,.consul-upstream-instance-list li>.detail .policy-management::before,.consul-upstream-instance-list li>.detail .policy::before,.consul-upstream-instance-list li>.detail .role::before,.list-collection>ul>li:not(:first-child)>.detail .policy-management::before,.list-collection>ul>li:not(:first-child)>.detail .policy::before,.list-collection>ul>li:not(:first-child)>.detail .role::before{margin-right:3px}table div.with-confirmation.confirming{background-color:var(--token-color-surface-primary)}div.with-confirmation p{margin-right:12px;padding-left:12px;margin-bottom:0!important}div.with-confirmation{justify-content:end;width:100%;display:flex;align-items:center}table td>div.with-confirmation.confirming{position:absolute;right:0}@media (max-width:420px){div.with-confirmation{float:none;margin-top:1em;display:block}div.with-confirmation p{margin-bottom:1em}}.copy-button button{color:var(--token-color-foreground-action);--icon-color:transparent;min-height:17px}.copy-button button::after{--icon-color:var(--token-color-surface-strong)}.copy-button button:focus,.copy-button button:hover:not(:disabled):not(:active){color:var(--token-color-foreground-action);--icon-color:var(--token-color-surface-strong)}.copy-button button:hover::before{--icon-color:var(--token-color-foreground-action)}.copy-button button:active{--icon-color:var(--token-color-surface-interactive-active)}.copy-button button:empty{padding:0!important;margin-right:0;top:-1px}.copy-button button:empty::after{content:"";display:none;position:absolute;top:-2px;left:-3px;width:20px;height:22px}.copy-button button:empty:hover::after{display:block}.copy-button button:empty::before{position:relative;z-index:1}.copy-button button:not(:empty)::before{margin-right:4px}.consul-bucket-list .copy-button,.consul-exposed-path-list>ul>li>.detail dl .copy-button,.consul-instance-checks .copy-button,.consul-lock-session-list dl .copy-button,.consul-lock-session-list ul>li:not(:first-child)>.detail dl .copy-button,.consul-upstream-instance-list dl .copy-button,.list-collection>ul>li:not(:first-child)>.detail dl .copy-button,.tag-list .copy-button,section[data-route="dc.show.license"] .validity dl .copy-button,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl .copy-button,td.tags .copy-button{margin-top:0!important}.consul-bucket-list .copy-btn,.consul-exposed-path-list>ul>li>.detail dl .copy-btn,.consul-instance-checks .copy-btn,.consul-lock-session-list dl .copy-btn,.consul-lock-session-list ul>li:not(:first-child)>.detail dl .copy-btn,.consul-upstream-instance-list dl .copy-btn,.list-collection>ul>li:not(:first-child)>.detail dl .copy-btn,.tag-list .copy-btn,section[data-route="dc.show.license"] .validity dl .copy-btn,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl .copy-btn,td.tags .copy-btn{top:0!important}.consul-bucket-list .copy-btn:empty::before,.consul-exposed-path-list>ul>li>.detail dl .copy-btn:empty::before,.consul-instance-checks .copy-btn:empty::before,.consul-lock-session-list dl .copy-btn:empty::before,.consul-upstream-instance-list dl .copy-btn:empty::before,.list-collection>ul>li:not(:first-child)>.detail dl .copy-btn:empty::before,.tag-list .copy-btn:empty::before,section[data-route="dc.show.license"] .validity dl .copy-btn:empty::before,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl .copy-btn:empty::before,td.tags .copy-btn:empty::before{left:0!important}.definition-table>dl{display:grid;grid-template-columns:140px auto;grid-gap:.4em 20px;margin-bottom:1.4em}.disclosure-menu{position:relative}.disclosure-menu [aria-expanded]~*{overflow-y:auto!important;will-change:scrollPosition}.more-popover-menu>[type=checkbox],.more-popover-menu>[type=checkbox]~:not(.animating):not(label),.popover-menu>[type=checkbox],.popover-menu>[type=checkbox]~:not(.animating):not(label),table.has-actions tr>.actions>[type=checkbox],table.has-actions tr>.actions>[type=checkbox]~:not(.animating):not(label),table.with-details tr>.actions>[type=checkbox],table.with-details tr>.actions>[type=checkbox]~:not(.animating):not(label){display:none}.more-popover-menu>[type=checkbox]:checked~:not(label),.popover-menu>[type=checkbox]:checked~:not(label),table.has-actions tr>.actions>[type=checkbox]:checked~:not(label),table.with-details tr>.actions>[type=checkbox]:checked~:not(label){display:block}table.dom-recycling{position:relative}table.dom-recycling tr>*{overflow:hidden}.list-collection-scroll-virtual>ul,table.dom-recycling tbody{overflow-x:hidden!important}table.dom-recycling dd{flex-wrap:nowrap}table.dom-recycling dd>*{margin-bottom:0}.empty-state,.empty-state>div{display:flex;flex-direction:column}.empty-state header :first-child{padding:0;margin:0}.empty-state{margin-top:0!important;padding-bottom:2.8em;background-color:var(--token-color-surface-faint)}.empty-state>*{width:370px;margin:0 auto}.empty-state button{margin:0 auto;display:inline}.empty-state header :first-child{margin-bottom:-3px;border-bottom:none}.empty-state header{margin-top:1.8em;margin-bottom:.5em}.empty-state>ul{display:flex;justify-content:space-between;margin-top:1em}.empty-state>ul>li>*,.empty-state>ul>li>label>button{display:inline-flex;align-items:center}.empty-state>div:only-child{padding:50px 0 10px;text-align:center}.empty-state header::before{font-size:2.6em;position:relative;top:-3px;float:left;margin-right:10px}.oidc-select button.reset,.type-dialog{float:right}.empty-state>ul>li>::before,.empty-state>ul>li>label>button::before{margin-top:-1px;margin-right:.5em;font-size:.9em}.empty-state li[class*=-link]>::after{margin-left:5px}html[data-route^="dc.acls.index"] .filter-bar [role=radiogroup]{border:var(--decor-border-100);border-color:var(--token-color-palette-neutral-300);border-radius:var(--decor-radius-100)}html[data-route^="dc.acls.index"] .filter-bar [role=radiogroup] input[type=radio]:checked+*,html[data-route^="dc.acls.index"] .filter-bar [role=radiogroup] input[type=radio]:focus+*,html[data-route^="dc.acls.index"] .filter-bar [role=radiogroup] input[type=radio]:hover+*{box-shadow:var(--token-elevation-high-box-shadow);background-color:var(--token-color-surface-primary)}@media (min-width:996px){html[data-route^="dc.acls.index"] .filter-bar [role=radiogroup]{display:flex}html[data-route^="dc.acls.index"] .filter-bar [role=radiogroup] label{flex-grow:1}}html[data-route^="dc.acls.index"] .filter-bar [role=radiogroup] input[type=radio]{display:none}.app-view>div form:not(.filter-bar) [role=radiogroup] label,.app-view>div form:not(.filter-bar) [role=radiogroup] label textarea,.app-view>div form:not(.filter-bar) [role=radiogroup] label>em,.app-view>div form:not(.filter-bar) [role=radiogroup] label>span,.modal-dialog [role=document] .type-password,.modal-dialog [role=document] .type-password textarea,.modal-dialog [role=document] .type-password>em,.modal-dialog [role=document] .type-password>span,.modal-dialog [role=document] .type-select,.modal-dialog [role=document] .type-select textarea,.modal-dialog [role=document] .type-select>em,.modal-dialog [role=document] .type-select>span,.modal-dialog [role=document] .type-text,.modal-dialog [role=document] .type-text textarea,.modal-dialog [role=document] .type-text>em,.modal-dialog [role=document] .type-text>span,.modal-dialog [role=document] [role=radiogroup] label,.modal-dialog [role=document] [role=radiogroup] label textarea,.modal-dialog [role=document] [role=radiogroup] label>em,.modal-dialog [role=document] [role=radiogroup] label>span,.modal-dialog [role=document] form button+em,.oidc-select label,.oidc-select label textarea,.oidc-select label>em,.oidc-select label>span,.type-toggle,.type-toggle textarea,.type-toggle>em,.type-toggle>span,html[data-route^="dc.acls.index"] .filter-bar [role=radiogroup] label,html[data-route^="dc.acls.index"] .filter-bar [role=radiogroup] label span,main .type-password,main .type-password textarea,main .type-password>em,main .type-password>span,main .type-select,main .type-select textarea,main .type-select>em,main .type-select>span,main .type-text,main .type-text textarea,main .type-text>em,main .type-text>span,main form button+em,span.label{display:block}html[data-route^="dc.acls.index"] .filter-bar [role=radiogroup],html[data-route^="dc.acls.index"] .filter-bar [role=radiogroup] label,html[data-route^="dc.acls.index"] .filter-bar [role=radiogroup] label span{height:100%}html[data-route^="dc.acls.index"] .filter-bar [role=radiogroup] label span{padding:5px 14px}.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=password],.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=text],.app-view>div form:not(.filter-bar) [role=radiogroup] label textarea,.modal-dialog [role=document] .type-password [type=password],.modal-dialog [role=document] .type-password [type=text],.modal-dialog [role=document] .type-password textarea,.modal-dialog [role=document] .type-select [type=password],.modal-dialog [role=document] .type-select [type=text],.modal-dialog [role=document] .type-select textarea,.modal-dialog [role=document] .type-text [type=password],.modal-dialog [role=document] .type-text [type=text],.modal-dialog [role=document] .type-text textarea,.modal-dialog [role=document] [role=radiogroup] label [type=password],.modal-dialog [role=document] [role=radiogroup] label [type=text],.modal-dialog [role=document] [role=radiogroup] label textarea,.oidc-select label [type=password],.oidc-select label [type=text],.oidc-select label textarea,.type-toggle [type=password],.type-toggle [type=text],.type-toggle textarea,main .type-password [type=password],main .type-password [type=text],main .type-password textarea,main .type-select [type=password],main .type-select [type=text],main .type-select textarea,main .type-text [type=password],main .type-text [type=text],main .type-text textarea{-moz-appearance:none;-webkit-appearance:none;box-shadow:var(--token-surface-inset-box-shadow);border-radius:var(--decor-radius-100);border:var(--decor-border-100);outline:0}.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=password]:-moz-read-only,.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=text]:-moz-read-only,.app-view>div form:not(.filter-bar) [role=radiogroup] label textarea:-moz-read-only,.modal-dialog [role=document] .type-password [type=password]:-moz-read-only,.modal-dialog [role=document] .type-password [type=text]:-moz-read-only,.modal-dialog [role=document] .type-password textarea:-moz-read-only,.modal-dialog [role=document] .type-select [type=password]:-moz-read-only,.modal-dialog [role=document] .type-select [type=text]:-moz-read-only,.modal-dialog [role=document] .type-select textarea:-moz-read-only,.modal-dialog [role=document] .type-text [type=password]:-moz-read-only,.modal-dialog [role=document] .type-text [type=text]:-moz-read-only,.modal-dialog [role=document] .type-text textarea:-moz-read-only,.modal-dialog [role=document] [role=radiogroup] label [type=password]:-moz-read-only,.modal-dialog [role=document] [role=radiogroup] label [type=text]:-moz-read-only,.modal-dialog [role=document] [role=radiogroup] label textarea:-moz-read-only,.oidc-select label [type=password]:-moz-read-only,.oidc-select label [type=text]:-moz-read-only,.oidc-select label textarea:-moz-read-only,.type-toggle [type=password]:-moz-read-only,.type-toggle [type=text]:-moz-read-only,.type-toggle textarea:-moz-read-only,main .type-password [type=password]:-moz-read-only,main .type-password [type=text]:-moz-read-only,main .type-password textarea:-moz-read-only,main .type-select [type=password]:-moz-read-only,main .type-select [type=text]:-moz-read-only,main .type-select textarea:-moz-read-only,main .type-text [type=password]:-moz-read-only,main .type-text [type=text]:-moz-read-only,main .type-text textarea:-moz-read-only{cursor:not-allowed}.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=password]:disabled,.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=password]:read-only,.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=text]:disabled,.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=text]:read-only,.app-view>div form:not(.filter-bar) [role=radiogroup] label textarea:disabled,.app-view>div form:not(.filter-bar) [role=radiogroup] label textarea:read-only,.modal-dialog [role=document] .type-password [type=password]:disabled,.modal-dialog [role=document] .type-password [type=password]:read-only,.modal-dialog [role=document] .type-password [type=text]:disabled,.modal-dialog [role=document] .type-password [type=text]:read-only,.modal-dialog [role=document] .type-password textarea:disabled,.modal-dialog [role=document] .type-password textarea:read-only,.modal-dialog [role=document] .type-select [type=password]:disabled,.modal-dialog [role=document] .type-select [type=password]:read-only,.modal-dialog [role=document] .type-select [type=text]:disabled,.modal-dialog [role=document] .type-select [type=text]:read-only,.modal-dialog [role=document] .type-select textarea:disabled,.modal-dialog [role=document] .type-select textarea:read-only,.modal-dialog [role=document] .type-text [type=password]:disabled,.modal-dialog [role=document] .type-text [type=password]:read-only,.modal-dialog [role=document] .type-text [type=text]:disabled,.modal-dialog [role=document] .type-text [type=text]:read-only,.modal-dialog [role=document] .type-text textarea:disabled,.modal-dialog [role=document] .type-text textarea:read-only,.modal-dialog [role=document] [role=radiogroup] label [type=password]:disabled,.modal-dialog [role=document] [role=radiogroup] label [type=password]:read-only,.modal-dialog [role=document] [role=radiogroup] label [type=text]:disabled,.modal-dialog [role=document] [role=radiogroup] label [type=text]:read-only,.modal-dialog [role=document] [role=radiogroup] label textarea:disabled,.modal-dialog [role=document] [role=radiogroup] label textarea:read-only,.oidc-select label [type=password]:disabled,.oidc-select label [type=password]:read-only,.oidc-select label [type=text]:disabled,.oidc-select label [type=text]:read-only,.oidc-select label textarea:disabled,.oidc-select label textarea:read-only,.type-toggle [type=password]:disabled,.type-toggle [type=password]:read-only,.type-toggle [type=text]:disabled,.type-toggle [type=text]:read-only,.type-toggle textarea:disabled,.type-toggle textarea:read-only,main .type-password [type=password]:disabled,main .type-password [type=password]:read-only,main .type-password [type=text]:disabled,main .type-password [type=text]:read-only,main .type-password textarea:disabled,main .type-password textarea:read-only,main .type-select [type=password]:disabled,main .type-select [type=password]:read-only,main .type-select [type=text]:disabled,main .type-select [type=text]:read-only,main .type-select textarea:disabled,main .type-select textarea:read-only,main .type-text [type=password]:disabled,main .type-text [type=password]:read-only,main .type-text [type=text]:disabled,main .type-text [type=text]:read-only,main .type-text textarea:disabled,main .type-text textarea:read-only,textarea:disabled+.CodeMirror{cursor:not-allowed}.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=password]::-moz-placeholder,.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=text]::-moz-placeholder,.app-view>div form:not(.filter-bar) [role=radiogroup] label textarea::-moz-placeholder,.modal-dialog [role=document] .type-password [type=password]::-moz-placeholder,.modal-dialog [role=document] .type-password [type=text]::-moz-placeholder,.modal-dialog [role=document] .type-password textarea::-moz-placeholder,.modal-dialog [role=document] .type-select [type=password]::-moz-placeholder,.modal-dialog [role=document] .type-select [type=text]::-moz-placeholder,.modal-dialog [role=document] .type-select textarea::-moz-placeholder,.modal-dialog [role=document] .type-text [type=password]::-moz-placeholder,.modal-dialog [role=document] .type-text [type=text]::-moz-placeholder,.modal-dialog [role=document] .type-text textarea::-moz-placeholder,.modal-dialog [role=document] [role=radiogroup] label [type=password]::-moz-placeholder,.modal-dialog [role=document] [role=radiogroup] label [type=text]::-moz-placeholder,.modal-dialog [role=document] [role=radiogroup] label textarea::-moz-placeholder,.oidc-select label [type=password]::-moz-placeholder,.oidc-select label [type=text]::-moz-placeholder,.oidc-select label textarea::-moz-placeholder,.type-toggle [type=password]::-moz-placeholder,.type-toggle [type=text]::-moz-placeholder,.type-toggle textarea::-moz-placeholder,main .type-password [type=password]::-moz-placeholder,main .type-password [type=text]::-moz-placeholder,main .type-password textarea::-moz-placeholder,main .type-select [type=password]::-moz-placeholder,main .type-select [type=text]::-moz-placeholder,main .type-select textarea::-moz-placeholder,main .type-text [type=password]::-moz-placeholder,main .type-text [type=text]::-moz-placeholder,main .type-text textarea::-moz-placeholder{color:var(--token-color-foreground-disabled)}.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=password]::placeholder,.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=text]::placeholder,.app-view>div form:not(.filter-bar) [role=radiogroup] label textarea::placeholder,.app-view>div form:not(.filter-bar) [role=radiogroup] label>em,.modal-dialog [role=document] .type-password [type=password]::placeholder,.modal-dialog [role=document] .type-password [type=text]::placeholder,.modal-dialog [role=document] .type-password textarea::placeholder,.modal-dialog [role=document] .type-password>em,.modal-dialog [role=document] .type-select [type=password]::placeholder,.modal-dialog [role=document] .type-select [type=text]::placeholder,.modal-dialog [role=document] .type-select textarea::placeholder,.modal-dialog [role=document] .type-select>em,.modal-dialog [role=document] .type-text [type=password]::placeholder,.modal-dialog [role=document] .type-text [type=text]::placeholder,.modal-dialog [role=document] .type-text textarea::placeholder,.modal-dialog [role=document] .type-text>em,.modal-dialog [role=document] [role=radiogroup] label [type=password]::placeholder,.modal-dialog [role=document] [role=radiogroup] label [type=text]::placeholder,.modal-dialog [role=document] [role=radiogroup] label textarea::placeholder,.modal-dialog [role=document] [role=radiogroup] label>em,.modal-dialog [role=document] form button+em,.modal-dialog [role=document] form fieldset>p,.oidc-select label [type=password]::placeholder,.oidc-select label [type=text]::placeholder,.oidc-select label textarea::placeholder,.oidc-select label>em,.type-toggle [type=password]::placeholder,.type-toggle [type=text]::placeholder,.type-toggle textarea::placeholder,.type-toggle>em,main .type-password [type=password]::placeholder,main .type-password [type=text]::placeholder,main .type-password textarea::placeholder,main .type-password>em,main .type-select [type=password]::placeholder,main .type-select [type=text]::placeholder,main .type-select textarea::placeholder,main .type-select>em,main .type-text [type=password]::placeholder,main .type-text [type=text]::placeholder,main .type-text textarea::placeholder,main .type-text>em,main form button+em,main form fieldset>p{color:var(--token-color-foreground-disabled)}.has-error>input,.has-error>textarea{border-color:var(--decor-error,var(--token-color-foreground-critical))!important}.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=password],.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=text],.app-view>div form:not(.filter-bar) [role=radiogroup] label textarea,.modal-dialog [role=document] .type-password [type=password],.modal-dialog [role=document] .type-password [type=text],.modal-dialog [role=document] .type-password textarea,.modal-dialog [role=document] .type-select [type=password],.modal-dialog [role=document] .type-select [type=text],.modal-dialog [role=document] .type-select textarea,.modal-dialog [role=document] .type-text [type=password],.modal-dialog [role=document] .type-text [type=text],.modal-dialog [role=document] .type-text textarea,.modal-dialog [role=document] [role=radiogroup] label [type=password],.modal-dialog [role=document] [role=radiogroup] label [type=text],.modal-dialog [role=document] [role=radiogroup] label textarea,.oidc-select label [type=password],.oidc-select label [type=text],.oidc-select label textarea,.type-toggle [type=password],.type-toggle [type=text],.type-toggle textarea,main .type-password [type=password],main .type-password [type=text],main .type-password textarea,main .type-select [type=password],main .type-select [type=text],main .type-select textarea,main .type-text [type=password],main .type-text [type=text],main .type-text textarea{color:var(--token-color-foreground-faint);border-color:var(--token-color-palette-neutral-300)}.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=password]:hover,.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=text]:hover,.app-view>div form:not(.filter-bar) [role=radiogroup] label textarea:hover,.modal-dialog [role=document] .type-password [type=password]:hover,.modal-dialog [role=document] .type-password [type=text]:hover,.modal-dialog [role=document] .type-password textarea:hover,.modal-dialog [role=document] .type-select [type=password]:hover,.modal-dialog [role=document] .type-select [type=text]:hover,.modal-dialog [role=document] .type-select textarea:hover,.modal-dialog [role=document] .type-text [type=password]:hover,.modal-dialog [role=document] .type-text [type=text]:hover,.modal-dialog [role=document] .type-text textarea:hover,.modal-dialog [role=document] [role=radiogroup] label [type=password]:hover,.modal-dialog [role=document] [role=radiogroup] label [type=text]:hover,.modal-dialog [role=document] [role=radiogroup] label textarea:hover,.oidc-select label [type=password]:hover,.oidc-select label [type=text]:hover,.oidc-select label textarea:hover,.type-toggle [type=password]:hover,.type-toggle [type=text]:hover,.type-toggle textarea:hover,main .type-password [type=password]:hover,main .type-password [type=text]:hover,main .type-password textarea:hover,main .type-select [type=password]:hover,main .type-select [type=text]:hover,main .type-select textarea:hover,main .type-text [type=password]:hover,main .type-text [type=text]:hover,main .type-text textarea:hover{border-color:var(--token-color-foreground-faint)}.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=password]:focus,.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=text]:focus,.app-view>div form:not(.filter-bar) [role=radiogroup] label textarea:focus,.modal-dialog [role=document] .type-password [type=password]:focus,.modal-dialog [role=document] .type-password [type=text]:focus,.modal-dialog [role=document] .type-password textarea:focus,.modal-dialog [role=document] .type-select [type=password]:focus,.modal-dialog [role=document] .type-select [type=text]:focus,.modal-dialog [role=document] .type-select textarea:focus,.modal-dialog [role=document] .type-text [type=password]:focus,.modal-dialog [role=document] .type-text [type=text]:focus,.modal-dialog [role=document] .type-text textarea:focus,.modal-dialog [role=document] [role=radiogroup] label [type=password]:focus,.modal-dialog [role=document] [role=radiogroup] label [type=text]:focus,.modal-dialog [role=document] [role=radiogroup] label textarea:focus,.oidc-select label [type=password]:focus,.oidc-select label [type=text]:focus,.oidc-select label textarea:focus,.type-toggle [type=password]:focus,.type-toggle [type=text]:focus,.type-toggle textarea:focus,main .type-password [type=password]:focus,main .type-password [type=text]:focus,main .type-password textarea:focus,main .type-select [type=password]:focus,main .type-select [type=text]:focus,main .type-select textarea:focus,main .type-text [type=password]:focus,main .type-text [type=text]:focus,main .type-text textarea:focus{border-color:var(--typo-action,var(--token-color-foreground-action))}.app-view>div form:not(.filter-bar) [role=radiogroup] label a,.modal-dialog [role=document] .type-password a,.modal-dialog [role=document] .type-select a,.modal-dialog [role=document] .type-text a,.modal-dialog [role=document] [role=radiogroup] label a,.oidc-select label a,.type-toggle a,main .type-password a,main .type-select a,main .type-text a{display:inline}.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=password],.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=text],.modal-dialog [role=document] .type-password [type=password],.modal-dialog [role=document] .type-password [type=text],.modal-dialog [role=document] .type-select [type=password],.modal-dialog [role=document] .type-select [type=text],.modal-dialog [role=document] .type-text [type=password],.modal-dialog [role=document] .type-text [type=text],.modal-dialog [role=document] [role=radiogroup] label [type=password],.modal-dialog [role=document] [role=radiogroup] label [type=text],.oidc-select label [type=password],.oidc-select label [type=text],.type-toggle [type=password],.type-toggle [type=text],main .type-password [type=password],main .type-password [type=text],main .type-select [type=password],main .type-select [type=text],main .type-text [type=password],main .type-text [type=text]{display:inline-flex;justify-content:flex-start;max-width:100%;width:100%;height:0;padding:17px 13px}.app-view>div form:not(.filter-bar) [role=radiogroup] label textarea,.modal-dialog [role=document] .type-password textarea,.modal-dialog [role=document] .type-select textarea,.modal-dialog [role=document] .type-text textarea,.modal-dialog [role=document] [role=radiogroup] label textarea,.oidc-select label textarea,.type-toggle textarea,main .type-password textarea,main .type-select textarea,main .type-text textarea{resize:vertical;max-width:100%;min-width:100%;min-height:70px;padding:6px 13px}.app-view>div form:not(.filter-bar) [role=radiogroup],.app-view>div form:not(.filter-bar) [role=radiogroup] label,.checkbox-group,.modal-dialog [role=document] .type-password,.modal-dialog [role=document] .type-select,.modal-dialog [role=document] .type-text,.modal-dialog [role=document] [role=radiogroup],.modal-dialog [role=document] [role=radiogroup] label,.modal-dialog [role=document] form table,.oidc-select label,.type-toggle,main .type-password,main .type-select,main .type-text,main form table{margin-bottom:1.4em}.app-view>div form:not(.filter-bar) [role=radiogroup] label>span,.modal-dialog [role=document] .type-password>span,.modal-dialog [role=document] .type-select>span,.modal-dialog [role=document] .type-text>span,.modal-dialog [role=document] [role=radiogroup] label>span,.oidc-select label>span,.type-toggle>span,main .type-password>span,main .type-select>span,main .type-text>span,span.label{color:var(--typo-contrast,inherit);margin-bottom:.3em}.app-view>div form:not(.filter-bar) [role=radiogroup] label>em,.modal-dialog [role=document] .type-password>em,.modal-dialog [role=document] .type-select>em,.modal-dialog [role=document] .type-text>em,.modal-dialog [role=document] [role=radiogroup] label>em,.modal-dialog [role=document] form button+em,.oidc-select label>em,.type-toggle>em,main .type-password>em,main .type-select>em,main .type-text>em,main form button+em{margin-top:2px}.app-view>div form:not(.filter-bar) [role=radiogroup] label>span+em,.modal-dialog [role=document] .type-password>span+em,.modal-dialog [role=document] .type-select>span+em,.modal-dialog [role=document] .type-text>span+em,.modal-dialog [role=document] [role=radiogroup] label>span+em,.oidc-select label>span+em,.type-toggle>span+em,main .type-password>span+em,main .type-select>span+em,main .type-text>span+em,span.label+em{margin-top:-.5em;margin-bottom:.5em}.modal-dialog [role=document] .type-password>span,.modal-dialog [role=document] .type-select>span,.modal-dialog [role=document] label.type-text>span,main .type-password>span,main .type-select>span,main label.type-text>span{line-height:2.2em}.type-toggle+.checkbox-group{margin-top:-1em}.consul-exposed-path-list>ul>li,.consul-intention-permission-header-list>ul>li,.consul-intention-permission-list>ul>li,.consul-lock-session-list ul>li:not(:first-child),.consul-upstream-instance-list li,.list-collection>ul>li:not(:first-child){list-style-type:none;border:var(--decor-border-100);border-top-color:transparent;border-bottom-color:var(--token-color-surface-interactive-active);border-right-color:transparent;border-left-color:transparent;--horizontal-padding:12px;--vertical-padding:10px;padding:var(--vertical-padding) 0;padding-left:var(--horizontal-padding)}.consul-auth-method-list>ul>li:active:not(:first-child),.consul-auth-method-list>ul>li:focus:not(:first-child),.consul-auth-method-list>ul>li:hover:not(:first-child),.consul-exposed-path-list>ul>li.linkable:active,.consul-exposed-path-list>ul>li.linkable:focus,.consul-exposed-path-list>ul>li.linkable:hover,.consul-intention-permission-list:not(.readonly)>ul>li:active,.consul-intention-permission-list:not(.readonly)>ul>li:focus,.consul-intention-permission-list:not(.readonly)>ul>li:hover,.consul-lock-session-list ul>li.linkable:active:not(:first-child),.consul-lock-session-list ul>li.linkable:focus:not(:first-child),.consul-lock-session-list ul>li.linkable:hover:not(:first-child),.consul-node-list>ul>li:active:not(:first-child),.consul-node-list>ul>li:focus:not(:first-child),.consul-node-list>ul>li:hover:not(:first-child),.consul-policy-list>ul>li:active:not(:first-child),.consul-policy-list>ul>li:focus:not(:first-child),.consul-policy-list>ul>li:hover:not(:first-child),.consul-role-list>ul>li:active:not(:first-child),.consul-role-list>ul>li:focus:not(:first-child),.consul-role-list>ul>li:hover:not(:first-child),.consul-service-instance-list>ul>li:active:not(:first-child),.consul-service-instance-list>ul>li:focus:not(:first-child),.consul-service-instance-list>ul>li:hover:not(:first-child),.consul-token-list>ul>li:active:not(:first-child),.consul-token-list>ul>li:focus:not(:first-child),.consul-token-list>ul>li:hover:not(:first-child),.consul-upstream-instance-list li.linkable:active,.consul-upstream-instance-list li.linkable:focus,.consul-upstream-instance-list li.linkable:hover,.list-collection>ul>li.linkable:active:not(:first-child),.list-collection>ul>li.linkable:focus:not(:first-child),.list-collection>ul>li.linkable:hover:not(:first-child){border-color:var(--token-color-surface-interactive-active);box-shadow:var(--token-elevation-high-box-shadow);border-top-color:transparent;cursor:pointer}.radio-card,.tippy-box{box-shadow:var(--token-surface-mid-box-shadow)}.consul-exposed-path-list>ul>li>.header,.consul-lock-session-list ul>li:not(:first-child)>.header,.consul-upstream-instance-list li>.header,.list-collection>ul>li:not(:first-child)>.header{color:var(--token-color-hashicorp-brand)}.consul-exposed-path-list>ul>li>.header *,.consul-lock-session-list ul>li:not(:first-child)>.header *,.consul-upstream-instance-list li>.header *,.list-collection>ul>li:not(:first-child)>.header *{color:inherit}.consul-exposed-path-list>ul>li>.detail,.consul-lock-session-list ul>li:not(:first-child)>.detail,.consul-upstream-instance-list li>.detail,.list-collection>ul>li:not(:first-child)>.detail,.radio-card{color:var(--token-color-foreground-faint)}.consul-exposed-path-list>ul>li>.detail a,.consul-lock-session-list ul>li:not(:first-child)>.detail a,.consul-upstream-instance-list li>.detail a,.list-collection>ul>li:not(:first-child)>.detail a{color:inherit}.consul-exposed-path-list>ul>li>.detail a:hover,.consul-lock-session-list ul>li:not(:first-child)>.detail a:hover,.consul-upstream-instance-list li>.detail a:hover,.list-collection>ul>li:not(:first-child)>.detail a:hover{color:var(--token-color-foreground-action);text-decoration:underline}.consul-exposed-path-list>ul>li>.header dt,.consul-lock-session-list ul>li:not(:first-child)>.header dt,.consul-upstream-instance-list li>.header dt,.list-collection>ul>li:not(:first-child)>.header dt{display:none}.consul-exposed-path-list>ul>li>.header dd::before,.consul-lock-session-list ul>li:not(:first-child)>.header dd::before,.consul-upstream-instance-list li>.header dd::before,.list-collection>ul>li:not(:first-child)>.header dd::before{font-size:.9em}.consul-exposed-path-list>ul>li>.detail,.consul-exposed-path-list>ul>li>.header,.consul-lock-session-list ul>li:not(:first-child)>.detail,.consul-lock-session-list ul>li:not(:first-child)>.header,.consul-upstream-instance-list li>.detail,.consul-upstream-instance-list li>.header,.list-collection>ul>li:not(:first-child)>.detail,.list-collection>ul>li:not(:first-child)>.header{display:flex;flex-wrap:nowrap;overflow-x:hidden}.consul-exposed-path-list>ul>li>.detail *,.consul-exposed-path-list>ul>li>.header *,.consul-lock-session-list ul>li:not(:first-child)>.detail *,.consul-lock-session-list ul>li:not(:first-child)>.header *,.consul-upstream-instance-list li>.detail *,.consul-upstream-instance-list li>.header *,.list-collection>ul>li:not(:first-child)>.detail *,.list-collection>ul>li:not(:first-child)>.header *{white-space:nowrap;flex-wrap:nowrap}.consul-exposed-path-list>ul>li>.detail>span,.consul-lock-session-list ul>li:not(:first-child)>.detail>span,.consul-upstream-instance-list li>.detail>span,.list-collection>ul>li:not(:first-child)>.detail>span{margin-right:18px}.consul-intention-permission-header-list>ul>li,.consul-intention-permission-list>ul>li{padding-top:0!important;padding-bottom:0!important}.consul-intention-permission-header-list>ul>li .detail,.consul-intention-permission-list>ul>li .detail{grid-row-start:header!important;grid-row-end:detail!important;align-self:center!important;padding:5px 0}.consul-intention-permission-header-list>ul>li .popover-menu>[type=checkbox]+label,.consul-intention-permission-list>ul>li .popover-menu>[type=checkbox]+label{padding:0}.consul-intention-permission-header-list>ul>li .popover-menu>[type=checkbox]+label+div:not(.above),.consul-intention-permission-list>ul>li .popover-menu>[type=checkbox]+label+div:not(.above){top:30px}.has-error>strong{font-style:normal;font-weight:400;color:inherit;color:var(--token-color-foreground-critical);position:relative;padding-left:20px}.has-error>strong::before{font-size:14px;color:var(--token-color-foreground-critical);position:absolute;top:50%;left:0;margin-top:-8px}.more-popover-menu .popover-menu>[type=checkbox]+label,table.has-actions tr>.actions .popover-menu>[type=checkbox]+label,table.with-details tr>.actions .popover-menu>[type=checkbox]+label{padding:7px}.more-popover-menu .popover-menu>[type=checkbox]+label>*,table.has-actions tr>.actions .popover-menu>[type=checkbox]+label>*,table.with-details tr>.actions .popover-menu>[type=checkbox]+label>*{background-color:transparent;border-radius:var(--decor-radius-100);width:30px;height:30px;font-size:0}.more-popover-menu .popover-menu>[type=checkbox]+label>:active,.more-popover-menu .popover-menu>[type=checkbox]+label>:focus,.more-popover-menu .popover-menu>[type=checkbox]+label>:hover,.radio-card>:first-child,table.has-actions tr>.actions .popover-menu>[type=checkbox]+label>:active,table.has-actions tr>.actions .popover-menu>[type=checkbox]+label>:focus,table.has-actions tr>.actions .popover-menu>[type=checkbox]+label>:hover,table.with-details td:only-child>div>label:active,table.with-details td:only-child>div>label:focus,table.with-details td:only-child>div>label:hover,table.with-details td>label:active,table.with-details td>label:focus,table.with-details td>label:hover,table.with-details tr>.actions .popover-menu>[type=checkbox]+label>:active,table.with-details tr>.actions .popover-menu>[type=checkbox]+label>:focus,table.with-details tr>.actions .popover-menu>[type=checkbox]+label>:hover{background-color:var(--token-color-surface-strong)}.more-popover-menu .popover-menu>[type=checkbox]+label>::after,table.has-actions tr>.actions .popover-menu>[type=checkbox]+label>::after,table.with-details tr>.actions .popover-menu>[type=checkbox]+label>::after{--icon-name:icon-more-horizontal;--icon-color:var(--token-color-foreground-strong);--icon-size:icon-300;content:"";position:absolute;top:50%;left:50%;margin-top:-8px;margin-left:-8px}.oidc-select [class$=-oidc-provider]::before{width:22px;height:22px;flex:0 0 auto;margin-right:10px}.oidc-select .ember-power-select-trigger,.oidc-select li{margin-bottom:1em}.informed-action header,.radio-card header{margin-bottom:.5em}.oidc-select .ember-power-select-trigger{width:100%}.radio-card{border:var(--decor-border-100);border-radius:var(--decor-radius-100);border-color:var(--token-color-surface-interactive-active);cursor:pointer;float:none!important;margin-right:0!important;display:flex!important}.checked.radio-card{border-color:var(--token-color-foreground-action)}.checked.radio-card>:first-child{background-color:var(--token-color-surface-action)}.radio-card header{color:var(--token-color-hashicorp-brand)}.consul-intention-fieldsets .radio-card>:last-child{padding-left:47px;position:relative}.consul-intention-fieldsets .radio-card>:last-child::before{position:absolute;left:14px;font-size:1rem}.radio-card>:first-child{padding:10px;display:grid;align-items:center;justify-items:center}.radio-card>:last-child{padding:18px}.consul-server-card,.disclosure-menu [aria-expanded]~*,.menu-panel,.more-popover-menu>[type=checkbox]+label+div,.popover-menu>[type=checkbox]+label+div,section[data-route="dc.show.license"] aside,section[data-route="dc.show.serverstatus"] .server-failure-tolerance,table.has-actions tr>.actions>[type=checkbox]+label+div,table.with-details tr>.actions>[type=checkbox]+label+div{--tone-border:var(--token-color-palette-neutral-300);border:var(--decor-border-100);border-radius:var(--decor-radius-200);box-shadow:var(--token-surface-high-box-shadow);color:var(--token-color-foreground-strong);background-color:var(--token-color-surface-primary);--padding-x:14px;--padding-y:14px;position:relative}.disclosure-menu [aria-expanded]~* [role=separator],.menu-panel [role=separator],.more-popover-menu>[type=checkbox]+label+div [role=separator],.popover-menu>[type=checkbox]+label+div [role=separator],table.has-actions tr>.actions>[type=checkbox]+label+div [role=separator],table.with-details tr>.actions>[type=checkbox]+label+div [role=separator]{border-top:var(--decor-border-100);margin:0}.consul-server-card,.disclosure-menu [aria-expanded]~*,.disclosure-menu [aria-expanded]~* [role=separator],.menu-panel,.menu-panel [role=separator],.more-popover-menu>[type=checkbox]+label+div,.more-popover-menu>[type=checkbox]+label+div [role=separator],.popover-menu>[type=checkbox]+label+div,.popover-menu>[type=checkbox]+label+div [role=separator],section[data-route="dc.show.license"] aside,section[data-route="dc.show.serverstatus"] .server-failure-tolerance,table.has-actions tr>.actions>[type=checkbox]+label+div,table.has-actions tr>.actions>[type=checkbox]+label+div [role=separator],table.with-details tr>.actions>[type=checkbox]+label+div,table.with-details tr>.actions>[type=checkbox]+label+div [role=separator]{border-color:var(--tone-border)}.paged-collection-scroll,[style*="--paged-row-height"]{overflow-y:auto!important;will-change:scrollPosition}[style*="--paged-start"]::before{content:"";display:block;height:var(--paged-start)}.consul-auth-method-type,.consul-external-source,.consul-health-check-list .health-check-output dd em,.consul-intention-list td strong,.consul-intention-permission-list strong,.consul-intention-search-bar li button span,.consul-kind,.consul-peer-search-bar li button span,.consul-server-card .health-status+dd,.consul-source,.consul-transparent-proxy,.discovery-chain .route-card>header ul li,.hashicorp-consul nav .dcs .dc-name span,.hashicorp-consul nav .dcs li.is-local span,.hashicorp-consul nav .dcs li.is-primary span,.leader,.search-bar-status li:not(.remove-all),.topology-metrics-source-type,html[data-route^="dc.acls.index"] main td strong,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl,section[data-route="dc.show.serverstatus"] .server-failure-tolerance header em,span.policy-node-identity,span.policy-service-identity{border-radius:var(--decor-radius-100);display:inline-flex;position:relative;align-items:center;white-space:nowrap}.consul-auth-method-type::before,.consul-external-source::before,.consul-health-check-list .health-check-output dd em::before,.consul-intention-list td strong::before,.consul-intention-permission-list strong::before,.consul-intention-search-bar li button span::before,.consul-kind::before,.consul-peer-search-bar li button span::before,.consul-server-card .health-status+dd::before,.consul-source::before,.consul-transparent-proxy::before,.discovery-chain .route-card>header ul li::before,.hashicorp-consul nav .dcs .dc-name span::before,.hashicorp-consul nav .dcs li.is-local span::before,.hashicorp-consul nav .dcs li.is-primary span::before,.leader::before,.search-bar-status li:not(.remove-all)::before,.topology-metrics-source-type::before,html[data-route^="dc.acls.index"] main td strong::before,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl::before,section[data-route="dc.show.serverstatus"] .server-failure-tolerance header em::before,span.policy-node-identity::before,span.policy-service-identity::before{margin-right:4px;--icon-size:icon-300}.consul-auth-method-type,.consul-external-source,.consul-kind,.consul-server-card .health-status+dd,.consul-source,.consul-transparent-proxy,.hashicorp-consul nav .dcs .dc-name span,.leader,.search-bar-status li:not(.remove-all),.topology-metrics-source-type,section[data-route="dc.show.serverstatus"] .server-failure-tolerance header em,span.policy-node-identity,span.policy-service-identity{padding:0 8px;--icon-size:icon-200}.consul-intention-permission-list strong,.consul-peer-search-bar li button span,.discovery-chain .route-card>header ul li,html[data-route^="dc.acls.index"] main td strong,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl{padding:1px 5px}.consul-intention-list td strong,.consul-intention-search-bar li button span{padding:4px 8px}span.policy-node-identity::before,span.policy-service-identity::before{vertical-align:unset}span.policy-node-identity::before{content:"Node Identity: "}span.policy-service-identity::before{content:"Service Identity: "}.more-popover-menu>[type=checkbox]+label>*,.popover-menu>[type=checkbox]+label>*,table.has-actions tr>.actions>[type=checkbox]+label>*,table.with-details tr>.actions>[type=checkbox]+label>*{cursor:pointer}.more-popover-menu>[type=checkbox]+label>::after,.popover-menu>[type=checkbox]+label>::after,table.has-actions tr>.actions>[type=checkbox]+label>::after,table.with-details tr>.actions>[type=checkbox]+label>::after{width:16px;height:16px;position:relative}.more-popover-menu,.popover-menu,table.has-actions tr>.actions,table.with-details tr>.actions{position:relative}.more-popover-menu>[type=checkbox]+label,.popover-menu>[type=checkbox]+label,table.has-actions tr>.actions>[type=checkbox]+label,table.with-details tr>.actions>[type=checkbox]+label{display:block}.more-popover-menu>[type=checkbox]+label+div,.popover-menu>[type=checkbox]+label+div,table.has-actions tr>.actions>[type=checkbox]+label+div,table.with-details tr>.actions>[type=checkbox]+label+div{min-width:192px}.more-popover-menu>[type=checkbox]+label+div:not(.above),.popover-menu>[type=checkbox]+label+div:not(.above),table.has-actions tr>.actions>[type=checkbox]+label+div:not(.above),table.with-details tr>.actions>[type=checkbox]+label+div:not(.above){top:38px}.more-popover-menu>[type=checkbox]+label+div:not(.left),.popover-menu>[type=checkbox]+label+div:not(.left),table.has-actions tr>.actions>[type=checkbox]+label+div:not(.left),table.with-details tr>.actions>[type=checkbox]+label+div:not(.left){right:5px}.popover-menu .menu-panel{position:absolute!important}.popover-select label{height:100%}.popover-select label>*{padding:0 8px!important;height:100%!important;justify-content:space-between!important;min-width:auto!important}.popover-select label>::after{margin-left:6px}.popover-select button::before{margin-right:10px}.popover-select .value-passing button::before{color:var(--token-color-foreground-success)}.popover-select .value-warning button::before{color:var(--token-color-foreground-warning)}.popover-select .value-critical button::before{color:var(--token-color-foreground-critical)}.popover-select .value-empty button::before{color:var(--token-color-foreground-disabled)}.popover-select .value-unknown button::before,.type-source.popover-select li.partition button::before{color:var(--token-color-foreground-faint)}.type-source.popover-select li.aws button{text-transform:uppercase}.progress.indeterminate{width:100%;display:flex;align-items:center;justify-content:center;--icon-size:icon-700;--icon-name:var(--icon-loading);--icon-color:var(--token-color-foreground-faint)}.progress.indeterminate::before{content:""}.app-view>div form:not(.filter-bar) [role=radiogroup],.modal-dialog [role=document] [role=radiogroup]{overflow:hidden;padding-left:1px}.app-view>div form:not(.filter-bar) [role=radiogroup] label,.modal-dialog [role=document] [role=radiogroup] label{float:left}.app-view>div form:not(.filter-bar) [role=radiogroup] label>span,.modal-dialog [role=document] [role=radiogroup] label>span{float:right;margin-left:1em}.app-view>div form:not(.filter-bar) [role=radiogroup] label:not(:last-child),.modal-dialog [role=document] [role=radiogroup] label:not(:last-child){margin-right:25px}.app-view>div form:not(.filter-bar) [role=radiogroup] label,.app-view>div form:not(.filter-bar) [role=radiogroup] label>span,.modal-dialog [role=document] [role=radiogroup] label,.modal-dialog [role=document] [role=radiogroup] label>span{margin-bottom:0!important}.type-toggle label span{cursor:pointer}.type-toggle label span::after{border-radius:var(--decor-radius-full)}.type-toggle label span::before{border-radius:7px;left:0;width:24px;height:12px;margin-top:-5px}.type-negative.type-toggle{border:0}.app-view>header .title,.modal-dialog [role=document] table td,.modal-dialog [role=document] table th,main table td,main table th{border-bottom:var(--decor-border-100)}.type-toggle label span::after{background-color:var(--token-color-surface-primary);margin-top:-3px;width:8px;height:8px}.app .skip-links,.type-negative.type-toggle label input+span::before,.type-toggle label input:checked+span::before{background-color:var(--token-color-foreground-action)}.type-negative.type-toggle label input:checked+span::before,.type-toggle label span::before{background-color:var(--token-color-palette-neutral-300)}.type-toggle label{position:relative}.type-toggle input{display:none}.type-toggle label span{color:var(--token-color-foreground-strong);display:inline-block;padding-left:34px}.type-toggle label span::after,.type-toggle label span::before{position:absolute;display:block;content:"";top:50%}.type-negative.type-toggle label input+span::after,.type-toggle label input:checked+span::after{left:14px}.type-negative.type-toggle label input:checked+span::after,.type-toggle label span::after{left:2px}.modal-dialog [role=document] table th,main table th{border-color:var(--token-color-palette-neutral-300);padding:.6em 0}.modal-dialog [role=document] table td,main table td{border-color:var(--token-color-surface-interactive-active);color:var(--token-color-foreground-faint);height:50px;vertical-align:middle}.modal-dialog [role=document] table td strong,.modal-dialog [role=document] table th,main table td strong,main table th{color:var(--token-color-foreground-faint)}.consul-intention-list td.destination,.consul-intention-list td.source,.modal-dialog [role=document] table a,.modal-dialog [role=document] table td:first-child,.tomography-graph .tick text,main table a,main table td:first-child{color:var(--token-color-foreground-strong)}.modal-dialog [role=document] table,main table{width:100%;border-collapse:collapse}table.dom-recycling tr{display:flex}table.dom-recycling tr>*{flex:1 1 auto;display:inline-flex;align-items:center}.modal-dialog [role=document] table caption,.modal-dialog [role=document] table thead th,main table caption,main table thead th{text-align:left}.modal-dialog [role=document] table th.actions input,main table th.actions input{display:none}.modal-dialog [role=document] table th.actions,main table th.actions{text-align:right}.modal-dialog [role=document] table td a,main table td a{display:block}.modal-dialog [role=document] table td.no-actions~.actions,main table td.no-actions~.actions{display:none}.modal-dialog [role=document] table td:not(.actions)>:only-child,main table td:not(.actions)>:only-child{overflow:hidden;text-overflow:ellipsis}.modal-dialog [role=document] table td:not(.actions)>*,main table td:not(.actions)>*{white-space:nowrap}.modal-dialog [role=document] table caption,main table caption{margin-bottom:.8em}.modal-dialog [role=document] table td a,.modal-dialog [role=document] table td:not(.actions),.modal-dialog [role=document] table th:not(.actions),main table td a,main table td:not(.actions),main table th:not(.actions){padding-right:.9em}.modal-dialog [role=document] table tbody td em,main table tbody td em{display:block;font-style:normal;font-weight:400;color:var(--token-color-foreground-faint)}table.has-actions tr>.actions,table.with-details tr>.actions{width:60px!important;overflow:visible}table.has-actions tr>.actions>[type=checkbox]+label,table.with-details tr>.actions>[type=checkbox]+label{position:absolute;right:5px}table.consul-metadata-list tbody tr{cursor:default}table.consul-metadata-list tbody tr:hover{box-shadow:none}.modal-dialog [role=document] table th span::after,main table th span::after{color:var(--token-color-foreground-faint);margin-left:4px}.modal-dialog [role=document] table tbody tr,main table tbody tr{cursor:pointer}.modal-dialog [role=document] table td:first-child,main table td:first-child{padding:0}.modal-dialog [role=document] table tbody tr:hover,main table tbody tr:hover{box-shadow:var(--token-elevation-high-box-shadow)}.modal-dialog [role=document] table td.folder::before,main table td.folder::before{background-color:var(--token-color-palette-neutral-300);margin-top:1px;margin-right:5px}@media (max-width:420px){.consul-intention-list tr>:nth-last-child(2),.modal-dialog [role=document] table tr>.actions,main table tr>.actions{display:none}}.voting-status-leader.consul-server-card .name{width:var(--tile-size,3rem);height:var(--tile-size,3rem)}.voting-status-leader.consul-server-card .name::before{display:block;content:"";width:100%;height:100%;border-radius:var(--decor-radius-250);border:var(--decor-border-100);background-image:linear-gradient(135deg,var(--token-color-consul-surface) 0,var(--token-color-consul-border) 100%);border-color:var(--token-color-border-faint)}.voting-status-leader.consul-server-card .name::after{content:"";position:absolute;top:calc(var(--tile-size,3rem)/ 4);left:calc(var(--tile-size,3rem)/ 4);--icon-name:icon-star-fill;--icon-size:icon-700;color:var(--token-color-consul-brand)}table.with-details td:only-child>div>label,table.with-details td>label{border-radius:var(--decor-radius-100);cursor:pointer;min-width:30px;min-height:30px;display:inline-flex;align-items:center;justify-content:center}table.dom-recycling tbody{top:33px!important;width:100%}table.dom-recycling caption~tbody{top:57px!important}table tr>:nth-last-child(2):first-child,table tr>:nth-last-child(2):first-child~*{width:50%}table tr>:nth-last-child(3):first-child,table tr>:nth-last-child(3):first-child~*{width:33.3333333333%}table tr>:nth-last-child(4):first-child,table tr>:nth-last-child(4):first-child~*{width:25%}table tr>:nth-last-child(5):first-child,table tr>:nth-last-child(5):first-child~*{width:20%}table.has-actions tr>:nth-last-child(2):first-child,table.has-actions tr>:nth-last-child(2):first-child~*{width:calc(100% - 60px)}table.has-actions tr>:nth-last-child(3):first-child,table.has-actions tr>:nth-last-child(3):first-child~*{width:calc(50% - 30px)}table.has-actions tr>:nth-last-child(4):first-child,table.has-actions tr>:nth-last-child(4):first-child~*{width:calc(33% - 20px)}table.has-actions tr>:nth-last-child(5):first-child,table.has-actions tr>:nth-last-child(5):first-child~*{width:calc(25% - 15px)}html[data-route^="dc.acls.policies"] [role=dialog] table tr>:not(last-child),html[data-route^="dc.acls.policies"] table tr>:not(last-child),html[data-route^="dc.acls.roles"] [role=dialog] table tr>:not(last-child),html[data-route^="dc.acls.roles"] main table.token-list tr>:not(last-child){width:120px}html[data-route^="dc.acls.policies"] table tr>:last-child,html[data-route^="dc.acls.roles"] [role=dialog] table tr>:last-child,html[data-route^="dc.acls.roles"] main table.token-list tr>:last-child{width:calc(100% - 240px)!important}table.with-details td:only-child{cursor:default;border:0}table.with-details td:only-child>div::before,table.with-details td:only-child>div>div,table.with-details td:only-child>div>label{background-color:var(--token-color-surface-primary)}table.with-details td:only-child>div>label::before{transform:rotate(180deg)}table.with-details td:only-child>div::before{background:var(--token-color-surface-interactive-active);content:"";display:block;height:1px;position:absolute;bottom:-20px;left:10px;width:calc(100% - 20px)}table.with-details tr>.actions{position:relative}table.with-details td:only-child>div>label,table.with-details td>label{pointer-events:auto;position:absolute;top:8px}table.with-details td:only-child>div>label span,table.with-details td>label span{display:none}table.with-details td>label{right:2px}table.with-details tr:nth-child(even) td{height:auto;position:relative;display:table-cell}table.with-details tr:nth-child(even) td>*{display:none}table.with-details td:only-child>div>label{right:11px}table.with-details tr:nth-child(even) td>input:checked+*{display:block}table.with-details td:only-child{overflow:visible;width:100%}table.with-details td:only-child>div{border:1px solid var(--token-color-palette-neutral-300);border-radius:var(--decor-radius-100);box-shadow:var(--token-surface-high-box-shadow);margin-bottom:20px;position:relative;left:-10px;right:-10px;width:calc(100% + 20px);margin-top:-51px;pointer-events:none;padding:10px}table.with-details td:only-child>div::after{content:"";display:block;clear:both}table.with-details td:only-child>div>div{pointer-events:auto;margin-top:36px}.consul-auth-method-binding-list dl,.consul-auth-method-view dl,.consul-auth-method-view section dl{display:flex;flex-wrap:wrap}.consul-auth-method-binding-list dl dd,.consul-auth-method-binding-list dl dt,.consul-auth-method-view dl dd,.consul-auth-method-view dl dt{padding:12px 0;margin:0;border-top:1px solid!important}.consul-auth-method-binding-list dl dt,.consul-auth-method-view dl dt{width:20%;font-weight:var(--typo-weight-bold)}.consul-auth-method-binding-list dl dd,.consul-auth-method-view dl dd{margin-left:auto;width:80%;display:flex}.consul-auth-method-binding-list dl dd>ul li,.consul-auth-method-view dl dd>ul li{display:flex}.consul-auth-method-binding-list dl dd>ul li:not(:last-of-type),.consul-auth-method-view dl dd>ul li:not(:last-of-type){padding-bottom:12px}.consul-auth-method-binding-list dl dt.check+dd,.consul-auth-method-view dl dt.check+dd{padding-top:16px}.consul-auth-method-binding-list dl>dd:last-of-type,.consul-auth-method-binding-list dl>dt:last-of-type,.consul-auth-method-view dl>dd:last-of-type,.consul-auth-method-view dl>dt:last-of-type{border-bottom:1px solid!important;border-color:var(--token-color-palette-neutral-300)!important}.consul-auth-method-binding-list dl dd,.consul-auth-method-binding-list dl dt,.consul-auth-method-view dl dd,.consul-auth-method-view dl dt{border-color:var(--token-color-palette-neutral-300)!important;color:var(--token-color-hashicorp-brand)!important}.consul-auth-method-binding-list dl dd .copy-button button::before,.consul-auth-method-view dl dd .copy-button button::before{background-color:var(--token-color-hashicorp-brand)}.consul-auth-method-binding-list dl dt.type+dd span::before,.consul-auth-method-view dl dt.type+dd span::before{margin-left:4px;background-color:var(--token-color-foreground-faint)}.tooltip-panel dt{cursor:pointer}.tooltip-panel dd>div::before{width:12px;height:12px;background-color:var(--token-color-surface-primary);border-top:1px solid var(--token-color-palette-neutral-300);border-right:1px solid var(--token-color-palette-neutral-300);transform:rotate(-45deg);position:absolute;left:16px;top:-7px}.tooltip-panel,.tooltip-panel dt{display:flex;flex-direction:column}.tooltip-panel dd>div.menu-panel{top:auto;overflow:visible}.tooltip-panel dd{display:none;position:relative;z-index:1;padding-top:10px;margin-bottom:-10px}.tooltip-panel:hover dd{display:block}.tooltip-panel dd>div{width:250px}.app-view>header .title{display:grid;grid-template-columns:1fr auto;grid-template-areas:"title actions";position:relative;z-index:5;padding-bottom:1.4em}.app-view>div form:not(.filter-bar) fieldset{border-bottom:var(--decor-border-200)}.app-view>header h1>em{color:var(--token-color-foreground-faint)}.app-view>header dd>a{color:var(--token-color-hashicorp-brand)}.app-view>div div>dl>dd,[role=contentinfo]{color:var(--token-color-foreground-disabled)}.app-view>div form:not(.filter-bar) fieldset,.app-view>header .title{border-color:var(--token-color-surface-interactive-active)}.app-view>header .title .title-left-container{grid-area:title;display:flex;flex-wrap:wrap;align-items:center;white-space:normal}.app-view>header .title .title-left-container>:first-child{flex-basis:100%}.app-view>header .title .title-left-container>:not(:first-child){margin-right:8px}.app-view>header .actions{grid-area:actions;align-self:end;display:flex;align-items:flex-start;margin-left:auto;margin-top:9px}.app-view>div form:not(.filter-bar) fieldset{padding-bottom:.3em;margin-bottom:2em}[for=toolbar-toggle]{background-position:0 4px;display:inline-block;width:26px;height:26px;cursor:pointer;color:var(--token-color-foreground-action)}#toolbar-toggle{display:none}@media (max-width:849px){.app-view>header .actions{margin-top:9px}}@media (min-width:996px){[for=toolbar-toggle]{display:none}}@media (max-width:995px){.app-view>header h1{display:inline-block}html[data-route$="dc.services.instance.show"] h1{display:block}#toolbar-toggle+*{display:none}#toolbar-toggle:checked+*{display:flex}}.brand-loader{position:absolute;top:50%;margin-top:-26px;left:50%}.app .skip-links{outline:solid var(--token-color-surface-primary);color:var(--token-color-surface-primary);display:flex;flex-direction:column;position:absolute;z-index:10;left:50%;padding:20px;top:-100px;transform:translateX(-50%)}.app .skip-links a,.app .skip-links button{color:inherit}.app .skip-links a,.app .skip-links button,.app .skip-links div{display:block;width:100%;text-align:center;box-sizing:border-box}.app .skip-links:focus-within{top:0}.app .notifications{position:fixed;z-index:100;bottom:2rem;left:1.5rem;pointer-events:none}.app .notifications .app-notification>*{min-width:400px}.app .notifications .app-notification{transition-property:opacity;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;max-width:80%;pointer-events:auto}[role=banner] nav:last-of-type{margin-left:auto}.hashicorp-consul nav .dcs{top:18px}.hashicorp-consul nav .dcs [aria-label]::before{display:none!important}[role=banner] nav:last-of-type [aria-haspopup=menu]~*{position:absolute;right:0;min-width:192px}[role=contentinfo]{position:fixed;z-index:50;width:250px;padding-left:25px;top:calc(100vh - 42px);top:calc(max(100vh,460px) - 42px)}html.has-partitions.has-nspaces .app [role=contentinfo]{top:calc(100vh - 42px);top:calc(max(100vh,640px) - 42px)}[role=banner] nav:first-of-type{z-index:10}[role=banner] nav:first-of-type,[role=contentinfo]{transition-property:left}.app .notifications,main{margin-top:var(--chrome-height,64px);transition-property:margin-left}.app .notifications{transition-property:margin-left,width}@media (min-width:900px){.app>input[id]~main .notifications{width:calc(100% - var(--chrome-width))}.app>input[id]:checked~main .notifications{width:100%}.app>input[id]+header>div>nav:first-of-type,.app>input[id]~footer{left:0}.app>input[id]:checked+header>div>nav:first-of-type,.app>input[id]:checked~footer{left:calc(var(--chrome-width,280px) * -1)}.app>input[id]~main{margin-left:var(--chrome-width,280px)}.app>input[id]:checked~main,.app>input[id]:checked~main .notifications{margin-left:0}}@media (max-width:899px){.app>input[id]~main .notifications{width:100%}.app>input[id]:checked+header>div>nav:first-of-type,.app>input[id]:checked~footer{left:0}.app>input[id]+header>div>nav:first-of-type,.app>input[id]~footer{left:calc(var(--chrome-width,280px) * -1)}.app>input[id]~main,.app>input[id]~main .notifications{margin-left:0}}[role=banner]::before{background-color:var(--token-color-hashicorp-brand);content:"";position:absolute;z-index:-1;left:0;width:100vw}[role=banner]{display:flex;position:fixed;z-index:50;left:0;padding:0 25px;width:calc(100% - 50px);align-items:center}[role=banner],[role=banner]::before{height:var(--chrome-height)}[role=banner]>a{display:block;line-height:0;font-size:0}.hashicorp-consul nav .dcs [aria-expanded]>a,[role=banner] nav:last-of-type [aria-expanded]>a,[role=banner] nav:last-of-type>ul>li>a>a,[role=banner] nav:last-of-type>ul>li>button>a,[role=banner] nav:last-of-type>ul>li>span>a{color:inherit}.hashicorp-consul nav .dcs [aria-expanded]::after,[role=banner] nav:last-of-type [aria-expanded]::after{--icon-name:icon-chevron-down;content:""}.hashicorp-consul nav .dcs [aria-expanded=true][aria-expanded]::after,[role=banner] nav:last-of-type [aria-expanded=true][aria-expanded]::after{transform:scaleY(-100%)}[role=banner] nav:last-of-type .disclosure-menu button+*,[role=banner] nav:last-of-type .disclosure-menu button+*>ul[role=menu],[role=banner] nav:last-of-type .disclosure-menu button+*>ul[role=menu]>li>[role=menuitem]{background-color:var(--token-color-hashicorp-brand);color:var(--token-color-palette-neutral-300)}[role=banner] nav:last-of-type .disclosure-menu button+*>ul[role=menu]>li>[role=menuitem]:hover{background-color:var(--token-color-palette-neutral-600)}.app>input[id]{display:none}.disclosure-menu [aria-expanded]~*>ul>[role=treeitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=menuitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=option],.menu-panel>ul>[role=treeitem],.menu-panel>ul>li>[role=menuitem],.menu-panel>ul>li>[role=option],.more-popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=option],.popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=option],[role=banner] nav:last-of-type>ul,[role=banner]>div,[role=banner]>label,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=option],table.with-details tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]{display:flex}[role=banner]>label::before{--icon-name:icon-menu;--icon-color:var(--token-color-palette-neutral-300);content:"";cursor:pointer}.hashicorp-consul nav .dcs [aria-expanded],[role=banner] nav:last-of-type .popover-menu [type=checkbox]:checked+label>*,[role=banner] nav:last-of-type [aria-expanded],[role=banner] nav:last-of-type>ul>li>.popover-menu>label>button,[role=banner] nav:last-of-type>ul>li>a,[role=banner] nav:last-of-type>ul>li>button,[role=banner] nav:last-of-type>ul>li>span{color:var(--token-color-palette-neutral-300)}[role=banner]>label{align-items:center;height:100%;padding:0 1rem 0 5px}[role=banner]>div{justify-content:space-between;flex-grow:1}[role=banner] nav:last-of-type .disclosure-menu button+*{z-index:400;top:28px!important}.hashicorp-consul nav .dcs [aria-expanded],[role=banner] nav:last-of-type [aria-expanded],[role=banner] nav:last-of-type>ul>li>.popover-menu>label>button,[role=banner] nav:last-of-type>ul>li>a,[role=banner] nav:last-of-type>ul>li>button,[role=banner] nav:last-of-type>ul>li>span{border-radius:var(--decor-radius-200);cursor:pointer;display:block;padding:5px 12px;white-space:nowrap}[role=banner] nav:last-of-type .popover-menu>label{padding-right:5px}[role=banner] nav:last-of-type .popover-menu>label>*{padding-right:4px!important}[role=banner] nav:last-of-type .popover-menu>label>button::after{top:2px}[role=banner] nav:last-of-type>ul>li>span{cursor:default}[role=banner] nav:first-of-type a>a,[role=banner] nav:first-of-type>ul>li>label>a{color:inherit;font-size:inherit}[role=banner] nav:first-of-type [role=separator]{text-transform:uppercase;font-weight:var(--typo-weight-medium)}[role=banner] nav:first-of-type a:focus,[role=banner] nav:first-of-type a:hover,[role=banner] nav:first-of-type>ul>li>label:focus,[role=banner] nav:first-of-type>ul>li>label:hover{text-decoration:underline}.tab-nav li>*,[role=banner] nav:first-of-type>ul>li.is-active>a:focus:not(:active),[role=banner] nav:first-of-type>ul>li.is-active>a:hover:not(:active){text-decoration:none}[role=banner] nav:first-of-type{background-color:var(--token-color-foreground-strong);color:var(--token-color-foreground-faint)}[role=banner] nav:first-of-type li:not([role=separator])>span{color:var(--token-color-palette-neutral-300)}.hashicorp-consul nav .dcs [role=separator],[role=banner] nav:first-of-type [role=separator]{color:var(--token-color-palette-neutral-400);background-color:var(--token-color-foreground-strong)}[role=banner] nav:first-of-type a,[role=banner] nav:first-of-type>ul>li>label{cursor:pointer;border-right:var(--decor-border-400);border-color:transparent;color:var(--token-color-palette-neutral-300)}[role=banner] nav:first-of-type a:focus,[role=banner] nav:first-of-type a:hover,[role=banner] nav:first-of-type>ul>li.is-active>a,[role=banner] nav:first-of-type>ul>li>label:focus,[role=banner] nav:first-of-type>ul>li>label:hover,[role=banner] nav:first-of-type>ul>li[aria-label]{color:var(--token-color-palette-neutral-0)}[role=banner] nav:first-of-type>ul>li.is-active>a{background-color:var(--token-color-palette-neutral-500);border-color:var(--token-color-palette-neutral-0)}[role=banner] nav:first-of-type [aria-label]::before{color:var(--token-color-palette-neutral-400);content:attr(aria-label);display:block;margin-top:-.5rem;margin-bottom:.5rem}.hashicorp-consul nav li.nspaces .disclosure-menu>button,.hashicorp-consul nav li.partitions .disclosure-menu>button{border:var(--decor-border-100);border-color:var(--token-color-foreground-faint);border-radius:var(--decor-radius-100);font-weight:inherit;background-color:var(--token-color-foreground-strong);color:var(--token-color-palette-neutral-200)}.hashicorp-consul nav li.nspaces .disclosure-menu>button:focus,.hashicorp-consul nav li.nspaces .disclosure-menu>button:hover,.hashicorp-consul nav li.partitions .disclosure-menu>button:focus,.hashicorp-consul nav li.partitions .disclosure-menu>button:hover,[role=banner] nav:first-of-type ul[role=menu] li a[role=menuitem]{color:var(--token-color-palette-neutral-300);background-color:var(--token-color-foreground-strong)}[role=banner] nav:first-of-type ul[role=menu] li a[role=menuitem]:hover{background-color:var(--token-color-palette-neutral-600)}.hashicorp-consul nav li.nspaces .disclosure-menu>button[aria-expanded=true],.hashicorp-consul nav li.partitions .disclosure-menu>button[aria-expanded=true]{border-bottom-left-radius:var(--decor-radius-000);border-bottom-right-radius:var(--decor-radius-000)}.disclosure-menu [aria-expanded]~* [role=banner] nav:first-of-type [role=separator],.disclosure-menu [aria-expanded]~* [role=banner] nav:last-of-type [role=separator],.disclosure-menu [role=banner] nav:first-of-type [aria-expanded]~*,.disclosure-menu [role=banner] nav:last-of-type [aria-expanded]~*,.menu-panel [role=banner] nav:first-of-type [role=separator],.menu-panel [role=banner] nav:last-of-type [role=separator],.more-popover-menu>[type=checkbox]+label+div [role=banner] nav:first-of-type [role=separator],.more-popover-menu>[type=checkbox]+label+div [role=banner] nav:last-of-type [role=separator],.popover-menu>[type=checkbox]+label+div [role=banner] nav:first-of-type [role=separator],.popover-menu>[type=checkbox]+label+div [role=banner] nav:last-of-type [role=separator],[role=banner] nav:first-of-type .consul-server-card,[role=banner] nav:first-of-type .disclosure-menu [aria-expanded]~*,[role=banner] nav:first-of-type .disclosure-menu [aria-expanded]~* [role=separator],[role=banner] nav:first-of-type .menu-panel,[role=banner] nav:first-of-type .menu-panel [role=separator],[role=banner] nav:first-of-type .more-popover-menu>[type=checkbox]+label+div,[role=banner] nav:first-of-type .more-popover-menu>[type=checkbox]+label+div [role=separator],[role=banner] nav:first-of-type .popover-menu>[type=checkbox]+label+div,[role=banner] nav:first-of-type .popover-menu>[type=checkbox]+label+div [role=separator],[role=banner] nav:first-of-type section[data-route="dc.show.license"] aside,[role=banner] nav:first-of-type section[data-route="dc.show.serverstatus"] .server-failure-tolerance,[role=banner] nav:first-of-type table.has-actions tr>.actions>[type=checkbox]+label+div,[role=banner] nav:first-of-type table.has-actions tr>.actions>[type=checkbox]+label+div [role=separator],[role=banner] nav:first-of-type table.with-details tr>.actions>[type=checkbox]+label+div,[role=banner] nav:first-of-type table.with-details tr>.actions>[type=checkbox]+label+div [role=separator],[role=banner] nav:last-of-type .consul-server-card,[role=banner] nav:last-of-type .disclosure-menu [aria-expanded]~*,[role=banner] nav:last-of-type .disclosure-menu [aria-expanded]~* [role=separator],[role=banner] nav:last-of-type .menu-panel,[role=banner] nav:last-of-type .menu-panel [role=separator],[role=banner] nav:last-of-type .more-popover-menu>[type=checkbox]+label+div,[role=banner] nav:last-of-type .more-popover-menu>[type=checkbox]+label+div [role=separator],[role=banner] nav:last-of-type .popover-menu>[type=checkbox]+label+div,[role=banner] nav:last-of-type .popover-menu>[type=checkbox]+label+div [role=separator],[role=banner] nav:last-of-type section[data-route="dc.show.license"] aside,[role=banner] nav:last-of-type section[data-route="dc.show.serverstatus"] .server-failure-tolerance,[role=banner] nav:last-of-type table.has-actions tr>.actions>[type=checkbox]+label+div,[role=banner] nav:last-of-type table.has-actions tr>.actions>[type=checkbox]+label+div [role=separator],[role=banner] nav:last-of-type table.with-details tr>.actions>[type=checkbox]+label+div,[role=banner] nav:last-of-type table.with-details tr>.actions>[type=checkbox]+label+div [role=separator],section[data-route="dc.show.license"] [role=banner] nav:first-of-type aside,section[data-route="dc.show.license"] [role=banner] nav:last-of-type aside,section[data-route="dc.show.serverstatus"] [role=banner] nav:first-of-type .server-failure-tolerance,section[data-route="dc.show.serverstatus"] [role=banner] nav:last-of-type .server-failure-tolerance,table.has-actions [role=banner] nav:first-of-type tr>.actions>[type=checkbox]+label+div,table.has-actions [role=banner] nav:last-of-type tr>.actions>[type=checkbox]+label+div,table.has-actions tr>.actions>[type=checkbox]+label+div [role=banner] nav:first-of-type [role=separator],table.has-actions tr>.actions>[type=checkbox]+label+div [role=banner] nav:last-of-type [role=separator],table.with-details [role=banner] nav:first-of-type tr>.actions>[type=checkbox]+label+div,table.with-details [role=banner] nav:last-of-type tr>.actions>[type=checkbox]+label+div,table.with-details tr>.actions>[type=checkbox]+label+div [role=banner] nav:first-of-type [role=separator],table.with-details tr>.actions>[type=checkbox]+label+div [role=banner] nav:last-of-type [role=separator]{border-color:var(--token-color-foreground-faint)}.hashicorp-consul nav li.nspaces .disclosure-menu>button::after,.hashicorp-consul nav li.partitions .disclosure-menu>button::after{width:16px;height:16px;position:relative;float:right}.hashicorp-consul nav li.nspaces .disclosure-menu button+*,.hashicorp-consul nav li.partitions .disclosure-menu button+*{border-top-left-radius:var(--decor-radius-000);border-top-right-radius:var(--decor-radius-000);border-top:var(--decor-border-000);color:var(--token-color-palette-neutral-300);background-color:var(--token-color-foreground-strong)}.hashicorp-consul nav .dcs .dcs-message,.hashicorp-consul nav .dcs ul[role=menu]{background-color:var(--token-color-hashicorp-brand)}[role=banner] nav:first-of-type{position:absolute;left:0;top:var(--chrome-height,47px);width:var(--chrome-width,280px);height:calc(100vh - var(--chrome-height,47px) - 35px);padding-top:35px;overflow:auto}[role=banner] nav:first-of-type li.nspaces,[role=banner] nav:first-of-type li.partition,[role=banner] nav:first-of-type li.partitions{margin-bottom:25px;padding:0 26px}[role=banner] nav:first-of-type li.dcs{padding:0 18px}[role=banner] nav:first-of-type [role=menuitem]{justify-content:flex-start!important}[role=banner] nav:first-of-type [role=menuitem] span{margin-left:.5rem}[role=banner] nav:first-of-type [role=separator],[role=banner] nav:first-of-type a,[role=banner] nav:first-of-type li:not([role=separator])>span,[role=banner] nav:first-of-type>ul>li>label{display:block;padding:7px 25px}[role=banner] nav:first-of-type>ul>[role=separator]{margin-top:.7rem;padding-bottom:0}.hashicorp-consul nav li.nspaces .disclosure,.hashicorp-consul nav li.partitions .disclosure{position:relative}.hashicorp-consul nav li.nspaces .disclosure-menu>button,.hashicorp-consul nav li.partitions .disclosure-menu>button{width:100%;text-align:left;padding:10px}.hashicorp-consul nav li.nspaces .disclosure-menu button+*,.hashicorp-consul nav li.partitions .disclosure-menu button+*{position:absolute;z-index:1;width:calc(100% - 2px)}.hashicorp-consul nav .dcs{visibility:visible;position:fixed;z-index:10;left:100px}.hashicorp-consul nav .dcs .dcs-message{padding:8px 12px;border-bottom:1px solid var(--token-color-foreground-disabled);max-width:-webkit-fit-content;max-width:-moz-fit-content;max-width:fit-content;color:var(--token-color-palette-neutral-300)}.hashicorp-consul nav .dcs .dc-name{color:var(--token-color-foreground-faint);padding:3.25px 0;font-weight:var(--typo-weight-semibold)}.hashicorp-consul nav .dcs .dc-name span{margin-left:1rem;background-color:var(--token-color-palette-neutral-300);color:var(--token-color-hashicorp-brand)}.hashicorp-consul nav li.dcs [aria-expanded]~*{min-width:250px;max-height:560px;--paged-row-height:43px}.hashicorp-consul nav li.nspaces [aria-expanded]~*,.hashicorp-consul nav li.partitions [aria-expanded]~*{max-height:360px;--paged-row-height:43px}.hashicorp-consul [role=banner] a svg{fill:var(--token-color-consul-brand)}.hashicorp-consul .acls-separator span{color:var(--token-color-foreground-critical);display:inline-block;position:relative;top:2px;margin-left:2px}.disclosure-menu [aria-expanded]~*>div+ul,.menu-panel>div+ul,.more-popover-menu>[type=checkbox]+label+div>div+ul,.popover-menu>[type=checkbox]+label+div>div+ul,table.has-actions tr>.actions>[type=checkbox]+label+div>div+ul,table.with-details tr>.actions>[type=checkbox]+label+div>div+ul{border-top:var(--decor-border-100);border-color:var(--token-form--base-border-color-default)}.disclosure-menu [aria-expanded]~* [role=separator]:first-child:not(:empty),.menu-panel [role=separator]:first-child:not(:empty),.more-popover-menu>[type=checkbox]+label+div [role=separator]:first-child:not(:empty),.popover-menu>[type=checkbox]+label+div [role=separator]:first-child:not(:empty),table.has-actions tr>.actions>[type=checkbox]+label+div [role=separator]:first-child:not(:empty),table.with-details tr>.actions>[type=checkbox]+label+div [role=separator]:first-child:not(:empty){border:none}.disclosure-menu [aria-expanded]~* [role=separator],.menu-panel [role=separator],.more-popover-menu>[type=checkbox]+label+div [role=separator],.popover-menu>[type=checkbox]+label+div [role=separator],table.has-actions tr>.actions>[type=checkbox]+label+div [role=separator],table.with-details tr>.actions>[type=checkbox]+label+div [role=separator]{text-transform:uppercase;font-weight:var(--typo-weight-medium);color:var(--token-color-foreground-faint)}.disclosure-menu [aria-expanded]~*>ul>li,.menu-panel>ul>li,.more-popover-menu>[type=checkbox]+label+div>ul>li,.popover-menu>[type=checkbox]+label+div>ul>li,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li{list-style-type:none}.disclosure-menu [aria-expanded]~*>ul .informed-action,.menu-panel>ul .informed-action,.more-popover-menu>[type=checkbox]+label+div>ul .informed-action,.popover-menu>[type=checkbox]+label+div>ul .informed-action,table.has-actions tr>.actions>[type=checkbox]+label+div>ul .informed-action,table.with-details tr>.actions>[type=checkbox]+label+div>ul .informed-action{border:0!important}.disclosure-menu [aria-expanded]~*>div,.menu-panel>div,.more-popover-menu>[type=checkbox]+label+div>div,.popover-menu>[type=checkbox]+label+div>div,table.has-actions tr>.actions>[type=checkbox]+label+div>div,table.with-details tr>.actions>[type=checkbox]+label+div>div{padding:.625rem var(--padding-x);white-space:normal;max-width:-webkit-fit-content;max-width:-moz-fit-content;max-width:fit-content}@supports not ((max-width:-webkit-fit-content) or (max-width:-moz-fit-content) or (max-width:fit-content)){.disclosure-menu [aria-expanded]~*>div,.menu-panel>div,.more-popover-menu>[type=checkbox]+label+div>div,.popover-menu>[type=checkbox]+label+div>div,table.has-actions tr>.actions>[type=checkbox]+label+div>div,table.with-details tr>.actions>[type=checkbox]+label+div>div{max-width:200px}}.disclosure-menu [aria-expanded]~*>div::before,.menu-panel>div::before,.more-popover-menu>[type=checkbox]+label+div>div::before,.popover-menu>[type=checkbox]+label+div>div::before,table.has-actions tr>.actions>[type=checkbox]+label+div>div::before,table.with-details tr>.actions>[type=checkbox]+label+div>div::before{position:absolute;left:15px;top:calc(10px + .1em)}.disclosure-menu [aria-expanded]~*>ul>[role=treeitem]+*,.disclosure-menu [aria-expanded]~*>ul>li>[role=menuitem]+*,.disclosure-menu [aria-expanded]~*>ul>li>[role=option]+*,.menu-panel-deprecated>ul>li>div[role=menu],.menu-panel>ul>[role=treeitem]+*,.menu-panel>ul>li>[role=menuitem]+*,.menu-panel>ul>li>[role=option]+*,.more-popover-menu>[type=checkbox]+label+div>ul>[role=treeitem]+*,.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem]+*,.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=option]+*,.popover-menu>[type=checkbox]+label+div>ul>[role=treeitem]+*,.popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem]+*,.popover-menu>[type=checkbox]+label+div>ul>li>[role=option]+*,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem]+*,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem]+*,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]+*,table.with-details tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem]+*,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem]+*,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]+*{position:absolute;top:0;left:calc(100% + 10px)}.disclosure-menu [aria-expanded]~*>ul,.menu-panel>ul,.more-popover-menu>[type=checkbox]+label+div>ul,.popover-menu>[type=checkbox]+label+div>ul,table.has-actions tr>.actions>[type=checkbox]+label+div>ul,table.with-details tr>.actions>[type=checkbox]+label+div>ul{margin:0;padding:calc(var(--padding-y) - .625rem) 0;transition:transform 150ms}.disclosure-menu [aria-expanded]~*>ul,.disclosure-menu [aria-expanded]~*>ul>li,.disclosure-menu [aria-expanded]~*>ul>li>*,.menu-panel>ul,.menu-panel>ul>li,.menu-panel>ul>li>*,.more-popover-menu>[type=checkbox]+label+div>ul,.more-popover-menu>[type=checkbox]+label+div>ul>li,.more-popover-menu>[type=checkbox]+label+div>ul>li>*,.popover-menu>[type=checkbox]+label+div>ul,.popover-menu>[type=checkbox]+label+div>ul>li,.popover-menu>[type=checkbox]+label+div>ul>li>*,table.has-actions tr>.actions>[type=checkbox]+label+div>ul,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>*,table.with-details tr>.actions>[type=checkbox]+label+div>ul,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>*{width:100%}.disclosure-menu [aria-expanded]~*>ul>[role=treeitem],.disclosure-menu [aria-expanded]~*>ul>li,.disclosure-menu [aria-expanded]~*>ul>li>[role=menuitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=option],.menu-panel>ul>[role=treeitem],.menu-panel>ul>li,.menu-panel>ul>li>[role=menuitem],.menu-panel>ul>li>[role=option],.more-popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.more-popover-menu>[type=checkbox]+label+div>ul>li,.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=option],.popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.popover-menu>[type=checkbox]+label+div>ul>li,.popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=option],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=option],table.with-details tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]{text-align:left}.hashicorp-consul nav .dcs li.is-local span,.hashicorp-consul nav .dcs li.is-primary span{color:var(--token-color-surface-primary);background-color:var(--token-color-foreground-faint);padding:0 8px;margin-left:.5rem}.disclosure-menu [aria-expanded]~*>ul>[role=treeitem]::after,.disclosure-menu [aria-expanded]~*>ul>li>[role=menuitem]::after,.disclosure-menu [aria-expanded]~*>ul>li>[role=option]::after,.menu-panel>ul>[role=treeitem]::after,.menu-panel>ul>li>[role=menuitem]::after,.menu-panel>ul>li>[role=option]::after,.more-popover-menu>[type=checkbox]+label+div>ul>[role=treeitem]::after,.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem]::after,.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=option]::after,.popover-menu>[type=checkbox]+label+div>ul>[role=treeitem]::after,.popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem]::after,.popover-menu>[type=checkbox]+label+div>ul>li>[role=option]::after,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem]::after,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem]::after,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]::after,table.with-details tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem]::after,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem]::after,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]::after{margin-left:auto;padding-right:var(--padding-x);transform:translate(calc(var(--padding-x)/ 2),0)}.disclosure-menu [aria-expanded]~* [role=separator],.menu-panel [role=separator],.more-popover-menu>[type=checkbox]+label+div [role=separator],.popover-menu>[type=checkbox]+label+div [role=separator],table.has-actions tr>.actions>[type=checkbox]+label+div [role=separator],table.with-details tr>.actions>[type=checkbox]+label+div [role=separator]{padding-top:.375rem}.disclosure-menu [aria-expanded]~* [role=separator]:not(:first-child),.menu-panel [role=separator]:not(:first-child),.more-popover-menu>[type=checkbox]+label+div [role=separator]:not(:first-child),.popover-menu>[type=checkbox]+label+div [role=separator]:not(:first-child),table.has-actions tr>.actions>[type=checkbox]+label+div [role=separator]:not(:first-child),table.with-details tr>.actions>[type=checkbox]+label+div [role=separator]:not(:first-child){margin-top:.275rem}.disclosure-menu [aria-expanded]~* [role=separator]:not(:empty),.menu-panel [role=separator]:not(:empty),.more-popover-menu>[type=checkbox]+label+div [role=separator]:not(:empty),.popover-menu>[type=checkbox]+label+div [role=separator]:not(:empty),table.has-actions tr>.actions>[type=checkbox]+label+div [role=separator]:not(:empty),table.with-details tr>.actions>[type=checkbox]+label+div [role=separator]:not(:empty){padding-left:var(--padding-x);padding-right:var(--padding-x);padding-bottom:.125rem}.disclosure-menu [aria-expanded]~.menu-panel-confirming,.menu-panel-confirming.menu-panel,.more-popover-menu>[type=checkbox]+label+div.menu-panel-confirming,.popover-menu>[type=checkbox]+label+div.menu-panel-confirming,table.has-actions tr>.actions>[type=checkbox]+label+div.menu-panel-confirming,table.with-details tr>.actions>[type=checkbox]+label+div.menu-panel-confirming{overflow:hidden}.disclosure-menu [aria-expanded]~.menu-panel-confirming>ul,.menu-panel-confirming.menu-panel>ul,.more-popover-menu>[type=checkbox]+label+div.menu-panel-confirming>ul,.popover-menu>[type=checkbox]+label+div.menu-panel-confirming>ul,table.has-actions tr>.actions>[type=checkbox]+label+div.menu-panel-confirming>ul,table.with-details tr>.actions>[type=checkbox]+label+div.menu-panel-confirming>ul{transform:translateX(calc(-100% - 10px))}.disclosure-menu [aria-expanded]~*,.menu-panel,.more-popover-menu>[type=checkbox]+label+div,.popover-menu>[type=checkbox]+label+div,table.has-actions tr>.actions>[type=checkbox]+label+div,table.with-details tr>.actions>[type=checkbox]+label+div{overflow:hidden}.menu-panel-deprecated{position:absolute;transition:max-height 150ms;transition:min-height 150ms,max-height 150ms;min-height:0}.menu-panel-deprecated [type=checkbox]{display:none}.menu-panel-deprecated:not(.confirmation) [type=checkbox]~*{transition:transform 150ms}.confirmation.menu-panel-deprecated [role=menu]{min-height:205px!important}.menu-panel-deprecated [type=checkbox]:checked~*{transform:translateX(calc(-100% - 10px));min-height:143px;max-height:143px}.menu-panel-deprecated [id$="-"]:first-child:checked~ul label[for$="-"] * [role=menu],.menu-panel-deprecated [id$="-"]:first-child:checked~ul>li>[role=menu]{display:block}.menu-panel-deprecated>ul>li>:not(div[role=menu]),.tippy-box{position:relative}.menu-panel-deprecated:not(.left){right:0!important;left:auto!important}.left.menu-panel-deprecated{left:0}.menu-panel-deprecated:not(.above){top:28px}.above.menu-panel-deprecated{bottom:42px}.consul-upstream-instance-list dl.local-bind-socket-mode dt::after{display:inline;content:var(--horizontal-kv-list-key-separator)}.consul-bucket-list,.consul-exposed-path-list>ul>li>.detail dl,.consul-instance-checks,.consul-lock-session-list dl,.consul-lock-session-list ul>li:not(:first-child)>.detail dl,.consul-upstream-instance-list dl,.consul-upstream-instance-list li>.detail dl,.list-collection>ul>li:not(:first-child)>.detail dl,.tag-list,section[data-route="dc.show.license"] .validity dl,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl,td.tags{display:inline-flex;flex-wrap:nowrap;align-items:center}.consul-bucket-list:empty,.consul-exposed-path-list>ul>li>.detail dl:empty,.consul-instance-checks:empty,.consul-lock-session-list dl:empty,.consul-lock-session-list ul>li:not(:first-child)>.detail dl:empty,.consul-upstream-instance-list dl:empty,.list-collection>ul>li:not(:first-child)>.detail dl:empty,.tag-list:empty,section[data-route="dc.show.license"] .validity dl:empty,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:empty,td.tags:empty{display:none}.consul-bucket-list>*>*,.consul-exposed-path-list>ul>li>.detail dl>*>*,.consul-instance-checks>*>*,.consul-lock-session-list dl>*>*,.consul-lock-session-list ul>li:not(:first-child)>.detail dl>*>*,.consul-upstream-instance-list dl>*>*,.consul-upstream-instance-list li>.detail dl>*>*,.list-collection>ul>li:not(:first-child)>.detail dl>*>*,.tag-list>*>*,section[data-route="dc.show.license"] .validity dl>*>*,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl>*>*,td.tags>*>*{display:inline-block}.consul-bucket-list>*,.consul-exposed-path-list>ul>li>.detail dl>*,.consul-instance-checks>*,.consul-lock-session-list dl>*,.consul-lock-session-list ul>li:not(:first-child)>.detail dl>*,.consul-upstream-instance-list dl>*,.consul-upstream-instance-list li>.detail dl>*,.list-collection>ul>li:not(:first-child)>.detail dl>*,.tag-list>*,section[data-route="dc.show.license"] .validity dl>*,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl>*,td.tags>*{white-space:nowrap}.consul-bucket-list>dd,.consul-exposed-path-list>ul>li>.detail dl>dd,.consul-instance-checks>dd,.consul-lock-session-list dl>dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl>dd,.consul-upstream-instance-list dl>dd,.consul-upstream-instance-list li>.detail dl>dd,.list-collection>ul>li:not(:first-child)>.detail dl>dd,.tag-list>dd,section[data-route="dc.show.license"] .validity dl>dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl>dd,td.tags>dd{flex-wrap:wrap}.consul-upstream-instance-list dl.local-bind-socket-mode dt{display:inline-flex;min-width:18px;overflow:hidden}.consul-lock-session-list .checks dd,.discovery-chain .resolver-card ol,.filter-bar,.filter-bar>div,.modal-dialog,.tag-list dd,td.tags dd{display:flex}.consul-bucket-list .consul-exposed-path-list>ul>li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-bucket-list .consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-bucket-list .consul-upstream-instance-list dl.local-bind-address dd+dt+dd,.consul-bucket-list .consul-upstream-instance-list dl.local-bind-socket-path dd+dt+dd,.consul-bucket-list .consul-upstream-instance-list li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-bucket-list .list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-bucket-list .tag-list:not([class]) dd+dt:not([class])+dd,.consul-bucket-list dd+dt,.consul-bucket-list td.tags:not([class]) dd+dt:not([class])+dd,.consul-bucket-list+.consul-bucket-list:not(:first-of-type),.consul-bucket-list+.consul-instance-checks:not(:first-of-type),.consul-bucket-list+.tag-list:not(:first-of-type),.consul-bucket-list+td.tags:not(:first-of-type),.consul-bucket-list:not([class]) .consul-exposed-path-list>ul>li>.detail dl dd+dt:not([class])+dd,.consul-bucket-list:not([class]) .consul-lock-session-list ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.consul-bucket-list:not([class]) .consul-upstream-instance-list li>.detail dl dd+dt:not([class])+dd,.consul-bucket-list:not([class]) .list-collection>ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.consul-bucket-list:not([class]) .tag-list dd+dt:not([class])+dd,.consul-bucket-list:not([class]) dd+dt:not([class])+dd,.consul-bucket-list:not([class]) td.tags dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail .consul-bucket-list+dl:not(:first-of-type),.consul-exposed-path-list>ul>li>.detail .consul-instance-checks+dl:not(:first-of-type),.consul-exposed-path-list>ul>li>.detail .consul-lock-session-list dl+dl:not(:first-of-type),.consul-exposed-path-list>ul>li>.detail .consul-upstream-instance-list dl+dl:not(:first-of-type),.consul-exposed-path-list>ul>li>.detail .consul-upstream-instance-list dl.local-bind-address dd+dt+dd,.consul-exposed-path-list>ul>li>.detail .consul-upstream-instance-list dl.local-bind-socket-path dd+dt+dd,.consul-exposed-path-list>ul>li>.detail .list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail .tag-list+dl:not(:first-of-type),.consul-exposed-path-list>ul>li>.detail dl .consul-bucket-list:not([class]) dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl .consul-instance-checks:not([class]) dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl .consul-lock-session-list dl:not([class]) dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl .consul-upstream-instance-list dl:not([class]) dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl .tag-list:not([class]) dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl dd+dt,.consul-exposed-path-list>ul>li>.detail dl section[data-route="dc.show.license"] .validity dl:not([class]) dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl td.tags:not([class]) dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl+.consul-bucket-list:not(:first-of-type),.consul-exposed-path-list>ul>li>.detail dl+.consul-instance-checks:not(:first-of-type),.consul-exposed-path-list>ul>li>.detail dl+.tag-list:not(:first-of-type),.consul-exposed-path-list>ul>li>.detail dl+dl:not(:first-of-type),.consul-exposed-path-list>ul>li>.detail dl+td.tags:not(:first-of-type),.consul-exposed-path-list>ul>li>.detail dl:not([class]) .consul-bucket-list dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl:not([class]) .consul-instance-checks dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl:not([class]) .consul-lock-session-list dl dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl:not([class]) .consul-upstream-instance-list dl dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl:not([class]) .tag-list dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl:not([class]) section[data-route="dc.show.license"] .validity dl dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl:not([class]) section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl:not([class]) td.tags dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail section[data-route="dc.show.license"] .validity dl+dl:not(:first-of-type),.consul-exposed-path-list>ul>li>.detail section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl+dl:not(:first-of-type),.consul-exposed-path-list>ul>li>.detail td.tags+dl:not(:first-of-type),.consul-instance-checks .consul-exposed-path-list>ul>li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-instance-checks .consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-instance-checks .consul-upstream-instance-list dl.local-bind-address dd+dt+dd,.consul-instance-checks .consul-upstream-instance-list dl.local-bind-socket-path dd+dt+dd,.consul-instance-checks .consul-upstream-instance-list li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-instance-checks .list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-instance-checks .tag-list:not([class]) dd+dt:not([class])+dd,.consul-instance-checks dd+dt,.consul-instance-checks td.tags:not([class]) dd+dt:not([class])+dd,.consul-instance-checks+.consul-bucket-list:not(:first-of-type),.consul-instance-checks+.consul-instance-checks:not(:first-of-type),.consul-instance-checks+.tag-list:not(:first-of-type),.consul-instance-checks+td.tags:not(:first-of-type),.consul-instance-checks:not([class]) .consul-exposed-path-list>ul>li>.detail dl dd+dt:not([class])+dd,.consul-instance-checks:not([class]) .consul-lock-session-list ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.consul-instance-checks:not([class]) .consul-upstream-instance-list li>.detail dl dd+dt:not([class])+dd,.consul-instance-checks:not([class]) .list-collection>ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.consul-instance-checks:not([class]) .tag-list dd+dt:not([class])+dd,.consul-instance-checks:not([class]) dd+dt:not([class])+dd,.consul-instance-checks:not([class]) td.tags dd+dt:not([class])+dd,.consul-lock-session-list .consul-bucket-list ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list .consul-bucket-list+dl:not(:first-of-type),.consul-lock-session-list .consul-bucket-list:not([class]) ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.consul-lock-session-list .consul-exposed-path-list>ul>li>.detail dl dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list .consul-exposed-path-list>ul>li>.detail dl+dl:not(:first-of-type),.consul-lock-session-list .consul-exposed-path-list>ul>li>.detail dl:not([class]) dl dd+dt:not([class])+dd,.consul-lock-session-list .consul-instance-checks ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list .consul-instance-checks+dl:not(:first-of-type),.consul-lock-session-list .consul-instance-checks:not([class]) ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.consul-lock-session-list .consul-upstream-instance-list dl li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list .consul-upstream-instance-list dl ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list .consul-upstream-instance-list dl+dl:not(:first-of-type),.consul-lock-session-list .consul-upstream-instance-list dl.local-bind-address dl dd+dt+dd,.consul-lock-session-list .consul-upstream-instance-list dl.local-bind-socket-path dl dd+dt+dd,.consul-lock-session-list .consul-upstream-instance-list dl:not([class]) li>.detail dl dd+dt:not([class])+dd,.consul-lock-session-list .consul-upstream-instance-list dl:not([class]) ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.consul-lock-session-list .consul-upstream-instance-list li>.detail dl dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list .consul-upstream-instance-list li>.detail dl+dl:not(:first-of-type),.consul-lock-session-list .consul-upstream-instance-list li>.detail dl:not([class]) dl dd+dt:not([class])+dd,.consul-lock-session-list .consul-upstream-instance-list ul>li:not(:first-child)>.detail dl dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list .consul-upstream-instance-list ul>li:not(:first-child)>.detail dl+dl:not(:first-of-type),.consul-lock-session-list .consul-upstream-instance-list ul>li:not(:first-child)>.detail dl.local-bind-address dd+dt+dd,.consul-lock-session-list .consul-upstream-instance-list ul>li:not(:first-child)>.detail dl.local-bind-socket-path dd+dt+dd,.consul-lock-session-list .consul-upstream-instance-list ul>li:not(:first-child)>.detail dl:not([class]) dl dd+dt:not([class])+dd,.consul-lock-session-list .list-collection>ul>li:not(:first-child)>.detail dl dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list .list-collection>ul>li:not(:first-child)>.detail dl+dl:not(:first-of-type),.consul-lock-session-list .list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dl dd+dt:not([class])+dd,.consul-lock-session-list .list-collection>ul>li:not(:first-child)>.detail ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list .tag-list dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list .tag-list ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list .tag-list+dl:not(:first-of-type),.consul-lock-session-list .tag-list:not([class]) dl dd+dt:not([class])+dd,.consul-lock-session-list .tag-list:not([class]) ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.consul-lock-session-list dl .consul-exposed-path-list>ul>li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list dl .consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list dl .consul-upstream-instance-list dl.local-bind-address dd+dt+dd,.consul-lock-session-list dl .consul-upstream-instance-list dl.local-bind-socket-path dd+dt+dd,.consul-lock-session-list dl .consul-upstream-instance-list li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list dl .list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list dl .tag-list:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list dl dd+dt,.consul-lock-session-list dl td.tags:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list dl ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list dl+.consul-bucket-list:not(:first-of-type),.consul-lock-session-list dl+.consul-instance-checks:not(:first-of-type),.consul-lock-session-list dl+.tag-list:not(:first-of-type),.consul-lock-session-list dl+dl:not(:first-of-type),.consul-lock-session-list dl+td.tags:not(:first-of-type),.consul-lock-session-list dl:not([class]) .consul-exposed-path-list>ul>li>.detail dl dd+dt:not([class])+dd,.consul-lock-session-list dl:not([class]) .consul-lock-session-list ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.consul-lock-session-list dl:not([class]) .consul-upstream-instance-list li>.detail dl dd+dt:not([class])+dd,.consul-lock-session-list dl:not([class]) .list-collection>ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.consul-lock-session-list dl:not([class]) .tag-list dd+dt:not([class])+dd,.consul-lock-session-list dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list dl:not([class]) td.tags dd+dt:not([class])+dd,.consul-lock-session-list dl:not([class]) ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.consul-lock-session-list section[data-route="dc.show.license"] .validity dl ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list section[data-route="dc.show.license"] .validity dl+dl:not(:first-of-type),.consul-lock-session-list section[data-route="dc.show.license"] .validity dl:not([class]) ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.consul-lock-session-list section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl+dl:not(:first-of-type),.consul-lock-session-list section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.consul-lock-session-list td.tags dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list td.tags ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list td.tags+dl:not(:first-of-type),.consul-lock-session-list td.tags:not([class]) dl dd+dt:not([class])+dd,.consul-lock-session-list td.tags:not([class]) ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail .consul-bucket-list+dl:not(:first-of-type),.consul-lock-session-list ul>li:not(:first-child)>.detail .consul-instance-checks+dl:not(:first-of-type),.consul-lock-session-list ul>li:not(:first-child)>.detail .consul-upstream-instance-list dl+dl:not(:first-of-type),.consul-lock-session-list ul>li:not(:first-child)>.detail .consul-upstream-instance-list dl.local-bind-address dd+dt+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail .consul-upstream-instance-list dl.local-bind-socket-path dd+dt+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail .list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail .tag-list+dl:not(:first-of-type),.consul-lock-session-list ul>li:not(:first-child)>.detail dl .consul-bucket-list:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl .consul-instance-checks:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl .consul-upstream-instance-list dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl .tag-list:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl dd+dt,.consul-lock-session-list ul>li:not(:first-child)>.detail dl dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl section[data-route="dc.show.license"] .validity dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl td.tags:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl+.consul-bucket-list:not(:first-of-type),.consul-lock-session-list ul>li:not(:first-child)>.detail dl+.consul-instance-checks:not(:first-of-type),.consul-lock-session-list ul>li:not(:first-child)>.detail dl+.tag-list:not(:first-of-type),.consul-lock-session-list ul>li:not(:first-child)>.detail dl+dl:not(:first-of-type),.consul-lock-session-list ul>li:not(:first-child)>.detail dl+td.tags:not(:first-of-type),.consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) .consul-bucket-list dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) .consul-instance-checks dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) .consul-upstream-instance-list dl dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) .tag-list dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) dl dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) section[data-route="dc.show.license"] .validity dl dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) td.tags dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail section[data-route="dc.show.license"] .validity dl+dl:not(:first-of-type),.consul-lock-session-list ul>li:not(:first-child)>.detail section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl+dl:not(:first-of-type),.consul-lock-session-list ul>li:not(:first-child)>.detail td.tags+dl:not(:first-of-type),.consul-upstream-instance-list .consul-bucket-list li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list .consul-bucket-list+dl:not(:first-of-type),.consul-upstream-instance-list .consul-bucket-list:not([class]) li>.detail dl dd+dt:not([class])+dd,.consul-upstream-instance-list .consul-exposed-path-list>ul>li>.detail dl dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list .consul-exposed-path-list>ul>li>.detail dl+dl:not(:first-of-type),.consul-upstream-instance-list .consul-exposed-path-list>ul>li>.detail dl.local-bind-address dd+dt+dd,.consul-upstream-instance-list .consul-exposed-path-list>ul>li>.detail dl.local-bind-socket-path dd+dt+dd,.consul-upstream-instance-list .consul-exposed-path-list>ul>li>.detail dl:not([class]) dl dd+dt:not([class])+dd,.consul-upstream-instance-list .consul-instance-checks li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list .consul-instance-checks+dl:not(:first-of-type),.consul-upstream-instance-list .consul-instance-checks:not([class]) li>.detail dl dd+dt:not([class])+dd,.consul-upstream-instance-list .consul-lock-session-list dl li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list .consul-lock-session-list dl+dl:not(:first-of-type),.consul-upstream-instance-list .consul-lock-session-list dl:not([class]) li>.detail dl dd+dt:not([class])+dd,.consul-upstream-instance-list .consul-lock-session-list ul>li:not(:first-child)>.detail dl dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list .consul-lock-session-list ul>li:not(:first-child)>.detail dl+dl:not(:first-of-type),.consul-upstream-instance-list .consul-lock-session-list ul>li:not(:first-child)>.detail dl.local-bind-address dd+dt+dd,.consul-upstream-instance-list .consul-lock-session-list ul>li:not(:first-child)>.detail dl.local-bind-socket-path dd+dt+dd,.consul-upstream-instance-list .consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) dl dd+dt:not([class])+dd,.consul-upstream-instance-list .list-collection>ul>li:not(:first-child)>.detail dl dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list .list-collection>ul>li:not(:first-child)>.detail dl+dl:not(:first-of-type),.consul-upstream-instance-list .list-collection>ul>li:not(:first-child)>.detail dl.local-bind-address dd+dt+dd,.consul-upstream-instance-list .list-collection>ul>li:not(:first-child)>.detail dl.local-bind-socket-path dd+dt+dd,.consul-upstream-instance-list .list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dl dd+dt:not([class])+dd,.consul-upstream-instance-list .list-collection>ul>li:not(:first-child)>.detail li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list .tag-list dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list .tag-list li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list .tag-list+dl:not(:first-of-type),.consul-upstream-instance-list .tag-list:not([class]) dl dd+dt:not([class])+dd,.consul-upstream-instance-list .tag-list:not([class]) li>.detail dl dd+dt:not([class])+dd,.consul-upstream-instance-list dl .consul-exposed-path-list>ul>li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list dl .consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list dl .consul-upstream-instance-list li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list dl .list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list dl .tag-list:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list dl dd+dt,.consul-upstream-instance-list dl li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list dl td.tags:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list dl+.consul-bucket-list:not(:first-of-type),.consul-upstream-instance-list dl+.consul-instance-checks:not(:first-of-type),.consul-upstream-instance-list dl+.tag-list:not(:first-of-type),.consul-upstream-instance-list dl+dl:not(:first-of-type),.consul-upstream-instance-list dl+td.tags:not(:first-of-type),.consul-upstream-instance-list dl.local-bind-address .consul-bucket-list dd+dt+dd,.consul-upstream-instance-list dl.local-bind-address .consul-instance-checks dd+dt+dd,.consul-upstream-instance-list dl.local-bind-address .consul-lock-session-list dl dd+dt+dd,.consul-upstream-instance-list dl.local-bind-address .tag-list dd+dt+dd,.consul-upstream-instance-list dl.local-bind-address dd+dt+dd,.consul-upstream-instance-list dl.local-bind-address section[data-route="dc.show.license"] .validity dl dd+dt+dd,.consul-upstream-instance-list dl.local-bind-address section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl dd+dt+dd,.consul-upstream-instance-list dl.local-bind-address td.tags dd+dt+dd,.consul-upstream-instance-list dl.local-bind-socket-path .consul-bucket-list dd+dt+dd,.consul-upstream-instance-list dl.local-bind-socket-path .consul-instance-checks dd+dt+dd,.consul-upstream-instance-list dl.local-bind-socket-path .consul-lock-session-list dl dd+dt+dd,.consul-upstream-instance-list dl.local-bind-socket-path .tag-list dd+dt+dd,.consul-upstream-instance-list dl.local-bind-socket-path dd+dt+dd,.consul-upstream-instance-list dl.local-bind-socket-path section[data-route="dc.show.license"] .validity dl dd+dt+dd,.consul-upstream-instance-list dl.local-bind-socket-path section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl dd+dt+dd,.consul-upstream-instance-list dl.local-bind-socket-path td.tags dd+dt+dd,.consul-upstream-instance-list dl:not([class]) .consul-exposed-path-list>ul>li>.detail dl dd+dt:not([class])+dd,.consul-upstream-instance-list dl:not([class]) .consul-lock-session-list ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.consul-upstream-instance-list dl:not([class]) .consul-upstream-instance-list li>.detail dl dd+dt:not([class])+dd,.consul-upstream-instance-list dl:not([class]) .list-collection>ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.consul-upstream-instance-list dl:not([class]) .tag-list dd+dt:not([class])+dd,.consul-upstream-instance-list dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list dl:not([class]) li>.detail dl dd+dt:not([class])+dd,.consul-upstream-instance-list dl:not([class]) td.tags dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail .consul-bucket-list+dl:not(:first-of-type),.consul-upstream-instance-list li>.detail .consul-instance-checks+dl:not(:first-of-type),.consul-upstream-instance-list li>.detail .consul-lock-session-list dl+dl:not(:first-of-type),.consul-upstream-instance-list li>.detail .list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail .tag-list+dl:not(:first-of-type),.consul-upstream-instance-list li>.detail dl .consul-bucket-list:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail dl .consul-instance-checks:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail dl .consul-lock-session-list dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail dl .tag-list:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail dl dd+dt,.consul-upstream-instance-list li>.detail dl dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail dl section[data-route="dc.show.license"] .validity dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail dl section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail dl td.tags:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail dl+.consul-bucket-list:not(:first-of-type),.consul-upstream-instance-list li>.detail dl+.consul-instance-checks:not(:first-of-type),.consul-upstream-instance-list li>.detail dl+.tag-list:not(:first-of-type),.consul-upstream-instance-list li>.detail dl+dl:not(:first-of-type),.consul-upstream-instance-list li>.detail dl+td.tags:not(:first-of-type),.consul-upstream-instance-list li>.detail dl.local-bind-address dd+dt+dd,.consul-upstream-instance-list li>.detail dl.local-bind-socket-path dd+dt+dd,.consul-upstream-instance-list li>.detail dl:not([class]) .consul-bucket-list dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail dl:not([class]) .consul-instance-checks dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail dl:not([class]) .consul-lock-session-list dl dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail dl:not([class]) .tag-list dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail dl:not([class]) dl dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail dl:not([class]) section[data-route="dc.show.license"] .validity dl dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail dl:not([class]) section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail dl:not([class]) td.tags dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail section[data-route="dc.show.license"] .validity dl+dl:not(:first-of-type),.consul-upstream-instance-list li>.detail section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl+dl:not(:first-of-type),.consul-upstream-instance-list li>.detail td.tags+dl:not(:first-of-type),.consul-upstream-instance-list section[data-route="dc.show.license"] .validity dl li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list section[data-route="dc.show.license"] .validity dl+dl:not(:first-of-type),.consul-upstream-instance-list section[data-route="dc.show.license"] .validity dl:not([class]) li>.detail dl dd+dt:not([class])+dd,.consul-upstream-instance-list section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl+dl:not(:first-of-type),.consul-upstream-instance-list section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) li>.detail dl dd+dt:not([class])+dd,.consul-upstream-instance-list td.tags dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list td.tags li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list td.tags+dl:not(:first-of-type),.consul-upstream-instance-list td.tags:not([class]) dl dd+dt:not([class])+dd,.consul-upstream-instance-list td.tags:not([class]) li>.detail dl dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail .consul-bucket-list+dl:not(:first-of-type),.list-collection>ul>li:not(:first-child)>.detail .consul-exposed-path-list>ul>li>.detail dl:not([class]) dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail .consul-instance-checks+dl:not(:first-of-type),.list-collection>ul>li:not(:first-child)>.detail .consul-lock-session-list dl+dl:not(:first-of-type),.list-collection>ul>li:not(:first-child)>.detail .consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail .consul-upstream-instance-list dl+dl:not(:first-of-type),.list-collection>ul>li:not(:first-child)>.detail .consul-upstream-instance-list dl.local-bind-address dd+dt+dd,.list-collection>ul>li:not(:first-child)>.detail .consul-upstream-instance-list dl.local-bind-socket-path dd+dt+dd,.list-collection>ul>li:not(:first-child)>.detail .consul-upstream-instance-list li>.detail dl:not([class]) dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail .tag-list+dl:not(:first-of-type),.list-collection>ul>li:not(:first-child)>.detail dl .consul-bucket-list:not([class]) dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl .consul-instance-checks:not([class]) dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl .consul-lock-session-list dl:not([class]) dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl .consul-upstream-instance-list dl:not([class]) dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl .tag-list:not([class]) dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl dd+dt,.list-collection>ul>li:not(:first-child)>.detail dl section[data-route="dc.show.license"] .validity dl:not([class]) dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl td.tags:not([class]) dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl+.consul-bucket-list:not(:first-of-type),.list-collection>ul>li:not(:first-child)>.detail dl+.consul-instance-checks:not(:first-of-type),.list-collection>ul>li:not(:first-child)>.detail dl+.tag-list:not(:first-of-type),.list-collection>ul>li:not(:first-child)>.detail dl+dl:not(:first-of-type),.list-collection>ul>li:not(:first-child)>.detail dl+td.tags:not(:first-of-type),.list-collection>ul>li:not(:first-child)>.detail dl:not([class]) .consul-bucket-list dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl:not([class]) .consul-instance-checks dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl:not([class]) .consul-lock-session-list dl dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl:not([class]) .consul-upstream-instance-list dl dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl:not([class]) .tag-list dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl:not([class]) section[data-route="dc.show.license"] .validity dl dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl:not([class]) section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl:not([class]) td.tags dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail section[data-route="dc.show.license"] .validity dl+dl:not(:first-of-type),.list-collection>ul>li:not(:first-child)>.detail section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl+dl:not(:first-of-type),.list-collection>ul>li:not(:first-child)>.detail td.tags+dl:not(:first-of-type),.tag-list .consul-bucket-list:not([class]) dd+dt:not([class])+dd,.tag-list .consul-exposed-path-list>ul>li>.detail dl:not([class]) dd+dt:not([class])+dd,.tag-list .consul-instance-checks:not([class]) dd+dt:not([class])+dd,.tag-list .consul-lock-session-list dl:not([class]) dd+dt:not([class])+dd,.tag-list .consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.tag-list .consul-upstream-instance-list dl.local-bind-address dd+dt+dd,.tag-list .consul-upstream-instance-list dl.local-bind-socket-path dd+dt+dd,.tag-list .consul-upstream-instance-list dl:not([class]) dd+dt:not([class])+dd,.tag-list .consul-upstream-instance-list li>.detail dl:not([class]) dd+dt:not([class])+dd,.tag-list .list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.tag-list dd+dt,.tag-list section[data-route="dc.show.license"] .validity dl:not([class]) dd+dt:not([class])+dd,.tag-list section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) dd+dt:not([class])+dd,.tag-list td.tags:not([class]) dd+dt:not([class])+dd,.tag-list+.consul-bucket-list:not(:first-of-type),.tag-list+.consul-instance-checks:not(:first-of-type),.tag-list+.tag-list:not(:first-of-type),.tag-list+td.tags:not(:first-of-type),.tag-list:not([class]) .consul-bucket-list dd+dt:not([class])+dd,.tag-list:not([class]) .consul-exposed-path-list>ul>li>.detail dl dd+dt:not([class])+dd,.tag-list:not([class]) .consul-instance-checks dd+dt:not([class])+dd,.tag-list:not([class]) .consul-lock-session-list dl dd+dt:not([class])+dd,.tag-list:not([class]) .consul-lock-session-list ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.tag-list:not([class]) .consul-upstream-instance-list dl dd+dt:not([class])+dd,.tag-list:not([class]) .consul-upstream-instance-list li>.detail dl dd+dt:not([class])+dd,.tag-list:not([class]) .list-collection>ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.tag-list:not([class]) dd+dt:not([class])+dd,.tag-list:not([class]) section[data-route="dc.show.license"] .validity dl dd+dt:not([class])+dd,.tag-list:not([class]) section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl dd+dt:not([class])+dd,.tag-list:not([class]) td.tags dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity .consul-bucket-list+dl:not(:first-of-type),section[data-route="dc.show.license"] .validity .consul-exposed-path-list>ul>li>.detail dl dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity .consul-exposed-path-list>ul>li>.detail dl+dl:not(:first-of-type),section[data-route="dc.show.license"] .validity .consul-exposed-path-list>ul>li>.detail dl:not([class]) dl dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity .consul-instance-checks+dl:not(:first-of-type),section[data-route="dc.show.license"] .validity .consul-lock-session-list dl ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity .consul-lock-session-list dl+dl:not(:first-of-type),section[data-route="dc.show.license"] .validity .consul-lock-session-list dl:not([class]) ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity .consul-lock-session-list ul>li:not(:first-child)>.detail dl dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity .consul-lock-session-list ul>li:not(:first-child)>.detail dl+dl:not(:first-of-type),section[data-route="dc.show.license"] .validity .consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) dl dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity .consul-upstream-instance-list dl li>.detail dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity .consul-upstream-instance-list dl+dl:not(:first-of-type),section[data-route="dc.show.license"] .validity .consul-upstream-instance-list dl.local-bind-address dl dd+dt+dd,section[data-route="dc.show.license"] .validity .consul-upstream-instance-list dl.local-bind-socket-path dl dd+dt+dd,section[data-route="dc.show.license"] .validity .consul-upstream-instance-list dl:not([class]) li>.detail dl dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity .consul-upstream-instance-list li>.detail dl dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity .consul-upstream-instance-list li>.detail dl+dl:not(:first-of-type),section[data-route="dc.show.license"] .validity .consul-upstream-instance-list li>.detail dl:not([class]) dl dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity .list-collection>ul>li:not(:first-child)>.detail dl dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity .list-collection>ul>li:not(:first-child)>.detail dl+dl:not(:first-of-type),section[data-route="dc.show.license"] .validity .list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dl dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity .tag-list dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity .tag-list+dl:not(:first-of-type),section[data-route="dc.show.license"] .validity .tag-list:not([class]) dl dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity dl .consul-exposed-path-list>ul>li>.detail dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity dl .consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity dl .consul-upstream-instance-list dl.local-bind-address dd+dt+dd,section[data-route="dc.show.license"] .validity dl .consul-upstream-instance-list dl.local-bind-socket-path dd+dt+dd,section[data-route="dc.show.license"] .validity dl .consul-upstream-instance-list li>.detail dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity dl .list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity dl .tag-list:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity dl dd+dt,section[data-route="dc.show.license"] .validity dl td.tags:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity dl+.consul-bucket-list:not(:first-of-type),section[data-route="dc.show.license"] .validity dl+.consul-instance-checks:not(:first-of-type),section[data-route="dc.show.license"] .validity dl+.tag-list:not(:first-of-type),section[data-route="dc.show.license"] .validity dl+dl:not(:first-of-type),section[data-route="dc.show.license"] .validity dl+td.tags:not(:first-of-type),section[data-route="dc.show.license"] .validity dl:not([class]) .consul-exposed-path-list>ul>li>.detail dl dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity dl:not([class]) .consul-lock-session-list ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity dl:not([class]) .consul-upstream-instance-list li>.detail dl dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity dl:not([class]) .list-collection>ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity dl:not([class]) .tag-list dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity dl:not([class]) td.tags dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity td.tags dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity td.tags+dl:not(:first-of-type),section[data-route="dc.show.license"] .validity td.tags:not([class]) dl dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-bucket-list+dl:not(:first-of-type),section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-exposed-path-list>ul>li>.detail dl dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-exposed-path-list>ul>li>.detail dl+dl:not(:first-of-type),section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-exposed-path-list>ul>li>.detail dl:not([class]) dl dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-instance-checks+dl:not(:first-of-type),section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-lock-session-list dl ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-lock-session-list dl+dl:not(:first-of-type),section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-lock-session-list dl:not([class]) ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-lock-session-list ul>li:not(:first-child)>.detail dl dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-lock-session-list ul>li:not(:first-child)>.detail dl+dl:not(:first-of-type),section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) dl dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-upstream-instance-list dl li>.detail dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-upstream-instance-list dl+dl:not(:first-of-type),section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-upstream-instance-list dl.local-bind-address dl dd+dt+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-upstream-instance-list dl.local-bind-socket-path dl dd+dt+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-upstream-instance-list dl:not([class]) li>.detail dl dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-upstream-instance-list li>.detail dl dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-upstream-instance-list li>.detail dl+dl:not(:first-of-type),section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-upstream-instance-list li>.detail dl:not([class]) dl dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header .list-collection>ul>li:not(:first-child)>.detail dl dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header .list-collection>ul>li:not(:first-child)>.detail dl+dl:not(:first-of-type),section[data-route="dc.show.serverstatus"] .redundancy-zones section header .list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dl dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header .tag-list dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header .tag-list+dl:not(:first-of-type),section[data-route="dc.show.serverstatus"] .redundancy-zones section header .tag-list:not([class]) dl dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl .consul-exposed-path-list>ul>li>.detail dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl .consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl .consul-upstream-instance-list dl.local-bind-address dd+dt+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl .consul-upstream-instance-list dl.local-bind-socket-path dd+dt+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl .consul-upstream-instance-list li>.detail dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl .list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl .tag-list:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl dd+dt,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl td.tags:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl+.consul-bucket-list:not(:first-of-type),section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl+.consul-instance-checks:not(:first-of-type),section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl+.tag-list:not(:first-of-type),section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl+dl:not(:first-of-type),section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl+td.tags:not(:first-of-type),section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) .consul-exposed-path-list>ul>li>.detail dl dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) .consul-lock-session-list ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) .consul-upstream-instance-list li>.detail dl dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) .list-collection>ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) .tag-list dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) td.tags dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header td.tags dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header td.tags+dl:not(:first-of-type),section[data-route="dc.show.serverstatus"] .redundancy-zones section header td.tags:not([class]) dl dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section[data-route="dc.show.license"] .validity header dl+dl:not(:first-of-type),section[data-route="dc.show.serverstatus"] .redundancy-zones section[data-route="dc.show.license"] header .validity dl+dl:not(:first-of-type),td.tags .consul-bucket-list:not([class]) dd+dt:not([class])+dd,td.tags .consul-exposed-path-list>ul>li>.detail dl:not([class]) dd+dt:not([class])+dd,td.tags .consul-instance-checks:not([class]) dd+dt:not([class])+dd,td.tags .consul-lock-session-list dl:not([class]) dd+dt:not([class])+dd,td.tags .consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,td.tags .consul-upstream-instance-list dl.local-bind-address dd+dt+dd,td.tags .consul-upstream-instance-list dl.local-bind-socket-path dd+dt+dd,td.tags .consul-upstream-instance-list dl:not([class]) dd+dt:not([class])+dd,td.tags .consul-upstream-instance-list li>.detail dl:not([class]) dd+dt:not([class])+dd,td.tags .list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,td.tags .tag-list:not([class]) dd+dt:not([class])+dd,td.tags dd+dt,td.tags section[data-route="dc.show.license"] .validity dl:not([class]) dd+dt:not([class])+dd,td.tags section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) dd+dt:not([class])+dd,td.tags+.consul-bucket-list:not(:first-of-type),td.tags+.consul-instance-checks:not(:first-of-type),td.tags+.tag-list:not(:first-of-type),td.tags+td.tags:not(:first-of-type),td.tags:not([class]) .consul-bucket-list dd+dt:not([class])+dd,td.tags:not([class]) .consul-exposed-path-list>ul>li>.detail dl dd+dt:not([class])+dd,td.tags:not([class]) .consul-instance-checks dd+dt:not([class])+dd,td.tags:not([class]) .consul-lock-session-list dl dd+dt:not([class])+dd,td.tags:not([class]) .consul-lock-session-list ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,td.tags:not([class]) .consul-upstream-instance-list dl dd+dt:not([class])+dd,td.tags:not([class]) .consul-upstream-instance-list li>.detail dl dd+dt:not([class])+dd,td.tags:not([class]) .list-collection>ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,td.tags:not([class]) .tag-list dd+dt:not([class])+dd,td.tags:not([class]) dd+dt:not([class])+dd,td.tags:not([class]) section[data-route="dc.show.license"] .validity dl dd+dt:not([class])+dd,td.tags:not([class]) section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl dd+dt:not([class])+dd{margin-left:var(--horizontal-kv-list-separator-width)}.consul-bucket-list dt+dd,.consul-exposed-path-list>ul>li>.detail dl dt+dd,.consul-instance-checks dt+dd,.consul-lock-session-list dl dt+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl dt+dd,.consul-upstream-instance-list dl dt+dd,.consul-upstream-instance-list li>.detail dl dt+dd,.list-collection>ul>li:not(:first-child)>.detail dl dt+dd,.tag-list dt+dd,section[data-route="dc.show.license"] .validity dl dt+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl dt+dd,td.tags dt+dd{margin-left:4px}.consul-bucket-list:not([class]) dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl:not([class]) dt:not([class])+dd,.consul-instance-checks:not([class]) dt:not([class])+dd,.consul-lock-session-list dl:not([class]) dt:not([class])+dd,.consul-upstream-instance-list dl.local-bind-address dt+dd,.consul-upstream-instance-list dl.local-bind-socket-path dt+dd,.consul-upstream-instance-list dl:not([class]) dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dt:not([class])+dd,.tag-list:not([class]) dt:not([class])+dd,section[data-route="dc.show.license"] .validity dl:not([class]) dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) dt:not([class])+dd,td.tags:not([class]) dt:not([class])+dd{margin-left:0!important}.consul-lock-session-list .checks dd>:not(:last-child)::after,.discovery-chain .resolver-card ol>:not(:last-child)::after,.tag-list dd>:not(:last-child)::after,td.tags dd>:not(:last-child)::after{display:inline;content:var(--csv-list-separator);vertical-align:initial;margin-right:.3em}.tag-list dt::before,td.tags dt::before{color:inherit;color:var(--token-color-foreground-faint)}.consul-exposed-path-list>ul>li>.detail dl>dt>*,.consul-lock-session-list ul>li:not(:first-child)>.detail dl>dt>*,.consul-upstream-instance-list li>.detail dl>dt>*,.list-collection>ul>li:not(:first-child)>.detail dl>dt>*{display:none}.consul-exposed-path-list>ul>li>.detail dl.passing dt::before,.consul-exposed-path-list>ul>li>.header .passing dd::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.passing dt::before,.consul-lock-session-list ul>li:not(:first-child)>.header .passing dd::before,.consul-upstream-instance-list li>.detail dl.passing dt::before,.consul-upstream-instance-list li>.header .passing dd::before,.list-collection>ul>li:not(:first-child)>.detail dl.passing dt::before,.list-collection>ul>li:not(:first-child)>.header .passing dd::before{color:var(--token-color-foreground-success)}.consul-exposed-path-list>ul>li>.detail dl.warning dt::before,.consul-exposed-path-list>ul>li>.header .warning dd::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.warning dt::before,.consul-lock-session-list ul>li:not(:first-child)>.header .warning dd::before,.consul-upstream-instance-list li>.detail dl.warning dt::before,.consul-upstream-instance-list li>.header .warning dd::before,.list-collection>ul>li:not(:first-child)>.detail dl.warning dt::before,.list-collection>ul>li:not(:first-child)>.header .warning dd::before{color:var(--token-color-foreground-warning)}.consul-exposed-path-list>ul>li>.detail dl.critical dt::before,.consul-exposed-path-list>ul>li>.header .critical dd::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.critical dt::before,.consul-lock-session-list ul>li:not(:first-child)>.header .critical dd::before,.consul-upstream-instance-list li>.detail dl.critical dt::before,.consul-upstream-instance-list li>.header .critical dd::before,.list-collection>ul>li:not(:first-child)>.detail dl.critical dt::before,.list-collection>ul>li:not(:first-child)>.header .critical dd::before{color:var(--token-color-foreground-critical)}.consul-exposed-path-list>ul>li>.detail dl.empty dt::before,.consul-exposed-path-list>ul>li>.detail dl.unknown dt::before,.consul-exposed-path-list>ul>li>.header .empty dd::before,.consul-exposed-path-list>ul>li>.header .unknown dd::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.empty dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.unknown dt::before,.consul-lock-session-list ul>li:not(:first-child)>.header .empty dd::before,.consul-lock-session-list ul>li:not(:first-child)>.header .unknown dd::before,.consul-upstream-instance-list li>.detail dl.empty dt::before,.consul-upstream-instance-list li>.detail dl.unknown dt::before,.consul-upstream-instance-list li>.header .empty dd::before,.consul-upstream-instance-list li>.header .unknown dd::before,.list-collection>ul>li:not(:first-child)>.detail dl.empty dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.unknown dt::before,.list-collection>ul>li:not(:first-child)>.header .empty dd::before,.list-collection>ul>li:not(:first-child)>.header .unknown dd::before{color:var(--token-color-foreground-faint)}.consul-exposed-path-list>ul>li>.header [rel=me] dd::before,.consul-lock-session-list ul>li:not(:first-child)>.header [rel=me] dd::before,.consul-upstream-instance-list li>.header [rel=me] dd::before,.list-collection>ul>li:not(:first-child)>.header [rel=me] dd::before{color:var(--token-color-foreground-action)}.app-view>div form:not(.filter-bar) [role=radiogroup] label>em>code,.modal-dialog [role=document] .type-password>em>code,.modal-dialog [role=document] .type-select>em>code,.modal-dialog [role=document] .type-text>em>code,.modal-dialog [role=document] [role=radiogroup] label>em>code,.modal-dialog [role=document] form button+em>code,.modal-dialog [role=document] p code,.oidc-select label>em>code,.type-toggle>em>code,main .type-password>em>code,main .type-select>em>code,main .type-text>em>code,main form button+em>code,main p code{border:1px solid;color:var(--token-color-consul-brand);background-color:var(--token-color-surface-strong);border-color:var(--token-color-surface-interactive-active);display:inline-block;padding:0 4px}[data-tippy-root]{max-width:calc(100vw - 10px)}.tippy-box{outline:0;transition-property:transform,visibility,opacity;background-color:var(--token-color-surface-primary);border-radius:var(--decor-radius-100)}[data-animation=fade][data-state=hidden].tippy-box{opacity:0}[data-inertia][data-state=visible].tippy-box{transition-timing-function:cubic-bezier(.54,1.5,.38,1.11)}.tippy-box .tippy-arrow{--size:5px}.tippy-box .tippy-arrow::before{content:"";position:absolute}[data-placement^=top].tippy-box>.tippy-arrow{bottom:0}[data-placement^=top].tippy-box>.tippy-arrow::before{left:0;bottom:calc(0px - var(--size));transform-origin:center top}[data-placement^=bottom].tippy-box>.tippy-arrow{top:0}[data-placement^=bottom].tippy-box>.tippy-arrow::before{left:0;top:calc(0px - var(--size));transform-origin:center bottom}[data-placement^=left].tippy-box>.tippy-arrow{right:0}[data-placement^=left].tippy-box>.tippy-arrow::before{right:calc(0px - var(--size));transform-origin:center left}[data-placement^=right].tippy-box>.tippy-arrow{left:0}[data-placement^=right].tippy-box>.tippy-arrow::before{left:calc(0px - var(--size));transform-origin:center right}[data-theme~=square-tail] .tippy-arrow{--size:18px;left:calc(0px - var(--size)/ 2)!important}[data-theme~=square-tail] .tippy-arrow::before{background-color:var(--token-color-surface-primary);width:calc(1px + var(--size));height:calc(1px + var(--size));border:var(--decor-border-100);border-color:var(--token-color-palette-neutral-300)}[data-theme~=square-tail] .tippy-arrow::after{position:absolute;left:1px}[data-theme~=square-tail][data-placement^=top]{bottom:-10px}[data-theme~=square-tail][data-placement^=top] .informed-action{border-bottom-left-radius:0!important}[data-theme~=square-tail][data-placement^=top] .tippy-arrow::before{border-bottom-left-radius:var(--decor-radius-200);border-bottom-right-radius:var(--decor-radius-200);border-top:0!important}[data-theme~=square-tail][data-placement^=top] .tippy-arrow::after{bottom:calc(0px - var(--size))}[data-theme~=square-tail][data-placement^=bottom]{top:-10px}[data-theme~=square-tail][data-placement^=bottom] .informed-action{border-top-left-radius:0!important}[data-theme~=square-tail][data-placement^=bottom] .tippy-arrow::before{border-top-left-radius:var(--decor-radius-200);border-top-right-radius:var(--decor-radius-200);border-bottom:0!important}[data-theme~=square-tail][data-placement^=bottom] .tippy-arrow::after{top:calc(0px - var(--size))}.tippy-box[data-theme~=tooltip] .tippy-content{padding:12px;max-width:224px;position:relative;z-index:1}.tippy-box[data-theme~=tooltip]{background-color:var(--token-color-foreground-faint);color:var(--token-color-surface-primary)}.tippy-box[data-theme~=tooltip] .tippy-arrow{--size:5px;color:var(--token-color-foreground-faint);width:calc(var(--size) * 2);height:calc(var(--size) * 2)}.tippy-box[data-theme~=tooltip] .tippy-arrow::before{border-color:transparent;border-style:solid}.tippy-box[data-theme~=tooltip][data-placement^=top]>.tippy-arrow::before{border-width:var(--size) var(--size) 0;border-top-color:initial}.tippy-box[data-theme~=tooltip][data-placement^=bottom]>.tippy-arrow::before{border-width:0 var(--size) var(--size);border-bottom-color:initial}.tippy-box[data-theme~=tooltip][data-placement^=left]>.tippy-arrow::before{border-width:var(--size) 0 var(--size) var(--size);border-left-color:initial}.tippy-box[data-theme~=tooltip][data-placement^=right]>.tippy-arrow::before{border-width:var(--size) var(--size) var(--size) 0;border-right-color:initial}.warning.modal-dialog header{background-color:var(--token-color-vault-gradient-faint-start);border-color:var(--token-color-vault-brand);color:var(--token-color-vault-foreground)}.warning.modal-dialog header>:not(label){font-size:var(--typo-size-500);font-weight:var(--typo-weight-semibold)}.warning.modal-dialog header::before{color:var(--token-color-vault-brand);float:left;margin-top:2px;margin-right:3px}.modal-dialog>div:first-child{background-color:var(--token-color-surface-interactive);opacity:.9}.modal-dialog [role=document]>footer,.modal-dialog [role=document]>header,.modal-dialog-body{border-color:var(--token-color-palette-neutral-300)}.modal-dialog-body{border-style:solid;border-left-width:1px;border-right-width:1px}.modal-layer{height:0}.modal-dialog [role=document] table{height:150px!important}.modal-dialog [role=document] tbody{max-height:100px}.modal-dialog table{min-height:149px}.modal-dialog,.modal-dialog>div:first-child{position:fixed;top:0;right:0;bottom:0;left:0}.modal-dialog{z-index:500;align-items:center;justify-content:center;height:100%}[aria-hidden=true].modal-dialog{display:none}.modal-dialog [role=document]{box-shadow:var(--token-elevation-overlay-box-shadow);background-color:var(--token-color-surface-primary);margin:auto;z-index:2;max-width:855px;position:relative}.modal-dialog [role=document]>*{padding-left:15px;padding-right:15px}.modal-dialog [role=document]>div{overflow-y:auto;max-height:80vh;padding:20px 23px}.modal-dialog [role=document]>footer,.modal-dialog [role=document]>header{border-width:1px;padding-top:12px;padding-bottom:10px}.modal-dialog [role=document]>header{position:relative}.modal-dialog [role=document]>header button{float:right;margin-top:-3px}.list-collection>ul{border-top:1px solid;border-color:var(--token-color-surface-interactive-active)}.list-collection>button{cursor:pointer;background-color:var(--token-color-surface-strong);color:var(--token-color-foreground-action);width:100%;padding:15px}.list-collection-scroll-virtual,.list-collection>ul>li{position:relative}.list-collection-scroll-virtual{height:500px}.filter-bar{background-color:var(--token-color-foreground-high-contrast);border-bottom:var(--decor-border-100);border-color:var(--token-color-surface-interactive-active);padding:4px 8px}.filter-bar .filters .popover-menu>[type=checkbox]:checked+label button,.filter-bar .sort .popover-menu>[type=checkbox]:checked+label button{color:var(--token-color-foreground-action);background-color:var(--token-color-foreground-high-contrast)}.filter-bar .sort{margin-left:auto}.filter-bar .popover-select{position:relative;z-index:3}.filter-bar .popover-menu>[type=checkbox]+label button{padding-left:1.5rem!important;padding-right:1.5rem!important}.filter-bar .popover-menu [role=menuitem]{justify-content:normal!important}@media (max-width:1379px){.filter-bar,.filter-bar>div{flex-wrap:wrap}.filter-bar .search{position:relative;z-index:4;width:100%;margin-bottom:.3rem}}@media (max-width:995px){.filter-bar .filters,.filter-bar .sort{display:none}}html[data-route^="dc.acls.index"] .filter-bar{color:inherit}.freetext-filter{border:var(--decor-border-100);border-radius:var(--decor-radius-100);background-color:var(--token-color-surface-primary);border-color:var(--token-color-surface-interactive-active);color:var(--token-color-foreground-disabled)}.freetext-filter:hover,.freetext-filter:hover *{border-color:var(--token-color-foreground-disabled)}.freetext-filter_input::-moz-placeholder{cursor:inherit;color:inherit;border-color:inherit}.freetext-filter *,.freetext-filter_input::placeholder{cursor:inherit;color:inherit;border-color:inherit}.freetext-filter_input{-webkit-appearance:none;border:none}.freetext-filter_label::after{visibility:visible;--icon-name:icon-search;content:"";position:absolute;top:50%;left:50%;width:16px;height:16px;margin-left:-8px;margin-top:-8px}.freetext-filter .popover-menu{background-color:var(--token-color-surface-strong);color:var(--token-color-foreground-primary);border-left:1px solid;border-color:inherit}.freetext-filter .popover-menu>[type=checkbox]:checked+label button{background-color:var(--token-color-surface-interactive-active)}.freetext-filter{--height:2.2rem;display:flex;position:relative;height:var(--height);width:100%}.freetext-filter_input,.freetext-filter_label{height:100%}.freetext-filter_input{padding:8px 10px;padding-left:var(--height);min-width:12.7rem;width:100%}.freetext-filter_label{visibility:hidden;position:absolute;z-index:1;width:var(--height)}.informed-action{border-radius:var(--decor-radius-200);border:var(--decor-border-100);border-color:var(--token-color-palette-neutral-300);background-color:var(--token-color-surface-primary);min-width:190px}.informed-action>div{border-top-left-radius:var(--decor-radius-200);border-top-right-radius:var(--decor-radius-200);cursor:default;padding:1rem}.informed-action p{color:var(--token-color-hashicorp-brand)}.informed-action>ul>li>:focus,.informed-action>ul>li>:hover{background-color:var(--token-color-surface-strong)}.info.informed-action header{color:var(--token-color-foreground-action-active)}.info.informed-action header::before{background-color:var(--token-color-foreground-action);margin-right:5px}.info.informed-action>div{background-color:var(--token-color-surface-action)}.dangerous.informed-action header{color:var(--token-color-palette-red-400)}.dangerous.informed-action header::before{background-color:var(--token-color-foreground-critical)}.dangerous.informed-action>div{background-color:var(--token-color-surface-critical)}.warning.informed-action header{color:var(--token-color-foreground-warning-on-surface)}.warning.informed-action header::before{background-color:var(--token-color-vault-brand);margin-right:5px}.warning.informed-action>div{background-color:var(--token-color-vault-gradient-faint-start)}.copyable-code::after,.tab-nav li:not(.selected)>:active,.tab-nav li:not(.selected)>:focus,.tab-nav li:not(.selected)>:hover{background-color:var(--token-color-surface-strong)}.informed-action>ul>.action>*{color:var(--token-color-foreground-action)}.documentation.informed-action{min-width:270px}.informed-action header::before{float:left;margin-right:5px}.informed-action>ul{list-style:none;display:flex;margin:0;padding:4px}.informed-action>ul>li{width:50%}.informed-action>ul>li>*{width:100%}.tab-nav ul{list-style-type:none;display:inline-flex;align-items:center;position:relative;padding:0;margin:0}.tab-nav li>:not(:disabled){cursor:pointer}.tab-nav{border-bottom:var(--decor-border-100)}.animatable.tab-nav ul::after,.tab-nav li>*{border-bottom:var(--decor-border-300)}.tab-nav{border-color:var(--token-color-surface-interactive-active);clear:both;overflow:auto;letter-spacing:.03em}.tab-nav li>*{white-space:nowrap;transition-property:background-color,border-color;border-color:transparent;color:var(--token-color-foreground-faint);display:inline-block;padding:16px 13px}.tab-nav li:not(.selected)>:focus,.tab-nav li:not(.selected)>:hover{border-color:var(--token-color-palette-neutral-300)}.animatable.tab-nav .selected a{border-color:transparent!important}.animatable.tab-nav ul::after{position:absolute;bottom:0;height:0;border-top:0;width:calc(var(--selected-width,0) * 1px);transform:translate(calc(var(--selected-left,0) * 1px),0);transition-property:transform,width}.search-bar-status{border-bottom:var(--decor-border-100);border-bottom-color:var(--token-color-surface-interactive-active);padding:.5rem 0 .5rem .5rem}.search-bar-status li:not(.remove-all) button::before{color:var(--token-color-foreground-faint);margin-top:1px;margin-right:.2rem}.search-bar-status dt::after{content:":";padding-right:.3rem}.search-bar-status>dl>dt{float:left}.search-bar-status dt{white-space:nowrap}.search-bar-status li{display:inline-flex}.search-bar-status li:not(:last-child){margin-right:.3rem;margin-bottom:.3rem}.search-bar-status li:not(.remove-all){border:var(--decor-border-100);border-color:var(--token-color-surface-interactive-active);color:var(--token-color-foreground-faint);padding:0 .2rem}.search-bar-status li:not(.remove-all) dl{display:flex}.search-bar-status li:not(.remove-all) button{cursor:pointer;padding:0}.copyable-code{display:flex;align-items:flex-start;position:relative;width:100%;padding:8px 14px 3px;border:var(--decor-border-100);border-color:var(--token-color-surface-interactive-active);border-radius:var(--decor-radius-200)}.copyable-code.obfuscated{padding-left:4px}.copyable-code::after{position:absolute;top:0;right:0;width:40px;height:100%;display:block;content:""}.copyable-code .copy-button{position:absolute;top:0;right:0;z-index:1}.copyable-code .copy-button button{width:40px;height:40px}.copyable-code .copy-button button:empty::after{display:none}.copyable-code button[aria-expanded]{margin-top:1px;margin-right:4px;cursor:pointer}.copyable-code button[aria-expanded]::before{content:"";--icon-size:icon-000;--icon-color:var(--token-color-foreground-faint)}.copyable-code button[aria-expanded=true]::before{--icon-name:icon-eye-off}.copyable-code button[aria-expanded=false]::before{--icon-name:icon-eye}.copyable-code pre{padding-right:30px}.copyable-code code{display:inline-block;overflow:hidden;text-overflow:ellipsis;width:100%}.copyable-code hr{width:calc(100% - 80px);margin:8px 0 13px;border:3px dashed var(--token-color-palette-neutral-300);background-color:var(--token-color-surface-primary)}.consul-loader circle{fill:var(--token-color-consul-gradient-faint-stop);-webkit-animation:loader-animation 1.5s infinite ease-in-out;animation:loader-animation 1.5s infinite ease-in-out;transform-origin:50% 50%}.consul-loader g:nth-last-child(2) circle{-webkit-animation-delay:.2s;animation-delay:.2s}.consul-loader g:nth-last-child(3) circle{-webkit-animation-delay:.3s;animation-delay:.3s}.consul-loader g:nth-last-child(4) circle{-webkit-animation-delay:.4s;animation-delay:.4s}.consul-loader g:nth-last-child(5) circle{-webkit-animation-delay:.5s;animation-delay:.5s}@-webkit-keyframes loader-animation{0%,100%{transform:scale3D(1,1,1)}33%{transform:scale3D(0,0,1)}}@keyframes loader-animation{0%,100%{transform:scale3D(1,1,1)}33%{transform:scale3D(0,0,1)}}.consul-loader{display:flex;align-items:center;justify-content:center;height:100%;position:absolute;width:100%;top:0;margin-top:0!important}.tomography-graph .background{fill:var(--token-color-surface-strong)}.tomography-graph .axis{fill:none;stroke:var(--token-color-palette-neutral-300);stroke-dasharray:4 4}.tomography-graph .border{fill:none;stroke:var(--token-color-palette-neutral-300)}.tomography-graph .point{stroke:var(--token-color-foreground-disabled);fill:var(--token-color-consul-foreground)}.tomography-graph .lines rect{fill:var(--token-color-consul-foreground);stroke:transparent;stroke-width:5px}.tomography-graph .lines rect:hover{fill:var(--token-color-palette-neutral-300);height:3px;y:-1px}.tomography-graph .tick line{stroke:var(--token-color-palette-neutral-300)}.tomography-graph .tick text{font-size:var(--typo-size-600);text-anchor:start}.discovery-chain .resolver-card,.discovery-chain .route-card,.discovery-chain .splitter-card,.discovery-chain path{transition-duration:.1s;transition-timing-function:linear;cursor:pointer}.discovery-chain path{transition-property:stroke;fill:none;stroke:var(--token-color-foreground-disabled);stroke-width:2;vector-effect:non-scaling-stroke}#downstream-lines svg circle,#upstream-lines svg circle,.discovery-chain circle{fill:var(--token-color-surface-primary)}.discovery-chain .resolver-card,.discovery-chain .resolver-card a,.discovery-chain .route-card,.discovery-chain .route-card a,.discovery-chain .splitter-card,.discovery-chain .splitter-card a{color:var(--token-color-foreground-strong)!important}.discovery-chain path:focus,.discovery-chain path:hover{stroke:var(--token-color-foreground-strong)}.discovery-chain .resolvers,.discovery-chain .routes,.discovery-chain .splitters{border-radius:var(--decor-radius-100);border:1px solid;border-color:var(--token-color-surface-interactive-active);background-color:var(--token-color-surface-strong);pointer-events:none}.discovery-chain .resolver-card,.discovery-chain .resolvers>header span,.discovery-chain .route-card,.discovery-chain .routes>header span,.discovery-chain .splitter-card,.discovery-chain .splitters>header span{pointer-events:all}.discovery-chain .resolvers>header>*,.discovery-chain .routes>header>*,.discovery-chain .splitters>header>*{text-transform:uppercase}.discovery-chain .resolvers>header span::after,.discovery-chain .routes>header span::after,.discovery-chain .splitters>header span::after{width:1.2em;height:1.2em;opacity:.6}.discovery-chain .resolver-card,.discovery-chain .route-card,.discovery-chain .splitter-card{transition-property:opacity background-color border-color;margin-top:0!important}.discovery-chain [id*=":"]:not(path):hover{opacity:1;background-color:var(--token-color-surface-primary);border-color:var(--token-color-foreground-faint)}.discovery-chain .route-card header:not(.short) dd{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.discovery-chain .route-card section header>*{visibility:hidden}.discovery-chain .route-card .match-headers header ::before{content:"H"}.discovery-chain .route-card .match-queryparams header>::before{content:"Q"}.discovery-chain .resolver-card dt::before{content:"";--icon-size:icon-999}.discovery-chain .resolver-card dl.failover dt::before{--icon-name:icon-cloud-cross}.discovery-chain .resolver-card dl.redirect dt::before{--icon-name:icon-redirect}.discovery-chain circle{stroke-width:2;stroke:var(--token-color-foreground-disabled)}.discovery-chain{position:relative;display:flex;justify-content:space-between}.discovery-chain svg{position:absolute}.discovery-chain .resolvers,.discovery-chain .routes,.discovery-chain .splitters{padding:10px 1%;width:32%}.discovery-chain .resolvers>header,.discovery-chain .routes>header,.discovery-chain .splitters>header{height:18px}.discovery-chain .resolvers>header span,.discovery-chain .routes>header span,.discovery-chain .splitters>header span{position:relative;z-index:1;margin-left:2px}.discovery-chain .resolvers [role=group],.discovery-chain .routes [role=group],.discovery-chain .splitters [role=group]{position:relative;z-index:1;display:flex;flex-direction:column;justify-content:space-around;height:100%}.discovery-chain .resolver-card dl,.discovery-chain .route-card dl,.discovery-chain .splitter-card dl{margin:0;float:none}.discovery-chain .resolver-card,.discovery-chain .route-card,.discovery-chain .splitter-card{margin-bottom:20px}.discovery-chain .route-card header.short dl{display:flex}.discovery-chain .route-card header.short dt::after{content:" ";display:inline-block}.discovery-chain .route-card>header ul{float:right;margin-top:-2px}.discovery-chain .route-card>header ul li{margin-left:5px}.discovery-chain .route-card section{display:flex}.discovery-chain .route-card section header{display:block;width:19px;margin-right:14px}.discovery-chain .resolver-card a{display:block}.discovery-chain .resolver-card dl{display:flex;flex-wrap:wrap;margin-top:5px}.discovery-chain .resolver-card dt{font-size:0;margin-right:6px;margin-top:1px;width:23px;height:20px}.discovery-chain .resolver-card ol{display:flex;flex-wrap:wrap;list-style-type:none}.discovery-chain .route-card,.discovery-chain .splitter-card{position:relative}.discovery-chain .route-card::before,.discovery-chain .splitter-card::before{background-color:var(--token-color-surface-primary);border-radius:var(--decor-radius-full);border:2px solid;border-color:var(--token-color-foreground-disabled);position:absolute;z-index:1;right:-5px;top:50%;margin-top:-5px;width:10px;height:10px}.discovery-chain .resolver-inlets,.discovery-chain .splitter-inlets{width:10px;height:100%;z-index:1}.discovery-chain .splitter-inlets{left:50%;margin-left:calc(-15% - 3px)}.discovery-chain .resolver-inlets{right:calc(31% - 7px)}.consul-bucket-list .service+dd{font-weight:var(--typo-weight-semibold)}.consul-bucket-list dd:not(:last-child)::after{display:inline-block;content:"/";margin:0 6px 0 3px}.consul-bucket-list .service+dd,.consul-bucket-list dd+dt{margin-left:0!important}.consul-upstream-instance-list dl.local-bind-socket-mode dt{text-transform:lowercase;font-weight:var(--typo-weight-semibold)}.consul-health-check-list .health-check-output::before{min-width:20px;min-height:20px;margin-right:15px}@media (max-width:650px){.consul-health-check-list .health-check-output::before{min-width:18px;min-height:18px;margin-right:8px}}.consul-health-check-list .health-check-output dd em{background-color:var(--token-color-surface-strong);cursor:default;font-style:normal;margin-top:-2px;margin-left:.5em}.consul-health-check-list .passing.health-check-output::before{color:var(--token-color-foreground-success)}.consul-health-check-list .warning.health-check-output::before{color:var(--token-color-foreground-warning)}.consul-health-check-list .critical.health-check-output::before{color:var(--token-color-foreground-critical)}.consul-health-check-list .health-check-output,.consul-health-check-list .health-check-output pre{border-radius:var(--decor-radius-100)}.consul-health-check-list .health-check-output dd:first-of-type{color:var(--token-color-foreground-disabled)}.consul-health-check-list .health-check-output pre{background-color:var(--token-color-surface-strong);color:var(--token-color-foreground-faint)}.consul-health-check-list .health-check-output{border-width:1px 1px 1px 4px;color:var(--token-color-foreground-strong);border-color:var(--token-color-surface-interactive-active);border-style:solid;display:flex;padding:20px 24px 20px 16px}.consul-health-check-list .passing.health-check-output{border-left-color:var(--token-color-foreground-success)}.consul-health-check-list .warning.health-check-output{border-left-color:var(--token-color-vault-brand)}.consul-health-check-list .critical.health-check-output{border-left-color:var(--token-color-foreground-critical)}.consul-health-check-list .health-check-output:not(:last-child){margin-bottom:24px}.consul-health-check-list .health-check-output dl:last-of-type,.consul-health-check-list .health-check-output header{width:100%}.consul-health-check-list .health-check-output header{margin-bottom:.9em}.consul-health-check-list .health-check-output>div{flex:1 1 auto;width:calc(100% - 26px);display:flex;flex-wrap:wrap;justify-content:space-between}.consul-health-check-list .health-check-output dl{min-width:110px}.consul-health-check-list .health-check-output dl>*{display:block;width:auto;position:static;padding-left:0}.consul-health-check-list .health-check-output dt{margin-bottom:0}.consul-health-check-list .health-check-output dd{position:relative}.consul-health-check-list .health-check-output dl:nth-last-of-type(2){width:50%}.consul-health-check-list .health-check-output dl:last-of-type{margin-top:1em;margin-bottom:0}.consul-health-check-list .health-check-output dl:last-of-type dt{margin-bottom:.3em}.consul-health-check-list .health-check-output pre{padding:12px 40px 12px 12px;white-space:pre-wrap;position:relative}.consul-health-check-list .health-check-output pre code{word-wrap:break-word}.consul-health-check-list .health-check-output .copy-button{position:absolute;right:.5em;top:.7em}@media (max-width:650px){.consul-health-check-list .health-check-output{padding:15px 19px 15px 14px}.consul-health-check-list .health-check-output::before{margin-right:8px}.consul-health-check-list .health-check-output dl:nth-last-of-type(2){width:100%}.consul-health-check-list .health-check-output dl:not(:last-of-type){margin-right:0}}.consul-instance-checks.passing dt::before{color:var(--token-color-foreground-success)}.consul-instance-checks.warning dt::before{color:var(--token-color-foreground-warning)}.consul-instance-checks.critical dt::before{color:var(--token-color-foreground-critical)}.consul-instance-checks.empty dt::before{color:var(--token-color-foreground-faint)}.consul-exposed-path-list>ul{border-top:1px solid var(--token-color-surface-interactive-active)}.consul-external-source::before,.consul-kind::before{--icon-size:icon-300}.consul-intention-list td.intent- strong::before,.consul-intention-list td.intent-allow strong::before,.consul-intention-list td.intent-deny strong::before,.consul-intention-permission-list .intent-allow::before,.consul-intention-permission-list .intent-deny::before,.consul-intention-search-bar .value- span::before,.consul-intention-search-bar .value-allow span::before,.consul-intention-search-bar .value-deny span::before{margin-right:5px}.consul-intention-list td.intent- strong,.consul-intention-list td.intent-allow strong,.consul-intention-list td.intent-deny strong,.consul-intention-permission-list .intent-allow,.consul-intention-permission-list .intent-deny,.consul-intention-search-bar .value- span,.consul-intention-search-bar .value-allow span,.consul-intention-search-bar .value-deny span{display:inline-block;font-weight:var(--typo-weight-normal);font-size:var(--typo-size-600)}.consul-intention-list td.intent-allow strong,.consul-intention-permission-list .intent-allow,.consul-intention-search-bar .value-allow span{color:var(--token-color-foreground-success-on-surface);background-color:var(--token-color-border-success)}.consul-intention-list td.intent-deny strong,.consul-intention-permission-list .intent-deny,.consul-intention-search-bar .value-deny span{color:var(--token-color-foreground-critical-on-surface);background-color:var(--token-color-border-critical)}.consul-intention-list td.permissions{color:var(--token-color-foreground-action)}.consul-intention-list em{--word-spacing:0.25rem}.consul-intention-list em span::before,.consul-intention-list em span:first-child{margin-right:var(--word-spacing)}.consul-intention-list em span:last-child{margin-left:var(--word-spacing)}.consul-intention-list td{height:59px}.consul-intention-list tr>:nth-child(1){width:calc(30% - 50px)}.consul-intention-list tr>:nth-child(2){width:120px}.consul-intention-list tr>:nth-child(3){width:calc(30% - 50px)}.consul-intention-list tr>:nth-child(4){width:calc(40% - 240px)}.consul-intention-list tr>:nth-child(5){width:160px}.consul-intention-list tr>:last-child{width:60px}.consul-intention-list .menu-panel.confirmation{width:200px}@media (max-width:849px){.consul-intention-list tr>:not(.source):not(.destination):not(.intent){display:none}}.consul-intention-action-warn-modal .modal-dialog-window{max-width:450px}.consul-intention-action-warn-modal .modal-dialog-body p{font-size:var(--typo-size-600)}.consul-intention-fieldsets [role=radiogroup]{overflow:visible!important;display:grid;grid-gap:12px;grid-template-columns:repeat(auto-fit,minmax(270px,auto))}.consul-intention-fieldsets .radio-card header>*{display:inline}.consul-intention-fieldsets .permissions>button{float:right}.consul-intention-permission-modal [role=dialog]{width:100%}.consul-intention-permission-list dl.permission-methods dt::before{content:"M"}.consul-intention-permission-list dl.permission-path dt::before{content:"P"}.consul-intention-permission-header-list dt::before,.consul-intention-permission-list dl.permission-header dt::before{content:"H"}.consul-intention-permission-list .detail>div{display:flex;width:100%}.consul-intention-permission-list strong{margin-right:8px}.consul-intention-permission-form h2{border-top:1px solid var(--token-color-foreground-action);padding-top:1.4em;margin-top:.2em;margin-bottom:.6em}.consul-intention-permission-form .consul-intention-permission-header-form{margin-top:10px}.consul-intention-permission-form .consul-intention-permission-header-form fieldset>div,.consul-intention-permission-form fieldset:nth-child(2)>div{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));grid-gap:12px}.consul-intention-permission-form fieldset:nth-child(2)>div label:last-child{grid-column:span 2}.consul-intention-permission-form .ember-basic-dropdown-trigger{padding:5px}.consul-intention-permission-form .checkbox-group{flex-direction:column}.consul-intention-permission-header-list{max-height:200px;overflow:auto}.consul-lock-session-list button{margin-right:var(--horizontal-padding)}.consul-lock-session-form{overflow:hidden}.consul-server-list ul{display:grid;grid-template-columns:repeat(4,minmax(215px,25%));gap:12px}.consul-server-list a:hover div{box-shadow:var(--token-elevation-overlay-box-shadow);--tone-border:var(--token-color-foreground-faint)}.consul-server-card .name+dd{color:var(--token-color-hashicorp-brand);-webkit-animation-name:typo-truncate;animation-name:typo-truncate}.consul-server-card .health-status+dd{font-size:var(--typo-size-700)}.voting-status-non-voter.consul-server-card .health-status+dd{background-color:var(--token-color-surface-strong);color:var(--token-color-foreground-faint)}.consul-server-card:not(.voting-status-non-voter) .health-status.healthy+dd{background-color:var(--token-color-surface-success);color:var(--token-color-palette-green-400)}.consul-server-card:not(.voting-status-non-voter) .health-status:not(.healthy)+dd{background-color:var(--token-color-surface-critical);color:var(--token-color-foreground-critical)}.consul-server-card .health-status+dd::before{--icon-size:icon-000;content:""}.consul-server-card .health-status.healthy+dd::before{--icon-name:icon-check}.consul-server-card .health-status:not(.healthy)+dd::before{--icon-name:icon-x}.consul-server-card{position:relative;overflow:hidden;--padding-x:24px;--padding-y:24px;padding:var(--padding-y) var(--padding-x);--tile-size:3rem}.consul-auth-method-binding-list h2,.consul-auth-method-view section h2{padding-bottom:12px}.voting-status-leader.consul-server-card .name{position:absolute!important}.consul-server-card dd:not(:last-of-type){margin-bottom:calc(var(--padding-y)/ 2)}.voting-status-leader.consul-server-card dd{margin-left:calc(var(--tile-size) + 1rem)}.consul-auth-method-list ul .locality::before{margin-right:4px}.consul-auth-method-view{margin-bottom:32px}.consul-auth-method-view section{width:100%;position:relative;overflow-y:auto}.consul-auth-method-view section table thead td{color:var(--token-color-foreground-faint);font-weight:var(--typo-weight-semibold);font-size:var(--typo-size-700)}.consul-auth-method-view section table tbody td{font-size:var(--typo-size-600);color:var(--token-color-hashicorp-brand)}.consul-auth-method-view section table tbody tr{cursor:default}.consul-auth-method-view section table tbody tr:hover{box-shadow:none}.consul-auth-method-view section dt{width:30%}.consul-auth-method-view section dd{width:70%}.consul-auth-method-binding-list p{margin-bottom:4px!important}.consul-auth-method-binding-list code{background-color:var(--token-color-surface-strong);padding:0 12px}.consul-auth-method-nspace-list thead td{color:var(--token-color-foreground-faint)!important;font-weight:var(--typo-weight-semibold)!important;font-size:var(--typo-size-700)!important}.consul-auth-method-nspace-list tbody td{font-size:var(--typo-size-600);color:var(--token-color-hashicorp-brand)}.consul-auth-method-nspace-list tbody tr{cursor:default}.consul-auth-method-nspace-list tbody tr:hover{box-shadow:none}.role-selector [name="role[state]"],.role-selector [name="role[state]"]+*{display:none}.role-selector [name="role[state]"]:checked+*{display:block}.topology-notices button{color:var(--token-color-foreground-action);float:right;margin-top:16px;margin-bottom:32px}#metrics-container .link a,.topology-container{color:var(--token-color-foreground-faint)}#downstream-container .topology-metrics-card:not(:last-child),#upstream-column #upstream-container:not(:last-child),#upstream-container .topology-metrics-card:not(:last-child){margin-bottom:8px}#downstream-container,#metrics-container,#upstream-container{border-radius:var(--decor-radius-100);border:1px solid;border-color:var(--token-color-surface-interactive-active)}#downstream-container,#upstream-container{background-color:var(--token-color-surface-strong);padding:12px}#downstream-container>div:first-child{display:inline-flex}#downstream-container>div:first-child span::before{background-color:var(--token-color-foreground-faint)}#metrics-container div:first-child{background-color:var(--token-color-surface-primary);padding:12px;border:none;font-size:16px;font-weight:700}#metrics-container .link{background-color:var(--token-color-surface-strong);padding:18px}#metrics-container .link a:hover{color:var(--token-color-foreground-action)}#downstream-lines svg path,#upstream-lines svg path{fill:transparent}#downstream-lines svg .allow-arrow,#upstream-lines svg .allow-arrow{fill:var(--token-color-palette-neutral-300);stroke-linejoin:round}#downstream-lines svg .allow-arrow,#downstream-lines svg .allow-dot,#downstream-lines svg path,#upstream-lines svg .allow-arrow,#upstream-lines svg .allow-dot,#upstream-lines svg path{stroke:var(--token-color-palette-neutral-300);stroke-width:2}#downstream-lines svg path[data-permission=empty],#downstream-lines svg path[data-permission=not-defined],#upstream-lines svg path[data-permission=empty],#upstream-lines svg path[data-permission=not-defined]{stroke-dasharray:4}#downstream-lines svg path[data-permission=deny],#upstream-lines svg path[data-permission=deny]{stroke:var(--token-color-foreground-critical)}#downstream-lines svg .deny-dot,#upstream-lines svg .deny-dot{stroke:var(--token-color-foreground-critical);stroke-width:2}#downstream-lines svg .deny-arrow,#upstream-lines svg .deny-arrow{fill:var(--token-color-foreground-critical);stroke:var(--token-color-foreground-critical);stroke-linejoin:round}.topology-notices{display:flow-root}.topology-container{display:grid;height:100%;align-items:start;grid-template-columns:2fr 1fr 2fr 1fr 2fr;grid-template-rows:50px 1fr 50px;grid-template-areas:"down-cards down-lines . up-lines up-cards" "down-cards down-lines metrics up-lines up-cards" "down-cards down-lines . up-lines up-cards"}#downstream-container{grid-area:down-cards}#downstream-lines{grid-area:down-lines;margin-left:-20px}#upstream-lines{grid-area:up-lines;margin-right:-20px}#upstream-column{grid-area:up-cards}#downstream-lines,#upstream-lines{position:relative}#metrics-container{grid-area:metrics}#metrics-container .link a::before{background-color:var(--token-color-foreground-faint);margin-right:4px}#downstream-container .topology-metrics-card,#upstream-container .topology-metrics-card{display:block;color:var(--token-color-foreground-faint);overflow:hidden;background-color:var(--token-color-surface-primary);border-radius:var(--decor-radius-100);border:1px solid;border-color:var(--token-color-surface-interactive-active)}#downstream-container .topology-metrics-card p,#upstream-container .topology-metrics-card p{padding:12px 12px 0;font-size:var(--typo-size-500);font-weight:var(--typo-weight-semibold);margin-bottom:0!important}#downstream-container .topology-metrics-card p.empty,#upstream-container .topology-metrics-card p.empty{padding:12px!important}#downstream-container .topology-metrics-card div dl,#upstream-container .topology-metrics-card div dl{display:inline-flex;margin-right:8px}#downstream-container .topology-metrics-card div dd,#upstream-container .topology-metrics-card div dd{color:var(--token-color-foreground-faint)}#downstream-container .topology-metrics-card div span,#upstream-container .topology-metrics-card div span{margin-right:8px}#downstream-container .topology-metrics-card div dt::before,#downstream-container .topology-metrics-card div span::before,#upstream-container .topology-metrics-card div dt::before,#upstream-container .topology-metrics-card div span::before{margin-right:4px}#downstream-container .topology-metrics-card div .health dt::before,#downstream-container .topology-metrics-card div .nspace dt::before,#upstream-container .topology-metrics-card div .health dt::before,#upstream-container .topology-metrics-card div .nspace dt::before{margin-top:2px}#downstream-container .topology-metrics-card div .health dt::before,#downstream-container .topology-metrics-card div .nspace dt::before,#downstream-container .topology-metrics-card div .partition dt::before,#upstream-container .topology-metrics-card div .health dt::before,#upstream-container .topology-metrics-card div .nspace dt::before,#upstream-container .topology-metrics-card div .partition dt::before{--icon-color:var(--token-color-foreground-faint)}#downstream-container .topology-metrics-card div .passing::before,#upstream-container .topology-metrics-card div .passing::before{--icon-color:var(--token-color-foreground-success)}#downstream-container .topology-metrics-card div .warning::before,#upstream-container .topology-metrics-card div .warning::before{--icon-color:var(--token-color-foreground-warning)}#downstream-container .topology-metrics-card div .critical::before,#upstream-container .topology-metrics-card div .critical::before{--icon-color:var(--token-color-foreground-critical)}#downstream-container .topology-metrics-card div .empty::before,#upstream-container .topology-metrics-card div .empty::before{--icon-color:var(--token-color-foreground-faint)}#downstream-container .topology-metrics-card .details,#upstream-container .topology-metrics-card .details{padding:0 12px 12px}#downstream-container .topology-metrics-card .details>:not(:last-child),#upstream-container .topology-metrics-card .details>:not(:last-child){padding-bottom:6px}#downstream-container .topology-metrics-card .details .group,#upstream-container .topology-metrics-card .details .group{display:grid;grid-template-columns:20px 1fr;grid-template-rows:repeat(2,1fr);grid-template-areas:"partition partition" "union namespace"}#downstream-container .topology-metrics-card .details .group span,#upstream-container .topology-metrics-card .details .group span{display:inline-block;grid-area:union;padding-left:7px;margin-right:0}#downstream-container .topology-metrics-card .details .group span::before,#upstream-container .topology-metrics-card .details .group span::before{margin-right:0;--icon-color:var(--token-color-foreground-faint)}#downstream-container .topology-metrics-card .details .group dl:first-child,#upstream-container .topology-metrics-card .details .group dl:first-child{grid-area:partition;padding-bottom:6px}#downstream-container .topology-metrics-card .details .group dl:nth-child(2),#upstream-container .topology-metrics-card .details .group dl:nth-child(2){grid-area:namespace}.topology-metrics-source-type{margin:6px 0 6px 12px;display:table}.topology-metrics-popover>button{position:absolute;transform:translate(-50%,-50%);background-color:var(--token-color-surface-primary);padding:1px}.topology-metrics-popover>button:hover{cursor:pointer}.topology-metrics-popover>button:disabled,html[data-route^="dc.nodes.show.metadata"] table tr{cursor:default}.topology-metrics-popover>button:active,.topology-metrics-popover>button:focus{outline:0}.topology-metrics-popover.deny .informed-action header::before{display:none}.topology-metrics-popover.deny .tippy-arrow::after,.topology-metrics-popover.deny>button::before{--icon-color:var(--token-color-foreground-critical)}.topology-metrics-popover.not-defined .tippy-arrow::after,.topology-metrics-popover.not-defined>button::before{--icon-color:var(--token-color-vault-brand)}#metrics-container .sparkline-wrapper svg path{stroke-width:0}#metrics-container .sparkline-wrapper .tooltip{padding:0 0 10px;font-size:.875em;line-height:1.5em;font-weight:400;border:1px solid var(--token-color-palette-neutral-300);background:#fff;border-radius:2px;box-sizing:border-box;box-shadow:var(--token-elevation-higher-box-shadow)}#metrics-container .sparkline-wrapper .tooltip .sparkline-time{padding:8px 10px;font-weight:700;font-size:14px;color:#000;border-bottom:1px solid var(--token-color-surface-interactive-active);margin-bottom:4px;text-align:center}#metrics-container .sparkline-wrapper .tooltip .sparkline-tt-legend,#metrics-container .sparkline-wrapper .tooltip .sparkline-tt-sum{border:0;padding:3px 10px 0}#metrics-container .sparkline-wrapper .tooltip .sparkline-tt-sum{border-top:1px solid var(--token-color-surface-interactive-active);margin-top:4px;padding:8px 10px 0}#metrics-container .sparkline-wrapper .tooltip .sparkline-tt-legend-color{width:12px;height:12px;border-radius:2px;margin:0 5px 0 0;padding:0}#metrics-container .sparkline-wrapper .tooltip .sparkline-tt-legend-value,#metrics-container .sparkline-wrapper .tooltip .sparkline-tt-sum-value{float:right}#metrics-container .sparkline-wrapper div.tooltip:before{content:"";display:block;position:absolute;width:12px;height:12px;left:15px;bottom:-7px;border:1px solid var(--token-color-palette-neutral-300);border-top:0;border-left:0;background:#fff;transform:rotate(45deg)}.sparkline-key h3::before{margin:2px 3px 0 0;font-size:14px}.sparkline-key h3{color:var(--token-color-foreground-strong);font-size:16px}.sparkline-key .sparkline-key-content dd,.sparkline-key-link{color:var(--token-color-foreground-faint)}.sparkline-key-link:hover{color:var(--token-color-foreground-action)}#metrics-container:hover .sparkline-key-link::before{margin:1px 3px 0 0;font-size:12px}#metrics-container div .sparkline-wrapper,#metrics-container div .sparkline-wrapper svg.sparkline{width:100%;height:70px;padding:0;margin:0}#metrics-container div .sparkline-wrapper{position:relative}#metrics-container div .sparkline-wrapper .tooltip{visibility:hidden;position:absolute;z-index:10;bottom:78px;width:217px}#metrics-container div .sparkline-wrapper .sparkline-tt-legend-color{display:inline-block}#metrics-container div .sparkline-wrapper .topology-metrics-error,#metrics-container div .sparkline-wrapper .topology-metrics-loader{padding-top:15px}.sparkline-key .sparkline-key-content{width:500px;min-height:100px}.sparkline-key .sparkline-key-content dl{padding:10px 0 0}.sparkline-key .sparkline-key-content dt{font-weight:600;width:125px;float:left}.sparkline-key .sparkline-key-content dd{margin:0 0 12px 135px}.sparkline-key-link{visibility:hidden;float:right;margin-top:-35px;margin-right:12px}#metrics-container:hover .sparkline-key-link{visibility:visible}.topology-metrics-stats{padding:12px 12px 0;display:flex;flex-flow:row wrap;justify-content:space-between;align-items:stretch;width:100%;border-top:1px solid var(--token-color-surface-interactive-active)}.topology-metrics-stats dl{display:flex;padding-bottom:12px}.topology-metrics-stats dt{margin-right:5px;line-height:1.5em!important}.topology-metrics-stats dd{color:var(--token-color-foreground-disabled)!important}.topology-metrics-stats span{padding-bottom:12px}.topology-metrics-status-error,.topology-metrics-status-loader{font-weight:400;font-size:.875rem;color:var(--token-color-foreground-faint);text-align:center;margin:0 auto!important;display:block}.topology-metrics-status-error span::before,.topology-metrics-status-loader span::before{background-color:var(--token-color-foreground-faint)}span.topology-metrics-status-loader::after{--icon-name:var(--icon-loading);content:"";margin-left:.5rem}.consul-node-peer-info .consul-node-peer-info__name,.consul-peer-info .consul-peer-info__description{margin-left:4px}.consul-intention-list-table__meta-info{display:flex}.consul-intention-list-table__meta-info .consul-intention-list-table__meta-info__peer{display:flex;align-items:center}.consul-node-peer-info,.peerings-badge{align-items:center;display:flex}.consul-peer-search-bar .value-active span::before,.consul-peer-search-bar .value-deleting span::before,.consul-peer-search-bar .value-establishing span::before,.consul-peer-search-bar .value-failing span::before,.consul-peer-search-bar .value-pending span::before,.consul-peer-search-bar .value-terminated span::before{--icon-size:icon-000;content:""}.consul-peer-search-bar .value-active span,.consul-peer-search-bar .value-deleting span,.consul-peer-search-bar .value-establishing span,.consul-peer-search-bar .value-failing span,.consul-peer-search-bar .value-pending span,.consul-peer-search-bar .value-terminated span{font-weight:var(--typo-weight-medium);font-size:var(--typo-size-700)}.consul-peer-search-bar .value-pending span::before{--icon-name:icon-running;--icon-color:var(--token-color-palette-neutral-600)}.consul-peer-search-bar .value-pending span{background-color:var(--token-color-consul-surface);color:var(--token-color-consul-foreground)}.consul-peer-search-bar .value-establishing span::before{--icon-name:icon-running;--icon-color:var(--token-color-palette-neutral-600)}.consul-peer-search-bar .value-establishing span{background-color:var(--token-color-palette-blue-50);color:var(--token-color-palette-blue-200)}.consul-peer-search-bar .value-active span::before{--icon-name:icon-check;--icon-color:var(--token-color-palette-green-400)}.consul-peer-search-bar .value-active span{background-color:var(--token-color-palette-green-50);color:var(--token-color-palette-green-200)}.consul-peer-search-bar .value-failing span::before{--icon-name:icon-x;--icon-color:var(--token-color-palette-red-200)}.consul-peer-search-bar .value-failing span{background-color:var(--token-color-palette-red-50);color:var(--token-color-palette-red-200)}.consul-peer-search-bar .value-terminated span::before{--icon-name:icon-x-square;--icon-color:var(--token-color-palette-neutral-600)}.consul-peer-search-bar .value-terminated span{background-color:var(--token-color-palette-neutral-200);color:var(--token-color-palette-neutral-600)}.consul-peer-search-bar .value-deleting span::before{--icon-name:icon-loading;--icon-color:var(--token-color-foreground-warning-on-surface)}.consul-peer-search-bar .value-deleting span{background-color:var(--token-color-surface-warning);color:var(--token-color-foreground-warning-on-surface)}.peers__list__peer-detail{display:flex;align-content:center;gap:18px}.border-bottom-primary{border-bottom:1px solid var(--token-color-border-primary)}.peerings-badge{justify-content:center;padding:2px 8px;border-radius:5px;gap:4px}.peerings-badge.active{background:var(--token-color-surface-success);color:var(--token-color-foreground-success)}.peerings-badge.pending{background:var(--token-color-consul-surface);color:var(--token-color-consul-brand)}.peerings-badge.establishing{background:var(--token-color-surface-action);color:var(--token-color-foreground-action)}.peerings-badge.failing{background:var(--token-color-surface-critical);color:var(--token-color-foreground-critical)}.peerings-badge.deleting{background:var(--token-color-surface-warning);color:var(--token-color-foreground-warning-on-surface)}.peerings-badge.terminated,.peerings-badge.undefined{background:var(--token-color-surface-interactive-active);color:var(--token-color-foreground-primary)}.consul-peer-info,section[data-route="dc.show.serverstatus"] .server-failure-tolerance dt{color:var(--token-color-foreground-faint)}.peerings-badge .peerings-badge__text{font-weight:500;font-size:13px}.consul-peer-info{background:var(--token-color-surface-faint);padding:0 8px;border-radius:2px;display:flex;align-items:center}.consul-peer-form{width:416px}.consul-peer-form nav{margin-bottom:20px}.consul-peer-form-generate{width:416px;min-height:200px}.consul-peer-form-generate ol{list-style-position:outside;list-style-type:none;counter-reset:hexagonal-counter;position:relative}.consul-peer-form-generate ol::before{content:"";border-left:var(--decor-border-100);border-color:var(--token-color-palette-neutral-300);height:100%;position:absolute;left:2rem}.consul-peer-form-generate li{counter-increment:hexagonal-counter;position:relative;margin-left:60px;margin-bottom:1rem}.consul-peer-form-generate li .copyable-code{margin-top:1rem}.consul-peer-form-generate li::before{--icon-name:icon-hexagon;--icon-size:icon-600;content:"";position:absolute;z-index:2}.consul-peer-form-generate li::after{content:counter(hexagonal-counter);position:absolute;top:0;font-size:14px;font-weight:var(--typo-weight-bold);background-color:var(--token-color-palette-neutral-0);z-index:1;text-align:center}.consul-peer-form-generate li::after,.consul-peer-form-generate li::before{left:-2.4rem;width:20px;height:20px}.consul-hcp-home{position:relative;top:-22px}.consul-hcp-home a::before{content:"";--icon-name:icon-arrow-left;--icon-size:icon-300;margin-right:8px}.agentless-node-notice .hds-alert__title{display:flex;justify-content:space-between}.definition-table dt{line-height:var(--typo-lead-700)}.app-view>div form:not(.filter-bar) [role=radiogroup] label,.modal-dialog [role=document] [role=radiogroup] label{line-height:var(--typo-lead-200)}.app-view>div form:not(.filter-bar) [role=radiogroup] label>span,.consul-intention-action-warn-modal button.dangerous,.copy-button button,.modal-dialog [role=document] .type-password>span,.modal-dialog [role=document] .type-select>span,.modal-dialog [role=document] .type-text>span,.modal-dialog [role=document] [role=radiogroup] label>span,.oidc-select label>span,.popover-select label>*,.topology-notices button,.type-sort.popover-select label>*,.type-toggle>span,main .type-password>span,main .type-select>span,main .type-text>span,span.label{font-weight:var(--typo-weight-semibold)}.discovery-chain .route-card header:not(.short) dd,.discovery-chain .route-card section dt,.discovery-chain .splitter-card>header{font-weight:var(--typo-weight-bold)}.app-view h1 em,.app-view>div form:not(.filter-bar) [role=radiogroup] label>strong,.consul-auth-method-type,.consul-external-source,.consul-health-check-list .health-check-output dd em,.consul-intention-list td strong,.consul-intention-list td.destination em,.consul-intention-list td.source em,.consul-intention-permission-list strong,.consul-intention-search-bar li button span,.consul-kind,.consul-peer-search-bar li button span,.consul-server-card .health-status+dd,.consul-source,.consul-transparent-proxy,.discovery-chain .route-card header dt,.discovery-chain .route-card>header ul li,.empty-state header :nth-child(2),.hashicorp-consul nav .dcs .dc-name span,.hashicorp-consul nav .dcs li.is-local span,.hashicorp-consul nav .dcs li.is-primary span,.leader,.modal-dialog [role=document] .type-password>strong,.modal-dialog [role=document] .type-select>strong,.modal-dialog [role=document] .type-text>strong,.modal-dialog [role=document] [role=radiogroup] label>strong,.modal-dialog [role=document] label a[rel*=help],.modal-dialog [role=document] table td:first-child em,.oidc-select label>strong,.search-bar-status li:not(.remove-all),.topology-metrics-source-type,.type-toggle>strong,html[data-route^="dc.acls.index"] main td strong,main .type-password>strong,main .type-select>strong,main .type-text>strong,main label a[rel*=help],main table td:first-child em,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl,section[data-route="dc.show.serverstatus"] .server-failure-tolerance header em,span.policy-node-identity,span.policy-service-identity{font-weight:var(--typo-weight-normal)}.app-view h1 em,.app-view>div form:not(.filter-bar) [role=radiogroup] label>em,.consul-intention-list td.destination em,.consul-intention-list td.source em,.modal-dialog [role=document] .type-password>em,.modal-dialog [role=document] .type-select>em,.modal-dialog [role=document] .type-text>em,.modal-dialog [role=document] [role=radiogroup] label>em,.modal-dialog [role=document] form button+em,.modal-dialog [role=document] table td:first-child em,.oidc-select label>em,.type-toggle>em,main .type-password>em,main .type-select>em,main .type-text>em,main form button+em,main table td:first-child em{font-style:normal}.consul-exposed-path-list>ul>li>.header,.consul-lock-session-list ul>li:not(:first-child)>.header,.consul-upstream-instance-list li>.header,.list-collection>ul>li:not(:first-child)>.header{font-size:var(--typo-size-450);font-weight:var(--typo-weight-medium)}.consul-exposed-path-list>ul>li>.header :not(button),.consul-lock-session-list ul>li:not(:first-child)>.header :not(button),.consul-upstream-instance-list li>.header :not(button),.list-collection>ul>li:not(:first-child)>.header :not(button){font-size:inherit;font-weight:inherit}.app-view h1 em{font-size:var(--typo-size-500)}@media (max-width:420px) and (-webkit-min-device-pixel-ratio:0){input{font-size:16px!important}}#wrapper{box-sizing:content-box}#wrapper>footer>*,.modal-dialog>*,main>*{box-sizing:border-box}html[data-route$=create] main,html[data-route$=edit] main{max-width:1260px}fieldset [role=group]{display:flex;flex-wrap:wrap;flex-direction:row}.outlet[data-state=loading],html.ember-loading .view-loader,html:not(.has-nspaces) [class*=nspace-],html:not(.has-partitions) [class*=partition-],html[data-state=idle] .view-loader{display:none}[role=group] fieldset{width:50%}[role=group] fieldset:not(:first-of-type){padding-left:20px;border-left:1px solid;border-left:var(--token-color-foreground-faint)}[role=group] fieldset:not(:last-of-type){padding-right:20px}.app-view{margin-top:50px}@media (max-width:849px){html:not(.with-breadcrumbs) .app-view{margin-top:10px}}html body>.brand-loader{transition-property:transform,opacity;transform:translate(0,0);opacity:1}html[data-state]:not(.ember-loading) body>.brand-loader{opacity:0}@media (min-width:900px){html[data-state] body>.brand-loader{transform:translate(calc(var(--chrome-width)/ 2),0)}}html[data-route$=create] .app-view>header+div>:first-child,html[data-route$=edit] .app-view>header+div>:first-child{margin-top:1.8em}.app-view>div .container,.app-view>div .tab-section .consul-health-check-list,.app-view>div .tab-section>.search-bar+p,.app-view>div .tab-section>:first-child:not(.filter-bar):not(table){margin-top:1.25em}.consul-upstream-instance-list,html[data-route^="dc.nodes.show.sessions"] .consul-lock-session-list{margin-top:0!important}.consul-auth-method-list ul,.consul-node-list ul,.consul-nspace-list ul,.consul-peer-list ul,.consul-policy-list ul,.consul-role-list ul,.consul-service-instance-list ul,.consul-token-list ul,html[data-route="dc.services.index"] .consul-service-list ul,html[data-route^="dc.nodes.show.sessions"] .consul-lock-session-list ul{border-top-width:0!important}#wrapper{padding-left:48px;padding-right:48px;display:flex;min-height:100vh;flex-direction:column}main{position:relative;flex:1}html:not([data-route$=index]):not([data-route$=instances]) main{margin-bottom:2em}@media (max-width:849px){.actions button.copy-btn{margin-top:-56px;padding:0}}.modal-dialog [role=document] p:not(:last-child),main p:not(:last-child){margin-bottom:1em}.modal-dialog [role=document] form+div .with-confirmation,.modal-dialog [role=document] form:not(.filter-bar),main form+div .with-confirmation,main form:not(.filter-bar){margin-bottom:2em}@media (max-width:420px){main form [type=reset]{float:right;margin-right:0!important}}html[data-route^="dc.services.show"] .app-view .actions .external-dashboard{position:absolute;top:50px;right:0}html[data-route^="dc.services.instance"] .app-view>header dl{float:left;margin-top:19px;margin-bottom:23px;margin-right:50px}html[data-route^="dc.services.instance"] .app-view>header dt{font-weight:var(--typo-weight-bold)}html[data-route^="dc.services.instance"] .tab-nav{border-top:var(--decor-border-100)}html[data-route^="dc.services.instance"] .tab-section section:not(:last-child){border-bottom:var(--decor-border-100);padding-bottom:24px}html[data-route^="dc.services.instance"] .tab-nav,html[data-route^="dc.services.instance"] .tab-section section:not(:last-child){border-color:var(--token-color-surface-interactive-active)}html[data-route^="dc.services.instance.metadata"] .tab-section section h2{margin:24px 0 12px}html[data-route^="dc.kv"] .type-toggle{float:right;margin-bottom:0!important}html[data-route^="dc.kv.edit"] h2{border-bottom:var(--decor-border-200);border-color:var(--token-color-surface-interactive-active);padding-bottom:.2em;margin-bottom:.5em}html[data-route^="dc.acls.index"] main td strong{margin-right:3px}@media (max-width:420px){html[data-route^="dc.acls.create"] main header .actions,html[data-route^="dc.acls.edit"] main header .actions{float:none;display:flex;justify-content:space-between;margin-bottom:1em}html[data-route^="dc.acls.create"] main header .actions .with-feedback,html[data-route^="dc.acls.edit"] main header .actions .with-feedback{position:absolute;right:0}html[data-route^="dc.acls.create"] main header .actions .with-confirmation,html[data-route^="dc.acls.edit"] main header .actions .with-confirmation{margin-top:0}}html[data-route^="dc.intentions.edit"] .definition-table{margin-bottom:1em}section[data-route="dc.show.serverstatus"] .server-failure-tolerance{box-shadow:none;padding:var(--padding-y) var(--padding-x);max-width:770px;display:flex;flex-wrap:wrap}section[data-route="dc.show.serverstatus"] .server-failure-tolerance>header{width:100%;display:flex;flex-direction:row;justify-content:space-between;align-items:center;padding-bottom:.5rem;margin-bottom:1rem;border-bottom:var(--decor-border-100);border-color:var(--tone-border)}section[data-route="dc.show.serverstatus"] .server-failure-tolerance header em{font-size:.812rem;background-color:var(--token-color-surface-interactive-active);text-transform:uppercase;font-style:normal}section[data-route="dc.show.serverstatus"] .server-failure-tolerance>section{width:50%}section[data-route="dc.show.serverstatus"] .server-failure-tolerance dl,section[data-route="dc.show.serverstatus"] .server-failure-tolerance>section{display:flex;flex-direction:column}section[data-route="dc.show.serverstatus"] .server-failure-tolerance dl{flex-grow:1;justify-content:space-between}section[data-route="dc.show.serverstatus"] .server-failure-tolerance dl.warning dd::before{--icon-name:icon-alert-circle;--icon-size:icon-800;--icon-color:var(--token-color-foreground-warning);content:"";margin-right:.5rem}section[data-route="dc.show.serverstatus"] .server-failure-tolerance section:first-of-type dl{padding-right:1.5rem}section[data-route="dc.show.serverstatus"] .server-failure-tolerance dd{display:flex;align-items:center;font-size:var(--typo-size-250);color:var(--token-color-hashicorp-brand)}section[data-route="dc.show.serverstatus"] .server-failure-tolerance header span::before{--icon-name:icon-info;--icon-size:icon-300;--icon-color:var(--token-color-foreground-faint);vertical-align:unset;content:""}section[data-route="dc.show.serverstatus"] section:not([class*=-tolerance]) h2{margin-top:1.5rem;margin-bottom:1.5rem}section[data-route="dc.show.serverstatus"] section:not([class*=-tolerance]) header{margin-top:18px;margin-bottom:18px}section[data-route="dc.show.serverstatus"] .redundancy-zones section header{display:flow-root}section[data-route="dc.show.serverstatus"] .redundancy-zones section header h3{float:left;margin-right:.5rem}section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not(.warning){background-color:var(--token-color-surface-strong)}section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl.warning{background-color:var(--token-color-border-warning);color:var(--token-color-palette-amber-400)}section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl.warning::before{--icon-name:icon-alert-circle;--icon-size:icon-000;margin-right:.312rem;content:""}section[data-route="dc.show.serverstatus"] .redundancy-zones section header dt::after{content:":";display:inline-block;vertical-align:revert;background-color:transparent}section[data-route="dc.show.license"] .validity p{color:var(--token-color-foreground-faint)}section[data-route="dc.show.license"] .validity dl{font-size:var(--typo-size-400)}section[data-route="dc.show.license"] .validity dl dt::before{content:"";margin-right:.25rem}section[data-route="dc.show.license"] .validity dl .expired::before{--icon-name:icon-x-circle;--icon-color:var(--token-color-foreground-critical)}section[data-route="dc.show.license"] .validity dl .warning::before{--icon-name:icon-alert-circle;--icon-color:var(--token-color-foreground-warning)}section[data-route="dc.show.license"] .validity dl .valid:not(.warning)::before{--icon-name:icon-check-circle;--icon-color:var(--token-color-foreground-success)}section[data-route="dc.show.license"] aside{box-shadow:none;padding:var(--padding-y) var(--padding-x);width:40%;min-width:413px;margin-top:1rem}section[data-route="dc.show.license"] aside header{margin-bottom:1rem}.prefers-reduced-motion{--icon-loading:icon-loading}@media (prefers-reduced-motion){:root{--icon-loading:icon-loading}}.consul-intention-fieldsets .value->:last-child::before,.consul-intention-fieldsets .value-allow>:last-child::before,.consul-intention-fieldsets .value-deny>:last-child::before{--icon-size:icon-500;--icon-resolution:0.5}.consul-intention-fieldsets .value-allow>:last-child::before,.consul-intention-list td.intent-allow strong::before,.consul-intention-permission-list .intent-allow::before,.consul-intention-search-bar .value-allow span::before{--icon-name:icon-arrow-right;--icon-color:var(--token-color-foreground-success-on-surface)}.consul-intention-fieldsets .value-deny>:last-child::before,.consul-intention-list td.intent-deny strong::before,.consul-intention-permission-list .intent-deny::before,.consul-intention-search-bar .value-deny span::before{--icon-name:icon-skip;--icon-color:var(--token-color-foreground-critical-on-surface)}.consul-intention-fieldsets .value->:last-child::before,.consul-intention-list td.intent- strong::before,.consul-intention-search-bar .value- span::before{--icon-name:icon-layers}*{border-width:0}.animatable.tab-nav ul::after,.consul-auth-method-type,.consul-external-source,.consul-intention-action-warn-modal button.dangerous,.consul-intention-action-warn-modal button.dangerous:disabled,.consul-intention-action-warn-modal button.dangerous:focus,.consul-intention-action-warn-modal button.dangerous:hover:active,.consul-intention-action-warn-modal button.dangerous:hover:not(:disabled):not(:active),.consul-intention-list td.intent- strong,.consul-intention-permission-form button.type-submit,.consul-intention-permission-form button.type-submit:disabled,.consul-intention-permission-form button.type-submit:focus:not(:disabled),.consul-intention-permission-form button.type-submit:hover:not(:disabled),.consul-intention-search-bar .value- span,.consul-kind,.consul-source,.consul-transparent-proxy,.disclosure-menu [aria-expanded]~*>ul>li.dangerous>:first-child,.disclosure-menu [aria-expanded]~*>ul>li.dangerous>:focus:first-child,.disclosure-menu [aria-expanded]~*>ul>li.dangerous>:hover:first-child,.discovery-chain .route-card>header ul li,.informed-action>ul>.dangerous>*,.informed-action>ul>.dangerous>:focus,.informed-action>ul>.dangerous>:hover,.leader,.menu-panel>ul>li.dangerous>:first-child,.menu-panel>ul>li.dangerous>:focus:first-child,.menu-panel>ul>li.dangerous>:hover:first-child,.modal-dialog [role=document]>footer,.modal-dialog [role=document]>header,.more-popover-menu>[type=checkbox]+label+div>ul>li.dangerous>:first-child,.more-popover-menu>[type=checkbox]+label+div>ul>li.dangerous>:focus:first-child,.more-popover-menu>[type=checkbox]+label+div>ul>li.dangerous>:hover:first-child,.popover-menu>[type=checkbox]+label+div>ul>li.dangerous>:first-child,.popover-menu>[type=checkbox]+label+div>ul>li.dangerous>:focus:first-child,.popover-menu>[type=checkbox]+label+div>ul>li.dangerous>:hover:first-child,.tab-nav .selected>*,.topology-metrics-source-type,html[data-route^="dc.acls.index"] main td strong,span.policy-node-identity,span.policy-service-identity,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li.dangerous>:first-child,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li.dangerous>:focus:first-child,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li.dangerous>:hover:first-child,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li.dangerous>:first-child,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li.dangerous>:focus:first-child,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li.dangerous>:hover:first-child{border-style:solid}.consul-auth-method-type,.consul-external-source,.consul-kind,.consul-source,.consul-transparent-proxy,.leader,.topology-metrics-source-type,span.policy-node-identity,span.policy-service-identity{background-color:var(--token-color-surface-strong);border-color:var(--token-color-foreground-faint);color:var(--token-color-foreground-primary)}.consul-intention-list td.intent- strong,.consul-intention-search-bar .value- span,.discovery-chain .route-card>header ul li,.modal-dialog [role=document]>footer,.modal-dialog [role=document]>header,html[data-route^="dc.acls.index"] main td strong{background-color:var(--token-color-surface-strong);border-color:var(--token-color-palette-neutral-300);color:var(--token-color-foreground-strong)}.animatable.tab-nav ul::after,.consul-intention-permission-form button.type-submit,.consul-intention-permission-form button.type-submit:disabled,.tab-nav .selected>*{background-color:var(--token-color-surface-primary);border-color:var(--token-color-foreground-action);color:var(--token-color-foreground-action)}.consul-intention-permission-form button.type-submit:focus:not(:disabled),.consul-intention-permission-form button.type-submit:hover:not(:disabled){background-color:var(--token-color-surface-action);border-color:var(--token-color-foreground-action);color:var(--token-color-palette-blue-500)}.consul-intention-action-warn-modal button.dangerous,.disclosure-menu [aria-expanded]~*>ul>li.dangerous>:first-child,.informed-action>ul>.dangerous>*,.menu-panel>ul>li.dangerous>:first-child,.more-popover-menu>[type=checkbox]+label+div>ul>li.dangerous>:first-child,.popover-menu>[type=checkbox]+label+div>ul>li.dangerous>:first-child,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li.dangerous>:first-child,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li.dangerous>:first-child{background-color:transparent;border-color:var(--token-color-foreground-critical);color:var(--token-color-foreground-critical)}.consul-intention-action-warn-modal button.dangerous:disabled{background-color:var(--token-color-border-critical);border-color:var(--token-color-foreground-disabled);color:var(--token-color-surface-primary)}.consul-intention-action-warn-modal button.dangerous:focus,.consul-intention-action-warn-modal button.dangerous:hover:not(:disabled):not(:active),.disclosure-menu [aria-expanded]~*>ul>li.dangerous>:focus:first-child,.disclosure-menu [aria-expanded]~*>ul>li.dangerous>:hover:first-child,.informed-action>ul>.dangerous>:focus,.informed-action>ul>.dangerous>:hover,.menu-panel>ul>li.dangerous>:focus:first-child,.menu-panel>ul>li.dangerous>:hover:first-child,.more-popover-menu>[type=checkbox]+label+div>ul>li.dangerous>:focus:first-child,.more-popover-menu>[type=checkbox]+label+div>ul>li.dangerous>:hover:first-child,.popover-menu>[type=checkbox]+label+div>ul>li.dangerous>:focus:first-child,.popover-menu>[type=checkbox]+label+div>ul>li.dangerous>:hover:first-child,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li.dangerous>:focus:first-child,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li.dangerous>:hover:first-child,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li.dangerous>:focus:first-child,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li.dangerous>:hover:first-child{background-color:var(--token-color-foreground-critical);border-color:var(--token-color-foreground-critical-high-contrast);color:var(--token-color-surface-primary)}.consul-intention-action-warn-modal button.dangerous:hover:active{background-color:var(--token-color-palette-red-400);border-color:var(--token-color-foreground-critical-high-contrast);color:var(--token-color-surface-primary)}[role=banner] nav:last-of-type .dangerous button:focus,[role=banner] nav:last-of-type .dangerous button:hover{color:var(--token-color-surface-primary)!important}[role=banner] nav:first-of-type .menu-panel a:focus,[role=banner] nav:first-of-type .menu-panel a:hover{background-color:var(--token-color-foreground-action)}.hover\:scale-125:hover{--tw-scale-x:1.25;--tw-scale-y:1.25}.group:hover .group-hover\:opacity-100{opacity:1} \ No newline at end of file diff --git a/agent/uiserver/dist/assets/consul-ui/routes-debug-41d0902009004c6875ddb9882b4ee3f6.js b/agent/uiserver/dist/assets/consul-ui/routes-debug-32b2d92bece3d10b0336085468debd34.js similarity index 100% rename from agent/uiserver/dist/assets/consul-ui/routes-debug-41d0902009004c6875ddb9882b4ee3f6.js rename to agent/uiserver/dist/assets/consul-ui/routes-debug-32b2d92bece3d10b0336085468debd34.js diff --git a/agent/uiserver/dist/assets/consul-ui/routes-c69d5bf72b7c740af5e6ce29eefe65bf.js b/agent/uiserver/dist/assets/consul-ui/routes-e47ed633758c4b43c40de4ae84cdf564.js similarity index 51% rename from agent/uiserver/dist/assets/consul-ui/routes-c69d5bf72b7c740af5e6ce29eefe65bf.js rename to agent/uiserver/dist/assets/consul-ui/routes-e47ed633758c4b43c40de4ae84cdf564.js index 0004d8645f90c..c63b9847238cb 100644 --- a/agent/uiserver/dist/assets/consul-ui/routes-c69d5bf72b7c740af5e6ce29eefe65bf.js +++ b/agent/uiserver/dist/assets/consul-ui/routes-e47ed633758c4b43c40de4ae84cdf564.js @@ -1 +1 @@ -((e,t=("undefined"!=typeof document?document.currentScript.dataset:module.exports))=>{t.routes=JSON.stringify(e)})({dc:{_options:{path:"/:dc"},index:{_options:{path:"/",redirect:"../services"}},show:{_options:{path:"/overview",abilities:["access overview"]},serverstatus:{_options:{path:"/server-status",abilities:["read servers"]}},cataloghealth:{_options:{path:"/catalog-health",abilities:["access overview"]}},license:{_options:{path:"/license",abilities:["read license"]}}},services:{_options:{path:"/services"},index:{_options:{path:"/",queryParams:{sortBy:"sort",status:"status",source:"source",kind:"kind",searchproperty:{as:"searchproperty",empty:[["Partition","Name","Tags","PeerName"]]},search:{as:"filter",replace:!0}}}},show:{_options:{path:"/:name"},instances:{_options:{path:"/instances",queryParams:{sortBy:"sort",status:"status",source:"source",searchproperty:{as:"searchproperty",empty:[["Name","Node","Tags","ID","Address","Port","Service.Meta","Node.Meta"]]},search:{as:"filter",replace:!0}}}},intentions:{_options:{path:"/intentions"},index:{_options:{path:"",queryParams:{sortBy:"sort",access:"access",searchproperty:{as:"searchproperty",empty:[["SourceName","DestinationName"]]},search:{as:"filter",replace:!0}}}},edit:{_options:{path:"/:intention_id"}},create:{_options:{template:"../edit",path:"/create"}}},topology:{_options:{path:"/topology"}},services:{_options:{path:"/services",queryParams:{sortBy:"sort",instance:"instance",searchproperty:{as:"searchproperty",empty:[["Name","Tags"]]},search:{as:"filter",replace:!0}}}},upstreams:{_options:{path:"/upstreams",queryParams:{sortBy:"sort",instance:"instance",searchproperty:{as:"searchproperty",empty:[["Name","Tags"]]},search:{as:"filter",replace:!0}}}},routing:{_options:{path:"/routing"}},tags:{_options:{path:"/tags"}}},instance:{_options:{path:"/:name/instances/:node/:id",redirect:"./healthchecks"},healthchecks:{_options:{path:"/health-checks",queryParams:{sortBy:"sort",status:"status",check:"check",searchproperty:{as:"searchproperty",empty:[["Name","Node","CheckID","Notes","Output","ServiceTags"]]},search:{as:"filter",replace:!0}}}},upstreams:{_options:{path:"/upstreams",queryParams:{sortBy:"sort",search:{as:"filter",replace:!0},searchproperty:{as:"searchproperty",empty:[["DestinationName","LocalBindAddress","LocalBindPort"]]}}}},exposedpaths:{_options:{path:"/exposed-paths"}},addresses:{_options:{path:"/addresses"}},metadata:{_options:{path:"/metadata"}}},notfound:{_options:{path:"/:name/:node/:id"}}},nodes:{_options:{path:"/nodes"},index:{_options:{path:"",queryParams:{sortBy:"sort",status:"status",searchproperty:{as:"searchproperty",empty:[["Node","Address","Meta","PeerName"]]},search:{as:"filter",replace:!0}}}},show:{_options:{path:"/:name"},healthchecks:{_options:{path:"/health-checks",queryParams:{sortBy:"sort",status:"status",kind:"kind",check:"check",searchproperty:{as:"searchproperty",empty:[["Name","Service","CheckID","Notes","Output","ServiceTags"]]},search:{as:"filter",replace:!0}}}},services:{_options:{path:"/service-instances",queryParams:{sortBy:"sort",status:"status",source:"source",searchproperty:{as:"searchproperty",empty:[["Name","Tags","ID","Address","Port","Service.Meta"]]},search:{as:"filter",replace:!0}}}},rtt:{_options:{path:"/round-trip-time"}},metadata:{_options:{path:"/metadata"}}}},intentions:{_options:{path:"/intentions"},index:{_options:{path:"/",queryParams:{sortBy:"sort",access:"access",searchproperty:{as:"searchproperty",empty:[["SourceName","DestinationName"]]},search:{as:"filter",replace:!0}}}},edit:{_options:{path:"/:intention_id",abilities:["read intentions"]}},create:{_options:{template:"../edit",path:"/create",abilities:["create intentions"]}}},kv:{_options:{path:"/kv"},index:{_options:{path:"/",queryParams:{sortBy:"sort",kind:"kind",search:{as:"filter",replace:!0}}}},folder:{_options:{template:"../index",path:"/*key"}},edit:{_options:{path:"/*key/edit"}},create:{_options:{template:"../edit",path:"/*key/create",abilities:["create kvs"]}},"root-create":{_options:{template:"../edit",path:"/create",abilities:["create kvs"]}}},acls:{_options:{path:"/acls",abilities:["access acls"]},policies:{_options:{path:"/policies",abilities:["read policies"]},edit:{_options:{path:"/:id"}},create:{_options:{path:"/create",abilities:["create policies"]}}},roles:{_options:{path:"/roles",abilities:["read roles"]},edit:{_options:{path:"/:id"}},create:{_options:{path:"/create",abilities:["create roles"]}}},tokens:{_options:{path:"/tokens",abilities:["access acls"]},edit:{_options:{path:"/:id"}},create:{_options:{path:"/create",abilities:["create tokens"]}}},"auth-methods":{_options:{path:"/auth-methods",abilities:["read auth-methods"]},show:{_options:{path:"/:id"},"auth-method":{_options:{path:"/auth-method"}},"binding-rules":{_options:{path:"/binding-rules"}},"nspace-rules":{_options:{path:"/nspace-rules"}}}}},"routing-config":{_options:{path:"/routing-config/:name"}}},index:{_options:{path:"/"}},settings:{_options:{path:"/settings"}},setting:{_options:{path:"/setting",redirect:"../settings"}},notfound:{_options:{path:"/*notfound"}}}) +((e,t=("undefined"!=typeof document?document.currentScript.dataset:module.exports))=>{t.routes=JSON.stringify(e)})({dc:{_options:{path:"/:dc"},index:{_options:{path:"/",redirect:"../services"}},show:{_options:{path:"/overview",abilities:["access overview"]},serverstatus:{_options:{path:"/server-status",abilities:["read servers"]}},cataloghealth:{_options:{path:"/catalog-health",abilities:["access overview"]}},license:{_options:{path:"/license",abilities:["read license"]}}},services:{_options:{path:"/services"},index:{_options:{path:"/",queryParams:{sortBy:"sort",status:"status",source:"source",kind:"kind",searchproperty:{as:"searchproperty",empty:[["Partition","Name","Tags","PeerName"]]},search:{as:"filter",replace:!0}}}},show:{_options:{path:"/:name"},instances:{_options:{path:"/instances",queryParams:{sortBy:"sort",status:"status",source:"source",searchproperty:{as:"searchproperty",empty:[["Name","Node","Tags","ID","Address","Port","Service.Meta","Node.Meta"]]},search:{as:"filter",replace:!0}}}},intentions:{_options:{path:"/intentions"},index:{_options:{path:"",queryParams:{sortBy:"sort",access:"access",searchproperty:{as:"searchproperty",empty:[["SourceName","DestinationName"]]},search:{as:"filter",replace:!0}}}},edit:{_options:{path:"/:intention_id"}},create:{_options:{template:"../edit",path:"/create"}}},topology:{_options:{path:"/topology"}},services:{_options:{path:"/services",queryParams:{sortBy:"sort",instance:"instance",searchproperty:{as:"searchproperty",empty:[["Name","Tags"]]},search:{as:"filter",replace:!0}}}},upstreams:{_options:{path:"/upstreams",queryParams:{sortBy:"sort",instance:"instance",searchproperty:{as:"searchproperty",empty:[["Name","Tags"]]},search:{as:"filter",replace:!0}}}},routing:{_options:{path:"/routing"}},tags:{_options:{path:"/tags"}}},instance:{_options:{path:"/:name/instances/:node/:id",redirect:"./healthchecks"},healthchecks:{_options:{path:"/health-checks",queryParams:{sortBy:"sort",status:"status",check:"check",searchproperty:{as:"searchproperty",empty:[["Name","Node","CheckID","Notes","Output","ServiceTags"]]},search:{as:"filter",replace:!0}}}},upstreams:{_options:{path:"/upstreams",queryParams:{sortBy:"sort",search:{as:"filter",replace:!0},searchproperty:{as:"searchproperty",empty:[["DestinationName","LocalBindAddress","LocalBindPort"]]}}}},exposedpaths:{_options:{path:"/exposed-paths"}},addresses:{_options:{path:"/addresses"}},metadata:{_options:{path:"/metadata"}}},notfound:{_options:{path:"/:name/:node/:id"}}},nodes:{_options:{path:"/nodes"},index:{_options:{path:"",queryParams:{sortBy:"sort",status:"status",version:"version",searchproperty:{as:"searchproperty",empty:[["Node","Address","Meta","PeerName"]]},search:{as:"filter",replace:!0}}}},show:{_options:{path:"/:name"},healthchecks:{_options:{path:"/health-checks",queryParams:{sortBy:"sort",status:"status",kind:"kind",check:"check",searchproperty:{as:"searchproperty",empty:[["Name","Service","CheckID","Notes","Output","ServiceTags"]]},search:{as:"filter",replace:!0}}}},services:{_options:{path:"/service-instances",queryParams:{sortBy:"sort",status:"status",source:"source",searchproperty:{as:"searchproperty",empty:[["Name","Tags","ID","Address","Port","Service.Meta"]]},search:{as:"filter",replace:!0}}}},rtt:{_options:{path:"/round-trip-time"}},metadata:{_options:{path:"/metadata"}}}},intentions:{_options:{path:"/intentions"},index:{_options:{path:"/",queryParams:{sortBy:"sort",access:"access",searchproperty:{as:"searchproperty",empty:[["SourceName","DestinationName"]]},search:{as:"filter",replace:!0}}}},edit:{_options:{path:"/:intention_id",abilities:["read intentions"]}},create:{_options:{template:"../edit",path:"/create",abilities:["create intentions"]}}},kv:{_options:{path:"/kv"},index:{_options:{path:"/",queryParams:{sortBy:"sort",kind:"kind",search:{as:"filter",replace:!0}}}},folder:{_options:{template:"../index",path:"/*key"}},edit:{_options:{path:"/*key/edit"}},create:{_options:{template:"../edit",path:"/*key/create",abilities:["create kvs"]}},"root-create":{_options:{template:"../edit",path:"/create",abilities:["create kvs"]}}},acls:{_options:{path:"/acls",abilities:["access acls"]},policies:{_options:{path:"/policies",abilities:["read policies"]},edit:{_options:{path:"/:id"}},create:{_options:{path:"/create",abilities:["create policies"]}}},roles:{_options:{path:"/roles",abilities:["read roles"]},edit:{_options:{path:"/:id"}},create:{_options:{path:"/create",abilities:["create roles"]}}},tokens:{_options:{path:"/tokens",abilities:["access acls"]},edit:{_options:{path:"/:id"}},create:{_options:{path:"/create",abilities:["create tokens"]}}},"auth-methods":{_options:{path:"/auth-methods",abilities:["read auth-methods"]},show:{_options:{path:"/:id"},"auth-method":{_options:{path:"/auth-method"}},"binding-rules":{_options:{path:"/binding-rules"}},"nspace-rules":{_options:{path:"/nspace-rules"}}}}},"routing-config":{_options:{path:"/routing-config/:name"}}},index:{_options:{path:"/"}},settings:{_options:{path:"/settings"}},setting:{_options:{path:"/setting",redirect:"../settings"}},notfound:{_options:{path:"/*notfound"}}}) diff --git a/agent/uiserver/dist/assets/consul-ui/services-faa0d1867ff0795f940a4199bcf17128.js b/agent/uiserver/dist/assets/consul-ui/services-1f3464a4359aae30f3d6b0616a7b8be5.js similarity index 100% rename from agent/uiserver/dist/assets/consul-ui/services-faa0d1867ff0795f940a4199bcf17128.js rename to agent/uiserver/dist/assets/consul-ui/services-1f3464a4359aae30f3d6b0616a7b8be5.js diff --git a/agent/uiserver/dist/assets/consul-ui/services-debug-d1862bae590c1c8cd6dc0dd81645801a.js b/agent/uiserver/dist/assets/consul-ui/services-debug-68ed09c2ecbaa3f9ae29106fe0349617.js similarity index 100% rename from agent/uiserver/dist/assets/consul-ui/services-debug-d1862bae590c1c8cd6dc0dd81645801a.js rename to agent/uiserver/dist/assets/consul-ui/services-debug-68ed09c2ecbaa3f9ae29106fe0349617.js diff --git a/agent/uiserver/dist/assets/init-b7460a439b88b483c51ff7f67c5a5a24.js b/agent/uiserver/dist/assets/init-b7460a439b88b483c51ff7f67c5a5a24.js new file mode 100644 index 0000000000000..c8f6cd956953d --- /dev/null +++ b/agent/uiserver/dist/assets/init-b7460a439b88b483c51ff7f67c5a5a24.js @@ -0,0 +1,5 @@ +(function(e,t){const n=new Map(Object.entries(JSON.parse(e.querySelector(`[data-${t}-fs]`).textContent))),o=function(t){var n=e.createElement("script") +n.src=t,e.body.appendChild(n)} +"TextDecoder"in window||(o(n.get(`${["text-encoding","encoding-indexes"].join("/")}.js`)),o(n.get(`${["text-encoding","encoding"].join("/")}.js`))),window.CSS&&window.CSS.escape||o(n.get(`${["css.escape","css.escape"].join("/")}.js`)) +try{const n=e.querySelector(`[name="${t}/config/environment"]`),o=JSON.parse(e.querySelector(`[data-${t}-config]`).textContent),c=JSON.parse(decodeURIComponent(n.getAttribute("content"))),s="string"!=typeof o.ContentPath?"":o.ContentPath +s.length>0&&(c.rootURL=s),n.setAttribute("content",encodeURIComponent(JSON.stringify(c)))}catch(c){throw new Error(`Unable to parse ${t} settings: ${c.message}`)}})(document,"consul-ui") diff --git a/agent/uiserver/dist/assets/init-fe2561b45ce1429092f4a9a2bbb9ce71.js b/agent/uiserver/dist/assets/init-fe2561b45ce1429092f4a9a2bbb9ce71.js deleted file mode 100644 index 084a65b5555a3..0000000000000 --- a/agent/uiserver/dist/assets/init-fe2561b45ce1429092f4a9a2bbb9ce71.js +++ /dev/null @@ -1,5 +0,0 @@ -(function(e,t){const n=new Map(Object.entries(JSON.parse(e.querySelector("[data-consul-ui-fs]").textContent))),o=function(t){var n=e.createElement("script") -n.src=t,e.body.appendChild(n)} -"TextDecoder"in window||(o(n.get(`${["text-encoding","encoding-indexes"].join("/")}.js`)),o(n.get(`${["text-encoding","encoding"].join("/")}.js`))),window.CSS&&window.CSS.escape||o(n.get(`${["css.escape","css.escape"].join("/")}.js`)) -try{const t=e.querySelector('[name="consul-ui/config/environment"]'),n=JSON.parse(e.querySelector("[data-consul-ui-config]").textContent),o=JSON.parse(decodeURIComponent(t.getAttribute("content"))),c="string"!=typeof n.ContentPath?"":n.ContentPath -c.length>0&&(o.rootURL=c),t.setAttribute("content",encodeURIComponent(JSON.stringify(o)))}catch(c){throw new Error(`Unable to parse consul-ui settings: ${c.message}`)}})(document) diff --git a/agent/uiserver/dist/assets/metrics-providers/consul-5e97a9af114229497d43377450c54418.js b/agent/uiserver/dist/assets/metrics-providers/consul-01a9b050be20fe471510e862e86d5d73.js similarity index 100% rename from agent/uiserver/dist/assets/metrics-providers/consul-5e97a9af114229497d43377450c54418.js rename to agent/uiserver/dist/assets/metrics-providers/consul-01a9b050be20fe471510e862e86d5d73.js diff --git a/agent/uiserver/dist/assets/metrics-providers/prometheus-8779f1c99f6a15611567154767f1f674.js b/agent/uiserver/dist/assets/metrics-providers/prometheus-b790531c6c9836e44ba75fe16468fa27.js similarity index 100% rename from agent/uiserver/dist/assets/metrics-providers/prometheus-8779f1c99f6a15611567154767f1f674.js rename to agent/uiserver/dist/assets/metrics-providers/prometheus-b790531c6c9836e44ba75fe16468fa27.js diff --git a/agent/uiserver/dist/assets/vendor-aeac0d1e27f3b95c9b4bad3aac59a219.js b/agent/uiserver/dist/assets/vendor-892a8787e7c054f43bebe02b1e5bc878.js similarity index 63% rename from agent/uiserver/dist/assets/vendor-aeac0d1e27f3b95c9b4bad3aac59a219.js rename to agent/uiserver/dist/assets/vendor-892a8787e7c054f43bebe02b1e5bc878.js index 88a469d18522f..a946838e47e41 100644 --- a/agent/uiserver/dist/assets/vendor-aeac0d1e27f3b95c9b4bad3aac59a219.js +++ b/agent/uiserver/dist/assets/vendor-892a8787e7c054f43bebe02b1e5bc878.js @@ -3,28 +3,28 @@ return e}(window.EmberENV||{},{FEATURES:{},EXTEND_PROTOTYPES:{Date:!1},_APPLICAT var loader,define,requireModule,require,requirejs,runningTests=!1;(function(e){"use strict" function t(){var e=Object.create(null) return e.__=void 0,delete e.__,e}var r={loader:loader,define:define,requireModule:requireModule,require:require,requirejs:requirejs} -requirejs=require=requireModule=function(e){for(var t=[],r=c(e,"(require)",t),n=t.length-1;n>=0;n--)t[n].exports() +requirejs=require=requireModule=function(e){for(var t=[],r=u(e,"(require)",t),n=t.length-1;n>=0;n--)t[n].exports() return r.module.exports},loader={noConflict:function(t){var n,i for(n in t)t.hasOwnProperty(n)&&r.hasOwnProperty(n)&&(i=t[n],e[i]=e[n],e[n]=r[n])},makeDefaultExport:!0} var n=t(),i=(t(),0) -function o(e){throw new Error("an unsupported module was defined, expected `define(id, deps, module)` instead got: `"+e+"` arguments to define`")}var s=["require","exports","module"] -function a(e,t,r,n){this.uuid=i++,this.id=e,this.deps=!t.length&&r.length?s:t,this.module={exports:{}},this.callback=r,this.hasExportsAsDep=!1,this.isAlias=n,this.reified=new Array(t.length),this.state="new"}function l(){}function u(e){this.id=e}function c(e,t,r){for(var i=n[e]||n[e+"/index"];i&&i.isAlias;)i=n[i.id]||n[i.id+"/index"] -return i||function(e,t){throw new Error("Could not find module `"+e+"` imported from `"+t+"`")}(e,t),r&&"pending"!==i.state&&"finalized"!==i.state&&(i.findDeps(r),r.push(i)),i}function d(e,t){if("."!==e.charAt(0))return e +var o=["require","exports","module"] +function s(e,t,r,n){this.uuid=i++,this.id=e,this.deps=!t.length&&r.length?o:t,this.module={exports:{}},this.callback=r,this.hasExportsAsDep=!1,this.isAlias=n,this.reified=new Array(t.length),this.state="new"}function a(){}function l(e){this.id=e}function u(e,t,r){for(var i=n[e]||n[e+"/index"];i&&i.isAlias;)i=n[i.id]||n[i.id+"/index"] +return i||function(e,t){throw new Error("Could not find module `"+e+"` imported from `"+t+"`")}(e,t),r&&"pending"!==i.state&&"finalized"!==i.state&&(i.findDeps(r),r.push(i)),i}function c(e,t){if("."!==e.charAt(0))return e for(var r=e.split("/"),n=t.split("/").slice(0,-1),i=0,o=r.length;iu;)l.call(e,s=a[u++])&&t.push(s) -return t}},{102:102,105:105,106:106}],60:[function(e,t,r){var n=e(68),i=e(50),o=e(70),s=e(116),a=e(52),l=function(e,t,r){var u,c,d,h,p=e&l.F,f=e&l.G,m=e&l.S,g=e&l.P,v=e&l.B,b=f?n:m?n[t]||(n[t]={}):(n[t]||{}).prototype,y=f?i:i[t]||(i[t]={}),_=y.prototype||(y.prototype={}) -for(u in f&&(r=t),r)d=((c=!p&&b&&void 0!==b[u])?b:r)[u],h=v&&c?a(d,n):g&&"function"==typeof d?a(Function.call,d):d,b&&s(b,u,d,e&l.U),y[u]!=d&&o(y,u,h),g&&_[u]!=d&&(_[u]=d)} -n.core=i,l.F=1,l.G=2,l.S=4,l.P=8,l.B=16,l.W=32,l.U=64,l.R=128,t.exports=l},{116:116,50:50,52:52,68:68,70:70}],61:[function(e,t,r){var n=e(150)("match") +return t}},{102:102,105:105,106:106}],60:[function(e,t,r){var n=e(68),i=e(50),o=e(70),s=e(116),a=e(52),l="prototype",u=function(e,t,r){var c,d,h,p,f=e&u.F,m=e&u.G,g=e&u.S,v=e&u.P,b=e&u.B,y=m?n:g?n[t]||(n[t]={}):(n[t]||{})[l],_=m?i:i[t]||(i[t]={}),w=_[l]||(_[l]={}) +for(c in m&&(r=t),r)h=((d=!f&&y&&void 0!==y[c])?y:r)[c],p=b&&d?a(h,n):v&&"function"==typeof h?a(Function.call,h):h,y&&s(y,c,h,e&u.U),_[c]!=h&&o(_,c,p),v&&w[c]!=h&&(w[c]=h)} +n.core=i,u.F=1,u.G=2,u.S=4,u.P=8,u.B=16,u.W=32,u.U=64,u.R=128,t.exports=u},{116:116,50:50,52:52,68:68,70:70}],61:[function(e,t,r){var n=e(150)("match") t.exports=function(e){var t=/./ try{"/./"[e](t)}catch(r){try{return t[n]=!1,!"/./"[e](t)}catch(i){}}return!0}},{150:150}],62:[function(e,t,r){arguments[4][21][0].apply(r,arguments)},{21:21}],63:[function(e,t,r){"use strict" e(246) @@ -190,10 +190,10 @@ var n=e(96),i=e(114),o=e(122),s={} e(70)(s,e(150)("iterator"),(function(){return this})),t.exports=function(e,t,r){e.prototype=n(s,{next:i(1,r)}),o(e,t+" Iterator")}},{114:114,122:122,150:150,70:70,96:96}],83:[function(e,t,r){"use strict" var n=e(87),i=e(60),o=e(116),s=e(70),a=e(86),l=e(82),u=e(122),c=e(103),d=e(150)("iterator"),h=!([].keys&&"next"in[].keys()),p="keys",f="values",m=function(){return this} t.exports=function(e,t,r,g,v,b,y){l(r,t,g) -var _,w,O,x=function(e){if(!h&&e in E)return E[e] -switch(e){case p:case f:return function(){return new r(this,e)}}return function(){return new r(this,e)}},P=t+" Iterator",S=v==f,T=!1,E=e.prototype,C=E[d]||E["@@iterator"]||v&&E[v],k=C||x(v),M=v?S?x("entries"):k:void 0,A="Array"==t&&E.entries||C -if(A&&(O=c(A.call(new e)))!==Object.prototype&&O.next&&(u(O,P,!0),n||"function"==typeof O[d]||s(O,d,m)),S&&C&&C.name!==f&&(T=!0,k=function(){return C.call(this)}),n&&!y||!h&&!T&&E[d]||s(E,d,k),a[t]=k,a[P]=m,v)if(_={values:S?k:x(f),keys:b?k:x(p),entries:M},y)for(w in _)w in E||o(E,w,_[w]) -else i(i.P+i.F*(h||T),t,_) +var _,w,O,x=function(e){if(!h&&e in k)return k[e] +switch(e){case p:case f:return function(){return new r(this,e)}}return function(){return new r(this,e)}},S=t+" Iterator",T=v==f,P=!1,k=e.prototype,E=k[d]||k["@@iterator"]||v&&k[v],C=E||x(v),M=v?T?x("entries"):C:void 0,j="Array"==t&&k.entries||E +if(j&&(O=c(j.call(new e)))!==Object.prototype&&O.next&&(u(O,S,!0),n||"function"==typeof O[d]||s(O,d,m)),T&&E&&E.name!==f&&(P=!0,C=function(){return E.call(this)}),n&&!y||!h&&!P&&k[d]||s(k,d,C),a[t]=C,a[S]=m,v)if(_={values:T?C:x(f),keys:b?C:x(p),entries:M},y)for(w in _)w in k||o(k,w,_[w]) +else i(i.P+i.F*(h||P),t,_) return _}},{103:103,116:116,122:122,150:150,60:60,70:70,82:82,86:86,87:87}],84:[function(e,t,r){var n=e(150)("iterator"),i=!1 try{var o=[7][n]() o.return=function(){i=!0},Array.from(o,(function(){throw 2}))}catch(s){}t.exports=function(e,t){if(!t&&!i)return!1 @@ -224,11 +224,11 @@ t=e,r=n})),this.resolve=n(t),this.reject=n(r)}t.exports.f=function(e){return new var n=e(56),i=e(105),o=e(102),s=e(106),a=e(140),l=e(75),u=Object.assign t.exports=!u||e(62)((function(){var e={},t={},r=Symbol(),n="abcdefghijklmnopqrst" return e[r]=7,n.split("").forEach((function(e){t[e]=e})),7!=u({},e)[r]||Object.keys(u({},t)).join("")!=n}))?function(e,t){for(var r=a(e),u=arguments.length,c=1,d=o.f,h=s.f;u>c;)for(var p,f=l(arguments[c++]),m=d?i(f).concat(d(f)):i(f),g=m.length,v=0;g>v;)p=m[v++],n&&!h.call(f,p)||(r[p]=f[p]) -return r}:u},{102:102,105:105,106:106,140:140,56:56,62:62,75:75}],96:[function(e,t,r){var n=e(36),i=e(98),o=e(58),s=e(123)("IE_PROTO"),a=function(){},l=function(){var t,r=e(57)("iframe"),n=o.length -for(r.style.display="none",e(71).appendChild(r),r.src="javascript:",(t=r.contentWindow.document).open(),t.write(" X"),t.close() -let n=t.body -r=n.firstElementChild.offsetHeight,document.body.removeChild(e)}return r}function i(e,t,r,n){let o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[] -const s={element:r,scrollLeft:0,scrollTop:0},a=r.scrollWidth-r.clientWidth,l=r.scrollHeight-r.clientHeight,u={deltaXNegative:-r.scrollLeft,deltaXPositive:a-r.scrollLeft,deltaYNegative:-r.scrollTop,deltaYPositive:l-r.scrollTop},c=window.getComputedStyle(r) -return"hidden"!==c.overflowX&&(s.scrollLeft=r.scrollLeft+e,e>u.deltaXPositive?e-=u.deltaXPositive:eu.deltaYPositive?t-=u.deltaYPositive:t4&&void 0!==arguments[4]?arguments[4]:[] +const o={element:r,scrollLeft:0,scrollTop:0},a=r.scrollWidth-r.clientWidth,l=r.scrollHeight-r.clientHeight,u=-r.scrollLeft,c=a-r.scrollLeft,d=-r.scrollTop,h=l-r.scrollTop,p=window.getComputedStyle(r) +return"hidden"!==p.overflowX&&(o.scrollLeft=r.scrollLeft+e,e>c?e-=c:eh?t-=h:t0&&void 0!==arguments[0]?arguments[0]:requirejs.entries,n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],u=i.default if(n&&(0,r.isPresent)(l))return l let c=(0,t.A)(s(e)).find((e=>e===a));(0,r.isPresent)(c)&&(u=(0,o.default)(requireModule(c).default,u)) @@ -8344,8 +9069,7 @@ let{type:u,value:c,context:d={}}=r,h=(0,t.get)(a,u) if(s)return d=(0,n.assign)({},d,{description:l}),{value:c,type:u,message:h,context:d} if(d.message){let t=d.message if("function"==typeof t){let r=t(e,u,c,d) -return r}return a.formatMessage(t,(0,n.assign)({description:l},d))}return a.formatMessage(h,(0,n.assign)({description:l},d))}})) -define("ember-changeset-validations/utils/with-defaults",["exports","@ember/polyfills"],(function(e,t){"use strict" +return r}return a.formatMessage(t,(0,n.assign)({description:l},d))}return a.formatMessage(h,(0,n.assign)({description:l},d))}})),define("ember-changeset-validations/utils/with-defaults",["exports","@ember/polyfills"],(function(e,t){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} return(0,t.assign)((0,t.assign)({},r),e)}})),define("ember-changeset-validations/utils/wrap",["exports","@ember/array"],(function(e,t){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){if((0,t.isArray)(e))return(0,t.A)(e) @@ -8354,12 +9078,13 @@ Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){let e=argu return function(i,o,s,a){let l=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},u=(0,n.assign)({},l,a),c=(0,r.default)(o,e,u,i) return!0===c||(0,t.default)(i,c)}}})),define("ember-changeset-validations/validators/date",["exports","ember-changeset-validations/utils/validation-errors","ember-changeset-validations/utils/with-defaults","ember-changeset-validations/utils/to-date"],(function(e,t,r,n){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{} -return e=(0,r.default)(e,{allowBlank:!1,errorFormat:i}),(r,i)=>{let{allowBlank:s}=e,{before:a,onOrBefore:l,after:u,onOrAfter:c,message:d}=e,h="date" -if(s&&null==i)return!0 -let p=(0,n.default)(i) -return o(p)?a&&(a=(0,n.default)(a),d=d||`[BEFORE] date is NOT before ${i}`,h="before",p>=a)?(0,t.default)(r,{type:h,value:i,context:{before:a,message:d}}):l&&(l=(0,n.default)(l),d=d||`[ON OR BEFORE] date is NOT on or before ${i}`,h="onOrBefore",p>l)?(0,t.default)(r,{type:h,value:i,context:{onOrBefore:l,message:d}}):u&&(u=(0,n.default)(u),d=d||`[AFTER] date is NOT after ${i}`,h="after",p<=u)?(0,t.default)(r,{type:h,value:i,context:{after:u,message:d}}):!(c&&(c=(0,n.default)(c),d=d||`[ON OR AFTER] date is NOT on or after ${i}`,h="onOrAfter",p{let{allowBlank:o}=e,{before:s,onOrBefore:a,after:l,onOrAfter:u,message:c}=e,d="date" +if(o&&null==i)return!0 +let h=(0,n.default)(i) +return(p=h)instanceof Date&&!isNaN(p)?s&&(s=(0,n.default)(s),c=c||`[BEFORE] date is NOT before ${i}`,d="before",h>=s)?(0,t.default)(r,{type:d,value:i,context:{before:s,message:c}}):a&&(a=(0,n.default)(a),c=c||`[ON OR BEFORE] date is NOT on or before ${i}`,d="onOrBefore",h>a)?(0,t.default)(r,{type:d,value:i,context:{onOrBefore:a,message:c}}):l&&(l=(0,n.default)(l),c=c||`[AFTER] date is NOT after ${i}`,d="after",h<=l)?(0,t.default)(r,{type:d,value:i,context:{after:l,message:c}}):!(u&&(u=(0,n.default)(u),c=c||`[ON OR AFTER] date is NOT on or after ${i}`,d="onOrAfter",h0&&void 0!==arguments[0]?arguments[0]:{} e.list&&(e.in=e.list) return(n,i)=>{let o=(0,r.default)(i,e,null,n) @@ -8372,7 +9097,7 @@ Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){let e=argu e.list&&(e.in=e.list) return(n,i)=>{let o=(0,r.default)(i,e,null,n) return!0===o||(0,t.default)(n,o)}}})),define("ember-changeset-validations/validators/index",["exports","ember-changeset-validations/validators/date","ember-changeset-validations/validators/presence","ember-changeset-validations/validators/length","ember-changeset-validations/validators/number","ember-changeset-validations/validators/format","ember-changeset-validations/validators/inclusion","ember-changeset-validations/validators/exclusion","ember-changeset-validations/validators/confirmation"],(function(e,t,r,n,i,o,s,a,l){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"validateDate",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"validatePresence",{enumerable:!0,get:function(){return r.default}}),Object.defineProperty(e,"validateLength",{enumerable:!0,get:function(){return n.default}}),Object.defineProperty(e,"validateNumber",{enumerable:!0,get:function(){return i.default}}),Object.defineProperty(e,"validateFormat",{enumerable:!0,get:function(){return o.default}}),Object.defineProperty(e,"validateInclusion",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(e,"validateExclusion",{enumerable:!0,get:function(){return a.default}}),Object.defineProperty(e,"validateConfirmation",{enumerable:!0,get:function(){return l.default}})})),define("ember-changeset-validations/validators/length",["exports","ember-changeset-validations/utils/validation-errors","ember-changeset-validations/utils/with-defaults","ember-validators/length"],(function(e,t,r,n){"use strict" +Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"validateConfirmation",{enumerable:!0,get:function(){return l.default}}),Object.defineProperty(e,"validateDate",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"validateExclusion",{enumerable:!0,get:function(){return a.default}}),Object.defineProperty(e,"validateFormat",{enumerable:!0,get:function(){return o.default}}),Object.defineProperty(e,"validateInclusion",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(e,"validateLength",{enumerable:!0,get:function(){return n.default}}),Object.defineProperty(e,"validateNumber",{enumerable:!0,get:function(){return i.default}}),Object.defineProperty(e,"validatePresence",{enumerable:!0,get:function(){return r.default}})})),define("ember-changeset-validations/validators/length",["exports","ember-changeset-validations/utils/validation-errors","ember-changeset-validations/utils/with-defaults","ember-validators/length"],(function(e,t,r,n){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{} return e=(0,r.default)(e,{useBetweenMessage:!0}),(r,i)=>{let o=(0,n.default)(i,e,null,r) return!0===o||(0,t.default)(r,o)}}})),define("ember-changeset-validations/validators/number",["exports","ember-changeset-validations/utils/validation-errors","ember-changeset-validations/utils/with-defaults","ember-validators/number"],(function(e,t,r,n){"use strict" @@ -8399,30 +9124,34 @@ if(t)return(0,n.isChangeset)(t)?t:(0,n.isObject)(i)?(0,n.isPromise)(t)?t.then((e var o=(0,t.helper)(i) e.default=o})),define("ember-changeset/index",["exports","@ember/debug","@ember/object/compat","validated-changeset","@ember/array/proxy","@ember/object/proxy","@ember/object","ember-changeset/utils/merge-deep","ember-changeset/utils/is-object","@glimmer/tracking"],(function(e,t,r,n,i,o,s,a,l,u){"use strict" var c,d,h,p -function f(e,t,r,n){r&&Object.defineProperty(e,t,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(n):void 0})}function m(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function g(e,t,r,n,i){var o={} -return Object.keys(n).forEach((function(e){o[e]=n[e]})),o.enumerable=!!o.enumerable,o.configurable=!!o.configurable,("value"in o||o.initializer)&&(o.writable=!0),o=r.slice().reverse().reduce((function(r,n){return n(e,t,r)||r}),o),i&&void 0!==o.initializer&&(o.value=o.initializer?o.initializer.call(i):void 0,o.initializer=void 0),void 0===o.initializer&&(Object.defineProperty(e,t,o),o=null),o}Object.defineProperty(e,"__esModule",{value:!0}),e.buildOldValues=b,e.changeset=O,e.Changeset=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:v,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{} -const i=O(e,t,r,n) -return new Proxy(i,{get:(e,t)=>e.get(t.toString()),set:(e,t,r)=>(e.set(t.toString(),r),!0)})},e.default=e.EmberChangeset=void 0 -const v=()=>!0 -function b(e,t,r){const n=Object.create(null) +function f(e,t,r,n){r&&Object.defineProperty(e,t,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(n):void 0})}function m(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var r=e[Symbol.toPrimitive] +if(void 0!==r){var n=r.call(e,t||"default") +if("object"!=typeof n)return n +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function g(e,t,r,n,i){var o={} +return Object.keys(n).forEach((function(e){o[e]=n[e]})),o.enumerable=!!o.enumerable,o.configurable=!!o.configurable,("value"in o||o.initializer)&&(o.writable=!0),o=r.slice().reverse().reduce((function(r,n){return n(e,t,r)||r}),o),i&&void 0!==o.initializer&&(o.value=o.initializer?o.initializer.call(i):void 0,o.initializer=void 0),void 0===o.initializer&&(Object.defineProperty(e,t,o),o=null),o}Object.defineProperty(e,"__esModule",{value:!0}),e.Changeset=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:y,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{} +const i=S(e,t,r,n) +return new Proxy(i,{get:(e,t)=>e.get(t.toString()),set:(e,t,r)=>(e.set(t.toString(),r),!0)})},e.EmberChangeset=void 0,e.buildOldValues=_,e.changeset=S,e.default=void 0 +const v="_changes",b="_content",y=()=>!0 +function _(e,t,r){const n=Object.create(null) for(let i of t)n[i.key]=r(e,i.key) -return n}function y(e){return function(e){return!(!e||!(e instanceof o.default||e instanceof i.default))}(e)?y((0,s.get)(e,"content")):e}let _ -_=require("@ember-data/model").default -let w=(c=class extends n.BufferedChangeset{constructor(){super(...arguments),f(this,"_changes",d,this),f(this,"_errors",h,this),f(this,"_content",p,this),m(this,"isObject",l.default),m(this,"maybeUnwrapProxy",y),m(this,"getDeep",s.get),m(this,"mergeDeep",a.default)}safeGet(e,t){var r,n,i -return _&&"belongsTo"==(null===(r=e.relationshipFor)||void 0===r||null===(n=r.call(e,t))||void 0===n||null===(i=n.meta)||void 0===i?void 0:i.kind)?e.belongsTo(t).value():(0,s.get)(e,t)}safeSet(e,t,r){return(0,s.set)(e,t,r)}get isValid(){return super.isValid}get isInvalid(){return super.isInvalid}get isPristine(){return super.isPristine}get isDirty(){return super.isDirty}get pendingData(){let e=this._content,t=this._changes,r=this.mergeDeep(Object.create(Object.getPrototypeOf(e)),e,{safeGet:s.get,safeSet:s.set}) +return n}function w(e){return function(e){return!(!e||!(e instanceof o.default||e instanceof i.default))}(e)?w((0,s.get)(e,"content")):e}let O +O=require("@ember-data/model").default +let x=(c=class extends n.BufferedChangeset{constructor(){super(...arguments),f(this,"_changes",d,this),f(this,"_errors",h,this),f(this,"_content",p,this),m(this,"isObject",l.default),m(this,"maybeUnwrapProxy",w),m(this,"getDeep",s.get),m(this,"mergeDeep",a.default)}safeGet(e,t){var r,n,i +return O&&"belongsTo"==(null===(r=e.relationshipFor)||void 0===r||null===(n=r.call(e,t))||void 0===n||null===(i=n.meta)||void 0===i?void 0:i.kind)?e.belongsTo(t).value():(0,s.get)(e,t)}safeSet(e,t,r){return(0,s.set)(e,t,r)}get isValid(){return super.isValid}get isInvalid(){return super.isInvalid}get isPristine(){return super.isPristine}get isDirty(){return super.isDirty}get pendingData(){let e=this[b],t=this[v],r=this.mergeDeep(Object.create(Object.getPrototypeOf(e)),e,{safeGet:s.get,safeSet:s.set}) return this.mergeDeep(r,t,{safeGet:s.get,safeSet:s.set})}addError(e,t){return super.addError(e,t),(0,s.notifyPropertyChange)(this,e),t}pushErrors(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n(0,s.notifyPropertyChange)(this,e)))}_deleteKey(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"" const r=super._deleteKey(e,t) return(0,s.notifyPropertyChange)(this,t),r}execute(){let e -if(this.isValid&&this.isDirty){let t=this._content,r=this._changes -e=b(t,this.changes,this.getDeep),this._content=this.mergeDeep(t,r,{safeGet:s.get,safeSet:s.set})}return this._previousContent=e,this}},d=g(c.prototype,"_changes",[u.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=g(c.prototype,"_errors",[u.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p=g(c.prototype,"_content",[u.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),g(c.prototype,"isValid",[r.dependentKeyCompat],Object.getOwnPropertyDescriptor(c.prototype,"isValid"),c.prototype),g(c.prototype,"isInvalid",[r.dependentKeyCompat],Object.getOwnPropertyDescriptor(c.prototype,"isInvalid"),c.prototype),g(c.prototype,"isPristine",[r.dependentKeyCompat],Object.getOwnPropertyDescriptor(c.prototype,"isPristine"),c.prototype),g(c.prototype,"isDirty",[r.dependentKeyCompat],Object.getOwnPropertyDescriptor(c.prototype,"isDirty"),c.prototype),c) -function O(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:v,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{} +if(this.isValid&&this.isDirty){let t=this[b],r=this[v] +e=_(t,this.changes,this.getDeep),this[b]=this.mergeDeep(t,r,{safeGet:s.get,safeSet:s.set})}return this._previousContent=e,this}},d=g(c.prototype,"_changes",[u.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=g(c.prototype,"_errors",[u.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p=g(c.prototype,"_content",[u.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),g(c.prototype,"isValid",[r.dependentKeyCompat],Object.getOwnPropertyDescriptor(c.prototype,"isValid"),c.prototype),g(c.prototype,"isInvalid",[r.dependentKeyCompat],Object.getOwnPropertyDescriptor(c.prototype,"isInvalid"),c.prototype),g(c.prototype,"isPristine",[r.dependentKeyCompat],Object.getOwnPropertyDescriptor(c.prototype,"isPristine"),c.prototype),g(c.prototype,"isDirty",[r.dependentKeyCompat],Object.getOwnPropertyDescriptor(c.prototype,"isDirty"),c.prototype),c) +function S(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:y,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{} if(n.changeset)return new n.changeset(e,t,r,n) -const i=new w(e,t,r,n) -return i}e.EmberChangeset=w -e.default=class{constructor(e){const t=O(e,arguments.length>1&&void 0!==arguments[1]?arguments[1]:v,arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},arguments.length>3&&void 0!==arguments[3]?arguments[3]:{}) +return new x(e,t,r,n)}e.EmberChangeset=x +e.default=class{constructor(e){const t=S(e,arguments.length>1&&void 0!==arguments[1]?arguments[1]:y,arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},arguments.length>3&&void 0!==arguments[3]?arguments[3]:{}) return new Proxy(t,{get:(e,t)=>e.get(t.toString()),set:(e,t,r)=>(e.set(t.toString(),r),!0)})}}})),define("ember-changeset/utils/is-object",["exports","@ember/array"],(function(e,t){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){return null!==e&&"object"==typeof e&&!(e instanceof Date||e instanceof RegExp)&&!(0,t.isArray)(e)}})),define("ember-changeset/utils/merge-deep",["exports","validated-changeset"],(function(e,t){"use strict" function r(e){return function(e){return!!e&&"object"==typeof e}(e)&&!function(e){let t=Object.prototype.toString.call(e) @@ -8433,30 +9162,40 @@ if(Object.keys(t).length>0)for(u in t){const r=t[u] l.safeSet(e,u,r)}}}else{if(!n(e,u)||!r(s[u])||(0,t.isChange)(s[u])){let r=s[u] return(0,t.isChange)(r)?l.safeSet(e,u,(0,t.getChangeValue)(r)):l.safeSet(e,u,(0,t.normalizeObject)(r))}l.safeSet(e,u,a(l.safeGet(e,u),l.safeGet(s,u),l))}})),e}function a(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{} r.safeGet=r.safeGet||function(e,t){return e[t]},r.safeSet=r.safeSet||function(e,t,r){return e[t]=r} -let n=Array.isArray(t),i=Array.isArray(e),o=n===i -if(!o)return t +let n=Array.isArray(t) +if(!(n===Array.isArray(e)))return t if(n)return t -try{return s(e,t,r)}catch(a){throw new Error("Unable to `mergeDeep` with your data. Are you trying to merge two ember-data objects? Please file an issue with ember-changeset.")}}Object.defineProperty(e,"__esModule",{value:!0}),e.default=a})),define("ember-cli-app-version/initializer-factory",["exports","ember","@ember/string"],(function(e,t,r){"use strict" +try{return s(e,t,r)}catch(i){throw new Error("Unable to `mergeDeep` with your data. Are you trying to merge two ember-data objects? Please file an issue with ember-changeset.")}}Object.defineProperty(e,"__esModule",{value:!0}),e.default=a})),define("ember-cli-app-version/initializer-factory",["exports","ember","@ember/string"],(function(e,t,r){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,t){let i=!1 return function(){if(!i&&e&&t){let o=(0,r.classify)(e) n.register(o,t),i=!0}}} const{libraries:n}=t.default})),define("ember-cli-app-version/utils/regexp",["exports"],(function(e){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.shaRegExp=e.versionExtendedRegExp=e.versionRegExp=void 0 +Object.defineProperty(e,"__esModule",{value:!0}),e.versionRegExp=e.versionExtendedRegExp=e.shaRegExp=void 0 e.versionRegExp=/\d+[.]\d+[.]\d+/ e.versionExtendedRegExp=/\d+[.]\d+[.]\d+-[a-z]*([.]\d+)?/ e.shaRegExp=/[a-z\d]{8}$/})),define("ember-cli-flash/components/flash-message",["exports","@ember/component","@ember/string","@ember/template","@ember/utils","@ember/runloop","@ember/object","@ember/object/computed","ember-cli-flash/templates/components/flash-message"],(function(e,t,r,n,i,o,s,a,l){"use strict" -var u,c,d,h,p,f,m,g,v,b,y,_,w,O,x -function P(e,t,r,n){r&&Object.defineProperty(e,t,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(n):void 0})}function S(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function T(e,t,r,n,i){var o={} +var u,c,d,h,p,f,m,g,v,b,y,_,w +function O(e,t,r,n){r&&Object.defineProperty(e,t,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(n):void 0})}function x(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var r=e[Symbol.toPrimitive] +if(void 0!==r){var n=r.call(e,t||"default") +if("object"!=typeof n)return n +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function S(e,t,r,n,i){var o={} return Object.keys(n).forEach((function(e){o[e]=n[e]})),o.enumerable=!!o.enumerable,o.configurable=!!o.configurable,("value"in o||o.initializer)&&(o.writable=!0),o=r.slice().reverse().reduce((function(r,n){return n(e,t,r)||r}),o),i&&void 0!==o.initializer&&(o.value=o.initializer?o.initializer.call(i):void 0,o.initializer=void 0),void 0===o.initializer&&(Object.defineProperty(e,t,o),o=null),o}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const{next:E,cancel:C}=o.run -let k=(u=(0,a.readOnly)("flash.showProgress"),c=(0,a.not)("exiting"),d=(0,a.and)("showProgress","notExiting"),h=(0,a.readOnly)("flash.exiting"),p=(0,a.bool)("template"),f=(0,s.computed)("messageStyle"),m=(0,s.computed)("flash.type","messageStylePrefix","_defaultMessageStylePrefix"),g=(0,s.computed)("flash.type"),v=(0,s.computed)("flash.{showProgress,timeout}"),b=class extends t.default{constructor(){super(...arguments),S(this,"tagName",""),S(this,"layout",l.default),S(this,"active",!1),S(this,"messageStyle","bootstrap"),P(this,"showProgress",y,this),P(this,"notExiting",_,this),P(this,"showProgressBar",w,this),P(this,"exiting",O,this),P(this,"hasBlock",x,this)}get _defaultMessageStylePrefix(){return"foundation"===this.messageStyle?"alert-box ":"alert alert-"}get alertType(){const e=this.flash.type||"" +const{next:T,cancel:P}=o.run +let k=(u=(0,a.readOnly)("flash.showProgress"),c=(0,a.not)("exiting"),d=(0,a.and)("showProgress","notExiting"),h=(0,a.readOnly)("flash.exiting"),p=(0,s.computed)("messageStyle"),f=(0,s.computed)("flash.type","messageStylePrefix","_defaultMessageStylePrefix"),m=(0,s.computed)("flash.type"),g=(0,s.computed)("flash.{showProgress,timeout}"),v=class extends t.default{constructor(){super(...arguments),x(this,"tagName",""),x(this,"layout",l.default),x(this,"active",!1),x(this,"messageStyle","bootstrap"),O(this,"showProgress",b,this),O(this,"notExiting",y,this),O(this,"showProgressBar",_,this),O(this,"exiting",w,this)}get _defaultMessageStylePrefix(){return"foundation"===this.messageStyle?"alert-box ":"alert alert-"}get alertType(){const e=this.flash.type||"" return`${this.messageStylePrefix||this._defaultMessageStylePrefix}${e}`}get flashType(){return(0,r.classify)(this.flash.type||"")}get progressDuration(){var e,t if(null===(e=this.flash)||void 0===e||!e.showProgress)return!1 const r=(null===(t=this.flash)||void 0===t?void 0:t.timeout)||0 -return(0,n.htmlSafe)(`transition-duration: ${r}ms`)}_mouseEnter(){(0,i.isPresent)(this.flash)&&this.flash.preventExit()}_mouseLeave(){(0,i.isPresent)(this.flash)&&!this.flash.exiting&&this.flash.allowExit()}_destroyFlashMessage(){this.flash&&this.flash.destroyMessage()}onClick(){var e,t;(null===(e=null===(t=this.flash)||void 0===t?void 0:t.destroyOnClick)||void 0===e||e)&&this._destroyFlashMessage()}onClose(){this._destroyFlashMessage()}onDidInsert(e){const t=E(this,(()=>{(0,s.set)(this,"active",!0)}));(0,s.set)(this,"pendingSet",t),(0,s.set)(this,"_mouseEnterHandler",this._mouseEnter),(0,s.set)(this,"_mouseLeaveHandler",this._mouseLeave),e.addEventListener("mouseenter",this._mouseEnterHandler),e.addEventListener("mouseleave",this._mouseLeaveHandler)}onWillDestroy(e){e.removeEventListener("mouseenter",this._mouseEnterHandler),e.removeEventListener("mouseleave",this._mouseLeaveHandler),C(this.pendingSet),this._destroyFlashMessage()}},y=T(b.prototype,"showProgress",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),_=T(b.prototype,"notExiting",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),w=T(b.prototype,"showProgressBar",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),O=T(b.prototype,"exiting",[h],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),x=T(b.prototype,"hasBlock",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),T(b.prototype,"_defaultMessageStylePrefix",[f],Object.getOwnPropertyDescriptor(b.prototype,"_defaultMessageStylePrefix"),b.prototype),T(b.prototype,"alertType",[m],Object.getOwnPropertyDescriptor(b.prototype,"alertType"),b.prototype),T(b.prototype,"flashType",[g],Object.getOwnPropertyDescriptor(b.prototype,"flashType"),b.prototype),T(b.prototype,"progressDuration",[v],Object.getOwnPropertyDescriptor(b.prototype,"progressDuration"),b.prototype),T(b.prototype,"onClick",[s.action],Object.getOwnPropertyDescriptor(b.prototype,"onClick"),b.prototype),T(b.prototype,"onClose",[s.action],Object.getOwnPropertyDescriptor(b.prototype,"onClose"),b.prototype),T(b.prototype,"onDidInsert",[s.action],Object.getOwnPropertyDescriptor(b.prototype,"onDidInsert"),b.prototype),T(b.prototype,"onWillDestroy",[s.action],Object.getOwnPropertyDescriptor(b.prototype,"onWillDestroy"),b.prototype),b) +return(0,n.htmlSafe)(`transition-duration: ${r}ms`)}_mouseEnter(){(0,i.isPresent)(this.flash)&&this.flash.preventExit()}_mouseLeave(){(0,i.isPresent)(this.flash)&&!this.flash.exiting&&this.flash.allowExit()}_destroyFlashMessage(){this.flash&&this.flash.destroyMessage()}onClick(){var e,t;(null===(e=null===(t=this.flash)||void 0===t?void 0:t.destroyOnClick)||void 0===e||e)&&this._destroyFlashMessage()}onClose(){this._destroyFlashMessage()}onDidInsert(e){const t=T(this,(()=>{(0,s.set)(this,"active",!0)}));(0,s.set)(this,"pendingSet",t),(0,s.set)(this,"_mouseEnterHandler",this._mouseEnter),(0,s.set)(this,"_mouseLeaveHandler",this._mouseLeave),e.addEventListener("mouseenter",this._mouseEnterHandler),e.addEventListener("mouseleave",this._mouseLeaveHandler)}onWillDestroy(e){e.removeEventListener("mouseenter",this._mouseEnterHandler),e.removeEventListener("mouseleave",this._mouseLeaveHandler),P(this.pendingSet),this._destroyFlashMessage()}},b=S(v.prototype,"showProgress",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),y=S(v.prototype,"notExiting",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),_=S(v.prototype,"showProgressBar",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),w=S(v.prototype,"exiting",[h],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),S(v.prototype,"_defaultMessageStylePrefix",[p],Object.getOwnPropertyDescriptor(v.prototype,"_defaultMessageStylePrefix"),v.prototype),S(v.prototype,"alertType",[f],Object.getOwnPropertyDescriptor(v.prototype,"alertType"),v.prototype),S(v.prototype,"flashType",[m],Object.getOwnPropertyDescriptor(v.prototype,"flashType"),v.prototype),S(v.prototype,"progressDuration",[g],Object.getOwnPropertyDescriptor(v.prototype,"progressDuration"),v.prototype),S(v.prototype,"onClick",[s.action],Object.getOwnPropertyDescriptor(v.prototype,"onClick"),v.prototype),S(v.prototype,"onClose",[s.action],Object.getOwnPropertyDescriptor(v.prototype,"onClose"),v.prototype),S(v.prototype,"onDidInsert",[s.action],Object.getOwnPropertyDescriptor(v.prototype,"onDidInsert"),v.prototype),S(v.prototype,"onWillDestroy",[s.action],Object.getOwnPropertyDescriptor(v.prototype,"onWillDestroy"),v.prototype),v) e.default=k})),define("ember-cli-flash/flash/object",["exports","@ember/object/evented","@ember/object","@ember/runloop","ember-cli-flash/utils/computed"],(function(e,t,r,n,i){"use strict" var o,s,a -function l(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +function l(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var r=e[Symbol.toPrimitive] +if(void 0!==r){var n=r.call(e,t||"default") +if("object"!=typeof n)return n +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 let u=(o=(0,i.guidFor)("message").readOnly(),s=class extends(r.default.extend(t.default)){constructor(){var e,t,r,n super(...arguments),l(this,"exitTimer",null),l(this,"exiting",!1),l(this,"isExitable",!0),l(this,"initializedTime",null),e=this,t="_guid",n=this,(r=a)&&Object.defineProperty(e,t,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(n):void 0})}init(){super.init(...arguments),this.sticky||(this.timerTask(),this._setInitializedTime())}destroyMessage(){this._cancelTimer(),this.exitTaskInstance?((0,n.cancel)(this.exitTaskInstance),this._teardown()):this.exitTimerTask()}exitMessage(){this.isExitable&&(this.exitTimerTask(),this.trigger("didExitMessage"))}willDestroy(){this.onDestroy&&this.onDestroy(),this._cancelTimer(),this._cancelTimer("exitTaskInstance"),super.willDestroy(...arguments)}preventExit(){(0,r.set)(this,"isExitable",!1)}allowExit(){(0,r.set)(this,"isExitable",!0),this._checkIfShouldExit()}timerTask(){if(!this.timeout)return const e=(0,n.later)((()=>{this.exitMessage()}),this.timeout);(0,r.set)(this,"timerTaskInstance",e)}exitTimerTask(){if(!this.isDestroyed)if((0,r.set)(this,"exiting",!0),this.extendedTimeout){let e=(0,n.later)((()=>{this._teardown()}),this.extendedTimeout);(0,r.set)(this,"exitTaskInstance",e)}else this._teardown()}_setInitializedTime(){let e=(new Date).getTime() @@ -8482,17 +9221,18 @@ const i=(0,a.assign)({},n) return(0,o.setProperties)(i,{message:r,type:e}),t.add(i)}}_hasDuplicate(e){return this._guids.includes(e)}_enqueue(e){const t=e.preventDuplicates if("boolean"==typeof t?t:this.defaultPreventDuplicates){const t=e._guid if(this._hasDuplicate(t))return}return this.queue.pushObject(e)}},b=O(v.prototype,"isEmpty",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),y=O(v.prototype,"_guids",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),_=O(v.prototype,"arrangedQueue",[g],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),O(v.prototype,"flashMessageDefaults",[o.computed],Object.getOwnPropertyDescriptor(v.prototype,"flashMessageDefaults"),v.prototype),v) -e.default=x})),define("ember-cli-flash/templates/components/flash-message",["exports"],(function(e){"use strict" +e.default=x})),define("ember-cli-flash/templates/components/flash-message",["exports","@ember/template-factory"],(function(e,t){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"/fjXyO40",block:'[[[11,0],[16,0,[29,["flash-message ",[30,0,["alertType"]]," ",[52,[30,0,["exiting"]],"exiting"]," ",[52,[30,0,["active"]],"active"]]]],[24,"role","alert"],[17,1],[4,[38,1],["click",[30,0,["onClick"]]],null],[4,[38,2],[[30,0,["onDidInsert"]]],null],[4,[38,3],[[30,0,["onWillDestroy"]]],null],[12],[1,"\\n"],[41,[48,[30,2]],[[[1," "],[18,2,[[30,0],[33,6],[28,[37,7],[[30,0],"onClose"],null]]],[1,"\\n"]],[]],[[[1," "],[1,[30,0,["flash","message"]]],[1,"\\n"],[41,[30,0,["showProgressBar"]],[[[1," "],[10,0],[14,0,"alert-progress"],[12],[1,"\\n "],[10,0],[14,0,"alert-progressBar"],[15,5,[30,0,["progressDuration"]]],[12],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null]],[]]],[13]],["&attrs","&default"],false,["if","on","did-insert","will-destroy","has-block","yield","flash","action"]]',moduleName:"ember-cli-flash/templates/components/flash-message.hbs",isStrictMode:!1}) -e.default=t})),define("ember-cli-flash/utils/computed",["exports","@ember/utils","@ember/object","@ember/object/internals","@ember/array"],(function(e,t,r,n,i){"use strict" +var r=(0,t.createTemplateFactory)({id:"TsCbah/a",block:'[[[11,0],[16,0,[29,["flash-message ",[30,0,["alertType"]]," ",[52,[30,0,["exiting"]],"exiting"]," ",[52,[30,0,["active"]],"active"]]]],[24,"role","alert"],[17,1],[4,[38,1],["click",[30,0,["onClick"]]],null],[4,[38,2],[[30,0,["onDidInsert"]]],null],[4,[38,3],[[30,0,["onWillDestroy"]]],null],[12],[1,"\\n"],[41,[48,[30,2]],[[[1," "],[18,2,[[30,0],[30,0,["flash"]],[28,[37,6],[[30,0],"onClose"],null]]],[1,"\\n"]],[]],[[[1," "],[1,[30,0,["flash","message"]]],[1,"\\n"],[41,[30,0,["showProgressBar"]],[[[1," "],[10,0],[14,0,"alert-progress"],[12],[1,"\\n "],[10,0],[14,0,"alert-progressBar"],[15,5,[30,0,["progressDuration"]]],[12],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null]],[]]],[13]],["&attrs","&default"],false,["if","on","did-insert","will-destroy","has-block","yield","action"]]',moduleName:"ember-cli-flash/templates/components/flash-message.hbs",isStrictMode:!1}) +e.default=r})),define("ember-cli-flash/utils/computed",["exports","@ember/utils","@ember/object","@ember/object/internals","@ember/array"],(function(e,t,r,n,i){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.add=function(){for(var e=arguments.length,n=new Array(e),o=0;o{const n=(0,r.get)(this,e) if("number"===(0,t.typeOf)(n))return n})) return(0,i.A)(e).compact().reduce(((e,t)=>e+t))}}) return s.property.apply(s,n)},e.guidFor=function(e){return(0,r.computed)(e,{get(){const i=(0,r.get)(this,e) if(!(0,t.isNone)(i))return(0,n.guidFor)(i.toString())}})}})),define("ember-cli-flash/utils/flash-message-options",["exports","@ember/polyfills"],(function(e,t){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){return(0,t.assign)({timeout:3e3,extendedTimeout:0,priority:100,sticky:!1,showProgress:!1,type:"info",types:["success","info","warning","danger","alert","secondary"],injectionFactories:["route","controller","view","component"],preventDuplicates:!1},e)}})),define("ember-cli-flash/utils/get-with-default",["exports","@ember/object"],(function(e,t){"use strict" +Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){return(0,t.assign)({timeout:3e3,extendedTimeout:0,priority:100,sticky:!1,showProgress:!1,type:"info",types:["success","info","warning","danger","alert","secondary"],injectionFactories:["route","controller","view","component"],preventDuplicates:!1},e)}})) +define("ember-cli-flash/utils/get-with-default",["exports","@ember/object"],(function(e,t){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,r,n){let i=(0,t.get)(e,r) if(void 0===i)return n return i}})),define("ember-cli-flash/utils/object-compact",["exports","@ember/utils"],(function(e,t){"use strict" @@ -8505,8 +9245,7 @@ Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){let e=argu for(let n in e)-1===t.indexOf(n)&&(r[n]=e[n]) return r}})),define("ember-cli-string-helpers/-private/create-string-helper",["exports","@ember/template"],(function(e,t){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){return function(r){let[n]=r -return(0,t.isHTMLSafe)(n)&&(n=n.string),n=n||"",e(n)}}})) -define("ember-cli-string-helpers/helpers/capitalize",["exports","@ember/component/helper","@ember/string","ember-cli-string-helpers/-private/create-string-helper"],(function(e,t,r,n){"use strict" +return(0,t.isHTMLSafe)(n)&&(n=n.string),n=n||"",e(n)}}})),define("ember-cli-string-helpers/helpers/capitalize",["exports","@ember/component/helper","@ember/string","ember-cli-string-helpers/-private/create-string-helper"],(function(e,t,r,n){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.capitalize=void 0 const i=(0,n.default)(r.capitalize) e.capitalize=i @@ -8517,28 +9256,28 @@ const i=(0,n.default)(r.classify) e.classify=i var o=(0,t.helper)(i) e.default=o})),define("ember-cli-string-helpers/helpers/humanize",["exports","@ember/component/helper","@ember/template"],(function(e,t,r){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.humanize=i,e.default=void 0 -const n=/_+|-+/g -function i(e){let[t]=e +Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.humanize=o +const n=/_+|-+/g,i=" " +function o(e){let[t]=e if((0,r.isHTMLSafe)(t)&&(t=t.string),null==t)return"" -let i=t.toLowerCase().replace(n," ") -return i.charAt(0).toUpperCase()+i.slice(1)}var o=(0,t.helper)(i) -e.default=o})),define("ember-cli-string-helpers/helpers/lowercase",["exports","@ember/component/helper","ember-cli-string-helpers/utils/lowercase","ember-cli-string-helpers/-private/create-string-helper"],(function(e,t,r,n){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.lowercase=void 0 +let o=t.toLowerCase().replace(n,i) +return o.charAt(0).toUpperCase()+o.slice(1)}var s=(0,t.helper)(o) +e.default=s})),define("ember-cli-string-helpers/helpers/lowercase",["exports","@ember/component/helper","ember-cli-string-helpers/utils/lowercase","ember-cli-string-helpers/-private/create-string-helper"],(function(e,t,r,n){"use strict" +Object.defineProperty(e,"__esModule",{value:!0}),e.lowercase=e.default=void 0 const i=(0,n.default)(r.default) e.lowercase=i var o=(0,t.helper)(i) e.default=o})),define("ember-cli-string-helpers/helpers/titleize",["exports","@ember/component/helper","ember-cli-string-helpers/utils/titleize","ember-cli-string-helpers/-private/create-string-helper"],(function(e,t,r,n){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.titleize=void 0 +Object.defineProperty(e,"__esModule",{value:!0}),e.titleize=e.default=void 0 const i=(0,n.default)(r.default) e.titleize=i var o=(0,t.helper)(i) e.default=o})),define("ember-cli-string-helpers/helpers/truncate",["exports","@ember/component/helper","@ember/template"],(function(e,t,r){"use strict" function n(e){let[t,n=140,i=!0]=e,o=i?n-3:n -return(0,r.isHTMLSafe)(t)&&(t=t.string),t&&t.length>o?i?`${t.substring(0,o)}...`:t.substring(0,o):t}Object.defineProperty(e,"__esModule",{value:!0}),e.truncate=n,e.default=void 0 +return(0,r.isHTMLSafe)(t)&&(t=t.string),t&&t.length>o?i?`${t.substring(0,o)}...`:t.substring(0,o):t}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.truncate=n var i=(0,t.helper)(n) e.default=i})),define("ember-cli-string-helpers/helpers/uppercase",["exports","@ember/component/helper","ember-cli-string-helpers/utils/uppercase","ember-cli-string-helpers/-private/create-string-helper"],(function(e,t,r,n){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.uppercase=void 0 +Object.defineProperty(e,"__esModule",{value:!0}),e.uppercase=e.default=void 0 const i=(0,n.default)(r.default) e.uppercase=i var o=(0,t.helper)(i) @@ -8608,17 +9347,17 @@ Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){let r,n=t r="string"===n||"number"===n?e:(0,t.guidFor)(e) return r}})),define("ember-collection/utils/needs-revalidate",["exports"],(function(e){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){e._renderNode.isDirty=!0,e._renderNode.ownerNode.emberView.scheduleRevalidate(e._renderNode,e.toString(),"rerendering via needsRevalidate")}})),define("ember-collection/utils/style-generators",["exports","ember-collection/utils/translate"],(function(e,t){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.formatPixelStyle=function(e,r,n){let i="position:absolute;top:0;left:0;" -return i+=(0,t.translateCSS)(e.x,e.y),i+="width:"+r+"px;height:"+n+"px;",i},e.formatPercentageStyle=function(e,r,n){let i="position:absolute;top:0;left:0;" -return i+=(0,t.translateCSS)(e.x,e.y),i+="width:"+r+"%;height:"+n+"px;",i}})),define("ember-collection/utils/style-properties",["exports","@ember/string"],(function(e,t){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.styleProperty=function(e){return o(e,!1)},e.cssProperty=function(e){return o(e,!0)} +Object.defineProperty(e,"__esModule",{value:!0}),e.formatPercentageStyle=function(e,r,n){let i="position:absolute;top:0;left:0;" +return i+=(0,t.translateCSS)(e.x,e.y),i+="width:"+r+"%;height:"+n+"px;",i},e.formatPixelStyle=function(e,r,n){let i="position:absolute;top:0;left:0;" +return i+=(0,t.translateCSS)(e.x,e.y),i+="width:"+r+"px;height:"+n+"px;",i}})),define("ember-collection/utils/style-properties",["exports","@ember/string"],(function(e,t){"use strict" +Object.defineProperty(e,"__esModule",{value:!0}),e.cssProperty=function(e){return o(e,!0)},e.styleProperty=function(e){return o(e,!1)} const r=["webkit","Webkit","ms","Moz","O"],n=["-webkit-","-ms-","-moz-","-o-"],i="undefined"!=typeof document&&document.documentElement&&document.documentElement.style function o(e,o){let s=o?(0,t.camelize)(e):e if(s in i)return e let a=(0,t.capitalize)(s) for(let t=0;tl((0,i.get)(e,a)):e=>(0,o.default)((0,i.get)(e,a),l):e=>!!(0,i.get)(e,a),u.filter(t))}Object.defineProperty(e,"__esModule",{value:!0}),e.filterBy=a,e.default=void 0 +return!(0,r.isArray)(u)&&(0,r.isArray)(l)&&(u=l,l=void 0),u=(0,s.default)(u),(0,n.isEmpty)(a)||(0,n.isEmpty)(u)?[]:(t=(0,n.isPresent)(l)?"function"==typeof l?e=>l((0,i.get)(e,a)):e=>(0,o.default)((0,i.get)(e,a),l):e=>!!(0,i.get)(e,a),u.filter(t))}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.filterBy=a var l=(0,t.helper)(a) e.default=l})),define("ember-composable-helpers/helpers/filter",["exports","@ember/component/helper","@ember/utils","ember-composable-helpers/utils/as-array"],(function(e,t,r,n){"use strict" function i(e){let[t,i]=e -return(0,r.isEmpty)(t)||!i?[]:(0,n.default)(i).filter(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.filter=i,e.default=void 0 +return(0,r.isEmpty)(t)||!i?[]:(0,n.default)(i).filter(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.filter=i var o=(0,t.helper)(i) e.default=o})),define("ember-composable-helpers/helpers/find-by",["exports","@ember/component/helper","@ember/utils","@ember/array","ember-composable-helpers/utils/as-array"],(function(e,t,r,n,i){"use strict" function o(e){let[t,o,s]=e -return(0,r.isEmpty)(t)?[]:(0,n.A)((0,i.default)(s)).findBy(t,o)}Object.defineProperty(e,"__esModule",{value:!0}),e.findBy=o,e.default=void 0 +return(0,r.isEmpty)(t)?[]:(0,n.A)((0,i.default)(s)).findBy(t,o)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.findBy=o var s=(0,t.helper)(o) e.default=s})),define("ember-composable-helpers/helpers/flatten",["exports","@ember/component/helper","@ember/array","ember-composable-helpers/utils/as-array"],(function(e,t,r,n){"use strict" -function i(e){return(0,r.isArray)(e)?(0,n.default)(e).reduce(((e,t)=>e.concat(i(t))),[]):e}Object.defineProperty(e,"__esModule",{value:!0}),e.flatten=i,e.default=void 0 +function i(e){return(0,r.isArray)(e)?(0,n.default)(e).reduce(((e,t)=>e.concat(i(t))),[]):e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.flatten=i var o=(0,t.helper)((function(e){let[t]=e return i(t)})) e.default=o})),define("ember-composable-helpers/helpers/from-entries",["exports","@ember/component/helper"],(function(e,t){"use strict" function r(e){let[t]=e -return t?Object.fromEntries(t):t}Object.defineProperty(e,"__esModule",{value:!0}),e.fromEntries=r,e.default=void 0 +return t?Object.fromEntries(t):t}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.fromEntries=r var n=(0,t.helper)(r) e.default=n})),define("ember-composable-helpers/helpers/group-by",["exports","@ember/component/helper","@ember/object","ember-composable-helpers/utils/as-array"],(function(e,t,r,n){"use strict" function i(e){let[t,i]=e,o={} return(0,n.default)(i).forEach((e=>{let n=(0,r.get)(e,t),i=o[n] -Array.isArray(i)||(i=[],o[n]=i),i.push(e)})),o}Object.defineProperty(e,"__esModule",{value:!0}),e.groupBy=i,e.default=void 0 +Array.isArray(i)||(i=[],o[n]=i),i.push(e)})),o}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.groupBy=i var o=(0,t.helper)(i) e.default=o})),define("ember-composable-helpers/helpers/has-next",["exports","@ember/component/helper","@ember/utils","ember-composable-helpers/helpers/next","ember-composable-helpers/utils/is-equal","ember-composable-helpers/-private/get-value-array-and-use-deep-equal-from-params","ember-composable-helpers/utils/as-array"],(function(e,t,r,n,i,o,s){"use strict" -function a(e,t){let o=arguments.length>2&&void 0!==arguments[2]&&arguments[2],a=(0,s.default)(t),l=(0,n.next)(e,a,o),u=!(0,i.default)(l,e,o) -return u&&(0,r.isPresent)(l)}Object.defineProperty(e,"__esModule",{value:!0}),e.hasNext=a,e.default=void 0 +function a(e,t){let o=arguments.length>2&&void 0!==arguments[2]&&arguments[2],a=(0,s.default)(t),l=(0,n.next)(e,a,o) +return!(0,i.default)(l,e,o)&&(0,r.isPresent)(l)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.hasNext=a var l=(0,t.helper)((function(e){let{currentValue:t,array:r,useDeepEqual:n}=(0,o.default)(e) return a(t,r,n)})) e.default=l})),define("ember-composable-helpers/helpers/has-previous",["exports","@ember/component/helper","@ember/utils","ember-composable-helpers/helpers/previous","ember-composable-helpers/utils/is-equal","ember-composable-helpers/-private/get-value-array-and-use-deep-equal-from-params","ember-composable-helpers/utils/as-array"],(function(e,t,r,n,i,o,s){"use strict" -function a(e,t){let o=arguments.length>2&&void 0!==arguments[2]&&arguments[2],a=(0,s.default)(t),l=(0,n.previous)(e,a,o),u=!(0,i.default)(l,e,o) -return u&&(0,r.isPresent)(l)}Object.defineProperty(e,"__esModule",{value:!0}),e.hasPrevious=a,e.default=void 0 +function a(e,t){let o=arguments.length>2&&void 0!==arguments[2]&&arguments[2],a=(0,s.default)(t),l=(0,n.previous)(e,a,o) +return!(0,i.default)(l,e,o)&&(0,r.isPresent)(l)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.hasPrevious=a var l=(0,t.helper)((function(e){let{currentValue:t,array:r,useDeepEqual:n}=(0,o.default)(e) return a(t,r,n)})) e.default=l})),define("ember-composable-helpers/helpers/inc",["exports","@ember/component/helper","@ember/utils"],(function(e,t,r){"use strict" function n(e){let[t,n]=e -if((0,r.isEmpty)(n)&&(n=t,t=void 0),n=Number(n),!isNaN(n))return void 0===t&&(t=1),n+t}Object.defineProperty(e,"__esModule",{value:!0}),e.inc=n,e.default=void 0 +if((0,r.isEmpty)(n)&&(n=t,t=void 0),n=Number(n),!isNaN(n))return void 0===t&&(t=1),n+t}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.inc=n var i=(0,t.helper)(n) e.default=i})),define("ember-composable-helpers/helpers/includes",["exports","@ember/array","@ember/component/helper","ember-composable-helpers/utils/as-array"],(function(e,t,r,n){"use strict" function i(e,r){if(!(0,t.isArray)(r))return!1 let i=(0,t.isArray)(e)?e:[e],o=(0,t.A)((0,n.default)(r)) -return(0,n.default)(i).every((e=>o.includes(e)))}Object.defineProperty(e,"__esModule",{value:!0}),e.includes=i,e.default=void 0 +return(0,n.default)(i).every((e=>o.includes(e)))}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.includes=i var o=(0,r.helper)((function(e){let[t,r]=e return i(t,r)})) e.default=o})),define("ember-composable-helpers/helpers/intersect",["exports","@ember/component/helper","@ember/array","ember-composable-helpers/utils/as-array"],(function(e,t,r,n){"use strict" function i(e){let[...t]=e,i=(0,n.default)(t).map((e=>(0,r.isArray)(e)?e:[])) return i.pop().filter((e=>{for(let t=0;t{var t @@ -8738,62 +9477,62 @@ return i(e)}:function(){var e return null===(e=o[r])||void 0===e?void 0:e.call(o,...n)}}var s=(0,r.helper)(o) e.default=s})),define("ember-composable-helpers/helpers/join",["exports","@ember/component/helper","@ember/array","ember-composable-helpers/utils/as-array"],(function(e,t,r,n){"use strict" function i(e){let[t,i]=e,o=(0,n.default)(i) -return(0,r.isArray)(t)&&(o=t,t=","),o.join(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.join=i,e.default=void 0 +return(0,r.isArray)(t)&&(o=t,t=","),o.join(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.join=i var o=(0,t.helper)(i) e.default=o})),define("ember-composable-helpers/helpers/keys",["exports","@ember/component/helper"],(function(e,t){"use strict" function r(e){let[t]=e -return t?Object.keys(t):t}Object.defineProperty(e,"__esModule",{value:!0}),e.keys=r,e.default=void 0 +return t?Object.keys(t):t}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.keys=r var n=(0,t.helper)(r) e.default=n})),define("ember-composable-helpers/helpers/map-by",["exports","@ember/component/helper","@ember/object","@ember/utils","ember-composable-helpers/utils/as-array"],(function(e,t,r,n,i){"use strict" function o(e){let[t,o]=e -return(0,n.isEmpty)(t)?[]:(0,i.default)(o).map((e=>(0,r.get)(e,t)))}Object.defineProperty(e,"__esModule",{value:!0}),e.mapBy=o,e.default=void 0 +return(0,n.isEmpty)(t)?[]:(0,i.default)(o).map((e=>(0,r.get)(e,t)))}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.mapBy=o var s=(0,t.helper)(o) e.default=s})),define("ember-composable-helpers/helpers/map",["exports","@ember/component/helper","@ember/utils","ember-composable-helpers/utils/as-array"],(function(e,t,r,n){"use strict" function i(e){let[t,i]=e -return(0,r.isEmpty)(t)?[]:(0,n.default)(i).map(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.map=i,e.default=void 0 +return(0,r.isEmpty)(t)?[]:(0,n.default)(i).map(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.map=i var o=(0,t.helper)(i) e.default=o})),define("ember-composable-helpers/helpers/next",["exports","@ember/component/helper","ember-composable-helpers/utils/get-index","@ember/utils","@ember/array","ember-composable-helpers/-private/get-value-array-and-use-deep-equal-from-params","ember-composable-helpers/utils/as-array"],(function(e,t,r,n,i,o,s){"use strict" function a(e,t){let o=arguments.length>2&&void 0!==arguments[2]&&arguments[2],a=(0,s.default)(t),l=(0,r.default)(a,e,o),u=a.length-1 -if(!(0,n.isEmpty)(l))return l===u?e:(0,i.A)(a).objectAt(l+1)}Object.defineProperty(e,"__esModule",{value:!0}),e.next=a,e.default=void 0 +if(!(0,n.isEmpty)(l))return l===u?e:(0,i.A)(a).objectAt(l+1)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.next=a var l=(0,t.helper)((function(e){let{currentValue:t,array:r,useDeepEqual:n}=(0,o.default)(e) return a(t,r,n)})) e.default=l})),define("ember-composable-helpers/helpers/noop",["exports","@ember/component/helper"],(function(e,t){"use strict" -function r(){return()=>{}}Object.defineProperty(e,"__esModule",{value:!0}),e.noop=r,e.default=void 0 +function r(){return()=>{}}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.noop=r var n=(0,t.helper)(r) e.default=n})),define("ember-composable-helpers/helpers/object-at",["exports","@ember/component/helper","@ember/array"],(function(e,t,r){"use strict" -function n(e,t){if((0,r.isArray)(t))return e=parseInt(e,10),(0,r.A)(t).objectAt(e)}Object.defineProperty(e,"__esModule",{value:!0}),e.objectAt=n,e.default=void 0 +function n(e,t){if((0,r.isArray)(t))return e=parseInt(e,10),(0,r.A)(t).objectAt(e)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.objectAt=n var i=(0,t.helper)((function(e){let[t,r]=e return n(t,r)})) e.default=i})),define("ember-composable-helpers/helpers/optional",["exports","@ember/component/helper"],(function(e,t){"use strict" function r(e){let[t]=e -return"function"==typeof t?t:e=>e}Object.defineProperty(e,"__esModule",{value:!0}),e.optional=r,e.default=void 0 +return"function"==typeof t?t:e=>e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.optional=r var n=(0,t.helper)(r) e.default=n})),define("ember-composable-helpers/helpers/pick",["exports","@ember/component/helper","@ember/object"],(function(e,t,r){"use strict" function n(e){let[t,n]=e return function(e){let i=(0,r.get)(e,t) if(!n)return i -n(i)}}Object.defineProperty(e,"__esModule",{value:!0}),e.pick=n,e.default=void 0 +n(i)}}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.pick=n var i=(0,t.helper)(n) e.default=i})),define("ember-composable-helpers/helpers/pipe-action",["exports","@ember/component/helper","ember-composable-helpers/helpers/pipe","ember-composable-helpers/-private/closure-action"],(function(e,t,r,n){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 const i=r.pipe n.default&&(i[n.default]=!0) var o=(0,t.helper)(i) -e.default=o})),define("ember-composable-helpers/helpers/pipe",["exports","@ember/component/helper","ember-composable-helpers/utils/is-promise"],(function(e,t,r){"use strict" +e.default=o})) +define("ember-composable-helpers/helpers/pipe",["exports","@ember/component/helper","ember-composable-helpers/utils/is-promise"],(function(e,t,r){"use strict" function n(e,t){return(0,r.default)(e)?e.then(t):t(e)}function i(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[] return function(){for(var t=arguments.length,r=new Array(t),i=0;i0===i?t(...r):n(e,t)),void 0)}}Object.defineProperty(e,"__esModule",{value:!0}),e.invokeFunction=n,e.pipe=i,e.default=void 0 +return e.reduce(((e,t,i)=>0===i?t(...r):n(e,t)),void 0)}}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.invokeFunction=n,e.pipe=i var o=(0,t.helper)(i) e.default=o})),define("ember-composable-helpers/helpers/previous",["exports","@ember/component/helper","ember-composable-helpers/utils/get-index","@ember/utils","@ember/array","ember-composable-helpers/-private/get-value-array-and-use-deep-equal-from-params"],(function(e,t,r,n,i,o){"use strict" function s(e,t){let o=arguments.length>2&&void 0!==arguments[2]&&arguments[2],s=(0,r.default)(t,e,o) -if(!(0,n.isEmpty)(s))return 0===s?e:(0,i.A)(t).objectAt(s-1)}Object.defineProperty(e,"__esModule",{value:!0}),e.previous=s,e.default=void 0 +if(!(0,n.isEmpty)(s))return 0===s?e:(0,i.A)(t).objectAt(s-1)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.previous=s var a=(0,t.helper)((function(e){let{currentValue:t,array:r,useDeepEqual:n}=(0,o.default)(e) return s(t,r,n)})) e.default=a})),define("ember-composable-helpers/helpers/queue",["exports","@ember/component/helper","ember-composable-helpers/utils/is-promise"],(function(e,t,r){"use strict" function n(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[] return function(){for(var t=arguments.length,n=new Array(t),i=0;it(...n))):t(...n)} -return e.reduce(((e,t,r)=>0===r?t(...n):o(e,t)),void 0)}}Object.defineProperty(e,"__esModule",{value:!0}),e.queue=n,e.default=void 0 +return e.reduce(((e,t,i)=>0===i?t(...n):function(e,t){return(0,r.default)(e)?e.then((()=>t(...n))):t(...n)}(e,t)),void 0)}}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.queue=n var i=(0,t.helper)(n) e.default=i})),define("ember-composable-helpers/helpers/range",["exports","@ember/component/helper","@ember/utils","ember-composable-helpers/utils/comparison"],(function(e,t,r,n){"use strict" function i(e){let[t,i,o]=e @@ -8801,37 +9540,36 @@ o="boolean"===(0,r.typeOf)(o)&&o let s=[] if(ti){let e=o?n.gte:n.gt -for(let r=t;e(r,i);r--)s.push(r)}return t===i&&o&&s.push(i),s}Object.defineProperty(e,"__esModule",{value:!0}),e.range=i,e.default=void 0 +for(let r=t;e(r,i);r--)s.push(r)}return t===i&&o&&s.push(i),s}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.range=i var o=(0,t.helper)(i) e.default=o})),define("ember-composable-helpers/helpers/reduce",["exports","@ember/component/helper","@ember/utils","ember-composable-helpers/utils/as-array"],(function(e,t,r,n){"use strict" function i(e){let[t,i,o]=e -return(0,r.isEmpty)(t)?[]:(0,n.default)(o).reduce(t,i)}Object.defineProperty(e,"__esModule",{value:!0}),e.reduce=i,e.default=void 0 +return(0,r.isEmpty)(t)?[]:(0,n.default)(o).reduce(t,i)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.reduce=i var o=(0,t.helper)(i) -e.default=o})) -define("ember-composable-helpers/helpers/reject-by",["exports","@ember/component/helper","@ember/array","@ember/utils","@ember/object","ember-composable-helpers/utils/is-equal","ember-composable-helpers/utils/as-array"],(function(e,t,r,n,i,o,s){"use strict" +e.default=o})),define("ember-composable-helpers/helpers/reject-by",["exports","@ember/component/helper","@ember/array","@ember/utils","@ember/object","ember-composable-helpers/utils/is-equal","ember-composable-helpers/utils/as-array"],(function(e,t,r,n,i,o,s){"use strict" function a(e){let t,[a,l,u]=e -return!(0,r.isArray)(u)&&(0,r.isArray)(l)&&(u=l,l=void 0),u=(0,s.default)(u),t=(0,n.isPresent)(l)?"function"==typeof l?e=>!l((0,i.get)(e,a)):e=>!(0,o.default)((0,i.get)(e,a),l):e=>!(0,i.get)(e,a),u.filter(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.rejectBy=a,e.default=void 0 +return!(0,r.isArray)(u)&&(0,r.isArray)(l)&&(u=l,l=void 0),u=(0,s.default)(u),t=(0,n.isPresent)(l)?"function"==typeof l?e=>!l((0,i.get)(e,a)):e=>!(0,o.default)((0,i.get)(e,a),l):e=>!(0,i.get)(e,a),u.filter(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.rejectBy=a var l=(0,t.helper)(a) e.default=l})),define("ember-composable-helpers/helpers/repeat",["exports","@ember/component/helper","@ember/utils"],(function(e,t,r){"use strict" function n(e){let[t,n]=e -return"number"!==(0,r.typeOf)(t)?[n]:Array.apply(null,{length:t}).map((()=>n))}Object.defineProperty(e,"__esModule",{value:!0}),e.repeat=n,e.default=void 0 +return"number"!==(0,r.typeOf)(t)?[n]:Array.apply(null,{length:t}).map((()=>n))}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.repeat=n var i=(0,t.helper)(n) e.default=i})),define("ember-composable-helpers/helpers/reverse",["exports","@ember/component/helper","@ember/array"],(function(e,t,r){"use strict" function n(e){let[t]=e -return(0,r.isArray)(t)?(0,r.A)(t).slice(0).reverse():[t]}Object.defineProperty(e,"__esModule",{value:!0}),e.reverse=n,e.default=void 0 +return(0,r.isArray)(t)?(0,r.A)(t).slice(0).reverse():[t]}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.reverse=n var i=(0,t.helper)(n) e.default=i})),define("ember-composable-helpers/helpers/shuffle",["exports","@ember/component/helper","@ember/array","@ember/utils"],(function(e,t,r,n){"use strict" function i(e,t){let r,i,o=(e=e.slice(0)).length for(t="function"===(0,n.typeOf)(t)&&t||Math.random;o>1;)r=Math.floor(t()*o--),i=e[o],e[o]=e[r],e[r]=i -return e}Object.defineProperty(e,"__esModule",{value:!0}),e.shuffle=i,e.default=void 0 +return e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.shuffle=i var o=(0,t.helper)((function(e){let[t,n]=e return void 0===n&&(n=t,t=void 0),(0,r.isArray)(n)?i(n,t):[n]})) e.default=o})),define("ember-composable-helpers/helpers/slice",["exports","@ember/component/helper","ember-composable-helpers/utils/as-array"],(function(e,t,r){"use strict" function n(e){let[...t]=e,n=t.pop() -return n=(0,r.default)(n),n.slice(...t)}Object.defineProperty(e,"__esModule",{value:!0}),e.slice=n,e.default=void 0 +return n=(0,r.default)(n),n.slice(...t)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.slice=n var i=(0,t.helper)(n) e.default=i})),define("ember-composable-helpers/helpers/sort-by",["exports","@ember/object","@ember/utils","@ember/component/helper","ember-composable-helpers/utils/as-array"],(function(e,t,r,n,i){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.sortBy=d,e.default=void 0 +Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.sortBy=h const o=new Intl.Collator(void 0,{sensitivity:"base"}) function s(e){if("boolean"==typeof e)return e if("number"==typeof e){if(e>0)return!1 @@ -8839,19 +9577,19 @@ if(e<0)return!0}return e}function a(e,r){return null==e?e:(0,t.get)(e,r)}functio const i=a(t,e),s=a(n,e),l=null==i,u=null==s return l&&u?0:u?-1:l?1:i.toLowerCase&&s.toLowerCase?o.compare(s,i):is?-1:0}function u(e,t,n){if((0,r.isEmpty)(e))return 0 const i=a(t,e),s=a(n,e),l=null==i,u=null==s -return l&&u?0:u?-1:l?1:i.toLowerCase&&s.toLowerCase?o.compare(i,s):is?1:0}class c extends class{constructor(){for(var e=arguments.length,t=new Array(e),r=0;rs?1:0}class c{constructor(){for(var e=arguments.length,t=new Array(e),r=0;rt(e.replace(/:desc|:asc/,""),r,n)}}{perform(){let e=!1,t=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).map((e=>this.comparator(e))),r=(e,r)=>{for(let n=0;nt(e.replace(/:desc|:asc/,""),r,n)}}class d extends c{perform(){let e=!1,t=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).map((e=>this.comparator(e))),r=(e,r)=>{for(let n=0;n(0,r.default)(n).indexOf(e)===t))}Object.defineProperty(e,"__esModule",{value:!0}),e.union=n,e.default=void 0 +return[].concat(...t).filter(((e,t,n)=>(0,r.default)(n).indexOf(e)===t))}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.union=n var i=(0,t.helper)(n) e.default=i})),define("ember-composable-helpers/helpers/values",["exports","@ember/component/helper"],(function(e,t){"use strict" function r(e){let[t]=e -return t?Object.values(t):t}Object.defineProperty(e,"__esModule",{value:!0}),e.values=r,e.default=void 0 +return t?Object.values(t):t}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.values=r var n=(0,t.helper)(r) e.default=n})),define("ember-composable-helpers/helpers/without",["exports","@ember/component/helper","@ember/array"],(function(e,t,r){"use strict" -function n(e,t){return!!(0,r.isArray)(t)&&((0,r.isArray)(e)&&e.length?t.reduce(((t,n)=>function(e,t){return(0,r.A)(t).includes(e)}(n,e)?t:t.concat(n)),[]):(0,r.A)(t).without(e))}Object.defineProperty(e,"__esModule",{value:!0}),e.without=n,e.default=void 0 +function n(e,t){return!!(0,r.isArray)(t)&&((0,r.isArray)(e)&&e.length?t.reduce(((t,n)=>function(e,t){return(0,r.A)(t).includes(e)}(n,e)?t:t.concat(n)),[]):(0,r.A)(t).without(e))}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.without=n var i=(0,t.helper)((function(e){let[t,r]=e return n(t,r)})) -e.default=i})),define("ember-composable-helpers/index",["exports","ember-composable-helpers/helpers/append","ember-composable-helpers/helpers/chunk","ember-composable-helpers/helpers/compact","ember-composable-helpers/helpers/compute","ember-composable-helpers/helpers/dec","ember-composable-helpers/helpers/drop","ember-composable-helpers/helpers/filter-by","ember-composable-helpers/helpers/filter","ember-composable-helpers/helpers/find-by","ember-composable-helpers/helpers/flatten","ember-composable-helpers/helpers/group-by","ember-composable-helpers/helpers/has-next","ember-composable-helpers/helpers/has-previous","ember-composable-helpers/helpers/inc","ember-composable-helpers/helpers/intersect","ember-composable-helpers/helpers/invoke","ember-composable-helpers/helpers/join","ember-composable-helpers/helpers/map-by","ember-composable-helpers/helpers/map","ember-composable-helpers/helpers/next","ember-composable-helpers/helpers/object-at","ember-composable-helpers/helpers/optional","ember-composable-helpers/helpers/pipe-action","ember-composable-helpers/helpers/pipe","ember-composable-helpers/helpers/previous","ember-composable-helpers/helpers/queue","ember-composable-helpers/helpers/range","ember-composable-helpers/helpers/reduce","ember-composable-helpers/helpers/reject-by","ember-composable-helpers/helpers/repeat","ember-composable-helpers/helpers/reverse","ember-composable-helpers/helpers/shuffle","ember-composable-helpers/helpers/slice","ember-composable-helpers/helpers/sort-by","ember-composable-helpers/helpers/take","ember-composable-helpers/helpers/toggle-action","ember-composable-helpers/helpers/toggle","ember-composable-helpers/helpers/union","ember-composable-helpers/helpers/without"],(function(e,t,r,n,i,o,s,a,l,u,c,d,h,p,f,m,g,v,b,y,_,w,O,x,P,S,T,E,C,k,M,A,R,j,I,D,N,F,L,z){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"AppendHelper",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"ChunkHelper",{enumerable:!0,get:function(){return r.default}}),Object.defineProperty(e,"CompactHelper",{enumerable:!0,get:function(){return n.default}}),Object.defineProperty(e,"ComputeHelper",{enumerable:!0,get:function(){return i.default}}),Object.defineProperty(e,"DecHelper",{enumerable:!0,get:function(){return o.default}}),Object.defineProperty(e,"DropHelper",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(e,"FilterByHelper",{enumerable:!0,get:function(){return a.default}}),Object.defineProperty(e,"FilterHelper",{enumerable:!0,get:function(){return l.default}}),Object.defineProperty(e,"FindByHelper",{enumerable:!0,get:function(){return u.default}}),Object.defineProperty(e,"FlattenHelper",{enumerable:!0,get:function(){return c.default}}),Object.defineProperty(e,"GroupByHelper",{enumerable:!0,get:function(){return d.default}}),Object.defineProperty(e,"HasNextHelper",{enumerable:!0,get:function(){return h.default}}),Object.defineProperty(e,"HasPreviousHelper",{enumerable:!0,get:function(){return p.default}}),Object.defineProperty(e,"IncHelper",{enumerable:!0,get:function(){return f.default}}),Object.defineProperty(e,"IntersectHelper",{enumerable:!0,get:function(){return m.default}}),Object.defineProperty(e,"InvokeHelper",{enumerable:!0,get:function(){return g.default}}),Object.defineProperty(e,"JoinHelper",{enumerable:!0,get:function(){return v.default}}),Object.defineProperty(e,"MapByHelper",{enumerable:!0,get:function(){return b.default}}),Object.defineProperty(e,"MapHelper",{enumerable:!0,get:function(){return y.default}}),Object.defineProperty(e,"NextHelper",{enumerable:!0,get:function(){return _.default}}),Object.defineProperty(e,"ObjectAtHelper",{enumerable:!0,get:function(){return w.default}}),Object.defineProperty(e,"OptionalHelper",{enumerable:!0,get:function(){return O.default}}),Object.defineProperty(e,"PipeActionHelper",{enumerable:!0,get:function(){return x.default}}),Object.defineProperty(e,"PipeHelper",{enumerable:!0,get:function(){return P.default}}),Object.defineProperty(e,"PreviousHelper",{enumerable:!0,get:function(){return S.default}}),Object.defineProperty(e,"QueueHelper",{enumerable:!0,get:function(){return T.default}}),Object.defineProperty(e,"RangeHelper",{enumerable:!0,get:function(){return E.default}}),Object.defineProperty(e,"ReduceHelper",{enumerable:!0,get:function(){return C.default}}),Object.defineProperty(e,"RejectByHelper",{enumerable:!0,get:function(){return k.default}}) -Object.defineProperty(e,"RepeatHelper",{enumerable:!0,get:function(){return M.default}}),Object.defineProperty(e,"ReverseHelper",{enumerable:!0,get:function(){return A.default}}),Object.defineProperty(e,"ShuffleHelper",{enumerable:!0,get:function(){return R.default}}),Object.defineProperty(e,"SliceHelper",{enumerable:!0,get:function(){return j.default}}),Object.defineProperty(e,"SortByHelper",{enumerable:!0,get:function(){return I.default}}),Object.defineProperty(e,"TakeHelper",{enumerable:!0,get:function(){return D.default}}),Object.defineProperty(e,"ToggleActionHelper",{enumerable:!0,get:function(){return N.default}}),Object.defineProperty(e,"ToggleHelper",{enumerable:!0,get:function(){return F.default}}),Object.defineProperty(e,"UnionHelper",{enumerable:!0,get:function(){return L.default}}),Object.defineProperty(e,"WithoutHelper",{enumerable:!0,get:function(){return z.default}})})),define("ember-composable-helpers/utils/as-array",["exports","@ember/array","@ember/object"],(function(e,t,r){"use strict" +e.default=i})),define("ember-composable-helpers/index",["exports","ember-composable-helpers/helpers/append","ember-composable-helpers/helpers/chunk","ember-composable-helpers/helpers/compact","ember-composable-helpers/helpers/compute","ember-composable-helpers/helpers/dec","ember-composable-helpers/helpers/drop","ember-composable-helpers/helpers/filter-by","ember-composable-helpers/helpers/filter","ember-composable-helpers/helpers/find-by","ember-composable-helpers/helpers/flatten","ember-composable-helpers/helpers/group-by","ember-composable-helpers/helpers/has-next","ember-composable-helpers/helpers/has-previous","ember-composable-helpers/helpers/inc","ember-composable-helpers/helpers/intersect","ember-composable-helpers/helpers/invoke","ember-composable-helpers/helpers/join","ember-composable-helpers/helpers/map-by","ember-composable-helpers/helpers/map","ember-composable-helpers/helpers/next","ember-composable-helpers/helpers/object-at","ember-composable-helpers/helpers/optional","ember-composable-helpers/helpers/pipe-action","ember-composable-helpers/helpers/pipe","ember-composable-helpers/helpers/previous","ember-composable-helpers/helpers/queue","ember-composable-helpers/helpers/range","ember-composable-helpers/helpers/reduce","ember-composable-helpers/helpers/reject-by","ember-composable-helpers/helpers/repeat","ember-composable-helpers/helpers/reverse","ember-composable-helpers/helpers/shuffle","ember-composable-helpers/helpers/slice","ember-composable-helpers/helpers/sort-by","ember-composable-helpers/helpers/take","ember-composable-helpers/helpers/toggle-action","ember-composable-helpers/helpers/toggle","ember-composable-helpers/helpers/union","ember-composable-helpers/helpers/without"],(function(e,t,r,n,i,o,s,a,l,u,c,d,h,p,f,m,g,v,b,y,_,w,O,x,S,T,P,k,E,C,M,j,A,R,I,N,D,F,L,z){"use strict" +Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"AppendHelper",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"ChunkHelper",{enumerable:!0,get:function(){return r.default}}),Object.defineProperty(e,"CompactHelper",{enumerable:!0,get:function(){return n.default}}),Object.defineProperty(e,"ComputeHelper",{enumerable:!0,get:function(){return i.default}}),Object.defineProperty(e,"DecHelper",{enumerable:!0,get:function(){return o.default}}),Object.defineProperty(e,"DropHelper",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(e,"FilterByHelper",{enumerable:!0,get:function(){return a.default}}),Object.defineProperty(e,"FilterHelper",{enumerable:!0,get:function(){return l.default}}),Object.defineProperty(e,"FindByHelper",{enumerable:!0,get:function(){return u.default}}),Object.defineProperty(e,"FlattenHelper",{enumerable:!0,get:function(){return c.default}}),Object.defineProperty(e,"GroupByHelper",{enumerable:!0,get:function(){return d.default}}),Object.defineProperty(e,"HasNextHelper",{enumerable:!0,get:function(){return h.default}}),Object.defineProperty(e,"HasPreviousHelper",{enumerable:!0,get:function(){return p.default}}),Object.defineProperty(e,"IncHelper",{enumerable:!0,get:function(){return f.default}}),Object.defineProperty(e,"IntersectHelper",{enumerable:!0,get:function(){return m.default}}),Object.defineProperty(e,"InvokeHelper",{enumerable:!0,get:function(){return g.default}}),Object.defineProperty(e,"JoinHelper",{enumerable:!0,get:function(){return v.default}}),Object.defineProperty(e,"MapByHelper",{enumerable:!0,get:function(){return b.default}}),Object.defineProperty(e,"MapHelper",{enumerable:!0,get:function(){return y.default}}),Object.defineProperty(e,"NextHelper",{enumerable:!0,get:function(){return _.default}}),Object.defineProperty(e,"ObjectAtHelper",{enumerable:!0,get:function(){return w.default}}),Object.defineProperty(e,"OptionalHelper",{enumerable:!0,get:function(){return O.default}}),Object.defineProperty(e,"PipeActionHelper",{enumerable:!0,get:function(){return x.default}}),Object.defineProperty(e,"PipeHelper",{enumerable:!0,get:function(){return S.default}}),Object.defineProperty(e,"PreviousHelper",{enumerable:!0,get:function(){return T.default}}),Object.defineProperty(e,"QueueHelper",{enumerable:!0,get:function(){return P.default}}),Object.defineProperty(e,"RangeHelper",{enumerable:!0,get:function(){return k.default}}),Object.defineProperty(e,"ReduceHelper",{enumerable:!0,get:function(){return E.default}}),Object.defineProperty(e,"RejectByHelper",{enumerable:!0,get:function(){return C.default}}) +Object.defineProperty(e,"RepeatHelper",{enumerable:!0,get:function(){return M.default}}),Object.defineProperty(e,"ReverseHelper",{enumerable:!0,get:function(){return j.default}}),Object.defineProperty(e,"ShuffleHelper",{enumerable:!0,get:function(){return A.default}}),Object.defineProperty(e,"SliceHelper",{enumerable:!0,get:function(){return R.default}}),Object.defineProperty(e,"SortByHelper",{enumerable:!0,get:function(){return I.default}}),Object.defineProperty(e,"TakeHelper",{enumerable:!0,get:function(){return N.default}}),Object.defineProperty(e,"ToggleActionHelper",{enumerable:!0,get:function(){return D.default}}),Object.defineProperty(e,"ToggleHelper",{enumerable:!0,get:function(){return F.default}}),Object.defineProperty(e,"UnionHelper",{enumerable:!0,get:function(){return L.default}}),Object.defineProperty(e,"WithoutHelper",{enumerable:!0,get:function(){return z.default}})})),define("ember-composable-helpers/utils/as-array",["exports","@ember/array","@ember/object"],(function(e,t,r){"use strict" function n(e){return"function"==typeof e.toArray}function i(e){return"function"==typeof e.then}function o(e){if("number"==typeof e)throw new Error("Numbers not supported as arrays [ember-composable-helpers]") if("string"==typeof e)return e.split("") if(Array.isArray(e))return e @@ -8899,7 +9637,7 @@ if(!e)return[] if(a=e,!(Symbol.iterator in Object(a)))throw new Error("Argument, passed as array is not iterable [ember-composable-helpers]") return e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){return t=o(e),Object.isExtensible(t)?t:Array.from(t) var t}})),define("ember-composable-helpers/utils/comparison",["exports"],(function(e){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.lte=function(e,t){return e<=t},e.lt=function(e,t){return e=t},e.gt=function(e,t){return e>t}})),define("ember-composable-helpers/utils/get-index",["exports","@ember/array","ember-composable-helpers/utils/is-equal"],(function(e,t,r){"use strict" +Object.defineProperty(e,"__esModule",{value:!0}),e.gt=function(e,t){return e>t},e.gte=function(e,t){return e>=t},e.lt=function(e,t){return e(0,r.default)(e,n,i)))) let s=(0,t.A)(e).indexOf(o) @@ -8910,63 +9648,73 @@ Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){return"ob Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){return(0,r.default)(e)&&function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{} return"function"===(0,t.typeOf)(e.then)&&"function"===(0,t.typeOf)(e.catch)}(e)}})),define("ember-concurrency-decorators/index",["exports","@ember-decorators/utils/decorator","@ember/debug","ember-concurrency","ember-concurrency-decorators/last-value"],(function(e,t,r,n,i){"use strict" function o(e){return"function"==typeof e}function s(e){const t=function(e){return"function"==typeof e.initializer?e.initializer.call(void 0):"function"==typeof e.get?e.get.call(void 0):e.value?e.value:void 0}(e) -return o(t)||function(e){return"object"==typeof e&&null!==e&&o(e.perform)}(t)?(0,n.task)(t):void 0}function a(e){return(0,n.taskGroup)()}function l(e,t){const r=Object.keys(e) -for(const n of r){const r=e[n] -!0===r?t[n]():t[n](r)}return t}function u(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} +return o(t)||function(e){return"object"==typeof e&&null!==e&&o(e.perform)}(t)?(0,n.task)(t):void 0}function a(e){return(0,n.taskGroup)()}function l(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} return(0,t.decoratorWithParams)((function(t,n,i){let[o]=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[] const{initializer:s,value:a}=i -return delete i.initializer,delete i.value,l({...r,...o},e({...i,initializer:s,value:a}))(t,n,i)}))}Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"lastValue",{enumerable:!0,get:function(){return i.default}}),e.enqueueTaskGroup=e.keepLatestTaskGroup=e.dropTaskGroup=e.restartableTaskGroup=e.taskGroup=e.enqueueTask=e.keepLatestTask=e.dropTask=e.restartableTask=e.task=void 0 -const c=u(s) -e.task=c -const d=u(s,{restartable:!0}) -e.restartableTask=d -const h=u(s,{drop:!0}) -e.dropTask=h -const p=u(s,{keepLatest:!0}) -e.keepLatestTask=p -const f=u(s,{enqueue:!0}) -e.enqueueTask=f -const m=u(a) -e.taskGroup=m -const g=u(a,{restartable:!0}) -e.restartableTaskGroup=g -const v=u(a,{drop:!0}) -e.dropTaskGroup=v -const b=u(a,{keepLatest:!0}) -e.keepLatestTaskGroup=b -const y=u(a,{enqueue:!0}) -e.enqueueTaskGroup=y})),define("ember-concurrency-decorators/last-value",["exports","@ember-decorators/utils/decorator","@ember/debug","@ember/object"],(function(e,t,r,n){"use strict" +return delete i.initializer,delete i.value,function(e,t){const r=Object.keys(e) +for(const n of r){const r=e[n] +!0===r?t[n]():t[n](r)}return t}({...r,...o},e({...i,initializer:s,value:a}))(t,n,i)}))}Object.defineProperty(e,"__esModule",{value:!0}),e.keepLatestTaskGroup=e.keepLatestTask=e.enqueueTaskGroup=e.enqueueTask=e.dropTaskGroup=e.dropTask=void 0,Object.defineProperty(e,"lastValue",{enumerable:!0,get:function(){return i.default}}),e.taskGroup=e.task=e.restartableTaskGroup=e.restartableTask=void 0 +const u=l(s) +e.task=u +const c=l(s,{restartable:!0}) +e.restartableTask=c +const d=l(s,{drop:!0}) +e.dropTask=d +const h=l(s,{keepLatest:!0}) +e.keepLatestTask=h +const p=l(s,{enqueue:!0}) +e.enqueueTask=p +const f=l(a) +e.taskGroup=f +const m=l(a,{restartable:!0}) +e.restartableTaskGroup=m +const g=l(a,{drop:!0}) +e.dropTaskGroup=g +const v=l(a,{keepLatest:!0}) +e.keepLatestTaskGroup=v +const b=l(a,{enqueue:!0}) +e.enqueueTaskGroup=b})),define("ember-concurrency-decorators/last-value",["exports","@ember-decorators/utils/decorator","@ember/debug","@ember/object"],(function(e,t,r,n){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 var i=(0,t.decoratorWithRequiredParams)((function(e,t,r,i){let[o]=i const{initializer:s}=r delete r.initializer return(0,n.computed)(`${o}.lastSuccessful`,(function(){const e=(0,n.get)(this,`${o}.lastSuccessful`) return e?(0,n.get)(e,"value"):s?s.call(this):void 0}))(e,t,r)})) -e.default=i})),define("ember-concurrency/-private/cancelable-promise-helpers",["exports","@ember/debug","rsvp","ember-concurrency/-private/task-instance","ember-concurrency/-private/external/yieldables"],(function(e,t,r,n,i){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.hashSettled=e.hash=e.race=e.allSettled=e.all=void 0 -const o=h(r.default.Promise,"all",c) +e.default=i})),define("ember-concurrency/-private/async-arrow-runtime",["exports","ember-concurrency/-private/task-factory"],(function(e,t){"use strict" +Object.defineProperty(e,"__esModule",{value:!0}),e.buildTask=function(e,r,n,i){let o=r +i&&(o=Object.assign({},o),o[i]=!0) +const s=e() +return new t.TaskFactory(n||"",s.generator,o).createTask(s.context)}})),define("ember-concurrency/-private/cancelable-promise-helpers",["exports","@ember/debug","rsvp","ember-concurrency/-private/task-instance","ember-concurrency/-private/external/yieldables"],(function(e,t,r,n,i){"use strict" +Object.defineProperty(e,"__esModule",{value:!0}),e.race=e.hashSettled=e.hash=e.allSettled=e.all=void 0 +const o=p(r.default.Promise,"all",c) e.all=o -const s=h(r.default,"allSettled",c) +const s=p(r.default,"allSettled",c) e.allSettled=s -const a=h(r.Promise,"race",c) +const a=p(r.Promise,"race",c) e.race=a -const l=h(r.default,"hash",d) +const l=p(r.default,"hash",d) e.hash=l -const u=h(r.default,"hashSettled",d) -function c(e){return e}function d(e){return Object.keys(e).map((t=>e[t]))}function h(e,t,o){return function(s){let a=o(s) -a.forEach((e=>{e&&e instanceof n.TaskInstance&&(e.executor.asyncErrorsHandled=!0)})) -let l=r.default.defer() -e[t](s).then(l.resolve,l.reject) -let u=!1,c=()=>{u||(u=!0,a.forEach((e=>{e&&(e instanceof n.TaskInstance?e.cancel():"function"==typeof e[i.cancelableSymbol]&&e[i.cancelableSymbol]())})))},d=l.promise.finally(c) -return d[i.cancelableSymbol]=c,d}}e.hashSettled=u})),define("ember-concurrency/-private/ember-environment",["exports","ember","rsvp","ember-concurrency/-private/external/environment","@ember/debug","@ember/runloop"],(function(e,t,r,n,i,o){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.EMBER_ENVIRONMENT=e.EmberEnvironment=void 0 -class s extends n.Environment{assert(){}async(e){(0,o.join)((()=>(0,o.once)(null,e)))}reportUncaughtRejection(e){(0,o.next)(null,(function(){if(!t.default.onerror)throw e +const u=p(r.default,"hashSettled",d) +function c(e){return e}function d(e){return Object.keys(e).map((t=>e[t]))}function h(e){if(e)if(e instanceof n.TaskInstance)e.executor.asyncErrorsHandled=!0 +else if(e instanceof i.Yieldable)return e._toPromise() +return e}function p(e,t,o){return function(s){let a=function(e,t){if(Array.isArray(e))return e.map(t) +if("object"==typeof e&&null!==e){let r={} +return Object.keys(e).forEach((n=>{r[n]=t(e[n])})),r}return e}(s,h),l=o(a),u=r.default.defer() +e[t](a).then(u.resolve,u.reject) +let c=!1,d=()=>{c||(c=!0,l.forEach((e=>{e&&(e instanceof n.TaskInstance?e.cancel():"function"==typeof e[i.cancelableSymbol]&&e[i.cancelableSymbol]())})))},p=u.promise.finally(d) +return p[i.cancelableSymbol]=d,p}}e.hashSettled=u})),define("ember-concurrency/-private/ember-environment",["exports","ember","rsvp","ember-concurrency/-private/external/environment","@ember/debug","@ember/runloop"],(function(e,t,r,n,i,o){"use strict" +Object.defineProperty(e,"__esModule",{value:!0}),e.EmberEnvironment=e.EMBER_ENVIRONMENT=void 0 +class s extends n.Environment{assert(){}async(e){(0,o.join)((()=>(0,o.schedule)("actions",e)))}reportUncaughtRejection(e){(0,o.next)(null,(function(){if(!t.default.onerror)throw e t.default.onerror(e)}))}defer(){return(0,r.defer)()}globalDebuggingEnabled(){return t.default.ENV.DEBUG_TASKS}}e.EmberEnvironment=s const a=new s e.EMBER_ENVIRONMENT=a})),define("ember-concurrency/-private/external/environment",["exports"],(function(e){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.Environment=void 0 -e.Environment=class{assert(){}async(){}reportUncaughtRejection(){}defer(){}globalDebuggingEnabled(){}}})),define("ember-concurrency/-private/external/generator-state",["exports"],(function(e){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.GeneratorState=e.GeneratorStepResult=void 0 +Object.defineProperty(e,"__esModule",{value:!0}),e.Environment=e.DEFAULT_ENVIRONMENT=void 0 +class t{assert(){}async(e){Promise.resolve().then(e)}reportUncaughtRejection(){this.async((e=>{throw e}))}defer(){let e={promise:null,resolve:null,reject:null},t=new Promise(((t,r)=>{e.resolve=t,e.reject=r})) +return e.promise=t,e}globalDebuggingEnabled(){return!1}}e.Environment=t +const r=new t +e.DEFAULT_ENVIRONMENT=r})) +define("ember-concurrency/-private/external/generator-state",["exports"],(function(e){"use strict" +Object.defineProperty(e,"__esModule",{value:!0}),e.GeneratorStepResult=e.GeneratorState=void 0 class t{constructor(e,t,r){this.value=e,this.done=t,this.errored=r}}e.GeneratorStepResult=t e.GeneratorState=class{constructor(e){this.done=!1,this.generatorFactory=e,this.iterator=null}step(e,r){try{let n=this.getIterator(),{value:i,done:o}=n[r](e) return o?this.finalize(i,!1):new t(i,!1,!1)}catch(n){return this.finalize(n,!0)}}getIterator(){return this.iterator||this.done||(this.iterator=this.generatorFactory()),this.iterator}finalize(e,r){return this.done=!0,this.iterator=null,new t(e,!0,r)}}})),define("ember-concurrency/-private/external/scheduler/policies/bounded-policy",["exports"],(function(e){"use strict" @@ -8980,7 +9728,7 @@ e.default=s})),define("ember-concurrency/-private/external/scheduler/policies/en Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 class n{constructor(e){this.remainingSlots=e}step(){return this.remainingSlots>0?(this.remainingSlots--,r.STARTED):r.QUEUED}}class i extends t.default{makeReducer(){return new n(this.maxConcurrency)}}var o=i e.default=o})),define("ember-concurrency/-private/external/scheduler/policies/execution-states",["exports"],(function(e){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.makeCancelState=e.QUEUED=e.STARTED=e.TYPE_QUEUED=e.TYPE_STARTED=e.TYPE_CANCELLED=void 0 +Object.defineProperty(e,"__esModule",{value:!0}),e.makeCancelState=e.TYPE_STARTED=e.TYPE_QUEUED=e.TYPE_CANCELLED=e.STARTED=e.QUEUED=void 0 const t="CANCELLED" e.TYPE_CANCELLED=t const r="STARTED" @@ -8996,8 +9744,7 @@ Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 const n=(0,r.makeCancelState)("it belongs to a 'keepLatest' Task that was already running") class i{constructor(e,t){this.remainingSlots=e,this.numToCancel=t}step(){return this.remainingSlots>0?(this.remainingSlots--,r.STARTED):this.numToCancel>0?(this.numToCancel--,n):r.QUEUED}}class o extends t.default{makeReducer(e,t){let r=e+t return new i(this.maxConcurrency,r-this.maxConcurrency-1)}}var s=o -e.default=s})) -define("ember-concurrency/-private/external/scheduler/policies/restartable-policy",["exports","ember-concurrency/-private/external/scheduler/policies/bounded-policy","ember-concurrency/-private/external/scheduler/policies/execution-states"],(function(e,t,r){"use strict" +e.default=s})),define("ember-concurrency/-private/external/scheduler/policies/restartable-policy",["exports","ember-concurrency/-private/external/scheduler/policies/bounded-policy","ember-concurrency/-private/external/scheduler/policies/execution-states"],(function(e,t,r){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 const n=(0,r.makeCancelState)("it belongs to a 'restartable' Task that was .perform()ed again") class i{constructor(e){this.numToCancel=e}step(){return this.numToCancel>0?(this.numToCancel--,n):r.STARTED}}class o extends t.default{makeReducer(e,t){return new i(e+t-this.maxConcurrency)}}var s=o @@ -9007,7 +9754,8 @@ const r=new class{step(){return t.STARTED}} var n=class{makeReducer(){return r}} e.default=n})),define("ember-concurrency/-private/external/scheduler/refresh",["exports","ember-concurrency/-private/external/scheduler/policies/execution-states"],(function(e,t){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var r=class{constructor(e,t,r){this.stateTracker=t,this.schedulerPolicy=e,this.initialTaskInstances=r,this.startingInstances=[]}process(){let[e,t,r]=this.filterFinishedTaskInstances(),n=this.schedulerPolicy.makeReducer(t,r),i=e.filter((e=>this.setTaskInstanceExecutionState(e,n.step()))) +const r=new Map +var n=class{constructor(e,t,r){this.stateTracker=t,this.schedulerPolicy=e,this.initialTaskInstances=r,this.startingInstances=[]}process(){let[e,t,r]=this.filterFinishedTaskInstances(),n=this.schedulerPolicy.makeReducer(t,r),i=e.filter((e=>this.setTaskInstanceExecutionState(e,n.step()))) return this.stateTracker.computeFinalStates((e=>this.applyState(e))),this.startingInstances.forEach((e=>e.start())),i}filterFinishedTaskInstances(){let e=0,t=0 return[this.initialTaskInstances.filter((r=>{let n=this.stateTracker.stateFor(r.task),i=r.executor.state return i.isFinished?(n.onCompletion(r),!1):(i.hasStarted?e+=1:t+=1,!0)})),e,t]}setTaskInstanceExecutionState(e,r){let n=this.stateTracker.stateFor(e.task) @@ -9015,12 +9763,14 @@ switch(e.executor.counted||(e.executor.counted=!0,n.onPerformed(e)),r.type){case case t.TYPE_STARTED:return e.executor.state.hasStarted||(this.startingInstances.push(e),n.onStart(e)),n.onRunning(e),!0 case t.TYPE_QUEUED:return n.onQueued(e),!0}}applyState(e){let{taskable:t}=e if(!t.onState)return -let r=Object.assign({numRunning:e.numRunning,numQueued:e.numQueued,numPerformedInc:e.numPerformedInc},e.attrs) -t.onState(r,t)}} -e.default=r})),define("ember-concurrency/-private/external/scheduler/scheduler",["exports","ember-concurrency/-private/external/scheduler/refresh","ember-concurrency/-private/external/scheduler/state-tracker/state-tracker","ember-concurrency/-private/external/scheduler/state-tracker/null-state-tracker"],(function(e,t,r,n){"use strict" +const{guid:n}=t +if(r.has(n)&&e.tag{r.task.guids[e]&&r.executor.cancel(t)})).filter((e=>!!e)) -return Promise.all(r)}perform(e){e.onFinalize((()=>this.scheduleRefresh())),this.taskInstances.push(e),this.refresh()}scheduleRefresh(){}refresh(){let e=this.stateTrackingEnabled?new r.default:new n.default,i=new t.default(this.schedulerPolicy,e,this.taskInstances) +return Promise.all(r)}perform(e){e.onFinalize((()=>this.scheduleRefresh())),this.taskInstances.push(e),this.refresh()}scheduleRefresh(){Promise.resolve().then((()=>this.refresh()))}refresh(){let e=this.stateTrackingEnabled?new r.default:new n.default,i=new t.default(this.schedulerPolicy,e,this.taskInstances) this.taskInstances=i.process()}} e.default=i})),define("ember-concurrency/-private/external/scheduler/state-tracker/null-state-tracker",["exports","ember-concurrency/-private/external/scheduler/state-tracker/null-state"],(function(e,t){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 @@ -9031,21 +9781,58 @@ Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 var t=class{onCompletion(){}onPerformed(){}onStart(){}onRunning(){}onQueued(){}} e.default=t})),define("ember-concurrency/-private/external/scheduler/state-tracker/state-tracker",["exports","ember-concurrency/-private/external/scheduler/state-tracker/state"],(function(e,t){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var r=class{constructor(){this.states={}}stateFor(e){let r=e.guid,n=this.states[r] -return n||(n=this.states[r]=new t.default(e)),n}computeFinalStates(e){this.computeRecursiveState(),this.forEachState((t=>e(t)))}computeRecursiveState(){this.forEachState((e=>{let t=e +const r=new Map +var n=class{constructor(){this.states=new Map}stateFor(e){let n=e.guid,i=this.states.get(n) +if(!i){let o=r.has(n)?r.get(n):0 +i=new t.default(e,++o),this.states.set(n,i),r.set(n,o)}return i}computeFinalStates(e){this.computeRecursiveState(),this.forEachState((t=>e(t)))}computeRecursiveState(){this.forEachState((e=>{let t=e e.recurseTaskGroups((e=>{let r=this.stateFor(e) -r.applyStateFrom(t),t=r}))}))}forEachState(e){Object.keys(this.states).forEach((t=>e(this.states[t])))}} -e.default=r})),define("ember-concurrency/-private/external/scheduler/state-tracker/state",["exports","ember-concurrency/-private/external/task-instance/completion-states"],(function(e,t){"use strict" +r.applyStateFrom(t),t=r}))}))}forEachState(e){this.states.forEach((t=>e(t)))}} +e.default=n})),define("ember-concurrency/-private/external/scheduler/state-tracker/state",["exports","ember-concurrency/-private/external/task-instance/completion-states"],(function(e,t){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var r=class{constructor(e){this.taskable=e,this.group=e.group,this.numRunning=0,this.numQueued=0,this.numPerformedInc=0,this.attrs={}}onCompletion(e){let r=e.completionState +var r=class{constructor(e,t){this.taskable=e,this.group=e.group,this.numRunning=0,this.numQueued=0,this.numPerformedInc=0,this.attrs={},this.tag=t}onCompletion(e){let r=e.completionState this.attrs.lastRunning=null,this.attrs.lastComplete=e,r===t.COMPLETION_SUCCESS?this.attrs.lastSuccessful=e:(r===t.COMPLETION_ERROR?this.attrs.lastErrored=e:r===t.COMPLETION_CANCEL&&(this.attrs.lastCanceled=e),this.attrs.lastIncomplete=e)}onPerformed(e){this.numPerformedInc+=1,this.attrs.lastPerformed=e}onStart(e){this.attrs.last=e}onRunning(e){this.attrs.lastRunning=e,this.numRunning+=1}onQueued(){this.numQueued+=1}recurseTaskGroups(e){let t=this.group for(;t;)e(t),t=t.group}applyStateFrom(e){Object.assign(this.attrs,e.attrs),this.numRunning+=e.numRunning,this.numQueued+=e.numQueued,this.numPerformedInc+=e.numPerformedInc}} -e.default=r})),define("ember-concurrency/-private/external/task-instance/base",["exports","ember-concurrency/-private/external/task-instance/initial-state","ember-concurrency/-private/external/yieldables","ember-concurrency/-private/external/task-instance/cancelation"],(function(e,t,r,n){"use strict" +e.default=r})),define("ember-concurrency/-private/external/task-decorators",["exports","ember-concurrency/-private/external/task-factory"],(function(e,t){"use strict" +function r(e,r,n){let i,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:t.TaskFactory,{initializer:a,get:l,value:u}=n +a?i=a.call(void 0):l?i=l.call(void 0):u&&(i=u),i.displayName=`${r} (task)` +let c=new WeakMap,d=new s(r,i,o[0]||{}) +return d._setupEmberKVO(e),{get(){let e=c.get(this) +return e||(e=d.createTask(this),c.set(this,e)),e}}}function n(e,r,n){let i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:t.TaskFactory,s=new WeakMap,a=new o(r,null,i[0]||{}) +return{get(){let e=s.get(this) +return e||(e=a.createTaskGroup(this),s.set(this,e)),e}}}function i(e){return function(){for(var t=arguments.length,r=new Array(t),n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.TaskFactory +return i((function(t,i,o){let[s]=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],a=Object.assign({},{...r,...s}) +return e(t,i,o,[a],n)}))}Object.defineProperty(e,"__esModule",{value:!0}),e.createTaskDecorator=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.TaskFactory +return o(r,e,n)},e.createTaskGroupDecorator=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.TaskFactory +return o(n,e,r)},e.decoratorWithParams=i,e.lastValue=void 0 +const s=i((function(e,t,r){let[n]=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[] +const{initializer:i}=r +return delete r.initializer,{get(){let e=this[n].lastSuccessful +return e?e.value:i?i.call(this):void 0}}})) +e.lastValue=s})),define("ember-concurrency/-private/external/task-factory",["exports","ember-concurrency/-private/external/scheduler/scheduler","ember-concurrency/-private/external/scheduler/policies/unbounded-policy","ember-concurrency/-private/external/scheduler/policies/enqueued-policy","ember-concurrency/-private/external/scheduler/policies/drop-policy","ember-concurrency/-private/external/scheduler/policies/keep-latest-policy","ember-concurrency/-private/external/scheduler/policies/restartable-policy","ember-concurrency/-private/external/task/task","ember-concurrency/-private/external/task/task-group","ember-concurrency/-private/external/environment"],(function(e,t,r,n,i,o,s,a,l,u){"use strict" +function c(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var r=e[Symbol.toPrimitive] +if(void 0!==r){var n=r.call(e,t||"default") +if("object"!=typeof n)return n +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}Object.defineProperty(e,"__esModule",{value:!0}),e.TaskFactory=void 0,e.getModifier=function(e){return d[e]},e.hasModifier=h,e.registerModifier=function(e,t){if(d[e])throw new Error(`A modifier with the name '${e}' has already been defined.`) +d[e]=t} +const d={enqueue:(e,t)=>t&&e.setBufferPolicy(n.default),evented:(e,t)=>t&&e.setEvented(t),debug:(e,t)=>t&&e.setDebug(t),drop:(e,t)=>t&&e.setBufferPolicy(i.default),group:(e,t)=>e.setGroup(t),keepLatest:(e,t)=>t&&e.setBufferPolicy(o.default),maxConcurrency:(e,t)=>e.setMaxConcurrency(t),onState:(e,t)=>e.setOnState(t),restartable:(e,t)=>t&&e.setBufferPolicy(s.default)} +function h(e){return e in d}e.TaskFactory=class{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{} +c(this,"env",u.DEFAULT_ENVIRONMENT),c(this,"_debug",null),c(this,"_enabledModifiers",[]),c(this,"_hasSetConcurrencyConstraint",!1),c(this,"_hasSetBufferPolicy",!1),c(this,"_hasEnabledEvents",!1),c(this,"_maxConcurrency",null),c(this,"_onStateCallback",((e,t)=>t.setState(e))),c(this,"_schedulerPolicyClass",r.default),c(this,"_taskGroupPath",null),this.name=e,this.taskDefinition=t,this.options=n,this._processModifierOptions(n)}createTask(e){let t=this.getTaskOptions(e) +return new a.Task(Object.assign({generatorFactory:t=>this.taskDefinition.apply(e,t)},t))}createTaskGroup(e){let t=this.getTaskOptions(e) +return new l.TaskGroup(t)}getModifier(e){if(h(e))return d[e].bind(null,this)}getOptions(){return this.options}getScheduler(e,r){return new t.default(e,r)}getTaskOptions(e){let t,r,n=this._onStateCallback +if(this._taskGroupPath){if(t=e[this._taskGroupPath],!(t instanceof l.TaskGroup))throw new Error(`Expected group '${this._taskGroupPath}' to be defined but was not found.`) +r=t.scheduler}else{let e=new this._schedulerPolicyClass(this._maxConcurrency) +r=this.getScheduler(e,n&&"function"==typeof n)}return{context:e,debug:this._debug,env:this.env,name:this.name,group:t,scheduler:r,hasEnabledEvents:this._hasEnabledEvents,onStateCallback:n,enabledModifiers:this._enabledModifiers,modifierOptions:this.getOptions()}}setBufferPolicy(e){return function(e){if(e._hasSetBufferPolicy)throw new Error(`Cannot set multiple buffer policies on a task or task group. ${e._schedulerPolicyClass} has already been set for task or task group '${e.name}'`)}(this),this._hasSetBufferPolicy=!0,this._hasSetConcurrencyConstraint=!0,this._schedulerPolicyClass=e,function(e){if(e._hasSetConcurrencyConstraint&&e._taskGroupPath)throw new Error("Cannot use both 'group' and other concurrency-constraining task modifiers (e.g. 'drop', 'enqueue', 'restartable')")}(this),this}setDebug(e){return this._debug=e,this}setEvented(e){return this._hasEnabledEvents=e,this}setMaxConcurrency(e){return this._hasSetConcurrencyConstraint=!0,this._maxConcurrency=e,this}setGroup(e){return this._taskGroupPath=e,this}setName(e){return this.name=e,this}setOnState(e){return this._onStateCallback=e,this}setTaskDefinition(e){return this.taskDefinition=e,this}_processModifierOptions(e){if(e)for(let t of Object.keys(e)){let r=e[t],n=this.getModifier(t) +"function"==typeof n&&n(r)&&this._enabledModifiers.push(t)}}}})),define("ember-concurrency/-private/external/task-instance/base",["exports","ember-concurrency/-private/external/task-instance/initial-state","ember-concurrency/-private/external/yieldables","ember-concurrency/-private/external/task-instance/cancelation"],(function(e,t,r,n){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.BaseTaskInstance=void 0 class i{constructor(e){let{task:t,args:r,executor:n,performType:i,hasEnabledEvents:o}=e this.task=t,this.args=r,this.performType=i,this.executor=n,this.executor.taskInstance=this,this.hasEnabledEvents=o}setState(){}onStarted(){}onSuccess(){}onError(){}onCancel(){}formatCancelReason(){}selfCancelLoopWarning(){}onFinalize(e){this.executor.onFinalize(e)}proceed(e,t,r){this.executor.proceedChecked(e,t,r)}[r.yieldableSymbol](e,t){return this.executor.onYielded(e,t)}cancel(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:".cancel() was explicitly called" this.executor.cancel(new n.CancelRequest(n.CANCEL_KIND_EXPLICIT,e))}then(){return this.executor.promise().then(...arguments)}catch(){return this.executor.promise().catch(...arguments)}finally(){return this.executor.promise().finally(...arguments)}toString(){return`${this.task} TaskInstance`}start(){return this.executor.start(),this}}e.BaseTaskInstance=i,Object.assign(i.prototype,t.INITIAL_STATE),Object.assign(i.prototype,{state:"waiting",isDropped:!1,isRunning:!0})})),define("ember-concurrency/-private/external/task-instance/cancelation",["exports"],(function(e){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.didCancel=function(e){return e&&e.name===t},e.CancelRequest=e.CANCEL_KIND_PARENT_CANCEL=e.CANCEL_KIND_LIFESPAN_END=e.CANCEL_KIND_YIELDABLE_CANCEL=e.CANCEL_KIND_EXPLICIT=e.TASK_CANCELATION_NAME=void 0 +Object.defineProperty(e,"__esModule",{value:!0}),e.TASK_CANCELATION_NAME=e.CancelRequest=e.CANCEL_KIND_YIELDABLE_CANCEL=e.CANCEL_KIND_PARENT_CANCEL=e.CANCEL_KIND_LIFESPAN_END=e.CANCEL_KIND_EXPLICIT=void 0,e.didCancel=function(e){return e&&e.name===t} const t="TaskCancelation" e.TASK_CANCELATION_NAME=t e.CANCEL_KIND_EXPLICIT="explicit" @@ -9053,12 +9840,12 @@ e.CANCEL_KIND_YIELDABLE_CANCEL="yielded" e.CANCEL_KIND_LIFESPAN_END="lifespan_end" e.CANCEL_KIND_PARENT_CANCEL="parent_cancel" e.CancelRequest=class{constructor(e,t){this.kind=e,this.reason=t,this.promise=new Promise((e=>{this.finalize=e}))}}})),define("ember-concurrency/-private/external/task-instance/completion-states",["exports"],(function(e){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.COMPLETION_CANCEL=e.COMPLETION_ERROR=e.COMPLETION_SUCCESS=e.COMPLETION_PENDING=void 0 +Object.defineProperty(e,"__esModule",{value:!0}),e.COMPLETION_SUCCESS=e.COMPLETION_PENDING=e.COMPLETION_ERROR=e.COMPLETION_CANCEL=void 0 e.COMPLETION_PENDING=0 e.COMPLETION_SUCCESS=1 e.COMPLETION_ERROR=2 e.COMPLETION_CANCEL=3})),define("ember-concurrency/-private/external/task-instance/executor",["exports","ember-concurrency/-private/external/generator-state","ember-concurrency/-private/external/task-instance/initial-state","ember-concurrency/-private/external/yieldables","ember-concurrency/-private/external/task-instance/completion-states","ember-concurrency/-private/external/task-instance/cancelation"],(function(e,t,r,n,i,o){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.getRunningInstance=function(){return c[c.length-1]},e.TaskInstanceExecutor=e.PERFORM_TYPE_LINKED=e.PERFORM_TYPE_UNLINKED=e.PERFORM_TYPE_DEFAULT=void 0 +Object.defineProperty(e,"__esModule",{value:!0}),e.TaskInstanceExecutor=e.PERFORM_TYPE_UNLINKED=e.PERFORM_TYPE_LINKED=e.PERFORM_TYPE_DEFAULT=void 0,e.getRunningInstance=function(){return c[c.length-1]} const s="PERFORM_TYPE_DEFAULT" e.PERFORM_TYPE_DEFAULT=s const a="PERFORM_TYPE_UNLINKED" @@ -9095,97 +9882,98 @@ Object.defineProperty(e,"__esModule",{value:!0}),e.INITIAL_STATE=void 0 const r={completionState:t.COMPLETION_PENDING,value:null,error:null,isSuccessful:!1,isError:!1,isCanceled:!1,hasStarted:!1,isFinished:!1} e.INITIAL_STATE=r})),define("ember-concurrency/-private/external/task/default-state",["exports"],(function(e){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.DEFAULT_STATE=void 0 -const t={last:null,lastRunning:null,lastStarted:null,lastPerformed:null,lastSuccessful:null,lastComplete:null,lastErrored:null,lastCanceled:null,lastIncomplete:null,performCount:0} +const t={last:null,lastRunning:null,lastPerformed:null,lastSuccessful:null,lastComplete:null,lastErrored:null,lastCanceled:null,lastIncomplete:null,performCount:0} e.DEFAULT_STATE=t,Object.freeze(t)})),define("ember-concurrency/-private/external/task/task-group",["exports","ember-concurrency/-private/external/task/taskable"],(function(e,t){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.TaskGroup=void 0 class r extends t.Taskable{}e.TaskGroup=r})),define("ember-concurrency/-private/external/task/task",["exports","ember-concurrency/-private/external/task/taskable","ember-concurrency/-private/external/task-instance/executor"],(function(e,t,r){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.Task=void 0 class n{constructor(e,t,r){this.task=e,this.performType=t,this.linkedObject=r}perform(){for(var e=arguments.length,t=new Array(e),r=0;r`}_clone(){return new i({context:this.context,debug:this.debug,env:this.env,generatorFactory:this.generatorFactory,group:this.group,hasEnabledEvents:this.hasEnabledEvents,name:this.name,onStateCallback:this.onStateCallback,scheduler:this.scheduler})}_curry(){let e=this._clone() +for(var t=arguments.length,r=new Array(t),n=0;nthis.generatorFactory(e),env:this.env,debug:this.debug}),performType:t,hasEnabledEvents:this.hasEnabledEvents}}}e.Task=i})),define("ember-concurrency/-private/external/task/taskable",["exports","ember-concurrency/-private/external/task/default-state","ember-concurrency/-private/external/task-instance/cancelation"],(function(e,t,r){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.Taskable=void 0 let n=0 -class i{constructor(e){this.options=e,Object.assign(this,e),this.guid="ec_"+n++,this.guids={},this.guids[this.guid]=!0,this.group&&Object.assign(this.guids,this.group.guids)}cancelAll(e){let{reason:t,cancelRequestKind:n,resetState:i}=e||{} +class i{constructor(e){this.context=e.context,this.debug=e.debug||!1,this.enabledModifiers=e.enabledModifiers,this.env=e.env,this.group=e.group,this.hasEnabledEvents=e.hasEnabledEvents,this.modifierOptions=e.modifierOptions,this.name=e.name,this.onStateCallback=e.onStateCallback,this.scheduler=e.scheduler,this.guid="ec_"+n++,this.guids={},this.guids[this.guid]=!0,this.group&&Object.assign(this.guids,this.group.guids)}cancelAll(e){let{reason:t,cancelRequestKind:n,resetState:i}=e||{} t=t||".cancelAll() was explicitly called on the Task" let o=new r.CancelRequest(n||r.CANCEL_KIND_EXPLICIT,t) -return this.scheduler.cancelAll(this.guid,o).then((()=>{i&&this._resetState()}))}_resetState(){this.setState(t.DEFAULT_STATE)}setState(){}}e.Taskable=i,Object.assign(i.prototype,t.DEFAULT_STATE),Object.assign(i.prototype,{numRunning:0,numQueued:0,isRunning:!1,isQueued:!1,isIdle:!0,state:"idle"})})),define("ember-concurrency/-private/external/yieldables",["exports"],(function(e){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.animationFrame=function(){return new s},e.rawTimeout=function(e){return new a(e)},e.forever=e.Yieldable=e.YIELDABLE_CANCEL=e.YIELDABLE_RETURN=e.YIELDABLE_THROW=e.YIELDABLE_CONTINUE=e.yieldableSymbol=e.cancelableSymbol=void 0 +return this.scheduler.cancelAll(this.guid,o).then((()=>{i&&this._resetState()}))}get _isAlive(){return!0}_resetState(){this.setState(t.DEFAULT_STATE)}setState(){}}e.Taskable=i,Object.assign(i.prototype,t.DEFAULT_STATE),Object.assign(i.prototype,{numRunning:0,numQueued:0,isRunning:!1,isQueued:!1,isIdle:!0,state:"idle"})})),define("ember-concurrency/-private/external/yieldables",["exports"],(function(e){"use strict" +Object.defineProperty(e,"__esModule",{value:!0}),e.Yieldable=e.YIELDABLE_THROW=e.YIELDABLE_RETURN=e.YIELDABLE_CONTINUE=e.YIELDABLE_CANCEL=void 0,e.animationFrame=function(){return new u},e.forever=e.cancelableSymbol=void 0,e.rawTimeout=function(e){return new c(e)},e.yieldableSymbol=void 0 const t="__ec_cancel__" e.cancelableSymbol=t const r="__ec_yieldable__" e.yieldableSymbol=r const n="next" e.YIELDABLE_CONTINUE=n -e.YIELDABLE_THROW="throw" -const i="return" -e.YIELDABLE_RETURN=i -e.YIELDABLE_CANCEL="cancel" -class o{constructor(){this.__ec_yieldable__=this.__ec_yieldable__.bind(this),this.__ec_cancel__=this.__ec_cancel__.bind(this)}_deferable(){let e={resolve:void 0,reject:void 0} -return e.promise=new Promise(((t,r)=>{e.resolve=t,e.reject=r})),e}_toPromise(){let e=this._deferable(),t={proceed(t,r,o){r==n||r==i?e.resolve(o):e.reject(o)}},r=this.__ec_yieldable__(t,0) -return e.promise.__ec_cancel__=r||this.__ec_cancel__,e.promise}then(){return this._toPromise().then(...arguments)}catch(){return this._toPromise().catch(...arguments)}finally(){return this._toPromise().finally(...arguments)}[r](){}[t](){}}e.Yieldable=o -class s extends o{constructor(){super(),this.timerId=null}[r](e,t){this.timerId=requestAnimationFrame((()=>{e.proceed(t,n,e._result)}))}[t](){cancelAnimationFrame(this.timerId),this.timerId=null}}class a extends o{constructor(e){super(),this.ms=e,this.timerId=null}[r](e,t){this.timerId=setTimeout((()=>{e.proceed(t,n,e._result)}),this.ms)}[t](){clearTimeout(this.timerId),this.timerId=null}}const l=new class extends o{[r](){}[t](){}} -e.forever=l})),define("ember-concurrency/-private/helpers",["exports","@ember/object","@ember/debug"],(function(e,t,r){"use strict" +const i="throw" +e.YIELDABLE_THROW=i +const o="return" +e.YIELDABLE_RETURN=o +const s="cancel" +e.YIELDABLE_CANCEL=s +class a{constructor(e,t){this._taskInstance=e,this._resumeIndex=t}getTaskInstance(){return this._taskInstance}cancel(){let e=this._taskInstance +e.proceed.call(e,this._resumeIndex,s)}next(e){let t=this._taskInstance +t.proceed.call(t,this._resumeIndex,n,e)}return(e){let t=this._taskInstance +t.proceed.call(t,this._resumeIndex,o,e)}throw(e){let t=this._taskInstance +t.proceed.call(t,this._resumeIndex,i,e)}}class l{constructor(){this[r]=this[r].bind(this)}onYield(){}_deferable(){let e={resolve:void 0,reject:void 0} +return e.promise=new Promise(((t,r)=>{e.resolve=t,e.reject=r})),e}_toPromise(){let e=this._deferable(),i={proceed(t,r,i){r==n||r==o?e.resolve(i):e.reject(i)}},s=this[r](i,0) +return e.promise[t]=s,e.promise}then(){return this._toPromise().then(...arguments)}catch(){return this._toPromise().catch(...arguments)}finally(){return this._toPromise().finally(...arguments)}[r](e,t){let r=new a(e,t) +return this.onYield(r)}}e.Yieldable=l +class u extends l{onYield(e){let t=requestAnimationFrame((()=>e.next())) +return()=>cancelAnimationFrame(t)}}class c extends l{constructor(e){super(),this.ms=e}onYield(e){let t=setTimeout((()=>e.next()),this.ms) +return()=>clearTimeout(t)}}const d=new class extends l{onYield(){}} +e.forever=d})),define("ember-concurrency/-private/helpers",["exports","@ember/object","@ember/debug"],(function(e,t,r){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.taskHelperClosure=function(e,r,n,i){let o=n[0],s=n.slice(1) return function(){if(o&&"function"==typeof o[r]){for(var e=arguments.length,n=new Array(e),a=0;a3&&void 0!==arguments[3]?arguments[3]:[],{initializer:s,get:a,value:l}=n -s?i=s.call(void 0):a?i=a.call(void 0):l&&(i=l),i.displayName=`${t} (task)` -let u=new WeakMap,c=o[0]||{},d=new r.TaskFactory(t,i,c) -return d._setupEmberKVO(e),{get(){let e=u.get(this) -return e||(e=d.createTask(this),u.set(this,e)),e}}}function o(e,t,n){let i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],o=new WeakMap,s=i[0]||{},a=new r.TaskGroupFactory(t,null,s) -return{get(){let e=o.get(this) -return e||(e=a.createTaskGroup(this),o.set(this,e)),e}}}function s(e){let[t,r,n]=e -return 3===e.length&&"object"==typeof t&&null!==t&&"string"==typeof r&&("object"==typeof n&&null!==n&&"enumerable"in n&&"configurable"in n||void 0===n)}function a(e){return function(){for(var t=arguments.length,r=new Array(t),n=0;n1&&void 0!==arguments[1]?arguments[1]:{} -return a((function(r,n,i){let[o]=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],s=Object.assign({},{...t,...o}) -return e(r,n,i,[s])}))}Object.defineProperty(e,"__esModule",{value:!0}),e.restartableTaskGroup=e.keepLatestTaskGroup=e.enqueueTaskGroup=e.dropTaskGroup=e.taskGroup=e.restartableTask=e.keepLatestTask=e.enqueueTask=e.dropTask=e.task=e.lastValue=void 0 -const u=a((function(e,r,i){let[o]=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[] -const{initializer:s}=i -if(delete i.initializer,n.USE_TRACKED)return{get(){let e=this[o].lastSuccessful -return e?e.value:s?s.call(this):void 0}} -return(0,t.computed)(`${o}.lastSuccessful`,(function(){let e=(0,t.get)(this,`${o}.lastSuccessful`) -return e?(0,t.get)(e,"value"):s?s.call(this):void 0}))(e,r,i)})) -e.lastValue=u -const c=l(i) -e.task=c -const d=l(i,{drop:!0}) -e.dropTask=d -const h=l(i,{enqueue:!0}) -e.enqueueTask=h -const p=l(i,{keepLatest:!0}) -e.keepLatestTask=p -const f=l(i,{restartable:!0}) -e.restartableTask=f -const m=l(o) -e.taskGroup=m -const g=l(o,{drop:!0}) -e.dropTaskGroup=g -const v=l(o,{enqueue:!0}) -e.enqueueTaskGroup=v -const b=l(o,{keepLatest:!0}) -e.keepLatestTaskGroup=b -const y=l(o,{restartable:!0}) -e.restartableTaskGroup=y})),define("ember-concurrency/-private/task-factory",["exports","ember-concurrency/-private/external/scheduler/policies/unbounded-policy","ember-concurrency/-private/external/scheduler/policies/enqueued-policy","ember-concurrency/-private/external/scheduler/policies/drop-policy","ember-concurrency/-private/external/scheduler/policies/keep-latest-policy","ember-concurrency/-private/external/scheduler/policies/restartable-policy","@ember/debug","@ember/object","@ember/object/events","@ember/object/observers","@ember/runloop","ember-concurrency/-private/task","ember-concurrency/-private/task-properties","ember-concurrency/-private/task-group","ember-concurrency/-private/scheduler/ember-scheduler"],(function(e,t,r,n,i,o,s,a,l,u,c,d,h,p,f){"use strict" -function m(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}Object.defineProperty(e,"__esModule",{value:!0}),e.TaskGroupFactory=e.TaskFactory=void 0 -let g=0 -function v(e,t,r,n,i,o){if(r)for(let s=0;sArray.isArray(e)?e:[e],_={cancelOn:(e,t)=>e.addCancelEvents(...y(t)),enqueue:e=>e.setBufferPolicy(r.default),evented:e=>e.setEvented(!0),debug:e=>e.setDebug(!0),drop:e=>e.setBufferPolicy(n.default),group:(e,t)=>e.setGroup(t),keepLatest:e=>e.setBufferPolicy(i.default),maxConcurrency:(e,t)=>e.setMaxConcurrency(t),observes:(e,t)=>e.addObserverKeys(...y(t)),on:(e,t)=>e.addPerformEvents(...y(t)),onState:(e,t)=>e.setOnState(t),restartable:e=>e.setBufferPolicy(o.default)} -class w{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{} -m(this,"_cancelEventNames",[]),m(this,"_debug",null),m(this,"_eventNames",[]),m(this,"_hasUsedModifier",!1),m(this,"_hasSetBufferPolicy",!1),m(this,"_hasEnabledEvents",!1),m(this,"_maxConcurrency",null),m(this,"_observes",[]),m(this,"_onStateCallback",((e,t)=>t.setState(e))),m(this,"_schedulerPolicyClass",t.default),m(this,"_taskGroupPath",null),this.name=e,this.taskDefinition=r,this._processOptions(n)}createTask(e){let t=this._sharedTaskProperties(e) -return"object"==typeof this.taskDefinition?new d.EncapsulatedTask(Object.assign({taskObj:this.taskDefinition},t)):new d.Task(Object.assign({generatorFactory:t=>this.taskDefinition.apply(e,t)},t))}addCancelEvents(){return this._cancelEventNames.push(...arguments),this}addObserverKeys(){return this._observes.push(...arguments),this}addPerformEvents(){return this._eventNames.push(...arguments),this}setBufferPolicy(e){return this._hasSetBufferPolicy=!0,this._hasUsedModifier=!0,this._schedulerPolicyClass=e,this}setDebug(e){return this._debug=e,this}setEvented(e){return this._hasEnabledEvents=e,this}setMaxConcurrency(e){return this._hasUsedModifier=!0,this._maxConcurrency=e,this}setGroup(e){return this._taskGroupPath=e,this}setName(e){return this.name=e,this}setOnState(e){return this._onStateCallback=e,this}setTaskDefinition(e){return this.taskDefinition=e,this}_processOptions(e){for(let t of Object.keys(e)){let r=e[t] -_[t]?_[t].call(null,this,r):"function"==typeof h.TaskProperty.prototype[t]&&h.TaskProperty.prototype[t].call(this,r)}}_setupEmberKVO(e){v(l.addListener,e,this._eventNames,this.name,"perform",!1),v(l.addListener,e,this._cancelEventNames,this.name,"cancelAll",!1),v(u.addObserver,e,this._observes,this.name,"perform",!0)}_sharedTaskProperties(e){let t,r,n=this._onStateCallback -if(this._taskGroupPath)t=e[this._taskGroupPath],r=t.scheduler -else{let e=new this._schedulerPolicyClass(this._maxConcurrency) -r=new f.default(e,n)}return{context:e,debug:this._debug,name:this.name,group:t,scheduler:r,hasEnabledEvents:this._hasEnabledEvents,onStateCallback:n}}get taskFn(){return this.taskDefinition}set taskFn(e){this.setTaskDefinition(e)}}e.TaskFactory=w -e.TaskGroupFactory=class extends w{createTaskGroup(e){let t=this._sharedTaskProperties(e) -return new p.TaskGroup(t)}}})),define("ember-concurrency/-private/task-group",["exports","ember-concurrency/-private/external/task/task-group","ember-concurrency/-private/taskable-mixin","ember-concurrency/-private/tracked-state"],(function(e,t,r,n){"use strict" +e.default=i})),define("ember-concurrency/-private/task-decorators",["exports","@ember/object","ember-concurrency/-private/external/task-decorators","ember-concurrency/-private/task-factory","ember-concurrency/-private/utils"],(function(e,t,r,n,i){"use strict" +Object.defineProperty(e,"__esModule",{value:!0}),e.taskGroup=e.task=e.restartableTaskGroup=e.restartableTask=e.lastValue=e.keepLatestTaskGroup=e.keepLatestTask=e.enqueueTaskGroup=e.enqueueTask=e.dropTaskGroup=e.dropTask=void 0 +const o=(0,r.decoratorWithParams)((function(e,r,n){let[i]=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[] +const{initializer:o}=n +return delete n.initializer,(0,t.computed)(`${i}.lastSuccessful`,(function(){let e=(0,t.get)(this,`${i}.lastSuccessful`) +return e?(0,t.get)(e,"value"):o?o.call(this):void 0}))(e,r,n)})),s=i.USE_TRACKED?r.lastValue:o +e.lastValue=s +const a=(0,r.createTaskDecorator)({},n.TaskFactory) +e.task=a +const l=(0,r.createTaskDecorator)({drop:!0},n.TaskFactory) +e.dropTask=l +const u=(0,r.createTaskDecorator)({enqueue:!0},n.TaskFactory) +e.enqueueTask=u +const c=(0,r.createTaskDecorator)({keepLatest:!0},n.TaskFactory) +e.keepLatestTask=c +const d=(0,r.createTaskDecorator)({restartable:!0},n.TaskFactory) +e.restartableTask=d +const h=(0,r.createTaskGroupDecorator)({},n.TaskFactory) +e.taskGroup=h +const p=(0,r.createTaskGroupDecorator)({drop:!0},n.TaskFactory) +e.dropTaskGroup=p +const f=(0,r.createTaskGroupDecorator)({enqueue:!0},n.TaskFactory) +e.enqueueTaskGroup=f +const m=(0,r.createTaskGroupDecorator)({keepLatest:!0},n.TaskFactory) +e.keepLatestTaskGroup=m +const g=(0,r.createTaskGroupDecorator)({restartable:!0},n.TaskFactory) +e.restartableTaskGroup=g})),define("ember-concurrency/-private/task-factory",["exports","@ember/debug","@ember/object","@ember/object/events","@ember/object/observers","@ember/runloop","ember-concurrency/-private/external/task-factory","ember-concurrency/-private/task","ember-concurrency/-private/task-properties","ember-concurrency/-private/task-group","ember-concurrency/-private/scheduler/ember-scheduler","ember-concurrency/-private/ember-environment"],(function(e,t,r,n,i,o,s,a,l,u,c,d){"use strict" +function h(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var r=e[Symbol.toPrimitive] +if(void 0!==r){var n=r.call(e,t||"default") +if("object"!=typeof n)return n +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}Object.defineProperty(e,"__esModule",{value:!0}),e.TaskFactory=void 0 +let p=0 +function f(e,t,r,n,i,o){if(r&&r.length>0)for(let s=0;sArray.isArray(e)?e:[e];(0,s.registerModifier)("cancelOn",((e,t)=>e.addCancelEvents(...g(t)))),(0,s.registerModifier)("observes",((e,t)=>e.addObserverKeys(...g(t)))),(0,s.registerModifier)("on",((e,t)=>e.addPerformEvents(...g(t)))) +class v extends s.TaskFactory{constructor(){super(...arguments),h(this,"env",d.EMBER_ENVIRONMENT)}createTask(e){let t=this.getTaskOptions(e) +return"object"==typeof this.taskDefinition?new a.EncapsulatedTask(Object.assign({taskObj:this.taskDefinition},t)):new a.Task(Object.assign({generatorFactory:t=>this.taskDefinition.apply(e,t)},t))}createTaskGroup(e){let t=this.getTaskOptions(e) +return new u.TaskGroup(t)}addCancelEvents(){return this._cancelEventNames=this._cancelEventNames||[],this._cancelEventNames.push(...arguments),this}addObserverKeys(){return this._observes=this._observes||[],this._observes.push(...arguments),this}addPerformEvents(){return this._eventNames=this._eventNames||[],this._eventNames.push(...arguments),this}getModifier(e){let t=super.getModifier(e) +return t||"function"!=typeof l.TaskProperty.prototype[e]||(t=l.TaskProperty.prototype[e].bind(this)),t}getScheduler(e,t){return new c.default(e,t)}_setupEmberKVO(e){f(n.addListener,e,this._eventNames,this.name,"perform",!1),f(n.addListener,e,this._cancelEventNames,this.name,"cancelAll",!1),f(i.addObserver,e,this._observes,this.name,"perform",!0)}get taskFn(){return this.taskDefinition}set taskFn(e){this.setTaskDefinition(e)}}e.TaskFactory=v})) +define("ember-concurrency/-private/task-group",["exports","ember-concurrency/-private/external/task/task-group","ember-concurrency/-private/taskable-mixin","ember-concurrency/-private/tracked-state"],(function(e,t,r,n){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.TaskGroup=void 0 class i extends t.TaskGroup{}e.TaskGroup=i,n.TRACKED_INITIAL_TASK_STATE&&Object.defineProperties(i.prototype,n.TRACKED_INITIAL_TASK_STATE),Object.assign(i.prototype,r.TASKABLE_MIXIN)})),define("ember-concurrency/-private/task-instance",["exports","ember-concurrency/-private/external/task-instance/base","ember-concurrency/-private/tracked-state","ember-concurrency/-private/utils"],(function(e,t,r,n){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.TaskInstance=void 0 @@ -9194,31 +9982,32 @@ console.warn(`ember-concurrency detected a potentially hazardous "self-cancel lo let e=this.task,t=e.context,r=e&&e.name if(t&&t.trigger&&r){for(var n=arguments.length,i=new Array(n),o=0;o{this.cancelAll({reason:"the object it lives on was destroyed or unrendered",cancelRequestKind:c.CANCEL_KIND_LIFESPAN_END})}))}_perform(){for(var e=arguments.length,t=new Array(e),r=0;rthis.generatorFactory(e),env:a.EMBER_ENVIRONMENT,debug:this.debug}),performType:t,hasEnabledEvents:this.hasEnabledEvents})}_curry(){let e=this._clone() -for(var t=arguments.length,r=new Array(t),n=0;n`}}e.Task=d,u.TRACKED_INITIAL_TASK_STATE&&Object.defineProperties(d.prototype,u.TRACKED_INITIAL_TASK_STATE),Object.assign(d.prototype,l.TASKABLE_MIXIN) -e.EncapsulatedTask=class extends d{constructor(e){super(e),this.taskObj=e.taskObj,this._encapsulatedTaskStates=new WeakMap,this._encapsulatedTaskInstanceProxies=new WeakMap}_taskInstanceFactory(e,n){let i=(0,t.getOwner)(this.context),l=r.default.extend(this.taskObj).create({context:this.context});(0,t.setOwner)(l,i) -let u=new o.TaskInstance({task:this,args:e,executor:new s.TaskInstanceExecutor({generatorFactory:()=>l.perform.apply(l,e),env:a.EMBER_ENVIRONMENT,debug:this.debug}),performType:n,hasEnabledEvents:this.hasEnabledEvents}) -return this._encapsulatedTaskStates.set(u,l),this._wrappedEncapsulatedTaskInstance(u)}_wrappedEncapsulatedTaskInstance(e){if(!e)return null +t.trigger(`${r}:${e}`,...s)}}}e.TaskInstance=i,r.TRACKED_INITIAL_INSTANCE_STATE&&Object.defineProperties(i.prototype,r.TRACKED_INITIAL_INSTANCE_STATE)})),define("ember-concurrency/-private/task-properties",["exports","ember","@ember/object","@ember/object/computed","ember-concurrency/-private/external/scheduler/policies/enqueued-policy","ember-concurrency/-private/external/scheduler/policies/drop-policy","ember-concurrency/-private/external/scheduler/policies/keep-latest-policy","ember-concurrency/-private/external/scheduler/policies/restartable-policy"],(function(e,t,r,n,i,o,s,a){"use strict" +Object.defineProperty(e,"__esModule",{value:!0}),e.propertyModifiers=e.TaskProperty=e.TaskGroupProperty=void 0,e.taskComputed=function(e){{let t=function(n,i){return void 0!==t.setup&&t.setup(n,i),(0,r.computed)(e)(...arguments)} +return h(t),t}},e.taskFactorySymbol=void 0 +let l="__ec_task_factory" +e.taskFactorySymbol=l +const u={restartable(){return this[l].setBufferPolicy(a.default),this},enqueue(){return this[l].setBufferPolicy(i.default),this},drop(){return this[l].setBufferPolicy(o.default),this},keepLatest(){return this[l].setBufferPolicy(s.default),this},maxConcurrency(e){return this[l].setMaxConcurrency(e),this},group(e){return this[l].setGroup(e),this},evented(){return this[l].setEvented(!0),this},debug(){return this[l].setDebug(!0),this},onState(e){return this[l].setOnState(e),this}} +let c,d +e.propertyModifiers=u,e.TaskProperty=c,e.TaskGroupProperty=d,e.TaskProperty=c=class{},e.TaskGroupProperty=d=class{},Object.assign(d.prototype,u),Object.assign(c.prototype,u,{setup(e,t){this.callSuperSetup&&this.callSuperSetup(...arguments),this[l].setName(t),this[l]._setupEmberKVO(e)},on(){return this[l].addPerformEvents(...arguments),this},cancelOn(){return this[l].addCancelEvents(...arguments),this},observes(){return this[l].addObserverKeys(...arguments),this}}) +const h=t.default._setClassicDecorator||t.default._setComputedDecorator})),define("ember-concurrency/-private/task-public-api",["exports","ember-concurrency/-private/task-factory","ember-concurrency/-private/task-properties","ember-concurrency/-private/task-decorators","@ember/debug"],(function(e,t,r,n,i){"use strict" +function o(e){return!!e&&("function"!=typeof e&&(("object"!=typeof e||!("perform"in e)||"function"!=typeof e.perform)&&Object.getPrototypeOf(e)===Object.prototype))}Object.defineProperty(e,"__esModule",{value:!0}),e.task=function(e,i,s){return o(e)||i&&s?(0,n.task)(...arguments):function(e){const n=(0,r.taskComputed)((function(){return n[r.taskFactorySymbol].setTaskDefinition(n.taskFn),n[r.taskFactorySymbol].createTask(this)})) +return n.taskFn=e,n[r.taskFactorySymbol]=new t.TaskFactory,Object.setPrototypeOf(n,r.TaskProperty.prototype),n}(e)},e.taskGroup=function(e,i,s){if(o(e)||i&&s)return(0,n.taskGroup)(...arguments) +{let e=(0,r.taskComputed)((function(t){return e[r.taskFactorySymbol].setName(t),e[r.taskFactorySymbol].createTaskGroup(this)})) +return e[r.taskFactorySymbol]=new t.TaskFactory,Object.setPrototypeOf(e,r.TaskGroupProperty.prototype),e}}})),define("ember-concurrency/-private/task",["exports","@ember/application","@ember/object","@ember/destroyable","ember-concurrency/-private/external/task/task","ember-concurrency/-private/task-instance","ember-concurrency/-private/external/task-instance/executor","ember-concurrency/-private/taskable-mixin","ember-concurrency/-private/tracked-state","ember-concurrency/-private/external/task-instance/cancelation"],(function(e,t,r,n,i,o,s,a,l,u){"use strict" +Object.defineProperty(e,"__esModule",{value:!0}),e.Task=e.EncapsulatedTask=void 0 +class c extends i.Task{constructor(e){super(e),(0,n.isDestroying)(this.context)||(0,n.registerDestructor)(this.context,(()=>{this.cancelAll({reason:"the object it lives on was destroyed or unrendered",cancelRequestKind:u.CANCEL_KIND_LIFESPAN_END})}))}get _isAlive(){return!(0,n.isDestroying)(this.context)}_taskInstanceFactory(e,t,r){let n=this._taskInstanceOptions(e,t,r) +return new o.TaskInstance(n)}_clone(){return new c({context:this.context,debug:this.debug,env:this.env,generatorFactory:this.generatorFactory,group:this.group,hasEnabledEvents:this.hasEnabledEvents,name:this.name,onStateCallback:this.onStateCallback,scheduler:this.scheduler})}}e.Task=c,l.TRACKED_INITIAL_TASK_STATE&&Object.defineProperties(c.prototype,l.TRACKED_INITIAL_TASK_STATE),Object.assign(c.prototype,a.TASKABLE_MIXIN) +const d="__ec__encap_current_ti" +e.EncapsulatedTask=class extends c{constructor(e){super(e),this.taskObj=e.taskObj,this._encapsulatedTaskStates=new WeakMap,this._encapsulatedTaskInstanceProxies=new WeakMap}_getEncapsulatedTaskClass(){let e=this._encapsulatedTaskImplClass +return e||(e=r.default.extend(this.taskObj,{unknownProperty(e){let t=this[d] +return t?t[e]:void 0}})),e}_taskInstanceFactory(e,r){let n,i=(0,t.getOwner)(this.context),a=this._getEncapsulatedTaskClass().create({context:this.context});(0,t.setOwner)(a,i) +let l=new o.TaskInstance({task:this,args:e,executor:new s.TaskInstanceExecutor({generatorFactory:()=>a.perform.apply(n,e),env:this.env,debug:this.debug}),performType:r,hasEnabledEvents:this.hasEnabledEvents}) +return a[d]=l,this._encapsulatedTaskStates.set(l,a),n=this._wrappedEncapsulatedTaskInstance(l),n}_wrappedEncapsulatedTaskInstance(e){if(!e)return null let t=this._encapsulatedTaskInstanceProxies,n=t.get(e) if(!n){let i=this._encapsulatedTaskStates.get(e) -n=new Proxy(e,{get:(e,t)=>t in e?e[t]:(0,r.get)(i,t.toString()),has:(e,t)=>t in e||t in i,ownKeys:e=>Reflect.ownKeys(e).concat(Reflect.ownKeys(i)),defineProperty(r,n,o){let s=t.get(e) -return s&&(o.get?o.get=o.get.bind(s):s&&o.set&&(o.set=o.set.bind(s))),n in r?Reflect.defineProperty(r,n,o):Reflect.defineProperty(i,n,o)},getOwnPropertyDescriptor:(e,t)=>t in e?Reflect.getOwnPropertyDescriptor(e,t):Reflect.getOwnPropertyDescriptor(i,t)}),t.set(e,n)}return n}}})),define("ember-concurrency/-private/taskable-mixin",["exports","ember-concurrency/-private/utils"],(function(e,t){"use strict" +n=new Proxy(e,{get:(e,t)=>t in e?e[t]:(0,r.get)(i,t.toString()),set:(e,t,n)=>(t in e?e[t]=n:(0,r.set)(i,t.toString(),n),!0),has:(e,t)=>t in e||t in i,ownKeys:e=>Reflect.ownKeys(e).concat(Reflect.ownKeys(i)),defineProperty(r,n,o){let s=t.get(e) +return s&&(o.get?o.get=o.get.bind(s):s&&o.set&&(o.set=o.set.bind(s))),Reflect.defineProperty(i,n,o)},getOwnPropertyDescriptor:(e,t)=>t in e?Reflect.getOwnPropertyDescriptor(e,t):Reflect.getOwnPropertyDescriptor(i,t)}),t.set(e,n)}return n}}})),define("ember-concurrency/-private/taskable-mixin",["exports","ember-concurrency/-private/utils"],(function(e,t){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.TASKABLE_MIXIN=void 0 const r={_performCount:0,setState(e){this._performCount=this._performCount+(e.numPerformedInc||0) let r=e.numRunning>0,n=e.numQueued>0,i=Object.assign({},e,{performCount:this._performCount,isRunning:r,isQueued:n,isIdle:!r&&!n,state:r?"running":"idle"});(0,t.assignProperties)(this,i)},onState(e,t){t.onStateCallback&&t.onStateCallback(e,t)}} @@ -9227,34 +10016,40 @@ function o(e,r){return Object.keys(e).reduce(((r,n)=>function(e,r,n){const i=Obj i.initializer=i.initializer||(()=>e[n]),delete i.value const o=(0,t.tracked)(r,n,i) return r[n]=o,r}(e,r,n)),r)}let s,a -Object.defineProperty(e,"__esModule",{value:!0}),e.TRACKED_INITIAL_INSTANCE_STATE=e.TRACKED_INITIAL_TASK_STATE=void 0,e.TRACKED_INITIAL_TASK_STATE=s,e.TRACKED_INITIAL_INSTANCE_STATE=a,i.USE_TRACKED&&(e.TRACKED_INITIAL_TASK_STATE=s=o(r.DEFAULT_STATE,{}),e.TRACKED_INITIAL_TASK_STATE=s=o({numRunning:0,numQueued:0,isRunning:!1,isQueued:!1,isIdle:!0,state:"idle"},s),e.TRACKED_INITIAL_INSTANCE_STATE=a=o(n.INITIAL_STATE,{}),e.TRACKED_INITIAL_INSTANCE_STATE=a=o({state:"waiting",isDropped:!1,isRunning:!1},a),Object.freeze(s),Object.freeze(a))})),define("ember-concurrency/-private/utils",["exports","@ember/object","@ember/runloop","ember-concurrency/-private/ember-environment","ember-concurrency/-private/external/yieldables"],(function(e,t,r,n,i){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.isEventedObject=function(e){return e&&("function"==typeof e.one&&"function"==typeof e.off||"function"==typeof e.on&&"function"==typeof e.off||"function"==typeof e.addEventListener&&"function"==typeof e.removeEventListener)},e.timeout=function(e){return new a(e)},e.deprecatePrivateModule=function(e){console.warn(`an Ember addon is importing a private ember-concurrency module '${e}' that has moved`)},e.EmberYieldable=e.assignProperties=e.USE_TRACKED=void 0 +Object.defineProperty(e,"__esModule",{value:!0}),e.TRACKED_INITIAL_TASK_STATE=e.TRACKED_INITIAL_INSTANCE_STATE=void 0,e.TRACKED_INITIAL_TASK_STATE=s,e.TRACKED_INITIAL_INSTANCE_STATE=a,i.USE_TRACKED&&(e.TRACKED_INITIAL_TASK_STATE=s=o(r.DEFAULT_STATE,{}),e.TRACKED_INITIAL_TASK_STATE=s=o({numRunning:0,numQueued:0,isRunning:!1,isQueued:!1,isIdle:!0,state:"idle"},s),e.TRACKED_INITIAL_INSTANCE_STATE=a=o(n.INITIAL_STATE,{}),e.TRACKED_INITIAL_INSTANCE_STATE=a=o({state:"waiting",isDropped:!1,isRunning:!1},a),Object.freeze(s),Object.freeze(a))})),define("ember-concurrency/-private/utils",["exports","@ember/object","@ember/runloop","ember-concurrency/-private/ember-environment","ember-concurrency/-private/external/yieldables"],(function(e,t,r,n,i){"use strict" +Object.defineProperty(e,"__esModule",{value:!0}),e.assignProperties=e.USE_TRACKED=e.EmberYieldable=void 0,e.deprecatePrivateModule=function(e){console.warn(`an Ember addon is importing a private ember-concurrency module '${e}' that has moved`)},e.isEventedObject=function(e){return e&&("function"==typeof e.one&&"function"==typeof e.off||"function"==typeof e.on&&"function"==typeof e.off||"function"==typeof e.addEventListener&&"function"==typeof e.removeEventListener)},e.timeout=function(e){return new a(e)} e.USE_TRACKED=true const o=Object.assign e.assignProperties=o class s extends i.Yieldable{_deferable(){return n.EMBER_ENVIRONMENT.defer()}}e.EmberYieldable=s -class a extends s{constructor(e){super(),this.ms=e,this.timerId=null}[i.yieldableSymbol](e,t){this.timerId=(0,r.later)((()=>{e.proceed(t,i.YIELDABLE_CONTINUE,e._result)}),this.ms)}[i.cancelableSymbol](){(0,r.cancel)(this.timerId),this.timerId=null}}})),define("ember-concurrency/-private/wait-for",["exports","@ember/debug","@ember/runloop","@ember/object","@ember/object/observers","ember-concurrency/-private/external/yieldables","ember-concurrency/-private/utils"],(function(e,t,r,n,i,o,s){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.waitForQueue=function(e){return new a(e)},e.waitForEvent=function(e,t){return new l(e,t)},e.waitForProperty=function(e,t,r){return new u(e,t,r)} -class a extends s.EmberYieldable{constructor(e){super(),this.queueName=e,this.timerId=null}[o.yieldableSymbol](e,t){try{this.timerId=(0,r.schedule)(this.queueName,(()=>{e.proceed(t,o.YIELDABLE_CONTINUE,null)}))}catch(n){e.proceed(t,o.YIELDABLE_THROW,n)}}[o.cancelableSymbol](){(0,r.cancel)(this.timerId),this.timerId=null}}class l extends s.EmberYieldable{constructor(e,t){super(),this.object=e,this.eventName=t,this.fn=null,this.didFinish=!1,this.usesDOMEvents=!1,this.requiresCleanup=!1}[o.yieldableSymbol](e,t){this.fn=r=>{this.didFinish=!0,this[o.cancelableSymbol](),e.proceed(t,o.YIELDABLE_CONTINUE,r)},"function"==typeof this.object.addEventListener?(this.usesDOMEvents=!0,this.object.addEventListener(this.eventName,this.fn)):"function"==typeof this.object.one?this.object.one(this.eventName,this.fn):(this.requiresCleanup=!0,this.object.on(this.eventName,this.fn))}[o.cancelableSymbol](){this.fn&&(this.usesDOMEvents?this.object.removeEventListener(this.eventName,this.fn):this.didFinish&&!this.requiresCleanup||this.object.off(this.eventName,this.fn),this.fn=null)}}class u extends s.EmberYieldable{constructor(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Boolean -super(),this.object=e,this.key=t,this.predicateCallback="function"==typeof r?r:e=>e===r,this.observerBound=!1}[o.yieldableSymbol](e,t){this.observerFn=()=>{let r=(0,n.get)(this.object,this.key) -if(this.predicateCallback(r))return e.proceed(t,o.YIELDABLE_CONTINUE,r),!0},this.observerFn()||((0,i.addObserver)(this.object,this.key,null,this.observerFn),this.observerBound=!0)}[o.cancelableSymbol](){this.observerBound&&this.observerFn&&((0,i.removeObserver)(this.object,this.key,null,this.observerFn),this.observerFn=null)}}})) -define("ember-concurrency/-task-instance",["exports","ember-concurrency/-private/task-instance","ember-concurrency/-private/utils"],(function(e,t,r){"use strict" +class a extends s{constructor(e){super(),this.ms=e}onYield(e){let t=(0,r.later)((()=>e.next()),this.ms) +return()=>(0,r.cancel)(t)}}})),define("ember-concurrency/-private/wait-for",["exports","@ember/debug","@ember/runloop","@ember/object","@ember/object/observers","ember-concurrency/-private/utils"],(function(e,t,r,n,i,o){"use strict" +Object.defineProperty(e,"__esModule",{value:!0}),e.waitForEvent=function(e,t){return new a(e,t)},e.waitForProperty=function(e,t,r){return new l(e,t,r)},e.waitForQueue=function(e){return new s(e)} +class s extends o.EmberYieldable{constructor(e){super(),this.queueName=e}onYield(e){let t +try{t=(0,r.schedule)(this.queueName,(()=>e.next()))}catch(n){e.throw(n)}return()=>(0,r.cancel)(t)}}class a extends o.EmberYieldable{constructor(e,t){super(),this.object=e,this.eventName=t,this.usesDOMEvents=!1}on(e){"function"==typeof this.object.addEventListener?(this.usesDOMEvents=!0,this.object.addEventListener(this.eventName,e)):this.object.on(this.eventName,e)}off(e){this.usesDOMEvents?this.object.removeEventListener(this.eventName,e):this.object.off(this.eventName,e)}onYield(e){let t=null,r=()=>{t&&this.off(t),t=null} +return t=t=>{r(),e.next(t)},this.on(t),r}}class l extends o.EmberYieldable{constructor(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Boolean +super(),this.object=e,this.key=t,this.predicateCallback="function"==typeof r?r:e=>e===r}onYield(e){let t=!1,r=()=>{let t=(0,n.get)(this.object,this.key) +if(this.predicateCallback(t))return e.next(t),!0} +return r()||((0,i.addObserver)(this.object,this.key,null,r),t=!0),()=>{t&&r&&(0,i.removeObserver)(this.object,this.key,null,r)}}}})),define("ember-concurrency/-task-instance",["exports","ember-concurrency/-private/task-instance","ember-concurrency/-private/utils"],(function(e,t,r){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,(0,r.deprecatePrivateModule)("ember-concurrency/-task-instance") var n=t.TaskInstance e.default=n})),define("ember-concurrency/-task-property",["exports","ember-concurrency/-private/task","ember-concurrency/-private/task-properties","ember-concurrency/-private/utils"],(function(e,t,r,n){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"Task",{enumerable:!0,get:function(){return t.Task}}),Object.defineProperty(e,"TaskProperty",{enumerable:!0,get:function(){return r.TaskProperty}}),(0,n.deprecatePrivateModule)("ember-concurrency/-task-property")})),define("ember-concurrency/helpers/cancel-all",["exports","@ember/component/helper","@ember/debug","ember-concurrency/-private/helpers"],(function(e,t,r,n){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.cancelHelper=i,e.default=void 0 -function i(e){let t=e[0] -return!t||t.cancelAll,(0,n.taskHelperClosure)("cancel-all","cancelAll",[t,{reason:"the 'cancel-all' template helper was invoked"}])}var o=(0,t.helper)(i) -e.default=o})),define("ember-concurrency/helpers/perform",["exports","@ember/component/helper","ember-concurrency/-private/helpers"],(function(e,t,r){"use strict" -function n(e,t){return(0,r.taskHelperClosure)("perform","perform",e,t)}Object.defineProperty(e,"__esModule",{value:!0}),e.performHelper=n,e.default=void 0 -var i=(0,t.helper)(n) -e.default=i})),define("ember-concurrency/helpers/task",["exports","@ember/component/helper"],(function(e,t){"use strict" +Object.defineProperty(e,"__esModule",{value:!0}),e.cancelHelper=o,e.default=void 0 +const i="the 'cancel-all' template helper was invoked" +function o(e){let t=e[0] +return!t||t.cancelAll,(0,n.taskHelperClosure)("cancel-all","cancelAll",[t,{reason:i}])}var s=(0,t.helper)(o) +e.default=s})),define("ember-concurrency/helpers/perform",["exports","@ember/component/helper","@ember/debug","ember-concurrency/-private/helpers"],(function(e,t,r,n){"use strict" +function i(e){return function(t){"function"==typeof e&&e(t)}}function o(e,t){let r=(0,n.taskHelperClosure)("perform","perform",e,t) +return t&&void 0!==t.onError?function(){try{return r(...arguments).catch(i(t.onError))}catch{i(t.onError)}}:r}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.performHelper=o +var s=(0,t.helper)(o) +e.default=s})),define("ember-concurrency/helpers/task",["exports","@ember/component/helper"],(function(e,t){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 var r=(0,t.helper)((function(e){let[t,...r]=e return t._curry(...r)})) -e.default=r})),define("ember-concurrency/index",["exports","ember-concurrency/-private/utils","ember-concurrency/-private/task-properties","ember-concurrency/-private/task-instance","ember-concurrency/-private/cancelable-promise-helpers","ember-concurrency/-private/wait-for","ember-concurrency/-private/external/task-instance/cancelation","ember-concurrency/-private/external/yieldables","ember-concurrency/-private/task","ember-concurrency/-private/task-group","ember-concurrency/-private/task-decorators"],(function(e,t,r,n,i,o,s,a,l,u,c){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"timeout",{enumerable:!0,get:function(){return t.timeout}}),Object.defineProperty(e,"TaskProperty",{enumerable:!0,get:function(){return r.TaskProperty}}),Object.defineProperty(e,"TaskGroupProperty",{enumerable:!0,get:function(){return r.TaskGroupProperty}}),Object.defineProperty(e,"task",{enumerable:!0,get:function(){return r.task}}),Object.defineProperty(e,"taskGroup",{enumerable:!0,get:function(){return r.taskGroup}}),Object.defineProperty(e,"TaskInstance",{enumerable:!0,get:function(){return n.TaskInstance}}),Object.defineProperty(e,"all",{enumerable:!0,get:function(){return i.all}}),Object.defineProperty(e,"allSettled",{enumerable:!0,get:function(){return i.allSettled}}),Object.defineProperty(e,"hash",{enumerable:!0,get:function(){return i.hash}}),Object.defineProperty(e,"hashSettled",{enumerable:!0,get:function(){return i.hashSettled}}),Object.defineProperty(e,"race",{enumerable:!0,get:function(){return i.race}}),Object.defineProperty(e,"waitForQueue",{enumerable:!0,get:function(){return o.waitForQueue}}),Object.defineProperty(e,"waitForEvent",{enumerable:!0,get:function(){return o.waitForEvent}}),Object.defineProperty(e,"waitForProperty",{enumerable:!0,get:function(){return o.waitForProperty}}),Object.defineProperty(e,"didCancel",{enumerable:!0,get:function(){return s.didCancel}}),Object.defineProperty(e,"animationFrame",{enumerable:!0,get:function(){return a.animationFrame}}),Object.defineProperty(e,"forever",{enumerable:!0,get:function(){return a.forever}}),Object.defineProperty(e,"rawTimeout",{enumerable:!0,get:function(){return a.rawTimeout}}),Object.defineProperty(e,"Task",{enumerable:!0,get:function(){return l.Task}}),Object.defineProperty(e,"TaskGroup",{enumerable:!0,get:function(){return u.TaskGroup}}),Object.defineProperty(e,"dropTask",{enumerable:!0,get:function(){return c.dropTask}}),Object.defineProperty(e,"dropTaskGroup",{enumerable:!0,get:function(){return c.dropTaskGroup}}),Object.defineProperty(e,"enqueueTask",{enumerable:!0,get:function(){return c.enqueueTask}}),Object.defineProperty(e,"enqueueTaskGroup",{enumerable:!0,get:function(){return c.enqueueTaskGroup}}),Object.defineProperty(e,"lastValue",{enumerable:!0,get:function(){return c.lastValue}}),Object.defineProperty(e,"keepLatestTask",{enumerable:!0,get:function(){return c.keepLatestTask}}),Object.defineProperty(e,"keepLatestTaskGroup",{enumerable:!0,get:function(){return c.keepLatestTaskGroup}}),Object.defineProperty(e,"restartableTask",{enumerable:!0,get:function(){return c.restartableTask}}),Object.defineProperty(e,"restartableTaskGroup",{enumerable:!0,get:function(){return c.restartableTaskGroup}})})),define("ember-copy/copy",["exports","@ember/debug","@ember/object","ember-copy/copyable"],(function(e,t,r,n){"use strict" +e.default=r})),define("ember-concurrency/index",["exports","ember-concurrency/-private/utils","ember-concurrency/-private/task-properties","ember-concurrency/-private/task-public-api","ember-concurrency/-private/task-instance","ember-concurrency/-private/cancelable-promise-helpers","ember-concurrency/-private/wait-for","ember-concurrency/-private/external/task-instance/cancelation","ember-concurrency/-private/external/yieldables","ember-concurrency/-private/task","ember-concurrency/-private/task-group","ember-concurrency/-private/task-decorators","ember-concurrency/-private/external/task-factory"],(function(e,t,r,n,i,o,s,a,l,u,c,d,h){"use strict" +Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"Task",{enumerable:!0,get:function(){return u.Task}}),Object.defineProperty(e,"TaskGroup",{enumerable:!0,get:function(){return c.TaskGroup}}),Object.defineProperty(e,"TaskGroupProperty",{enumerable:!0,get:function(){return r.TaskGroupProperty}}),Object.defineProperty(e,"TaskInstance",{enumerable:!0,get:function(){return i.TaskInstance}}),Object.defineProperty(e,"TaskProperty",{enumerable:!0,get:function(){return r.TaskProperty}}),Object.defineProperty(e,"Yieldable",{enumerable:!0,get:function(){return t.EmberYieldable}}),Object.defineProperty(e,"all",{enumerable:!0,get:function(){return o.all}}),Object.defineProperty(e,"allSettled",{enumerable:!0,get:function(){return o.allSettled}}),Object.defineProperty(e,"animationFrame",{enumerable:!0,get:function(){return l.animationFrame}}),Object.defineProperty(e,"didCancel",{enumerable:!0,get:function(){return a.didCancel}}),Object.defineProperty(e,"dropTask",{enumerable:!0,get:function(){return d.dropTask}}),Object.defineProperty(e,"dropTaskGroup",{enumerable:!0,get:function(){return d.dropTaskGroup}}),Object.defineProperty(e,"enqueueTask",{enumerable:!0,get:function(){return d.enqueueTask}}),Object.defineProperty(e,"enqueueTaskGroup",{enumerable:!0,get:function(){return d.enqueueTaskGroup}}),Object.defineProperty(e,"forever",{enumerable:!0,get:function(){return l.forever}}),Object.defineProperty(e,"getModifier",{enumerable:!0,get:function(){return h.getModifier}}),Object.defineProperty(e,"hasModifier",{enumerable:!0,get:function(){return h.hasModifier}}),Object.defineProperty(e,"hash",{enumerable:!0,get:function(){return o.hash}}),Object.defineProperty(e,"hashSettled",{enumerable:!0,get:function(){return o.hashSettled}}),Object.defineProperty(e,"keepLatestTask",{enumerable:!0,get:function(){return d.keepLatestTask}}),Object.defineProperty(e,"keepLatestTaskGroup",{enumerable:!0,get:function(){return d.keepLatestTaskGroup}}),Object.defineProperty(e,"lastValue",{enumerable:!0,get:function(){return d.lastValue}}),Object.defineProperty(e,"race",{enumerable:!0,get:function(){return o.race}}),Object.defineProperty(e,"rawTimeout",{enumerable:!0,get:function(){return l.rawTimeout}}),Object.defineProperty(e,"registerModifier",{enumerable:!0,get:function(){return h.registerModifier}}),Object.defineProperty(e,"restartableTask",{enumerable:!0,get:function(){return d.restartableTask}}),Object.defineProperty(e,"restartableTaskGroup",{enumerable:!0,get:function(){return d.restartableTaskGroup}}),Object.defineProperty(e,"task",{enumerable:!0,get:function(){return n.task}}),Object.defineProperty(e,"taskGroup",{enumerable:!0,get:function(){return n.taskGroup}}) +Object.defineProperty(e,"timeout",{enumerable:!0,get:function(){return t.timeout}}),Object.defineProperty(e,"waitForEvent",{enumerable:!0,get:function(){return s.waitForEvent}}),Object.defineProperty(e,"waitForProperty",{enumerable:!0,get:function(){return s.waitForProperty}}),Object.defineProperty(e,"waitForQueue",{enumerable:!0,get:function(){return s.waitForQueue}})})),define("ember-copy/copy",["exports","@ember/debug","@ember/object","ember-copy/copyable"],(function(e,t,r,n){"use strict" function i(e,t,r,o){if("object"!=typeof e||null===e)return e let s,a if(t&&(a=r.indexOf(e))>=0)return o[a] @@ -9267,7 +10062,7 @@ return i(e,t,t?[]:null,t?[]:null)}})),define("ember-copy/copyable",["exports","@ Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 var r=t.default.create({copy:null}) e.default=r})),define("ember-copy/index",["exports","ember-copy/copy","ember-copy/copyable"],(function(e,t,r){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"copy",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"Copyable",{enumerable:!0,get:function(){return r.default}})})),define("ember-data-model-fragments/array/fragment",["exports","@ember/debug","@ember/utils","@ember/object","ember-data-model-fragments/array/stateful","ember-data-model-fragments/fragment","ember-data-model-fragments/util/instance-of-type"],(function(e,t,r,n,i,o,s){"use strict" +Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"Copyable",{enumerable:!0,get:function(){return r.default}}),Object.defineProperty(e,"copy",{enumerable:!0,get:function(){return t.default}})})),define("ember-data-model-fragments/array/fragment",["exports","@ember/debug","@ember/utils","@ember/object","ember-data-model-fragments/array/stateful","ember-data-model-fragments/fragment","ember-data-model-fragments/util/instance-of-type"],(function(e,t,r,n,i,o,s){"use strict" function a(e,t,r,i){let s,a=(0,n.get)(e,"owner"),l=(0,n.get)(a,"store"),u=(0,n.get)(e,"type"),c=(0,n.get)(e,"options"),d=(0,n.get)(e,"name") return r.map(((r,h)=>{(0,n.get)(e,"type") if((0,o.isFragment)(r)){s=r @@ -9292,9 +10087,9 @@ if(t&&(n+=`$${t}`),r&&r.polymorphic){let e=r.typeKey||"type" e="function"==typeof e?"__dynamic__":e,n+=`$${e}`}return n}function o(e,t,i){let o=arguments.length>3&&void 0!==arguments[3]&&arguments[3],s=arguments.length>4&&void 0!==arguments[4]&&arguments[4],a={type:e,isAttribute:!0,isFragment:!0,options:t=t||{}} return(0,r.computed)({get(e){let r,a=(0,n.internalModelFor)(this) return r=o?a._recordData.getFragmentArray(e,t,i,this,s):a._recordData.getFragment(e,t,i,this),r},set(e,r){let a,l=(0,n.internalModelFor)(this) -return o?(a=l._recordData.getFragmentArray(e,t,i,this,s),a=l._recordData.setFragmentArrayValue(e,a,r,this,i,t,s)):(a=l._recordData.getFragment(e,t,i,this),a=l._recordData.setFragmentValue(e,a,r,this,i,t)),l._recordData.fragments[e]=a}}).meta(a)}function s(e,t,r,n){return o(e,t,r,!0,n)}Object.defineProperty(e,"__esModule",{value:!0}),e.fragment=function(e,t){return o(i("fragment",e,t=t||{}),t,e)},e.fragmentArray=function(e,t){return t||(t={}),s(i("fragment-array",e,t),t,e,!0)},e.array=function(e,t){"object"==typeof e?(t=e,e=void 0):t||(t={}) -return s(i("array",e),t,null,!1)},e.fragmentOwner=function(){return(0,r.computed)((function(){return(0,n.internalModelFor)(this)._recordData._owner})).meta({isFragmentOwner:!0}).readOnly()}})),define("ember-data-model-fragments/ext",["exports","@ember/debug","@ember-data/store","@ember-data/model","ember-data/-private","@ember-data/serializer/json","ember-data-model-fragments/states","ember-data-model-fragments/record-data","ember-data-model-fragments/fragment","@ember/utils","@ember/object","@ember/application"],(function(e,t,r,n,i,o,s,a,l,u,c,d){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"Store",{enumerable:!0,get:function(){return r.default}}),Object.defineProperty(e,"Model",{enumerable:!0,get:function(){return n.default}}),Object.defineProperty(e,"JSONSerializer",{enumerable:!0,get:function(){return o.default}}) +return o?(a=l._recordData.getFragmentArray(e,t,i,this,s),a=l._recordData.setFragmentArrayValue(e,a,r,this,i,t,s)):(a=l._recordData.getFragment(e,t,i,this),a=l._recordData.setFragmentValue(e,a,r,this,i,t)),l._recordData.fragments[e]=a}}).meta(a)}function s(e,t,r,n){return o(e,t,r,!0,n)}Object.defineProperty(e,"__esModule",{value:!0}),e.array=function(e,t){"object"==typeof e?(t=e,e=void 0):t||(t={}) +return s(i("array",e),t,null,!1)},e.fragment=function(e,t){return o(i("fragment",e,t=t||{}),t,e)},e.fragmentArray=function(e,t){return t||(t={}),s(i("fragment-array",e,t),t,e,!0)},e.fragmentOwner=function(){return(0,r.computed)((function(){return(0,n.internalModelFor)(this)._recordData._owner})).meta({isFragmentOwner:!0}).readOnly()}})),define("ember-data-model-fragments/ext",["exports","@ember/debug","@ember-data/store","@ember-data/model","ember-data/-private","@ember-data/serializer/json","ember-data-model-fragments/states","ember-data-model-fragments/record-data","ember-data-model-fragments/fragment","@ember/utils","@ember/object","@ember/application"],(function(e,t,r,n,i,o,s,a,l,u,c,d){"use strict" +Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"JSONSerializer",{enumerable:!0,get:function(){return o.default}}),Object.defineProperty(e,"Model",{enumerable:!0,get:function(){return n.default}}),Object.defineProperty(e,"Store",{enumerable:!0,get:function(){return r.default}}) const h=i.InternalModel.prototype,p=i.RecordData.prototype Object.assign(p,{eachFragmentKey(e){Object.keys(this.fragments).forEach(e)},eachFragmentKeyValue(e){this.eachFragmentKey((t=>{const r=this.getFragment(t) r&&e(t,r)}))},getOwner(){return this._owner},setOwner(e){this._owner=e},setName(e){this._name=e},getName(){return this._name},getFragment(e){return this.fragments[e]},didCommit(e){this._attributes&&(this._inFlightAttributes?Object.assign(this._inFlightAttributes,this._attributes):this._inFlightAttributes=this._attributes,this._attributes=null),this._isNew=!1,e?(e.relationships&&this._setupRelationships(e),e.id&&(this.storeWrapper.setRecordId(this.modelName,e.id,this.clientId),this.id=(0,i.coerceId)(e.id)),e=e.attributes,this.eachFragmentKeyValue(((t,r)=>r._didCommit(e[t])))):this.eachFragmentKeyValue(((e,t)=>t._didCommit())) @@ -9321,8 +10116,8 @@ a=a&&a.class,a=a.extend({type:o,polymorphicTypeProp:s,store:this.store}),t.regis return e.eachTransformedAttribute(((e,n)=>{if(void 0===t[e])return let i=this.transformFor(n),o=r.get(e) t[e]=i.deserialize(t[e],o.options,t)})),t}})})),define("ember-data-model-fragments/fragment",["exports","@ember/debug","ember-copy","@ember/object","ember","ember-data-model-fragments/ext"],(function(e,t,r,n,i,o){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.getActualFragmentType=s,e.internalModelFor=a,e.setFragmentOwner=l,e.setFragmentData=u,e.createFragment=function(e,t,r,n,i,o){let a=s(t,i,o,r),c=e.createFragment(a) -return l(c,r,n),u(c,o),c},e.isFragment=function(e){return e&&e._isFragment},e.default=void 0 +Object.defineProperty(e,"__esModule",{value:!0}),e.createFragment=function(e,t,r,n,i,o){let a=s(t,i,o,r),c=e.createFragment(a) +return l(c,r,n),u(c,o),c},e.default=void 0,e.getActualFragmentType=s,e.internalModelFor=a,e.isFragment=function(e){return e&&e._isFragment},e.setFragmentData=u,e.setFragmentOwner=l function s(e,t,r,n){if(!t.polymorphic||!r)return e let i=t.typeKey||"type" return("function"==typeof i?i(r,n):r[i])||e}function a(e){return e._internalModel}function l(e,t,r){let i=a(e) @@ -9361,7 +10156,7 @@ t=(0,d.createFragment)(a,o,n,e,s,r)}else t=null return n._internalModel._recordData.isStateInitializing()||(this.serverFragments[e]!==t?(this.fragments[e]=t,(0,l.fragmentDidDirty)(n,e,t)):(0,l.fragmentDidReset)(n,e)),t}getFragmentArray(e,t,r,n,i){this._record=n let o=this.getFragmentDataWithDefault(e,t,"array"),s=this.getFragmentWithoutCreating(e) return void 0===s?(s=this.setupFragmentArray(e,n,o,r,t,i),s):s}setupFragmentArray(e,t,r,n,i,o){let s -return this._record=t,null!==r?(s=o?c.default.create({type:n,options:i,name:e,owner:t}):u.default.create({options:i,name:e,owner:t}),s.setupData(r)):s=null,this.serverFragments[e]=s,s}getFragmentWithoutCreating(e){return void 0!==this.fragments[e]?this.fragments[e]:void 0!==this.inFlightFragments[e]?this.inFlightFragments[e]:void 0!==this.serverFragments[e]?this.serverFragments[e]:void 0}isStillInitializing(e){return!this.getFragmentWithoutCreating(e)||this.isStateInitializing()}isStateInitializing(){return!1}setupFragmentData(e,t){let r=[] +return this._record=t,null!==r?(s=o?c.default.create({type:n,options:i,name:e,owner:t}):u.default.create({options:i,name:e,owner:t}),s.setupData(r)):s=null,this.serverFragments[e]=s,s}getFragmentWithoutCreating(e){return void 0!==this.fragments[e]?this.fragments[e]:void 0!==this.inFlightFragments[e]?this.inFlightFragments[e]:void 0!==this.serverFragments[e]?this.serverFragments[e]:void 0}isStillInitializing(e){return!this.getFragmentWithoutCreating(e)||this.isStateInitializing()}isStateInitializing(){return!this._record.___recordState}setupFragmentData(e,t){let r=[] return e.attributes&&Object.keys(this.fragmentDefs).forEach((n=>{if(t&&void 0!==this.getFragmentWithoutCreating(n)&&r.push(n),n in e.attributes){this.fragmentData[n]=e.attributes[n] let r=this.serverFragments[n] if(r){let i=[] @@ -9388,7 +10183,7 @@ return Object.keys(this.fragmentDefs).forEach((e=>{if(t=this.serverFragments[e], t=n.type.includes("-array")?this.setupFragmentArray(e,this._record,r[e],i,n.options,n.type.includes("fragment-array")):(0,d.createFragment)(this._record.store,n.type.split("$")[1],this._record,e,n.options,r[e]),this._record[e]=t}t&&t._didCommit(r[e]),delete r[e]})),super.didCommit(e)}commitWasRejected(){let e,t for(e in this.inFlightFragments)t=this.inFlightFragments[e],delete this.inFlightFragments[e],void 0===this.fragments[e]&&(this.fragments[e]=t),t&&(t.content?t.content.forEach((e=>{e._internalModel&&e._internalModel._recordData.commitWasRejected()})):t._internalModel._recordData.commitWasRejected()) return super.commitWasRejected(...arguments)}setAttr(e,t){return super.setAttr(e,t)}getAttr(e){return super.getAttr(e)}hasAttr(e){return super.hasAttr(e)}didCreateLocally(){return super.didCreateLocally()}}e.default=p})),define("ember-data-model-fragments/states",["exports","@ember/object","ember-data/-private"],(function(e,t,r){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.fragmentDidDirty=s,e.fragmentDidReset=a,e.default=void 0 +Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.fragmentDidDirty=s,e.fragmentDidReset=a const n=function(e){let t=e._recordData._owner e._recordData._name t&&s(t)} @@ -9424,24 +10219,25 @@ return t.serializerFor(r.modelName||r.constructor.modelName).serialize(r)},model return e&&i&&e[i]?n=e[i]:t&&"function"==typeof t.typeKey&&(n=t.typeKey(e,r)),n},deserializeSingle(e,t,n){let i=this.store,o=this.modelNameFor(e,t,n),s=i.serializerFor(o),a=i.modelFor(o),l=s.normalize(a,e) return(0,r.get)(l,"data.attributes")}}) e.default=s})),define("ember-data-model-fragments/util/instance-of-type",["exports"],(function(e){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,t){return t instanceof e}})),define("ember-data-model-fragments/version",["exports"],(function(e){"use strict" +Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,t){return t instanceof e}})) +define("ember-data-model-fragments/version",["exports"],(function(e){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 e.default="5.0.0-beta.8"})),define("ember-data/-private",["exports","@ember-data/store","@ember/application/namespace","ember","ember-data/version","@ember-data/model/-private","@ember-data/store/-private","@ember-data/record-data/-private"],(function(e,t,r,n,i,o,s,a){"use strict" -t=t&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t,r=r&&Object.prototype.hasOwnProperty.call(r,"default")?r.default:r,n=n&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n,i=i&&Object.prototype.hasOwnProperty.call(i,"default")?i.default:i -var l=r.create({VERSION:i,name:"DS"}) -n.libraries&&n.libraries.registerCoreLibrary("Ember Data",i),e.Store=t,Object.defineProperty(e,"Errors",{enumerable:!0,get:function(){return o.Errors}}),Object.defineProperty(e,"ManyArray",{enumerable:!0,get:function(){return o.ManyArray}}),Object.defineProperty(e,"PromiseManyArray",{enumerable:!0,get:function(){return o.PromiseManyArray}}),Object.defineProperty(e,"AdapterPopulatedRecordArray",{enumerable:!0,get:function(){return s.AdapterPopulatedRecordArray}}),Object.defineProperty(e,"InternalModel",{enumerable:!0,get:function(){return s.InternalModel}}),Object.defineProperty(e,"PromiseArray",{enumerable:!0,get:function(){return s.PromiseArray}}),Object.defineProperty(e,"PromiseObject",{enumerable:!0,get:function(){return s.PromiseObject}}),Object.defineProperty(e,"RecordArray",{enumerable:!0,get:function(){return s.RecordArray}}),Object.defineProperty(e,"RecordArrayManager",{enumerable:!0,get:function(){return s.RecordArrayManager}}),Object.defineProperty(e,"RootState",{enumerable:!0,get:function(){return s.RootState}}),Object.defineProperty(e,"Snapshot",{enumerable:!0,get:function(){return s.Snapshot}}),Object.defineProperty(e,"SnapshotRecordArray",{enumerable:!0,get:function(){return s.SnapshotRecordArray}}),Object.defineProperty(e,"coerceId",{enumerable:!0,get:function(){return s.coerceId}}),Object.defineProperty(e,"normalizeModelName",{enumerable:!0,get:function(){return s.normalizeModelName}}),Object.defineProperty(e,"RecordData",{enumerable:!0,get:function(){return a.RecordData}}),Object.defineProperty(e,"Relationship",{enumerable:!0,get:function(){return a.Relationship}}),e.DS=l,Object.defineProperty(e,"__esModule",{value:!0})})),define("ember-data/adapter",["exports","@ember-data/adapter"],(function(e,t){"use strict" +function l(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var u=l(t),c=l(r),d=l(n),h=l(i),p=c.default.create({VERSION:h.default,name:"DS"}) +d.default.libraries&&d.default.libraries.registerCoreLibrary("Ember Data",h.default),Object.defineProperty(e,"Store",{enumerable:!0,get:function(){return u.default}}),Object.defineProperty(e,"Errors",{enumerable:!0,get:function(){return o.Errors}}),Object.defineProperty(e,"ManyArray",{enumerable:!0,get:function(){return o.ManyArray}}),Object.defineProperty(e,"PromiseManyArray",{enumerable:!0,get:function(){return o.PromiseManyArray}}),Object.defineProperty(e,"AdapterPopulatedRecordArray",{enumerable:!0,get:function(){return s.AdapterPopulatedRecordArray}}),Object.defineProperty(e,"InternalModel",{enumerable:!0,get:function(){return s.InternalModel}}),Object.defineProperty(e,"PromiseArray",{enumerable:!0,get:function(){return s.PromiseArray}}),Object.defineProperty(e,"PromiseObject",{enumerable:!0,get:function(){return s.PromiseObject}}),Object.defineProperty(e,"RecordArray",{enumerable:!0,get:function(){return s.RecordArray}}),Object.defineProperty(e,"RecordArrayManager",{enumerable:!0,get:function(){return s.RecordArrayManager}}),Object.defineProperty(e,"RootState",{enumerable:!0,get:function(){return s.RootState}}),Object.defineProperty(e,"Snapshot",{enumerable:!0,get:function(){return s.Snapshot}}),Object.defineProperty(e,"SnapshotRecordArray",{enumerable:!0,get:function(){return s.SnapshotRecordArray}}),Object.defineProperty(e,"coerceId",{enumerable:!0,get:function(){return s.coerceId}}),Object.defineProperty(e,"normalizeModelName",{enumerable:!0,get:function(){return s.normalizeModelName}}),Object.defineProperty(e,"RecordData",{enumerable:!0,get:function(){return a.RecordData}}),Object.defineProperty(e,"Relationship",{enumerable:!0,get:function(){return a.Relationship}}),e.DS=p,Object.defineProperty(e,"__esModule",{value:!0})})),define("ember-data/adapter",["exports","@ember-data/adapter"],(function(e,t){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("ember-data/adapters/errors",["exports","@ember-data/adapter/error"],(function(e,t){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"AbortError",{enumerable:!0,get:function(){return t.AbortError}}),Object.defineProperty(e,"AdapterError",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"ConflictError",{enumerable:!0,get:function(){return t.ConflictError}}),Object.defineProperty(e,"ForbiddenError",{enumerable:!0,get:function(){return t.ForbiddenError}}),Object.defineProperty(e,"InvalidError",{enumerable:!0,get:function(){return t.InvalidError}}),Object.defineProperty(e,"NotFoundError",{enumerable:!0,get:function(){return t.NotFoundError}}),Object.defineProperty(e,"ServerError",{enumerable:!0,get:function(){return t.ServerError}}),Object.defineProperty(e,"TimeoutError",{enumerable:!0,get:function(){return t.TimeoutError}}),Object.defineProperty(e,"UnauthorizedError",{enumerable:!0,get:function(){return t.UnauthorizedError}}),Object.defineProperty(e,"errorsArrayToHash",{enumerable:!0,get:function(){return t.errorsArrayToHash}}),Object.defineProperty(e,"errorsHashToArray",{enumerable:!0,get:function(){return t.errorsHashToArray}})})),define("ember-data/adapters/json-api",["exports","@ember-data/adapter/json-api"],(function(e,t){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("ember-data/adapters/rest",["exports","@ember-data/adapter/rest"],(function(e,t){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("ember-data/attr",["exports","@ember-data/model"],(function(e,t){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.attr}})})),define("ember-data/index",["exports","ember-inflector","@ember/error","@ember/version","@ember-data/adapter","@ember-data/adapter/error","@ember-data/adapter/json-api","@ember-data/adapter/rest","@ember-data/debug","@ember-data/model","@ember-data/serializer","@ember-data/serializer/-private","@ember-data/serializer/json","@ember-data/serializer/json-api","@ember-data/serializer/rest","@ember-data/serializer/transform","@ember-data/store","ember-data/-private","ember-data/setup-container"],(function(e,t,r,n,i,o,s,a,l,u,c,d,h,p,f,m,g,v,b){"use strict" -if(Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,n.VERSION.match(/^1\.([0-9]|1[0-2])\./))throw new r.default("Ember Data requires at least Ember 1.13.0, but you have "+n.VERSION+". Please upgrade your version of Ember, then upgrade Ember Data.") -v.DS.Store=g.default,v.DS.PromiseArray=v.PromiseArray,v.DS.PromiseObject=v.PromiseObject,v.DS.PromiseManyArray=v.PromiseManyArray,v.DS.Model=u.default,v.DS.RootState=v.RootState,v.DS.attr=u.attr,v.DS.Errors=v.Errors,v.DS.InternalModel=v.InternalModel,v.DS.Snapshot=v.Snapshot,v.DS.Adapter=i.default,v.DS.AdapterError=o.default,v.DS.InvalidError=o.InvalidError,v.DS.TimeoutError=o.TimeoutError,v.DS.AbortError=o.AbortError,v.DS.UnauthorizedError=o.UnauthorizedError,v.DS.ForbiddenError=o.ForbiddenError,v.DS.NotFoundError=o.NotFoundError,v.DS.ConflictError=o.ConflictError,v.DS.ServerError=o.ServerError,v.DS.errorsHashToArray=o.errorsHashToArray,v.DS.errorsArrayToHash=o.errorsArrayToHash,v.DS.Serializer=c.default,v.DS.DebugAdapter=l.default,v.DS.RecordArray=v.RecordArray,v.DS.AdapterPopulatedRecordArray=v.AdapterPopulatedRecordArray,v.DS.ManyArray=v.ManyArray,v.DS.RecordArrayManager=v.RecordArrayManager,v.DS.RESTAdapter=a.default,v.DS.BuildURLMixin=i.BuildURLMixin -v.DS.RESTSerializer=f.default,v.DS.JSONSerializer=h.default,v.DS.JSONAPIAdapter=s.default,v.DS.JSONAPISerializer=p.default,v.DS.Transform=m.default,v.DS.DateTransform=d.DateTransform,v.DS.StringTransform=d.StringTransform,v.DS.NumberTransform=d.NumberTransform,v.DS.BooleanTransform=d.BooleanTransform,v.DS.EmbeddedRecordsMixin=f.EmbeddedRecordsMixin,v.DS.belongsTo=u.belongsTo,v.DS.hasMany=u.hasMany,v.DS.Relationship=v.Relationship,v.DS._setupContainer=b.default,Object.defineProperty(v.DS,"normalizeModelName",{enumerable:!0,writable:!1,configurable:!1,value:g.normalizeModelName}) -var y=v.DS -e.default=y})),define("ember-data/model",["exports","@ember-data/model"],(function(e,t){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})) -define("ember-data/relationships",["exports","@ember-data/model"],(function(e,t){"use strict" +Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.attr}})})),define("ember-data/index",["exports","ember-inflector","@ember/error","@ember/version","require","@ember-data/adapter","@ember-data/adapter/error","@ember-data/adapter/json-api","@ember-data/adapter/rest","@ember-data/model","@ember-data/serializer","@ember-data/serializer/-private","@ember-data/serializer/json","@ember-data/serializer/json-api","@ember-data/serializer/rest","@ember-data/serializer/transform","@ember-data/store","ember-data/-private","ember-data/setup-container"],(function(e,t,r,n,i,o,s,a,l,u,c,d,h,p,f,m,g,v,b){"use strict" +Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +var y=(0,i.has)("@ember-data/debug")||!1 +if(n.VERSION.match(/^1\.([0-9]|1[0-2])\./))throw new r.default("Ember Data requires at least Ember 1.13.0, but you have "+n.VERSION+". Please upgrade your version of Ember, then upgrade Ember Data.") +v.DS.Store=g.default,v.DS.PromiseArray=v.PromiseArray,v.DS.PromiseObject=v.PromiseObject,v.DS.PromiseManyArray=v.PromiseManyArray,v.DS.Model=u.default,v.DS.RootState=v.RootState,v.DS.attr=u.attr,v.DS.Errors=v.Errors,v.DS.InternalModel=v.InternalModel,v.DS.Snapshot=v.Snapshot,v.DS.Adapter=o.default,v.DS.AdapterError=s.default,v.DS.InvalidError=s.InvalidError,v.DS.TimeoutError=s.TimeoutError,v.DS.AbortError=s.AbortError,v.DS.UnauthorizedError=s.UnauthorizedError,v.DS.ForbiddenError=s.ForbiddenError,v.DS.NotFoundError=s.NotFoundError,v.DS.ConflictError=s.ConflictError,v.DS.ServerError=s.ServerError,v.DS.errorsHashToArray=s.errorsHashToArray,v.DS.errorsArrayToHash=s.errorsArrayToHash,v.DS.Serializer=c.default,y&&(v.DS.DebugAdapter=(0,i.default)("@ember-data/debug").default),v.DS.RecordArray=v.RecordArray,v.DS.AdapterPopulatedRecordArray=v.AdapterPopulatedRecordArray,v.DS.ManyArray=v.ManyArray,v.DS.RecordArrayManager=v.RecordArrayManager,v.DS.RESTAdapter=l.default,v.DS.BuildURLMixin=o.BuildURLMixin +v.DS.RESTSerializer=f.default,v.DS.JSONSerializer=h.default,v.DS.JSONAPIAdapter=a.default,v.DS.JSONAPISerializer=p.default,v.DS.Transform=m.default,v.DS.DateTransform=d.DateTransform,v.DS.StringTransform=d.StringTransform,v.DS.NumberTransform=d.NumberTransform,v.DS.BooleanTransform=d.BooleanTransform,v.DS.EmbeddedRecordsMixin=f.EmbeddedRecordsMixin,v.DS.belongsTo=u.belongsTo,v.DS.hasMany=u.hasMany,v.DS.Relationship=v.Relationship,v.DS._setupContainer=b.default,Object.defineProperty(v.DS,"normalizeModelName",{enumerable:!0,writable:!1,configurable:!1,value:g.normalizeModelName}) +var _=v.DS +e.default=_})),define("ember-data/model",["exports","@ember-data/model"],(function(e,t){"use strict" +Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("ember-data/relationships",["exports","@ember-data/model"],(function(e,t){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"belongsTo",{enumerable:!0,get:function(){return t.belongsTo}}),Object.defineProperty(e,"hasMany",{enumerable:!0,get:function(){return t.hasMany}})})),define("ember-data/serializer",["exports","@ember-data/serializer"],(function(e,t){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("ember-data/serializers/embedded-records-mixin",["exports","@ember-data/serializer/rest"],(function(e,t){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.EmbeddedRecordsMixin}})})),define("ember-data/serializers/json-api",["exports","@ember-data/serializer/json-api"],(function(e,t){"use strict" @@ -9454,114 +10250,24 @@ e.registerOptionsForType("serializer",{singleton:!1}),e.registerOptionsForType(" Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("ember-data/transform",["exports","@ember-data/serializer/transform"],(function(e,t){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("ember-data/version",["exports"],(function(e){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default="3.27.1"})),define("ember-element-helper/helpers/-element",["exports","@ember/component/helper","@ember/debug","@ember/component"],(function(e,t,r,n){"use strict" +e.default="3.28.13"})),define("ember-element-helper/helpers/-element",["exports","@ember/component/helper","@ember/debug","@ember/component"],(function(e,t,r,n){"use strict" function i(){}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 const o=n.default.extend(),s=n.default.extend() var a=t.default.extend({init(){this._super(...arguments),this.tagName=i,this.componentClass=null},compute(e,t){let n=e[0] return n!==this.tagName&&(this.tagName=n,"string"==typeof n?this.componentClass===o?this.componentClass=s:this.componentClass=o:(this.componentClass=null,(0,r.runInDebug)((()=>{let e="The argument passed to the `element` helper must be a string" try{e+=` (you passed \`${n}\`)`}catch(t){}})))),this.componentClass}}) -e.default=a})),define("ember-element-helper/helpers/element",["exports","@ember/component/helper","@ember/debug"],(function(e,t,r){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.helper)((function(){return null})) -e.default=n})),define("ember-get-config/index",["exports","consul-ui/config/environment"],(function(e,t){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("ember-in-viewport/-private/observer-admin",["exports","intersection-observer-admin"],(function(e,t){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=class{constructor(){this.instance=new t.default}add(e,t,r,n){return r&&this.addEnterCallback(e,r),n&&this.addExitCallback(e,n),this.instance.observe(e,t)}addEnterCallback(e,t){this.instance.addEnterCallback(e,t)}addExitCallback(e,t){this.instance.addExitCallback(e,t)}unobserve(){this.instance.unobserve(...arguments)}destroy(){this.instance.destroy(...arguments)}}})),define("ember-in-viewport/-private/raf-admin",["exports","raf-pool","ember-in-viewport/utils/is-in-viewport"],(function(e,t,r){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.startRAF=function e(t,n,i,o,s,a){let{scrollableArea:l,viewportTolerance:u,viewportSpy:c=!1}=n -const d=l?document.querySelector(l):void 0,h=d?d.offsetHeight+d.getBoundingClientRect().top:window.innerHeight,p=l?d.offsetWidth+d.getBoundingClientRect().left:window.innerWidth,f=t.getBoundingClientRect() -if(f){const n=t.getAttribute("data-in-viewport-entered");(function(e,t,r,n,i){let o=arguments.length>5&&void 0!==arguments[5]&&arguments[5] -const s="true"===o&&!t -o&&"false"!==o||!t||(e.setAttribute("data-in-viewport-entered",!0),n()) -s&&(i(),r&&e.setAttribute("data-in-viewport-entered",!1))})(t,(0,r.default)(f,h,p,u),c,i,o,n),c||"true"!==n?s(e.bind(this,t,{scrollableArea:l,viewportTolerance:u,viewportSpy:c},i,o,s,a)):a()}},e.default=void 0 -e.default=class{constructor(){this._rafPool=new t.default,this.elementRegistry=new WeakMap}add(){return this._rafPool.add(...arguments)}flush(){return this._rafPool.flush()}remove(){return this._rafPool.remove(...arguments)}reset(){this._rafPool.reset(...arguments),this._rafPool.stop(...arguments)}addEnterCallback(e,t){this.elementRegistry.set(e,Object.assign({},this.elementRegistry.get(e),{enterCallback:t}))}addExitCallback(e,t){this.elementRegistry.set(e,Object.assign({},this.elementRegistry.get(e),{exitCallback:t}))}}})),define("ember-in-viewport/breakpoints",["exports"],(function(e){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={mobile:"(max-width: 767px)",tablet:"(min-width: 768px) and (max-width: 991px)",desktop:"(min-width: 992px) and (max-width: 1200px)"}})),define("ember-in-viewport/index",["exports","ember-in-viewport/mixins/in-viewport"],(function(e,t){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var r=t.default -e.default=r})),define("ember-in-viewport/initializers/viewport-config",["exports","@ember/polyfills","ember-in-viewport/utils/can-use-dom"],(function(e,t,r){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.initialize=i,e.default=void 0 -const n={viewportEnabled:!0,viewportDidScroll:!0,viewportSpy:!1,viewportScrollSensitivity:1,viewportRefreshRate:100,viewportListeners:[{context:window,event:"scroll"},{context:window,event:"resize"}],viewportTolerance:{top:0,left:0,bottom:0,right:0},intersectionThreshold:0,scrollableArea:null} -function i(){const e=arguments[1]||arguments[0],r=e.resolveRegistration("config:environment"),{viewportConfig:i={}}=r,o=(0,t.assign)({},n,i) -e.register("config:in-viewport",o,{instantiate:!1})}r.default&&n.viewportListeners.push({context:document,event:"touchmove"}) -var o={name:"viewport-config",initialize:i} -e.default=o})),define("ember-in-viewport/mixins/in-viewport",["exports","@ember/polyfills","@ember/object/mixin","@ember/utils","@ember/debug","@ember/service","@ember/object","@ember/runloop","@ember/object/computed","@ember/application","ember-in-viewport/-private/raf-admin","ember-in-viewport/utils/can-use-dom","ember-in-viewport/utils/can-use-raf","ember-in-viewport/utils/find-elem","ember-in-viewport/utils/can-use-intersection-observer","ember-in-viewport/utils/check-scroll-direction"],(function(e,t,r,n,i,o,s,a,l,u,c,d,h,p,f,m){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const g={},v={} -var b=r.default.create({_debouncedEventHandler:null,_stopListening:!1,inViewport:(0,o.inject)(),viewportExited:(0,l.not)("viewportEntered").readOnly(),init(){this._super(...arguments) -let e=(0,t.assign)({viewportUseRAF:(0,h.default)(),viewportEntered:!1,viewportListeners:[]},this._buildOptions()) -e=(0,t.assign)(e,{viewportUseIntersectionObserver:(0,f.default)()}),(0,s.setProperties)(this,e),(0,s.set)(this,"_evtListenerClosures",[])},didInsertElement(){if(this._super(...arguments),!d.default)return;(0,s.get)(this,"viewportEnabled")&&this.watchElement((0,s.get)(this,"element"))},willDestroyElement(){this._super(...arguments),this._unbindListeners((0,s.get)(this,"element"))},_buildOptions(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{} -const r=(0,u.getOwner)(this) -if(r)return(0,t.assign)(e,r.lookup("config:in-viewport"))},watchElement(e){this._setInitialViewport(e),this._addObserverIfNotSpying(e);(0,s.get)(this,"viewportDidScroll")&&((0,i.debug)("[viewportDidScroll] This will be false by default in the next major release"),this._bindScrollDirectionListener((0,s.get)(this,"viewportScrollSensitivity"))),(0,s.get)(this,"viewportUseIntersectionObserver")||(0,s.get)(this,"viewportUseRAF")||(0,s.get)(this,"viewportListeners").forEach((t=>{let{context:r,event:n}=t -r=(0,s.get)(this,"scrollableArea")||r,this._bindListeners(r,n,e)}))},_addObserverIfNotSpying(e){(0,s.get)(this,"viewportSpy")||this.addObserver("viewportEntered",this,(0,a.bind)(this,"_unbindIfEntered",e))},_setInitialViewport(e){const t=this.isDestroyed||this.isDestroying -if(!e||t)return -const r=(0,s.get)(this,"inViewport") -if((0,s.get)(this,"viewportUseIntersectionObserver"))return(0,a.scheduleOnce)("afterRender",this,(()=>{const t=(0,s.get)(this,"scrollableArea"),n=(0,s.get)(this,"viewportTolerance"),i=(0,s.get)(this,"intersectionThreshold") -r.watchElement(e,{intersectionThreshold:i,viewportTolerance:n,scrollableArea:t},(0,a.bind)(this,this._onEnterIntersection),(0,a.bind)(this,this._onExitIntersection))})) -if(!(0,s.get)(this,"viewportUseRAF"))return(0,a.scheduleOnce)("afterRender",this,(()=>{this._setViewportEntered(e)})) -{r.startRAF() -const t=(0,s.get)(this,"scrollableArea"),n=(0,s.get)(this,"viewportTolerance"),i=(0,s.get)(this,"viewportSpy"),o=()=>{const t=this.isDestroyed||this.isDestroying,r="true"===e.getAttribute("data-in-viewport-entered") -t||!i&&!r||((0,s.set)(this,"viewportEntered",!0),this.trigger("didEnterViewport"))},a=()=>{!(this.isDestroyed||this.isDestroying)&&i&&((0,s.set)(this,"viewportEntered",!1),this.trigger("didExitViewport"))};(0,c.startRAF)(e,{scrollableArea:t,viewportTolerance:n,viewportSpy:i},o,a,r.addRAF.bind(r,e.id),r.removeRAF.bind(r,e.id))}},_setViewportEntered(e){const t=(0,s.get)(this,"scrollableArea")?document.querySelector((0,s.get)(this,"scrollableArea")):void 0,r=t?t.offsetHeight+t.getBoundingClientRect().top:window.innerHeight,n=t?t.offsetWidth+t.getBoundingClientRect().left:window.innerWidth,i=e.getBoundingClientRect() -i&&(this._triggerDidAccessViewport((0,s.get)(this,"inViewport").isInViewport(i,r,n,(0,s.get)(this,"viewportTolerance")),(0,s.get)(this,"viewportEntered")),(0,s.get)(this,"viewportUseRAF")&&!(0,s.get)(this,"_stopListening")&&(0,s.get)(this,"inViewport").addRAF((0,s.get)(this,"elementId"),(0,a.bind)(this,this._setViewportEntered,e)))},_onEnterIntersection(){this.isDestroyed||this.isDestroying||(0,s.set)(this,"viewportEntered",!0),this.trigger("didEnterViewport")},_onExitIntersection(){this.isDestroyed||this.isDestroying||(0,s.set)(this,"viewportEntered",!1),this.trigger("didExitViewport")},_triggerDidScrollDirection(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1 -const r=(0,s.get)(this,"elementId"),n=g[r],i=v[r],o={top:e.scrollTop,left:e.scrollLeft},a=(0,m.default)(i,o,t) -a&&a!==n&&(0,s.get)(this,"viewportDidScroll")&&(this.trigger("didScroll",a),g[r]=a),v[r]=o},_triggerDidAccessViewport(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1?arguments[1]:void 0 -if(this.isDestroyed||this.isDestroying)return -let r="" -!t&&e&&(r="didEnterViewport"),t&&!e&&(r="didExitViewport"),!(0,s.get)(this,"viewportSpy")&&t||(0,s.set)(this,"viewportEntered",e),r&&this.trigger(r)},_unbindIfEntered(e){(0,s.get)(this,"viewportEntered")&&(this._unbindListeners(e),this.removeObserver("viewportEntered",this,"_unbindIfEntered"),(0,s.set)(this,"viewportEntered",!1))},_debouncedEvent(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;nthis[e](...r)),(0,s.get)(this,"viewportRefreshRate"))},_bindScrollDirectionListener(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1 -const t=(0,s.get)(this,"scrollableArea")||window,r=(0,p.default)(t) -this._debouncedEventHandler=this._debouncedEvent.bind(this,"_triggerDidScrollDirection",r,e),r.addEventListener("scroll",this._debouncedEventHandler,{passive:!0})},_unbindScrollDirectionListener(){const e=(0,s.get)(this,"elementId"),t=(0,s.get)(this,"scrollableArea")||window,r=(0,p.default)(t) -r&&(r.removeEventListener("scroll",this._debouncedEventHandler,{passive:!0}),delete v[e],delete g[e])},_bindListeners(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,n=(0,p.default)(e),i=()=>this._debouncedEvent("_setViewportEntered",r) -this._evtListenerClosures.push({event:t,evtListener:i}),n.addEventListener(t,i,!1)},_unbindListeners(e){if((0,s.set)(this,"_stopListening",!0),(0,s.get)(this,"viewportUseIntersectionObserver")&&(0,s.get)(this,"viewportEnabled")&&(0,s.get)(this,"inViewport").unobserveIntersectionObserver(e),!(0,s.get)(this,"viewportUseIntersectionObserver")&&(0,s.get)(this,"viewportUseRAF")){const e=(0,s.get)(this,"elementId");(0,s.get)(this,"inViewport").removeRAF(e)}(0,s.get)(this,"viewportUseIntersectionObserver")||(0,s.get)(this,"viewportUseRAF")||(0,s.get)(this,"viewportListeners").forEach((e=>{let{context:t,event:r}=e -t=(0,s.get)(this,"scrollableArea")||t -let n=(0,p.default)(t),{evtListener:i}=this._evtListenerClosures.find((e=>r===e.event))||{} -n.removeEventListener(r,i,!1)}));(0,s.get)(this,"viewportDidScroll")&&this._unbindScrollDirectionListener()}}) -e.default=b})),define("ember-in-viewport/modifiers/in-viewport",["exports","@ember/debug","@ember/object","@ember/service","ember-modifier","fast-deep-equal"],(function(e,t,r,n,i,o){"use strict" -var s,a -function l(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function u(e,t,r,n,i){var o={} -return Object.keys(n).forEach((function(e){o[e]=n[e]})),o.enumerable=!!o.enumerable,o.configurable=!!o.configurable,("value"in o||o.initializer)&&(o.writable=!0),o=r.slice().reverse().reduce((function(r,n){return n(e,t,r)||r}),o),i&&void 0!==o.initializer&&(o.value=o.initializer?o.initializer.call(i):void 0,o.initializer=void 0),void 0===o.initializer&&(Object.defineProperty(e,t,o),o=null),o}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let c=(s=class extends i.default{constructor(){var e,t,r,n -super(...arguments),e=this,t="inViewport",n=this,(r=a)&&Object.defineProperty(e,t,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(n):void 0}),l(this,"name","in-viewport"),l(this,"lastOptions",void 0)}get options(){const{onEnter:e,onExit:t,...r}=this.args.named -return r}get hasStaleOptions(){return!(0,o.default)(this.options,this.lastOptions)}validateArguments(){}onEnter(){this.args.named.onEnter&&this.args.named.onEnter.call(null,this.element)}onExit(){this.args.named.onExit&&this.args.named.onExit.call(null,this.element)}setupWatcher(){this.inViewport.watchElement(this.element,this.options,this.onEnter,this.onExit),this.lastOptions=this.options}destroyWatcher(){this.inViewport.stopWatching(this.element)}didInstall(){this.setupWatcher()}didUpdateArguments(){this.hasStaleOptions&&(this.destroyWatcher(),this.setupWatcher())}didReceiveArguments(){this.validateArguments()}willRemove(){this.destroyWatcher()}},a=u(s.prototype,"inViewport",[n.inject],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),u(s.prototype,"onEnter",[r.action],Object.getOwnPropertyDescriptor(s.prototype,"onEnter"),s.prototype),u(s.prototype,"onExit",[r.action],Object.getOwnPropertyDescriptor(s.prototype,"onExit"),s.prototype),s) -e.default=c})),define("ember-in-viewport/services/in-viewport",["exports","@ember/service","@ember/object","@ember/polyfills","@ember/application","@ember/debug","@ember/runloop","ember-in-viewport/utils/is-in-viewport","ember-in-viewport/utils/can-use-raf","ember-in-viewport/utils/can-use-intersection-observer","ember-in-viewport/-private/observer-admin","ember-in-viewport/-private/raf-admin"],(function(e,t,r,n,i,o,s,a,l,u,c,d){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const h=()=>{} -class p extends t.default{init(){super.init(...arguments),(0,r.set)(this,"registry",new WeakMap) -let e=(0,n.assign)({viewportUseRAF:(0,l.default)()},this._buildOptions()) -e=(0,n.assign)(e,{viewportUseIntersectionObserver:(0,u.default)()}),(0,r.setProperties)(this,e)}startIntersectionObserver(){this.observerAdmin=new c.default}startRAF(){this.rafAdmin=new d.default}watchElement(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2?arguments[2]:void 0,n=arguments.length>3?arguments[3]:void 0 -if(this.viewportUseIntersectionObserver){this.observerAdmin||this.startIntersectionObserver() -const i=this.buildObserverOptions(t);(0,s.schedule)("afterRender",this,this.setupIntersectionObserver,e,i,r,n)}else this.rafAdmin||this.startRAF(),(0,s.schedule)("afterRender",this,this._startRaf,e,t,r,n) -return{onEnter:this.addEnterCallback.bind(this,e),onExit:this.addExitCallback.bind(this,e)}}addEnterCallback(e,t){this.viewportUseIntersectionObserver?this.observerAdmin.addEnterCallback(e,t):this.rafAdmin.addEnterCallback(e,t)}addExitCallback(e,t){this.viewportUseIntersectionObserver?this.observerAdmin.addExitCallback(e,t):this.rafAdmin.addExitCallback(e,t)}addToRegistry(e,t){this.registry&&this.registry.set(e,{observerOptions:t})}setupIntersectionObserver(e,t,r,n){this.isDestroyed||this.isDestroying||(this.addToRegistry(e,t),this.observerAdmin.add(e,t,r,n))}buildObserverOptions(e){let{intersectionThreshold:t=0,scrollableArea:r=null,viewportTolerance:n={}}=e -const i="string"==typeof r?document.querySelector(r):r instanceof HTMLElement?r:void 0,{top:o=0,left:s=0,bottom:a=0,right:l=0}=n -return{root:i,rootMargin:`${o}px ${l}px ${a}px ${s}px`,threshold:t}}unobserveIntersectionObserver(e){if(!e)return -const t=this.registry.get(e) -"object"==typeof t&&this.observerAdmin.unobserve(e,t.observerOptions)}addRAF(e,t){this.rafAdmin.add(e,t)}removeRAF(e){this.rafAdmin&&this.rafAdmin.remove(e)}isInViewport(){return(0,a.default)(...arguments)}stopWatching(e){this.observerAdmin&&this.unobserveIntersectionObserver(e),this.rafAdmin&&this.removeRAF(e)}willDestroy(){(0,r.set)(this,"registry",null),this.observerAdmin&&(this.observerAdmin.destroy(),(0,r.set)(this,"observerAdmin",null)),this.rafAdmin&&(this.rafAdmin.reset(),(0,r.set)(this,"rafAdmin",null))}_buildOptions(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{} -const t=(0,i.getOwner)(this) -if(t)return(0,n.assign)(e,t.lookup("config:in-viewport"))}_startRaf(e,t,r,n){this.isDestroyed||this.isDestroying||(r=r||h,n=n||h,(0,d.startRAF)(e,t,r,n,this.addRAF.bind(this,e.id),this.removeRAF.bind(this,e.id)))}}e.default=p})),define("ember-in-viewport/utils/can-use-dom",["exports"],(function(e){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=!("undefined"==typeof window||!window.document||!window.document.createElement) -e.default=t})),define("ember-in-viewport/utils/can-use-intersection-observer",["exports","ember-in-viewport/utils/can-use-dom"],(function(e,t){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){if(!t.default)return!1 -return function(e){if("IntersectionObserver"in e&&"IntersectionObserverEntry"in e&&"intersectionRatio"in e.IntersectionObserverEntry.prototype)return"isIntersecting"in e.IntersectionObserverEntry.prototype||Object.defineProperty(e.IntersectionObserverEntry.prototype,"isIntersecting",{get:function(){return this.intersectionRatio>0}}),!0 -return!1}(window)}})),define("ember-in-viewport/utils/can-use-raf",["exports","ember-in-viewport/utils/can-use-dom"],(function(e,t){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){if(!t.default)return!1 -return function(e,t,r){let n,i=["ms","moz","webkit","o"] -for(n=0;n0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1 -if(!e)return"none" -const{top:i,left:o}=t,{top:s,left:a}=e,l={top:r((i-s)/n)*n,left:r((o-a)/n)*n} -if(l.top>0)return"down" -if(l.top<0)return"up" -if(l.left>0)return"right" -if(l.left<0)return"left"} -const{floor:r}=Math})),define("ember-in-viewport/utils/find-elem",["exports"],(function(e){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){let t -t=e.nodeType===Node.ELEMENT_NODE||e.nodeType===Node.DOCUMENT_NODE||e instanceof Window?e:document.querySelector(e) -return t}})),define("ember-in-viewport/utils/is-in-viewport",["exports","@ember/polyfills"],(function(e,t){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:r -const{top:s,left:a,bottom:l,right:u,height:c,width:d}=e,h=(0,t.assign)((0,t.assign)({},r),o),{top:p,left:f,bottom:m,right:g}=h -return s+p>=0&&a+f>=0&&Math.round(l)-m-c<=Math.round(n)&&Math.round(u)-g-d<=Math.round(i)} -const r={top:0,left:0,bottom:0,right:0}})),define("ember-inflector/index",["exports","ember-inflector/lib/system"],(function(e,t){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"defaultRules",{enumerable:!0,get:function(){return t.defaultRules}}),Object.defineProperty(e,"pluralize",{enumerable:!0,get:function(){return t.pluralize}}),Object.defineProperty(e,"singularize",{enumerable:!0,get:function(){return t.singularize}}),e.default=void 0 +e.default=a})),define("ember-element-helper/helpers/element",["exports","@ember/component/helper","@ember/debug","@ember/component","@embroider/util"],(function(e,t,r,n,i){"use strict" +function o(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var r=e[Symbol.toPrimitive] +if(void 0!==r){var n=r.call(e,t||"default") +if("object"!=typeof n)return n +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function s(){}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class a extends t.default{constructor(){super(...arguments),this.tagName=s,this.componentClass=null}compute(e,t){let s=e[0] +return s!==this.tagName&&(this.tagName=s,"string"==typeof s?this.componentClass=(0,i.ensureSafeComponent)(class extends n.default{constructor(){super(...arguments),o(this,"tagName",s)}},this):(this.componentClass=null,(0,r.runInDebug)((()=>{let e="The argument passed to the `element` helper must be a string" +try{e+=` (you passed \`${s}\`)`}catch(t){}})))),this.componentClass}}e.default=a})),define("ember-get-config/index",["exports","consul-ui/config/environment"],(function(e,t){"use strict" +Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("ember-inflector/index",["exports","ember-inflector/lib/system"],(function(e,t){"use strict" +Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,Object.defineProperty(e,"pluralize",{enumerable:!0,get:function(){return t.pluralize}}),Object.defineProperty(e,"singularize",{enumerable:!0,get:function(){return t.singularize}}) var r=t.Inflector e.default=r})),define("ember-inflector/lib/helpers/pluralize",["exports","ember-inflector","ember-inflector/lib/utils/make-helper"],(function(e,t,r){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 @@ -9570,8 +10276,7 @@ return 2===n.length&&n.push({withoutCount:r["without-count"]}),(0,t.pluralize)(. e.default=n})),define("ember-inflector/lib/helpers/singularize",["exports","ember-inflector","ember-inflector/lib/utils/make-helper"],(function(e,t,r){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 var n=(0,r.default)((function(e){return(0,t.singularize)(e[0])})) -e.default=n})) -define("ember-inflector/lib/system",["exports","ember-inflector/lib/system/inflector","ember-inflector/lib/system/string"],(function(e,t,r){"use strict" +e.default=n})),define("ember-inflector/lib/system",["exports","ember-inflector/lib/system/inflector","ember-inflector/lib/system/string"],(function(e,t,r){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"Inflector",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"pluralize",{enumerable:!0,get:function(){return r.pluralize}}),Object.defineProperty(e,"singularize",{enumerable:!0,get:function(){return r.singularize}})})),define("ember-inflector/lib/system/inflections",["exports"],(function(e){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 e.default={plurals:[[/$/,"s"],[/s$/i,"s"],[/^(ax|test)is$/i,"$1es"],[/(octop|vir)us$/i,"$1i"],[/(octop|vir)i$/i,"$1i"],[/(alias|status|bonus)$/i,"$1es"],[/(bu)s$/i,"$1ses"],[/(buffal|tomat)o$/i,"$1oes"],[/([ti])um$/i,"$1a"],[/([ti])a$/i,"$1a"],[/sis$/i,"ses"],[/(?:([^f])fe|([lr])f)$/i,"$1$2ves"],[/(hive)$/i,"$1s"],[/([^aeiouy]|qu)y$/i,"$1ies"],[/(x|ch|ss|sh)$/i,"$1es"],[/(matr|vert|ind)(?:ix|ex)$/i,"$1ices"],[/^(m|l)ouse$/i,"$1ice"],[/^(m|l)ice$/i,"$1ice"],[/^(ox)$/i,"$1en"],[/^(oxen)$/i,"$1"],[/(quiz)$/i,"$1zes"]],singular:[[/s$/i,""],[/(ss)$/i,"$1"],[/(n)ews$/i,"$1ews"],[/([ti])a$/i,"$1um"],[/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)(sis|ses)$/i,"$1sis"],[/(^analy)(sis|ses)$/i,"$1sis"],[/([^f])ves$/i,"$1fe"],[/(hive)s$/i,"$1"],[/(tive)s$/i,"$1"],[/([lr])ves$/i,"$1f"],[/([^aeiouy]|qu)ies$/i,"$1y"],[/(s)eries$/i,"$1eries"],[/(m)ovies$/i,"$1ovie"],[/(x|ch|ss|sh)es$/i,"$1"],[/^(m|l)ice$/i,"$1ouse"],[/(bus)(es)?$/i,"$1"],[/(o)es$/i,"$1"],[/(shoe)s$/i,"$1"],[/(cris|test)(is|es)$/i,"$1is"],[/^(a)x[ie]s$/i,"$1xis"],[/(octop|vir)(us|i)$/i,"$1us"],[/(alias|status|bonus)(es)?$/i,"$1"],[/^(ox)en/i,"$1"],[/(vert|ind)ices$/i,"$1ex"],[/(matr)ices$/i,"$1ix"],[/(quiz)zes$/i,"$1"],[/(database)s$/i,"$1"]],irregularPairs:[["person","people"],["man","men"],["child","children"],["sex","sexes"],["move","moves"],["cow","kine"],["zombie","zombies"]],uncountable:["equipment","information","rice","money","species","series","fish","sheep","jeans","police"]}})),define("ember-inflector/lib/system/inflector",["exports","@ember/string","ember-inflector/lib/system/inflections"],(function(e,t,r){"use strict" @@ -9596,28 +10301,49 @@ e.default=d})),define("ember-inflector/lib/system/string",["exports","ember-infl Object.defineProperty(e,"__esModule",{value:!0}),e.pluralize=function(){return t.default.inflector.pluralize(...arguments)},e.singularize=function(e){return t.default.inflector.singularize(e)}})),define("ember-inflector/lib/utils/make-helper",["exports","ember","@ember/component/helper"],(function(e,t,r){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){if(r.default)return r.default.helper(e) if(t.default.HTMLBars)return t.default.HTMLBars.makeBoundHelper(e) -return t.default.Handlebars.makeBoundHelper(e)}})),define("ember-intl/-private/error-types",["exports","intl-messageformat"],(function(e,t){"use strict" +return t.default.Handlebars.makeBoundHelper(e)}})) +define("ember-intl/-private/error-types",["exports","intl-messageformat"],(function(e,t){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.MISSING_TRANSLATION=e.MISSING_INTL_API=void 0 const r=t.ErrorCode.MISSING_INTL_API e.MISSING_INTL_API=r e.MISSING_TRANSLATION="MISSING_TRANSLATION"})),define("ember-intl/-private/formatters/-base",["exports","@ember/debug"],(function(e,t){"use strict" -function r(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +function r(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var r=e[Symbol.toPrimitive] +if(void 0!==r){var n=r.call(e,t||"default") +if("object"!=typeof n)return n +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 const n=Object.create(null) -class i{constructor(e){r(this,"config",void 0),r(this,"readFormatConfig",void 0),r(this,"createNativeFormatter",void 0),this.config=e,this.readFormatConfig=e.readFormatConfig}get options(){return[]}filterKnownOptions(e){if(!e)return n +class i{constructor(e){r(this,"config",void 0),r(this,"readFormatConfig",void 0),this.config=e,this.readFormatConfig=e.readFormatConfig}get options(){return[]}filterKnownOptions(e){if(!e)return n const t={} for(const r in e)this.options.includes(r)&&(t[r]=e[r]) return t}readOptions(e){let t=this.filterKnownOptions(e) if(e&&"format"in e){t={...this.getNamedFormat(e.format),...t}}return t}validateFormatterOptions(e,t){}getNamedFormat(e){const t=this.readFormatConfig()[this.constructor.type] if(t&&t[e])return t[e]}}e.default=i,r(i,"type",void 0)})),define("ember-intl/-private/formatters/-format-datetime",["exports","fast-memoize","ember-intl/-private/formatters/-base"],(function(e,t,r){"use strict" -function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +function n(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var r=e[Symbol.toPrimitive] +if(void 0!==r){var n=r.call(e,t||"default") +if("object"!=typeof n)return n +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 const i=["localeMatcher","formatMatcher","timeZone","hour12","weekday","era","year","month","day","hour","minute","second","timeZoneName","hourCycle"] class o extends r.default{constructor(){super(...arguments),n(this,"createNativeFormatter",(0,t.default)(((e,t)=>new Intl.DateTimeFormat(e,t))))}get options(){return i}format(e,t,r){const n=this.readOptions(r) this.validateFormatterOptions(e,n) return this.createNativeFormatter(e,n).format(new Date(t))}}e.default=o,n(o,"type",void 0)})),define("ember-intl/-private/formatters/format-date",["exports","ember-intl/-private/formatters/-format-datetime"],(function(e,t){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 class r extends t.default{}var n,i,o -e.default=r,o="date",(i="type")in(n=r)?Object.defineProperty(n,i,{value:o,enumerable:!0,configurable:!0,writable:!0}):n[i]=o})),define("ember-intl/-private/formatters/format-message",["exports","ember","fast-memoize","@ember/string","intl-messageformat","ember-intl/-private/utils/parse"],(function(e,t,r,n,i,o){"use strict" -function s(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default=r,n=r,o="date",(i=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var r=e[Symbol.toPrimitive] +if(void 0!==r){var n=r.call(e,t||"default") +if("object"!=typeof n)return n +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(i="type"))in n?Object.defineProperty(n,i,{value:o,enumerable:!0,configurable:!0,writable:!0}):n[i]=o})),define("ember-intl/-private/formatters/format-message",["exports","ember","fast-memoize","@ember/template","intl-messageformat","ember-intl/-private/utils/parse"],(function(e,t,r,n,i,o){"use strict" +function s(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var r=e[Symbol.toPrimitive] +if(void 0!==r){var n=r.call(e,t||"default") +if("object"!=typeof n)return n +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 const{Handlebars:{Utils:{escapeExpression:a}}}=t.default class l{constructor(e){s(this,"config",void 0),s(this,"readFormatConfig",void 0),s(this,"createNativeFormatter",(0,r.default)(((e,t,r)=>new i.default(e,t,r,{ignoreTag:!0})))),this.config=e,this.readFormatConfig=e.readFormatConfig}format(e,t,r){let i=t "string"==typeof t&&(i=(0,o.default)(t)) @@ -9625,12 +10351,22 @@ const s=r&&r.htmlSafe,l=this.createNativeFormatter(i,e,this.readFormatConfig()), const t={} return Object.keys(e).forEach((r=>{const i=e[r];(0,n.isHTMLSafe)(i)?t[r]=i.toHTML():t[r]="string"==typeof i?a(i):i})),t}(r):r,c=l.format(u) return s?(0,n.htmlSafe)(c):c}}e.default=l,s(l,"type","message")})),define("ember-intl/-private/formatters/format-number",["exports","fast-memoize","ember-intl/-private/formatters/-base"],(function(e,t,r){"use strict" -function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +function n(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var r=e[Symbol.toPrimitive] +if(void 0!==r){var n=r.call(e,t||"default") +if("object"!=typeof n)return n +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 const i=["localeMatcher","style","currency","currencyDisplay","unit","unitDisplay","useGrouping","minimumIntegerDigits","minimumFractionDigits","maximumFractionDigits","minimumSignificantDigits","maximumSignificantDigits","compactDisplay","currencyDisplay","currencySign","notation","signDisplay","unitDisplay","unit"] class o extends r.default{constructor(){super(...arguments),n(this,"createNativeFormatter",(0,t.default)(((e,t)=>new Intl.NumberFormat(e,t))))}get options(){return i}format(e,t,r){const n=this.readOptions(r) this.validateFormatterOptions(e,n) return this.createNativeFormatter(e,n).format(t)}}e.default=o,n(o,"type","number")})),define("ember-intl/-private/formatters/format-relative",["exports","@ember/debug","fast-memoize","intl-messageformat","ember-intl/-private/error-types","ember-intl/-private/formatters/-base"],(function(e,t,r,n,i,o){"use strict" -function s(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +function s(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var r=e[Symbol.toPrimitive] +if(void 0!==r){var n=r.call(e,t||"default") +if("object"!=typeof n)return n +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 const a=["numeric","style","unit"] class l extends o.default{constructor(){super(...arguments),s(this,"createNativeFormatter",(0,r.default)(((e,t)=>{if(!Intl||!Intl.RelativeTimeFormat){const e=new n.FormatError('Intl.RelativeTimeFormat is not available in this environment. Try polyfilling it using "@formatjs/intl-relativetimeformat"',i.MISSING_INTL_API) throw this.config.onError({kind:i.MISSING_INTL_API,error:e}),e}return new Intl.RelativeTimeFormat(e,t)})))}get options(){return a}format(e,t,r){var n @@ -9640,8 +10376,13 @@ const o=null!==(n=null==r?void 0:r.unit)&&void 0!==n?n:i.unit return this.createNativeFormatter(e,i).format("number"==typeof t?t:new Date(t).getTime(),o)}}e.default=l,s(l,"type","relative")})),define("ember-intl/-private/formatters/format-time",["exports","ember-intl/-private/formatters/-format-datetime"],(function(e,t){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 class r extends t.default{}var n,i,o -e.default=r,o="time",(i="type")in(n=r)?Object.defineProperty(n,i,{value:o,enumerable:!0,configurable:!0,writable:!0}):n[i]=o})),define("ember-intl/-private/formatters/index",["exports","ember-intl/-private/formatters/format-time","ember-intl/-private/formatters/format-date","ember-intl/-private/formatters/format-number","ember-intl/-private/formatters/format-message","ember-intl/-private/formatters/format-relative"],(function(e,t,r,n,i,o){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"FormatTime",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"FormatDate",{enumerable:!0,get:function(){return r.default}}),Object.defineProperty(e,"FormatNumber",{enumerable:!0,get:function(){return n.default}}),Object.defineProperty(e,"FormatMessage",{enumerable:!0,get:function(){return i.default}}),Object.defineProperty(e,"FormatRelative",{enumerable:!0,get:function(){return o.default}})})),define("ember-intl/-private/store/container",["exports","@ember/object","ember-intl/-private/store/translation"],(function(e,t,r){"use strict" +e.default=r,n=r,o="time",(i=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var r=e[Symbol.toPrimitive] +if(void 0!==r){var n=r.call(e,t||"default") +if("object"!=typeof n)return n +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(i="type"))in n?Object.defineProperty(n,i,{value:o,enumerable:!0,configurable:!0,writable:!0}):n[i]=o})),define("ember-intl/-private/formatters/index",["exports","ember-intl/-private/formatters/format-time","ember-intl/-private/formatters/format-date","ember-intl/-private/formatters/format-number","ember-intl/-private/formatters/format-message","ember-intl/-private/formatters/format-relative"],(function(e,t,r,n,i,o){"use strict" +Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"FormatDate",{enumerable:!0,get:function(){return r.default}}),Object.defineProperty(e,"FormatMessage",{enumerable:!0,get:function(){return i.default}}),Object.defineProperty(e,"FormatNumber",{enumerable:!0,get:function(){return n.default}}),Object.defineProperty(e,"FormatRelative",{enumerable:!0,get:function(){return o.default}}),Object.defineProperty(e,"FormatTime",{enumerable:!0,get:function(){return t.default}})})),define("ember-intl/-private/store/container",["exports","@ember/object","ember-intl/-private/store/translation"],(function(e,t,r){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 var n=t.default.extend({locales:(0,t.computed)("_translationModels",(function(){return Array.from(this._translationModels.keys())})).readOnly(),init(){this._super(),this._translationModels=new Map},createTranslationModel(e){const t=new r.default(e) return this._translationModels.set(e,t),this.notifyPropertyChange("locales"),t},findTranslationModel(e){return this._translationModels.get(e)},push(e,t){let r=this.findTranslationModel(e) @@ -9651,7 +10392,12 @@ if(r&&r.has(t))return r.find(t)},lookupAst(e,t){const r=this._lookup(e,t) if(r)return r.ast},lookup(e,t){const r=this._lookup(e,t) if(r)return r.original}}) e.default=n})),define("ember-intl/-private/store/translation",["exports","ember-intl/-private/utils/flatten","ember-intl/-private/utils/parse"],(function(e,t,r){"use strict" -function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +function n(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var r=e[Symbol.toPrimitive] +if(void 0!==r){var n=r.call(e,t||"default") +if("object"!=typeof n)return n +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 var i=class{get localeName(){return this._localeName}constructor(e){n(this,"translations",new Map),n(this,"asts",new Map),n(this,"_localeName",void 0),this._localeName=e}addTranslations(e){const n=(0,t.default)(e) for(const t in n){let e=n[t] "string"!=typeof e&&(e=`${e}`),this.translations.set(t,e),this.asts.set(t,(0,r.default)(e))}}find(e){if(this.has(e))return{ast:this.asts.get(e),original:this.translations.get(e)}}has(e){return this.translations.has(e)}} @@ -9705,33 +10451,38 @@ return this._super(e,t)}}) e.default=r})),define("ember-intl/helpers/format-time",["exports","ember-intl/helpers/-format-base"],(function(e,t){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 var r=t.default.extend({format(e,t){return this.intl.formatTime(e,t)}}) -e.default=r})) -define("ember-intl/helpers/t",["exports","ember-intl/helpers/-format-base"],(function(e,t){"use strict" +e.default=r})),define("ember-intl/helpers/t",["exports","ember-intl/helpers/-format-base"],(function(e,t){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 var r=t.default.extend({format(e,t){return this.intl.t(e,t)}}) e.default=r})),define("ember-intl/index",["exports","ember-intl/services/intl","ember-intl/macros"],(function(e,t,r){"use strict" Object.defineProperty(e,"__esModule",{value:!0}) var n={Service:!0} Object.defineProperty(e,"Service",{enumerable:!0,get:function(){return t.default}}),Object.keys(r).forEach((function(t){"default"!==t&&"__esModule"!==t&&(Object.prototype.hasOwnProperty.call(n,t)||t in e&&e[t]===r[t]||Object.defineProperty(e,t,{enumerable:!0,get:function(){return r[t]}}))}))})),define("ember-intl/macros/index",["exports","ember-intl/macros/intl","ember-intl/macros/t"],(function(e,t,r){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"intl",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"t",{enumerable:!0,get:function(){return r.default}}),Object.defineProperty(e,"raw",{enumerable:!0,get:function(){return r.raw}})})),define("ember-intl/macros/intl",["exports","@ember/object","@ember/application"],(function(e,t,r){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){for(var e=arguments.length,i=new Array(e),o=0;o{i[r]=(0,t.get)(e,n[r])})),i}Object.defineProperty(e,"__esModule",{value:!0}),e.raw=function(e){return new o(e)},e.default=function(e,t){const s=t||new r.default,[a,l]=function(e){const t=new r.default,n=new r.default +function i(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var r=e[Symbol.toPrimitive] +if(void 0!==r){var n=r.call(e,t||"default") +if("object"!=typeof n)return n +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,n){const i=new r.default +return Object.keys(n).forEach((r=>{i[r]=(0,t.get)(e,n[r])})),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,t){const i=t||new r.default,[a,l]=function(e){const t=new r.default,n=new r.default return Object.keys(e).forEach((r=>{const i=e[r] -i instanceof o?n[r]=i.valueOf():t[r]=i})),[t,n]}(s),u=Object.values(a) -return(0,n.default)(...u,((t,r,n)=>t.t(e,{...l,...i(n,a)})))} -class o{constructor(e){(function(e,t,r){t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r})(this,"_value",void 0),this._value=e}valueOf(){return this._value}toString(){return String(this._value)}}})),define("ember-intl/services/intl",["exports","@ember/application","@ember/object","@ember/object/evented","@ember/debug","@ember/array","@ember/service","@ember/runloop","ember-intl/-private/formatters","ember-intl/-private/utils/is-array-equal","ember-intl/-private/utils/normalize-locale","ember-intl/-private/utils/get-dom","ember-intl/-private/utils/hydrate","ember-intl/-private/store/container"],(function(e,t,r,n,i,o,s,a,l,u,c,d,h,p){"use strict" +i instanceof s?n[r]=i.valueOf():t[r]=i})),[t,n]}(i),u=Object.values(a) +return(0,n.default)(...u,((t,r,n)=>t.t(e,{...l,...o(n,a)})))},e.raw=function(e){return new s(e)} +class s{constructor(e){i(this,"_value",void 0),this._value=e}valueOf(){return this._value}toString(){return String(this._value)}}})) +define("ember-intl/services/intl",["exports","@ember/application","@ember/object","@ember/object/computed","@ember/object/evented","@ember/debug","@ember/array","@ember/service","@ember/runloop","ember-intl/-private/formatters","ember-intl/-private/utils/is-array-equal","ember-intl/-private/utils/normalize-locale","ember-intl/-private/utils/get-dom","ember-intl/-private/utils/hydrate","ember-intl/-private/store/container"],(function(e,t,r,n,i,o,s,a,l,u,c,d,h,p,f){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var f=s.default.extend(n.default,{formats:null,locales:r.computed.readOnly("_translationContainer.locales"),locale:(0,r.computed)("_locale",{set(e,t){const n=(0,o.makeArray)(t).map(c.default) -return(0,u.default)(n,this._locale)||((0,r.set)(this,"_locale",n),(0,a.cancel)(this._timer),this._timer=(0,a.next)((()=>{this.trigger("localeChanged"),this._updateDocumentLanguage(this._locale)}))),this._locale},get(){return(0,r.get)(this,"_locale")}}),primaryLocale:r.computed.readOnly("locale.0"),formatRelative:m("relative"),formatMessage:m("message"),formatNumber:m("number"),formatTime:m("time"),formatDate:m("date"),_translationContainer:null,_locale:null,_timer:null,_formatters:null,init(){this._super(...arguments) +var m=a.default.extend(i.default,{formats:null,locales:(0,n.readOnly)("_translationContainer.locales"),locale:(0,r.computed)("_locale",{set(e,t){const n=(0,s.makeArray)(t).map(d.default) +return(0,c.default)(n,this._locale)||((0,r.set)(this,"_locale",n),(0,l.cancel)(this._timer),this._timer=(0,l.next)((()=>{this.trigger("localeChanged"),this._updateDocumentLanguage(this._locale)}))),this._locale},get(){return(0,r.get)(this,"_locale")}}),primaryLocale:(0,n.readOnly)("locale.0"),formatRelative:g("relative"),formatMessage:g("message"),formatNumber:g("number"),formatTime:g("time"),formatDate:g("date"),_translationContainer:null,_locale:null,_timer:null,_formatters:null,init(){this._super(...arguments) const e=(0,r.get)(this,"locale")||["en-us"] -this.setLocale(e),this._owner=(0,t.getOwner)(this),this._translationContainer=p.default.create(),this._formatters=this._createFormatters(),this.formats||(this.formats=this._owner.resolveRegistration("formats:main")||{}),(0,h.default)(this)},willDestroy(){this._super(...arguments),(0,a.cancel)(this._timer)},onError(e){let{error:t}=e +this.setLocale(e),this._owner=(0,t.getOwner)(this),this._translationContainer=f.default.create(),this._formatters=this._createFormatters(),this.formats||(this.formats=this._owner.resolveRegistration("formats:main")||{}),(0,p.default)(this)},willDestroy(){this._super(...arguments),(0,l.cancel)(this._timer)},onError(e){let{error:t}=e throw t},lookup(e,t){const r=this._localeWithDefault(t) let n for(let i=0;i2&&void 0!==arguments[2]?arguments[2]:{} @@ -9741,14 +10492,14 @@ for(let o=0;othis._translationContainer.has(t,e)))},setLocale(e){(0,r.set)(this,"locale",e)},addTranslations(e,t){this._translationContainer.push((0,c.default)(e),t)},translationsFor(e){return this._translationContainer.findTranslationModel((0,c.default)(e),!1)},_localeWithDefault(e){return e?"string"==typeof e?(0,o.makeArray)(e).map(c.default):Array.isArray(e)?e.map(c.default):void 0:(0,r.get)(this,"_locale")||[]},_updateDocumentLanguage(e){const t=(0,d.default)(this) +return r.some((t=>this._translationContainer.has(t,e)))},setLocale(e){(0,r.set)(this,"locale",e)},addTranslations(e,t){this._translationContainer.push((0,d.default)(e),t)},translationsFor(e){return this._translationContainer.findTranslationModel((0,d.default)(e),!1)},_localeWithDefault(e){return e?"string"==typeof e?(0,s.makeArray)(e).map(d.default):Array.isArray(e)?e.map(d.default):void 0:(0,r.get)(this,"_locale")||[]},_updateDocumentLanguage(e){const t=(0,h.default)(this) if(t){const[r]=e t.documentElement.setAttribute("lang",r)}},_createFormatters(){const e={onError:this.onError.bind(this),readFormatConfig:()=>this.formats} -return{message:new l.FormatMessage(e),relative:new l.FormatRelative(e),number:new l.FormatNumber(e),time:new l.FormatTime(e),date:new l.FormatDate(e)}}}) -function m(e){return function(t,n){let i -return i=n&&n.locale?this._localeWithDefault(n.locale):(0,r.get)(this,"locale"),this._formatters[e].format(i,t,n)}}e.default=f})),define("ember-intl/translations",["exports"],(function(e){"use strict" +return{message:new u.FormatMessage(e),relative:new u.FormatRelative(e),number:new u.FormatNumber(e),time:new u.FormatTime(e),date:new u.FormatDate(e)}}}) +function g(e){return function(t,n){let i +return i=n&&n.locale?this._localeWithDefault(n.locale):(0,r.get)(this,"locale"),this._formatters[e].format(i,t,n)}}e.default=m})),define("ember-intl/translations",["exports"],(function(e){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=[["en-us",{common:{brand:{aws:"AWS","aws-iam":"AWS IAM",consul:"Consul","consul-api-gateway":"Consul API Gateway",jwt:"JWT",kubernetes:"Kubernetes",lambda:"AWS Lambda",nomad:"Nomad",oidc:"OIDC",terraform:"Terraform",vault:"Vault"},consul:{accessorid:"AccessorID","api-gateway":"API Gateway",critical:"Critical",datacenter:"Datacenter",destinationname:"Destination Name",displayname:"Display Name",empty:"No checks",failuretolerance:"Fault tolerance",gateway:"Gateway","ingress-gateway":"Ingress Gateway",localbindaddress:"Local Bind Address",localbindport:"Local Bind Port",mesh:"Mesh","mesh-gateway":"Mesh Gateway",name:"Name","node-name":"Node Name","node.meta":"Node Meta","not-registered":"Not Registered",partition:"Admin Partitions",passing:"Passing",peername:"Peer",readreplica:"Read replica",redundancyzone:"Redundancy zone",registered:"Registered",service:"Service","service-name":"Service Name","service.meta":"Service Meta",sourcename:"Source Name",status:"Health Status",tags:"Tags","terminating-gateway":"Terminating Gateway",warning:"Warning"},search:{critical:"Failing","in-mesh":"In service mesh",integrations:"Integrations","not-in-mesh":"Not in service mesh",search:"Search",searchproperty:"Search Across",source:"Source"},sort:{age:{asc:"Oldest to Newest",desc:"Newest to Oldest"},alpha:{asc:"A to Z",desc:"Z to A"},duration:{asc:"Longest to shortest",desc:"Shortest to longest"},numeric:{asc:"Ascending",desc:"Descending"},status:{asc:"Unhealthy to Healthy",desc:"Healthy to Unhealthy"}},ui:{creation:"Creation",enterprisefeature:"Enterprise feature","filtered-by":"Filtered by {item}",maxttl:"Max TTL",name:"Name",remove:"Remove {item}"},validations:{"dns-hostname":{error:"{name} must be a valid DNS hostname.",help:"Must be a valid DNS hostname. Must contain 1-64 characters (numbers, letters, and hyphens), and must begin with a letter.\n",test:"^[a-zA-Z0-9]([a-zA-Z0-9-]'{0,62}'[a-zA-Z0-9])?$"},immutable:{help:"Once created, this cannot be changed."},"server-external-addresses":{help:"Enter a comma separated list of this peer's fallback server address(es) to be used in the event of failed automatic updates. This field is required for HCP-managed clusters.\n"}}},components:{app:{"collapsible-notices":{collapse:"Collapse Banners",expand:"Expand Banners"},complementary:"Complementary",main:"Main",skip_to_content:"Skip to Content",toggle_menu:"Toggle Menu"},consul:{acl:{"search-bar":{kind:{name:"Type",options:{client:"Client",management:"Management"}}}},"auth-method":{"binding-list":{"bind-type":{node:"The bind name value is used as an ACLNodeIdentity.NodeName field in the token that is created.",role:"The bind name value is used as an RoleLink.Name field in the token that is created.",service:"The bind name value is used as an ACLServiceIdentity.ServiceName field in the token that is created."}},"search-bar":{kind:{name:"Type"},locality:{name:"Source",options:{global:"Creates global tokens",local:"Creates local tokens"}}}},"health-check":{"search-bar":{check:{name:"Type",options:{alias:"alias",docker:"docker",grpc:"grpc",http:"http",script:"script",serf:"serf",tcp:"tcp",ttl:"ttl"}},kind:{name:"Kind",options:{node:"Node Check",service:"Service Check"}},sort:{kind:{asc:"Service to Node",desc:"Node to Service",name:"Check Type"},name:{name:"Check Name"}}}},intention:{notice:{permissions:{body:"Permissions are L7 attributes. If any of the following permissions match the request, the Intention will apply. Requests that fail to match any of the provided routes will follow the default ACL policy.",footer:"Learn more about permissions"}},"search-bar":{access:{name:"Permission",options:{allow:"Allow","app-aware":"App aware",deny:"Deny"}},sort:{access:{asc:"Allow to Deny",desc:"Deny to Allow",name:"Permission"},"destination-name":{asc:"Destination: A to Z",desc:"Destination: Z to A",name:"Destination"},precedence:{asc:"Ascending",desc:"Descending",name:"Precedence"},"source-name":{asc:"Source: A to Z",desc:"Source: Z to A",name:"Source"}}}},kv:{"search-bar":{kind:{name:"Type",options:{folder:"Folder",key:"Key"}},sort:{kind:{asc:"Folders to Keys",desc:"Keys to Folders"}}}},peer:{form:{"establish-label":"Establish peering","generate-label":"Generate token"},generate:{addresses:"Server address(es)",name:"Name of peer"},"search-bar":{sort:{state:{asc:"Pending to Deleting",desc:"Deleting to Pending",name:"Status"}},state:{name:"Status",options:{active:"Active",deleting:"Deleting",establishing:"Establishing",failing:"Failing",pending:"Pending",terminated:"Terminated"}}}},policy:{"search-bar":{kind:{name:"Type",options:{"global-management":"Global Management",standard:"Standard"}}}},service:{"search-bar":{"in-mesh":"In service mesh",kind:"Service Type","not-in-mesh":"Not in service mesh"}},"service-instance":{"search-bar":{sort:{name:{name:"Service Name"}}}},source:{header:"This is not a registered Consul service. It’s a routing configuration that routes traffic to real services in Consul. For more information, read our documentation.",links:{documentation:"Documentation"},"menu-title":"About Routing Configs"},token:{"search-bar":{kind:{name:"Type",options:{global:"Global Scope","global-management":"Global Management",local:"Local Scope"}}},secretID:"Secret ID"},"topology-metrics":{popover:{deny:{action:{isExact:"Allow",notExact:"Create"},body:{isExact:"Change the action of this intention to allow.",notExact:"Add an intention that allows these two services to connect."},header:"Connection Denied"},l7:{action:"View",body:"Certain HTTP request info must be identified.",header:"Layer 7 permissions"},"not-defined":{action:"Documentation",body:'Add "{upstream}" as an explicit upstream of "{downstream}" or set the "{downstream}" proxy to "transparent" mode to enable traffic.',header:"No traffic"}},"source-type":{"proxy-registration":{text:"Defined in proxy registration",tooltip:"This connection was defined in a proxy registration."},"routing-config":{text:"Routing configuration",tooltip:"This is not a registered Consul service. It’s a routing configuration that routes traffic to real services in Consul."}},status:{error:"Unable to load metrics","ingress-gateway":"Viewing metrics for Ingress Gateways is not currently supported in the UI.",loading:"Loading metrics","remote-dc":"Unable to fetch metrics for a remote datacenter"}},"transparent-proxy":"Transparent Proxy",upstream:{"search-bar":{instance:{name:"Type"}}}},"copy-button":{error:"There was a problem.",success:"Copied {name}",title:"Copy {name} to the clipboard"}},models:{"auth-method":{BindNamespace:"Bind Namespace",Config:{AllowedRedirectURIs:"Allowed redirect URIs",BoundAudiences:"Bound audiences",BoundIssuer:"Bound issuer",CACert:"CA Cert",ClaimMappings:"Claim Mappings",ClockSkewLeeway:"Clock skew leeway",ExpirationLeeway:"Expiration leeway",Host:"Host",JWKSCACert:"JWKS CA Cert",JWKSURL:"JWKS URL",JWTSupportedAlgs:"JWT supported algorithms",JWTValidationPubKeys:"JWT validation pub keys",ListClaimMappings:"List Claim Mappings",NotBeforeLeeway:"Not before leeway",OIDCClientID:"Client ID",OIDCClientSecret:"Client secret",OIDCDiscoveryCACert:"OIDC discovery CA cert",OIDCDiscoveryURL:"Discovery URL",OIDCScopes:"OIDC scopes",ServiceAccountJWT:"Service account JSON Web Token",VerboseOIDCLogging:"Verbose OIDC logging"},Description:"Description",DisplayName:"Display name",MaxTokenTTL:"Maximum token TTL",Selector:"Selector",TokenLocality:"Token locality",Type:"Type"},"binding-rule":{BindType:"Type",Description:"Description",Selector:"Selector"}},routes:{dc:{acls:{"auth-methods":{index:{empty:{body:"

      \n {items, select,\n 0 {There don't seem to be any Auth Methods}\n other {No Auth Methods were found matching your search}\n }, or you may not have acl:read permissions to view Auth Methods yet.\n

      \n",header:"{items, select,\n 0 {Welcome to Auth Methods}\n other {No Auth Methods found}\n}\n"}},show:{"binding-rules":{index:{empty:{body:"

      \n Binding rules allow an operator to express a systematic way of automatically linking roles and service identities to newly created tokens without operator intervention.\n

      \n",header:"No binding rules"}}},"nspace-rules":{empty:{body:"

      \n A set of rules that can control which namespace tokens created via this auth method will be created within. Unlike binding rules, the first matching namespace rule wins.\n

      \n",header:"No namespace rules"}}}},policies:{index:{empty:{body:"

      \n {items, select,\n 0 {There don't seem to be any Policies}\n other {No Policies were found matching your search}\n }, or you may not have acl:read permissions to view Policies yet.\n

      \n",header:"{items, select,\n 0 {Welcome to Policies}\n other {No Policies found}\n}\n"}}},roles:{index:{empty:{body:"

      \n {items, select,\n 0 {There don't seem to be any Roles}\n other {No Roles were found matching your search}\n }, or you may not have acl:read permissions to view Roles yet.\n

      \n",header:"{items, select,\n 0 {Welcome to Roles}\n other {No Roles found}\n}\n"}}},tokens:{index:{empty:{body:"

      \n {items, select,\n 0 {There don't seem to be any Tokens}\n other {No Tokens were found matching your search}\n }, or you may not have acl:read permissions to view Tokens yet.\n

      \n",header:"{items, select,\n 0 {Welcome to Tokens}\n other {No Tokens found}\n}\n"}}}},intentions:{index:{empty:{body:"

      \n {items, select,\n 0 {There don't seem to be any Intentions in this Consul cluster}\n other {No Intentions were found matching your search}\n }{canUseACLs, select,\n true {, or you may not have intentions:read permissions access to this view.} \n other {.}\n }\n

      \n",header:"{items, select,\n 0 {Welcome to Intentions}\n other {No Intentions found}\n}\n"}}},kv:{index:{empty:{body:"

      \n {items, select,\n 0 {There don't seem to be any K/V pairs in this Consul cluster yet}\n other {No K/V pairs were found matching your search}\n }{canUseACLs, select,\n true {, or you may not have key:read permissions access to this view.}\n other {.}\n }\n

      \n",header:"{items, select,\n 0 {Welcome to Key/Value}\n other {No Key/Values found}\n}\n"}}},namespaces:{index:{empty:{body:"{items, select,\n 0 {No namespaces were found matching that search{canUseACLs, select,\n true {, or you may not have access to view the namespaces you are searching for.}\n other {.}\n }}\n other {There don't seem to be any namespaces{canUseACLs, select,\n true {, or you may not have access to view namespaces yet.}\n other {.}\n }}\n}\n",header:"{items, select,\n 0 {Welcome to Namespaces}\n other {No namespaces found}\n}\n"}}},nodes:{index:{agentless:{notice:{body:"Kubernetes clusters do not require client nodes to run as of Consul 1.14. Kubernetes nodes will not appear in this view.",footer:"View documentation on Consul Dataplane",header:"Consul 1.14 removes client nodes from Kubernetes Service Mesh deployments"}},empty:{body:"

      \n {items, select,\n 0 {There don't seem to be any registered Nodes in this Consul cluster}\n other {No Nodes were found matching your search}\n }{canUseACLs, select,\n true {, or you may not have service:read and node:read permissions access to this view.}\n other {.}\n }\n

      \n",documentation:"Documentation on Nodes",header:"{items, select,\n 0 {Welcome to Nodes}\n other {No Nodes found}\n}\n",learn:"Take the tutorial"}},show:{healthchecks:{"critical-serf-notice":{body:"

      \n This node has a failing serf node check. The health statuses shown on this page are the statuses as they were known before the node became unreachable.\n

      \n",header:"Failing serf check"},empty:"

      \n This Node has no Health Checks{items, select,\n 0 {}\n other { matching that search}\n }.\n

      \n",title:"Health Checks"},metadata:{title:"Metadata"},rtt:{title:"Round Trip Time"},services:{empty:"

      \n This Node has no Service Instances{items, select,\n 0 {}\n other { matching that search}\n }.\n

      \n",title:"Service Instances"},sessions:{empty:{body:"

      \nConsul provides a session mechanism which can be used to build distributed locks. Sessions act as a binding layer between Nodes, Health Checks, and Key/Value data. There are currently no Lock Sessions present{canUseACLs, select,\n true {, or you may not have key:read or session:read permissions.}\n other {.}\n}\n

      \n",header:"Welcome to Lock Sessions"},title:"Lock Sessions"}}},partitions:{index:{empty:{body:"{items, select,\n 0 {There don't seem to be any partitions{canUseACLs, select,\n true {, or you may not have access to view partitions yet.}\n other {.}\n }}\n other {No partitions were found matching that search{canUseACLs, select,\n true {, or you may not have access to view the namesapces you are searching}\n other {.}\n }}\n}\n",header:"{items, select,\n 0 {Welcome to Partitions}\n other {No partitions found}\n}\n"}}},peers:{index:{detail:{addresses:{tooltip:"The number of services exported to {name}"},exported:{count:"{count} exported services\n","tab-tooltip":"Services exported to {name}",tooltip:"The number of services exported to {name}"},imported:{count:"{count} imported services\n","tab-tooltip":"Services imported from {name}",tooltip:"The number of services imported from {name}"}},empty:{body:"{items, select,\n 0 {Cluster peering is the recommended way to connect services across or within Consul datacenters. Peering is a one-to-one relationship in which each peer is either a open-source Consul datacenter or a Consul enterprise admin partition. There don't seem to be any peers for this {canUsePartitions, select,\n true {admin partition}\n other {datacenter}\n }}\n other {No peers were found matching that search}\n}{canUseACLs, select,\n true {, or you may not have the peering:read permissions to access this view.}\n other {.}\n}\n",header:"{items, select,\n 0 {Welcome to Peers}\n other {No peers found}\n}\n"}},show:{addresses:{empty:{body:"
      There don't seem to be any server addresses for this peer.
      ",header:"No server adddresses."}},exported:{empty:{body:"
      \n{items, select,\n 0 {Services must be exported from one peer to another to enable service communication across two peers. There don't seem to be any services exported to {name} yet, or you may not have services:read permissions to access to this view.}\n other {No services where found matching that search, or you may not have access to view the services you are searching for.}\n}\n
      \n",header:"No visible exported services to {name}"}},imported:{empty:{body:"
      \n{items, select,\n 0 {Services must be exported from one peer to another to enable service communication across two peers. There don't seem to be any services imported from {name} yet, or you may not have services:read permissions to access to this view.}\n other {No services where found matching that search, or you may not have access to view the services you are searching for.}\n}\n
      \n",header:"No visible imported services from {name}"}}}},"routing-config":{source:"Routing Configuration"},services:{index:{empty:{body:"

      \n {items, select,\n 0 {There don't seem to be any registered services in this Consul cluster}\n other {No Services were found matching your search}\n }{canUseACLs, select,\n true {, or you may not have service:read and node:read access to this view. Use Terraform, Kubernetes CRDs, Vault, or the Consul CLI to register Services.}\n other {.}\n }\n

      \n",header:"{items, select,\n 0 {Welcome to Services}\n other {No Services found}\n}\n"}},instance:{exposedpaths:{empty:{body:'

      \n There are no individual HTTP paths exposed through Envoy for external services like Prometheus. Read more about this in our documentation.\n

      \n'},intro:'

      \n The following list shows individual HTTP paths exposed through Envoy for external services like Prometheus. Read more about this in our documentation.\n

      \n'},healthchecks:{"critical-serf-notice":{body:"This instance has a failing serf node check. The health statuses shown on this page are the statuses as they were known before the node became unreachable.",header:"Failing serf check"},empty:"

      \n This instance has no health checks{items, select,\n 0 {}\n other { matching that search}\n }.\n

      \n"},upstreams:{empty:"

      \n This Service Instance has no Upstreams{items, select,\n 0 {}\n other { matching that search}\n }.\n

      \n","tproxy-mode":{body:'The upstreams listed on this page have been defined in a proxy registration. There may be more upstreams, though, as "transparent" mode is enabled on this proxy.',footer:{link:"/connect/transparent-proxy",text:"Read the documentation"},header:"Transparent proxy mode"}}},show:{instances:{empty:"

      \n This Service has no Instances{items, select,\n 0 {}\n other { matching that search}\n }.\n

      \n"},intentions:{index:{empty:{body:"

      \n {items, select,\n 0 {There don't seem to be any Intentions in this Consul cluster}\n other {No Intentions were found matching your search}\n }{canUseACLs, select,\n true {, or you may not have intentions:read permissions access to this view.}\n other {.}\n }\n

      \n",header:"{items, select,\n 0 {Welcome to Intentions}\n other {No Intentions found}\n}\n"}}},services:{empty:"

      \n There are no Services{items, select,\n 0 {}\n other { matching that search}\n }.\n

      \n",intro:'

      \n The following services may receive traffic from external services through this gateway. Learn more about configuring gateways in our step-by-step guide.\n

      \n'},tags:{empty:{body:"

      \n There are no tags for this Service.\n

      \n",header:"Welcome to Tags"}},topology:{notice:{"acls-disabled":{body:"Your current ACL settings allow all services to connect to each other. Either create a deny intention between all services, or enable ACLs and set your default ACL policy to deny to improve your security posture and make this topology view reflect the actual upstreams and downstreams of this service.",footer:{link:"{ CONSUL_DOCS_URL }/security/acl/acl-system#configuring-acls","link-text":"Read the documentation"},header:"Restrict which services can connect"},"default-allow":{body:"Your current ACL settings allow all services to connect to each other. Either create a deny intention between all services, or set your default ACL policy to deny to improve your security posture and make this topology view reflect the actual upstreams and downstreams of this service.",footer:{icon:"plus","link-text":"Create a wildcard deny Intention"},header:"Restrict which services can connect"},"filtered-by-acls":{body:"This service may have dependencies you won’t see because you don’t have access to them.",header:"Limited Access"},"no-dependencies":{body:"The service you are viewing currently has no dependencies. You will only see metrics for the current service until dependencies are added.",footer:{link:"{CONSUL_DOCS_URL}/connect/registration/service-registration#upstream-configuration-reference","link-text":"Read the documentation"},header:"No dependencies"},"no-intentions":{body:"There is an upstream registered for this service, but that upstream cannot receive traffic without creating an allow intention.",footer:{icon:"edit","link-text":"Edit Intentions"},header:"Add Intention to allow traffic"},"not-defined-intention":{body:"An Intention was defined that allows traffic between services, but those services are unable to communicate. Define an explicit upstream in the service definition or enable transparent proxy to fix this.",footer:{link:"{CONSUL_DOCS_URL}/connect/registration/service-registration#upstreams","link-text":"Learn how to add upstreams"},header:"Add upstream to allow traffic"},"wildcard-intention":{body:"There is currently a wildcard Intention that allows all services to connect to each other. Change the action of that Intention to deny to improve your security posture and have this topology view reflect the actual upstreams and downstreams of this service.",footer:{icon:"edit","link-text":"Edit wildcard intentions"},header:"Restrict which services can connect"}},notices:{close:"Collapse Banners",open:"Expand Banners"}},upstreams:{empty:"

      \n This Service has no Upstreams{items, select,\n 0 {}\n other { matching that search}\n }.\n

      \n",intro:'

      \n Upstreams are services that may receive traffic from this gateway. If you are not using Consul DNS, please make sure your Host: header uses the correct domain name for the gateway to correctly proxy to its upstreams. Learn more about configuring gateways in our documentation.\n

      \n'}}},show:{cataloghealth:{title:"Health"},license:{documentation:{links:{"applying-new-license":{link:"/tutorials/nomad/hashicorp-enterprise-license?in=consul/enterprise",text:"Applying a new license"},"license-expiration":{link:"/enterprise/license/faq#q-is-there-a-grace-period-when-licenses-expire",text:"License expiration"},"renewing-license":{link:"/enterprise/license/faq#q-how-can-i-renew-a-license",text:"Renewing a license"}},title:"Learn More"},expiry:{expired:{body:"

      \n Your license expired on {date} at {time}.\n

      \n",header:"Expired"},header:"Expiry",valid:{body:"

      \n Your license expires on {date} at {time}.\n

      \n",header:""}},title:"License"},serverstatus:{title:"Server status",tolerance:{header:"Server fault tolerance",immediate:{body:"the number of healthy active voting servers that can fail at once without causing an outage",header:"Immediate"},link:"/architecture/improving-consul-resilience#strategies-to-increase-fault-tolerance","link-text":"Learn how to improve fault tolerance",optimistic:{body:"the number of healthy active and back-up voting servers that can fail gradually without causing an outage",header:"Optimistic"}},unassigned:"Unassigned Zones"},title:"Cluster Overview"}}}}]]})),define("ember-load-initializers/index",["exports","require"],(function(e,t){"use strict" +e.default=[["en-us",{common:{brand:{aws:"AWS","aws-iam":"AWS IAM",consul:"Consul","consul-api-gateway":"Consul API Gateway",jwt:"JWT",kubernetes:"Kubernetes",lambda:"AWS Lambda",nomad:"Nomad",oidc:"OIDC",terraform:"Terraform",vault:"Vault"},consul:{accessorid:"AccessorID","api-gateway":"API Gateway",critical:"Critical",datacenter:"Datacenter",destinationname:"Destination Name",displayname:"Display Name",empty:"No checks",failuretolerance:"Fault tolerance",gateway:"Gateway","ingress-gateway":"Ingress Gateway",localbindaddress:"Local Bind Address",localbindport:"Local Bind Port",mesh:"Mesh","mesh-gateway":"Mesh Gateway",name:"Name","node-name":"Node Name","node.meta":"Node Meta","not-registered":"Not Registered",partition:"Admin Partitions",passing:"Passing",peername:"Peer",readreplica:"Read replica",redundancyzone:"Redundancy zone",registered:"Registered",service:"Service","service-name":"Service Name","service.meta":"Service Meta",sourcename:"Source Name",status:"Health Status",tags:"Tags","terminating-gateway":"Terminating Gateway",version:"Version",warning:"Warning"},search:{critical:"Failing","in-mesh":"In service mesh",integrations:"Integrations","not-in-mesh":"Not in service mesh",search:"Search",searchproperty:"Search Across",source:"Source"},sort:{age:{asc:"Oldest to Newest",desc:"Newest to Oldest"},alpha:{asc:"A to Z",desc:"Z to A"},duration:{asc:"Longest to shortest",desc:"Shortest to longest"},numeric:{asc:"Ascending",desc:"Descending"},status:{asc:"Unhealthy to Healthy",desc:"Healthy to Unhealthy"},version:{asc:"Oldest to Latest",desc:"Latest to Oldest"}},ui:{creation:"Creation",enterprisefeature:"Enterprise feature","filtered-by":"Filtered by {item}",maxttl:"Max TTL",name:"Name",remove:"Remove {item}"},validations:{"dns-hostname":{error:"{name} must be a valid DNS hostname.",help:"Must be a valid DNS hostname. Must contain 1-64 characters (numbers, letters, and hyphens), and must begin with a letter.\n",test:"^[a-zA-Z0-9]([a-zA-Z0-9-]'{0,62}'[a-zA-Z0-9])?$"},immutable:{help:"Once created, this cannot be changed."},"server-external-addresses":{help:"Enter a comma separated list of this peer's fallback server address(es) to be used in the event of failed automatic updates. This field is required for HCP-managed clusters.\n"}}},components:{app:{"collapsible-notices":{collapse:"Collapse Banners",expand:"Expand Banners"},complementary:"Complementary",main:"Main",skip_to_content:"Skip to Content",toggle_menu:"Toggle Menu"},consul:{acl:{"search-bar":{kind:{name:"Type",options:{client:"Client",management:"Management"}}}},"auth-method":{"binding-list":{"bind-type":{node:"The bind name value is used as an ACLNodeIdentity.NodeName field in the token that is created.",role:"The bind name value is used as an RoleLink.Name field in the token that is created.",service:"The bind name value is used as an ACLServiceIdentity.ServiceName field in the token that is created."}},"search-bar":{kind:{name:"Type"},locality:{name:"Source",options:{global:"Creates global tokens",local:"Creates local tokens"}}}},"health-check":{"search-bar":{check:{name:"Type",options:{alias:"alias",docker:"docker",grpc:"grpc",http:"http",script:"script",serf:"serf",tcp:"tcp",ttl:"ttl"}},kind:{name:"Kind",options:{node:"Node Check",service:"Service Check"}},sort:{kind:{asc:"Service to Node",desc:"Node to Service",name:"Check Type"},name:{name:"Check Name"}}}},intention:{notice:{permissions:{body:"Permissions are L7 attributes. If any of the following permissions match the request, the Intention will apply. Requests that fail to match any of the provided routes will follow the default ACL policy.",footer:"Learn more about permissions"}},"search-bar":{access:{name:"Permission",options:{allow:"Allow","app-aware":"App aware",deny:"Deny"}},sort:{access:{asc:"Allow to Deny",desc:"Deny to Allow",name:"Permission"},"destination-name":{asc:"Destination: A to Z",desc:"Destination: Z to A",name:"Destination"},precedence:{asc:"Ascending",desc:"Descending",name:"Precedence"},"source-name":{asc:"Source: A to Z",desc:"Source: Z to A",name:"Source"}}}},kv:{"search-bar":{kind:{name:"Type",options:{folder:"Folder",key:"Key"}},sort:{kind:{asc:"Folders to Keys",desc:"Keys to Folders"}}}},peer:{form:{"establish-label":"Establish peering","generate-label":"Generate token"},generate:{addresses:"Server address(es)",name:"Name of peer"},"search-bar":{sort:{state:{asc:"Pending to Deleting",desc:"Deleting to Pending",name:"Status"}},state:{name:"Status",options:{active:"Active",deleting:"Deleting",establishing:"Establishing",failing:"Failing",pending:"Pending",terminated:"Terminated"}}}},policy:{"search-bar":{kind:{name:"Type",options:{"global-management":"Global Management",standard:"Standard"}}}},service:{"search-bar":{"in-mesh":"In service mesh",kind:"Service Type","not-in-mesh":"Not in service mesh"}},"service-instance":{"search-bar":{sort:{name:{name:"Service Name"}}}},source:{header:"This is not a registered Consul service. It’s a routing configuration that routes traffic to real services in Consul. For more information, read our documentation.",links:{documentation:"Documentation"},"menu-title":"About Routing Configs"},token:{"search-bar":{kind:{name:"Type",options:{global:"Global Scope","global-management":"Global Management",local:"Local Scope"}}},secretID:"Secret ID",selector:{"logged-in":"Logged in with ACL Token'
      <'b class=consul-side-nav__acl-logged-in'>'{token}'<'/b'>'"}},"topology-metrics":{popover:{deny:{action:{isExact:"Allow",notExact:"Create"},body:{isExact:"Change the action of this intention to allow.",notExact:"Add an intention that allows these two services to connect."},header:"Connection Denied"},l7:{action:"View",body:"Certain HTTP request info must be identified.",header:"Layer 7 permissions"},"not-defined":{action:"Documentation",body:'Add "{upstream}" as an explicit upstream of "{downstream}" or set the "{downstream}" proxy to "transparent" mode to enable traffic.',header:"No traffic"}},"source-type":{"proxy-registration":{text:"Defined in proxy registration",tooltip:"This connection was defined in a proxy registration."},"routing-config":{text:"Routing configuration",tooltip:"This is not a registered Consul service. It’s a routing configuration that routes traffic to real services in Consul."}},status:{error:"Unable to load metrics","ingress-gateway":"Viewing metrics for Ingress Gateways is not currently supported in the UI.",loading:"Loading metrics","remote-dc":"Unable to fetch metrics for a remote datacenter"}},"transparent-proxy":"Transparent Proxy",upstream:{"search-bar":{instance:{name:"Type"}}}},"consul-copy-button":{error:"There was a problem.",success:"Copied {name}",title:"Copy {name} to the clipboard"},"hashicorp-consul":{notifications:{"logged-in":"You are now logged in.","logged-in-error":"There was an error, please check your SecretID/Token","logged-out":"You are now logged out.","logged-out-error":"There was an error logging out."},"side-nav":{acls:{"auth-methods":"Auth Methods",policies:"Policies",roles:"Roles",title:"Access Controls",tokens:"Tokens",tooltip:"ACLs are not currently enabled in this cluster"},datacenters:{description:"WAN federated datacenters",placeholder:"Search datacenters",title:"Datacenter"},footer:"Consul v{version}",hcp:"Back to HCP",intentions:"Intentions",kv:"Key/Value",nodes:"Nodes",nspaces:{footer:"View all namespaces",placeholder:"Search namespaces",title:"Namespace"},organization:{peers:"Peers",title:"Organization"},overview:"Overview",partitions:{footer:"View all partitions",placeholder:"Search partitions",title:"Admin partition"},services:"Services","support-menu":{docs:"Documentation","eng-docs":"Eng docs",feedback:"Give feedback",tutorials:"Tutorials"},"user-menu":{"Log out":"Log out","log-in":"Log in",settings:"Settings"}}}},models:{"auth-method":{BindNamespace:"Bind Namespace",Config:{AllowedRedirectURIs:"Allowed redirect URIs",BoundAudiences:"Bound audiences",BoundIssuer:"Bound issuer",CACert:"CA Cert",ClaimMappings:"Claim Mappings",ClockSkewLeeway:"Clock skew leeway",ExpirationLeeway:"Expiration leeway",Host:"Host",JWKSCACert:"JWKS CA Cert",JWKSURL:"JWKS URL",JWTSupportedAlgs:"JWT supported algorithms",JWTValidationPubKeys:"JWT validation pub keys",ListClaimMappings:"List Claim Mappings",NotBeforeLeeway:"Not before leeway",OIDCClientID:"Client ID",OIDCClientSecret:"Client secret",OIDCDiscoveryCACert:"OIDC discovery CA cert",OIDCDiscoveryURL:"Discovery URL",OIDCScopes:"OIDC scopes",ServiceAccountJWT:"Service account JSON Web Token",VerboseOIDCLogging:"Verbose OIDC logging"},Description:"Description",DisplayName:"Display name",MaxTokenTTL:"Maximum token TTL",Selector:"Selector",TokenLocality:"Token locality",Type:"Type"},"binding-rule":{BindType:"Type",Description:"Description",Selector:"Selector"}},routes:{dc:{acls:{"auth-methods":{index:{empty:{body:"

      \n {items, select,\n 0 {There don't seem to be any Auth Methods}\n other {No Auth Methods were found matching your search}\n }, or you may not have acl:read permissions to view Auth Methods yet.\n

      \n",header:"{items, select,\n 0 {Welcome to Auth Methods}\n other {No Auth Methods found}\n}\n"}},show:{"binding-rules":{index:{empty:{body:"

      \n Binding rules allow an operator to express a systematic way of automatically linking roles and service identities to newly created tokens without operator intervention.\n

      \n",header:"No binding rules"}}},"nspace-rules":{empty:{body:"

      \n A set of rules that can control which namespace tokens created via this auth method will be created within. Unlike binding rules, the first matching namespace rule wins.\n

      \n",header:"No namespace rules"}}}},policies:{index:{empty:{body:"

      \n {items, select,\n 0 {There don't seem to be any Policies}\n other {No Policies were found matching your search}\n }, or you may not have acl:read permissions to view Policies yet.\n

      \n",header:"{items, select,\n 0 {Welcome to Policies}\n other {No Policies found}\n}\n"}}},roles:{index:{empty:{body:"

      \n {items, select,\n 0 {There don't seem to be any Roles}\n other {No Roles were found matching your search}\n }, or you may not have acl:read permissions to view Roles yet.\n

      \n",header:"{items, select,\n 0 {Welcome to Roles}\n other {No Roles found}\n}\n"}}},tokens:{index:{empty:{body:"

      \n {items, select,\n 0 {There don't seem to be any Tokens}\n other {No Tokens were found matching your search}\n }, or you may not have acl:read permissions to view Tokens yet.\n

      \n",header:"{items, select,\n 0 {Welcome to Tokens}\n other {No Tokens found}\n}\n"}}}},intentions:{index:{empty:{body:"

      \n {items, select,\n 0 {There don't seem to be any Intentions in this Consul cluster}\n other {No Intentions were found matching your search}\n }{canUseACLs, select,\n true {, or you may not have intentions:read permissions access to this view.} \n other {.}\n }\n

      \n",header:"{items, select,\n 0 {Welcome to Intentions}\n other {No Intentions found}\n}\n"}}},kv:{index:{empty:{body:"

      \n {items, select,\n 0 {There don't seem to be any K/V pairs in this Consul cluster yet}\n other {No K/V pairs were found matching your search}\n }{canUseACLs, select,\n true {, or you may not have key:read permissions access to this view.}\n other {.}\n }\n

      \n",header:"{items, select,\n 0 {Welcome to Key/Value}\n other {No Key/Values found}\n}\n"}}},namespaces:{index:{empty:{body:"{items, select,\n 0 {No namespaces were found matching that search{canUseACLs, select,\n true {, or you may not have access to view the namespaces you are searching for.}\n other {.}\n }}\n other {There don't seem to be any namespaces{canUseACLs, select,\n true {, or you may not have access to view namespaces yet.}\n other {.}\n }}\n}\n",header:"{items, select,\n 0 {Welcome to Namespaces}\n other {No namespaces found}\n}\n"}}},nodes:{index:{agentless:{notice:{body:"Kubernetes clusters do not require client nodes to run as of Consul 1.14. Kubernetes nodes will not appear in this view.",footer:"View documentation on Consul Dataplane",header:"Consul 1.14 removes client nodes from Kubernetes Service Mesh deployments"}},empty:{body:"

      \n {items, select,\n 0 {There don't seem to be any registered Nodes in this Consul cluster}\n other {No Nodes were found matching your search}\n }{canUseACLs, select,\n true {, or you may not have service:read and node:read permissions access to this view.}\n other {.}\n }\n

      \n",documentation:"Documentation on Nodes",header:"{items, select,\n 0 {Welcome to Nodes}\n other {No Nodes found}\n}\n",learn:"Take the tutorial"}},show:{healthchecks:{"critical-serf-notice":{body:"

      \n This node has a failing serf node check. The health statuses shown on this page are the statuses as they were known before the node became unreachable.\n

      \n",header:"Failing serf check"},empty:"

      \n This Node has no Health Checks{items, select,\n 0 {}\n other { matching that search}\n }.\n

      \n",title:"Health Checks"},metadata:{title:"Metadata"},rtt:{title:"Round Trip Time"},services:{empty:"

      \n This Node has no Service Instances{items, select,\n 0 {}\n other { matching that search}\n }.\n

      \n",title:"Service Instances"},sessions:{empty:{body:"

      \nConsul provides a session mechanism which can be used to build distributed locks. Sessions act as a binding layer between Nodes, Health Checks, and Key/Value data. There are currently no Lock Sessions present{canUseACLs, select,\n true {, or you may not have key:read or session:read permissions.}\n other {.}\n}\n

      \n",header:"Welcome to Lock Sessions"},title:"Lock Sessions"}}},partitions:{index:{empty:{body:"{items, select,\n 0 {There don't seem to be any partitions{canUseACLs, select,\n true {, or you may not have access to view partitions yet.}\n other {.}\n }}\n other {No partitions were found matching that search{canUseACLs, select,\n true {, or you may not have access to view the namesapces you are searching}\n other {.}\n }}\n}\n",header:"{items, select,\n 0 {Welcome to Partitions}\n other {No partitions found}\n}\n"}}},peers:{index:{detail:{addresses:{tooltip:"The number of services exported to {name}"},exported:{count:"{count} exported services\n","tab-tooltip":"Services exported to {name}",tooltip:"The number of services exported to {name}"},imported:{count:"{count} imported services\n","tab-tooltip":"Services imported from {name}",tooltip:"The number of services imported from {name}"}},empty:{body:"{items, select,\n 0 {Cluster peering is the recommended way to connect services across or within Consul datacenters. Peering is a one-to-one relationship in which each peer is either a open-source Consul datacenter or a Consul enterprise admin partition. There don't seem to be any peers for this {canUsePartitions, select,\n true {admin partition}\n other {datacenter}\n }}\n other {No peers were found matching that search}\n}{canUseACLs, select,\n true {, or you may not have the peering:read permissions to access this view.}\n other {.}\n}\n",header:"{items, select,\n 0 {Welcome to Peers}\n other {No peers found}\n}\n"}},show:{addresses:{empty:{body:"
      There don't seem to be any server addresses for this peer.
      ",header:"No server adddresses."}},exported:{empty:{body:"
      \n{items, select,\n 0 {Services must be exported from one peer to another to enable service communication across two peers. There don't seem to be any services exported to {name} yet, or you may not have services:read permissions to access to this view.}\n other {No services were found matching that search, or you may not have access to view the services you are searching for.}\n}\n
      \n",header:"No visible exported services to {name}"}},imported:{empty:{body:"
      \n{items, select,\n 0 {Services must be exported from one peer to another to enable service communication across two peers. There don't seem to be any services imported from {name} yet, or you may not have services:read permissions to access to this view.}\n other {No services were found matching that search, or you may not have access to view the services you are searching for.}\n}\n
      \n",header:"No visible imported services from {name}"}}}},"routing-config":{source:"Routing Configuration"},services:{index:{empty:{body:"

      \n {items, select,\n 0 {There don't seem to be any registered services in this Consul cluster}\n other {No Services were found matching your search}\n }{canUseACLs, select,\n true {, or you may not have service:read and node:read access to this view. Use Terraform, Kubernetes CRDs, Vault, or the Consul CLI to register Services.}\n other {.}\n }\n

      \n",header:"{items, select,\n 0 {Welcome to Services}\n other {No Services found}\n}\n"}},instance:{exposedpaths:{empty:{body:'

      \n There are no individual HTTP paths exposed through Envoy for external services like Prometheus. Read more about this in our documentation.\n

      \n'},intro:'

      \n The following list shows individual HTTP paths exposed through Envoy for external services like Prometheus. Read more about this in our documentation.\n

      \n'},healthchecks:{"critical-serf-notice":{body:"This instance has a failing serf node check. The health statuses shown on this page are the statuses as they were known before the node became unreachable.",header:"Failing serf check"},empty:"

      \n This instance has no health checks{items, select,\n 0 {}\n other { matching that search}\n }.\n

      \n"},upstreams:{empty:"

      \n This Service Instance has no Upstreams{items, select,\n 0 {}\n other { matching that search}\n }.\n

      \n","tproxy-mode":{body:'The upstreams listed on this page have been defined in a proxy registration. There may be more upstreams, though, as "transparent" mode is enabled on this proxy.',footer:{link:"/connect/transparent-proxy",text:"Read the documentation"},header:"Transparent proxy mode"}}},show:{instances:{empty:"

      \n This Service has no Instances{items, select,\n 0 {}\n other { matching that search}\n }.\n

      \n"},intentions:{index:{empty:{body:"

      \n {items, select,\n 0 {There don't seem to be any Intentions in this Consul cluster}\n other {No Intentions were found matching your search}\n }{canUseACLs, select,\n true {, or you may not have intentions:read permissions access to this view.}\n other {.}\n }\n

      \n",header:"{items, select,\n 0 {Welcome to Intentions}\n other {No Intentions found}\n}\n"}}},services:{empty:"

      \n There are no Services{items, select,\n 0 {}\n other { matching that search}\n }.\n

      \n",intro:'

      \n The following services may receive traffic from external services through this gateway. Learn more about configuring gateways in our step-by-step guide.\n

      \n'},tags:{empty:{body:"

      \n There are no tags for this Service.\n

      \n",header:"Welcome to Tags"}},topology:{notice:{"acls-disabled":{body:"Your current ACL settings allow all services to connect to each other. Either create a deny intention between all services, or enable ACLs and set your default ACL policy to deny to improve your security posture and make this topology view reflect the actual upstreams and downstreams of this service.",footer:{link:"{ CONSUL_DOCS_URL }/security/acl/acl-system#configuring-acls","link-text":"Read the documentation"},header:"Restrict which services can connect"},"default-allow":{body:"Your current ACL settings allow all services to connect to each other. Either create a deny intention between all services, or set your default ACL policy to deny to improve your security posture and make this topology view reflect the actual upstreams and downstreams of this service.",footer:{icon:"plus","link-text":"Create a wildcard deny Intention"},header:"Restrict which services can connect"},"filtered-by-acls":{body:"This service may have dependencies you won’t see because you don’t have access to them.",header:"Limited Access"},"no-dependencies":{body:"The service you are viewing currently has no dependencies. You will only see metrics for the current service until dependencies are added.",footer:{link:"{CONSUL_DOCS_URL}/connect/registration/service-registration#upstream-configuration-reference","link-text":"Read the documentation"},header:"No dependencies"},"no-intentions":{body:"There is an upstream registered for this service, but that upstream cannot receive traffic without creating an allow intention.",footer:{icon:"edit","link-text":"Edit Intentions"},header:"Add Intention to allow traffic"},"not-defined-intention":{body:"An Intention was defined that allows traffic between services, but those services are unable to communicate. Define an explicit upstream in the service definition or enable transparent proxy to fix this.",footer:{link:"{CONSUL_DOCS_URL}/connect/registration/service-registration#upstreams","link-text":"Learn how to add upstreams"},header:"Add upstream to allow traffic"},"wildcard-intention":{body:"There is currently a wildcard Intention that allows all services to connect to each other. Change the action of that Intention to deny to improve your security posture and have this topology view reflect the actual upstreams and downstreams of this service.",footer:{icon:"edit","link-text":"Edit wildcard intentions"},header:"Restrict which services can connect"}},notices:{close:"Collapse Banners",open:"Expand Banners"}},upstreams:{empty:"

      \n This Service has no Upstreams{items, select,\n 0 {}\n other { matching that search}\n }.\n

      \n",intro:'

      \n Upstreams are services that may receive traffic from this gateway. If you are not using Consul DNS, please make sure your Host: header uses the correct domain name for the gateway to correctly proxy to its upstreams. Learn more about configuring gateways in our documentation.\n

      \n'}}},show:{cataloghealth:{title:"Health"},license:{documentation:{links:{"applying-new-license":{link:"/tutorials/nomad/hashicorp-enterprise-license?in=consul/enterprise",text:"Applying a new license"},"license-expiration":{link:"/enterprise/license/faq#q-is-there-a-grace-period-when-licenses-expire",text:"License expiration"},"renewing-license":{link:"/enterprise/license/faq#q-how-can-i-renew-a-license",text:"Renewing a license"}},title:"Learn More"},expiry:{expired:{body:"

      \n Your license expired on {date} at {time}.\n

      \n",header:"Expired"},header:"Expiry",valid:{body:"

      \n Your license expires on {date} at {time}.\n

      \n",header:""}},title:"License"},serverstatus:{title:"Server status",tolerance:{header:"Server fault tolerance",immediate:{body:"the number of healthy active voting servers that can fail at once without causing an outage",header:"Immediate"},link:"/architecture/improving-consul-resilience#strategies-to-increase-fault-tolerance","link-text":"Learn how to improve fault tolerance",optimistic:{body:"the number of healthy active and back-up voting servers that can fail gradually without causing an outage",header:"Optimistic"}},unassigned:"Unassigned Zones"},title:"Cluster Overview"}}}}]]})),define("ember-load-initializers/index",["exports","require"],(function(e,t){"use strict" function r(e){var r=(0,t.default)(e,null,null,!0) if(!r)throw new Error(e+" must export an initializer.") var n=r.default @@ -9810,74 +10561,74 @@ function r(e){let[t]=e return Math.cosh(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.cosh=r,e.default=void 0 var n=(0,t.helper)(r) e.default=n})),define("ember-math-helpers/helpers/div",["exports","@ember/component/helper"],(function(e,t){"use strict" -function r(e){return e.reduce(((e,t)=>Number(e)/Number(t)))}Object.defineProperty(e,"__esModule",{value:!0}),e.div=r,e.default=void 0 +function r(e){return e.reduce(((e,t)=>Number(e)/Number(t)))}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.div=r var n=(0,t.helper)(r) e.default=n})),define("ember-math-helpers/helpers/exp",["exports","@ember/component/helper"],(function(e,t){"use strict" function r(e){let[t]=e -return Math.exp(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.exp=r,e.default=void 0 +return Math.exp(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.exp=r var n=(0,t.helper)(r) e.default=n})),define("ember-math-helpers/helpers/expm1",["exports","@ember/component/helper"],(function(e,t){"use strict" function r(e){let[t]=e -return Math.expm1(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.expm1=r,e.default=void 0 +return Math.expm1(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.expm1=r var n=(0,t.helper)(r) e.default=n})),define("ember-math-helpers/helpers/floor",["exports","@ember/component/helper"],(function(e,t){"use strict" function r(e){let[t]=e -return Math.floor(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.floor=r,e.default=void 0 +return Math.floor(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.floor=r var n=(0,t.helper)(r) e.default=n})),define("ember-math-helpers/helpers/fround",["exports","@ember/component/helper"],(function(e,t){"use strict" function r(e){let[t]=e -return Math.fround(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.fround=r,e.default=void 0 +return Math.fround(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.fround=r var n=(0,t.helper)(r) e.default=n})),define("ember-math-helpers/helpers/gcd",["exports","@ember/component/helper"],(function(e,t){"use strict" function r(e){let[t=0,n=0]=e const i=Math.abs(t),o=Math.abs(n) -return 0===i?o:0===o?i:r([o,i%o])}Object.defineProperty(e,"__esModule",{value:!0}),e.gcd=r,e.default=void 0 +return 0===i?o:0===o?i:r([o,i%o])}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.gcd=r var n=(0,t.helper)(r) e.default=n})),define("ember-math-helpers/helpers/hypot",["exports","@ember/component/helper"],(function(e,t){"use strict" -function r(e){return Math.hypot(...e)}Object.defineProperty(e,"__esModule",{value:!0}),e.hypot=r,e.default=void 0 +function r(e){return Math.hypot(...e)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.hypot=r var n=(0,t.helper)(r) e.default=n})),define("ember-math-helpers/helpers/imul",["exports","@ember/component/helper"],(function(e,t){"use strict" function r(e){let[t,r]=e -return Math.imul(t,r)}Object.defineProperty(e,"__esModule",{value:!0}),e.imul=r,e.default=void 0 +return Math.imul(t,r)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.imul=r var n=(0,t.helper)(r) -e.default=n})) -define("ember-math-helpers/helpers/lcm",["exports","@ember/component/helper","ember-math-helpers/helpers/gcd"],(function(e,t,r){"use strict" +e.default=n})),define("ember-math-helpers/helpers/lcm",["exports","@ember/component/helper","ember-math-helpers/helpers/gcd"],(function(e,t,r){"use strict" function n(e){let[t=0,n=0]=e -return 0===t||0===n?0:Math.abs(t*n)/(0,r.gcd)([t,n])}Object.defineProperty(e,"__esModule",{value:!0}),e.lcm=n,e.default=void 0 +return 0===t||0===n?0:Math.abs(t*n)/(0,r.gcd)([t,n])}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.lcm=n var i=(0,t.helper)(n) e.default=i})),define("ember-math-helpers/helpers/log-e",["exports","@ember/component/helper"],(function(e,t){"use strict" function r(e){let[t]=e -return Math.log(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.logE=r,e.default=void 0 +return Math.log(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.logE=r var n=(0,t.helper)(r) e.default=n})),define("ember-math-helpers/helpers/log10",["exports","@ember/component/helper"],(function(e,t){"use strict" function r(e){let[t]=e -return Math.log10(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.log10=r,e.default=void 0 +return Math.log10(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.log10=r var n=(0,t.helper)(r) e.default=n})),define("ember-math-helpers/helpers/log1p",["exports","@ember/component/helper"],(function(e,t){"use strict" function r(e){let[t]=e -return Math.log1p(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.log1p=r,e.default=void 0 +return Math.log1p(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.log1p=r var n=(0,t.helper)(r) e.default=n})),define("ember-math-helpers/helpers/log2",["exports","@ember/component/helper"],(function(e,t){"use strict" function r(e){let[t]=e -return Math.log2(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.log2=r,e.default=void 0 +return Math.log2(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.log2=r var n=(0,t.helper)(r) -e.default=n})),define("ember-math-helpers/helpers/max",["exports","@ember/component/helper"],(function(e,t){"use strict" -function r(e){return Math.max(...e)}Object.defineProperty(e,"__esModule",{value:!0}),e.max=r,e.default=void 0 +e.default=n})) +define("ember-math-helpers/helpers/max",["exports","@ember/component/helper"],(function(e,t){"use strict" +function r(e){return Math.max(...e)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.max=r var n=(0,t.helper)(r) e.default=n})),define("ember-math-helpers/helpers/min",["exports","@ember/component/helper"],(function(e,t){"use strict" -function r(e){return Math.min(...e)}Object.defineProperty(e,"__esModule",{value:!0}),e.min=r,e.default=void 0 +function r(e){return Math.min(...e)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.min=r var n=(0,t.helper)(r) e.default=n})),define("ember-math-helpers/helpers/mod",["exports","@ember/component/helper"],(function(e,t){"use strict" -function r(e){return e.reduce(((e,t)=>Number(e)%Number(t)))}Object.defineProperty(e,"__esModule",{value:!0}),e.mod=r,e.default=void 0 +function r(e){return e.reduce(((e,t)=>Number(e)%Number(t)))}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.mod=r var n=(0,t.helper)(r) e.default=n})),define("ember-math-helpers/helpers/mult",["exports","@ember/component/helper"],(function(e,t){"use strict" -function r(e){return e.reduce(((e,t)=>Number(e)*Number(t)))}Object.defineProperty(e,"__esModule",{value:!0}),e.mult=r,e.default=void 0 +function r(e){return e.reduce(((e,t)=>Number(e)*Number(t)))}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.mult=r var n=(0,t.helper)(r) e.default=n})),define("ember-math-helpers/helpers/pow",["exports","@ember/component/helper"],(function(e,t){"use strict" -function r(e){return e.reduce(((e,t)=>Math.pow(e,t)))}Object.defineProperty(e,"__esModule",{value:!0}),e.pow=r,e.default=void 0 +function r(e){return e.reduce(((e,t)=>Math.pow(e,t)))}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.pow=r var n=(0,t.helper)(r) e.default=n})),define("ember-math-helpers/helpers/random",["exports","@ember/component/helper","@ember/array"],(function(e,t,r){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.random=a,e.default=void 0 +Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.random=a const{min:n,max:i}=Math,o=20,s={decimals:0} function a(e){let{decimals:t}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:s if("object"==typeof e&&!(0,r.isArray)(e))return t=void 0!==e.decimals?e.decimals:s.decimals,+Math.random().toFixed(i(0,n(o,t))) @@ -9886,46 +10637,53 @@ return+(Math.random()*r).toFixed(i(0,n(o,t)))}if(e&&2===e.length){let[r,s]=e return sNumber(e)-Number(t)))}Object.defineProperty(e,"__esModule",{value:!0}),e.sub=r,e.default=void 0 +function r(e){return e.reduce(((e,t)=>Number(e)-Number(t)))}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.sub=r var n=(0,t.helper)(r) -e.default=n})),define("ember-math-helpers/helpers/tan",["exports","@ember/component/helper"],(function(e,t){"use strict" +e.default=n})),define("ember-math-helpers/helpers/sum",["exports","@ember/component/helper","ember-math-helpers/helpers/add"],(function(e,t,r){"use strict" +function n(e){return(0,r.add)(e)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.sum=n +var i=(0,t.helper)(n) +e.default=i})),define("ember-math-helpers/helpers/tan",["exports","@ember/component/helper"],(function(e,t){"use strict" function r(e){let[t]=e -return Math.tan(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.tan=r,e.default=void 0 +return Math.tan(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.tan=r var n=(0,t.helper)(r) e.default=n})),define("ember-math-helpers/helpers/tanh",["exports","@ember/component/helper"],(function(e,t){"use strict" function r(e){let[t]=e -return Math.tanh(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.tanh=r,e.default=void 0 +return Math.tanh(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.tanh=r var n=(0,t.helper)(r) e.default=n})),define("ember-math-helpers/helpers/trunc",["exports","@ember/component/helper"],(function(e,t){"use strict" function r(e){let[t]=e -return Math.trunc(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.trunc=r,e.default=void 0 +return Math.trunc(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.trunc=r var n=(0,t.helper)(r) -e.default=n})),define("ember-maybe-in-element/components/maybe-in-element",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,r,n){"use strict" +e.default=n})),define("ember-maybe-in-element/components/maybe-in-element",["exports","@ember/component","@ember/component/template-only","@ember/template-factory"],(function(e,t,r,n){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const i=(0,r.createTemplateFactory)({id:"unpEBlNX",block:'[[[41,[30,1],[[[18,3,null]],[]],[[[40,[[[18,3,null]],[]],"%cursor:0%",[30,2],null]],[]]]],["@renderInPlace","@destinationElement","&default"],false,["if","yield","in-element"]]',moduleName:"ember-maybe-in-element/components/maybe-in-element.hbs",isStrictMode:!1}) -var o=(0,t.setComponentTemplate)(i,(0,n.default)()) +const i=(0,n.createTemplateFactory)({id:"HeyU5aHi",block:'[[[41,[30,1],[[[18,3,null]],[]],[[[40,[[[18,3,null]],[]],"%cursor:0%",[28,[37,3],[[30,2]],null],null]],[]]]],["@renderInPlace","@destinationElement","&default"],false,["if","yield","in-element","-in-el-null"]]',moduleName:"ember-maybe-in-element/components/maybe-in-element.hbs",isStrictMode:!1}) +var o=(0,t.setComponentTemplate)(i,(0,r.default)()) e.default=o})),define("ember-modifier/-private/class/modifier-manager",["exports","@ember/modifier","@ember/destroyable","ember-modifier/-private/class/modifier","ember-modifier/-private/compat"],(function(e,t,r,n,i){"use strict" -function o(e){e.willRemove(),e.willDestroy()}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=class{constructor(e){var r,n,i -r=this,n="capabilities",i=(0,t.capabilities)("3.22"),n in r?Object.defineProperty(r,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[n]=i,this.owner=e}createModifier(e,t){const s=new((0,i.isFactory)(e)?e.class:e)(this.owner,t) -return(0,r.registerDestructor)(s,o),{instance:s,implementsModify:(0,n._implementsModify)(s),element:null}}installModifier(e,t,r){const o=function(e,t){const r=e +function o(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var r=e[Symbol.toPrimitive] +if(void 0!==r){var n=r.call(e,t||"default") +if("object"!=typeof n)return n +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function s(e){e.willRemove(),e.willDestroy()}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +e.default=class{constructor(e){o(this,"capabilities",(0,t.capabilities)("3.22")),this.owner=e}createModifier(e,t){const o=new((0,i.isFactory)(e)?e.class:e)(this.owner,t) +return(0,r.registerDestructor)(o,s),{instance:o,implementsModify:(0,n._implementsModify)(o),element:null}}installModifier(e,t,r){const o=function(e,t){const r=e return r.element=t,r}(e,t),{instance:s}=o;(function(e,t){e[n.Element]=t})(s,t),o.implementsModify?s.modify(t,r.positional,r.named):((0,i.consumeArgs)(r),s.didReceiveArguments(),s.didInstall())}updateModifier(e,t){const{instance:r}=e;(function(e,t){e[n.Args]=t})(e.instance,t),e.implementsModify?r.modify(e.element,t.positional,t.named):((0,i.consumeArgs)(t),r.didUpdateArguments(),r.didReceiveArguments())}destroyModifier(e){(0,r.destroy)(e.instance)}}})),define("ember-modifier/-private/class/modifier",["exports","@ember/application","@ember/modifier","ember-modifier/-private/class/modifier-manager","@ember/destroyable","@ember/debug"],(function(e,t,r,n,i,o){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.Args=e.Element=e._implementsLegacyHooks=e._implementsModify=void 0 +Object.defineProperty(e,"__esModule",{value:!0}),e.default=e._implementsModify=e._implementsLegacyHooks=e.Element=e.Args=void 0 const s=e=>e.modify!==c.prototype.modify e._implementsModify=s const a=e=>e.didInstall!==c.prototype.didInstall||e.didUpdateArguments!==c.prototype.didUpdateArguments||e.didReceiveArguments!==c.prototype.didReceiveArguments @@ -9936,13 +10694,18 @@ const u=Symbol("Args") e.Args=u class c{constructor(e,r){(0,t.setOwner)(this,e),this[u]=r}modify(e,t,r){}didReceiveArguments(){}didUpdateArguments(){}didInstall(){}willRemove(){}willDestroy(){}get isDestroying(){return(0,i.isDestroying)(this)}get isDestroyed(){return(0,i.isDestroyed)(this)}}e.default=c,Object.defineProperty(c.prototype,"args",{enumerable:!0,get(){return this[u]}}),Object.defineProperty(c.prototype,"element",{enumerable:!0,get(){var e return null!==(e=this[l])&&void 0!==e?e:null}}),(0,r.setModifierManager)((e=>new n.default(e)),c)})),define("ember-modifier/-private/compat",["exports"],(function(e){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.isFactory=function(e){return!1},e.consumeArgs=void 0 +Object.defineProperty(e,"__esModule",{value:!0}),e.consumeArgs=void 0,e.isFactory=function(e){return!1} let t=()=>{} e.consumeArgs=t,e.consumeArgs=t=function(e){let{positional:t,named:r}=e const n=t for(let i=0;i1&&void 0!==arguments[1]?arguments[1]:{eager:!0} return(0,r.setModifierManager)((()=>t.eager?o:s),e)} -const o=new i.default({eager:!0}),s=new i.default({eager:!1})})),define("ember-modifier/-private/functional/modifier-manager",["exports","@ember/modifier"],(function(e,t){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=new WeakMap,n=new WeakMap -function i(e){const t=n.get(e) -t&&"function"==typeof t&&t()}function o(e,t,r){const{positional:i,named:o}=r,s=e(t,i,o) -n.set(e,s)}var s=new class{constructor(){var e,r,n -e=this,r="capabilities",n=(0,t.capabilities)("3.13"),r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n}createModifier(e){return function(){return e.class(...arguments)}}installModifier(e,t,n){r.set(e,t),o(e,t,n)}updateModifier(e,t){const n=r.get(e) -i(e),o(e,n,t)}destroyModifier(e){i(e)}} -e.default=s})),define("ember-modifier/-private/functional/modifier",["exports","@ember/modifier","ember-modifier/-private/functional/modifier-manager"],(function(e,t,r){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){return(0,t.setModifierManager)((()=>r.default),e)}})),define("ember-modifier/-private/interfaces",[],(function(){})),define("ember-modifier/-private/opaque",[],(function(){})),define("ember-modifier/-private/signature",[],(function(){})) -define("ember-modifier/index",["exports","ember-modifier/-private/class/modifier","ember-modifier/-private/function-based/modifier"],(function(e,t,r){"use strict" +const o=new i.default({eager:!0}),s=new i.default({eager:!1})})),define("ember-modifier/-private/functional/modifier-manager",["exports","@ember/modifier","ember-modifier/-private/compat"],(function(e,t,r){"use strict" +function n(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var r=e[Symbol.toPrimitive] +if(void 0!==r){var n=r.call(e,t||"default") +if("object"!=typeof n)return n +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const i=new WeakMap,o=new WeakMap +function s(e){const t=o.get(e) +t&&"function"==typeof t&&t()}function a(e,t,r){const{positional:n,named:i}=r,s=e(t,n,i) +o.set(e,s)}var l=new class{constructor(){n(this,"capabilities",(0,t.capabilities)("3.22"))}createModifier(e){const t=(0,r.isFactory)(e)?e.class:e +return function(){return t(...arguments)}}installModifier(e,t,n){i.set(e,t),(0,r.consumeArgs)(n),a(e,t,n)}updateModifier(e,t){const n=i.get(e) +s(e),(0,r.consumeArgs)(t),a(e,n,t)}destroyModifier(e){s(e)}} +e.default=l})),define("ember-modifier/-private/functional/modifier",["exports","@ember/modifier","ember-modifier/-private/functional/modifier-manager"],(function(e,t,r){"use strict" +Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){return(0,t.setModifierManager)((()=>r.default),e)}})),define("ember-modifier/-private/interfaces",["exports"],(function(e){"use strict" +Object.defineProperty(e,"__esModule",{value:!0})})),define("ember-modifier/-private/opaque",["exports"],(function(e){"use strict" +Object.defineProperty(e,"__esModule",{value:!0})})),define("ember-modifier/-private/signature",["exports"],(function(e){"use strict" +Object.defineProperty(e,"__esModule",{value:!0})})),define("ember-modifier/index",["exports","ember-modifier/-private/class/modifier","ember-modifier/-private/function-based/modifier"],(function(e,t,r){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"modifier",{enumerable:!0,get:function(){return r.default}})})),define("ember-on-helper/helpers/on-document",["exports","ember-on-helper/helpers/on"],(function(e,t){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 var r=t.default.extend({compute(e,t){return this._super([document,...e],t)}}) @@ -9973,19 +10743,26 @@ Object.defineProperty(e,"__esModule",{value:!0}),e.__counts=function(){return{ad let i=0,o=0 function s(e,t,n,i){e&&t&&n&&(o++,(0,r.removeEventListener)(e,t,n,i))}var a=t.default.extend({eventTarget:null,eventName:void 0,callback:void 0,eventOptions:void 0,compute(e,t){let[n,o,a]=e s(this.eventTarget,this.eventName,this.callback,this.eventOptions),this.eventTarget=n,this.callback=function(e,t,n,o){return i++,(0,r.addEventListener)(e,t,n,o),n}(this.eventTarget,o,a,t),this.eventName=o,this.eventOptions=t},willDestroy(){this._super(),s(this.eventTarget,this.eventName,this.callback,this.eventOptions)}}) -e.default=a})),define("ember-on-helper/utils/event-listener",["exports","@ember/debug"],(function(e,t){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.addEventListenerOnce=n,e.addEventListener=function(e,t,i,o){const s=i -r?e.addEventListener(t,s,o):o&&o.once?n(e,t,s,Boolean(o.capture)):e.addEventListener(t,s,Boolean(o&&o.capture))},e.removeEventListener=function(e,t,n,i){r?e.removeEventListener(t,n,i):e.removeEventListener(t,n,Boolean(i&&i.capture))},e.SUPPORTS_EVENT_OPTIONS=void 0 +e.default=a})) +define("ember-on-helper/utils/event-listener",["exports","@ember/debug"],(function(e,t){"use strict" +Object.defineProperty(e,"__esModule",{value:!0}),e.SUPPORTS_EVENT_OPTIONS=void 0,e.addEventListener=function(e,t,i,o){const s=i +r?e.addEventListener(t,s,o):o&&o.once?n(e,t,s,Boolean(o.capture)):e.addEventListener(t,s,Boolean(o&&o.capture))},e.addEventListenerOnce=n,e.removeEventListener=function(e,t,n,i){r?e.removeEventListener(t,n,i):e.removeEventListener(t,n,Boolean(i&&i.capture))} const r=(()=>{try{const e=document.createElement("div") let t,r=0 return e.addEventListener("click",(()=>r++),{once:!0}),"function"==typeof Event?t=new Event("click"):(t=document.createEvent("Event"),t.initEvent("click",!0,!0)),e.dispatchEvent(t),e.dispatchEvent(t),1===r}catch(e){return!1}})() function n(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]&&arguments[3] -function i(){e.removeEventListener(t,i,n),r()}e.addEventListener(t,i,n)}e.SUPPORTS_EVENT_OPTIONS=r})),define("ember-on-resize-modifier/modifiers/on-resize",["exports","ember-modifier","@ember/service","@ember/object","@ember/debug"],(function(e,t,r,n,i){"use strict" +e.addEventListener(t,(function i(){e.removeEventListener(t,i,n),r()}),n)}e.SUPPORTS_EVENT_OPTIONS=r})),define("ember-on-resize-modifier/modifiers/on-resize",["exports","ember-modifier","@ember/service","@ember/debug","@ember/destroyable"],(function(e,t,r,n,i){"use strict" var o,s -function a(e,t,r,n,i){var o={} -return Object.keys(n).forEach((function(e){o[e]=n[e]})),o.enumerable=!!o.enumerable,o.configurable=!!o.configurable,("value"in o||o.initializer)&&(o.writable=!0),o=r.slice().reverse().reduce((function(r,n){return n(e,t,r)||r}),o),i&&void 0!==o.initializer&&(o.value=o.initializer?o.initializer.call(i):void 0,o.initializer=void 0),void 0===o.initializer&&(Object.defineProperty(e,t,o),o=null),o}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +function a(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var r=e[Symbol.toPrimitive] +if(void 0!==r){var n=r.call(e,t||"default") +if("object"!=typeof n)return n +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 let l=(o=class extends t.default{constructor(){var e,t,r,n -super(...arguments),e=this,t="resizeObserver",n=this,(r=s)&&Object.defineProperty(e,t,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(n):void 0})}get callback(){return this.args.positional[0]}didReceiveArguments(){}didInstall(){this.resizeObserver.observe(this.element,this.handleResize)}willRemove(){this.resizeObserver.unobserve(this.element,this.handleResize)}handleResize(){this.callback(...arguments)}},s=a(o.prototype,"resizeObserver",[r.inject],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),a(o.prototype,"handleResize",[n.action],Object.getOwnPropertyDescriptor(o.prototype,"handleResize"),o.prototype),o) +super(...arguments),e=this,t="resizeObserver",n=this,(r=s)&&Object.defineProperty(e,t,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(n):void 0}),a(this,"callback",null),a(this,"element",null),(0,i.registerDestructor)(this,(()=>{this.resizeObserver.unobserve(this.element,this.callback)}))}modify(e,t){let[r]=t +this.resizeObserver.observe(e,r),this.resizeObserver.unobserve(this.element,this.callback),this.callback=r,this.element=e}},u=o.prototype,c="resizeObserver",d=[r.inject],h={configurable:!0,enumerable:!0,writable:!0,initializer:null},f={},Object.keys(h).forEach((function(e){f[e]=h[e]})),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=d.slice().reverse().reduce((function(e,t){return t(u,c,e)||e}),f),p&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(p):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(u,c,f),f=null),s=f,o) +var u,c,d,h,p,f e.default=l})),define("ember-page-title/helpers/page-title",["exports","@ember/service","@ember/component/helper","@ember/object/internals","@ember/polyfills"],(function(e,t,r,n,i){"use strict" var o,s,a Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 @@ -9995,7 +10772,12 @@ return this.tokens.push(r),this.tokens.scheduleTitleUpdate(),""}willDestroy(){su var u,c,d,h,p,f e.default=l})),define("ember-page-title/services/page-title-list",["exports","@ember/application","@ember/runloop","@ember/service","@ember/utils","@ember/polyfills","@ember/debug"],(function(e,t,r,n,i,o,s){"use strict" var a,l,u,c,d,h -function p(e,t,r,n){r&&Object.defineProperty(e,t,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(n):void 0})}function f(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function m(e,t,r,n,i){var o={} +function p(e,t,r,n){r&&Object.defineProperty(e,t,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(n):void 0})}function f(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var r=e[Symbol.toPrimitive] +if(void 0!==r){var n=r.call(e,t||"default") +if("object"!=typeof n)return n +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function m(e,t,r,n,i){var o={} return Object.keys(n).forEach((function(e){o[e]=n[e]})),o.enumerable=!!o.enumerable,o.configurable=!!o.configurable,("value"in o||o.initializer)&&(o.writable=!0),o=r.slice().reverse().reduce((function(r,n){return n(e,t,r)||r}),o),i&&void 0!==o.initializer&&(o.value=o.initializer?o.initializer.call(i):void 0,o.initializer=void 0),void 0===o.initializer&&(Object.defineProperty(e,t,o),o=null),o}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 let g="undefined"!=typeof FastBoot const v="routeDidChange" @@ -10046,111 +10828,126 @@ var r=(0,t.createTemplateFactory)({id:"m3JWTGVX",block:'[[[44,[[50,[30,0,["power e.default=r})),define("ember-power-select-with-create/templates/components/power-select-with-create/suggested-option",["exports","@ember/template-factory"],(function(e,t){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 var r=(0,t.createTemplateFactory)({id:"cLzCuqsc",block:'[[[1,[33,0,["text"]]],[1,"\\n"]],[],false,["option"]]',moduleName:"ember-power-select-with-create/templates/components/power-select-with-create/suggested-option.hbs",isStrictMode:!1}) -e.default=r})),define("ember-power-select/components/power-select-multiple",["exports","@ember/component","@ember/template-factory","@glimmer/component","@ember/object","@ember/utils"],(function(e,t,r,n,i,o){"use strict" +e.default=r})),define("ember-power-select/components/power-select-multiple",["exports","@ember/component","@glimmer/component","@ember/object","@ember/utils","@ember/template-factory"],(function(e,t,r,n,i,o){"use strict" var s function a(e,t,r,n,i){var o={} return Object.keys(n).forEach((function(e){o[e]=n[e]})),o.enumerable=!!o.enumerable,o.configurable=!!o.configurable,("value"in o||o.initializer)&&(o.writable=!0),o=r.slice().reverse().reduce((function(r,n){return n(e,t,r)||r}),o),i&&void 0!==o.initializer&&(o.value=o.initializer?o.initializer.call(i):void 0,o.initializer=void 0),void 0===o.initializer&&(Object.defineProperty(e,t,o),o=null),o}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const l=(0,r.createTemplateFactory)({id:"bj6pwQuH",block:'[[[8,[39,0],[[17,1]],[["@triggerRole","@ariaDescribedBy","@ariaInvalid","@ariaLabel","@ariaLabelledBy","@afterOptionsComponent","@allowClear","@beforeOptionsComponent","@buildSelection","@calculatePosition","@closeOnSelect","@defaultHighlighted","@destination","@disabled","@dropdownClass","@extra","@groupComponent","@horizontalPosition","@initiallyOpened","@loadingMessage","@matcher","@matchTriggerWidth","@noMatchesMessage","@noMatchesMessageComponent","@onBlur","@onChange","@onClose","@onFocus","@onInput","@onKeydown","@onOpen","@options","@optionsComponent","@placeholder","@placeholderComponent","@preventScroll","@registerAPI","@renderInPlace","@required","@scrollTo","@search","@searchEnabled","@searchField","@searchMessage","@searchPlaceholder","@selected","@selectedItemComponent","@eventType","@title","@triggerClass","@triggerComponent","@triggerId","@verticalPosition","@tabindex"],[[30,2],[30,3],[30,4],[30,5],[30,6],[30,7],[30,8],[28,[37,1],[[30,9],null],null],[28,[37,1],[[30,10],[30,0,["defaultBuildSelection"]]],null],[30,11],[30,12],[30,13],[30,14],[30,15],[30,16],[30,17],[30,18],[30,19],[30,20],[30,21],[30,22],[30,23],[30,24],[30,25],[30,26],[30,27],[30,28],[30,0,["handleFocus"]],[30,29],[30,0,["handleKeydown"]],[30,0,["handleOpen"]],[30,30],[30,31],[30,32],[30,33],[30,34],[30,35],[30,36],[30,37],[30,38],[30,39],[30,40],[30,41],[30,42],[30,43],[30,44],[30,45],[30,46],[30,47],[29,["ember-power-select-multiple-trigger ",[30,48]]],[50,[28,[37,1],[[30,49],"power-select-multiple/trigger"],null],0,null,[["tabindex"],[[30,50]]]],[30,51],[30,52],[30,0,["computedTabIndex"]]]],[["default"],[[[[1,"\\n "],[18,55,[[30,53],[30,54]]],[1,"\\n"]],[53,54]]]]],[1,"\\n"]],["&attrs","@triggerRole","@ariaDescribedBy","@ariaInvalid","@ariaLabel","@ariaLabelledBy","@afterOptionsComponent","@allowClear","@beforeOptionsComponent","@buildSelection","@calculatePosition","@closeOnSelect","@defaultHighlighted","@destination","@disabled","@dropdownClass","@extra","@groupComponent","@horizontalPosition","@initiallyOpened","@loadingMessage","@matcher","@matchTriggerWidth","@noMatchesMessage","@noMatchesMessageComponent","@onBlur","@onChange","@onClose","@onInput","@options","@optionsComponent","@placeholder","@placeholderComponent","@preventScroll","@registerAPI","@renderInPlace","@required","@scrollTo","@search","@searchEnabled","@searchField","@searchMessage","@searchPlaceholder","@selected","@selectedItemComponent","@eventType","@title","@triggerClass","@triggerComponent","@tabindex","@triggerId","@verticalPosition","option","select","&default"],false,["power-select","or","component","yield"]]',moduleName:"ember-power-select/components/power-select-multiple.hbs",isStrictMode:!1}) -let u=(a((s=class extends n.default{get computedTabIndex(){return void 0===this.args.triggerComponent&&this.args.searchEnabled?"-1":this.args.tabindex||"0"}handleOpen(e,t){if(this.args.onOpen&&!1===this.args.onOpen(e,t))return!1 +const l=(0,o.createTemplateFactory)({id:"mWl2YwNJ",block:'[[[8,[39,0],[[17,1]],[["@animationEnabled","@triggerRole","@ariaDescribedBy","@ariaInvalid","@ariaLabel","@ariaLabelledBy","@afterOptionsComponent","@allowClear","@beforeOptionsComponent","@buildSelection","@calculatePosition","@closeOnSelect","@defaultHighlighted","@destination","@disabled","@dropdownClass","@extra","@groupComponent","@horizontalPosition","@initiallyOpened","@loadingMessage","@matcher","@matchTriggerWidth","@noMatchesMessage","@noMatchesMessageComponent","@onBlur","@onChange","@onClose","@onFocus","@onInput","@onKeydown","@onOpen","@options","@optionsComponent","@placeholder","@placeholderComponent","@preventScroll","@registerAPI","@renderInPlace","@required","@scrollTo","@search","@searchEnabled","@searchField","@searchMessage","@searchPlaceholder","@selected","@selectedItemComponent","@eventType","@title","@triggerClass","@triggerComponent","@triggerId","@verticalPosition","@tabindex","@ebdTriggerComponent","@ebdContentComponent"],[[30,2],[30,3],[30,4],[30,5],[30,6],[30,7],[30,8],[30,9],[28,[37,1],[[30,10],null],null],[28,[37,1],[[30,11],[30,0,["defaultBuildSelection"]]],null],[30,12],[30,13],[30,14],[30,15],[30,16],[30,17],[30,18],[30,19],[30,20],[30,21],[30,22],[30,23],[30,24],[30,25],[30,26],[30,27],[30,28],[30,29],[30,0,["handleFocus"]],[30,30],[30,0,["handleKeydown"]],[30,0,["handleOpen"]],[30,31],[30,32],[30,33],[30,34],[30,35],[30,36],[30,37],[30,38],[30,39],[30,40],[30,41],[30,42],[30,43],[30,44],[30,45],[30,46],[30,47],[30,48],[29,["ember-power-select-multiple-trigger ",[30,49]]],[50,[28,[37,1],[[30,50],"power-select-multiple/trigger"],null],0,null,[["tabindex"],[[30,51]]]],[30,52],[30,53],[30,0,["computedTabIndex"]],[30,54],[30,55]]],[["default"],[[[[1,"\\n "],[18,58,[[30,56],[30,57]]],[1,"\\n"]],[56,57]]]]],[1,"\\n"]],["&attrs","@animationEnabled","@triggerRole","@ariaDescribedBy","@ariaInvalid","@ariaLabel","@ariaLabelledBy","@afterOptionsComponent","@allowClear","@beforeOptionsComponent","@buildSelection","@calculatePosition","@closeOnSelect","@defaultHighlighted","@destination","@disabled","@dropdownClass","@extra","@groupComponent","@horizontalPosition","@initiallyOpened","@loadingMessage","@matcher","@matchTriggerWidth","@noMatchesMessage","@noMatchesMessageComponent","@onBlur","@onChange","@onClose","@onInput","@options","@optionsComponent","@placeholder","@placeholderComponent","@preventScroll","@registerAPI","@renderInPlace","@required","@scrollTo","@search","@searchEnabled","@searchField","@searchMessage","@searchPlaceholder","@selected","@selectedItemComponent","@eventType","@title","@triggerClass","@triggerComponent","@tabindex","@triggerId","@verticalPosition","@ebdTriggerComponent","@ebdContentComponent","option","select","&default"],false,["power-select","or","component","yield"]]',moduleName:"ember-power-select/components/power-select-multiple.hbs",isStrictMode:!1}) +let u=(a((s=class extends r.default{get computedTabIndex(){return void 0===this.args.triggerComponent&&this.args.searchEnabled?"-1":this.args.tabindex||"0"}handleOpen(e,t){if(this.args.onOpen&&!1===this.args.onOpen(e,t))return!1 this.focusInput(e)}handleFocus(e,t){this.args.onFocus&&this.args.onFocus(e,t),this.focusInput(e)}handleKeydown(e,t){return this.args.onKeydown&&!1===this.args.onKeydown(e,t)?(t.stopPropagation(),!1):13===t.keyCode&&e.isOpen?(t.stopPropagation(),void 0!==e.highlighted?e.selected&&-1!==e.selected.indexOf(e.highlighted)?(e.actions.close(t),!1):(e.actions.choose(e.highlighted,t),!1):(e.actions.close(t),!1)):void 0}defaultBuildSelection(e,t){let r=(t.selected||[]).slice(0),n=-1 -for(let i=0;i-1?r.splice(n,1):r.push(e),r}focusInput(e){if(e){let t=document.querySelector(`#ember-power-select-trigger-multiple-input-${e.uniqueId}`) -t&&t.focus()}}}).prototype,"handleOpen",[i.action],Object.getOwnPropertyDescriptor(s.prototype,"handleOpen"),s.prototype),a(s.prototype,"handleFocus",[i.action],Object.getOwnPropertyDescriptor(s.prototype,"handleFocus"),s.prototype),a(s.prototype,"handleKeydown",[i.action],Object.getOwnPropertyDescriptor(s.prototype,"handleKeydown"),s.prototype),s) -e.default=u,(0,t.setComponentTemplate)(l,u)})),define("ember-power-select/components/power-select-multiple/trigger",["exports","@ember/component","@ember/template-factory","@glimmer/component","@ember/object","@ember/service","@ember/runloop","@ember/debug","@ember/utils","@ember/template"],(function(e,t,r,n,i,o,s,a,l,u){"use strict" +t&&t.focus()}}}).prototype,"handleOpen",[n.action],Object.getOwnPropertyDescriptor(s.prototype,"handleOpen"),s.prototype),a(s.prototype,"handleFocus",[n.action],Object.getOwnPropertyDescriptor(s.prototype,"handleFocus"),s.prototype),a(s.prototype,"handleKeydown",[n.action],Object.getOwnPropertyDescriptor(s.prototype,"handleKeydown"),s.prototype),s) +e.default=u,(0,t.setComponentTemplate)(l,u)})),define("ember-power-select/components/power-select-multiple/trigger",["exports","@ember/component","@glimmer/component","@ember/object","@ember/service","@ember/runloop","@ember/debug","@ember/utils","@ember/template","@ember/template-factory"],(function(e,t,r,n,i,o,s,a,l,u){"use strict" var c,d -function h(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function p(e,t,r,n,i){var o={} +function h(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var r=e[Symbol.toPrimitive] +if(void 0!==r){var n=r.call(e,t||"default") +if("object"!=typeof n)return n +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function p(e,t,r,n,i){var o={} return Object.keys(n).forEach((function(e){o[e]=n[e]})),o.enumerable=!!o.enumerable,o.configurable=!!o.configurable,("value"in o||o.initializer)&&(o.writable=!0),o=r.slice().reverse().reduce((function(r,n){return n(e,t,r)||r}),o),i&&void 0!==o.initializer&&(o.value=o.initializer?o.initializer.call(i):void 0,o.initializer=void 0),void 0===o.initializer&&(Object.defineProperty(e,t,o),o=null),o}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const f=(0,r.createTemplateFactory)({id:"0TljclnC",block:'[[[11,"ul"],[16,1,[29,["ember-power-select-multiple-options-",[30,1,["uniqueId"]]]]],[24,0,"ember-power-select-multiple-options"],[17,2],[4,[38,0],[[30,0,["openChanged"]],[30,1,["isOpen"]]],null],[4,[38,1],["touchstart",[30,0,["chooseOption"]]],null],[4,[38,1],["mousedown",[30,0,["chooseOption"]]],null],[12],[1,"\\n"],[42,[28,[37,3],[[28,[37,3],[[30,1,["selected"]]],null]],null],null,[[[1," "],[10,"li"],[15,0,[29,["ember-power-select-multiple-option ",[52,[30,3,["disabled"]],"ember-power-select-multiple-option--disabled"]]]],[12],[1,"\\n"],[41,[51,[30,1,["disabled"]]],[[[1," "],[10,1],[14,"role","button"],[14,"aria-label","remove element"],[14,0,"ember-power-select-multiple-remove-btn"],[15,"data-selected-index",[30,4]],[12],[1,"\\n ×\\n "],[13],[1,"\\n"]],[]],null],[41,[30,5],[[[1," "],[46,[30,5],null,[["extra","option","select"],[[30,6],[30,3],[30,1]]],null],[1,"\\n"]],[]],[[[1," "],[18,13,[[30,3],[30,1]]],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n"]],[3,4]],[[[41,[28,[37,8],[[30,7],[28,[37,9],[[30,8]],null]],null],[[[1," "],[10,1],[14,0,"ember-power-select-placeholder"],[12],[1,[30,7]],[13],[1,"\\n"]],[]],null]],[]]],[41,[30,8],[[[1," "],[11,"input"],[24,0,"ember-power-select-trigger-multiple-input"],[24,"autocomplete","off"],[24,"autocorrect","off"],[24,"autocapitalize","off"],[16,"spellcheck",false],[16,1,[29,["ember-power-select-trigger-multiple-input-",[30,1,["uniqueId"]]]]],[16,2,[30,1,["searchText"]]],[16,"aria-controls",[30,9]],[16,5,[30,0,["triggerMultipleInputStyle"]]],[16,"placeholder",[30,0,["maybePlaceholder"]]],[16,"disabled",[30,1,["disabled"]]],[16,"tabindex",[30,10]],[24,4,"search"],[4,[38,1],["focus",[30,11]],null],[4,[38,1],["blur",[30,12]],null],[4,[38,1],["input",[30,0,["handleInput"]]],null],[4,[38,1],["keydown",[30,0,["handleKeydown"]]],null],[4,[38,10],[[30,0,["storeInputStyles"]]],null],[12],[13],[1,"\\n"]],[]],null],[13],[1,"\\n"],[10,1],[14,0,"ember-power-select-status-icon"],[12],[13],[1,"\\n"]],["@select","&attrs","opt","idx","@selectedItemComponent","@extra","@placeholder","@searchEnabled","@listboxId","@tabindex","@onFocus","@onBlur","&default"],false,["did-update","on","each","-track-array","if","unless","component","yield","and","not","did-insert"]]',moduleName:"ember-power-select/components/power-select-multiple/trigger.hbs",isStrictMode:!1}),m=window&&window.navigator?window.navigator.userAgent:"",g=m.indexOf("MSIE ")>-1||m.indexOf("Trident/")>-1 -let v=(c=class extends n.default{constructor(){var e,t,r,n -super(...arguments),h(this,"inputFont",void 0),h(this,"_lastIsOpen",this.args.select.isOpen),e=this,t="textMeasurer",n=this,(r=d)&&Object.defineProperty(e,t,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(n):void 0})}get triggerMultipleInputStyle(){if((0,s.scheduleOnce)("actions",null,this.args.select.actions.reposition),this.args.select.selected&&0!==(0,i.get)(this.args.select.selected,"length")){let e=0 -return this.inputFont&&(e=this.textMeasurer.width(this.args.select.searchText,this.inputFont)),(0,u.htmlSafe)(`width: ${e+25}px`)}return(0,u.htmlSafe)("width: 100%;")}get maybePlaceholder(){if(!g)return this.args.select.selected&&0!==(0,i.get)(this.args.select.selected,"length")?"":this.args.placeholder||""}openChanged(e,t){let[r]=t -!1===r&&!0===this._lastIsOpen&&(0,s.scheduleOnce)("actions",null,this.args.select.actions.search,""),this._lastIsOpen=r}storeInputStyles(e){let{fontStyle:t,fontVariant:r,fontWeight:n,fontSize:i,lineHeight:o,fontFamily:s}=window.getComputedStyle(e) +const f=(0,u.createTemplateFactory)({id:"hB9w1BW+",block:'[[[11,"ul"],[16,1,[29,["ember-power-select-multiple-options-",[30,1,["uniqueId"]]]]],[24,0,"ember-power-select-multiple-options"],[24,"role","button"],[17,2],[4,[38,0],[[30,0,["openChanged"]],[30,1,["isOpen"]]],null],[4,[38,1],["touchstart",[30,0,["chooseOption"]]],null],[4,[38,1],["mousedown",[30,0,["chooseOption"]]],null],[12],[1,"\\n"],[42,[28,[37,3],[[28,[37,3],[[30,1,["selected"]]],null]],null],null,[[[1," "],[10,"li"],[15,0,[29,["ember-power-select-multiple-option ",[52,[30,3,["disabled"]],"ember-power-select-multiple-option--disabled"]]]],[12],[1,"\\n"],[41,[51,[30,1,["disabled"]]],[[[1," "],[10,1],[14,"role","button"],[14,"aria-label","remove element"],[14,0,"ember-power-select-multiple-remove-btn"],[15,"data-selected-index",[30,4]],[12],[1,"\\n ×\\n "],[13],[1,"\\n"]],[]],null],[41,[30,5],[[[1," "],[46,[30,5],null,[["extra","option","select"],[[30,6],[30,3],[30,1]]],null],[1,"\\n"]],[]],[[[1," "],[18,13,[[30,3],[30,1]]],[1,"\\n"]],[]]],[1," "],[13],[1,"\\n"]],[3,4]],[[[41,[28,[37,8],[[30,7],[28,[37,9],[[30,8]],null]],null],[[[1," "],[10,1],[14,0,"ember-power-select-placeholder"],[12],[1,[30,7]],[13],[1,"\\n"]],[]],null]],[]]],[41,[30,8],[[[1," "],[11,"input"],[24,0,"ember-power-select-trigger-multiple-input"],[24,"autocomplete","off"],[24,"autocorrect","off"],[24,"autocapitalize","off"],[16,"spellcheck",false],[16,1,[29,["ember-power-select-trigger-multiple-input-",[30,1,["uniqueId"]]]]],[16,2,[30,1,["searchText"]]],[16,"aria-controls",[30,9]],[16,5,[30,0,["triggerMultipleInputStyle"]]],[16,"placeholder",[30,0,["maybePlaceholder"]]],[16,"disabled",[30,1,["disabled"]]],[16,"tabindex",[30,10]],[24,"form","power-select-fake-form"],[24,4,"search"],[4,[38,1],["focus",[30,11]],null],[4,[38,1],["blur",[30,12]],null],[4,[38,1],["input",[30,0,["handleInput"]]],null],[4,[38,1],["keydown",[30,0,["handleKeydown"]]],null],[4,[38,10],[[30,0,["storeInputStyles"]]],null],[12],[13],[1,"\\n"]],[]],null],[13],[1,"\\n"],[10,1],[14,0,"ember-power-select-status-icon"],[12],[13],[1,"\\n"]],["@select","&attrs","opt","idx","@selectedItemComponent","@extra","@placeholder","@searchEnabled","@listboxId","@tabindex","@onFocus","@onBlur","&default"],false,["did-update","on","each","-track-array","if","unless","component","yield","and","not","did-insert"]]',moduleName:"ember-power-select/components/power-select-multiple/trigger.hbs",isStrictMode:!1}),m=window&&window.navigator?window.navigator.userAgent:"",g=m.indexOf("MSIE ")>-1||m.indexOf("Trident/")>-1 +let v=(c=class extends r.default{constructor(){var e,t,r,n +super(...arguments),h(this,"inputFont",void 0),h(this,"_lastIsOpen",this.args.select.isOpen),e=this,t="textMeasurer",n=this,(r=d)&&Object.defineProperty(e,t,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(n):void 0})}get triggerMultipleInputStyle(){if((0,o.scheduleOnce)("actions",null,this.args.select.actions.reposition),this.args.select.selected&&0!==(0,n.get)(this.args.select.selected,"length")){let e=0 +return this.inputFont&&(e=this.textMeasurer.width(this.args.select.searchText,this.inputFont)),(0,l.htmlSafe)(`width: ${e+25}px`)}return(0,l.htmlSafe)("width: 100%;")}get maybePlaceholder(){if(!g)return this.args.select.selected&&0!==(0,n.get)(this.args.select.selected,"length")?"":this.args.placeholder||""}openChanged(e,t){let[r]=t +!1===r&&!0===this._lastIsOpen&&(0,o.scheduleOnce)("actions",null,this.args.select.actions.search,""),this._lastIsOpen=r}storeInputStyles(e){let{fontStyle:t,fontVariant:r,fontWeight:n,fontSize:i,lineHeight:o,fontFamily:s}=window.getComputedStyle(e) this.inputFont=`${t} ${r} ${n} ${i}/${o} ${s}`}chooseOption(e){if(null===e.target)return let t=e.target.getAttribute("data-selected-index") if(t){let r=parseInt(t,10) e.stopPropagation(),e.preventDefault() let n=this.selectedObject(this.args.select.selected,r) this.args.select.actions.choose(n)}}handleInput(e){this.args.onInput&&!1===this.args.onInput(e)||this.args.select.actions.open(e)}handleKeydown(e){if(null!==e.target){if(this.args.onKeydown&&!1===this.args.onKeydown(e))return e.stopPropagation(),!1 -if(8===e.keyCode){if(e.stopPropagation(),(0,l.isBlank)(e.target.value)){let t=this.args.select.selected[this.args.select.selected.length-1] -t&&(this.args.select.actions.select(this.args.buildSelection(t,this.args.select),e),"string"==typeof t?this.args.select.actions.search(t):this.args.select.actions.search((0,i.get)(t,this.args.searchField)),this.args.select.actions.open(e))}}else(e.keyCode>=48&&e.keyCode<=90||32===e.keyCode)&&e.stopPropagation()}}selectedObject(e,t){return"function"==typeof e.objectAt?e.objectAt(t):(0,i.get)(e,t)}},d=p(c.prototype,"textMeasurer",[o.inject],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p(c.prototype,"openChanged",[i.action],Object.getOwnPropertyDescriptor(c.prototype,"openChanged"),c.prototype),p(c.prototype,"storeInputStyles",[i.action],Object.getOwnPropertyDescriptor(c.prototype,"storeInputStyles"),c.prototype),p(c.prototype,"chooseOption",[i.action],Object.getOwnPropertyDescriptor(c.prototype,"chooseOption"),c.prototype),p(c.prototype,"handleInput",[i.action],Object.getOwnPropertyDescriptor(c.prototype,"handleInput"),c.prototype),p(c.prototype,"handleKeydown",[i.action],Object.getOwnPropertyDescriptor(c.prototype,"handleKeydown"),c.prototype),c) -e.default=v,(0,t.setComponentTemplate)(f,v)})),define("ember-power-select/components/power-select",["exports","@ember/component","@ember/template-factory","@glimmer/component","@glimmer/tracking","@ember/object","@ember/object/observers","@ember/runloop","@ember/utils","@ember/debug","ember-power-select/utils/group-utils","ember-concurrency-decorators","ember-concurrency"],(function(e,t,r,n,i,o,s,a,l,u,c,d,h){"use strict" +if(8===e.keyCode){if(e.stopPropagation(),(0,a.isBlank)(e.target.value)){let t=this.args.select.selected[this.args.select.selected.length-1] +t&&(this.args.select.actions.select(this.args.buildSelection(t,this.args.select),e),"string"==typeof t?this.args.select.actions.search(t):this.args.select.actions.search((0,n.get)(t,this.args.searchField)),this.args.select.actions.open(e))}}else(e.keyCode>=48&&e.keyCode<=90||32===e.keyCode)&&e.stopPropagation()}}selectedObject(e,t){return"function"==typeof e.objectAt?e.objectAt(t):(0,n.get)(e,t)}},d=p(c.prototype,"textMeasurer",[i.inject],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p(c.prototype,"openChanged",[n.action],Object.getOwnPropertyDescriptor(c.prototype,"openChanged"),c.prototype),p(c.prototype,"storeInputStyles",[n.action],Object.getOwnPropertyDescriptor(c.prototype,"storeInputStyles"),c.prototype),p(c.prototype,"chooseOption",[n.action],Object.getOwnPropertyDescriptor(c.prototype,"chooseOption"),c.prototype),p(c.prototype,"handleInput",[n.action],Object.getOwnPropertyDescriptor(c.prototype,"handleInput"),c.prototype),p(c.prototype,"handleKeydown",[n.action],Object.getOwnPropertyDescriptor(c.prototype,"handleKeydown"),c.prototype),c) +e.default=v,(0,t.setComponentTemplate)(f,v)})),define("ember-power-select/components/power-select",["exports","@ember/component","@glimmer/component","@glimmer/tracking","@ember/object","@ember/object/observers","@ember/runloop","@ember/utils","@ember/debug","ember-power-select/utils/group-utils","ember-concurrency-decorators","ember-concurrency","@ember/template-factory"],(function(e,t,r,n,i,o,s,a,l,u,c,d,h){"use strict" var p,f,m,g,v,b,y,_,w,O,x -function P(e,t,r,n){r&&Object.defineProperty(e,t,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(n):void 0})}function S(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function T(e,t,r,n,i){var o={} +function S(e,t,r,n){r&&Object.defineProperty(e,t,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(n):void 0})}function T(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var r=e[Symbol.toPrimitive] +if(void 0!==r){var n=r.call(e,t||"default") +if("object"!=typeof n)return n +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function P(e,t,r,n,i){var o={} return Object.keys(n).forEach((function(e){o[e]=n[e]})),o.enumerable=!!o.enumerable,o.configurable=!!o.configurable,("value"in o||o.initializer)&&(o.writable=!0),o=r.slice().reverse().reduce((function(r,n){return n(e,t,r)||r}),o),i&&void 0!==o.initializer&&(o.value=o.initializer?o.initializer.call(i):void 0,o.initializer=void 0),void 0===o.initializer&&(Object.defineProperty(e,t,o),o=null),o}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const E=(0,r.createTemplateFactory)({id:"Kd02zOqr",block:'[[[8,[39,0],[[17,1]],[["@horizontalPosition","@destination","@initiallyOpened","@matchTriggerWidth","@preventScroll","@onClose","@onOpen","@renderInPlace","@verticalPosition","@disabled","@calculatePosition"],[[30,2],[30,3],[30,4],[30,0,["matchTriggerWidth"]],[28,[37,1],[[30,5],false],null],[30,0,["handleClose"]],[30,0,["handleOpen"]],[30,6],[30,7],[30,8],[30,9]]],[["default"],[[[[1,"\\n"],[44,[[28,[37,3],[[30,10],[28,[37,4],null,[["selected","highlighted","options","results","resultsCount","loading","isActive","searchText","lastSearchedText","actions"],[[30,0,["selected"]],[30,0,["highlighted"]],[30,0,["options"]],[30,0,["results"]],[30,0,["resultsCount"]],[30,0,["loading"]],[30,0,["isActive"]],[30,0,["searchText"]],[30,0,["lastSearchedText"]],[28,[37,3],[[30,10,["actions"]],[30,0,["_publicAPIActions"]]],null]]]]],null],[28,[37,5],["ember-power-select-options-",[30,10,["uniqueId"]]],null]],[[[1," "],[8,[30,10,["Trigger"]],[[16,0,[29,["ember-power-select-trigger ",[30,13],[52,[30,11,["isActive"]]," ember-power-select-trigger--active"]]]],[16,"aria-describedby",[30,14]],[16,"aria-invalid",[30,15]],[16,"aria-label",[30,16]],[16,"aria-labelledby",[30,17]],[16,"aria-required",[30,18]],[16,"role",[28,[37,1],[[30,19],"button"],null]],[16,"title",[30,20]],[16,1,[30,21]],[16,"tabindex",[28,[37,7],[[28,[37,8],[[30,8]],null],[28,[37,1],[[30,22],"0"],null]],null]],[4,[38,9],[[30,0,["_updateOptions"]],[30,24]],null],[4,[38,10],[[30,0,["_updateOptions"]],[30,24]],null],[4,[38,9],[[30,0,["_updateSelected"]],[30,25]],null],[4,[38,10],[[30,0,["_updateSelected"]],[30,25]],null],[4,[38,9],[[30,0,["_registerAPI"]],[30,11]],null],[4,[38,10],[[30,0,["_registerAPI"]],[30,11]],null],[4,[38,10],[[30,0,["_performSearch"]],[30,0,["searchText"]]],null],[4,[38,11],["keydown",[30,0,["handleTriggerKeydown"]]],null],[4,[38,11],["focus",[30,0,["handleFocus"]]],null],[4,[38,11],["blur",[30,0,["handleBlur"]]],null]],[["@eventType"],[[28,[37,1],[[30,23],"mousedown"],null]]],[["default"],[[[[1,"\\n"],[44,[[50,[28,[37,1],[[30,26],"power-select/trigger"],null],0,null,null]],[[[1," "],[8,[30,27],null,[["@allowClear","@buildSelection","@loadingMessage","@selectedItemComponent","@select","@searchEnabled","@searchField","@onFocus","@onBlur","@extra","@listboxId","@onInput","@onKeydown","@placeholder","@placeholderComponent"],[[30,28],[30,29],[28,[37,1],[[30,30],"Loading options..."],null],[30,31],[30,11],[30,32],[30,33],[30,0,["handleFocus"]],[30,0,["handleBlur"]],[30,34],[30,12],[30,0,["handleInput"]],[30,0,["handleKeydown"]],[30,35],[30,0,["placeholderComponent"]]]],[["default"],[[[[1,"\\n "],[18,53,[[30,36],[30,37]]],[1,"\\n "]],[36,37]]]]],[1,"\\n"]],[27]]],[1," "]],[]]]]],[1,"\\n "],[8,[30,10,["Content"]],[[16,0,[29,["ember-power-select-dropdown",[52,[30,11,["isActive"]]," ember-power-select-dropdown--active"]," ",[30,38]]]]],null,[["default"],[[[[1,"\\n"],[44,[[50,[52,[28,[37,14],[[30,39],[27]],null],"power-select/before-options",[30,39]],0,null,null]],[[[1," "],[8,[30,40],null,[["@select","@searchEnabled","@onInput","@onKeydown","@onFocus","@onBlur","@placeholder","@placeholderComponent","@extra","@listboxId","@selectedItemComponent","@searchPlaceholder"],[[30,11],[30,32],[30,0,["handleInput"]],[30,0,["handleKeydown"]],[30,0,["handleFocus"]],[30,0,["handleBlur"]],[30,35],[30,0,["placeholderComponent"]],[30,34],[30,12],[30,31],[30,41]]],null],[1,"\\n"]],[40]]],[41,[30,0,["mustShowSearchMessage"]],[[[44,[[50,[28,[37,1],[[30,42],"power-select/search-message"],null],0,null,null]],[[[1," "],[8,[30,43],null,[["@searchMessage","@select"],[[30,0,["searchMessage"]],[30,11]]],null],[1,"\\n"]],[43]]]],[]],[[[41,[30,0,["mustShowNoMessages"]],[[[44,[[50,[28,[37,1],[[30,44],"power-select/no-matches-message"],null],0,null,null]],[[[1," "],[8,[30,45],null,[["@noMatchesMessage","@select"],[[30,0,["noMatchesMessage"]],[30,11]]],null],[1,"\\n"]],[45]]]],[]],[[[44,[[50,[28,[37,1],[[30,46],"power-select/options"],null],0,null,null]],[[[1," "],[8,[30,47],[[16,1,[30,12]],[24,0,"ember-power-select-options"]],[["@loadingMessage","@select","@options","@groupIndex","@optionsComponent","@extra","@highlightOnHover","@groupComponent"],[[28,[37,1],[[30,30],"Loading options..."],null],[30,11],[30,11,["results"]],"",[30,47],[30,34],[30,0,["highlightOnHover"]],[28,[37,1],[[30,48],"power-select/power-select-group"],null]]],[["default"],[[[[1,"\\n "],[18,53,[[30,49],[30,50]]],[1,"\\n "]],[49,50]]]]],[1,"\\n"]],[47]]],[1," "]],[]]]],[]]],[44,[[50,[30,51],0,null,null]],[[[1," "],[8,[30,52],null,[["@extra","@select"],[[30,34],[30,11]]],null],[1,"\\n"]],[52]]],[1," "]],[]]]]],[1,"\\n"]],[11,12]]]],[10]]]]],[1,"\\n"]],["&attrs","@horizontalPosition","@destination","@initiallyOpened","@preventScroll","@renderInPlace","@verticalPosition","@disabled","@calculatePosition","dropdown","publicAPI","listboxId","@triggerClass","@ariaDescribedBy","@ariaInvalid","@ariaLabel","@ariaLabelledBy","@required","@triggerRole","@title","@triggerId","@tabindex","@eventType","@options","@selected","@triggerComponent","Trigger","@allowClear","@buildSelection","@loadingMessage","@selectedItemComponent","@searchEnabled","@searchField","@extra","@placeholder","opt","term","@dropdownClass","@beforeOptionsComponent","BeforeOptions","@searchPlaceholder","@searchMessageComponent","SearchMessage","@noMatchesMessageComponent","NoMatchesMessage","@optionsComponent","Options","@groupComponent","option","select","@afterOptionsComponent","AfterOptions","&default"],false,["basic-dropdown","or","let","assign","hash","concat","if","and","not","did-insert","did-update","on","component","yield","eq"]]',moduleName:"ember-power-select/components/power-select.hbs",isStrictMode:!1}),C=e=>"function"==typeof e.then,k=e=>C(e)&&Object.hasOwnProperty.call(e,"content"),M=e=>"function"==typeof e.cancel -let A=(p=class extends n.default{constructor(e,t){super(e,t),S(this,"_publicAPIActions",{search:this._search,highlight:this._highlight,select:this._select,choose:this._choose,scrollTo:this._scrollTo}),P(this,"_resolvedOptions",f,this),P(this,"_resolvedSelected",m,this),P(this,"_repeatingChar",g,this),P(this,"_expirableSearchText",v,this),P(this,"_searchResult",b,this),P(this,"isActive",y,this),P(this,"loading",_,this),P(this,"searchText",w,this),P(this,"lastSearchedText",O,this),P(this,"highlighted",x,this),S(this,"storedAPI",void 0),S(this,"_lastOptionsPromise",void 0),S(this,"_lastSelectedPromise",void 0),S(this,"_lastSearchPromise",void 0),S(this,"_filterResultsCache",{results:[],options:[],searchText:this.searchText})}willDestroy(){this._lastSelectedPromise&&k(this._lastSelectedPromise)&&((0,s.removeObserver)(this._lastSelectedPromise,"content",this,this._selectedObserverCallback),this._lastSelectedPromise=void 0),super.willDestroy.apply(this,arguments)}get highlightOnHover(){return void 0===this.args.highlightOnHover||this.args.highlightOnHover}get placeholderComponent(){return this.args.placeholderComponent||"power-select/placeholder"}get searchMessage(){return void 0===this.args.searchMessage?"Type to search":this.args.searchMessage}get noMatchesMessage(){return void 0===this.args.noMatchesMessage?"No results found":this.args.noMatchesMessage}get matchTriggerWidth(){return void 0===this.args.matchTriggerWidth||this.args.matchTriggerWidth}get mustShowSearchMessage(){return!this.loading&&0===this.searchText.length&&!!this.args.search&&!!this.searchMessage&&0===this.resultsCount}get mustShowNoMessages(){return!this.loading&&0===this.resultsCount&&(!this.args.search||this.lastSearchedText.length>0)}get results(){if(this.searchText.length>0){if(this.args.search)return I(this._searchResult||this.options) +const k=(0,h.createTemplateFactory)({id:"DV0/+41W",block:'[[[8,[39,0],null,[["@horizontalPosition","@destination","@initiallyOpened","@matchTriggerWidth","@preventScroll","@onClose","@onOpen","@renderInPlace","@verticalPosition","@disabled","@calculatePosition","@triggerComponent","@contentComponent"],[[30,1],[30,2],[30,3],[30,0,["matchTriggerWidth"]],[28,[37,1],[[30,4],false],null],[30,0,["handleClose"]],[30,0,["handleOpen"]],[30,5],[30,6],[30,7],[30,8],[30,9],[30,10]]],[["default"],[[[[1,"\\n"],[44,[[28,[37,3],[[30,11],[28,[37,4],null,[["selected","highlighted","options","results","resultsCount","loading","isActive","searchText","lastSearchedText","actions"],[[30,0,["selected"]],[30,0,["highlighted"]],[30,0,["options"]],[30,0,["results"]],[30,0,["resultsCount"]],[30,0,["loading"]],[30,0,["isActive"]],[30,0,["searchText"]],[30,0,["lastSearchedText"]],[28,[37,3],[[30,11,["actions"]],[30,0,["_publicAPIActions"]]],null]]]]],null],[28,[37,5],["ember-power-select-options-",[30,11,["uniqueId"]]],null]],[[[1," "],[8,[30,11,["Trigger"]],[[16,0,[29,["ember-power-select-trigger ",[30,14],[52,[30,12,["isActive"]]," ember-power-select-trigger--active"]]]],[16,"aria-describedby",[30,15]],[16,"aria-invalid",[30,16]],[16,"aria-label",[30,17]],[16,"aria-labelledby",[30,18]],[16,"aria-required",[30,19]],[16,"role",[28,[37,1],[[30,20],"button"],null]],[16,"title",[30,21]],[16,1,[30,22]],[16,"tabindex",[28,[37,7],[[28,[37,8],[[30,7]],null],[28,[37,1],[[30,23],"0"],null]],null]],[17,24],[4,[38,9],[[30,0,["_updateOptions"]],[30,26]],null],[4,[38,10],[[30,0,["_updateOptions"]],[30,26]],null],[4,[38,9],[[30,0,["_updateSelected"]],[30,27]],null],[4,[38,10],[[30,0,["_updateSelected"]],[30,27]],null],[4,[38,9],[[30,0,["_registerAPI"]],[30,12]],null],[4,[38,10],[[30,0,["_registerAPI"]],[30,12]],null],[4,[38,10],[[30,0,["_performSearch"]],[30,0,["searchText"]]],null],[4,[38,11],["keydown",[30,0,["handleTriggerKeydown"]]],null],[4,[38,11],["focus",[30,0,["handleFocus"]]],null],[4,[38,11],["blur",[30,0,["handleBlur"]]],null]],[["@eventType"],[[28,[37,1],[[30,25],"mousedown"],null]]],[["default"],[[[[1,"\\n"],[44,[[50,[28,[37,1],[[30,28],"power-select/trigger"],null],0,null,null]],[[[1," "],[8,[30,29],null,[["@allowClear","@buildSelection","@loadingMessage","@selectedItemComponent","@select","@searchEnabled","@searchField","@onFocus","@onBlur","@extra","@listboxId","@onInput","@onKeydown","@placeholder","@placeholderComponent"],[[30,30],[30,31],[28,[37,1],[[30,32],"Loading options..."],null],[30,33],[30,12],[30,34],[30,35],[30,0,["handleFocus"]],[30,0,["handleBlur"]],[30,36],[30,13],[30,0,["handleInput"]],[30,0,["handleKeydown"]],[30,37],[30,0,["placeholderComponent"]]]],[["default"],[[[[1,"\\n "],[18,55,[[30,38],[30,39]]],[1,"\\n "]],[38,39]]]]],[1,"\\n"]],[29]]],[1," "]],[]]]]],[1,"\\n "],[8,[30,11,["Content"]],[[16,0,[29,["ember-power-select-dropdown",[52,[30,12,["isActive"]]," ember-power-select-dropdown--active"]," ",[30,40]]]]],null,[["default"],[[[[1,"\\n"],[44,[[50,[52,[28,[37,14],[[30,41],[27]],null],"power-select/before-options",[30,41]],0,null,null]],[[[1," "],[8,[30,42],null,[["@select","@searchEnabled","@onInput","@onKeydown","@onFocus","@onBlur","@placeholder","@placeholderComponent","@extra","@listboxId","@selectedItemComponent","@searchPlaceholder"],[[30,12],[30,34],[30,0,["handleInput"]],[30,0,["handleKeydown"]],[30,0,["handleFocus"]],[30,0,["handleBlur"]],[30,37],[30,0,["placeholderComponent"]],[30,36],[30,13],[30,33],[30,43]]],null],[1,"\\n"]],[42]]],[41,[30,0,["mustShowSearchMessage"]],[[[44,[[50,[28,[37,1],[[30,44],"power-select/search-message"],null],0,null,null]],[[[1," "],[8,[30,45],null,[["@searchMessage","@select"],[[30,0,["searchMessage"]],[30,12]]],null],[1,"\\n"]],[45]]]],[]],[[[41,[30,0,["mustShowNoMessages"]],[[[44,[[50,[28,[37,1],[[30,46],"power-select/no-matches-message"],null],0,null,null]],[[[1," "],[8,[30,47],null,[["@noMatchesMessage","@select"],[[30,0,["noMatchesMessage"]],[30,12]]],null],[1,"\\n"]],[47]]]],[]],[[[44,[[50,[28,[37,1],[[30,48],"power-select/options"],null],0,null,null]],[[[1," "],[8,[30,49],[[16,1,[30,13]],[24,0,"ember-power-select-options"]],[["@loadingMessage","@select","@options","@groupIndex","@optionsComponent","@extra","@highlightOnHover","@groupComponent"],[[28,[37,1],[[30,32],"Loading options..."],null],[30,12],[30,12,["results"]],"",[30,49],[30,36],[30,0,["highlightOnHover"]],[28,[37,1],[[30,50],"power-select/power-select-group"],null]]],[["default"],[[[[1,"\\n "],[18,55,[[30,51],[30,52]]],[1,"\\n "]],[51,52]]]]],[1,"\\n"]],[49]]],[1," "]],[]]]],[]]],[44,[[50,[30,53],0,null,null]],[[[1," "],[8,[30,54],null,[["@extra","@select"],[[30,36],[30,12]]],null],[1,"\\n"]],[54]]],[1," "]],[]]]]],[1,"\\n"]],[12,13]]]],[11]]]]],[1,"\\n"]],["@horizontalPosition","@destination","@initiallyOpened","@preventScroll","@renderInPlace","@verticalPosition","@disabled","@calculatePosition","@ebdTriggerComponent","@ebdContentComponent","dropdown","publicAPI","listboxId","@triggerClass","@ariaDescribedBy","@ariaInvalid","@ariaLabel","@ariaLabelledBy","@required","@triggerRole","@title","@triggerId","@tabindex","&attrs","@eventType","@options","@selected","@triggerComponent","Trigger","@allowClear","@buildSelection","@loadingMessage","@selectedItemComponent","@searchEnabled","@searchField","@extra","@placeholder","opt","term","@dropdownClass","@beforeOptionsComponent","BeforeOptions","@searchPlaceholder","@searchMessageComponent","SearchMessage","@noMatchesMessageComponent","NoMatchesMessage","@optionsComponent","Options","@groupComponent","option","select","@afterOptionsComponent","AfterOptions","&default"],false,["basic-dropdown","or","let","assign","hash","concat","if","and","not","did-insert","did-update","on","component","yield","eq"]]',moduleName:"ember-power-select/components/power-select.hbs",isStrictMode:!1}),E=e=>"function"==typeof e.then,C=e=>E(e)&&Object.hasOwnProperty.call(e,"content"),M=e=>"function"==typeof e.cancel +let j=(p=class extends r.default{constructor(e,t){super(e,t),T(this,"_publicAPIActions",{search:this._search,highlight:this._highlight,select:this._select,choose:this._choose,scrollTo:this._scrollTo}),S(this,"_resolvedOptions",f,this),S(this,"_resolvedSelected",m,this),S(this,"_repeatingChar",g,this),S(this,"_expirableSearchText",v,this),S(this,"_searchResult",b,this),S(this,"isActive",y,this),S(this,"loading",_,this),S(this,"searchText",w,this),S(this,"lastSearchedText",O,this),S(this,"highlighted",x,this),T(this,"storedAPI",void 0),T(this,"_lastOptionsPromise",void 0),T(this,"_lastSelectedPromise",void 0),T(this,"_lastSearchPromise",void 0),T(this,"_filterResultsCache",{results:[],options:[],searchText:this.searchText})}willDestroy(){if(this._lastSelectedPromise&&C(this._lastSelectedPromise)){try{(0,o.removeObserver)(this._lastSelectedPromise,"content",this,this._selectedObserverCallback)}catch{}this._lastSelectedPromise=void 0}super.willDestroy.apply(this,arguments)}get highlightOnHover(){return void 0===this.args.highlightOnHover||this.args.highlightOnHover}get placeholderComponent(){return this.args.placeholderComponent||"power-select/placeholder"}get searchMessage(){return void 0===this.args.searchMessage?"Type to search":this.args.searchMessage}get noMatchesMessage(){return void 0===this.args.noMatchesMessage?"No results found":this.args.noMatchesMessage}get matchTriggerWidth(){return void 0===this.args.matchTriggerWidth||this.args.matchTriggerWidth}get mustShowSearchMessage(){return!this.loading&&0===this.searchText.length&&!!this.args.search&&!!this.searchMessage&&0===this.resultsCount}get mustShowNoMessages(){return!this.loading&&0===this.resultsCount&&(!this.args.search||this.lastSearchedText.length>0)}get results(){if(this.searchText.length>0){if(this.args.search)return I(this._searchResult||this.options) {if(this._filterResultsCache.options===this.options&&this._filterResultsCache.searchText===this.searchText)return this._filterResultsCache.results let e=this._filter(this.options,this.searchText) -return this._filterResultsCache={results:e,options:this.options,searchText:this.searchText},e}}return this.options}get options(){return this._resolvedOptions?I(this._resolvedOptions):this.args.options?I(this.args.options):[]}get resultsCount(){return(0,c.countOptions)(this.results)}get selected(){return this._resolvedSelected?I(this._resolvedSelected):this.args.selected&&"function"!=typeof this.args.selected.then?I(this.args.selected):void 0}handleOpen(e,t){if(this.args.onOpen&&!1===this.args.onOpen(this.storedAPI,t))return!1 +return this._filterResultsCache={results:e,options:this.options,searchText:this.searchText},e}}return this.options}get options(){return this._resolvedOptions?I(this._resolvedOptions):this.args.options?I(this.args.options):[]}get resultsCount(){return(0,u.countOptions)(this.results)}get selected(){return this._resolvedSelected?I(this._resolvedSelected):this.args.selected&&"function"!=typeof this.args.selected.then?I(this.args.selected):void 0}handleOpen(e,t){if(this.args.onOpen&&!1===this.args.onOpen(this.storedAPI,t))return!1 t&&t instanceof KeyboardEvent&&"keydown"===t.type&&(38===t.keyCode||40===t.keyCode)&&t.preventDefault(),this._resetHighlighted()}handleClose(e,t){if(this.args.onClose&&!1===this.args.onClose(this.storedAPI,t))return!1 this._highlight(void 0)}handleInput(e){if(null===e.target)return let t,r=e.target.value this.args.onInput&&(t=this.args.onInput(r,this.storedAPI,e),!1===t)||this._publicAPIActions.search("string"==typeof t?t:r)}handleKeydown(e){return(!this.args.onKeydown||!1!==this.args.onKeydown(this.storedAPI,e))&&this._routeKeydown(this.storedAPI,e)}handleTriggerKeydown(e){if(this.args.onKeydown&&!1===this.args.onKeydown(this.storedAPI,e))e.stopImmediatePropagation() else if(e.ctrlKey||e.metaKey)e.stopImmediatePropagation() -else if(e.keyCode>=48&&e.keyCode<=90||j(e))this.triggerTypingTask.perform(e) +else if(e.keyCode>=48&&e.keyCode<=90||R(e))this.triggerTypingTask.perform(e) else{if(32!==e.keyCode)return this._routeKeydown(this.storedAPI,e) -this._handleKeySpace(this.storedAPI,e)}}handleFocus(e){this.isDestroying||(0,a.scheduleOnce)("actions",this,this._updateIsActive,!0),this.args.onFocus&&this.args.onFocus(this.storedAPI,e)}handleBlur(e){this.isDestroying||(0,a.scheduleOnce)("actions",this,this._updateIsActive,!1),this.args.onBlur&&this.args.onBlur(this.storedAPI,e)}_search(e){this.searchText!==e&&(this.searchText=e,this.args.search||(this.lastSearchedText=e,this._resetHighlighted()))}_updateOptions(){if(this.args.options)if(C(this.args.options)){if(this._lastOptionsPromise===this.args.options)return +this._handleKeySpace(this.storedAPI,e)}}handleFocus(e){this.isDestroying||(0,s.scheduleOnce)("actions",this,this._updateIsActive,!0),this.args.onFocus&&this.args.onFocus(this.storedAPI,e)}handleBlur(e){this.isDestroying||(0,s.scheduleOnce)("actions",this,this._updateIsActive,!1),this.args.onBlur&&this.args.onBlur(this.storedAPI,e)}_search(e){this.searchText!==e&&(this.searchText=e,this.args.search||(this.lastSearchedText=e,this._resetHighlighted()))}_updateOptions(){if(this.args.options)if(E(this.args.options)){if(this._lastOptionsPromise===this.args.options)return let e=this.args.options -this._lastOptionsPromise=e,this.loading=!0,this._lastOptionsPromise.then((t=>{this._lastOptionsPromise===e&&(this.loading=!1,this._resolvedOptions=t,this._resetHighlighted())})).catch((()=>{this._lastOptionsPromise===e&&(this.loading=!1)}))}else(0,a.scheduleOnce)("actions",this,this._resetHighlighted)}_updateHighlighted(){this.storedAPI.isOpen&&this._resetHighlighted()}_updateSelected(){if(this.args.selected)if("function"==typeof this.args.selected.then){if(this._lastSelectedPromise===this.args.selected)return -this._lastSelectedPromise&&k(this._lastSelectedPromise)&&(0,s.removeObserver)(this._lastSelectedPromise,"content",this,this._selectedObserverCallback) +this._lastOptionsPromise=e,this.loading=!0,this._lastOptionsPromise.then((t=>{this._lastOptionsPromise===e&&(this.loading=!1,this._resolvedOptions=t,this._resetHighlighted())})).catch((()=>{this._lastOptionsPromise===e&&(this.loading=!1)}))}else(0,s.scheduleOnce)("actions",this,this._resetHighlighted)}_updateHighlighted(){this.storedAPI.isOpen&&this._resetHighlighted()}_updateSelected(){if(this.args.selected)if("function"==typeof this.args.selected.then){if(this._lastSelectedPromise===this.args.selected)return +this._lastSelectedPromise&&C(this._lastSelectedPromise)&&(0,o.removeObserver)(this._lastSelectedPromise,"content",this,this._selectedObserverCallback) let e=this.args.selected -e.then((()=>{this.isDestroyed||this.isDestroying||k(e)&&(0,s.addObserver)(e,"content",this,this._selectedObserverCallback)})),this._lastSelectedPromise=e,this._lastSelectedPromise.then((t=>{this._lastSelectedPromise===e&&(this._resolvedSelected=t,this._highlight(t))}))}else this._resolvedSelected=void 0,this._highlight(this.args.selected)}_selectedObserverCallback(){this._resolvedSelected=this._lastSelectedPromise,this._highlight(this._resolvedSelected)}_highlight(e){e&&(0,o.get)(e,"disabled")||(this.highlighted=e)}_select(e,t){(0,l.isEqual)(this.storedAPI.selected,e)||this.args.onChange(e,this.storedAPI,t)}_choose(e,t){let r=this.args.buildSelection?this.args.buildSelection(e,this.storedAPI):e +e.then((()=>{this.isDestroyed||this.isDestroying||C(e)&&(0,o.addObserver)(e,"content",this,this._selectedObserverCallback)})),this._lastSelectedPromise=e,this._lastSelectedPromise.then((t=>{this._lastSelectedPromise===e&&(this._resolvedSelected=t,this._highlight(t))}))}else this._resolvedSelected=void 0,Array.isArray(this.args.selected)||this._highlight(this.args.selected)}_selectedObserverCallback(){this._resolvedSelected=this._lastSelectedPromise,this._highlight(this._resolvedSelected)}_highlight(e){e&&(0,i.get)(e,"disabled")||(this.highlighted=e)}_select(e,t){(0,a.isEqual)(this.storedAPI.selected,e)||this.args.onChange(e,this.storedAPI,t)}_choose(e,t){let r=this.args.buildSelection?this.args.buildSelection(e,this.storedAPI):e this.storedAPI.actions.select(r,t),!1!==this.args.closeOnSelect&&this.storedAPI.actions.close(t)}_scrollTo(e){let t=this.storedAPI if(!document||!e)return if(this.args.scrollTo)return this.args.scrollTo(e,t) let r=document.querySelector(`[aria-controls="ember-power-select-trigger-${t.uniqueId}"]`) if(!r)return -let n=(0,c.indexOfOption)(t.results,e) +let n=(0,u.indexOfOption)(t.results,e) if(-1===n)return let i=r.querySelectorAll("[data-option-index]").item(n) if(!i)return let o=i.offsetTop-r.offsetTop,s=o+i.offsetHeight s>r.offsetHeight+r.scrollTop?r.scrollTop=s-r.offsetHeight:o{this._lastSearchPromise===n&&(this._searchResult=e,this.loading=!1,this.lastSearchedText=r,this._resetHighlighted())})).catch((()=>{this._lastSearchPromise===n&&(this.loading=!1,this.lastSearchedText=r)}))):(this.lastSearchedText=r,this._searchResult=n,this._resetHighlighted())}_defaultBuildSelection(e){return e}_routeKeydown(e,t){return 38===t.keyCode||40===t.keyCode?this._handleKeyUpDown(e,t):13===t.keyCode?this._handleKeyEnter(e,t):9===t.keyCode?this._handleKeyTab(e,t):27===t.keyCode?this._handleKeyESC(e,t):void 0}_handleKeyTab(e,t){e.actions.close(t)}_handleKeyESC(e,t){e.actions.close(t)}_handleKeyEnter(e,t){if(e.isOpen&&void 0!==e.highlighted)return e.actions.choose(e.highlighted,t),t.stopImmediatePropagation(),!1}_handleKeySpace(e,t){null!==t.target&&["TEXTAREA","INPUT"].includes(t.target.nodeName)?t.stopImmediatePropagation():e.isOpen&&void 0!==e.highlighted&&(t.stopImmediatePropagation(),t.preventDefault(),e.actions.choose(e.highlighted,t))}_handleKeyUpDown(e,t){if(e.isOpen){t.preventDefault(),t.stopPropagation() -let r=40===t.keyCode?1:-1,n=(0,c.advanceSelectableOption)(e.results,e.highlighted,r) -e.actions.highlight(n),e.actions.scrollTo(n)}else e.actions.open(t)}_resetHighlighted(){let e,t=this.args.defaultHighlighted||c.defaultHighlighted -e="function"==typeof t?t({results:this.results,highlighted:this.highlighted,selected:this.selected}):t,this._highlight(e)}_filter(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=R(this.args.matcher||c.defaultMatcher,c.defaultMatcher,this.args.searchField) -return(0,c.filterOptions)(e||[],t,n,r)}_updateIsActive(e){this.isActive=e}findWithOffset(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],i=R(this.args.typeAheadOptionMatcher||c.defaultTypeAheadMatcher,c.defaultTypeAheadMatcher,this.args.searchField) -return(0,c.findOptionWithOffset)(e||[],t,i,r,n)}*triggerTypingTask(e){let t,r=1,n=this._repeatingChar,i=e.keyCode -j(e)&&(i-=48) +n&&E(n)?(this.loading=!0,void 0!==this._lastSearchPromise&&M(this._lastSearchPromise)&&this._lastSearchPromise.cancel(),this._lastSearchPromise=n,n.then((e=>{this._lastSearchPromise===n&&(this._searchResult=e,this.loading=!1,this.lastSearchedText=r,(0,s.scheduleOnce)("actions",this,this._resetHighlighted))})).catch((()=>{this._lastSearchPromise===n&&(this.loading=!1,this.lastSearchedText=r)}))):(this.lastSearchedText=r,this._searchResult=n,(0,s.scheduleOnce)("actions",this,this._resetHighlighted))}_defaultBuildSelection(e){return e}_routeKeydown(e,t){return 38===t.keyCode||40===t.keyCode?this._handleKeyUpDown(e,t):13===t.keyCode?this._handleKeyEnter(e,t):9===t.keyCode?this._handleKeyTab(e,t):27===t.keyCode?this._handleKeyESC(e,t):void 0}_handleKeyTab(e,t){e.actions.close(t)}_handleKeyESC(e,t){e.actions.close(t)}_handleKeyEnter(e,t){if(e.isOpen&&void 0!==e.highlighted)return e.actions.choose(e.highlighted,t),t.stopImmediatePropagation(),!1}_handleKeySpace(e,t){null!==t.target&&["TEXTAREA","INPUT"].includes(t.target.nodeName)?t.stopImmediatePropagation():e.isOpen&&void 0!==e.highlighted&&(t.stopImmediatePropagation(),t.preventDefault(),e.actions.choose(e.highlighted,t))}_handleKeyUpDown(e,t){if(e.isOpen){t.preventDefault(),t.stopPropagation() +let r=40===t.keyCode?1:-1,n=(0,u.advanceSelectableOption)(e.results,e.highlighted,r) +e.actions.highlight(n),e.actions.scrollTo(n)}else e.actions.open(t)}_resetHighlighted(){let e,t=this.args.defaultHighlighted||u.defaultHighlighted +e="function"==typeof t?t({results:this.results,highlighted:this.highlighted,selected:this.selected}):t,this._highlight(e)}_filter(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=A(this.args.matcher||u.defaultMatcher,u.defaultMatcher,this.args.searchField) +return(0,u.filterOptions)(e||[],t,n,r)}_updateIsActive(e){this.isActive=e}findWithOffset(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],i=A(this.args.typeAheadOptionMatcher||u.defaultTypeAheadMatcher,u.defaultTypeAheadMatcher,this.args.searchField) +return(0,u.findOptionWithOffset)(e||[],t,i,r,n)}*triggerTypingTask(e){let t,r=1,n=this._repeatingChar,i=e.keyCode +R(e)&&(i-=48) let o=String.fromCharCode(i) -t=o===this._repeatingChar?o:this._expirableSearchText+o,t.length>1?(r=0,n=""):n=o,this.storedAPI.isOpen&&this.storedAPI.highlighted?r+=(0,c.indexOfOption)(this.storedAPI.options,this.storedAPI.highlighted):!this.storedAPI.isOpen&&this.selected?r+=(0,c.indexOfOption)(this.storedAPI.options,this.selected):r=0,this._expirableSearchText=this._expirableSearchText+o,this._repeatingChar=n +t=o===this._repeatingChar?o:this._expirableSearchText+o,t.length>1?(r=0,n=""):n=o,this.storedAPI.isOpen&&this.storedAPI.highlighted?r+=(0,u.indexOfOption)(this.storedAPI.options,this.storedAPI.highlighted):!this.storedAPI.isOpen&&this.selected?r+=(0,u.indexOfOption)(this.storedAPI.options,this.selected):r=0,this._expirableSearchText=this._expirableSearchText+o,this._repeatingChar=n let s=this.findWithOffset(this.storedAPI.options,t,r,!0) -void 0!==s&&(this.storedAPI.isOpen?(this.storedAPI.actions.highlight(s),this.storedAPI.actions.scrollTo(s)):this.storedAPI.actions.select(s,e)),yield(0,h.timeout)(1e3),this._expirableSearchText="",this._repeatingChar=""}},f=T(p.prototype,"_resolvedOptions",[i.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m=T(p.prototype,"_resolvedSelected",[i.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),g=T(p.prototype,"_repeatingChar",[i.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return""}}),v=T(p.prototype,"_expirableSearchText",[i.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return""}}),b=T(p.prototype,"_searchResult",[i.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),y=T(p.prototype,"isActive",[i.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return!1}}),_=T(p.prototype,"loading",[i.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return!1}}),w=T(p.prototype,"searchText",[i.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return""}}),O=T(p.prototype,"lastSearchedText",[i.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return""}}),x=T(p.prototype,"highlighted",[i.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),T(p.prototype,"handleOpen",[o.action],Object.getOwnPropertyDescriptor(p.prototype,"handleOpen"),p.prototype),T(p.prototype,"handleClose",[o.action],Object.getOwnPropertyDescriptor(p.prototype,"handleClose"),p.prototype),T(p.prototype,"handleInput",[o.action],Object.getOwnPropertyDescriptor(p.prototype,"handleInput"),p.prototype),T(p.prototype,"handleKeydown",[o.action],Object.getOwnPropertyDescriptor(p.prototype,"handleKeydown"),p.prototype),T(p.prototype,"handleTriggerKeydown",[o.action],Object.getOwnPropertyDescriptor(p.prototype,"handleTriggerKeydown"),p.prototype),T(p.prototype,"handleFocus",[o.action],Object.getOwnPropertyDescriptor(p.prototype,"handleFocus"),p.prototype),T(p.prototype,"handleBlur",[o.action],Object.getOwnPropertyDescriptor(p.prototype,"handleBlur"),p.prototype),T(p.prototype,"_search",[o.action],Object.getOwnPropertyDescriptor(p.prototype,"_search"),p.prototype),T(p.prototype,"_updateOptions",[o.action],Object.getOwnPropertyDescriptor(p.prototype,"_updateOptions"),p.prototype),T(p.prototype,"_updateHighlighted",[o.action],Object.getOwnPropertyDescriptor(p.prototype,"_updateHighlighted"),p.prototype),T(p.prototype,"_updateSelected",[o.action],Object.getOwnPropertyDescriptor(p.prototype,"_updateSelected"),p.prototype),T(p.prototype,"_highlight",[o.action],Object.getOwnPropertyDescriptor(p.prototype,"_highlight"),p.prototype),T(p.prototype,"_select",[o.action],Object.getOwnPropertyDescriptor(p.prototype,"_select"),p.prototype),T(p.prototype,"_choose",[o.action],Object.getOwnPropertyDescriptor(p.prototype,"_choose"),p.prototype),T(p.prototype,"_scrollTo",[o.action],Object.getOwnPropertyDescriptor(p.prototype,"_scrollTo"),p.prototype),T(p.prototype,"_registerAPI",[o.action],Object.getOwnPropertyDescriptor(p.prototype,"_registerAPI"),p.prototype),T(p.prototype,"_performSearch",[o.action],Object.getOwnPropertyDescriptor(p.prototype,"_performSearch"),p.prototype),T(p.prototype,"triggerTypingTask",[d.restartableTask],Object.getOwnPropertyDescriptor(p.prototype,"triggerTypingTask"),p.prototype),p) -function R(e,t,r){return r&&e===t?(t,n)=>e((0,o.get)(t,r),n):(t,r)=>e(t,r)}function j(e){return e.keyCode>=96&&e.keyCode<=105}e.default=A -const I=e=>"function"==typeof e.toArray?e.toArray():e;(0,t.setComponentTemplate)(E,A)})),define("ember-power-select/components/power-select/before-options",["exports","@ember/component","@ember/template-factory","@glimmer/component","@ember/runloop","@ember/object"],(function(e,t,r,n,i,o){"use strict" +void 0!==s&&(this.storedAPI.isOpen?(this.storedAPI.actions.highlight(s),this.storedAPI.actions.scrollTo(s)):this.storedAPI.actions.select(s,e)),yield(0,d.timeout)(1e3),this._expirableSearchText="",this._repeatingChar=""}},f=P(p.prototype,"_resolvedOptions",[n.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m=P(p.prototype,"_resolvedSelected",[n.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),g=P(p.prototype,"_repeatingChar",[n.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return""}}),v=P(p.prototype,"_expirableSearchText",[n.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return""}}),b=P(p.prototype,"_searchResult",[n.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),y=P(p.prototype,"isActive",[n.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return!1}}),_=P(p.prototype,"loading",[n.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return!1}}),w=P(p.prototype,"searchText",[n.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return""}}),O=P(p.prototype,"lastSearchedText",[n.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return""}}),x=P(p.prototype,"highlighted",[n.tracked],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),P(p.prototype,"handleOpen",[i.action],Object.getOwnPropertyDescriptor(p.prototype,"handleOpen"),p.prototype),P(p.prototype,"handleClose",[i.action],Object.getOwnPropertyDescriptor(p.prototype,"handleClose"),p.prototype),P(p.prototype,"handleInput",[i.action],Object.getOwnPropertyDescriptor(p.prototype,"handleInput"),p.prototype),P(p.prototype,"handleKeydown",[i.action],Object.getOwnPropertyDescriptor(p.prototype,"handleKeydown"),p.prototype),P(p.prototype,"handleTriggerKeydown",[i.action],Object.getOwnPropertyDescriptor(p.prototype,"handleTriggerKeydown"),p.prototype),P(p.prototype,"handleFocus",[i.action],Object.getOwnPropertyDescriptor(p.prototype,"handleFocus"),p.prototype),P(p.prototype,"handleBlur",[i.action],Object.getOwnPropertyDescriptor(p.prototype,"handleBlur"),p.prototype),P(p.prototype,"_search",[i.action],Object.getOwnPropertyDescriptor(p.prototype,"_search"),p.prototype),P(p.prototype,"_updateOptions",[i.action],Object.getOwnPropertyDescriptor(p.prototype,"_updateOptions"),p.prototype),P(p.prototype,"_updateHighlighted",[i.action],Object.getOwnPropertyDescriptor(p.prototype,"_updateHighlighted"),p.prototype),P(p.prototype,"_updateSelected",[i.action],Object.getOwnPropertyDescriptor(p.prototype,"_updateSelected"),p.prototype),P(p.prototype,"_highlight",[i.action],Object.getOwnPropertyDescriptor(p.prototype,"_highlight"),p.prototype),P(p.prototype,"_select",[i.action],Object.getOwnPropertyDescriptor(p.prototype,"_select"),p.prototype),P(p.prototype,"_choose",[i.action],Object.getOwnPropertyDescriptor(p.prototype,"_choose"),p.prototype),P(p.prototype,"_scrollTo",[i.action],Object.getOwnPropertyDescriptor(p.prototype,"_scrollTo"),p.prototype),P(p.prototype,"_registerAPI",[i.action],Object.getOwnPropertyDescriptor(p.prototype,"_registerAPI"),p.prototype),P(p.prototype,"_performSearch",[i.action],Object.getOwnPropertyDescriptor(p.prototype,"_performSearch"),p.prototype),P(p.prototype,"triggerTypingTask",[c.restartableTask],Object.getOwnPropertyDescriptor(p.prototype,"triggerTypingTask"),p.prototype),p) +function A(e,t,r){return r&&e===t?(t,n)=>e((0,i.get)(t,r),n):(t,r)=>e(t,r)}function R(e){return e.keyCode>=96&&e.keyCode<=105}e.default=j +const I=e=>"function"==typeof e.toArray?e.toArray():e;(0,t.setComponentTemplate)(k,j)})),define("ember-power-select/components/power-select/before-options",["exports","@ember/component","@glimmer/component","@ember/runloop","@ember/object","@ember/template-factory"],(function(e,t,r,n,i,o){"use strict" var s function a(e,t,r,n,i){var o={} return Object.keys(n).forEach((function(e){o[e]=n[e]})),o.enumerable=!!o.enumerable,o.configurable=!!o.configurable,("value"in o||o.initializer)&&(o.writable=!0),o=r.slice().reverse().reduce((function(r,n){return n(e,t,r)||r}),o),i&&void 0!==o.initializer&&(o.value=o.initializer?o.initializer.call(i):void 0,o.initializer=void 0),void 0===o.initializer&&(Object.defineProperty(e,t,o),o=null),o}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const l=(0,r.createTemplateFactory)({id:"LXEg2yDD",block:'[[[41,[30,1],[[[1," "],[10,0],[14,0,"ember-power-select-search"],[12],[1,"\\n "],[11,"input"],[24,"autocomplete","off"],[24,"autocorrect","off"],[24,"autocapitalize","off"],[16,"spellcheck",false],[24,"role","combobox"],[24,0,"ember-power-select-search-input"],[16,2,[30,2,["searchText"]]],[16,"aria-controls",[30,3]],[16,"placeholder",[30,4]],[24,4,"search"],[4,[38,1],["input",[30,5]],null],[4,[38,1],["focus",[30,6]],null],[4,[38,1],["blur",[30,7]],null],[4,[38,1],["keydown",[30,0,["handleKeydown"]]],null],[4,[38,2],[[30,0,["focusInput"]]],null],[4,[38,3],[[30,0,["clearSearch"]]],null],[12],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null]],["@searchEnabled","@select","@listboxId","@searchPlaceholder","@onInput","@onFocus","@onBlur"],false,["if","on","did-insert","will-destroy"]]',moduleName:"ember-power-select/components/power-select/before-options.hbs",isStrictMode:!1}) -let u=(a((s=class extends n.default{clearSearch(){(0,i.scheduleOnce)("actions",this.args.select.actions,"search","")}handleKeydown(e){if(!1===this.args.onKeydown(e))return!1 -13===e.keyCode&&this.args.select.actions.close(e)}focusInput(e){(0,i.later)((()=>{!1!==this.args.autofocus&&e.focus()}),0)}}).prototype,"clearSearch",[o.action],Object.getOwnPropertyDescriptor(s.prototype,"clearSearch"),s.prototype),a(s.prototype,"handleKeydown",[o.action],Object.getOwnPropertyDescriptor(s.prototype,"handleKeydown"),s.prototype),a(s.prototype,"focusInput",[o.action],Object.getOwnPropertyDescriptor(s.prototype,"focusInput"),s.prototype),s) -e.default=u,(0,t.setComponentTemplate)(l,u)})),define("ember-power-select/components/power-select/no-matches-message",["exports","@ember/component","@ember/template-factory","@ember/component/template-only"],(function(e,t,r,n){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const i=(0,r.createTemplateFactory)({id:"0m0XHejb",block:'[[[41,[30,1],[[[1," "],[10,"ul"],[14,0,"ember-power-select-options"],[14,"role","listbox"],[12],[1,"\\n "],[10,"li"],[14,0,"ember-power-select-option ember-power-select-option--no-matches-message"],[14,"role","option"],[12],[1,"\\n "],[1,[30,1]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null]],["@noMatchesMessage"],false,["if"]]',moduleName:"ember-power-select/components/power-select/no-matches-message.hbs",isStrictMode:!1}) -var o=(0,t.setComponentTemplate)(i,(0,n.default)()) -e.default=o})),define("ember-power-select/components/power-select/options",["exports","@ember/component","@ember/template-factory","@glimmer/component","@ember/object"],(function(e,t,r,n,i){"use strict" +const l=(0,o.createTemplateFactory)({id:"BY/k4OwQ",block:'[[[41,[30,1],[[[1," "],[10,0],[14,0,"ember-power-select-search"],[12],[1,"\\n "],[11,"input"],[24,"autocomplete","off"],[24,"autocorrect","off"],[24,"autocapitalize","off"],[16,"spellcheck",false],[24,"role","combobox"],[24,0,"ember-power-select-search-input"],[16,2,[30,2,["searchText"]]],[16,"aria-controls",[30,3]],[16,"placeholder",[30,4]],[24,4,"search"],[4,[38,1],["input",[30,5]],null],[4,[38,1],["focus",[30,6]],null],[4,[38,1],["blur",[30,7]],null],[4,[38,1],["keydown",[30,0,["handleKeydown"]]],null],[4,[38,2],[[30,0,["focusInput"]]],null],[4,[38,3],[[30,0,["clearSearch"]]],null],[12],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null]],["@searchEnabled","@select","@listboxId","@searchPlaceholder","@onInput","@onFocus","@onBlur"],false,["if","on","did-insert","will-destroy"]]',moduleName:"ember-power-select/components/power-select/before-options.hbs",isStrictMode:!1}) +let u=(a((s=class extends r.default{clearSearch(){(0,n.scheduleOnce)("actions",this.args.select.actions,"search","")}handleKeydown(e){if(!1===this.args.onKeydown(e))return!1 +13===e.keyCode&&this.args.select.actions.close(e)}focusInput(e){(0,n.later)((()=>{!1!==this.args.autofocus&&e.focus()}),0)}}).prototype,"clearSearch",[i.action],Object.getOwnPropertyDescriptor(s.prototype,"clearSearch"),s.prototype),a(s.prototype,"handleKeydown",[i.action],Object.getOwnPropertyDescriptor(s.prototype,"handleKeydown"),s.prototype),a(s.prototype,"focusInput",[i.action],Object.getOwnPropertyDescriptor(s.prototype,"focusInput"),s.prototype),s) +e.default=u,(0,t.setComponentTemplate)(l,u)})),define("ember-power-select/components/power-select/no-matches-message",["exports","@ember/component","@ember/component/template-only","@ember/template-factory"],(function(e,t,r,n){"use strict" +Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +const i=(0,n.createTemplateFactory)({id:"fr/GNGvq",block:'[[[41,[30,1],[[[1," "],[10,"ul"],[14,0,"ember-power-select-options"],[14,"role","listbox"],[12],[1,"\\n "],[10,"li"],[14,0,"ember-power-select-option ember-power-select-option--no-matches-message"],[14,"role","option"],[12],[1,"\\n "],[1,[30,1]],[1,"\\n "],[13],[1,"\\n "],[13],[1,"\\n"]],[]],null]],["@noMatchesMessage"],false,["if"]]',moduleName:"ember-power-select/components/power-select/no-matches-message.hbs",isStrictMode:!1}) +var o=(0,t.setComponentTemplate)(i,(0,r.default)()) +e.default=o})),define("ember-power-select/components/power-select/options",["exports","@ember/component","@glimmer/component","@ember/object","@ember/template-factory"],(function(e,t,r,n,i){"use strict" var o -function s(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t,r,n,i){var o={} +function s(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var r=e[Symbol.toPrimitive] +if(void 0!==r){var n=r.call(e,t||"default") +if("object"!=typeof n)return n +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t,r,n,i){var o={} return Object.keys(n).forEach((function(e){o[e]=n[e]})),o.enumerable=!!o.enumerable,o.configurable=!!o.configurable,("value"in o||o.initializer)&&(o.writable=!0),o=r.slice().reverse().reduce((function(r,n){return n(e,t,r)||r}),o),i&&void 0!==o.initializer&&(o.value=o.initializer?o.initializer.call(i):void 0,o.initializer=void 0),void 0===o.initializer&&(Object.defineProperty(e,t,o),o=null),o}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const l=(0,r.createTemplateFactory)({id:"A7yva44C",block:'[[[11,"ul"],[24,"role","listbox"],[16,"aria-controls",[29,["ember-power-select-trigger-",[30,1,["uniqueId"]]]]],[17,2],[4,[38,0],[[30,0,["addHandlers"]]],null],[4,[38,1],[[30,0,["removeHandlers"]]],null],[12],[1,"\\n"],[41,[30,1,["loading"]],[[[41,[30,3],[[[1," "],[10,"li"],[14,0,"ember-power-select-option ember-power-select-option--loading-message"],[14,"role","option"],[12],[1,[30,3]],[13],[1,"\\n"]],[]],null]],[]],null],[44,[[50,[30,4],0,null,null],[50,[30,5],0,null,null]],[[[42,[28,[37,6],[[28,[37,6],[[30,8]],null]],null],null,[[[41,[28,[37,7],[[30,9]],null],[[[1," "],[8,[30,6],null,[["@group","@select","@extra"],[[30,9],[30,1],[30,11]]],[["default"],[[[[1,"\\n "],[8,[30,7],[[24,"role","group"],[24,0,"ember-power-select-options"]],[["@options","@select","@groupIndex","@optionsComponent","@groupComponent","@extra"],[[30,9,["options"]],[30,1],[29,[[30,12],[30,10],"."]],[30,5],[30,4],[30,11]]],[["default"],[[[[1,"\\n "],[18,14,[[30,13],[30,1]]],[1,"\\n "]],[13]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],[[[1," "],[10,"li"],[14,0,"ember-power-select-option"],[15,"aria-selected",[29,[[28,[37,9],[[30,9],[30,1,["selected"]]],null]]]],[15,"aria-disabled",[52,[30,9,["disabled"]],"true"]],[15,"aria-current",[29,[[28,[37,10],[[30,9],[30,1,["highlighted"]]],null]]]],[15,"data-option-index",[29,[[30,12],[30,10]]]],[15,"role",[52,[28,[37,10],[[30,9],[30,1,["highlighted"]]],null],"alert","option"]],[12],[1,"\\n "],[18,14,[[30,9],[30,1]]],[1,"\\n "],[13],[1,"\\n"]],[]]]],[9,10]],null]],[6,7]]],[13],[1,"\\n"]],["@select","&attrs","@loadingMessage","@groupComponent","@optionsComponent","Group","Options","@options","opt","index","@extra","@groupIndex","option","&default"],false,["did-insert","will-destroy","if","let","component","each","-track-array","ember-power-select-is-group","yield","ember-power-select-is-selected","eq"]]',moduleName:"ember-power-select/components/power-select/options.hbs",isStrictMode:!1}),u=!!window&&"ontouchstart"in window +const l=(0,i.createTemplateFactory)({id:"hSgQnEj8",block:'[[[11,"ul"],[24,"role","listbox"],[16,"aria-controls",[29,["ember-power-select-trigger-",[30,1,["uniqueId"]]]]],[17,2],[4,[38,0],[[30,0,["addHandlers"]]],null],[4,[38,1],[[30,0,["removeHandlers"]]],null],[12],[1,"\\n"],[41,[30,1,["loading"]],[[[41,[30,3],[[[1," "],[10,"li"],[14,0,"ember-power-select-option ember-power-select-option--loading-message"],[14,"role","option"],[12],[1,[30,3]],[13],[1,"\\n"]],[]],null]],[]],null],[44,[[50,[30,4],0,null,null],[50,[30,5],0,null,null]],[[[42,[28,[37,6],[[28,[37,6],[[30,8]],null]],null],null,[[[41,[28,[37,7],[[30,9]],null],[[[1," "],[8,[30,6],null,[["@group","@select","@extra"],[[30,9],[30,1],[30,11]]],[["default"],[[[[1,"\\n "],[8,[30,7],[[24,"role","group"],[24,0,"ember-power-select-options"]],[["@options","@select","@groupIndex","@optionsComponent","@groupComponent","@extra"],[[30,9,["options"]],[30,1],[29,[[30,12],[30,10],"."]],[30,5],[30,4],[30,11]]],[["default"],[[[[1,"\\n "],[18,14,[[30,13],[30,1]]],[1,"\\n "]],[13]]]]],[1,"\\n "]],[]]]]],[1,"\\n"]],[]],[[[1," "],[10,"li"],[14,0,"ember-power-select-option"],[15,"aria-selected",[29,[[28,[37,9],[[30,9],[30,1,["selected"]]],null]]]],[15,"aria-disabled",[52,[30,9,["disabled"]],"true"]],[15,"aria-current",[29,[[28,[37,10],[[30,9],[30,1,["highlighted"]]],null]]]],[15,"data-option-index",[29,[[30,12],[30,10]]]],[15,"role",[52,[28,[37,10],[[30,9],[30,1,["highlighted"]]],null],"alert","option"]],[12],[1,"\\n "],[18,14,[[30,9],[30,1]]],[1,"\\n "],[13],[1,"\\n"]],[]]]],[9,10]],null]],[6,7]]],[13],[1,"\\n"]],["@select","&attrs","@loadingMessage","@groupComponent","@optionsComponent","Group","Options","@options","opt","index","@extra","@groupIndex","option","&default"],false,["did-insert","will-destroy","if","let","component","each","-track-array","ember-power-select-is-group","yield","ember-power-select-is-selected","eq"]]',moduleName:"ember-power-select/components/power-select/options.hbs",isStrictMode:!1}),u=!!window&&"ontouchstart"in window var c "undefined"==typeof FastBoot&&("function"!=typeof(c=window.Element.prototype).matches&&(c.matches=c.msMatchesSelector||c.mozMatchesSelector||c.webkitMatchesSelector),"function"!=typeof c.closest&&(c.closest=function(e){let t=this for(;null!==t&&1===t.nodeType;){if(t.matches(e))return t t=t.parentNode}return null})) -let d=(o=class extends n.default{constructor(){super(...arguments),s(this,"isTouchDevice",u),s(this,"hasMoved",!1),s(this,"mouseOverHandler",(e=>{})),s(this,"mouseUpHandler",(e=>{})),s(this,"touchEndHandler",(e=>{})),s(this,"touchMoveHandler",(e=>{})),s(this,"touchStartHandler",(e=>{}))}addHandlers(e){let t=e.getAttribute("role") +let d=(o=class extends r.default{constructor(){super(...arguments),s(this,"isTouchDevice",u),s(this,"hasMoved",!1),s(this,"mouseOverHandler",(e=>{})),s(this,"mouseUpHandler",(e=>{})),s(this,"touchEndHandler",(e=>{})),s(this,"touchMoveHandler",(e=>{})),s(this,"touchStartHandler",(e=>{}))}addHandlers(e){let t=e.getAttribute("role") if("group"===t)return -let r=(e,t,r)=>{if(null===r.target)return -let n=r.target.closest("[data-option-index]") -if(!n)return -if(n.closest("[aria-disabled=true]"))return -let i=n.getAttribute("data-option-index") -null!==i&&e(this._optionFromIndex(i),t,r)} -this.mouseUpHandler=e=>r(this.args.select.actions.choose,this.args.select,e),e.addEventListener("mouseup",this.mouseUpHandler),this.args.highlightOnHover&&(this.mouseOverHandler=e=>r(this.args.select.actions.highlight,this.args.select,e),e.addEventListener("mouseover",this.mouseOverHandler)),this.isTouchDevice&&(this.touchMoveHandler=t=>{this.hasMoved=!0,e&&e.removeEventListener("touchmove",this.touchMoveHandler)},this.touchStartHandler=t=>{e.addEventListener("touchmove",this.touchMoveHandler)},this.touchEndHandler=e=>{if(null===e.target)return +let r=(e,t)=>{if(null===t.target)return +let r=t.target.closest("[data-option-index]") +if(!r)return +if(r.closest("[aria-disabled=true]"))return +let n=r.getAttribute("data-option-index") +null!==n&&e(this._optionFromIndex(n),t)} +this.mouseUpHandler=e=>r(this.args.select.actions.choose,e),e.addEventListener("mouseup",this.mouseUpHandler),this.args.highlightOnHover&&(this.mouseOverHandler=e=>r(this.args.select.actions.highlight,e),e.addEventListener("mouseover",this.mouseOverHandler)),this.isTouchDevice&&(this.touchMoveHandler=t=>{this.hasMoved=!0,e&&e.removeEventListener("touchmove",this.touchMoveHandler)},this.touchStartHandler=t=>{e.addEventListener("touchmove",this.touchMoveHandler)},this.touchEndHandler=e=>{if(null===e.target)return let t=e.target.closest("[data-option-index]") if(null===t)return if(e.preventDefault(),this.hasMoved)return void(this.hasMoved=!1) @@ -10158,34 +10955,34 @@ if(t.closest("[aria-disabled=true]"))return let r=t.getAttribute("data-option-index") null!==r&&this.args.select.actions.choose(this._optionFromIndex(r),e)},e.addEventListener("touchstart",this.touchStartHandler),e.addEventListener("touchend",this.touchEndHandler)),"group"!==t&&this.args.select.actions.scrollTo(this.args.select.highlighted)}removeHandlers(e){e.removeEventListener("mouseup",this.mouseUpHandler),e.removeEventListener("mouseover",this.mouseOverHandler),e.removeEventListener("touchstart",this.touchStartHandler),e.removeEventListener("touchmove",this.touchMoveHandler),e.removeEventListener("touchend",this.touchEndHandler)}_optionFromIndex(e){let t=e.split("."),r=this.args.options[parseInt(t[0],10)] for(let n=1;ne,set:(t,r)=>void 0===r?e:r})}})),define("ember-power-select/utils/group-utils",["exports","@ember/array","@ember/object"],(function(e,t,r){"use strict" @@ -10205,18 +11002,18 @@ if(t)return t}else{if(i===t)return{disabled:s||!!(0,r.get)(l,"disabled"),option: i++}a++}}(e,!1)||{disabled:!1,option:void 0}}function a(e,t){let r={groupName:e.groupName,options:t} return e.hasOwnProperty("disabled")&&(r.disabled=e.disabled),r}function l(e,t,r){let n=i(e),a=Math.min(Math.max(o(e,t)+r,0),n-1),{disabled:l,option:u}=s(e,a) for(;u&&l;){let t=s(e,a+=r) -l=t.disabled,u=t.option}return u}Object.defineProperty(e,"__esModule",{value:!0}),e.isGroup=n,e.countOptions=i,e.indexOfOption=o,e.optionAtIndex=s,e.findOptionWithOffset=function(e,t,i,o){let s,a=arguments.length>4&&void 0!==arguments[4]&&arguments[4],l=0,u=!1,c=()=>!!u +l=t.disabled,u=t.option}return u}Object.defineProperty(e,"__esModule",{value:!0}),e.advanceSelectableOption=l,e.countOptions=i,e.defaultHighlighted=function(e){let{results:t,highlighted:r,selected:n}=e,i=r||n +if(void 0===i||-1===o(t,i))return l(t,i,1) +return i},e.defaultMatcher=function(e,t){return c(e).toUpperCase().indexOf(c(t).toUpperCase())},e.defaultTypeAheadMatcher=function(e,t){return c(e).toUpperCase().startsWith(c(t).toUpperCase())?1:-1},e.filterOptions=function e(i,o,s){let l=arguments.length>3&&void 0!==arguments[3]&&arguments[3],u=(0,t.A)(),c=(0,r.get)(i,"length") +for(let t=0;t0&&u.push(a(c,t))}else s(c,o)>=0&&u.push(c)}return u},e.findOptionWithOffset=function(e,t,i,o){let s,a=arguments.length>4&&void 0!==arguments[4]&&arguments[4],l=0,u=!1,c=()=>!!u return function e(d,h){let p=(0,r.get)(d,"length") for(let f=0;f=0?(l3&&void 0!==arguments[3]&&arguments[3],u=(0,t.A)(),c=(0,r.get)(i,"length") -for(let t=0;t0&&u.push(a(c,t))}else s(c,o)>=0&&u.push(c)}return u},e.defaultHighlighted=function(e){let{results:t,highlighted:r,selected:n}=e,i=r||n -if(void 0===i||-1===o(t,i))return l(t,i,1) -return i},e.advanceSelectableOption=l,e.stripDiacritics=c,e.defaultMatcher=function(e,t){return c(e).toUpperCase().indexOf(c(t).toUpperCase())},e.defaultTypeAheadMatcher=function(e,t){return c(e).toUpperCase().startsWith(c(t).toUpperCase())?1:-1} +if(c())return}}}(e,!1),u||s},e.indexOfOption=o,e.isGroup=n,e.optionAtIndex=s,e.stripDiacritics=c const u={"Ⓐ":"A","A":"A","À":"A","Á":"A","Â":"A","Ầ":"A","Ấ":"A","Ẫ":"A","Ẩ":"A","Ã":"A","Ā":"A","Ă":"A","Ằ":"A","Ắ":"A","Ẵ":"A","Ẳ":"A","Ȧ":"A","Ǡ":"A","Ä":"A","Ǟ":"A","Ả":"A","Å":"A","Ǻ":"A","Ǎ":"A","Ȁ":"A","Ȃ":"A","Ạ":"A","Ậ":"A","Ặ":"A","Ḁ":"A","Ą":"A","Ⱥ":"A","Ɐ":"A","Ꜳ":"AA","Æ":"AE","Ǽ":"AE","Ǣ":"AE","Ꜵ":"AO","Ꜷ":"AU","Ꜹ":"AV","Ꜻ":"AV","Ꜽ":"AY","Ⓑ":"B","B":"B","Ḃ":"B","Ḅ":"B","Ḇ":"B","Ƀ":"B","Ƃ":"B","Ɓ":"B","Ⓒ":"C","C":"C","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","Ç":"C","Ḉ":"C","Ƈ":"C","Ȼ":"C","Ꜿ":"C","Ⓓ":"D","D":"D","Ḋ":"D","Ď":"D","Ḍ":"D","Ḑ":"D","Ḓ":"D","Ḏ":"D","Đ":"D","Ƌ":"D","Ɗ":"D","Ɖ":"D","Ꝺ":"D","DZ":"DZ","DŽ":"DZ","Dz":"Dz","Dž":"Dz","Ⓔ":"E","E":"E","È":"E","É":"E","Ê":"E","Ề":"E","Ế":"E","Ễ":"E","Ể":"E","Ẽ":"E","Ē":"E","Ḕ":"E","Ḗ":"E","Ĕ":"E","Ė":"E","Ë":"E","Ẻ":"E","Ě":"E","Ȅ":"E","Ȇ":"E","Ẹ":"E","Ệ":"E","Ȩ":"E","Ḝ":"E","Ę":"E","Ḙ":"E","Ḛ":"E","Ɛ":"E","Ǝ":"E","Ⓕ":"F","F":"F","Ḟ":"F","Ƒ":"F","Ꝼ":"F","Ⓖ":"G","G":"G","Ǵ":"G","Ĝ":"G","Ḡ":"G","Ğ":"G","Ġ":"G","Ǧ":"G","Ģ":"G","Ǥ":"G","Ɠ":"G","Ꞡ":"G","Ᵹ":"G","Ꝿ":"G","Ⓗ":"H","H":"H","Ĥ":"H","Ḣ":"H","Ḧ":"H","Ȟ":"H","Ḥ":"H","Ḩ":"H","Ḫ":"H","Ħ":"H","Ⱨ":"H","Ⱶ":"H","Ɥ":"H","Ⓘ":"I","I":"I","Ì":"I","Í":"I","Î":"I","Ĩ":"I","Ī":"I","Ĭ":"I","İ":"I","Ï":"I","Ḯ":"I","Ỉ":"I","Ǐ":"I","Ȉ":"I","Ȋ":"I","Ị":"I","Į":"I","Ḭ":"I","Ɨ":"I","Ⓙ":"J","J":"J","Ĵ":"J","Ɉ":"J","Ⓚ":"K","K":"K","Ḱ":"K","Ǩ":"K","Ḳ":"K","Ķ":"K","Ḵ":"K","Ƙ":"K","Ⱪ":"K","Ꝁ":"K","Ꝃ":"K","Ꝅ":"K","Ꞣ":"K","Ⓛ":"L","L":"L","Ŀ":"L","Ĺ":"L","Ľ":"L","Ḷ":"L","Ḹ":"L","Ļ":"L","Ḽ":"L","Ḻ":"L","Ł":"L","Ƚ":"L","Ɫ":"L","Ⱡ":"L","Ꝉ":"L","Ꝇ":"L","Ꞁ":"L","LJ":"LJ","Lj":"Lj","Ⓜ":"M","M":"M","Ḿ":"M","Ṁ":"M","Ṃ":"M","Ɱ":"M","Ɯ":"M","Ⓝ":"N","N":"N","Ǹ":"N","Ń":"N","Ñ":"N","Ṅ":"N","Ň":"N","Ṇ":"N","Ņ":"N","Ṋ":"N","Ṉ":"N","Ƞ":"N","Ɲ":"N","Ꞑ":"N","Ꞥ":"N","NJ":"NJ","Nj":"Nj","Ⓞ":"O","O":"O","Ò":"O","Ó":"O","Ô":"O","Ồ":"O","Ố":"O","Ỗ":"O","Ổ":"O","Õ":"O","Ṍ":"O","Ȭ":"O","Ṏ":"O","Ō":"O","Ṑ":"O","Ṓ":"O","Ŏ":"O","Ȯ":"O","Ȱ":"O","Ö":"O","Ȫ":"O","Ỏ":"O","Ő":"O","Ǒ":"O","Ȍ":"O","Ȏ":"O","Ơ":"O","Ờ":"O","Ớ":"O","Ỡ":"O","Ở":"O","Ợ":"O","Ọ":"O","Ộ":"O","Ǫ":"O","Ǭ":"O","Ø":"O","Ǿ":"O","Ɔ":"O","Ɵ":"O","Ꝋ":"O","Ꝍ":"O","Ƣ":"OI","Ꝏ":"OO","Ȣ":"OU","Ⓟ":"P","P":"P","Ṕ":"P","Ṗ":"P","Ƥ":"P","Ᵽ":"P","Ꝑ":"P","Ꝓ":"P","Ꝕ":"P","Ⓠ":"Q","Q":"Q","Ꝗ":"Q","Ꝙ":"Q","Ɋ":"Q","Ⓡ":"R","R":"R","Ŕ":"R","Ṙ":"R","Ř":"R","Ȑ":"R","Ȓ":"R","Ṛ":"R","Ṝ":"R","Ŗ":"R","Ṟ":"R","Ɍ":"R","Ɽ":"R","Ꝛ":"R","Ꞧ":"R","Ꞃ":"R","Ⓢ":"S","S":"S","ẞ":"S","Ś":"S","Ṥ":"S","Ŝ":"S","Ṡ":"S","Š":"S","Ṧ":"S","Ṣ":"S","Ṩ":"S","Ș":"S","Ş":"S","Ȿ":"S","Ꞩ":"S","Ꞅ":"S","Ⓣ":"T","T":"T","Ṫ":"T","Ť":"T","Ṭ":"T","Ț":"T","Ţ":"T","Ṱ":"T","Ṯ":"T","Ŧ":"T","Ƭ":"T","Ʈ":"T","Ⱦ":"T","Ꞇ":"T","Ꜩ":"TZ","Ⓤ":"U","U":"U","Ù":"U","Ú":"U","Û":"U","Ũ":"U","Ṹ":"U","Ū":"U","Ṻ":"U","Ŭ":"U","Ü":"U","Ǜ":"U","Ǘ":"U","Ǖ":"U","Ǚ":"U","Ủ":"U","Ů":"U","Ű":"U","Ǔ":"U","Ȕ":"U","Ȗ":"U","Ư":"U","Ừ":"U","Ứ":"U","Ữ":"U","Ử":"U","Ự":"U","Ụ":"U","Ṳ":"U","Ų":"U","Ṷ":"U","Ṵ":"U","Ʉ":"U","Ⓥ":"V","V":"V","Ṽ":"V","Ṿ":"V","Ʋ":"V","Ꝟ":"V","Ʌ":"V","Ꝡ":"VY","Ⓦ":"W","W":"W","Ẁ":"W","Ẃ":"W","Ŵ":"W","Ẇ":"W","Ẅ":"W","Ẉ":"W","Ⱳ":"W","Ⓧ":"X","X":"X","Ẋ":"X","Ẍ":"X","Ⓨ":"Y","Y":"Y","Ỳ":"Y","Ý":"Y","Ŷ":"Y","Ỹ":"Y","Ȳ":"Y","Ẏ":"Y","Ÿ":"Y","Ỷ":"Y","Ỵ":"Y","Ƴ":"Y","Ɏ":"Y","Ỿ":"Y","Ⓩ":"Z","Z":"Z","Ź":"Z","Ẑ":"Z","Ż":"Z","Ž":"Z","Ẓ":"Z","Ẕ":"Z","Ƶ":"Z","Ȥ":"Z","Ɀ":"Z","Ⱬ":"Z","Ꝣ":"Z","ⓐ":"a","a":"a","ẚ":"a","à":"a","á":"a","â":"a","ầ":"a","ấ":"a","ẫ":"a","ẩ":"a","ã":"a","ā":"a","ă":"a","ằ":"a","ắ":"a","ẵ":"a","ẳ":"a","ȧ":"a","ǡ":"a","ä":"a","ǟ":"a","ả":"a","å":"a","ǻ":"a","ǎ":"a","ȁ":"a","ȃ":"a","ạ":"a","ậ":"a","ặ":"a","ḁ":"a","ą":"a","ⱥ":"a","ɐ":"a","ꜳ":"aa","æ":"ae","ǽ":"ae","ǣ":"ae","ꜵ":"ao","ꜷ":"au","ꜹ":"av","ꜻ":"av","ꜽ":"ay","ⓑ":"b","b":"b","ḃ":"b","ḅ":"b","ḇ":"b","ƀ":"b","ƃ":"b","ɓ":"b","ⓒ":"c","c":"c","ć":"c","ĉ":"c","ċ":"c","č":"c","ç":"c","ḉ":"c","ƈ":"c","ȼ":"c","ꜿ":"c","ↄ":"c","ⓓ":"d","d":"d","ḋ":"d","ď":"d","ḍ":"d","ḑ":"d","ḓ":"d","ḏ":"d","đ":"d","ƌ":"d","ɖ":"d","ɗ":"d","ꝺ":"d","dz":"dz","dž":"dz","ⓔ":"e","e":"e","è":"e","é":"e","ê":"e","ề":"e","ế":"e","ễ":"e","ể":"e","ẽ":"e","ē":"e","ḕ":"e","ḗ":"e","ĕ":"e","ė":"e","ë":"e","ẻ":"e","ě":"e","ȅ":"e","ȇ":"e","ẹ":"e","ệ":"e","ȩ":"e","ḝ":"e","ę":"e","ḙ":"e","ḛ":"e","ɇ":"e","ɛ":"e","ǝ":"e","ⓕ":"f","f":"f","ḟ":"f","ƒ":"f","ꝼ":"f","ⓖ":"g","g":"g","ǵ":"g","ĝ":"g","ḡ":"g","ğ":"g","ġ":"g","ǧ":"g","ģ":"g","ǥ":"g","ɠ":"g","ꞡ":"g","ᵹ":"g","ꝿ":"g","ⓗ":"h","h":"h","ĥ":"h","ḣ":"h","ḧ":"h","ȟ":"h","ḥ":"h","ḩ":"h","ḫ":"h","ẖ":"h","ħ":"h","ⱨ":"h","ⱶ":"h","ɥ":"h","ƕ":"hv","ⓘ":"i","i":"i","ì":"i","í":"i","î":"i","ĩ":"i","ī":"i","ĭ":"i","ï":"i","ḯ":"i","ỉ":"i","ǐ":"i","ȉ":"i","ȋ":"i","ị":"i","į":"i","ḭ":"i","ɨ":"i","ı":"i","ⓙ":"j","j":"j","ĵ":"j","ǰ":"j","ɉ":"j","ⓚ":"k","k":"k","ḱ":"k","ǩ":"k","ḳ":"k","ķ":"k","ḵ":"k","ƙ":"k","ⱪ":"k","ꝁ":"k","ꝃ":"k","ꝅ":"k","ꞣ":"k","ⓛ":"l","l":"l","ŀ":"l","ĺ":"l","ľ":"l","ḷ":"l","ḹ":"l","ļ":"l","ḽ":"l","ḻ":"l","ſ":"l","ł":"l","ƚ":"l","ɫ":"l","ⱡ":"l","ꝉ":"l","ꞁ":"l","ꝇ":"l","lj":"lj","ⓜ":"m","m":"m","ḿ":"m","ṁ":"m","ṃ":"m","ɱ":"m","ɯ":"m","ⓝ":"n","n":"n","ǹ":"n","ń":"n","ñ":"n","ṅ":"n","ň":"n","ṇ":"n","ņ":"n","ṋ":"n","ṉ":"n","ƞ":"n","ɲ":"n","ʼn":"n","ꞑ":"n","ꞥ":"n","nj":"nj","ⓞ":"o","o":"o","ò":"o","ó":"o","ô":"o","ồ":"o","ố":"o","ỗ":"o","ổ":"o","õ":"o","ṍ":"o","ȭ":"o","ṏ":"o","ō":"o","ṑ":"o","ṓ":"o","ŏ":"o","ȯ":"o","ȱ":"o","ö":"o","ȫ":"o","ỏ":"o","ő":"o","ǒ":"o","ȍ":"o","ȏ":"o","ơ":"o","ờ":"o","ớ":"o","ỡ":"o","ở":"o","ợ":"o","ọ":"o","ộ":"o","ǫ":"o","ǭ":"o","ø":"o","ǿ":"o","ɔ":"o","ꝋ":"o","ꝍ":"o","ɵ":"o","ƣ":"oi","ȣ":"ou","ꝏ":"oo","ⓟ":"p","p":"p","ṕ":"p","ṗ":"p","ƥ":"p","ᵽ":"p","ꝑ":"p","ꝓ":"p","ꝕ":"p","ⓠ":"q","q":"q","ɋ":"q","ꝗ":"q","ꝙ":"q","ⓡ":"r","r":"r","ŕ":"r","ṙ":"r","ř":"r","ȑ":"r","ȓ":"r","ṛ":"r","ṝ":"r","ŗ":"r","ṟ":"r","ɍ":"r","ɽ":"r","ꝛ":"r","ꞧ":"r","ꞃ":"r","ⓢ":"s","s":"s","ß":"s","ś":"s","ṥ":"s","ŝ":"s","ṡ":"s","š":"s","ṧ":"s","ṣ":"s","ṩ":"s","ș":"s","ş":"s","ȿ":"s","ꞩ":"s","ꞅ":"s","ẛ":"s","ⓣ":"t","t":"t","ṫ":"t","ẗ":"t","ť":"t","ṭ":"t","ț":"t","ţ":"t","ṱ":"t","ṯ":"t","ŧ":"t","ƭ":"t","ʈ":"t","ⱦ":"t","ꞇ":"t","ꜩ":"tz","ⓤ":"u","u":"u","ù":"u","ú":"u","û":"u","ũ":"u","ṹ":"u","ū":"u","ṻ":"u","ŭ":"u","ü":"u","ǜ":"u","ǘ":"u","ǖ":"u","ǚ":"u","ủ":"u","ů":"u","ű":"u","ǔ":"u","ȕ":"u","ȗ":"u","ư":"u","ừ":"u","ứ":"u","ữ":"u","ử":"u","ự":"u","ụ":"u","ṳ":"u","ų":"u","ṷ":"u","ṵ":"u","ʉ":"u","ⓥ":"v","v":"v","ṽ":"v","ṿ":"v","ʋ":"v","ꝟ":"v","ʌ":"v","ꝡ":"vy","ⓦ":"w","w":"w","ẁ":"w","ẃ":"w","ŵ":"w","ẇ":"w","ẅ":"w","ẘ":"w","ẉ":"w","ⱳ":"w","ⓧ":"x","x":"x","ẋ":"x","ẍ":"x","ⓨ":"y","y":"y","ỳ":"y","ý":"y","ŷ":"y","ỹ":"y","ȳ":"y","ẏ":"y","ÿ":"y","ỷ":"y","ẙ":"y","ỵ":"y","ƴ":"y","ɏ":"y","ỿ":"y","ⓩ":"z","z":"z","ź":"z","ẑ":"z","ż":"z","ž":"z","ẓ":"z","ẕ":"z","ƶ":"z","ȥ":"z","ɀ":"z","ⱬ":"z","ꝣ":"z","Ά":"Α","Έ":"Ε","Ή":"Η","Ί":"Ι","Ϊ":"Ι","Ό":"Ο","Ύ":"Υ","Ϋ":"Υ","Ώ":"Ω","ά":"α","έ":"ε","ή":"η","ί":"ι","ϊ":"ι","ΐ":"ι","ό":"ο","ύ":"υ","ϋ":"υ","ΰ":"υ","ω":"ω","ς":"σ"} function c(e){return`${e}`.replace(/[^\u0000-\u007E]/g,(function(e){return u[e]||e}))}})),define("ember-raf-scheduler/index",["exports","@ember/runloop","@ember/debug"],(function(e,t,r){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.scheduler=e.Scheduler=e.Token=void 0 +Object.defineProperty(e,"__esModule",{value:!0}),e.scheduler=e.default=e.Token=e.Scheduler=void 0 class n{constructor(e){this._parent=e,this._cancelled=!1}get cancelled(){return this._cancelled||(this._cancelled=!!this._parent&&this._parent.cancelled)}cancel(){this._cancelled=!0}}e.Token=n class i{constructor(){this.sync=[],this.layout=[],this.measure=[],this.affect=[],this.jobs=0,this._nextFlush=null,this.ticks=0}schedule(e,t,r){this.jobs++ let i=new n(r) @@ -10229,19 +11026,27 @@ const o=new i e.scheduler=o var s=o e.default=s})),define("ember-ref-bucket/helpers/ref-to",["exports","@ember/component/helper","ember-ref-bucket/utils/ref","@ember/destroyable","@ember/application"],(function(e,t,r,n,i){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class o extends t.default{constructor(){var e,t,r -super(...arguments),r=null,(t="_watcher")in(e=this)?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r}compute(e,t){let[o]=e,{bucket:s,tracked:a}=t +function o(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var r=e[Symbol.toPrimitive] +if(void 0!==r){var n=r.call(e,t||"default") +if("object"!=typeof n)return n +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class s extends t.default{constructor(){super(...arguments),o(this,"_watcher",null)}compute(e,t){let[o]=e,{bucket:s,tracked:a}=t const l=s||(0,i.getOwner)(this) -return this._name!==o&&(this._watcher&&(0,n.unregisterDestructor)(this,this._watcher),this._watcher=(0,r.watchFor)(o,l,(()=>{this.recompute()})),(0,n.registerDestructor)(this,this._watcher),this._name=o),a?(0,r.bucketFor)(l).getTracked(o):(0,r.bucketFor)(l).get(o)}}e.default=o})) -define("ember-ref-bucket/index",["exports","ember-ref-bucket/utils/ref","@ember/application","ember-ref-bucket/utils/prototype-reference"],(function(e,t,r,n){"use strict" -function i(e,t,r,n){return null==e?null:"function"==typeof r?(t.has(e)||t.set(e,r.call(n,e)),t.get(e)):e}Object.defineProperty(e,"__esModule",{value:!0}),e.nodeFor=function(e,r){return(0,t.bucketFor)(e).get(r)},e.ref=function(e,r){return function(o,s){const a=new WeakMap -return"function"==typeof r&&(0,n.addPrototypeReference)(o,s,e),{get(){return i((0,t.bucketFor)(this).get(e),a,r,this)}}}},e.globalRef=function(e,o){return function(s,a){const l=new WeakMap -return"function"==typeof o&&(0,n.addPrototypeReference)(s,a,e),{get(){return i((0,t.bucketFor)((0,r.getOwner)(this)||(0,t.resolveGlobalRef)()).get(e),l,o,this)}}}},e.trackedRef=function(e,r){return function(o,s){const a=new WeakMap -return"function"==typeof r&&(0,n.addPrototypeReference)(o,s,e),{get(){return i((0,t.bucketFor)(this).getTracked(e),a,r,this)}}}},e.trackedGlobalRef=function(e,o){return function(s,a){const l=new WeakMap -return"function"==typeof o&&(0,n.addPrototypeReference)(s,a,e),{get(){return i((0,t.bucketFor)((0,r.getOwner)(this)||(0,t.resolveGlobalRef)()).getTracked(e),l,o,this)}}}},Object.defineProperty(e,"registerNodeDestructor",{enumerable:!0,get:function(){return t.registerNodeDestructor}}),Object.defineProperty(e,"unregisterNodeDestructor",{enumerable:!0,get:function(){return t.unregisterNodeDestructor}})})),define("ember-ref-bucket/modifiers/create-ref",["exports","ember-modifier","@ember/application","@ember/object","@ember/debug","ember-ref-bucket/utils/ref","ember-ref-bucket/utils/prototype-reference","@ember/destroyable"],(function(e,t,r,n,i,o,s,a){"use strict" +return this._name!==o&&(this._watcher&&(0,n.unregisterDestructor)(this,this._watcher),this._watcher=(0,r.watchFor)(o,l,(()=>{this.recompute()})),(0,n.registerDestructor)(this,this._watcher),this._name=o),a?(0,r.bucketFor)(l).getTracked(o):(0,r.bucketFor)(l).get(o)}}e.default=s})),define("ember-ref-bucket/index",["exports","ember-ref-bucket/utils/ref","@ember/application","ember-ref-bucket/utils/prototype-reference"],(function(e,t,r,n){"use strict" +function i(e,t,r,n){return null==e?null:"function"==typeof r?(t.has(e)||t.set(e,r.call(n,e)),t.get(e)):e}Object.defineProperty(e,"__esModule",{value:!0}),e.globalRef=function(e,o){return function(s,a){const l=new WeakMap +return"function"==typeof o&&(0,n.addPrototypeReference)(s,a,e),{get(){return i((0,t.bucketFor)((0,r.getOwner)(this)||(0,t.resolveGlobalRef)()).get(e),l,o,this)}}}},e.nodeFor=function(e,r){return(0,t.bucketFor)(e).get(r)},e.ref=function(e,r){return function(o,s){const a=new WeakMap +return"function"==typeof r&&(0,n.addPrototypeReference)(o,s,e),{get(){return i((0,t.bucketFor)(this).get(e),a,r,this)}}}},Object.defineProperty(e,"registerNodeDestructor",{enumerable:!0,get:function(){return t.registerNodeDestructor}}),e.trackedGlobalRef=function(e,o){return function(s,a){const l=new WeakMap +return"function"==typeof o&&(0,n.addPrototypeReference)(s,a,e),{get(){return i((0,t.bucketFor)((0,r.getOwner)(this)||(0,t.resolveGlobalRef)()).getTracked(e),l,o,this)}}}},e.trackedRef=function(e,r){return function(o,s){const a=new WeakMap +return"function"==typeof r&&(0,n.addPrototypeReference)(o,s,e),{get(){return i((0,t.bucketFor)(this).getTracked(e),a,r,this)}}}},Object.defineProperty(e,"unregisterNodeDestructor",{enumerable:!0,get:function(){return t.unregisterNodeDestructor}})})),define("ember-ref-bucket/modifiers/create-ref",["exports","ember-modifier","@ember/application","@ember/object","@ember/debug","ember-ref-bucket/utils/ref","ember-ref-bucket/utils/prototype-reference","@ember/destroyable"],(function(e,t,r,n,i,o,s,a){"use strict" var l -function u(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +function u(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var r=e[Symbol.toPrimitive] +if(void 0!==r){var n=r.call(e,t||"default") +if("object"!=typeof n)return n +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 let c=(l=class extends t.default{constructor(){super(...arguments),u(this,"_key",void 0),u(this,"_ctx",void 0),u(this,"_element",void 0),u(this,"defaultMutationObserverOptions",{attributes:!1,characterData:!1,childList:!1,subtree:!1}),(0,o.setGlobalRef)((0,r.getOwner)(this)),(0,a.registerDestructor)(this,(()=>{this.cleanMutationObservers(),this.cleanResizeObservers(),(0,o.getNodeDestructors)(this._element).forEach((e=>e()))}))}markDirty(){(0,o.bucketFor)(this._ctx).dirtyTrackedCell(this._key)}cleanMutationObservers(){this._mutationsObserver&&this._mutationsObserver.disconnect()}cleanResizeObservers(){this._resizeObserver&&this._resizeObserver.unobserve(this.element)}installMutationObservers(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{} this._mutationsObserver=new MutationObserver(this.markDirty) const t=this.getObserverOptions(e) @@ -10261,9 +11066,9 @@ for(;n.__proto__;)if(n=n.__proto__,t.has(n)){let e=t.get(n) if(r in e)return Array.from(e[r])}return[]} const t=new WeakMap})),define("ember-ref-bucket/utils/ref",["exports","@ember/destroyable","@glimmer/tracking"],(function(e,t,r){"use strict" var n,i -Object.defineProperty(e,"__esModule",{value:!0}),e.setGlobalRef=function(e){o=e},e.resolveGlobalRef=function(){return o},e.getNodeDestructors=function(e){return a.get(e)||[]},e.registerNodeDestructor=function(e,t){a.has(e)||a.set(e,[]) -a.get(e).push(t)},e.unregisterNodeDestructor=function(e,t){const r=a.get(e)||[] -a.set(e,r.filter((e=>e!==t)))},e.bucketFor=m,e.watchFor=function(e,t,r){return m(t).addNotificationFor(e,r)} +Object.defineProperty(e,"__esModule",{value:!0}),e.bucketFor=m,e.getNodeDestructors=function(e){return a.get(e)||[]},e.registerNodeDestructor=function(e,t){a.has(e)||a.set(e,[]) +a.get(e).push(t)},e.resolveGlobalRef=function(){return o},e.setGlobalRef=function(e){o=e},e.unregisterNodeDestructor=function(e,t){const r=a.get(e)||[] +a.set(e,r.filter((e=>e!==t)))},e.watchFor=function(e,t,r){return m(t).addNotificationFor(e,r)} let o=null const s=new WeakMap,a=new WeakMap let l=(n=class{constructor(){var e,t,r,n @@ -10272,23 +11077,38 @@ var u,c,d,h,p,f function m(e){const r=e if(!s.has(r)){if(s.set(r,{bucket:{},keys:{},createTrackedCell(e){e in this.keys||(this.keys[e]=new l)},get(e){return this.createTrackedCell(e),this.bucket[e]||null},dirtyTrackedCell(e){this.createTrackedCell(e) const t=this.keys[e].value -this.keys[e].value=t},getTracked(e){return this.createTrackedCell(e),this.keys[e].value},add(e,t){this.createTrackedCell(e),this.keys[e].value=t,this.bucket[e]=t,e in this.notificationsFor||(this.notificationsFor[e]=[]),this.notificationsFor[e].forEach((e=>e()))},addNotificationFor(e,t){return e in this.notificationsFor||(this.notificationsFor[e]=[]),this.notificationsFor[e].push(t),()=>{this.notificationsFor[e]=this.notificationsFor[e].filter((e=>e!=e))}},notificationsFor:{}}),(0,t.isDestroyed)(r)||(0,t.isDestroying)(r))try{return s.get(r)}finally{s.delete(r)}(0,t.registerDestructor)(r,(()=>{s.delete(r)}))}return s.get(r)}})),define("ember-render-helpers/helpers/did-insert",["exports","@ember/component/helper","@ember/debug"],(function(e,t,r){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{constructor(){var e,t,r -super(...arguments),r=!1,(t="didRun")in(e=this)?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r}compute(e,t){const r=e[0] -this.didRun||(this.didRun=!0,r(e.slice(1),t))}}e.default=n})),define("ember-render-helpers/helpers/did-update",["exports","@ember/component/helper","@ember/debug"],(function(e,t,r){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{constructor(){var e,t,r -super(...arguments),r=!1,(t="didRun")in(e=this)?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r}compute(e,t){const r=e[0] +this.keys[e].value=t},getTracked(e){return this.createTrackedCell(e),this.keys[e].value},add(e,t){this.createTrackedCell(e),this.keys[e].value=t,this.bucket[e]=t,e in this.notificationsFor||(this.notificationsFor[e]=[]),this.notificationsFor[e].forEach((e=>e()))},addNotificationFor(e,t){return e in this.notificationsFor||(this.notificationsFor[e]=[]),this.notificationsFor[e].push(t),()=>{this.notificationsFor[e]=this.notificationsFor[e].filter((e=>e!=e))}},notificationsFor:{}}),(0,t.isDestroyed)(r)||(0,t.isDestroying)(r))try{return s.get(r)}finally{s.delete(r)}(0,t.registerDestructor)(r,(()=>{s.delete(r)}))}return s.get(r)}})) +define("ember-render-helpers/helpers/did-insert",["exports","@ember/component/helper","@ember/debug"],(function(e,t,r){"use strict" +function n(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var r=e[Symbol.toPrimitive] +if(void 0!==r){var n=r.call(e,t||"default") +if("object"!=typeof n)return n +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class i extends t.default{constructor(){super(...arguments),n(this,"didRun",!1)}compute(e,t){const r=e[0] +this.didRun||(this.didRun=!0,r(e.slice(1),t))}}e.default=i})),define("ember-render-helpers/helpers/did-update",["exports","@ember/component/helper","@ember/debug"],(function(e,t,r){"use strict" +function n(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var r=e[Symbol.toPrimitive] +if(void 0!==r){var n=r.call(e,t||"default") +if("object"!=typeof n)return n +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class i extends t.default{constructor(){super(...arguments),n(this,"didRun",!1)}compute(e,t){const r=e[0] if(!this.didRun)return this.didRun=!0,e.forEach((()=>{})),void Object.values(t) -r(e.slice(1),t)}}e.default=n})),define("ember-render-helpers/helpers/will-destroy",["exports","@ember/component/helper","@ember/debug"],(function(e,t,r){"use strict" -function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +r(e.slice(1),t)}}e.default=i})),define("ember-render-helpers/helpers/will-destroy",["exports","@ember/component/helper","@ember/debug"],(function(e,t,r){"use strict" +function n(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var r=e[Symbol.toPrimitive] +if(void 0!==r){var n=r.call(e,t||"default") +if("object"!=typeof n)return n +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 class i extends t.default{constructor(){super(...arguments),n(this,"fn",void 0),n(this,"positional",void 0),n(this,"named",void 0)}compute(e,t){const r=e[0] this.fn=r,this.positional=e.slice(1),this.named=t}willDestroy(){if(this.fn&&this.positional&&this.named){const{fn:e}=this -e(this.positional,this.named)}super.willDestroy()}}e.default=i})),define("ember-render-helpers/types",[],(function(){})),define("ember-resize-observer-service/services/resize-observer",["exports","@ember/service","@ember/object","@ember/debug","ember-resize-observer-service/utils/ignore-ro-error"],(function(e,t,r,n,i){"use strict" +e(this.positional,this.named)}super.willDestroy()}}e.default=i})),define("ember-render-helpers/types",["exports"],(function(e){"use strict" +Object.defineProperty(e,"__esModule",{value:!0})})),define("ember-resize-observer-service/services/resize-observer",["exports","@ember/service","@ember/object","@ember/debug","ember-resize-observer-service/utils/ignore-ro-error"],(function(e,t,r,n,i){"use strict" var o Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let s=(o=class extends t.default{init(){super.init(...arguments),this.setup()}setup(){this.callbacks=null,this.observer=null,"undefined"==typeof FastBoot&&"undefined"!=typeof window&&window.ResizeObserver&&((0,i.default)(),this.callbacks=new WeakMap,this.observer=new window.ResizeObserver(this.handleResize))}get isEnabled(){return!!this.observer}observe(e,t){if(!this.isEnabled)return +let s=(o=class extends t.default{constructor(){super(...arguments),this._setup()}_setup(){this.callbacks=null,this.observer=null,"undefined"==typeof FastBoot&&"undefined"!=typeof window&&window.ResizeObserver&&((0,i.default)(),this.callbacks=new WeakMap,this.observer=new window.ResizeObserver(this.handleResize))}get isEnabled(){return!!this.observer}observe(e,t){if(!this.isEnabled)return const r=this.callbacks.get(e) r?r.add(t):(this.callbacks.set(e,new Set([t])),this.observer.observe(e))}unobserve(e,t){if(!this.isEnabled)return const r=this.callbacks.get(e) @@ -10298,10 +11118,10 @@ var a,l,u,c,d,h e.default=s})),define("ember-resize-observer-service/utils/ignore-ro-error",["exports"],(function(e){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){if("function"!=typeof window.onerror)return const e=window.onerror -window.onerror=function(r){if(r===t)return!0 +window.onerror=function(r){if(t.includes(r))return!0 for(var n=arguments.length,i=new Array(n>1?n-1:0),o=1;othis.portalService.registerPortal(this.args.target)))}get target(){return this.args.target&&this.portalService.getTarget(this.args.target)}get renderInPlace(){return!0===this.args.renderInPlace||!this.target&&"inplace"===this.args.fallback}willDestroy(){super.willDestroy(),(0,o.next)((()=>this.portalService.unregisterPortal(this.args.target)))}},d=a.prototype,h="portalService",p=[s],f={configurable:!0,enumerable:!0,writable:!0,initializer:null},g={},Object.keys(f).forEach((function(e){g[e]=f[e]})),g.enumerable=!!g.enumerable,g.configurable=!!g.configurable,("value"in g||g.initializer)&&(g.writable=!0),g=p.slice().reverse().reduce((function(e,t){return t(d,h,e)||e}),g),m&&void 0!==g.initializer&&(g.value=g.initializer?g.initializer.call(m):void 0,g.initializer=void 0),void 0===g.initializer&&(Object.defineProperty(d,h,g),g=null),l=g,a) var d,h,p,f,m,g e.default=c,(0,t.setComponentTemplate)(u,c)})),define("ember-stargate/services/-portal",["exports","@ember/service","@ember/debug","tracked-maps-and-sets"],(function(e,t,r,n){"use strict" -function i(e,t){var r=function(e,t,r){if(!t.has(e))throw new TypeError("attempted to "+r+" private field on non-instance") +function i(e,t,r){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.set(e,r)}function o(e,t){var r=function(e,t,r){if(!t.has(e))throw new TypeError("attempted to "+r+" private field on non-instance") return t.get(e)}(e,t,"get") return function(e,t){if(t.get)return t.get.call(e) -return t.value}(e,r)}function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class s{constructor(e,t,r){var n -o(this,"name",void 0),o(this,"element",void 0),o(this,"multiple",void 0),o(this,"onChange",void 0),this.name=e,this.element=t,this.multiple=null!==(n=r.multiple)&&void 0!==n&&n,this.onChange=r.onChange}}var a=new WeakMap,l=new WeakMap -class u extends t.default{constructor(){super(...arguments),a.set(this,{writable:!0,value:new n.TrackedMap}),l.set(this,{writable:!0,value:new n.TrackedMap})}getTarget(e){return i(this,a).get(e)}getPortalCount(e){var t -return null!==(t=i(this,l).get(e))&&void 0!==t?t:0}registerTarget(e,t,r){i(this,a).set(e,new s(e,t,r))}unregisterTarget(e){i(this,a).delete(e)}registerPortal(e){var t -const r=(null!==(t=i(this,l).get(e))&&void 0!==t?t:0)+1 -i(this,l).set(e,r) +return t.value}(e,r)}function s(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var r=e[Symbol.toPrimitive] +if(void 0!==r){var n=r.call(e,t||"default") +if("object"!=typeof n)return n +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 +class a{constructor(e,t,r){var n +s(this,"name",void 0),s(this,"element",void 0),s(this,"multiple",void 0),s(this,"onChange",void 0),this.name=e,this.element=t,this.multiple=null!==(n=r.multiple)&&void 0!==n&&n,this.onChange=r.onChange}}var l=new WeakMap,u=new WeakMap +class c extends t.default{constructor(){super(...arguments),i(this,l,{writable:!0,value:new n.TrackedMap}),i(this,u,{writable:!0,value:new n.TrackedMap})}getTarget(e){return o(this,l).get(e)}getPortalCount(e){var t +return null!==(t=o(this,u).get(e))&&void 0!==t?t:0}registerTarget(e,t,r){o(this,l).set(e,new a(e,t,r))}unregisterTarget(e){o(this,l).delete(e)}registerPortal(e){var t +const r=(null!==(t=o(this,u).get(e))&&void 0!==t?t:0)+1 +o(this,u).set(e,r) const n=this.getTarget(e) n&&n.onChange&&n.onChange(r)}unregisterPortal(e){var t -let r=null!==(t=i(this,l).get(e))&&void 0!==t?t:0 -r--,i(this,l).set(e,r) +let r=null!==(t=o(this,u).get(e))&&void 0!==t?t:0 +r--,o(this,u).set(e,r) const n=this.getTarget(e) -n&&n.onChange&&n.onChange(r)}}e.default=u})) -define("ember-string-fns/helpers/string-char-at",["exports","@ember/component/helper"],(function(e,t){"use strict" +n&&n.onChange&&n.onChange(r)}}e.default=c})),define("ember-string-fns/helpers/string-char-at",["exports","@ember/component/helper"],(function(e,t){"use strict" function r(e){let[t="",r]=e -return t.charAt(r)}Object.defineProperty(e,"__esModule",{value:!0}),e.stringCharAt=r,e.default=void 0 +return t.charAt(r)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.stringCharAt=r var n=(0,t.helper)(r) e.default=n})),define("ember-string-fns/helpers/string-char-code-at",["exports","@ember/component/helper"],(function(e,t){"use strict" function r(e){let[t="",r]=e -return t.charCodeAt(r)}Object.defineProperty(e,"__esModule",{value:!0}),e.stringCharCodeAt=r,e.default=void 0 +return t.charCodeAt(r)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.stringCharCodeAt=r var n=(0,t.helper)(r) e.default=n})),define("ember-string-fns/helpers/string-code-point-at",["exports","@ember/component/helper"],(function(e,t){"use strict" function r(e){let[t="",r]=e -return t.codePointAt(r)}Object.defineProperty(e,"__esModule",{value:!0}),e.stringCodePointAt=r,e.default=void 0 +return t.codePointAt(r)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.stringCodePointAt=r var n=(0,t.helper)(r) e.default=n})),define("ember-string-fns/helpers/string-concat",["exports","@ember/component/helper"],(function(e,t){"use strict" function r(e){let[...t]=e -return t.reduce(((e,t)=>e+=t),"")}Object.defineProperty(e,"__esModule",{value:!0}),e.stringConcat=r,e.default=void 0 +return t.reduce(((e,t)=>e+=t),"")}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.stringConcat=r var n=(0,t.helper)(r) -e.default=n})),define("ember-string-fns/helpers/string-ends-with",["exports","@ember/component/helper"],(function(e,t){"use strict" +e.default=n})) +define("ember-string-fns/helpers/string-ends-with",["exports","@ember/component/helper"],(function(e,t){"use strict" function r(e){let[t,r,n=!1]=e,i=!1 if(t&&r){let e,o=t.length -o-=r.length,e=n?t.toLowerCase().indexOf(r.toLowerCase(),o):t.indexOf(r,o),i=-1!==e&&e===o}return i}Object.defineProperty(e,"__esModule",{value:!0}),e.stringEndsWith=r,e.default=void 0 +o-=r.length,e=n?t.toLowerCase().indexOf(r.toLowerCase(),o):t.indexOf(r,o),i=-1!==e&&e===o}return i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.stringEndsWith=r var n=(0,t.helper)(r) e.default=n})),define("ember-string-fns/helpers/string-equals",["exports","@ember/component/helper"],(function(e,t){"use strict" function r(e){let[...t]=e if(t.length<2)return!1 const r=t.shift() -return t.every((e=>e===r))}Object.defineProperty(e,"__esModule",{value:!0}),e.stringEquals=r,e.default=void 0 +return t.every((e=>e===r))}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.stringEquals=r var n=(0,t.helper)(r) e.default=n})),define("ember-string-fns/helpers/string-from-char-code",["exports","@ember/component/helper"],(function(e,t){"use strict" function r(e){let[...t]=e -return String.fromCharCode(...t)}Object.defineProperty(e,"__esModule",{value:!0}),e.stringFromCharCode=r,e.default=void 0 +return String.fromCharCode(...t)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.stringFromCharCode=r var n=(0,t.helper)(r) e.default=n})),define("ember-string-fns/helpers/string-from-code-point",["exports","@ember/component/helper"],(function(e,t){"use strict" function r(e){let[...t]=e -return String.fromCodePoint(...t)}Object.defineProperty(e,"__esModule",{value:!0}),e.stringFromCodePoint=r,e.default=void 0 +return String.fromCodePoint(...t)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.stringFromCodePoint=r var n=(0,t.helper)(r) e.default=n})),define("ember-string-fns/helpers/string-html-safe",["exports","@ember/component/helper"],(function(e,t){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 var r=(0,t.helper)((function(e){return e})) e.default=r})),define("ember-string-fns/helpers/string-includes",["exports","@ember/component/helper"],(function(e,t){"use strict" function r(e){let[t,r,n=!1]=e,i=!1 -return t&&r&&(i=n?-1!==t.toLowerCase().indexOf(r.toLowerCase()):-1!==t.indexOf(r)),i}Object.defineProperty(e,"__esModule",{value:!0}),e.stringIncludes=r,e.default=void 0 +return t&&r&&(i=n?-1!==t.toLowerCase().indexOf(r.toLowerCase()):-1!==t.indexOf(r)),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.stringIncludes=r var n=(0,t.helper)(r) e.default=n})),define("ember-string-fns/helpers/string-index-of",["exports","@ember/component/helper"],(function(e,t){"use strict" function r(e){let[t,r,n=!1]=e,i=-1 -return t&&r&&(i=n?t.toLowerCase().indexOf(r.toLowerCase()):t.indexOf(r)),i}Object.defineProperty(e,"__esModule",{value:!0}),e.stringIndexOf=r,e.default=void 0 +return t&&r&&(i=n?t.toLowerCase().indexOf(r.toLowerCase()):t.indexOf(r)),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.stringIndexOf=r var n=(0,t.helper)(r) e.default=n})),define("ember-string-fns/helpers/string-last-index-of",["exports","@ember/component/helper"],(function(e,t){"use strict" function r(e){let[t,r,n=!1]=e,i=-1 -return t&&r&&(i=n?t.toLowerCase().lastIndexOf(r.toLowerCase()):t.lastIndexOf(r)),i}Object.defineProperty(e,"__esModule",{value:!0}),e.stringLastIndexOf=r,e.default=void 0 +return t&&r&&(i=n?t.toLowerCase().lastIndexOf(r.toLowerCase()):t.lastIndexOf(r)),i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.stringLastIndexOf=r var n=(0,t.helper)(r) e.default=n})),define("ember-string-fns/helpers/string-not-equals",["exports","@ember/component/helper"],(function(e,t){"use strict" function r(e){let[...t]=e if(t.length<2)return!1 const r=t.shift() -return t.some((e=>e!==r))}Object.defineProperty(e,"__esModule",{value:!0}),e.stringNotEquals=r,e.default=void 0 +return t.some((e=>e!==r))}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.stringNotEquals=r var n=(0,t.helper)(r) e.default=n})),define("ember-string-fns/helpers/string-pad-end",["exports","@ember/component/helper"],(function(e,t){"use strict" function r(e){let[t="",r=" ",n=0]=e,i=t+"" if((r+"").length>0){for(;i.lengthn&&(i=i.substring(0,n))}return i}Object.defineProperty(e,"__esModule",{value:!0}),e.stringPadEnd=r,e.default=void 0 +i.length>n&&(i=i.substring(0,n))}return i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.stringPadEnd=r var n=(0,t.helper)(r) e.default=n})),define("ember-string-fns/helpers/string-pad-start",["exports","@ember/component/helper"],(function(e,t){"use strict" function r(e){let[t="",r=" ",n=0]=e,i=t+"" if((r+"").length>0){for(;i.lengthn&&(i=i.substring(i.length-n,i.length))}return i}Object.defineProperty(e,"__esModule",{value:!0}),e.stringPadStart=r,e.default=void 0 +i.length>n&&(i=i.substring(i.length-n,i.length))}return i}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.stringPadStart=r var n=(0,t.helper)(r) e.default=n})),define("ember-string-fns/helpers/string-repeat",["exports","@ember/component/helper"],(function(e,t){"use strict" function r(e){let[t="",r=0]=e,n="" for(let i=0;i0===t?e:`${e.charAt(0).toUpperCase()}${e.slice(1)}`)).join("")}Object.defineProperty(e,"__esModule",{value:!0}),e.stringToCamelCase=r,e.default=void 0 +return t.toLowerCase().split(" ").map(((e,t)=>0===t?e:`${e.charAt(0).toUpperCase()}${e.slice(1)}`)).join("")}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.stringToCamelCase=r var n=(0,t.helper)(r) e.default=n})),define("ember-string-fns/helpers/string-to-kebab-case",["exports","@ember/component/helper"],(function(e,t){"use strict" function r(e){let[t=""]=e -return t.toLowerCase().split(" ").join("-")}Object.defineProperty(e,"__esModule",{value:!0}),e.stringToKebabCase=r,e.default=void 0 +return t.toLowerCase().split(" ").join("-")}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.stringToKebabCase=r var n=(0,t.helper)(r) e.default=n})),define("ember-string-fns/helpers/string-to-lower-case",["exports","@ember/component/helper"],(function(e,t){"use strict" function r(e){let[t=""]=e -return t.toLowerCase()}Object.defineProperty(e,"__esModule",{value:!0}),e.stringToLowerCase=r,e.default=void 0 +return t.toLowerCase()}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.stringToLowerCase=r var n=(0,t.helper)(r) e.default=n})),define("ember-string-fns/helpers/string-to-pascal-case",["exports","@ember/component/helper"],(function(e,t){"use strict" function r(e){let[t=""]=e -return t.toLowerCase().split(" ").map((e=>`${e.charAt(0).toUpperCase()}${e.slice(1)}`)).join("")}Object.defineProperty(e,"__esModule",{value:!0}),e.stringToPascalCase=r,e.default=void 0 +return t.toLowerCase().split(" ").map((e=>`${e.charAt(0).toUpperCase()}${e.slice(1)}`)).join("")}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.stringToPascalCase=r var n=(0,t.helper)(r) e.default=n})),define("ember-string-fns/helpers/string-to-sentence-case",["exports","@ember/component/helper"],(function(e,t){"use strict" function r(e){let[t=""]=e -return t.toLowerCase().replace(/(^\s*\w|[.!?]\s*\w)/g,(e=>e.toUpperCase()))}Object.defineProperty(e,"__esModule",{value:!0}),e.stringToSentenceCase=r,e.default=void 0 +return t.toLowerCase().replace(/(^\s*\w|[.!?]\s*\w)/g,(e=>e.toUpperCase()))}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.stringToSentenceCase=r var n=(0,t.helper)(r) e.default=n})),define("ember-string-fns/helpers/string-to-snake-case",["exports","@ember/component/helper"],(function(e,t){"use strict" function r(e){let[t=""]=e -return t.toLowerCase().split(" ").join("_")}Object.defineProperty(e,"__esModule",{value:!0}),e.stringToSnakeCase=r,e.default=void 0 +return t.toLowerCase().split(" ").join("_")}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.stringToSnakeCase=r var n=(0,t.helper)(r) e.default=n})),define("ember-string-fns/helpers/string-to-title-case",["exports","@ember/component/helper"],(function(e,t){"use strict" function r(e){let[t=""]=e -return t.toLowerCase().split(" ").map((e=>`${e.charAt(0).toUpperCase()}${e.slice(1)}`)).join(" ")}Object.defineProperty(e,"__esModule",{value:!0}),e.stringToTitleCase=r,e.default=void 0 +return t.toLowerCase().split(" ").map((e=>`${e.charAt(0).toUpperCase()}${e.slice(1)}`)).join(" ")}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.stringToTitleCase=r var n=(0,t.helper)(r) e.default=n})),define("ember-string-fns/helpers/string-to-upper-case",["exports","@ember/component/helper"],(function(e,t){"use strict" function r(e){let[t=""]=e -return t.toUpperCase()}Object.defineProperty(e,"__esModule",{value:!0}),e.stringToUpperCase=r,e.default=void 0 +return t.toUpperCase()}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.stringToUpperCase=r var n=(0,t.helper)(r) -e.default=n})) -define("ember-string-fns/helpers/string-trim-end",["exports","@ember/component/helper"],(function(e,t){"use strict" +e.default=n})),define("ember-string-fns/helpers/string-trim-end",["exports","@ember/component/helper"],(function(e,t){"use strict" function r(e){let[t=""]=e -return t.replace(/\+|[\s\uFEFF\xA0]+$/g,"")}Object.defineProperty(e,"__esModule",{value:!0}),e.stringTrimEnd=r,e.default=void 0 +return t.replace(/\+|[\s\uFEFF\xA0]+$/g,"")}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.stringTrimEnd=r var n=(0,t.helper)(r) e.default=n})),define("ember-string-fns/helpers/string-trim-start",["exports","@ember/component/helper"],(function(e,t){"use strict" function r(e){let[t=""]=e -return t.replace(/^[\s\uFEFF\xA0]+/g,"")}Object.defineProperty(e,"__esModule",{value:!0}),e.stringTrimStart=r,e.default=void 0 +return t.replace(/^[\s\uFEFF\xA0]+/g,"")}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.stringTrimStart=r var n=(0,t.helper)(r) e.default=n})),define("ember-string-fns/helpers/string-trim",["exports","@ember/component/helper"],(function(e,t){"use strict" function r(e){let[t=""]=e -return t.trim()}Object.defineProperty(e,"__esModule",{value:!0}),e.stringTrim=r,e.default=void 0 +return t.trim()}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.stringTrim=r var n=(0,t.helper)(r) e.default=n})),define("ember-style-modifier/modifiers/style",["exports","ember-modifier","@ember/string","@ember/debug","@ember/utils"],(function(e,t,r,n,i){"use strict" function o(e){return"object"==typeof e&&Boolean(e)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 @@ -10598,7 +11422,8 @@ class s extends t.default{get styles(){const{positional:e,named:t}=this.args return[].concat(...[...e.filter(o),t].map((e=>Object.entries(e).map((e=>{let[t,n]=e return[(0,r.dasherize)(t),n]})))))}setStyles(e){const t=this._oldStyles||new Set e.forEach((e=>{let[n,i]=e,o="" -i&&i.includes("!important")&&(o="important",i=i.replace("!important","")),n=(0,r.dasherize)(n),this.element.style.setProperty(n,i,o),t.delete(n)})),t.forEach((e=>this.element.style.removeProperty(e))),this._oldStyles=new Set(e.map((e=>e[0])))}didReceiveArguments(){this.setStyles(this.styles)}}e.default=s})),define("ember-test-waiters/index",["exports","@ember/debug","@ember/test-waiters"],(function(e,t,r){"use strict" +i&&i.includes("!important")&&(o="important",i=i.replace("!important","")),n=(0,r.dasherize)(n),this.element.style.setProperty(n,i,o),t.delete(n)})),t.forEach((e=>this.element.style.removeProperty(e))),this._oldStyles=new Set(e.map((e=>e[0])))}didReceiveArguments(){this.setStyles(this.styles)}}e.default=s})) +define("ember-test-waiters/index",["exports","@ember/debug","@ember/test-waiters"],(function(e,t,r){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),Object.keys(r).forEach((function(t){"default"!==t&&"__esModule"!==t&&(t in e&&e[t]===r[t]||Object.defineProperty(e,t,{enumerable:!0,get:function(){return r[t]}}))}))})),define("ember-text-measurer/services/text-measurer",["exports","@ember/service"],(function(e,t){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 var r=t.default.extend({init(){this._super(...arguments),this.canvas=document.createElement("canvas"),this.ctx=this.canvas.getContext("2d")},width(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null @@ -10623,20 +11448,21 @@ class i{constructor(e,t){this._value=this._lastValue=e,this._isEqual=t}}function function n(e){for(let t=0,n=e.length;tn}Object.defineProperty(e,"__esModule",{value:!0}),e.gt=r,e.default=void 0 +return t.forceNumber&&("number"!=typeof r&&(r=Number(r)),"number"!=typeof n&&(n=Number(n))),r>n}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.gt=r var n=(0,t.helper)(r) e.default=n})),define("ember-truth-helpers/helpers/gte",["exports","@ember/component/helper"],(function(e,t){"use strict" function r(e,t){let[r,n]=e -return t.forceNumber&&("number"!=typeof r&&(r=Number(r)),"number"!=typeof n&&(n=Number(n))),r>=n}Object.defineProperty(e,"__esModule",{value:!0}),e.gte=r,e.default=void 0 +return t.forceNumber&&("number"!=typeof r&&(r=Number(r)),"number"!=typeof n&&(n=Number(n))),r>=n}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.gte=r var n=(0,t.helper)(r) e.default=n})),define("ember-truth-helpers/helpers/is-array",["exports","@ember/component/helper","@ember/array"],(function(e,t,r){"use strict" function n(e){for(let t=0,n=e.length;te||e>o)return(0,n.default)("inclusion",e,t)}return!0}})),define("ember-validators/index",["exports","@ember/debug","@ember/utils"],(function(e,t,r){"use strict" -function n(){return require("ember-validators/collection")}function i(){return require("ember-validators/confirmation")}function o(){return require("ember-validators/date")}function s(){return require("ember-validators/ds-error")}function a(){return require("ember-validators/exclusion")}function l(){return require("ember-validators/format")}function u(){return require("ember-validators/inclusion")}function c(){return require("ember-validators/length")}function d(){return require("ember-validators/messages")}function h(){return require("ember-validators/number")}function p(){return require("ember-validators/presence")}Object.defineProperty(e,"__esModule",{value:!0}),e.validate=function(e){let t -"collection"===e?t=n():"confirmation"===e?t=i():"date"===e?t=o():"ds-error"===e?t=s():"exclusion"===e?t=a():"format"===e?t=l():"inclusion"===e?t=u():"length"===e?t=c():"messages"===e?t=d():"number"===e?t=h():"presence"===e&&(t=p()) -for(var r=arguments.length,f=new Array(r>1?r-1:0),m=1;m1?r-1:0),i=1;iu))return(0,r.default)("between",e,n) if(!(0,t.isNone)(l)&&l>c)return(0,r.default)("tooShort",e,n) if(!(0,t.isNone)(u)&&u1&&void 0!==arguments[1]?arguments[1]:{}).description||this.defaultDescription},getMessageFor(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{} return this.formatMessage((0,t.get)(this,e),r)},formatMessage(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=e @@ -10745,7 +11571,8 @@ if("string"==typeof e&&!c)return(0,r.default)("notANumber",e,o) if(!function(e){return"number"==typeof e&&!isNaN(e)}(s))return(0,r.default)("notANumber",e,o) if(d&&!i(s))return(0,r.default)("notAnInteger",e,o) for(let t=0;tnew t.Promise((function(){throw new Error("The Torii adapter must implement `open` for a session to be opened")})),fetch:()=>new t.Promise((function(){throw new Error("The Torii adapter must implement `fetch` for a session to be fetched")})),close:()=>new t.Promise((function(){throw new Error("The Torii adapter must implement `close` for a session to be closed")}))}) e.default=n})),define("torii/bootstrap/routing",["exports","torii/routing/application-route-mixin","torii/routing/authenticated-route-mixin","torii/lib/container-utils"],(function(e,t,r,n){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,n){o(e,"route:application",t.default) -for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:[] -u.add(this),l.add(this),s.set(this,{writable:!0,value:(0,t.createStorage)(null,(()=>!1))}),a.set(this,{writable:!0,value:new Map}) -let p=e.slice(),f=this,m=new Map -return new Proxy(p,{get(e,a){let u=o(a) -if(null!==u)return n(f,l,d).call(f,u),(0,t.getValue)(r(f,s)),e[u] -if("length"===a)(0,t.getValue)(r(f,s)) -else if(i.has(a)){let n=m.get(a) -return void 0===n&&(n=function(){return(0,t.getValue)(r(f,s)),e[a](...arguments)},m.set(a,n)),n}return e[a]},set(e,i,a){e[i]=a -let l=o(i) -return null!==l?(n(f,u,h).call(f,l),(0,t.setValue)(r(f,s),null)):"length"===i&&(0,t.setValue)(r(f,s),null),!0},getPrototypeOf:()=>c.prototype})}}function d(e){const n=r(this,a) -let i=n.get(e) -void 0===i&&(i=(0,t.createStorage)(null,(()=>!1)),n.set(e,i)),(0,t.getValue)(i)}function h(e){const n=r(this,a).get(e) -n&&(0,t.setValue)(n,null)}var p=c -e.default=p,Object.setPrototypeOf(c.prototype,Array.prototype)})),define("tracked-built-ins/-private/decorator",["exports","@glimmer/tracking","@ember/debug","tracked-built-ins/-private/map","tracked-built-ins/-private/set","tracked-built-ins/-private/array","tracked-built-ins/-private/object"],(function(e,t,r,n,i,o,s){"use strict" +return isNaN(t)?null:t%1==0?t:null}var c=new WeakMap,d=new WeakMap,h=new WeakSet,p=new WeakSet +class f{static from(e,t,r){return new f(t?Array.from(e,t,r):Array.from(e))}static of(){for(var e=arguments.length,t=new Array(e),r=0;r0&&void 0!==arguments[0]?arguments[0]:[] +r(this,p),r(this,h),n(this,c,{writable:!0,value:(0,t.createStorage)(null,(()=>!1))}),n(this,d,{writable:!0,value:new Map}) +let i=e.slice(),v=this,b=new Map,y=!1 +return new Proxy(i,{get(e,r){let n=u(r) +if(null!==n)return s(v,h,m).call(v,n),(0,t.getValue)(o(v,c)),e[n] +if("length"===r)return y?y=!1:(0,t.getValue)(o(v,c)),e[r] +if(l.has(r)&&(y=!0),a.has(r)){let n=b.get(r) +return void 0===n&&(n=function(){return(0,t.getValue)(o(v,c)),e[r](...arguments)},b.set(r,n)),n}return e[r]},set(e,r,n){e[r]=n +let i=u(r) +return null!==i?(s(v,p,g).call(v,i),(0,t.setValue)(o(v,c),null)):"length"===r&&(0,t.setValue)(o(v,c),null),!0},getPrototypeOf:()=>f.prototype})}}function m(e){let r=o(this,d).get(e) +void 0===r&&(r=(0,t.createStorage)(null,(()=>!1)),o(this,d).set(e,r)),(0,t.getValue)(r)}function g(e){const r=o(this,d).get(e) +r&&(0,t.setValue)(r,null)}var v=f +e.default=v,Object.setPrototypeOf(f.prototype,Array.prototype)})),define("tracked-built-ins/-private/decorator",["exports","@glimmer/tracking","@ember/debug","tracked-built-ins/-private/map","tracked-built-ins/-private/set","tracked-built-ins/-private/array","tracked-built-ins/-private/object"],(function(e,t,r,n,i,o,s){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,r,a){if(void 0!==r&&void 0!==a)return(0,t.tracked)(e,r,a) if(Array.isArray(e))return new o.default(e) switch(e){case Object:return new s.default @@ -11070,7 +11896,12 @@ case WeakMap:return new n.TrackedWeakMap case Set:return new i.TrackedSet case WeakSet:return new i.TrackedWeakSet}return e instanceof Map?new n.TrackedMap(e):e instanceof WeakMap?new n.TrackedWeakMap:e instanceof Set?new i.TrackedSet(e):e instanceof WeakSet?new i.TrackedWeakSet:new s.default(e)}})),define("tracked-built-ins/-private/map",["exports","ember-tracked-storage-polyfill"],(function(e,t){"use strict" let r,n,i -function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}Object.defineProperty(e,"__esModule",{value:!0}),e.TrackedWeakMap=e.TrackedMap=void 0,r=Symbol.iterator,n=Symbol.toStringTag +function o(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var r=e[Symbol.toPrimitive] +if(void 0!==r){var n=r.call(e,t||"default") +if("object"!=typeof n)return n +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}Object.defineProperty(e,"__esModule",{value:!0}),e.TrackedWeakMap=e.TrackedMap=void 0,r=Symbol.iterator,n=Symbol.toStringTag class s{readStorageFor(e){const{storages:r}=this let n=r.get(e) void 0===n&&(n=(0,t.createStorage)(null,(()=>!1)),r.set(e,n)),(0,t.getValue)(n)}dirtyStorageFor(e){const r=this.storages.get(e) @@ -11079,23 +11910,27 @@ class a{readStorageFor(e){const{storages:r}=this let n=r.get(e) void 0===n&&(n=(0,t.createStorage)(null,(()=>!1)),r.set(e,n)),(0,t.getValue)(n)}dirtyStorageFor(e){const r=this.storages.get(e) r&&(0,t.setValue)(r,null)}constructor(e){o(this,"storages",new WeakMap),o(this,"vals",void 0),this.vals=e?new WeakMap(e):new WeakMap}get(e){return this.readStorageFor(e),this.vals.get(e)}has(e){return this.readStorageFor(e),this.vals.has(e)}set(e,t){return this.dirtyStorageFor(e),this.vals.set(e,t),this}delete(e){return this.dirtyStorageFor(e),this.vals.delete(e)}get[i](){return this.vals[Symbol.toStringTag]}}e.TrackedWeakMap=a,Object.setPrototypeOf(a.prototype,WeakMap.prototype)})),define("tracked-built-ins/-private/object",["exports","ember-tracked-storage-polyfill"],(function(e,t){"use strict" -function r(e,t){var r=function(e,t,r){if(!t.has(e))throw new TypeError("attempted to "+r+" private field on non-instance") +function r(e,t){i(e,t),t.add(e)}function n(e,t,r){i(e,t),t.set(e,r)}function i(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")}function o(e,t){var r=function(e,t,r){if(!t.has(e))throw new TypeError("attempted to "+r+" private field on non-instance") return t.get(e)}(e,t,"get") return function(e,t){if(t.get)return t.get.call(e) -return t.value}(e,r)}function n(e,t,r){if(!t.has(e))throw new TypeError("attempted to get private field on non-instance") +return t.value}(e,r)}function s(e,t,r){if(!t.has(e))throw new TypeError("attempted to get private field on non-instance") return r}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var i=new WeakMap,o=new WeakMap,s=new WeakSet,a=new WeakSet,l=new WeakSet -class u{static fromEntries(e){return new u(Object.fromEntries(e))}constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{} -l.add(this),a.add(this),s.add(this),i.set(this,{writable:!0,value:new Map}),o.set(this,{writable:!0,value:(0,t.createStorage)(null,(()=>!1))}) -let p=Object.getPrototypeOf(e),f=Object.getOwnPropertyDescriptors(e),m=Object.create(p) -for(let t in f)Object.defineProperty(m,t,f[t]) -let g=this -return new Proxy(m,{get:(e,t)=>(n(g,s,c).call(g,t),e[t]),has:(e,t)=>(n(g,s,c).call(g,t),t in e),ownKeys:e=>((0,t.getValue)(r(g,o)),Reflect.ownKeys(e)),set:(e,t,r)=>(e[t]=r,n(g,a,d).call(g,t),n(g,l,h).call(g),!0),deleteProperty:(e,t)=>(t in e&&(delete e[t],n(g,a,d).call(g,t),n(g,l,h).call(g)),!0),getPrototypeOf:()=>u.prototype})}}function c(e){let n=r(this,i).get(e) -void 0===n&&(n=(0,t.createStorage)(null,(()=>!1)),r(this,i).set(e,n)),(0,t.getValue)(n)}function d(e){const n=r(this,i).get(e) -n&&(0,t.setValue)(n,null)}function h(){(0,t.setValue)(r(this,o),null)}e.default=u})) -define("tracked-built-ins/-private/set",["exports","ember-tracked-storage-polyfill"],(function(e,t){"use strict" +var a=new WeakMap,l=new WeakMap,u=new WeakSet,c=new WeakSet,d=new WeakSet +class h{static fromEntries(e){return new h(Object.fromEntries(e))}constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{} +r(this,d),r(this,c),r(this,u),n(this,a,{writable:!0,value:new Map}),n(this,l,{writable:!0,value:(0,t.createStorage)(null,(()=>!1))}) +let i=Object.getPrototypeOf(e),g=Object.getOwnPropertyDescriptors(e),v=Object.create(i) +for(let t in g)Object.defineProperty(v,t,g[t]) +let b=this +return new Proxy(v,{get:(e,t)=>(s(b,u,p).call(b,t),e[t]),has:(e,t)=>(s(b,u,p).call(b,t),t in e),ownKeys:e=>((0,t.getValue)(o(b,l)),Reflect.ownKeys(e)),set:(e,t,r)=>(e[t]=r,s(b,c,f).call(b,t),s(b,d,m).call(b),!0),deleteProperty:(e,t)=>(t in e&&(delete e[t],s(b,c,f).call(b,t),s(b,d,m).call(b)),!0),getPrototypeOf:()=>h.prototype})}}function p(e){let r=o(this,a).get(e) +void 0===r&&(r=(0,t.createStorage)(null,(()=>!1)),o(this,a).set(e,r)),(0,t.getValue)(r)}function f(e){const r=o(this,a).get(e) +r&&(0,t.setValue)(r,null)}function m(){(0,t.setValue)(o(this,l),null)}e.default=h})),define("tracked-built-ins/-private/set",["exports","ember-tracked-storage-polyfill"],(function(e,t){"use strict" let r,n,i -function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}Object.defineProperty(e,"__esModule",{value:!0}),e.TrackedWeakSet=e.TrackedSet=void 0,r=Symbol.iterator,n=Symbol.toStringTag +function o(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e +var r=e[Symbol.toPrimitive] +if(void 0!==r){var n=r.call(e,t||"default") +if("object"!=typeof n)return n +throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string") +return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}Object.defineProperty(e,"__esModule",{value:!0}),e.TrackedWeakSet=e.TrackedSet=void 0,r=Symbol.iterator,n=Symbol.toStringTag class s{storageFor(e){const r=this.storages let n=r.get(e) return void 0===n&&(n=(0,t.createStorage)(null,(()=>!1)),r.set(e,n)),n}dirtyStorageFor(e){const r=this.storages.get(e) @@ -11104,14 +11939,15 @@ class a{storageFor(e){const r=this.storages let n=r.get(e) return void 0===n&&(n=(0,t.createStorage)(null,(()=>!1)),r.set(e,n)),n}dirtyStorageFor(e){const r=this.storages.get(e) r&&(0,t.setValue)(r,null)}constructor(e){o(this,"storages",new WeakMap),o(this,"vals",void 0),this.vals=new WeakSet(e)}has(e){return(0,t.getValue)(this.storageFor(e)),this.vals.has(e)}add(e){return this.vals.add(e),this.dirtyStorageFor(e),this}delete(e){return this.dirtyStorageFor(e),this.vals.delete(e)}get[i](){return this.vals[Symbol.toStringTag]}}e.TrackedWeakSet=a,Object.setPrototypeOf(a.prototype,WeakSet.prototype)})),define("tracked-built-ins/index",["exports","tracked-built-ins/-private/decorator","tracked-built-ins/-private/array","tracked-built-ins/-private/object","tracked-built-ins/-private/map","tracked-built-ins/-private/set"],(function(e,t,r,n,i,o){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"tracked",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"TrackedArray",{enumerable:!0,get:function(){return r.default}}),Object.defineProperty(e,"TrackedObject",{enumerable:!0,get:function(){return n.default}}),Object.defineProperty(e,"TrackedMap",{enumerable:!0,get:function(){return i.TrackedMap}}),Object.defineProperty(e,"TrackedWeakMap",{enumerable:!0,get:function(){return i.TrackedWeakMap}}),Object.defineProperty(e,"TrackedSet",{enumerable:!0,get:function(){return o.TrackedSet}}),Object.defineProperty(e,"TrackedWeakSet",{enumerable:!0,get:function(){return o.TrackedWeakSet}})})),define("tracked-maps-and-sets/-private/map",["exports","tracked-maps-and-sets/-private/util"],(function(e,t){"use strict" +Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"TrackedArray",{enumerable:!0,get:function(){return r.default}}),Object.defineProperty(e,"TrackedMap",{enumerable:!0,get:function(){return i.TrackedMap}}),Object.defineProperty(e,"TrackedObject",{enumerable:!0,get:function(){return n.default}}),Object.defineProperty(e,"TrackedSet",{enumerable:!0,get:function(){return o.TrackedSet}}),Object.defineProperty(e,"TrackedWeakMap",{enumerable:!0,get:function(){return i.TrackedWeakMap}}),Object.defineProperty(e,"TrackedWeakSet",{enumerable:!0,get:function(){return o.TrackedWeakSet}}),Object.defineProperty(e,"tracked",{enumerable:!0,get:function(){return t.default}})})) +define("tracked-maps-and-sets/-private/map",["exports","tracked-maps-and-sets/-private/util"],(function(e,t){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.TrackedWeakMap=e.TrackedMap=void 0 class r extends Map{get(e){return(0,t.consumeKey)(this,e),super.get(e)}has(e){return(0,t.consumeKey)(this,e),super.has(e)}entries(){return(0,t.consumeCollection)(this),super.entries()}keys(){return(0,t.consumeCollection)(this),super.keys()}values(){return(0,t.consumeCollection)(this),super.values()}forEach(e){(0,t.consumeCollection)(this),super.forEach(e)}get size(){return(0,t.consumeCollection)(this),super.size}set(e,r){return(0,t.dirtyKey)(this,e),(0,t.dirtyCollection)(this),super.set(e,r)}delete(e){return(0,t.dirtyKey)(this,e),(0,t.dirtyCollection)(this),super.delete(e)}clear(){return super.forEach(((e,r)=>(0,t.dirtyKey)(this,r))),(0,t.dirtyCollection)(this),super.clear()}}if(e.TrackedMap=r,void 0!==typeof Symbol){let e=r.prototype[Symbol.iterator] Object.defineProperty(r.prototype,Symbol.iterator,{get(){return(0,t.consumeCollection)(this),e}})}class n extends WeakMap{get(e){return(0,t.consumeKey)(this,e),super.get(e)}has(e){return(0,t.consumeKey)(this,e),super.has(e)}set(e,r){return(0,t.dirtyKey)(this,e),super.set(e,r)}delete(e){return(0,t.dirtyKey)(this,e),super.delete(e)}}e.TrackedWeakMap=n})),define("tracked-maps-and-sets/-private/set",["exports","tracked-maps-and-sets/-private/util"],(function(e,t){"use strict" Object.defineProperty(e,"__esModule",{value:!0}),e.TrackedWeakSet=e.TrackedSet=void 0 class r extends Set{has(e){return(0,t.consumeKey)(this,e),super.has(e)}entries(){return(0,t.consumeCollection)(this),super.entries()}keys(){return(0,t.consumeCollection)(this),super.keys()}values(){return(0,t.consumeCollection)(this),super.values()}forEach(e){(0,t.consumeCollection)(this),super.forEach(e)}get size(){return(0,t.consumeCollection)(this),super.size}add(e){return(0,t.dirtyKey)(this,e),(0,t.dirtyCollection)(this),super.add(e)}delete(e){return(0,t.dirtyKey)(this,e),(0,t.dirtyCollection)(this),super.delete(e)}clear(){return super.forEach(((e,r)=>(0,t.dirtyKey)(this,r))),(0,t.dirtyCollection)(this),super.clear()}}if(e.TrackedSet=r,void 0!==typeof Symbol){let e=r.prototype[Symbol.iterator] Object.defineProperty(r.prototype,Symbol.iterator,{get(){return(0,t.consumeCollection)(this),e}})}class n extends WeakSet{has(e){return(0,t.consumeKey)(this,e),super.has(e)}add(e){return(0,t.dirtyKey)(this,e),super.add(e)}delete(e){return(0,t.dirtyKey)(this,e),super.delete(e)}}e.TrackedWeakSet=n})),define("tracked-maps-and-sets/-private/util",["exports","@glimmer/tracking"],(function(e,t){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),e.createTag=function(){return new n},e.consumeKey=d,e.dirtyKey=h,e.dirtyCollection=e.consumeCollection=e.dirtyTag=e.consumeTag=void 0 +Object.defineProperty(e,"__esModule",{value:!0}),e.consumeCollection=void 0,e.consumeKey=d,e.consumeTag=void 0,e.createTag=function(){return new n},e.dirtyCollection=void 0,e.dirtyKey=h,e.dirtyTag=void 0 var r=function(e,t,r,n){var i,o=arguments.length,s=o<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,r):n if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,n) else for(var a=e.length-1;a>=0;a--)(i=e[a])&&(s=(o<3?i(s):o>3?i(t,r,s):i(t,r))||s) @@ -11131,4 +11967,4 @@ function c(e,t){let r=u.get(e) void 0===r&&(r=new Map,u.set(e,r)) let i=r.get(t) return void 0===i&&(i=new n,r.set(t,i)),i}function d(e,t){i(c(e,t))}function h(e,t){o(c(e,t))}})),define("tracked-maps-and-sets/index",["exports","tracked-maps-and-sets/-private/map","tracked-maps-and-sets/-private/set"],(function(e,t,r){"use strict" -Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"TrackedMap",{enumerable:!0,get:function(){return t.TrackedMap}}),Object.defineProperty(e,"TrackedWeakMap",{enumerable:!0,get:function(){return t.TrackedWeakMap}}),Object.defineProperty(e,"TrackedSet",{enumerable:!0,get:function(){return r.TrackedSet}}),Object.defineProperty(e,"TrackedWeakSet",{enumerable:!0,get:function(){return r.TrackedWeakSet}})})) +Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"TrackedMap",{enumerable:!0,get:function(){return t.TrackedMap}}),Object.defineProperty(e,"TrackedSet",{enumerable:!0,get:function(){return r.TrackedSet}}),Object.defineProperty(e,"TrackedWeakMap",{enumerable:!0,get:function(){return t.TrackedWeakMap}}),Object.defineProperty(e,"TrackedWeakSet",{enumerable:!0,get:function(){return r.TrackedWeakSet}})})) diff --git a/agent/uiserver/dist/assets/vendor-cf03d69ba4d9fa5934f04dca689d187f.css b/agent/uiserver/dist/assets/vendor-96fa74d5e60a3d6a951f980aebc0044d.css similarity index 97% rename from agent/uiserver/dist/assets/vendor-cf03d69ba4d9fa5934f04dca689d187f.css rename to agent/uiserver/dist/assets/vendor-96fa74d5e60a3d6a951f980aebc0044d.css index 39bde0e81cbcc..10f1e7949dbdc 100644 --- a/agent/uiserver/dist/assets/vendor-cf03d69ba4d9fa5934f04dca689d187f.css +++ b/agent/uiserver/dist/assets/vendor-96fa74d5e60a3d6a951f980aebc0044d.css @@ -1 +1 @@ -.ember-basic-dropdown,.ember-basic-dropdown-content,.ember-basic-dropdown-content *,.ember-power-select-dropdown *{box-sizing:border-box}.ember-power-select-trigger,.ember-power-select-trigger--active,.ember-power-select-trigger:focus{border-top:1px solid #aaa;border-bottom:1px solid #aaa;border-right:1px solid #aaa;border-left:1px solid #aaa}.ember-basic-dropdown{position:relative}.ember-basic-dropdown-content{position:absolute;width:auto;z-index:1000;background-color:#fff}.ember-basic-dropdown-content--left{left:0}.ember-basic-dropdown-content--right{right:0}.ember-basic-dropdown-overlay{position:fixed;background:rgba(0,0,0,.5);width:100%;height:100%;z-index:10;top:0;left:0;pointer-events:none}.ember-basic-dropdown-content-wormhole-origin{display:inline}.ember-power-select-trigger{position:relative;border-radius:4px;background-color:#fff;line-height:1.75;overflow-x:hidden;text-overflow:ellipsis;min-height:1.75em;user-select:none;-webkit-user-select:none;color:inherit}.ember-power-select-trigger:after{content:"";display:table;clear:both}.ember-power-select-trigger--active,.ember-power-select-trigger:focus{box-shadow:none}.ember-basic-dropdown-trigger--below.ember-power-select-trigger[aria-expanded=true],.ember-basic-dropdown-trigger--in-place.ember-power-select-trigger[aria-expanded=true]{border-bottom-left-radius:0;border-bottom-right-radius:0}.ember-basic-dropdown-trigger--above.ember-power-select-trigger[aria-expanded=true]{border-top-left-radius:0;border-top-right-radius:0}.ember-power-select-placeholder{color:#999;display:block;overflow-x:hidden;white-space:nowrap;text-overflow:ellipsis}.ember-power-select-status-icon{position:absolute;display:inline-block;width:0;height:0;top:0;bottom:0;margin:auto;border-style:solid;border-width:7px 4px 0;border-color:#aaa transparent transparent;right:5px}.ember-basic-dropdown-trigger[aria-expanded=true] .ember-power-select-status-icon{transform:rotate(180deg)}.ember-power-select-clear-btn{position:absolute;cursor:pointer;right:25px}.ember-power-select-trigger-multiple-input{font-family:inherit;font-size:inherit;border:none;display:inline-block;line-height:inherit;-webkit-appearance:none;outline:0;padding:0;float:left;background-color:transparent;text-indent:2px}.ember-power-select-trigger-multiple-input:disabled{background-color:#eee}.ember-power-select-trigger-multiple-input::placeholder{opacity:1;color:#999}.ember-power-select-trigger-multiple-input::-webkit-input-placeholder{opacity:1;color:#999}.ember-power-select-trigger-multiple-input::-moz-placeholder{opacity:1;color:#999}.ember-power-select-trigger-multiple-input::-ms-input-placeholder{opacity:1;color:#999}.ember-power-select-multiple-options{padding:0;margin:0}.ember-power-select-multiple-option{border:1px solid gray;border-radius:4px;color:#333;background-color:#e4e4e4;padding:0 4px;display:inline-block;line-height:1.45;float:left;margin:2px 0 2px 3px}.ember-power-select-multiple-remove-btn{cursor:pointer}.ember-power-select-multiple-remove-btn:not(:hover){opacity:.5}.ember-power-select-search{padding:4px}.ember-power-select-search-input{border:1px solid #aaa;border-radius:0;width:100%;font-size:inherit;line-height:inherit;padding:0 5px}.ember-power-select-search-input:focus{border:1px solid #aaa;box-shadow:none}.ember-power-select-dropdown{border-left:1px solid #aaa;border-right:1px solid #aaa;line-height:1.75;border-radius:4px;box-shadow:none;overflow:hidden;color:inherit}.ember-power-select-dropdown.ember-basic-dropdown-content--above{border-top:1px solid #aaa;border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.ember-power-select-dropdown.ember-basic-dropdown-content--below,.ember-power-select-dropdown.ember-basic-dropdown-content--in-place{border-top:none;border-bottom:1px solid #aaa;border-top-left-radius:0;border-top-right-radius:0}.ember-power-select-dropdown.ember-basic-dropdown-content--in-place{width:100%}.ember-power-select-options{list-style:none;margin:0;padding:0;user-select:none;-webkit-user-select:none}.ember-power-select-options[role=listbox]{overflow-y:auto;-webkit-overflow-scrolling:touch;max-height:12.25em}.ember-power-select-option{cursor:pointer;padding:0 8px}.ember-power-select-group[aria-disabled=true]{color:#999;cursor:not-allowed}.ember-power-select-group[aria-disabled=true] .ember-power-select-option,.ember-power-select-option[aria-disabled=true]{color:#999;pointer-events:none;cursor:not-allowed}.ember-power-select-option[aria-selected=true]{background-color:#ddd}.ember-power-select-option[aria-current=true]{background-color:#5897fb;color:#fff}.ember-power-select-group-name{cursor:default;font-weight:700}.ember-power-select-trigger[aria-disabled=true]{background-color:#eee}.ember-power-select-trigger{padding:0 16px 0 0}.ember-power-select-placeholder,.ember-power-select-selected-item{margin-left:8px}.ember-power-select-group .ember-power-select-group .ember-power-select-group-name{padding-left:24px}.ember-power-select-group .ember-power-select-group .ember-power-select-option{padding-left:40px}.ember-power-select-group .ember-power-select-option{padding-left:24px}.ember-power-select-group .ember-power-select-group-name{padding-left:8px}.ember-power-select-trigger[dir=rtl]{padding:0 0 0 16px}.ember-power-select-trigger[dir=rtl] .ember-power-select-placeholder,.ember-power-select-trigger[dir=rtl] .ember-power-select-selected-item{margin-right:8px}.ember-power-select-trigger[dir=rtl] .ember-power-select-multiple-option,.ember-power-select-trigger[dir=rtl] .ember-power-select-trigger-multiple-input{float:right}.ember-power-select-trigger[dir=rtl] .ember-power-select-status-icon{left:5px;right:initial}.ember-power-select-trigger[dir=rtl] .ember-power-select-clear-btn{left:25px;right:initial}.ember-power-select-dropdown[dir=rtl] .ember-power-select-group .ember-power-select-group .ember-power-select-group-name{padding-right:24px}.ember-power-select-dropdown[dir=rtl] .ember-power-select-group .ember-power-select-group .ember-power-select-option{padding-right:40px}.ember-power-select-dropdown[dir=rtl] .ember-power-select-group .ember-power-select-option{padding-right:24px}.ember-power-select-dropdown[dir=rtl] .ember-power-select-group .ember-power-select-group-name{padding-right:8px}.CodeMirror{font-family:monospace;height:300px;color:#000}.CodeMirror-lines{padding:4px 0}.CodeMirror pre{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0!important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:transparent}}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-ruler{border-left:1px solid #ccc;position:absolute}.cm-s-default .cm-header{color:#00f}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-invalidchar,.cm-s-default .cm-error{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0f0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#f22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:#fff}.CodeMirror-scroll{overflow:scroll!important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:0;position:relative}.CodeMirror-sizer{position:relative;border-right:30px solid transparent}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{position:absolute;z-index:6;display:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:0 0!important;border:none!important;-webkit-user-select:none;-moz-user-select:none;user-select:none}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:0 0;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:none;font-variant-ligatures:none}.CodeMirror-wrap pre{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;overflow:auto}.CodeMirror-code{outline:0}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.CodeMirror-focused div.CodeMirror-cursors,div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background:#ffa;background:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:''}span.CodeMirror-selectedtext{background:0 0}.CodeMirror-lint-markers{width:16px}.CodeMirror-lint-tooltip{background-color:#ffd;border:1px solid #000;border-radius:4px;color:#000;font-family:monospace;font-size:10pt;overflow:hidden;padding:2px 5px;position:fixed;white-space:pre;white-space:pre-wrap;z-index:100;max-width:600px;opacity:0;transition:opacity .4s;-moz-transition:opacity .4s;-webkit-transition:opacity .4s;-o-transition:opacity .4s;-ms-transition:opacity .4s}.CodeMirror-lint-mark-error,.CodeMirror-lint-mark-warning{background-position:left bottom;background-repeat:repeat-x}.CodeMirror-lint-mark-error{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sJDw4cOCW1/KIAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAHElEQVQI12NggIL/DAz/GdA5/xkY/qPKMDAwAADLZwf5rvm+LQAAAABJRU5ErkJggg==)}.CodeMirror-lint-mark-warning{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sJFhQXEbhTg7YAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAMklEQVQI12NkgIIvJ3QXMjAwdDN+OaEbysDA4MPAwNDNwMCwiOHLCd1zX07o6kBVGQEAKBANtobskNMAAAAASUVORK5CYII=)}.CodeMirror-lint-marker-error,.CodeMirror-lint-marker-warning{background-position:center center;background-repeat:no-repeat;cursor:pointer;display:inline-block;height:16px;width:16px;vertical-align:middle;position:relative}.CodeMirror-lint-message-error,.CodeMirror-lint-message-warning{padding-left:18px;background-position:top left;background-repeat:no-repeat}.CodeMirror-lint-marker-error,.CodeMirror-lint-message-error{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAHlBMVEW7AAC7AACxAAC7AAC7AAAAAAC4AAC5AAD///+7AAAUdclpAAAABnRSTlMXnORSiwCK0ZKSAAAATUlEQVR42mWPOQ7AQAgDuQLx/z8csYRmPRIFIwRGnosRrpamvkKi0FTIiMASR3hhKW+hAN6/tIWhu9PDWiTGNEkTtIOucA5Oyr9ckPgAWm0GPBog6v4AAAAASUVORK5CYII=)}.CodeMirror-lint-marker-warning,.CodeMirror-lint-message-warning{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAANlBMVEX/uwDvrwD/uwD/uwD/uwD/uwD/uwD/uwD/uwD6twD/uwAAAADurwD2tQD7uAD+ugAAAAD/uwDhmeTRAAAADHRSTlMJ8mN1EYcbmiixgACm7WbuAAAAVklEQVR42n3PUQqAIBBFUU1LLc3u/jdbOJoW1P08DA9Gba8+YWJ6gNJoNYIBzAA2chBth5kLmG9YUoG0NHAUwFXwO9LuBQL1giCQb8gC9Oro2vp5rncCIY8L8uEx5ZkAAAAASUVORK5CYII=)}.CodeMirror-lint-marker-multiple{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAHCAMAAADzjKfhAAAACVBMVEUAAAAAAAC/v7914kyHAAAAAXRSTlMAQObYZgAAACNJREFUeNo1ioEJAAAIwmz/H90iFFSGJgFMe3gaLZ0od+9/AQZ0ADosbYraAAAAAElFTkSuQmCC);background-repeat:no-repeat;background-position:right bottom;width:100%;height:100%}.flight-icon{display:block}.flight-icon-display-inline{display:inline-block}@keyframes hds-flight-icon-animation-rotation{to{transform:rotate(360deg)}}.flight-icon--animation-loading,.flight-icon--animation-running{animation:hds-flight-icon-animation-rotation 9s linear infinite}@media (prefers-reduced-motion:no-preference){.flight-icon--animation-loading{animation-duration:.7s}.flight-icon--animation-running{animation-duration:1s}}.flight-sprite-container{position:absolute;width:0;height:0;visibility:hidden}.occluded-content{display:block;position:relative;width:100%;min-height:.01px;color:transparent}table .occluded-content,tbody .occluded-content,tfoot .occluded-content,thead .occluded-content{display:table-row;position:relative;width:100%}ol .occluded-content,ul .occluded-content{display:list-item;position:relative;width:100%;list-style-type:none;height:0} \ No newline at end of file +.ember-basic-dropdown,.ember-basic-dropdown-content,.ember-basic-dropdown-content *,.ember-power-select-dropdown *{box-sizing:border-box}.ember-power-select-trigger,.ember-power-select-trigger--active,.ember-power-select-trigger:focus{border-top:1px solid #aaa;border-bottom:1px solid #aaa;border-right:1px solid #aaa;border-left:1px solid #aaa}.ember-basic-dropdown{position:relative}.ember-basic-dropdown-content{position:absolute;width:auto;z-index:1000;background-color:#fff}.ember-basic-dropdown-content--left{left:0}.ember-basic-dropdown-content--right{right:0}.ember-basic-dropdown-overlay{position:fixed;background:rgba(0,0,0,.5);width:100%;height:100%;z-index:10;top:0;left:0;pointer-events:none}.ember-basic-dropdown-content-wormhole-origin{display:inline}.ember-power-select-trigger{position:relative;border-radius:4px;background-color:#fff;line-height:1.75;overflow-x:hidden;text-overflow:ellipsis;min-height:1.75em;user-select:none;-webkit-user-select:none;color:inherit}.ember-power-select-trigger:after{content:"";display:table;clear:both}.ember-power-select-trigger--active,.ember-power-select-trigger:focus{box-shadow:none}.ember-basic-dropdown-trigger--below.ember-power-select-trigger[aria-expanded=true],.ember-basic-dropdown-trigger--in-place.ember-power-select-trigger[aria-expanded=true]{border-bottom-left-radius:0;border-bottom-right-radius:0}.ember-basic-dropdown-trigger--above.ember-power-select-trigger[aria-expanded=true]{border-top-left-radius:0;border-top-right-radius:0}.ember-power-select-placeholder{color:#999;display:block;overflow-x:hidden;white-space:nowrap;text-overflow:ellipsis}.ember-power-select-status-icon{position:absolute;display:inline-block;width:0;height:0;top:0;bottom:0;margin:auto;border-style:solid;border-width:7px 4px 0;border-color:#aaa transparent transparent;right:5px}.ember-basic-dropdown-trigger[aria-expanded=true] .ember-power-select-status-icon{transform:rotate(180deg)}.ember-power-select-clear-btn{position:absolute;cursor:pointer;right:25px}.ember-power-select-trigger-multiple-input{font-family:inherit;font-size:inherit;border:none;display:inline-block;line-height:inherit;-webkit-appearance:none;outline:0;padding:0;float:left;background-color:transparent;text-indent:2px}.ember-power-select-trigger-multiple-input:disabled{background-color:#eee}.ember-power-select-trigger-multiple-input::placeholder{opacity:1;color:#999}.ember-power-select-trigger-multiple-input::-webkit-input-placeholder{opacity:1;color:#999}.ember-power-select-trigger-multiple-input::-moz-placeholder{opacity:1;color:#999}.ember-power-select-trigger-multiple-input::-ms-input-placeholder{opacity:1;color:#999}.ember-power-select-multiple-options{padding:0;margin:0}.ember-power-select-multiple-option{border:1px solid gray;border-radius:4px;color:#333;background-color:#e4e4e4;padding:0 4px;display:inline-block;line-height:1.45;float:left;margin:2px 0 2px 3px}.ember-power-select-multiple-remove-btn{cursor:pointer}.ember-power-select-multiple-remove-btn:not(:hover){opacity:.5}.ember-power-select-search{padding:4px}.ember-power-select-search-input{border:1px solid #aaa;border-radius:0;width:100%;font-size:inherit;line-height:inherit;padding:0 5px}.ember-power-select-search-input:focus{border:1px solid #aaa;box-shadow:none}.ember-power-select-dropdown{border-left:1px solid #aaa;border-right:1px solid #aaa;line-height:1.75;border-radius:4px;box-shadow:none;overflow:hidden;color:inherit}.ember-power-select-dropdown.ember-basic-dropdown-content--above{border-top:1px solid #aaa;border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.ember-power-select-dropdown.ember-basic-dropdown-content--below,.ember-power-select-dropdown.ember-basic-dropdown-content--in-place{border-top:none;border-bottom:1px solid #aaa;border-top-left-radius:0;border-top-right-radius:0}.ember-power-select-dropdown.ember-basic-dropdown-content--in-place{width:100%}.ember-power-select-options{list-style:none;margin:0;padding:0;user-select:none;-webkit-user-select:none}.ember-power-select-options[role=listbox]{overflow-y:auto;-webkit-overflow-scrolling:touch;max-height:12.25em}.ember-power-select-option{cursor:pointer;padding:0 8px}.ember-power-select-group[aria-disabled=true]{color:#999;cursor:not-allowed}.ember-power-select-group[aria-disabled=true] .ember-power-select-option,.ember-power-select-option[aria-disabled=true]{color:#999;pointer-events:none;cursor:not-allowed}.ember-power-select-option[aria-selected=true]{background-color:#ddd}.ember-power-select-option[aria-current=true]{background-color:#5897fb;color:#fff}.ember-power-select-group-name{cursor:default;font-weight:700}.ember-power-select-trigger[aria-disabled=true]{background-color:#eee}.ember-power-select-trigger{padding:0 16px 0 0}.ember-power-select-placeholder,.ember-power-select-selected-item{margin-left:8px}.ember-power-select-group .ember-power-select-group .ember-power-select-group-name{padding-left:24px}.ember-power-select-group .ember-power-select-group .ember-power-select-option{padding-left:40px}.ember-power-select-group .ember-power-select-option{padding-left:24px}.ember-power-select-group .ember-power-select-group-name{padding-left:8px}.ember-power-select-trigger[dir=rtl]{padding:0 0 0 16px}.ember-power-select-trigger[dir=rtl] .ember-power-select-placeholder,.ember-power-select-trigger[dir=rtl] .ember-power-select-selected-item{margin-right:8px}.ember-power-select-trigger[dir=rtl] .ember-power-select-multiple-option,.ember-power-select-trigger[dir=rtl] .ember-power-select-trigger-multiple-input{float:right}.ember-power-select-trigger[dir=rtl] .ember-power-select-status-icon{left:5px;right:initial}.ember-power-select-trigger[dir=rtl] .ember-power-select-clear-btn{left:25px;right:initial}.ember-power-select-dropdown[dir=rtl] .ember-power-select-group .ember-power-select-group .ember-power-select-group-name{padding-right:24px}.ember-power-select-dropdown[dir=rtl] .ember-power-select-group .ember-power-select-group .ember-power-select-option{padding-right:40px}.ember-power-select-dropdown[dir=rtl] .ember-power-select-group .ember-power-select-option{padding-right:24px}.ember-power-select-dropdown[dir=rtl] .ember-power-select-group .ember-power-select-group-name{padding-right:8px}.CodeMirror{font-family:monospace;height:300px;color:#000}.CodeMirror-lines{padding:4px 0}.CodeMirror pre{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0!important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:transparent}}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-ruler{border-left:1px solid #ccc;position:absolute}.cm-s-default .cm-header{color:#00f}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-invalidchar,.cm-s-default .cm-error{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0f0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#f22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:#fff}.CodeMirror-scroll{overflow:scroll!important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:0;position:relative}.CodeMirror-sizer{position:relative;border-right:30px solid transparent}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{position:absolute;z-index:6;display:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:0 0!important;border:none!important;-webkit-user-select:none;-moz-user-select:none;user-select:none}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:0 0;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:none;font-variant-ligatures:none}.CodeMirror-wrap pre{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;overflow:auto}.CodeMirror-code{outline:0}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.CodeMirror-focused div.CodeMirror-cursors,div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background:#ffa;background:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:''}span.CodeMirror-selectedtext{background:0 0}.CodeMirror-lint-markers{width:16px}.CodeMirror-lint-tooltip{background-color:#ffd;border:1px solid #000;border-radius:4px;color:#000;font-family:monospace;font-size:10pt;overflow:hidden;padding:2px 5px;position:fixed;white-space:pre;white-space:pre-wrap;z-index:100;max-width:600px;opacity:0;transition:opacity .4s;-moz-transition:opacity .4s;-webkit-transition:opacity .4s;-o-transition:opacity .4s;-ms-transition:opacity .4s}.CodeMirror-lint-mark-error,.CodeMirror-lint-mark-warning{background-position:left bottom;background-repeat:repeat-x}.CodeMirror-lint-mark-error{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sJDw4cOCW1/KIAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAHElEQVQI12NggIL/DAz/GdA5/xkY/qPKMDAwAADLZwf5rvm+LQAAAABJRU5ErkJggg==)}.CodeMirror-lint-mark-warning{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sJFhQXEbhTg7YAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAMklEQVQI12NkgIIvJ3QXMjAwdDN+OaEbysDA4MPAwNDNwMCwiOHLCd1zX07o6kBVGQEAKBANtobskNMAAAAASUVORK5CYII=)}.CodeMirror-lint-marker-error,.CodeMirror-lint-marker-warning{background-position:center center;background-repeat:no-repeat;cursor:pointer;display:inline-block;height:16px;width:16px;vertical-align:middle;position:relative}.CodeMirror-lint-message-error,.CodeMirror-lint-message-warning{padding-left:18px;background-position:top left;background-repeat:no-repeat}.CodeMirror-lint-marker-error,.CodeMirror-lint-message-error{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAHlBMVEW7AAC7AACxAAC7AAC7AAAAAAC4AAC5AAD///+7AAAUdclpAAAABnRSTlMXnORSiwCK0ZKSAAAATUlEQVR42mWPOQ7AQAgDuQLx/z8csYRmPRIFIwRGnosRrpamvkKi0FTIiMASR3hhKW+hAN6/tIWhu9PDWiTGNEkTtIOucA5Oyr9ckPgAWm0GPBog6v4AAAAASUVORK5CYII=)}.CodeMirror-lint-marker-warning,.CodeMirror-lint-message-warning{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAANlBMVEX/uwDvrwD/uwD/uwD/uwD/uwD/uwD/uwD/uwD6twD/uwAAAADurwD2tQD7uAD+ugAAAAD/uwDhmeTRAAAADHRSTlMJ8mN1EYcbmiixgACm7WbuAAAAVklEQVR42n3PUQqAIBBFUU1LLc3u/jdbOJoW1P08DA9Gba8+YWJ6gNJoNYIBzAA2chBth5kLmG9YUoG0NHAUwFXwO9LuBQL1giCQb8gC9Oro2vp5rncCIY8L8uEx5ZkAAAAASUVORK5CYII=)}.CodeMirror-lint-marker-multiple{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAHCAMAAADzjKfhAAAACVBMVEUAAAAAAAC/v7914kyHAAAAAXRSTlMAQObYZgAAACNJREFUeNo1ioEJAAAIwmz/H90iFFSGJgFMe3gaLZ0od+9/AQZ0ADosbYraAAAAAElFTkSuQmCC);background-repeat:no-repeat;background-position:right bottom;width:100%;height:100%}.flight-icon{display:block}.flight-icon-display-inline{display:inline-block}@keyframes hds-flight-icon-animation-rotation{to{transform:rotate(360deg)}}.flight-icon--animation-loading,.flight-icon--animation-running{animation:hds-flight-icon-animation-rotation 9s linear infinite}@media (prefers-reduced-motion:no-preference){.flight-icon--animation-loading{animation-duration:.7s}.flight-icon--animation-running{animation-duration:1s}}.flight-sprite-container{position:absolute;width:0;height:0;visibility:hidden}.occluded-content{display:block;position:relative;width:100%;min-height:.01px;color:transparent}table .occluded-content,tbody .occluded-content,tfoot .occluded-content,thead .occluded-content{display:table-row;position:relative;width:100%}ol .occluded-content,ul .occluded-content{display:list-item;position:relative;width:100%;list-style-type:none;height:0}#ember-a11y-refocus-nav-message{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.ember-a11y-refocus-skip-link{position:absolute;left:0;top:0;background-color:rgba(0,0,0,.75);font-size:.75rem;color:#fff;padding:.25rem;text-decoration:none;transform:translateY(-100%);transition:transform .3s ease-in-out}.ember-a11y-refocus-skip-link:focus{transform:translateY(0)} \ No newline at end of file diff --git a/agent/uiserver/dist/index.html b/agent/uiserver/dist/index.html index 10d0e3e31350a..5f9cc4798c2d2 100644 --- a/agent/uiserver/dist/index.html +++ b/agent/uiserver/dist/index.html @@ -1,4 +1,9 @@ + + @@ -8,15 +13,16 @@ - + - - - + + + @@ -52,46 +58,46 @@

      JavaScript Required

      "css.escape/css.escape.js": "{{.ContentPath}}assets/css.escape-fe4db48c9e3f272a6d12cf1312de889e.js", "codemirror/mode/javascript/javascript.js": "{{.ContentPath}}assets/codemirror/mode/javascript/javascript-a5e5d64b0f9ff6b6e21f5f48aa1ef464.js", "codemirror/mode/ruby/ruby.js": "{{.ContentPath}}assets/codemirror/mode/ruby/ruby-2b9a2a4b4d14d9fa6f6edcda84a260e6.js", - "codemirror/mode/yaml/yaml.js": "{{.ContentPath}}assets/codemirror/mode/yaml/yaml-39582b60e653cf0b8d42292ddfabefb2.js", + "codemirror/mode/yaml/yaml.js": "{{.ContentPath}}assets/codemirror/mode/yaml/yaml-d1dfef3221c9d73c6c8042ca73949aa2.js", "codemirror/mode/xml/xml.js": "{{.ContentPath}}assets/codemirror/mode/xml/xml-80f64aaafa6af7844d14f32f3219bb26.js" } - - - + + + {{if .ACLsEnabled}} - + {{end}} {{if .PeeringEnabled}} - - + + {{end}} {{if .PartitionsEnabled}} - - + + {{end}} {{if .NamespacesEnabled}} - + {{end}} {{if .HCPEnabled}} - - + + {{end}} - - - - + + + + - - + + {{ range .ExtraScripts }} {{ end }} - + - +
      diff --git a/agent/xds/clusters_test.go b/agent/xds/clusters_test.go index b5105bb698b1a..fb92ea5804b6f 100644 --- a/agent/xds/clusters_test.go +++ b/agent/xds/clusters_test.go @@ -6,10 +6,13 @@ package xds import ( "bytes" "path/filepath" + "sort" "testing" "text/template" "time" + "github.com/hashicorp/consul/types" + envoy_cluster_v3 "github.com/envoyproxy/go-control-plane/envoy/config/cluster/v3" envoy_core_v3 "github.com/envoyproxy/go-control-plane/envoy/config/core/v3" envoy_tls_v3 "github.com/envoyproxy/go-control-plane/envoy/extensions/transport_sockets/tls/v3" @@ -19,6 +22,12 @@ import ( "github.com/hashicorp/consul/agent/proxycfg" "github.com/hashicorp/consul/agent/structs" + "github.com/hashicorp/consul/agent/xds/proxystateconverter" + "github.com/hashicorp/consul/agent/xds/response" + "github.com/hashicorp/consul/agent/xds/testcommon" + "github.com/hashicorp/consul/agent/xdsv2" + "github.com/hashicorp/consul/envoyextensions/xdscommon" + "github.com/hashicorp/consul/sdk/testutil" ) type mockCfgFetcher struct { @@ -29,6 +38,13 @@ func (s *mockCfgFetcher) AdvertiseAddrLAN() string { return s.addressLan } +type clusterTestCase struct { + name string + create func(t testinf.T) *proxycfg.ConfigSnapshot + overrideGoldenName string + alsoRunTestForV2 bool +} + func uint32ptr(i uint32) *uint32 { return &i } @@ -37,6 +53,1117 @@ func durationPtr(d time.Duration) *time.Duration { return &d } +func makeClusterDiscoChainTests(enterprise bool) []clusterTestCase { + return []clusterTestCase{ + { + name: "custom-upstream-default-chain", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "default", enterprise, func(ns *structs.NodeService) { + ns.Proxy.Upstreams[0].Config["envoy_cluster_json"] = + customAppClusterJSON(t, customClusterJSONOptions{ + Name: "myservice", + }) + }, nil) + }, + // TODO(proxystate): requires custom cluster work + alsoRunTestForV2: false, + }, + { + name: "connect-proxy-with-chain", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "simple", enterprise, nil, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "connect-proxy-with-chain-http2", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "simple", enterprise, func(ns *structs.NodeService) { + ns.Proxy.Upstreams[0].Config["protocol"] = "http2" + }, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "connect-proxy-with-chain-external-sni", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "external-sni", enterprise, nil, nil) + }, + //TODO(proxystate): this requires terminating gateway work + alsoRunTestForV2: true, + }, + { + name: "connect-proxy-with-chain-and-overrides", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "simple-with-overrides", enterprise, nil, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "connect-proxy-with-chain-and-failover", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "failover", enterprise, nil, nil) + }, + // TODO(proxystate): requires routes work + alsoRunTestForV2: false, + }, + { + name: "connect-proxy-with-tcp-chain-failover-through-remote-gateway", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "failover-through-remote-gateway", enterprise, nil, nil) + }, + // TODO(proxystate): requires routes work + alsoRunTestForV2: false, + }, + { + name: "connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "failover-through-remote-gateway-triggered", enterprise, nil, nil) + }, + // TODO(proxystate): requires routes work + alsoRunTestForV2: false, + }, + { + name: "connect-proxy-with-tcp-chain-double-failover-through-remote-gateway", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "failover-through-double-remote-gateway", enterprise, nil, nil) + }, + // TODO(proxystate): requires routes work + alsoRunTestForV2: false, + }, + { + name: "connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "failover-through-double-remote-gateway-triggered", enterprise, nil, nil) + }, + // TODO(proxystate): requires routes work + alsoRunTestForV2: false, + }, + { + name: "connect-proxy-with-tcp-chain-failover-through-local-gateway", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "failover-through-local-gateway", enterprise, nil, nil) + }, + // TODO(proxystate): requires routes work + alsoRunTestForV2: false, + }, + { + name: "connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "failover-through-local-gateway-triggered", enterprise, nil, nil) + }, + // TODO(proxystate): requires routes work + alsoRunTestForV2: false, + }, + { + name: "connect-proxy-with-tcp-chain-double-failover-through-local-gateway", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "failover-through-double-local-gateway", enterprise, nil, nil) + }, + // TODO(proxystate): requires routes work + alsoRunTestForV2: false, + }, + { + name: "connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "failover-through-double-local-gateway-triggered", enterprise, nil, nil) + }, + // TODO(proxystate): requires routes work + alsoRunTestForV2: false, + }, + { + name: "splitter-with-resolver-redirect", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "splitter-with-resolver-redirect-multidc", enterprise, nil, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "connect-proxy-lb-in-resolver", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "lb-resolver", enterprise, nil, nil) + }, + alsoRunTestForV2: true, + }, + } +} + +func TestClustersFromSnapshot(t *testing.T) { + // TODO: we should move all of these to TestAllResourcesFromSnapshot + // eventually to test all of the xDS types at once with the same input, + // just as it would be triggered by our xDS server. + if testing.Short() { + t.Skip("too slow for testing.Short") + } + + tests := []clusterTestCase{ + { + name: "connect-proxy-with-tls-outgoing-min-version-auto", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, nil, []proxycfg.UpdateEvent{ + { + CorrelationID: "mesh", + Result: &structs.ConfigEntryResponse{ + Entry: &structs.MeshConfigEntry{ + TLS: &structs.MeshTLSConfig{ + Outgoing: &structs.MeshDirectionalTLSConfig{ + TLSMinVersion: types.TLSVersionAuto, + }, + }, + }, + }, + }, + }) + }, + alsoRunTestForV2: true, + }, + { + name: "connect-proxy-with-tls-outgoing-min-version", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, nil, []proxycfg.UpdateEvent{ + { + CorrelationID: "mesh", + Result: &structs.ConfigEntryResponse{ + Entry: &structs.MeshConfigEntry{ + TLS: &structs.MeshTLSConfig{ + Outgoing: &structs.MeshDirectionalTLSConfig{ + TLSMinVersion: types.TLSv1_3, + }, + }, + }, + }, + }, + }) + }, + alsoRunTestForV2: true, + }, + { + name: "connect-proxy-with-tls-outgoing-max-version", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, nil, []proxycfg.UpdateEvent{ + { + CorrelationID: "mesh", + Result: &structs.ConfigEntryResponse{ + Entry: &structs.MeshConfigEntry{ + TLS: &structs.MeshTLSConfig{ + Outgoing: &structs.MeshDirectionalTLSConfig{ + TLSMaxVersion: types.TLSv1_2, + }, + }, + }, + }, + }, + }) + }, + alsoRunTestForV2: true, + }, + { + name: "connect-proxy-with-tls-outgoing-cipher-suites", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, nil, []proxycfg.UpdateEvent{ + { + CorrelationID: "mesh", + Result: &structs.ConfigEntryResponse{ + Entry: &structs.MeshConfigEntry{ + TLS: &structs.MeshTLSConfig{ + Outgoing: &structs.MeshDirectionalTLSConfig{ + CipherSuites: []types.TLSCipherSuite{ + types.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, + types.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, + }, + }, + }, + }, + }, + }, + }) + }, + alsoRunTestForV2: true, + }, + { + name: "connect-proxy-with-jwt-config-entry-with-local", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, nil, []proxycfg.UpdateEvent{ + { + CorrelationID: "jwt-provider", + Result: &structs.IndexedConfigEntries{ + Kind: "jwt-provider", + Entries: []structs.ConfigEntry{ + &structs.JWTProviderConfigEntry{ + Name: "okta", + JSONWebKeySet: &structs.JSONWebKeySet{ + Local: &structs.LocalJWKS{ + JWKS: "xxx", + }, + }, + }, + }, + }, + }, + }) + }, + // TODO(proxystate): jwt work will come at a later time + alsoRunTestForV2: false, + }, + { + name: "connect-proxy-with-jwt-config-entry-with-remote-jwks", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, nil, []proxycfg.UpdateEvent{ + { + CorrelationID: "jwt-provider", + Result: &structs.IndexedConfigEntries{ + Kind: "jwt-provider", + Entries: []structs.ConfigEntry{ + &structs.JWTProviderConfigEntry{ + Name: "okta", + JSONWebKeySet: &structs.JSONWebKeySet{ + Remote: &structs.RemoteJWKS{ + RequestTimeoutMs: 1000, + FetchAsynchronously: true, + URI: "https://test.test.com", + JWKSCluster: &structs.JWKSCluster{ + DiscoveryType: structs.DiscoveryTypeStatic, + ConnectTimeout: time.Duration(5) * time.Second, + TLSCertificates: &structs.JWKSTLSCertificate{ + TrustedCA: &structs.JWKSTLSCertTrustedCA{ + Filename: "mycert.crt", + }, + }, + }, + }, + }, + }, + }, + }, + }, + }) + }, + // TODO(proxystate): jwt work will come at a later time + alsoRunTestForV2: false, + }, + { + name: "custom-local-app", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { + ns.Proxy.Config["envoy_local_cluster_json"] = + customAppClusterJSON(t, customClusterJSONOptions{ + Name: "mylocal", + }) + }, nil) + }, + // TODO(proxystate): requires custom cluster work + alsoRunTestForV2: false, + }, + { + name: "custom-upstream", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { + ns.Proxy.Upstreams[0].Config["envoy_cluster_json"] = + customAppClusterJSON(t, customClusterJSONOptions{ + Name: "myservice", + }) + }, nil) + }, + // TODO(proxystate): requires custom cluster work + alsoRunTestForV2: false, + }, + { + name: "custom-upstream-ignores-tls", + overrideGoldenName: "custom-upstream", // should be the same + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { + ns.Proxy.Upstreams[0].Config["envoy_cluster_json"] = + customAppClusterJSON(t, customClusterJSONOptions{ + Name: "myservice", + // Attempt to override the TLS context should be ignored + TLSContext: `"allowRenegotiation": false`, + }) + }, nil) + }, + // TODO(proxystate): requires custom cluster work + alsoRunTestForV2: false, + }, + { + name: "custom-upstream-with-prepared-query", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { + for i := range ns.Proxy.Upstreams { + + switch ns.Proxy.Upstreams[i].DestinationName { + case "db": + if ns.Proxy.Upstreams[i].Config == nil { + ns.Proxy.Upstreams[i].Config = map[string]interface{}{} + } + + uid := proxycfg.NewUpstreamID(&ns.Proxy.Upstreams[i]) + + // Triggers an override with the presence of the escape hatch listener + ns.Proxy.Upstreams[i].DestinationType = structs.UpstreamDestTypePreparedQuery + + ns.Proxy.Upstreams[i].Config["envoy_cluster_json"] = + customClusterJSON(t, customClusterJSONOptions{ + Name: uid.EnvoyID() + ":custom-upstream", + }) + + // Also test that http2 options are triggered. + // A separate upstream without an override is required to test + case "geo-cache": + if ns.Proxy.Upstreams[i].Config == nil { + ns.Proxy.Upstreams[i].Config = map[string]interface{}{} + } + ns.Proxy.Upstreams[i].Config["protocol"] = "http2" + default: + continue + } + } + }, nil) + }, + // TODO(proxystate): requires custom cluster work + alsoRunTestForV2: false, + }, + { + name: "custom-timeouts", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { + ns.Proxy.Config["local_connect_timeout_ms"] = 1234 + ns.Proxy.Upstreams[0].Config["connect_timeout_ms"] = 2345 + }, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "custom-passive-healthcheck", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { + ns.Proxy.Upstreams[0].Config["passive_health_check"] = map[string]interface{}{ + "enforcing_consecutive_5xx": float64(80), + "max_failures": float64(5), + "interval": float64(10 * time.Second), + "max_ejection_percent": float64(100), + "base_ejection_time": float64(10 * time.Second), + } + }, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "custom-passive-healthcheck-zero-consecutive_5xx", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { + ns.Proxy.Upstreams[0].Config["passive_health_check"] = map[string]interface{}{ + "enforcing_consecutive_5xx": float64(0), + "max_failures": float64(5), + "interval": float64(10 * time.Second), + "max_ejection_percent": float64(100), + "base_ejection_time": float64(10 * time.Second), + } + }, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "custom-max-inbound-connections", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { + ns.Proxy.Config["max_inbound_connections"] = 3456 + }, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "custom-limits-max-connections-only", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { + for i := range ns.Proxy.Upstreams { + // We check if Config is nil because the prepared_query upstream is + // initialized without a Config map. Use Upstreams[i] syntax to + // modify the actual ConfigSnapshot instead of copying the Upstream + // in the range. + if ns.Proxy.Upstreams[i].Config == nil { + ns.Proxy.Upstreams[i].Config = map[string]interface{}{} + } + + ns.Proxy.Upstreams[i].Config["limits"] = map[string]interface{}{ + "max_connections": 500, + } + } + }, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "custom-limits-set-to-zero", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { + for i := range ns.Proxy.Upstreams { + if ns.Proxy.Upstreams[i].Config == nil { + ns.Proxy.Upstreams[i].Config = map[string]interface{}{} + } + + ns.Proxy.Upstreams[i].Config["limits"] = map[string]interface{}{ + "max_connections": 0, + "max_pending_requests": 0, + "max_concurrent_requests": 0, + } + } + }, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "custom-limits", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { + for i := range ns.Proxy.Upstreams { + if ns.Proxy.Upstreams[i].Config == nil { + ns.Proxy.Upstreams[i].Config = map[string]interface{}{} + } + + ns.Proxy.Upstreams[i].Config["limits"] = map[string]interface{}{ + "max_connections": 500, + "max_pending_requests": 600, + "max_concurrent_requests": 700, + } + } + }, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "expose-paths-local-app-paths", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotExposeConfig(t, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "downstream-service-with-unix-sockets", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { + ns.Address = "" + ns.Port = 0 + ns.Proxy.LocalServiceAddress = "" + ns.Proxy.LocalServicePort = 0 + ns.Proxy.LocalServiceSocketPath = "/tmp/downstream_proxy.sock" + }, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "expose-paths-new-cluster-http2", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotExposeConfig(t, func(ns *structs.NodeService) { + ns.Proxy.Expose.Paths[1] = structs.ExposePath{ + LocalPathPort: 9090, + Path: "/grpc.health.v1.Health/Check", + ListenerPort: 21501, + Protocol: "http2", + } + }) + }, + alsoRunTestForV2: true, + }, + { + name: "expose-checks", + create: proxycfg.TestConfigSnapshotExposeChecks, + alsoRunTestForV2: true, + }, + { + name: "expose-paths-grpc-new-cluster-http1", + create: proxycfg.TestConfigSnapshotGRPCExposeHTTP1, + alsoRunTestForV2: true, + }, + { + name: "mesh-gateway", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotMeshGateway(t, "default", nil, nil) + }, + // TODO(proxystate): mesh gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "mesh-gateway-using-federation-states", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotMeshGateway(t, "federation-states", nil, nil) + }, + // TODO(proxystate): mesh gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "mesh-gateway-using-federation-control-plane", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotMeshGateway(t, "mesh-gateway-federation", nil, nil) + }, + // TODO(proxystate): mesh gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "mesh-gateway-no-services", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotMeshGateway(t, "no-services", nil, nil) + }, + // TODO(proxystate): mesh gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "mesh-gateway-service-subsets", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotMeshGateway(t, "service-subsets", nil, nil) + }, + // TODO(proxystate): mesh gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "mesh-gateway-ignore-extra-resolvers", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotMeshGateway(t, "ignore-extra-resolvers", nil, nil) + }, + // TODO(proxystate): mesh gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "mesh-gateway-service-timeouts", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotMeshGateway(t, "service-timeouts", nil, nil) + }, + // TODO(proxystate): mesh gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "mesh-gateway-non-hash-lb-injected", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotMeshGateway(t, "non-hash-lb-injected", nil, nil) + }, + // TODO(proxystate): mesh gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "mesh-gateway-hash-lb-ignored", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotMeshGateway(t, "hash-lb-ignored", nil, nil) + }, + // TODO(proxystate): mesh gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "mesh-gateway-tcp-keepalives", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotMeshGateway(t, "default", func(ns *structs.NodeService) { + ns.Proxy.Config["envoy_gateway_remote_tcp_enable_keepalive"] = true + ns.Proxy.Config["envoy_gateway_remote_tcp_keepalive_time"] = 120 + ns.Proxy.Config["envoy_gateway_remote_tcp_keepalive_interval"] = 60 + ns.Proxy.Config["envoy_gateway_remote_tcp_keepalive_probes"] = 7 + }, nil) + }, + // TODO(proxystate): mesh gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-gateway", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", + "default", nil, nil, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-gateway-nil-config-entry", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway_NilConfigEntry(t) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-gateway-with-tls-outgoing-min-version", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", "default", nil, nil, []proxycfg.UpdateEvent{ + { + CorrelationID: "mesh", + Result: &structs.ConfigEntryResponse{ + Entry: &structs.MeshConfigEntry{ + TLS: &structs.MeshTLSConfig{ + Outgoing: &structs.MeshDirectionalTLSConfig{ + TLSMinVersion: types.TLSv1_3, + }, + }, + }, + }, + }, + }) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-gateway-with-tls-outgoing-max-version", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", "default", nil, nil, []proxycfg.UpdateEvent{ + { + CorrelationID: "mesh", + Result: &structs.ConfigEntryResponse{ + Entry: &structs.MeshConfigEntry{ + TLS: &structs.MeshTLSConfig{ + Outgoing: &structs.MeshDirectionalTLSConfig{ + TLSMaxVersion: types.TLSv1_2, + }, + }, + }, + }, + }, + }) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-gateway-with-tls-outgoing-cipher-suites", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", "default", nil, nil, []proxycfg.UpdateEvent{ + { + CorrelationID: "mesh", + Result: &structs.ConfigEntryResponse{ + Entry: &structs.MeshConfigEntry{ + TLS: &structs.MeshTLSConfig{ + Outgoing: &structs.MeshDirectionalTLSConfig{ + CipherSuites: []types.TLSCipherSuite{ + types.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, + types.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, + }, + }, + }, + }, + }, + }, + }) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-gateway-no-services", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, false, "tcp", + "default", nil, nil, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-with-chain", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", + "simple", nil, nil, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-with-service-max-connections", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", + "simple", nil, + func(entry *structs.IngressGatewayConfigEntry) { + entry.Listeners[0].Services[0].MaxConnections = 4096 + }, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-with-defaults-service-max-connections", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", + "simple", nil, + func(entry *structs.IngressGatewayConfigEntry) { + entry.Defaults = &structs.IngressServiceConfig{ + MaxConnections: 2048, + MaxPendingRequests: 512, + MaxConcurrentRequests: 4096, + } + }, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-with-overwrite-defaults-service-max-connections", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", + "simple", nil, + func(entry *structs.IngressGatewayConfigEntry) { + entry.Defaults = &structs.IngressServiceConfig{ + MaxConnections: 2048, + MaxPendingRequests: 512, + } + entry.Listeners[0].Services[0].MaxConnections = 4096 + entry.Listeners[0].Services[0].MaxPendingRequests = 2048 + }, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-with-service-passive-health-check", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", + "simple", nil, + func(entry *structs.IngressGatewayConfigEntry) { + entry.Listeners[0].Services[0].MaxConnections = 4096 + entry.Listeners[0].Services[0].PassiveHealthCheck = &structs.PassiveHealthCheck{ + Interval: 5000000000, + MaxFailures: 10, + MaxEjectionPercent: uint32ptr(90), + } + }, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-with-defaults-passive-health-check", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", + "simple", nil, + func(entry *structs.IngressGatewayConfigEntry) { + enforcingConsecutive5xx := uint32(80) + entry.Defaults = &structs.IngressServiceConfig{ + MaxConnections: 2048, + MaxPendingRequests: 512, + MaxConcurrentRequests: 4096, + PassiveHealthCheck: &structs.PassiveHealthCheck{ + Interval: 5000000000, + MaxFailures: 10, + EnforcingConsecutive5xx: &enforcingConsecutive5xx, + MaxEjectionPercent: uint32ptr(90), + }, + } + }, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-with-overwrite-defaults-passive-health-check", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", + "simple", nil, + func(entry *structs.IngressGatewayConfigEntry) { + defaultEnforcingConsecutive5xx := uint32(80) + entry.Defaults = &structs.IngressServiceConfig{ + MaxConnections: 2048, + MaxPendingRequests: 512, + PassiveHealthCheck: &structs.PassiveHealthCheck{ + Interval: 5000000000, + EnforcingConsecutive5xx: &defaultEnforcingConsecutive5xx, + MaxEjectionPercent: uint32ptr(80), + }, + } + enforcingConsecutive5xx := uint32(50) + entry.Listeners[0].Services[0].MaxConnections = 4096 + entry.Listeners[0].Services[0].MaxPendingRequests = 2048 + entry.Listeners[0].Services[0].PassiveHealthCheck = &structs.PassiveHealthCheck{ + Interval: 8000000000, + EnforcingConsecutive5xx: &enforcingConsecutive5xx, + MaxEjectionPercent: uint32ptr(90), + BaseEjectionTime: durationPtr(12 * time.Second), + } + }, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-with-chain-external-sni", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", + "external-sni", nil, nil, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-with-chain-and-failover", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", + "failover", nil, nil, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-with-chain-and-failover-to-cluster-peer", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", + "failover-to-cluster-peer", nil, nil, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-with-tcp-chain-failover-through-remote-gateway", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", + "failover-through-remote-gateway", nil, nil, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-with-tcp-chain-failover-through-remote-gateway-triggered", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", + "failover-through-remote-gateway-triggered", nil, nil, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-with-tcp-chain-double-failover-through-remote-gateway", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", + "failover-through-double-remote-gateway", nil, nil, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-with-tcp-chain-double-failover-through-remote-gateway-triggered", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", + "failover-through-double-remote-gateway-triggered", nil, nil, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-with-tcp-chain-failover-through-local-gateway", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", + "failover-through-local-gateway", nil, nil, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-with-tcp-chain-failover-through-local-gateway-triggered", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", + "failover-through-local-gateway-triggered", nil, nil, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-with-tcp-chain-double-failover-through-local-gateway", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", + "failover-through-double-local-gateway", nil, nil, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-with-tcp-chain-double-failover-through-local-gateway-triggered", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", + "failover-through-double-local-gateway-triggered", nil, nil, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-splitter-with-resolver-redirect", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "http", + "splitter-with-resolver-redirect-multidc", nil, nil, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-lb-in-resolver", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "http", + "lb-resolver", nil, nil, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "terminating-gateway", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotTerminatingGateway(t, true, nil, nil) + }, + // TODO(proxystate): terminating gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "terminating-gateway-no-services", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotTerminatingGateway(t, false, nil, nil) + }, + // TODO(proxystate): terminating gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "terminating-gateway-service-subsets", + create: proxycfg.TestConfigSnapshotTerminatingGatewayServiceSubsetsWebAndCache, + // TODO(proxystate): terminating gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "terminating-gateway-hostname-service-subsets", + create: proxycfg.TestConfigSnapshotTerminatingGatewayHostnameSubsets, + // TODO(proxystate): terminating gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "terminating-gateway-sni", + create: proxycfg.TestConfigSnapshotTerminatingGatewaySNI, + // TODO(proxystate): terminating gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "terminating-gateway-http2-upstream", + create: proxycfg.TestConfigSnapshotTerminatingGatewayHTTP2, + // TODO(proxystate): terminating gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "terminating-gateway-http2-upstream-subsets", + create: proxycfg.TestConfigSnapshotTerminatingGatewaySubsetsHTTP2, + // TODO(proxystate): terminating gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "terminating-gateway-ignore-extra-resolvers", + create: proxycfg.TestConfigSnapshotTerminatingGatewayIgnoreExtraResolvers, + // TODO(proxystate): terminating gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "terminating-gateway-lb-config", + create: proxycfg.TestConfigSnapshotTerminatingGatewayLBConfigNoHashPolicies, + // TODO(proxystate): terminating gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "terminating-gateway-tcp-keepalives", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotTerminatingGateway(t, true, func(ns *structs.NodeService) { + if ns.Proxy.Config == nil { + ns.Proxy.Config = map[string]interface{}{} + } + ns.Proxy.Config["envoy_gateway_remote_tcp_enable_keepalive"] = true + ns.Proxy.Config["envoy_gateway_remote_tcp_keepalive_time"] = 133 + ns.Proxy.Config["envoy_gateway_remote_tcp_keepalive_interval"] = 27 + ns.Proxy.Config["envoy_gateway_remote_tcp_keepalive_probes"] = 5 + }, nil) + }, + // TODO(proxystate): terminating gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-multiple-listeners-duplicate-service", + create: proxycfg.TestConfigSnapshotIngress_MultipleListenersDuplicateService, + // TODO(proxystate): terminating gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "transparent-proxy-catalog-destinations-only", + create: proxycfg.TestConfigSnapshotTransparentProxyCatalogDestinationsOnly, + alsoRunTestForV2: true, + }, + { + name: "transparent-proxy-dial-instances-directly", + create: proxycfg.TestConfigSnapshotTransparentProxyDialDirectly, + alsoRunTestForV2: true, + }, + } + + tests = append(tests, makeClusterDiscoChainTests(false)...) + + latestEnvoyVersion := xdscommon.EnvoyVersions[0] + for _, envoyVersion := range xdscommon.EnvoyVersions { + sf, err := xdscommon.DetermineSupportedProxyFeaturesFromString(envoyVersion) + require.NoError(t, err) + t.Run("envoy-"+envoyVersion, func(t *testing.T) { + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + // Sanity check default with no overrides first + snap := tt.create(t) + + // We need to replace the TLS certs with deterministic ones to make golden + // files workable. Note we don't update these otherwise they'd change + // golder files for every test case and so not be any use! + testcommon.SetupTLSRootsAndLeaf(t, snap) + + // Need server just for logger dependency + g := NewResourceGenerator(testutil.Logger(t), nil, false) + g.ProxyFeatures = sf + + clusters, err := g.clustersFromSnapshot(snap) + require.NoError(t, err) + + sort.Slice(clusters, func(i, j int) bool { + return clusters[i].(*envoy_cluster_v3.Cluster).Name < clusters[j].(*envoy_cluster_v3.Cluster).Name + }) + + r, err := response.CreateResponse(xdscommon.ClusterType, "00000001", "00000001", clusters) + require.NoError(t, err) + + t.Run("current-xdsv1", func(t *testing.T) { + gotJSON := protoToJSON(t, r) + + gName := tt.name + if tt.overrideGoldenName != "" { + gName = tt.overrideGoldenName + } + + require.JSONEq(t, goldenEnvoy(t, filepath.Join("clusters", gName), envoyVersion, latestEnvoyVersion, gotJSON), gotJSON) + }) + + if tt.alsoRunTestForV2 { + generator := xdsv2.NewResourceGenerator(testutil.Logger(t)) + + converter := proxystateconverter.NewConverter(testutil.Logger(t), &mockCfgFetcher{addressLan: "10.10.10.10"}) + proxyState, err := converter.ProxyStateFromSnapshot(snap) + require.NoError(t, err) + + res, err := generator.AllResourcesFromIR(proxyState) + require.NoError(t, err) + + clusters = res[xdscommon.ClusterType] + + // The order of clusters returned via CDS isn't relevant, so it's safe + // to sort these for the purposes of test comparisons. + sort.Slice(clusters, func(i, j int) bool { + return clusters[i].(*envoy_cluster_v3.Cluster).Name < clusters[j].(*envoy_cluster_v3.Cluster).Name + }) + + r, err := response.CreateResponse(xdscommon.ClusterType, "00000001", "00000001", clusters) + require.NoError(t, err) + + t.Run("current-xdsv2", func(t *testing.T) { + gotJSON := protoToJSON(t, r) + + gName := tt.name + if tt.overrideGoldenName != "" { + gName = tt.overrideGoldenName + } + + expectedJSON := goldenEnvoy(t, filepath.Join("clusters", gName), envoyVersion, latestEnvoyVersion, gotJSON) + require.JSONEq(t, expectedJSON, gotJSON) + }) + } + }) + } + }) + } +} + type customClusterJSONOptions struct { Name string TLSContext string diff --git a/agent/xds/endpoints_test.go b/agent/xds/endpoints_test.go index 4a4cff89d0506..9daf5b31f55b3 100644 --- a/agent/xds/endpoints_test.go +++ b/agent/xds/endpoints_test.go @@ -4,15 +4,23 @@ package xds import ( + "path/filepath" + "sort" "testing" envoy_core_v3 "github.com/envoyproxy/go-control-plane/envoy/config/core/v3" envoy_endpoint_v3 "github.com/envoyproxy/go-control-plane/envoy/config/endpoint/v3" "github.com/hashicorp/consul/agent/proxycfg" "github.com/hashicorp/consul/agent/structs" + "github.com/hashicorp/consul/agent/xds/proxystateconverter" "github.com/hashicorp/consul/agent/xds/response" + "github.com/hashicorp/consul/agent/xds/testcommon" + "github.com/hashicorp/consul/agent/xdsv2" + "github.com/hashicorp/consul/envoyextensions/xdscommon" + "github.com/hashicorp/consul/sdk/testutil" "github.com/hashicorp/go-hclog" "github.com/mitchellh/copystructure" + testinf "github.com/mitchellh/go-testing-interface" "github.com/stretchr/testify/require" ) @@ -229,3 +237,450 @@ func Test_makeLoadAssignment(t *testing.T) { }) } } + +type endpointTestCase struct { + name string + create func(t testinf.T) *proxycfg.ConfigSnapshot + overrideGoldenName string + alsoRunTestForV2 bool +} + +func makeEndpointDiscoChainTests(enterprise bool) []endpointTestCase { + return []endpointTestCase{ + { + name: "connect-proxy-with-chain", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "simple", enterprise, nil, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "connect-proxy-with-chain-external-sni", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "external-sni", enterprise, nil, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "connect-proxy-with-chain-and-overrides", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "simple-with-overrides", enterprise, nil, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "connect-proxy-with-chain-and-failover", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "failover", enterprise, nil, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "connect-proxy-with-tcp-chain-failover-through-remote-gateway", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "failover-through-remote-gateway", enterprise, nil, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "failover-through-remote-gateway-triggered", enterprise, nil, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "connect-proxy-with-tcp-chain-double-failover-through-remote-gateway", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "failover-through-double-remote-gateway", enterprise, nil, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "failover-through-double-remote-gateway-triggered", enterprise, nil, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "connect-proxy-with-tcp-chain-failover-through-local-gateway", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "failover-through-local-gateway", enterprise, nil, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "failover-through-local-gateway-triggered", enterprise, nil, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "connect-proxy-with-tcp-chain-double-failover-through-local-gateway", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "failover-through-double-local-gateway", enterprise, nil, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "failover-through-double-local-gateway-triggered", enterprise, nil, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "connect-proxy-with-default-chain-and-custom-cluster", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "default", enterprise, func(ns *structs.NodeService) { + ns.Proxy.Upstreams[0].Config["envoy_cluster_json"] = + customAppClusterJSON(t, customClusterJSONOptions{ + Name: "myservice", + }) + }, nil) + }, + // TODO(proxystate): requires custom cluster work + alsoRunTestForV2: false, + }, + { + name: "splitter-with-resolver-redirect", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "splitter-with-resolver-redirect-multidc", enterprise, nil, nil) + }, + alsoRunTestForV2: true, + }, + } +} + +func TestEndpointsFromSnapshot(t *testing.T) { + // TODO: we should move all of these to TestAllResourcesFromSnapshot + // eventually to test all of the xDS types at once with the same input, + // just as it would be triggered by our xDS server. + if testing.Short() { + t.Skip("too slow for testing.Short") + } + + tests := []endpointTestCase{ + { + name: "mesh-gateway", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotMeshGateway(t, "default", nil, nil) + }, + // TODO(proxystate): mesh gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "mesh-gateway-using-federation-states", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotMeshGateway(t, "federation-states", nil, nil) + }, + // TODO(proxystate): mesh gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "mesh-gateway-newer-information-in-federation-states", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotMeshGateway(t, "newer-info-in-federation-states", nil, nil) + }, + // TODO(proxystate): mesh gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "mesh-gateway-using-federation-control-plane", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotMeshGateway(t, "mesh-gateway-federation", nil, nil) + }, + // TODO(proxystate): mesh gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "mesh-gateway-older-information-in-federation-states", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotMeshGateway(t, "older-info-in-federation-states", nil, nil) + }, + // TODO(proxystate): mesh gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "mesh-gateway-no-services", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotMeshGateway(t, "no-services", nil, nil) + }, + // TODO(proxystate): mesh gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "mesh-gateway-service-subsets", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotMeshGateway(t, "service-subsets2", nil, nil) + }, + // TODO(proxystate): mesh gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "mesh-gateway-default-service-subset", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotMeshGateway(t, "default-service-subsets2", nil, nil) + }, + // TODO(proxystate): mesh gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-gateway", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", + "default", nil, nil, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-gateway-nil-config-entry", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway_NilConfigEntry(t) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-gateway-no-services", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, false, "tcp", + "default", nil, nil, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-with-chain", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", + "simple", nil, nil, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-with-chain-external-sni", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", + "external-sni", nil, nil, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-with-chain-and-failover", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", + "failover", nil, nil, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-with-chain-and-failover-to-cluster-peer", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", + "failover-to-cluster-peer", nil, nil, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-with-tcp-chain-failover-through-remote-gateway", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", + "failover-through-remote-gateway", nil, nil, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-with-tcp-chain-failover-through-remote-gateway-triggered", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", + "failover-through-remote-gateway-triggered", nil, nil, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-with-tcp-chain-double-failover-through-remote-gateway", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", + "failover-through-double-remote-gateway", nil, nil, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-with-tcp-chain-double-failover-through-remote-gateway-triggered", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", + "failover-through-double-remote-gateway-triggered", nil, nil, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-with-tcp-chain-failover-through-local-gateway", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", + "failover-through-local-gateway", nil, nil, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-with-tcp-chain-failover-through-local-gateway-triggered", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", + "failover-through-local-gateway-triggered", nil, nil, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-with-tcp-chain-double-failover-through-local-gateway", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", + "failover-through-double-local-gateway", nil, nil, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-with-tcp-chain-double-failover-through-local-gateway-triggered", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", + "failover-through-double-local-gateway-triggered", nil, nil, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-splitter-with-resolver-redirect", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "http", + "splitter-with-resolver-redirect-multidc", nil, nil, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "terminating-gateway", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotTerminatingGateway(t, true, nil, nil) + }, + // TODO(proxystate): terminating gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "terminating-gateway-no-services", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotTerminatingGateway(t, false, nil, nil) + }, + // TODO(proxystate): terminating gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "terminating-gateway-service-subsets", + create: proxycfg.TestConfigSnapshotTerminatingGatewayServiceSubsets, + // TODO(proxystate): terminating gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "terminating-gateway-default-service-subset", + create: proxycfg.TestConfigSnapshotTerminatingGatewayDefaultServiceSubset, + // TODO(proxystate): terminating gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-multiple-listeners-duplicate-service", + create: proxycfg.TestConfigSnapshotIngress_MultipleListenersDuplicateService, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + } + + tests = append(tests, makeEndpointDiscoChainTests(false)...) + + latestEnvoyVersion := xdscommon.EnvoyVersions[0] + for _, envoyVersion := range xdscommon.EnvoyVersions { + sf, err := xdscommon.DetermineSupportedProxyFeaturesFromString(envoyVersion) + require.NoError(t, err) + t.Run("envoy-"+envoyVersion, func(t *testing.T) { + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + // Sanity check default with no overrides first + snap := tt.create(t) + + // We need to replace the TLS certs with deterministic ones to make golden + // files workable. Note we don't update these otherwise they'd change + // golden files for every test case and so not be any use! + testcommon.SetupTLSRootsAndLeaf(t, snap) + + // Need server just for logger dependency + g := NewResourceGenerator(testutil.Logger(t), nil, false) + g.ProxyFeatures = sf + + endpoints, err := g.endpointsFromSnapshot(snap) + require.NoError(t, err) + + sort.Slice(endpoints, func(i, j int) bool { + return endpoints[i].(*envoy_endpoint_v3.ClusterLoadAssignment).ClusterName < endpoints[j].(*envoy_endpoint_v3.ClusterLoadAssignment).ClusterName + }) + r, err := response.CreateResponse(xdscommon.EndpointType, "00000001", "00000001", endpoints) + require.NoError(t, err) + + t.Run("current-xdsv1", func(t *testing.T) { + gotJSON := protoToJSON(t, r) + + gName := tt.name + if tt.overrideGoldenName != "" { + gName = tt.overrideGoldenName + } + + require.JSONEq(t, goldenEnvoy(t, filepath.Join("endpoints", gName), envoyVersion, latestEnvoyVersion, gotJSON), gotJSON) + }) + + if tt.alsoRunTestForV2 { + generator := xdsv2.NewResourceGenerator(testutil.Logger(t)) + + converter := proxystateconverter.NewConverter(testutil.Logger(t), &mockCfgFetcher{addressLan: "10.10.10.10"}) + proxyState, err := converter.ProxyStateFromSnapshot(snap) + require.NoError(t, err) + + res, err := generator.AllResourcesFromIR(proxyState) + require.NoError(t, err) + + endpoints = res[xdscommon.EndpointType] + // The order of listeners returned via LDS isn't relevant, so it's safe + // to sort these for the purposes of test comparisons. + sort.Slice(endpoints, func(i, j int) bool { + return endpoints[i].(*envoy_endpoint_v3.ClusterLoadAssignment).ClusterName < endpoints[j].(*envoy_endpoint_v3.ClusterLoadAssignment).ClusterName + }) + + r, err := response.CreateResponse(xdscommon.EndpointType, "00000001", "00000001", endpoints) + require.NoError(t, err) + + t.Run("current-xdsv2", func(t *testing.T) { + gotJSON := protoToJSON(t, r) + + gName := tt.name + if tt.overrideGoldenName != "" { + gName = tt.overrideGoldenName + } + + expectedJSON := goldenEnvoy(t, filepath.Join("endpoints", gName), envoyVersion, latestEnvoyVersion, gotJSON) + require.JSONEq(t, expectedJSON, gotJSON) + }) + } + }) + } + }) + } +} diff --git a/agent/xds/listeners_test.go b/agent/xds/listeners_test.go index cec681a9adeb9..ff538342f78fd 100644 --- a/agent/xds/listeners_test.go +++ b/agent/xds/listeners_test.go @@ -5,18 +5,1423 @@ package xds import ( "bytes" + "path/filepath" + "sort" "testing" "text/template" - testinf "github.com/mitchellh/go-testing-interface" "github.com/stretchr/testify/assert" + "google.golang.org/protobuf/proto" + + envoy_listener_v3 "github.com/envoyproxy/go-control-plane/envoy/config/listener/v3" + testinf "github.com/mitchellh/go-testing-interface" "github.com/stretchr/testify/require" "github.com/hashicorp/consul/agent/proxycfg" "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/agent/xds/configfetcher" + "github.com/hashicorp/consul/agent/xds/proxystateconverter" + "github.com/hashicorp/consul/agent/xds/response" + "github.com/hashicorp/consul/agent/xds/testcommon" + "github.com/hashicorp/consul/agent/xdsv2" + "github.com/hashicorp/consul/envoyextensions/xdscommon" + "github.com/hashicorp/consul/proto/private/pbpeering" + "github.com/hashicorp/consul/sdk/testutil" + "github.com/hashicorp/consul/types" ) +type listenerTestCase struct { + name string + create func(t testinf.T) *proxycfg.ConfigSnapshot + // Setup is called before the test starts. It is passed the snapshot from + // TestConfigSnapshot and is allowed to modify it in any way to setup the + // test input. + overrideGoldenName string + generatorSetup func(*ResourceGenerator) + alsoRunTestForV2 bool +} + +func makeListenerDiscoChainTests(enterprise bool) []listenerTestCase { + return []listenerTestCase{ + { + name: "custom-upstream-ignored-with-disco-chain", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "failover", enterprise, func(ns *structs.NodeService) { + for i := range ns.Proxy.Upstreams { + if ns.Proxy.Upstreams[i].DestinationName != "db" { + continue // only tweak the db upstream + } + if ns.Proxy.Upstreams[i].Config == nil { + ns.Proxy.Upstreams[i].Config = map[string]interface{}{} + } + + uid := proxycfg.NewUpstreamID(&ns.Proxy.Upstreams[i]) + + ns.Proxy.Upstreams[i].Config["envoy_listener_json"] = + customListenerJSON(t, customListenerJSONOptions{ + Name: uid.EnvoyID() + ":custom-upstream", + }) + } + }, nil) + }, + }, + { + name: "splitter-with-resolver-redirect", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "splitter-with-resolver-redirect-multidc", enterprise, nil, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "connect-proxy-with-tcp-chain", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "simple", enterprise, nil, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "connect-proxy-with-http-chain", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "simple", enterprise, nil, nil, + &structs.ProxyConfigEntry{ + Kind: structs.ProxyDefaults, + Name: structs.ProxyConfigGlobal, + Config: map[string]interface{}{ + "protocol": "http", + }, + }, + ) + }, + alsoRunTestForV2: true, + }, + { + name: "connect-proxy-with-http2-chain", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "simple", enterprise, nil, nil, + &structs.ProxyConfigEntry{ + Kind: structs.ProxyDefaults, + Name: structs.ProxyConfigGlobal, + Config: map[string]interface{}{ + "protocol": "http2", + }, + }, + ) + }, + alsoRunTestForV2: true, + }, + { + name: "connect-proxy-with-grpc-chain", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "simple", enterprise, nil, nil, + &structs.ProxyConfigEntry{ + Kind: structs.ProxyDefaults, + Name: structs.ProxyConfigGlobal, + Config: map[string]interface{}{ + "protocol": "grpc", + }, + }, + ) + }, + alsoRunTestForV2: true, + }, + { + name: "connect-proxy-with-chain-external-sni", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "external-sni", enterprise, nil, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "connect-proxy-with-chain-and-overrides", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "simple-with-overrides", enterprise, nil, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "connect-proxy-with-tcp-chain-failover-through-remote-gateway", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "failover-through-remote-gateway", enterprise, nil, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "connect-proxy-with-tcp-chain-failover-through-local-gateway", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "failover-through-local-gateway", enterprise, nil, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "connect-proxy-with-jwt-config-entry-with-local", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "simple", enterprise, func(ns *structs.NodeService) { + ns.Proxy.Config["protocol"] = "http" + }, + []proxycfg.UpdateEvent{ + { + CorrelationID: "jwt-provider", + Result: &structs.IndexedConfigEntries{ + Kind: "jwt-provider", + Entries: []structs.ConfigEntry{ + &structs.JWTProviderConfigEntry{ + Name: "okta", + JSONWebKeySet: &structs.JSONWebKeySet{ + Local: &structs.LocalJWKS{ + JWKS: "aGVsbG8gd29ybGQK", + }, + }, + Locations: []*structs.JWTLocation{ + { + QueryParam: &structs.JWTLocationQueryParam{ + Name: "token", + }, + }, + { + Cookie: &structs.JWTLocationCookie{ + Name: "token", + }, + }, + }, + }, + }, + }, + }, + { + CorrelationID: "intentions", + Result: structs.SimplifiedIntentions{ + { + SourceName: "*", + DestinationName: "db", + Permissions: []*structs.IntentionPermission{ + { + JWT: &structs.IntentionJWTRequirement{ + Providers: []*structs.IntentionJWTProvider{ + { + Name: "okta", + }, + }, + }, + }, + }, + }, + }, + }, + }, + ) + }, + }, + } +} + +func TestListenersFromSnapshot(t *testing.T) { + // TODO: we should move all of these to TestAllResourcesFromSnapshot + // eventually to test all of the xDS types at once with the same input, + // just as it would be triggered by our xDS server. + if testing.Short() { + t.Skip("too slow for testing.Short") + } + + tests := []listenerTestCase{ + { + name: "connect-proxy-with-tls-outgoing-min-version-auto", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, nil, []proxycfg.UpdateEvent{ + { + CorrelationID: "mesh", + Result: &structs.ConfigEntryResponse{ + Entry: &structs.MeshConfigEntry{ + TLS: &structs.MeshTLSConfig{ + Outgoing: &structs.MeshDirectionalTLSConfig{ + TLSMinVersion: types.TLSVersionAuto, + }, + }, + }, + }, + }, + }) + }, + alsoRunTestForV2: true, + }, + { + name: "connect-proxy-with-tls-incoming-min-version", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, nil, []proxycfg.UpdateEvent{ + { + CorrelationID: "mesh", + Result: &structs.ConfigEntryResponse{ + Entry: &structs.MeshConfigEntry{ + TLS: &structs.MeshTLSConfig{ + Incoming: &structs.MeshDirectionalTLSConfig{ + TLSMinVersion: types.TLSv1_3, + }, + }, + }, + }, + }, + }) + }, + alsoRunTestForV2: true, + }, + { + name: "connect-proxy-with-tls-incoming-max-version", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, nil, []proxycfg.UpdateEvent{ + { + CorrelationID: "mesh", + Result: &structs.ConfigEntryResponse{ + Entry: &structs.MeshConfigEntry{ + TLS: &structs.MeshTLSConfig{ + Incoming: &structs.MeshDirectionalTLSConfig{ + TLSMaxVersion: types.TLSv1_2, + }, + }, + }, + }, + }, + }) + }, + alsoRunTestForV2: true, + }, + { + name: "connect-proxy-with-tls-incoming-cipher-suites", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, nil, []proxycfg.UpdateEvent{ + { + CorrelationID: "mesh", + Result: &structs.ConfigEntryResponse{ + Entry: &structs.MeshConfigEntry{ + TLS: &structs.MeshTLSConfig{ + Incoming: &structs.MeshDirectionalTLSConfig{ + CipherSuites: []types.TLSCipherSuite{ + types.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, + types.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, + }, + }, + }, + }, + }, + }, + }) + }, + alsoRunTestForV2: true, + }, + { + name: "grpc-public-listener", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { + ns.Proxy.Config["protocol"] = "grpc" + }, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "listener-bind-address", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { + ns.Proxy.Config["bind_address"] = "127.0.0.2" + }, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "listener-bind-port", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { + ns.Proxy.Config["bind_port"] = 8888 + }, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "listener-bind-address-port", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { + ns.Proxy.Config["bind_address"] = "127.0.0.2" + ns.Proxy.Config["bind_port"] = 8888 + }, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "listener-unix-domain-socket", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { + ns.Proxy.Upstreams[0].LocalBindAddress = "" + ns.Proxy.Upstreams[0].LocalBindPort = 0 + ns.Proxy.Upstreams[0].LocalBindSocketPath = "/tmp/service-mesh/client-1/grpc-employee-server" + ns.Proxy.Upstreams[0].LocalBindSocketMode = "0640" + }, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "listener-max-inbound-connections", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { + ns.Proxy.Config["max_inbound_connections"] = 222 + }, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "http2-public-listener", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { + ns.Proxy.Config["protocol"] = "http2" + }, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "listener-balance-inbound-connections", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { + ns.Proxy.Config["balance_inbound_connections"] = "exact_balance" + }, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "listener-balance-outbound-connections-bind-port", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { + ns.Proxy.Upstreams[0].Config["balance_outbound_connections"] = "exact_balance" + }, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "http-public-listener", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { + ns.Proxy.Config["protocol"] = "http" + }, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "http-public-listener-no-xfcc", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, + func(ns *structs.NodeService) { + ns.Proxy.Config["protocol"] = "http" + }, + []proxycfg.UpdateEvent{ + { + CorrelationID: "mesh", + Result: &structs.ConfigEntryResponse{ + Entry: &structs.MeshConfigEntry{ + HTTP: &structs.MeshHTTPConfig{ + SanitizeXForwardedClientCert: true, + }, + }, + }, + }, + }) + }, + alsoRunTestForV2: true, + }, + { + name: "http-listener-with-timeouts", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { + ns.Proxy.Config["protocol"] = "http" + ns.Proxy.Config["local_connect_timeout_ms"] = 1234 + ns.Proxy.Config["local_request_timeout_ms"] = 2345 + ns.Proxy.Config["local_idle_timeout_ms"] = 3456 + }, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "http-upstream", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { + ns.Proxy.Upstreams[0].Config["protocol"] = "http" + }, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "custom-public-listener", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { + ns.Proxy.Config["envoy_public_listener_json"] = + customListenerJSON(t, customListenerJSONOptions{ + Name: "custom-public-listen", + }) + }, nil) + }, + }, + { + name: "custom-public-listener-http", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { + ns.Proxy.Config["protocol"] = "http" + ns.Proxy.Config["envoy_public_listener_json"] = + customHTTPListenerJSON(t, customHTTPListenerJSONOptions{ + Name: "custom-public-listen", + }) + }, nil) + }, + }, + { + name: "custom-public-listener-http-2", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { + ns.Proxy.Config["protocol"] = "http" + ns.Proxy.Config["envoy_public_listener_json"] = + customHTTPListenerJSON(t, customHTTPListenerJSONOptions{ + Name: "custom-public-listen", + HTTPConnectionManagerName: httpConnectionManagerNewName, + }) + }, nil) + }, + }, + { + name: "custom-public-listener-http-missing", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { + ns.Proxy.Config["protocol"] = "http" + ns.Proxy.Config["envoy_public_listener_json"] = + customListenerJSON(t, customListenerJSONOptions{ + Name: "custom-public-listen", + }) + }, nil) + }, + }, + { + name: "custom-public-listener-ignores-tls", + overrideGoldenName: "custom-public-listener", // should be the same + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { + ns.Proxy.Config["envoy_public_listener_json"] = + customListenerJSON(t, customListenerJSONOptions{ + Name: "custom-public-listen", + // Attempt to override the TLS context should be ignored + TLSContext: `"allowRenegotiation": false`, + }) + }, nil) + }, + }, + { + name: "custom-upstream", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { + for i := range ns.Proxy.Upstreams { + if ns.Proxy.Upstreams[i].DestinationName != "db" { + continue // only tweak the db upstream + } + if ns.Proxy.Upstreams[i].Config == nil { + ns.Proxy.Upstreams[i].Config = map[string]interface{}{} + } + + uid := proxycfg.NewUpstreamID(&ns.Proxy.Upstreams[i]) + + ns.Proxy.Upstreams[i].Config["envoy_listener_json"] = + customListenerJSON(t, customListenerJSONOptions{ + Name: uid.EnvoyID() + ":custom-upstream", + }) + } + }, nil) + }, + }, + { + name: "custom-upstream-with-prepared-query", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { + for i := range ns.Proxy.Upstreams { + if ns.Proxy.Upstreams[i].DestinationName != "db" { + continue // only tweak the db upstream + } + if ns.Proxy.Upstreams[i].Config == nil { + ns.Proxy.Upstreams[i].Config = map[string]interface{}{} + } + + uid := proxycfg.NewUpstreamID(&ns.Proxy.Upstreams[i]) + + // Triggers an override with the presence of the escape hatch listener + ns.Proxy.Upstreams[i].DestinationType = structs.UpstreamDestTypePreparedQuery + + ns.Proxy.Upstreams[i].Config["envoy_listener_json"] = + customListenerJSON(t, customListenerJSONOptions{ + Name: uid.EnvoyID() + ":custom-upstream", + }) + } + }, nil) + }, + }, + { + name: "connect-proxy-upstream-defaults", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { + for _, v := range ns.Proxy.Upstreams { + // Prepared queries do not get centrally configured upstream defaults merged into them. + if v.DestinationType == structs.UpstreamDestTypePreparedQuery { + continue + } + // Represent upstream config as if it came from centrally configured upstream defaults. + // The name/namespace must not make it onto the cluster name attached to the outbound listener. + v.CentrallyConfigured = true + v.DestinationNamespace = structs.WildcardSpecifier + v.DestinationName = structs.WildcardSpecifier + } + }, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "expose-paths-local-app-paths", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotExposeConfig(t, nil) + }, + }, + { + name: "expose-paths-new-cluster-http2", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotExposeConfig(t, func(ns *structs.NodeService) { + ns.Proxy.Expose.Paths[1] = structs.ExposePath{ + LocalPathPort: 9090, + Path: "/grpc.health.v1.Health/Check", + ListenerPort: 21501, + Protocol: "http2", + } + }) + }, + }, + { + // NOTE: if IPv6 is not supported in the kernel per + // platform.SupportsIPv6() then this test will fail because the golden + // files were generated assuming ipv6 support was present + name: "expose-checks-http", + create: proxycfg.TestConfigSnapshotExposeChecks, + generatorSetup: func(s *ResourceGenerator) { + s.CfgFetcher = configFetcherFunc(func() string { + return "192.0.2.1" + }) + }, + }, + { + // NOTE: if IPv6 is not supported in the kernel per + // platform.SupportsIPv6() then this test will fail because the golden + // files were generated assuming ipv6 support was present + name: "expose-checks-http-with-bind-override", + create: proxycfg.TestConfigSnapshotExposeChecksWithBindOverride, + generatorSetup: func(s *ResourceGenerator) { + s.CfgFetcher = configFetcherFunc(func() string { + return "192.0.2.1" + }) + }, + }, + { + // NOTE: if IPv6 is not supported in the kernel per + // platform.SupportsIPv6() then this test will fail because the golden + // files were generated assuming ipv6 support was present + name: "expose-checks-grpc", + create: proxycfg.TestConfigSnapshotExposeChecksGRPC, + generatorSetup: func(s *ResourceGenerator) { + s.CfgFetcher = configFetcherFunc(func() string { + return "192.0.2.1" + }) + }, + }, + { + name: "mesh-gateway", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotMeshGateway(t, "default", nil, nil) + }, + }, + { + name: "mesh-gateway-using-federation-states", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotMeshGateway(t, "federation-states", nil, nil) + }, + }, + { + name: "mesh-gateway-using-federation-control-plane", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotMeshGateway(t, "mesh-gateway-federation", nil, nil) + }, + }, + { + name: "mesh-gateway-no-services", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotMeshGateway(t, "no-services", nil, nil) + }, + }, + { + name: "mesh-gateway-tagged-addresses", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotMeshGateway(t, "default", func(ns *structs.NodeService) { + ns.Proxy.Config = map[string]interface{}{ + "envoy_mesh_gateway_no_default_bind": true, + "envoy_mesh_gateway_bind_tagged_addresses": true, + } + }, nil) + }, + }, + { + name: "mesh-gateway-custom-addresses", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotMeshGateway(t, "default", func(ns *structs.NodeService) { + ns.Proxy.Config = map[string]interface{}{ + "envoy_mesh_gateway_bind_addresses": map[string]structs.ServiceAddress{ + "foo": { + Address: "198.17.2.3", + Port: 8080, + }, + "bar": { + Address: "2001:db8::ff", + Port: 9999, + }, + "baz": { + Address: "127.0.0.1", + Port: 8765, + }, + }, + } + }, nil) + }, + }, + { + name: "api-gateway", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotAPIGateway(t, "default", nil, nil, nil, nil, nil) + }, + }, + { + name: "api-gateway-nil-config-entry", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotAPIGateway_NilConfigEntry(t) + }, + }, + { + name: "api-gateway-tcp-listener", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotAPIGateway(t, "default", nil, func(entry *structs.APIGatewayConfigEntry, bound *structs.BoundAPIGatewayConfigEntry) { + entry.Listeners = []structs.APIGatewayListener{ + { + Name: "listener", + Protocol: structs.ListenerProtocolTCP, + Port: 8080, + }, + } + bound.Listeners = []structs.BoundAPIGatewayListener{ + { + Name: "listener", + }, + } + }, nil, nil, nil) + }, + }, + { + name: "api-gateway-tcp-listener-with-tcp-route", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotAPIGateway(t, "default", nil, func(entry *structs.APIGatewayConfigEntry, bound *structs.BoundAPIGatewayConfigEntry) { + entry.Listeners = []structs.APIGatewayListener{ + { + Name: "listener", + Protocol: structs.ListenerProtocolTCP, + Port: 8080, + }, + } + bound.Listeners = []structs.BoundAPIGatewayListener{ + { + Name: "listener", + Routes: []structs.ResourceReference{ + { + Name: "tcp-route", + Kind: structs.TCPRoute, + }, + }, + }, + } + + }, []structs.BoundRoute{ + &structs.TCPRouteConfigEntry{ + Name: "tcp-route", + Kind: structs.TCPRoute, + Parents: []structs.ResourceReference{ + { + Kind: structs.APIGateway, + Name: "api-gateway", + }, + }, + Services: []structs.TCPService{ + {Name: "tcp-service"}, + }, + }, + }, nil, nil) + }, + }, + { + name: "api-gateway-http-listener", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotAPIGateway(t, "default", nil, func(entry *structs.APIGatewayConfigEntry, bound *structs.BoundAPIGatewayConfigEntry) { + entry.Listeners = []structs.APIGatewayListener{ + { + Name: "listener", + Protocol: structs.ListenerProtocolHTTP, + Port: 8080, + }, + } + bound.Listeners = []structs.BoundAPIGatewayListener{ + { + Name: "listener", + Routes: []structs.ResourceReference{}, + }, + } + }, nil, nil, nil) + }, + }, + { + name: "api-gateway-http-listener-with-http-route", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotAPIGateway(t, "default", nil, func(entry *structs.APIGatewayConfigEntry, bound *structs.BoundAPIGatewayConfigEntry) { + entry.Listeners = []structs.APIGatewayListener{ + { + Name: "listener", + Protocol: structs.ListenerProtocolHTTP, + Port: 8080, + }, + } + bound.Listeners = []structs.BoundAPIGatewayListener{ + { + Name: "listener", + Routes: []structs.ResourceReference{ + { + Name: "http-route", + Kind: structs.HTTPRoute, + }, + }, + }, + } + }, []structs.BoundRoute{ + &structs.HTTPRouteConfigEntry{ + Name: "http-route", + Kind: structs.HTTPRoute, + Parents: []structs.ResourceReference{ + { + Kind: structs.APIGateway, + Name: "api-gateway", + }, + }, + Rules: []structs.HTTPRouteRule{ + { + Services: []structs.HTTPService{ + {Name: "http-service"}, + }, + }, + }, + }, + }, nil, nil) + }, + }, + { + name: "api-gateway-tcp-listener-with-tcp-and-http-route", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotAPIGateway(t, "default", nil, func(entry *structs.APIGatewayConfigEntry, bound *structs.BoundAPIGatewayConfigEntry) { + entry.Listeners = []structs.APIGatewayListener{ + { + Name: "listener-tcp", + Protocol: structs.ListenerProtocolTCP, + Port: 8080, + }, + { + Name: "listener-http", + Protocol: structs.ListenerProtocolHTTP, + Port: 8081, + }, + } + bound.Listeners = []structs.BoundAPIGatewayListener{ + { + Name: "listener-tcp", + Routes: []structs.ResourceReference{ + { + Name: "tcp-route", + Kind: structs.TCPRoute, + }, + }, + }, + { + Name: "listener-http", + Routes: []structs.ResourceReference{ + { + Name: "http-route", + Kind: structs.HTTPRoute, + }, + }, + }, + } + }, []structs.BoundRoute{ + &structs.TCPRouteConfigEntry{ + Name: "tcp-route", + Kind: structs.TCPRoute, + Parents: []structs.ResourceReference{ + { + Kind: structs.APIGateway, + Name: "api-gateway", + }, + }, + Services: []structs.TCPService{ + {Name: "tcp-service"}, + }, + }, + &structs.HTTPRouteConfigEntry{ + Name: "http-route", + Kind: structs.HTTPRoute, + Parents: []structs.ResourceReference{ + { + Kind: structs.APIGateway, + Name: "api-gateway", + }, + }, + Rules: []structs.HTTPRouteRule{ + { + Services: []structs.HTTPService{ + {Name: "http-service"}, + }, + }, + }, + }, + }, nil, nil) + }, + }, + { + name: "ingress-gateway", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", "default", nil, nil, nil) + }, + }, + { + name: "ingress-gateway-nil-config-entry", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway_NilConfigEntry(t) + }, + }, + { + name: "ingress-gateway-bind-addrs", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", "default", func(ns *structs.NodeService) { + // + ns.TaggedAddresses = map[string]structs.ServiceAddress{ + "lan": {Address: "10.0.0.1"}, + "wan": {Address: "172.16.0.1"}, + } + ns.Proxy.Config = map[string]interface{}{ + "envoy_gateway_no_default_bind": true, + "envoy_gateway_bind_tagged_addresses": true, + "envoy_gateway_bind_addresses": map[string]structs.ServiceAddress{ + "foo": {Address: "8.8.8.8"}, + }, + } + }, nil, nil) + }, + }, + { + name: "ingress-gateway-no-services", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, false, "tcp", + "default", nil, nil, nil) + }, + }, + { + name: "ingress-with-chain-external-sni", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", + "external-sni", nil, nil, nil) + }, + }, + { + name: "ingress-with-tcp-chain-failover-through-remote-gateway", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", + "failover-through-remote-gateway", nil, nil, nil) + }, + }, + { + name: "ingress-with-tcp-chain-failover-through-local-gateway", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", + "failover-through-local-gateway", nil, nil, nil) + }, + }, + { + name: "ingress-splitter-with-resolver-redirect", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "http", + "splitter-with-resolver-redirect-multidc", nil, nil, nil) + }, + }, + { + name: "terminating-gateway", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotTerminatingGateway(t, true, nil, nil) + }, + }, + { + name: "terminating-gateway-custom-trace-listener", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotTerminatingGateway(t, true, func(ns *structs.NodeService) { + ns.Proxy.Config = map[string]interface{}{} + ns.Proxy.Config["protocol"] = "http" + ns.Proxy.Config["envoy_listener_tracing_json"] = customTraceJSON(t) + }, nil) + }, + }, + { + name: "terminating-gateway-with-tls-incoming-min-version", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotTerminatingGateway(t, true, nil, []proxycfg.UpdateEvent{ + { + CorrelationID: "mesh", + Result: &structs.ConfigEntryResponse{ + Entry: &structs.MeshConfigEntry{ + TLS: &structs.MeshTLSConfig{ + Incoming: &structs.MeshDirectionalTLSConfig{ + TLSMinVersion: types.TLSv1_3, + }, + }, + }, + }, + }, + }) + }, + }, + { + name: "terminating-gateway-with-tls-incoming-max-version", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotTerminatingGateway(t, true, nil, []proxycfg.UpdateEvent{ + { + CorrelationID: "mesh", + Result: &structs.ConfigEntryResponse{ + Entry: &structs.MeshConfigEntry{ + TLS: &structs.MeshTLSConfig{ + Incoming: &structs.MeshDirectionalTLSConfig{ + TLSMaxVersion: types.TLSv1_2, + }, + }, + }, + }, + }, + }) + }, + }, + { + name: "terminating-gateway-with-tls-incoming-cipher-suites", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotTerminatingGateway(t, true, nil, []proxycfg.UpdateEvent{ + { + CorrelationID: "mesh", + Result: &structs.ConfigEntryResponse{ + Entry: &structs.MeshConfigEntry{ + TLS: &structs.MeshTLSConfig{ + Incoming: &structs.MeshDirectionalTLSConfig{ + CipherSuites: []types.TLSCipherSuite{ + types.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, + types.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, + }, + }, + }, + }, + }, + }, + }) + }, + }, + { + name: "terminating-gateway-no-services", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotTerminatingGateway(t, false, nil, nil) + }, + }, + { + name: "terminating-gateway-custom-and-tagged-addresses", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotTerminatingGateway(t, true, func(ns *structs.NodeService) { + ns.Proxy.Config = map[string]interface{}{ + "envoy_gateway_no_default_bind": true, + "envoy_gateway_bind_tagged_addresses": true, + "envoy_gateway_bind_addresses": map[string]structs.ServiceAddress{ + // This bind address should not get a listener due to deduplication and it sorts to the end + "z-duplicate-of-tagged-wan-addr": { + Address: "198.18.0.1", + Port: 443, + }, + "foo": { + Address: "198.17.2.3", + Port: 8080, + }, + }, + } + }, nil) + }, + }, + { + name: "terminating-gateway-service-subsets", + create: proxycfg.TestConfigSnapshotTerminatingGatewayServiceSubsets, + }, + { + name: "ingress-http-multiple-services", + create: proxycfg.TestConfigSnapshotIngress_HTTPMultipleServices, + }, + { + name: "ingress-grpc-multiple-services", + create: proxycfg.TestConfigSnapshotIngress_GRPCMultipleServices, + }, + { + name: "terminating-gateway-no-api-cert", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + api := structs.NewServiceName("api", nil) + return proxycfg.TestConfigSnapshotTerminatingGateway(t, true, nil, []proxycfg.UpdateEvent{ + { + CorrelationID: "service-leaf:" + api.String(), // serviceLeafIDPrefix + Result: nil, // tombstone this + }, + }) + }, + }, + { + name: "terminating-gateway-with-peer-trust-bundle", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + roots, _ := proxycfg.TestCerts(t) + return proxycfg.TestConfigSnapshotTerminatingGateway(t, true, nil, []proxycfg.UpdateEvent{ + { + CorrelationID: "peer-trust-bundle:web", + Result: &pbpeering.TrustBundleListByServiceResponse{ + Bundles: []*pbpeering.PeeringTrustBundle{ + { + TrustDomain: "foo.bar.gov", + PeerName: "dc2", + Partition: "default", + RootPEMs: []string{ + roots.Roots[0].RootCert, + }, + ExportedPartition: "default", + CreateIndex: 0, + ModifyIndex: 0, + }, + }, + }, + }, + { + CorrelationID: "service-intentions:web", + Result: structs.SimplifiedIntentions{ + { + SourceName: "source", + SourcePeer: "dc2", + DestinationName: "web", + DestinationPartition: "default", + Action: structs.IntentionActionAllow, + }, + }, + }, + }) + }, + }, + { + name: "ingress-with-tls-listener", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", "default", nil, + func(entry *structs.IngressGatewayConfigEntry) { + entry.TLS.Enabled = true + }, nil) + }, + }, + { + name: "ingress-with-tls-listener-min-version", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", "default", nil, + func(entry *structs.IngressGatewayConfigEntry) { + entry.TLS.Enabled = true + entry.TLS.TLSMinVersion = types.TLSv1_3 + }, nil) + }, + }, + { + name: "ingress-with-tls-listener-max-version", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", "default", nil, + func(entry *structs.IngressGatewayConfigEntry) { + entry.TLS.Enabled = true + entry.TLS.TLSMaxVersion = types.TLSv1_2 + }, nil) + }, + }, + { + name: "ingress-with-tls-listener-cipher-suites", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", "default", nil, + func(entry *structs.IngressGatewayConfigEntry) { + entry.TLS.Enabled = true + entry.TLS.CipherSuites = []types.TLSCipherSuite{ + types.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, + types.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, + } + }, nil) + }, + }, + { + name: "ingress-with-tls-mixed-listeners", + create: proxycfg.TestConfigSnapshotIngressGateway_MixedListeners, + }, + { + name: "ingress-with-tls-min-version-listeners-gateway-defaults", + create: proxycfg.TestConfigSnapshotIngressGateway_TLSMinVersionListenersGatewayDefaults, + }, + { + name: "ingress-with-single-tls-listener", + create: proxycfg.TestConfigSnapshotIngressGateway_SingleTLSListener, + }, + { + name: "ingress-with-tls-mixed-min-version-listeners", + create: proxycfg.TestConfigSnapshotIngressGateway_TLSMixedMinVersionListeners, + }, + { + name: "ingress-with-tls-mixed-max-version-listeners", + create: proxycfg.TestConfigSnapshotIngressGateway_TLSMixedMaxVersionListeners, + }, + { + name: "ingress-with-tls-mixed-cipher-suites-listeners", + create: proxycfg.TestConfigSnapshotIngressGateway_TLSMixedCipherVersionListeners, + }, + { + name: "ingress-with-sds-listener-gw-level", + create: proxycfg.TestConfigSnapshotIngressGatewaySDS_GatewayLevel, + }, + { + name: "ingress-with-sds-listener-listener-level", + create: proxycfg.TestConfigSnapshotIngressGatewaySDS_GatewayAndListenerLevel, + }, + { + name: "ingress-with-sds-listener-gw-level-http", + create: proxycfg.TestConfigSnapshotIngressGatewaySDS_GatewayAndListenerLevel_HTTP, + }, + { + name: "ingress-with-sds-listener-gw-level-mixed-tls", + create: proxycfg.TestConfigSnapshotIngressGatewaySDS_GatewayLevel_MixedTLS, + }, + { + name: "ingress-with-sds-service-level", + create: proxycfg.TestConfigSnapshotIngressGatewaySDS_ServiceLevel, + }, + { + name: "ingress-with-sds-listener+service-level", + create: proxycfg.TestConfigSnapshotIngressGatewaySDS_ListenerAndServiceLevel, + }, + { + name: "ingress-with-sds-service-level-mixed-no-tls", + create: proxycfg.TestConfigSnapshotIngressGatewaySDS_MixedNoTLS, + }, + { + name: "ingress-with-grpc-single-tls-listener", + create: proxycfg.TestConfigSnapshotIngressGateway_SingleTLSListener_GRPC, + }, + { + name: "ingress-with-http2-single-tls-listener", + create: proxycfg.TestConfigSnapshotIngressGateway_SingleTLSListener_HTTP2, + }, + { + name: "ingress-with-http2-and-grpc-multiple-tls-listener", + create: proxycfg.TestConfigSnapshotIngressGateway_MultiTLSListener_MixedHTTP2gRPC, + }, + { + name: "ingress-with-http2-and-grpc-multiple-tls-listener", + create: proxycfg.TestConfigSnapshotIngressGateway_GWTLSListener_MixedHTTP2gRPC, + }, + { + name: "transparent-proxy-http-upstream", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotTransparentProxyHTTPUpstream(t) + }, + alsoRunTestForV2: true, + }, + { + name: "transparent-proxy-with-resolver-redirect-upstream", + create: proxycfg.TestConfigSnapshotTransparentProxyResolverRedirectUpstream, + alsoRunTestForV2: true, + }, + { + name: "transparent-proxy-catalog-destinations-only", + create: proxycfg.TestConfigSnapshotTransparentProxyCatalogDestinationsOnly, + alsoRunTestForV2: true, + }, + { + name: "transparent-proxy-dial-instances-directly", + create: proxycfg.TestConfigSnapshotTransparentProxyDialDirectly, + alsoRunTestForV2: true, + }, + { + name: "transparent-proxy-terminating-gateway", + create: proxycfg.TestConfigSnapshotTransparentProxyTerminatingGatewayCatalogDestinationsOnly, + alsoRunTestForV2: true, + }, + { + name: "custom-trace-listener", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { + ns.Proxy.Config["protocol"] = "http" + ns.Proxy.Config["envoy_listener_tracing_json"] = customTraceJSON(t) + }, nil) + }, + }, + { + name: "access-logs-defaults", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { + // This should be passed into the snapshot through proxy-defaults + ns.Proxy.AccessLogs = structs.AccessLogsConfig{ + Enabled: true, + } + }, + nil) + }, + }, + { + name: "access-logs-json-file", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { + // This should be passed into the snapshot through proxy-defaults + ns.Proxy.AccessLogs = structs.AccessLogsConfig{ + Enabled: true, + Type: structs.FileLogSinkType, + Path: "/tmp/accesslog.txt", + JSONFormat: "{ \"custom_start_time\": \"%START_TIME%\" }", + } + }, + nil) + }, + }, + { + name: "access-logs-text-stderr-disablelistenerlogs", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { + // This should be passed into the snapshot through proxy-defaults + ns.Proxy.AccessLogs = structs.AccessLogsConfig{ + Enabled: true, + DisableListenerLogs: true, + Type: structs.StdErrLogSinkType, + TextFormat: "CUSTOM FORMAT %START_TIME%", + } + }, + nil) + }, + }, + { + name: "connect-proxy-with-tproxy-and-permissive-mtls", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { + ns.Proxy.MutualTLSMode = structs.MutualTLSModePermissive + ns.Proxy.Mode = structs.ProxyModeTransparent + ns.Proxy.TransparentProxy.OutboundListenerPort = 1234 + }, + nil) + }, + alsoRunTestForV2: true, + }, + { + name: "connect-proxy-without-tproxy-and-permissive-mtls", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { + ns.Proxy.MutualTLSMode = structs.MutualTLSModePermissive + }, + nil) + }, + alsoRunTestForV2: true, + }, + } + + tests = append(tests, makeListenerDiscoChainTests(false)...) + + latestEnvoyVersion := xdscommon.EnvoyVersions[0] + for _, envoyVersion := range xdscommon.EnvoyVersions { + sf, err := xdscommon.DetermineSupportedProxyFeaturesFromString(envoyVersion) + require.NoError(t, err) + t.Run("envoy-"+envoyVersion, func(t *testing.T) { + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + + // Sanity check default with no overrides first + snap := tt.create(t) + + // TODO: it would be nice to be able to ensure these snapshots are always valid before we use them in a test. + // require.True(t, snap.Valid()) + + // We need to replace the TLS certs with deterministic ones to make golden + // files workable. Note we don't update these otherwise they'd change + // golder files for every test case and so not be any use! + testcommon.SetupTLSRootsAndLeaf(t, snap) + + var listeners []proto.Message + + // Need server just for logger dependency + g := NewResourceGenerator(testutil.Logger(t), nil, false) + g.ProxyFeatures = sf + if tt.generatorSetup != nil { + tt.generatorSetup(g) + } + listeners, err = g.listenersFromSnapshot(snap) + require.NoError(t, err) + // The order of listeners returned via LDS isn't relevant, so it's safe + // to sort these for the purposes of test comparisons. + sort.Slice(listeners, func(i, j int) bool { + return listeners[i].(*envoy_listener_v3.Listener).Name < listeners[j].(*envoy_listener_v3.Listener).Name + }) + + r, err := response.CreateResponse(xdscommon.ListenerType, "00000001", "00000001", listeners) + require.NoError(t, err) + + t.Run("current-xdsv1", func(t *testing.T) { + gotJSON := protoToJSON(t, r) + + gName := tt.name + if tt.overrideGoldenName != "" { + gName = tt.overrideGoldenName + } + + expectedJSON := goldenEnvoy(t, filepath.Join("listeners", gName), envoyVersion, latestEnvoyVersion, gotJSON) + require.JSONEq(t, expectedJSON, gotJSON) + }) + + if tt.alsoRunTestForV2 { + generator := xdsv2.NewResourceGenerator(testutil.Logger(t)) + converter := proxystateconverter.NewConverter(testutil.Logger(t), nil) + proxyState, err := converter.ProxyStateFromSnapshot(snap) + require.NoError(t, err) + + res, err := generator.AllResourcesFromIR(proxyState) + require.NoError(t, err) + + listeners = res[xdscommon.ListenerType] + // The order of listeners returned via LDS isn't relevant, so it's safe + // to sort these for the purposes of test comparisons. + sort.Slice(listeners, func(i, j int) bool { + return listeners[i].(*envoy_listener_v3.Listener).Name < listeners[j].(*envoy_listener_v3.Listener).Name + }) + + r, err := response.CreateResponse(xdscommon.ListenerType, "00000001", "00000001", listeners) + require.NoError(t, err) + + t.Run("current-xdsv2", func(t *testing.T) { + gotJSON := protoToJSON(t, r) + + gName := tt.name + if tt.overrideGoldenName != "" { + gName = tt.overrideGoldenName + } + + expectedJSON := goldenEnvoy(t, filepath.Join("listeners", gName), envoyVersion, latestEnvoyVersion, gotJSON) + require.JSONEq(t, expectedJSON, gotJSON) + }) + } + + }) + } + }) + } +} + type customListenerJSONOptions struct { Name string TLSContext string diff --git a/agent/xds/proxystateconverter/clusters.go b/agent/xds/proxystateconverter/clusters.go index febe29cf3152b..b8857bee29c59 100644 --- a/agent/xds/proxystateconverter/clusters.go +++ b/agent/xds/proxystateconverter/clusters.go @@ -725,6 +725,13 @@ func (s *Converter) createOutboundMeshMTLS(cfgSnap *proxycfg.ConfigSnapshot, spi return nil, fmt.Errorf("cannot inject peering trust bundles for kind %q", cfgSnap.Kind) } + cfg, err := config.ParseProxyConfig(cfgSnap.Proxy.Config) + if err != nil { + // Don't hard fail on a config typo, just warn. The parse func returns + // default config if there is an error so it's safe to continue. + s.Logger.Warn("failed to parse Connect.Proxy.Config", "error", err) + } + // Add all trust bundle peer names, including local. trustBundlePeerNames := []string{"local"} for _, tb := range cfgSnap.PeeringTrustBundles() { @@ -754,6 +761,7 @@ func (s *Converter) createOutboundMeshMTLS(cfgSnap *proxycfg.ConfigSnapshot, spi Key: cfgSnap.Leaf().PrivateKeyPEM, } ts.TlsParameters = makeTLSParametersFromProxyTLSConfig(cfgSnap.MeshConfigTLSOutgoing()) + ts.AlpnProtocols = getAlpnProtocols(cfg.Protocol) return ts, nil } @@ -856,7 +864,6 @@ func (s *Converter) makeUpstreamClustersForDiscoveryChain( failoverGroup = &pbproxystate.FailoverGroup{ Config: &pbproxystate.FailoverGroupConfig{ ConnectTimeout: durationpb.New(node.Resolver.ConnectTimeout), - UseAltStatName: true, }, } } @@ -920,7 +927,6 @@ func (s *Converter) makeUpstreamClustersForDiscoveryChain( Group: &pbproxystate.EndpointGroup_Dynamic{ Dynamic: dynamic, }, - Name: groupedTarget.ClusterName, } endpointGroups = append(endpointGroups, eg) } else { @@ -934,7 +940,6 @@ func (s *Converter) makeUpstreamClustersForDiscoveryChain( }, }, }, - Name: mappedTargets.baseClusterName, } out[mappedTargets.baseClusterName] = cluster diff --git a/agent/xds/proxystateconverter/failover_policy.go b/agent/xds/proxystateconverter/failover_policy.go index 2b0c0617c6bf2..ae1565458fa82 100644 --- a/agent/xds/proxystateconverter/failover_policy.go +++ b/agent/xds/proxystateconverter/failover_policy.go @@ -124,6 +124,22 @@ func (s *Converter) mapDiscoChainTargets(cfgSnap *proxycfg.ConfigSnapshot, chain Service: target.Service, }.URI().String()} } + //commonTLSContext := makeCommonTLSContext( + // cfgSnap.Leaf(), + // rootPEMs, + // makeTLSParametersFromProxyTLSConfig(cfgSnap.MeshConfigTLSOutgoing()), + //) + // + //err := injectSANMatcher(commonTLSContext, spiffeIDs...) + //if err != nil { + // return failoverTargets, fmt.Errorf("failed to inject SAN matcher rules for cluster %q: %v", sni, err) + //} + + //tlsContext := &envoy_tls_v3.UpstreamTlsContext{ + // CommonTlsContext: commonTLSContext, + // Sni: sni, + //} + //ti.TLSContext = tlsContext failoverTargets.targets = append(failoverTargets.targets, ti) } diff --git a/agent/xds/proxystateconverter/listeners.go b/agent/xds/proxystateconverter/listeners.go index 1e15ecb97c90e..266e96383c7a6 100644 --- a/agent/xds/proxystateconverter/listeners.go +++ b/agent/xds/proxystateconverter/listeners.go @@ -829,6 +829,19 @@ func (s *Converter) injectConnectTLSForPublicListener(cfgSnap *proxycfg.ConfigSn return nil } +func getAlpnProtocols(protocol string) []string { + var alpnProtocols []string + + switch protocol { + case "grpc", "http2": + alpnProtocols = append(alpnProtocols, "h2", "http/1.1") + case "http": + alpnProtocols = append(alpnProtocols, "http/1.1") + } + + return alpnProtocols +} + func (s *Converter) createInboundMeshMTLS(cfgSnap *proxycfg.ConfigSnapshot) (*pbproxystate.TransportSocket, error) { switch cfgSnap.Kind { case structs.ServiceKindConnectProxy: @@ -837,6 +850,13 @@ func (s *Converter) createInboundMeshMTLS(cfgSnap *proxycfg.ConfigSnapshot) (*pb return nil, fmt.Errorf("cannot inject peering trust bundles for kind %q", cfgSnap.Kind) } + cfg, err := config.ParseProxyConfig(cfgSnap.Proxy.Config) + if err != nil { + // Don't hard fail on a config typo, just warn. The parse func returns + // default config if there is an error so it's safe to continue. + s.Logger.Warn("failed to parse Connect.Proxy.Config", "error", err) + } + // Add all trust bundle peer names, including local. trustBundlePeerNames := []string{"local"} for _, tb := range cfgSnap.PeeringTrustBundles() { @@ -862,6 +882,7 @@ func (s *Converter) createInboundMeshMTLS(cfgSnap *proxycfg.ConfigSnapshot) (*pb Key: cfgSnap.Leaf().PrivateKeyPEM, } ts.TlsParameters = makeTLSParametersFromProxyTLSConfig(cfgSnap.MeshConfigTLSIncoming()) + ts.AlpnProtocols = getAlpnProtocols(cfg.Protocol) return ts, nil } diff --git a/agent/xds/proxystateconverter/routes.go b/agent/xds/proxystateconverter/routes.go index 0df72314f3041..9cdd24fe12b05 100644 --- a/agent/xds/proxystateconverter/routes.go +++ b/agent/xds/proxystateconverter/routes.go @@ -53,11 +53,6 @@ func (s *Converter) routesForConnectProxy(cfgSnap *proxycfg.ConfigSnapshot) erro continue } - // route already exists, don't clobber it. - if _, ok := s.proxyState.Routes[uid.EnvoyID()]; ok { - continue - } - virtualHost, err := s.makeUpstreamHostForDiscoveryChain(cfgSnap, uid, chain, []string{"*"}, false) if err != nil { return err diff --git a/agent/xds/resources_test.go b/agent/xds/resources_test.go index 96a6cecaa0e5e..b47edcbac3684 100644 --- a/agent/xds/resources_test.go +++ b/agent/xds/resources_test.go @@ -4,17 +4,11 @@ package xds import ( - "fmt" "path/filepath" "sort" "testing" "time" - "github.com/hashicorp/consul/agent/xds/proxystateconverter" - "github.com/hashicorp/consul/agent/xdsv2" - "github.com/hashicorp/consul/proto/private/pbpeering" - "google.golang.org/protobuf/proto" - envoy_cluster_v3 "github.com/envoyproxy/go-control-plane/envoy/config/cluster/v3" envoy_endpoint_v3 "github.com/envoyproxy/go-control-plane/envoy/config/endpoint/v3" envoy_listener_v3 "github.com/envoyproxy/go-control-plane/envoy/config/listener/v3" @@ -52,7 +46,6 @@ type goldenTestCase struct { setup func(snap *proxycfg.ConfigSnapshot) overrideGoldenName string generatorSetup func(*ResourceGenerator) - alsoRunTestForV2 bool } func TestAllResourcesFromSnapshot(t *testing.T) { @@ -84,33 +77,6 @@ func TestAllResourcesFromSnapshot(t *testing.T) { tt.setup(snap) } - typeUrls := []string{ - xdscommon.ListenerType, - xdscommon.RouteType, - xdscommon.ClusterType, - xdscommon.EndpointType, - xdscommon.SecretType, - } - - resourceSortingFunc := func(items []proto.Message, typeURL string) func(i, j int) bool { - return func(i, j int) bool { - switch typeURL { - case xdscommon.ListenerType: - return items[i].(*envoy_listener_v3.Listener).Name < items[j].(*envoy_listener_v3.Listener).Name - case xdscommon.RouteType: - return items[i].(*envoy_route_v3.RouteConfiguration).Name < items[j].(*envoy_route_v3.RouteConfiguration).Name - case xdscommon.ClusterType: - return items[i].(*envoy_cluster_v3.Cluster).Name < items[j].(*envoy_cluster_v3.Cluster).Name - case xdscommon.EndpointType: - return items[i].(*envoy_endpoint_v3.ClusterLoadAssignment).ClusterName < items[j].(*envoy_endpoint_v3.ClusterLoadAssignment).ClusterName - case xdscommon.SecretType: - return items[i].(*envoy_tls_v3.Secret).Name < items[j].(*envoy_tls_v3.Secret).Name - default: - panic("not possible") - } - } - } - // Need server just for logger dependency g := NewResourceGenerator(testutil.Logger(t), nil, false) g.ProxyFeatures = sf @@ -121,15 +87,37 @@ func TestAllResourcesFromSnapshot(t *testing.T) { resources, err := g.AllResourcesFromSnapshot(snap) require.NoError(t, err) + typeUrls := []string{ + xdscommon.ListenerType, + xdscommon.RouteType, + xdscommon.ClusterType, + xdscommon.EndpointType, + xdscommon.SecretType, + } require.Len(t, resources, len(typeUrls)) for _, typeUrl := range typeUrls { prettyName := testTypeUrlToPrettyName[typeUrl] - t.Run(fmt.Sprintf("xdsv1-%s", prettyName), func(t *testing.T) { + t.Run(prettyName, func(t *testing.T) { items, ok := resources[typeUrl] require.True(t, ok) - sort.Slice(items, resourceSortingFunc(items, typeUrl)) + sort.Slice(items, func(i, j int) bool { + switch typeUrl { + case xdscommon.ListenerType: + return items[i].(*envoy_listener_v3.Listener).Name < items[j].(*envoy_listener_v3.Listener).Name + case xdscommon.RouteType: + return items[i].(*envoy_route_v3.RouteConfiguration).Name < items[j].(*envoy_route_v3.RouteConfiguration).Name + case xdscommon.ClusterType: + return items[i].(*envoy_cluster_v3.Cluster).Name < items[j].(*envoy_cluster_v3.Cluster).Name + case xdscommon.EndpointType: + return items[i].(*envoy_endpoint_v3.ClusterLoadAssignment).ClusterName < items[j].(*envoy_endpoint_v3.ClusterLoadAssignment).ClusterName + case xdscommon.SecretType: + return items[i].(*envoy_tls_v3.Secret).Name < items[j].(*envoy_tls_v3.Secret).Name + default: + panic("not possible") + } + }) r, err := response.CreateResponse(typeUrl, "00000001", "00000001", items) require.NoError(t, err) @@ -145,43 +133,6 @@ func TestAllResourcesFromSnapshot(t *testing.T) { require.JSONEq(t, expectedJSON, gotJSON) }) } - - if tt.alsoRunTestForV2 { - generator := xdsv2.NewResourceGenerator(testutil.Logger(t)) - - converter := proxystateconverter.NewConverter(testutil.Logger(t), &mockCfgFetcher{addressLan: "192.0.2.1"}) - proxyState, err := converter.ProxyStateFromSnapshot(snap) - require.NoError(t, err) - - v2Resources, err := generator.AllResourcesFromIR(proxyState) - require.NoError(t, err) - require.Len(t, v2Resources, len(typeUrls)-1) // secrets are not currently implemented in V2. - for _, typeUrl := range typeUrls { - prettyName := testTypeUrlToPrettyName[typeUrl] - t.Run(fmt.Sprintf("xdsv2-%s", prettyName), func(t *testing.T) { - if typeUrl == xdscommon.SecretType { - t.Skip("skipping. secrets are not yet implemented in xdsv2") - } - items, ok := v2Resources[typeUrl] - require.True(t, ok) - - sort.Slice(items, resourceSortingFunc(items, typeUrl)) - - r, err := response.CreateResponse(typeUrl, "00000001", "00000001", items) - require.NoError(t, err) - - gotJSON := protoToJSON(t, r) - - gName := tt.name - if tt.overrideGoldenName != "" { - gName = tt.overrideGoldenName - } - - expectedJSON := goldenEnvoy(t, filepath.Join(prettyName, gName), envoyVersion, latestEnvoyVersion, gotJSON) - require.JSONEq(t, expectedJSON, gotJSON) - }) - } - } } tests := []testcase{ @@ -190,185 +141,58 @@ func TestAllResourcesFromSnapshot(t *testing.T) { create: func(t testinf.T) *proxycfg.ConfigSnapshot { return proxycfg.TestConfigSnapshot(t, nil, nil) }, - alsoRunTestForV2: true, - }, - { - name: "telemetry-collector", - create: proxycfg.TestConfigSnapshotTelemetryCollector, - alsoRunTestForV2: false, - }, - { - name: "grpc-public-listener", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { - ns.Proxy.Config["protocol"] = "grpc" - }, nil) - }, - alsoRunTestForV2: true, - }, - { - name: "listener-bind-address", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { - ns.Proxy.Config["bind_address"] = "127.0.0.2" - }, nil) - }, - alsoRunTestForV2: true, - }, - { - name: "listener-bind-port", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { - ns.Proxy.Config["bind_port"] = 8888 - }, nil) - }, - alsoRunTestForV2: true, - }, - { - name: "listener-bind-address-port", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { - ns.Proxy.Config["bind_address"] = "127.0.0.2" - ns.Proxy.Config["bind_port"] = 8888 - }, nil) - }, - alsoRunTestForV2: true, - }, - { - name: "listener-unix-domain-socket", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { - ns.Proxy.Upstreams[0].LocalBindAddress = "" - ns.Proxy.Upstreams[0].LocalBindPort = 0 - ns.Proxy.Upstreams[0].LocalBindSocketPath = "/tmp/service-mesh/client-1/grpc-employee-server" - ns.Proxy.Upstreams[0].LocalBindSocketMode = "0640" - }, nil) - }, - alsoRunTestForV2: true, - }, - { - name: "listener-max-inbound-connections", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { - ns.Proxy.Config["max_inbound_connections"] = 222 - }, nil) - }, - alsoRunTestForV2: true, }, { - name: "http2-public-listener", + name: "connect-proxy-exported-to-peers", create: func(t testinf.T) *proxycfg.ConfigSnapshot { return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { - ns.Proxy.Config["protocol"] = "http2" - }, nil) + // This test is only concerned about the SPIFFE cert validator config in the public listener + // so we empty out the upstreams to avoid generating unnecessary upstream listeners. + ns.Proxy.Upstreams = structs.Upstreams{} + }, []proxycfg.UpdateEvent{ + { + CorrelationID: "peering-trust-bundles", + Result: proxycfg.TestPeerTrustBundles(t), + }, + }) }, - alsoRunTestForV2: true, }, { - name: "listener-balance-inbound-connections", + name: "transparent-proxy", create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { - ns.Proxy.Config["balance_inbound_connections"] = "exact_balance" - }, nil) + return proxycfg.TestConfigSnapshotTransparentProxy(t) }, - alsoRunTestForV2: true, }, { - name: "listener-balance-outbound-connections-bind-port", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { - ns.Proxy.Upstreams[0].Config["balance_outbound_connections"] = "exact_balance" - }, nil) - }, - alsoRunTestForV2: true, + name: "connect-proxy-with-peered-upstreams", + create: proxycfg.TestConfigSnapshotPeering, }, { - name: "http-public-listener", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { - ns.Proxy.Config["protocol"] = "http" - }, nil) - }, - alsoRunTestForV2: true, + name: "connect-proxy-with-peered-upstreams-escape-overrides", + create: proxycfg.TestConfigSnapshotPeeringWithEscapeOverrides, }, { - name: "http-public-listener-no-xfcc", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshot(t, - func(ns *structs.NodeService) { - ns.Proxy.Config["protocol"] = "http" - }, - []proxycfg.UpdateEvent{ - { - CorrelationID: "mesh", - Result: &structs.ConfigEntryResponse{ - Entry: &structs.MeshConfigEntry{ - HTTP: &structs.MeshHTTPConfig{ - SanitizeXForwardedClientCert: true, - }, - }, - }, - }, - }) - }, - alsoRunTestForV2: true, + name: "connect-proxy-with-peered-upstreams-http2", + create: proxycfg.TestConfigSnapshotPeeringWithHTTP2, }, { - name: "http-listener-with-timeouts", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { - ns.Proxy.Config["protocol"] = "http" - ns.Proxy.Config["local_connect_timeout_ms"] = 1234 - ns.Proxy.Config["local_request_timeout_ms"] = 2345 - ns.Proxy.Config["local_idle_timeout_ms"] = 3456 - }, nil) - }, - alsoRunTestForV2: true, + name: "transparent-proxy-with-peered-upstreams", + create: proxycfg.TestConfigSnapshotPeeringTProxy, }, { - name: "http-upstream", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { - ns.Proxy.Upstreams[0].Config["protocol"] = "http" - }, nil) - }, - alsoRunTestForV2: true, + name: "local-mesh-gateway-with-peered-upstreams", + create: proxycfg.TestConfigSnapshotPeeringLocalMeshGateway, }, { - name: "connect-proxy-upstream-defaults", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { - for _, v := range ns.Proxy.Upstreams { - // Prepared queries do not get centrally configured upstream defaults merged into them. - if v.DestinationType == structs.UpstreamDestTypePreparedQuery { - continue - } - // Represent upstream config as if it came from centrally configured upstream defaults. - // The name/namespace must not make it onto the cluster name attached to the outbound listener. - v.CentrallyConfigured = true - v.DestinationNamespace = structs.WildcardSpecifier - v.DestinationName = structs.WildcardSpecifier - } - }, nil) - }, - alsoRunTestForV2: true, + name: "telemetry-collector", + create: proxycfg.TestConfigSnapshotTelemetryCollector, }, } - tests = append(tests, getConnectProxyDiscoChainTests(false)...) tests = append(tests, getConnectProxyTransparentProxyGoldenTestCases()...) - tests = append(tests, getMeshGatewayGoldenTestCases()...) tests = append(tests, getMeshGatewayPeeringGoldenTestCases()...) tests = append(tests, getTrafficControlPeeringGoldenTestCases(false)...) tests = append(tests, getEnterpriseGoldenTestCases(t)...) tests = append(tests, getAPIGatewayGoldenTestCases(t)...) - tests = append(tests, getExposePathGoldenTestCases()...) - tests = append(tests, getCustomConfigurationGoldenTestCases(false)...) - tests = append(tests, getConnectProxyJWTProviderGoldenTestCases()...) - tests = append(tests, getTerminatingGatewayPeeringGoldenTestCases()...) - tests = append(tests, getIngressGatewayGoldenTestCases()...) - tests = append(tests, getAccessLogsGoldenTestCases()...) - tests = append(tests, getTLSGoldenTestCases()...) - tests = append(tests, getPeeredGoldenTestCases()...) latestEnvoyVersion := xdscommon.EnvoyVersions[0] for _, envoyVersion := range xdscommon.EnvoyVersions { @@ -386,582 +210,85 @@ func TestAllResourcesFromSnapshot(t *testing.T) { func getConnectProxyTransparentProxyGoldenTestCases() []goldenTestCase { return []goldenTestCase{ - { - name: "transparent-proxy", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotTransparentProxy(t) - }, - alsoRunTestForV2: true, - }, - { - name: "transparent-proxy-catalog-destinations-only", - create: proxycfg.TestConfigSnapshotTransparentProxyCatalogDestinationsOnly, - alsoRunTestForV2: true, - }, - { - name: "transparent-proxy-dial-instances-directly", - create: proxycfg.TestConfigSnapshotTransparentProxyDialDirectly, - alsoRunTestForV2: true, - }, - { - name: "transparent-proxy-http-upstream", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotTransparentProxyHTTPUpstream(t) - }, - alsoRunTestForV2: true, - }, - { - name: "transparent-proxy-with-resolver-redirect-upstream", - create: proxycfg.TestConfigSnapshotTransparentProxyResolverRedirectUpstream, - alsoRunTestForV2: true, - }, - { - name: "transparent-proxy-terminating-gateway", - create: proxycfg.TestConfigSnapshotTransparentProxyTerminatingGatewayCatalogDestinationsOnly, - alsoRunTestForV2: true, - }, { name: "transparent-proxy-destination", create: proxycfg.TestConfigSnapshotTransparentProxyDestination, - // TODO(proxystate): currently failing. should work. possible issue in converter. - alsoRunTestForV2: false, }, { name: "transparent-proxy-destination-http", create: func(t testinf.T) *proxycfg.ConfigSnapshot { return proxycfg.TestConfigSnapshotTransparentProxyDestinationHTTP(t, nil) }, - // TODO(proxystate): currently failing. should work. possible issue in converter. - alsoRunTestForV2: false, }, { name: "transparent-proxy-terminating-gateway-destinations-only", create: func(t testinf.T) *proxycfg.ConfigSnapshot { return proxycfg.TestConfigSnapshotTerminatingGatewayDestinations(t, true, nil) }, - // TODO(proxystate): terminating gateways will come at a later date. - alsoRunTestForV2: false, }, } } -func getConnectProxyDiscoChainTests(enterprise bool) []goldenTestCase { +func getMeshGatewayPeeringGoldenTestCases() []goldenTestCase { return []goldenTestCase{ { - name: "connect-proxy-with-chain", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotDiscoveryChain(t, "simple", false, nil, nil) - }, - alsoRunTestForV2: true, - }, - { - name: "connect-proxy-with-chain-external-sni", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotDiscoveryChain(t, "external-sni", false, nil, nil) - }, - alsoRunTestForV2: true, - }, - { - name: "connect-proxy-with-chain-and-failover", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotDiscoveryChain(t, "failover", false, nil, nil) - }, - alsoRunTestForV2: true, - }, - { - name: "connect-proxy-exported-to-peers", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { - // This test is only concerned about the SPIFFE cert validator config in the public listener - // so we empty out the upstreams to avoid generating unnecessary upstream listeners. - ns.Proxy.Upstreams = structs.Upstreams{} - }, []proxycfg.UpdateEvent{ - { - CorrelationID: "peering-trust-bundles", - Result: proxycfg.TestPeerTrustBundles(t), - }, - }) - }, - alsoRunTestForV2: true, - }, - { - name: "custom-upstream-default-chain", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotDiscoveryChain(t, "default", enterprise, func(ns *structs.NodeService) { - ns.Proxy.Upstreams[0].Config["envoy_cluster_json"] = - customAppClusterJSON(t, customClusterJSONOptions{ - Name: "myservice", - }) - }, nil) - }, - // TODO(proxystate): requires custom cluster work - alsoRunTestForV2: false, - }, - { - name: "connect-proxy-with-chain-http2", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotDiscoveryChain(t, "simple", enterprise, func(ns *structs.NodeService) { - ns.Proxy.Upstreams[0].Config["protocol"] = "http2" - }, nil) - }, - alsoRunTestForV2: true, - }, - { - name: "connect-proxy-with-chain-and-overrides", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotDiscoveryChain(t, "simple-with-overrides", enterprise, nil, nil) - }, - alsoRunTestForV2: true, - }, - { - name: "connect-proxy-with-chain-and-failover", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotDiscoveryChain(t, "failover", enterprise, nil, nil) - }, - // TODO(proxystate): requires routes work - alsoRunTestForV2: false, - }, - { - name: "connect-proxy-with-tcp-chain-failover-through-remote-gateway", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotDiscoveryChain(t, "failover-through-remote-gateway", enterprise, nil, nil) - }, - // TODO(proxystate): requires routes work - alsoRunTestForV2: false, - }, - { - name: "connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotDiscoveryChain(t, "failover-through-remote-gateway-triggered", enterprise, nil, nil) - }, - // TODO(proxystate): requires routes work - alsoRunTestForV2: false, - }, - { - name: "connect-proxy-with-tcp-chain-double-failover-through-remote-gateway", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotDiscoveryChain(t, "failover-through-double-remote-gateway", enterprise, nil, nil) - }, - // TODO(proxystate): requires routes work - alsoRunTestForV2: false, - }, - { - name: "connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotDiscoveryChain(t, "failover-through-double-remote-gateway-triggered", enterprise, nil, nil) - }, - // TODO(proxystate): requires routes work - alsoRunTestForV2: false, - }, - { - name: "connect-proxy-with-tcp-chain-failover-through-local-gateway", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotDiscoveryChain(t, "failover-through-local-gateway", enterprise, nil, nil) - }, - // TODO(proxystate): requires routes work - alsoRunTestForV2: false, - }, - { - name: "connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotDiscoveryChain(t, "failover-through-local-gateway-triggered", enterprise, nil, nil) - }, - // TODO(proxystate): requires routes work - alsoRunTestForV2: false, - }, - { - name: "connect-proxy-with-tcp-chain-double-failover-through-local-gateway", + name: "mesh-gateway-with-exported-peered-services", create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotDiscoveryChain(t, "failover-through-double-local-gateway", enterprise, nil, nil) + return proxycfg.TestConfigSnapshotPeeredMeshGateway(t, "default-services-tcp", nil, nil) }, - // TODO(proxystate): requires routes work - alsoRunTestForV2: false, }, { - name: "connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered", + name: "mesh-gateway-with-exported-peered-services-http", create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotDiscoveryChain(t, "failover-through-double-local-gateway-triggered", enterprise, nil, nil) + return proxycfg.TestConfigSnapshotPeeredMeshGateway(t, "default-services-http", nil, nil) }, - // TODO(proxystate): requires routes work - alsoRunTestForV2: false, }, { - name: "splitter-with-resolver-redirect", + name: "mesh-gateway-with-exported-peered-services-http-with-router", create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotDiscoveryChain(t, "splitter-with-resolver-redirect-multidc", enterprise, nil, nil) + return proxycfg.TestConfigSnapshotPeeredMeshGateway(t, "chain-and-l7-stuff", nil, nil) }, - alsoRunTestForV2: true, }, { - name: "connect-proxy-lb-in-resolver", + name: "mesh-gateway-peering-control-plane", create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotDiscoveryChain(t, "lb-resolver", enterprise, nil, nil) + return proxycfg.TestConfigSnapshotPeeredMeshGateway(t, "control-plane", nil, nil) }, - alsoRunTestForV2: true, }, { - name: "connect-proxy-with-default-chain-and-custom-cluster", + name: "mesh-gateway-with-imported-peered-services", create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotDiscoveryChain(t, "default", enterprise, func(ns *structs.NodeService) { - ns.Proxy.Upstreams[0].Config["envoy_cluster_json"] = - customAppClusterJSON(t, customClusterJSONOptions{ - Name: "myservice", - }) + return proxycfg.TestConfigSnapshotPeeredMeshGateway(t, "imported-services", func(ns *structs.NodeService) { + ns.Proxy.Config = map[string]interface{}{ + "envoy_dns_discovery_type": "STRICT_DNS", + } }, nil) }, - // TODO(proxystate): requires custom cluster work - alsoRunTestForV2: false, - }, - { - name: "connect-proxy-splitter-overweight", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotDiscoveryChain(t, "splitter-overweight", enterprise, nil, nil) - }, - alsoRunTestForV2: true, - }, - { - name: "connect-proxy-with-chain-and-splitter", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotDiscoveryChain(t, "chain-and-splitter", enterprise, nil, nil) - }, - alsoRunTestForV2: true, - }, - { - name: "connect-proxy-with-grpc-router", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotDiscoveryChain(t, "grpc-router", enterprise, nil, nil) - }, - alsoRunTestForV2: true, }, { - name: "connect-proxy-with-chain-and-router", + name: "mesh-gateway-with-peer-through-mesh-gateway-enabled", create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotDiscoveryChain(t, "chain-and-router", enterprise, nil, nil) + return proxycfg.TestConfigSnapshotPeeredMeshGateway(t, "peer-through-mesh-gateway", nil, nil) }, - alsoRunTestForV2: true, }, + } +} + +func getTrafficControlPeeringGoldenTestCases(enterprise bool) []goldenTestCase { + cases := []goldenTestCase{ { - name: "connect-proxy-route-to-lb-resolver", + name: "connect-proxy-with-chain-and-failover-to-cluster-peer", create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotDiscoveryChain(t, "redirect-to-lb-node", enterprise, nil, nil) + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "failover-to-cluster-peer", enterprise, nil, nil) }, - alsoRunTestForV2: true, }, { - name: "connect-proxy-resolver-with-lb", + name: "connect-proxy-with-chain-and-redirect-to-cluster-peer", create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotDiscoveryChain(t, "resolver-with-lb", enterprise, nil, nil) + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "redirect-to-cluster-peer", enterprise, nil, nil) }, - alsoRunTestForV2: true, }, - { - name: "custom-upstream-ignored-with-disco-chain", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotDiscoveryChain(t, "failover", enterprise, func(ns *structs.NodeService) { - for i := range ns.Proxy.Upstreams { - if ns.Proxy.Upstreams[i].DestinationName != "db" { - continue // only tweak the db upstream - } - if ns.Proxy.Upstreams[i].Config == nil { - ns.Proxy.Upstreams[i].Config = map[string]interface{}{} - } - - uid := proxycfg.NewUpstreamID(&ns.Proxy.Upstreams[i]) - - ns.Proxy.Upstreams[i].Config["envoy_listener_json"] = - customListenerJSON(t, customListenerJSONOptions{ - Name: uid.EnvoyID() + ":custom-upstream", - }) - } - }, nil) - }, - }, - { - name: "connect-proxy-with-tcp-chain", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotDiscoveryChain(t, "simple", enterprise, nil, nil) - }, - alsoRunTestForV2: true, - }, - { - name: "connect-proxy-with-http-chain", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotDiscoveryChain(t, "simple", enterprise, nil, nil, - &structs.ProxyConfigEntry{ - Kind: structs.ProxyDefaults, - Name: structs.ProxyConfigGlobal, - Config: map[string]interface{}{ - "protocol": "http", - }, - }, - ) - }, - alsoRunTestForV2: true, - }, - { - name: "connect-proxy-with-http2-chain", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotDiscoveryChain(t, "simple", enterprise, nil, nil, - &structs.ProxyConfigEntry{ - Kind: structs.ProxyDefaults, - Name: structs.ProxyConfigGlobal, - Config: map[string]interface{}{ - "protocol": "http2", - }, - }, - ) - }, - alsoRunTestForV2: true, - }, - { - name: "connect-proxy-with-grpc-chain", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotDiscoveryChain(t, "simple", enterprise, nil, nil, - &structs.ProxyConfigEntry{ - Kind: structs.ProxyDefaults, - Name: structs.ProxyConfigGlobal, - Config: map[string]interface{}{ - "protocol": "grpc", - }, - }, - ) - }, - alsoRunTestForV2: true, - }, - } -} - -func getMeshGatewayGoldenTestCases() []goldenTestCase { - return []goldenTestCase{ - { - name: "mesh-gateway", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotMeshGateway(t, "default", nil, nil) - }, - // TODO(proxystate): mesh gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "mesh-gateway-using-federation-states", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotMeshGateway(t, "federation-states", nil, nil) - }, - // TODO(proxystate): mesh gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "mesh-gateway-using-federation-control-plane", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotMeshGateway(t, "mesh-gateway-federation", nil, nil) - }, - // TODO(proxystate): mesh gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "mesh-gateway-newer-information-in-federation-states", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotMeshGateway(t, "newer-info-in-federation-states", nil, nil) - }, - // TODO(proxystate): mesh gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "mesh-gateway-older-information-in-federation-states", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotMeshGateway(t, "older-info-in-federation-states", nil, nil) - }, - // TODO(proxystate): mesh gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "mesh-gateway-no-services", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotMeshGateway(t, "no-services", nil, nil) - }, - // TODO(proxystate): mesh gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "mesh-gateway-service-subsets", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotMeshGateway(t, "service-subsets", nil, nil) - }, - // TODO(proxystate): mesh gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "mesh-gateway-service-subsets2", // TODO: make this merge with 'service-subsets' - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotMeshGateway(t, "service-subsets2", nil, nil) - }, - // TODO(proxystate): mesh gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "mesh-gateway-default-service-subset", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotMeshGateway(t, "default-service-subsets2", nil, nil) - }, - // TODO(proxystate): mesh gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "mesh-gateway-ignore-extra-resolvers", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotMeshGateway(t, "ignore-extra-resolvers", nil, nil) - }, - // TODO(proxystate): mesh gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "mesh-gateway-service-timeouts", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotMeshGateway(t, "service-timeouts", nil, nil) - }, - // TODO(proxystate): mesh gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "mesh-gateway-non-hash-lb-injected", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotMeshGateway(t, "non-hash-lb-injected", nil, nil) - }, - // TODO(proxystate): mesh gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "mesh-gateway-hash-lb-ignored", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotMeshGateway(t, "hash-lb-ignored", nil, nil) - }, - // TODO(proxystate): mesh gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "mesh-gateway-tcp-keepalives", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotMeshGateway(t, "default", func(ns *structs.NodeService) { - ns.Proxy.Config["envoy_gateway_remote_tcp_enable_keepalive"] = true - ns.Proxy.Config["envoy_gateway_remote_tcp_keepalive_time"] = 120 - ns.Proxy.Config["envoy_gateway_remote_tcp_keepalive_interval"] = 60 - ns.Proxy.Config["envoy_gateway_remote_tcp_keepalive_probes"] = 7 - }, nil) - }, - // TODO(proxystate): mesh gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "mesh-gateway-tagged-addresses", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotMeshGateway(t, "default", func(ns *structs.NodeService) { - ns.Proxy.Config = map[string]interface{}{ - "envoy_mesh_gateway_no_default_bind": true, - "envoy_mesh_gateway_bind_tagged_addresses": true, - } - }, nil) - }, - }, - { - name: "mesh-gateway-custom-addresses", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotMeshGateway(t, "default", func(ns *structs.NodeService) { - ns.Proxy.Config = map[string]interface{}{ - "envoy_mesh_gateway_bind_addresses": map[string]structs.ServiceAddress{ - "foo": { - Address: "198.17.2.3", - Port: 8080, - }, - "bar": { - Address: "2001:db8::ff", - Port: 9999, - }, - "baz": { - Address: "127.0.0.1", - Port: 8765, - }, - }, - } - }, nil) - }, - }, - } -} -func getMeshGatewayPeeringGoldenTestCases() []goldenTestCase { - return []goldenTestCase{ - { - name: "mesh-gateway-with-exported-peered-services", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotPeeredMeshGateway(t, "default-services-tcp", nil, nil) - }, - // TODO(proxystate): mesh gateways will come at a later date. - alsoRunTestForV2: false, - }, - { - name: "mesh-gateway-with-exported-peered-services-http", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotPeeredMeshGateway(t, "default-services-http", nil, nil) - }, - // TODO(proxystate): mesh gateways will come at a later date. - alsoRunTestForV2: false, - }, - { - name: "mesh-gateway-with-exported-peered-services-http-with-router", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotPeeredMeshGateway(t, "chain-and-l7-stuff", nil, nil) - }, - // TODO(proxystate): mesh gateways will come at a later date. - alsoRunTestForV2: false, - }, - { - name: "mesh-gateway-peering-control-plane", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotPeeredMeshGateway(t, "control-plane", nil, nil) - }, - // TODO(proxystate): mesh gateways will come at a later date. - alsoRunTestForV2: false, - }, - { - name: "mesh-gateway-with-imported-peered-services", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotPeeredMeshGateway(t, "imported-services", func(ns *structs.NodeService) { - ns.Proxy.Config = map[string]interface{}{ - "envoy_dns_discovery_type": "STRICT_DNS", - } - }, nil) - }, - // TODO(proxystate): mesh gateways will come at a later date. - alsoRunTestForV2: false, - }, - { - name: "mesh-gateway-with-peer-through-mesh-gateway-enabled", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotPeeredMeshGateway(t, "peer-through-mesh-gateway", nil, nil) - }, - // TODO(proxystate): mesh gateways will come at a later date. - alsoRunTestForV2: false, - }, - } -} - -func getTrafficControlPeeringGoldenTestCases(enterprise bool) []goldenTestCase { - cases := []goldenTestCase{ - { - name: "connect-proxy-with-chain-and-failover-to-cluster-peer", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotDiscoveryChain(t, "failover-to-cluster-peer", enterprise, nil, nil) - }, - // TODO(proxystate): peering will come at a later date. - alsoRunTestForV2: false, - }, - { - name: "connect-proxy-with-chain-and-redirect-to-cluster-peer", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotDiscoveryChain(t, "redirect-to-cluster-peer", enterprise, nil, nil) - }, - // TODO(proxystate): peering will come at a later date. - alsoRunTestForV2: false, - }, - } + } if enterprise { for i := range cases { @@ -1126,8 +453,6 @@ func getAPIGatewayGoldenTestCases(t *testing.T) []goldenTestCase { Certificate: gatewayTestCertificate, }}, nil) }, - // TODO(proxystate): api gateways will come at a later date. - alsoRunTestForV2: false, }, { name: "api-gateway-with-multiple-inline-certificates", @@ -1201,8 +526,6 @@ func getAPIGatewayGoldenTestCases(t *testing.T) []goldenTestCase { }, }, nil) }, - // TODO(proxystate): api gateways will come at a later date. - alsoRunTestForV2: false, }, { name: "api-gateway-with-http-route", @@ -1284,8 +607,6 @@ func getAPIGatewayGoldenTestCases(t *testing.T) []goldenTestCase { }, }}) }, - // TODO(proxystate): api gateways will come at a later date. - alsoRunTestForV2: false, }, { name: "api-gateway-with-http-route-timeoutfilter-one-set", @@ -1360,1827 +681,6 @@ func getAPIGatewayGoldenTestCases(t *testing.T) []goldenTestCase { }, }}) }, - // TODO(proxystate): api gateways will come at a later date. - alsoRunTestForV2: false, - }, - { - name: "api-gateway", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotAPIGateway(t, "default", nil, nil, nil, nil, nil) - }, - }, - { - name: "api-gateway-nil-config-entry", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotAPIGateway_NilConfigEntry(t) - }, - }, - { - name: "api-gateway-tcp-listener", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotAPIGateway(t, "default", nil, func(entry *structs.APIGatewayConfigEntry, bound *structs.BoundAPIGatewayConfigEntry) { - entry.Listeners = []structs.APIGatewayListener{ - { - Name: "listener", - Protocol: structs.ListenerProtocolTCP, - Port: 8080, - }, - } - bound.Listeners = []structs.BoundAPIGatewayListener{ - { - Name: "listener", - }, - } - }, nil, nil, nil) - }, - }, - { - name: "api-gateway-tcp-listener-with-tcp-route", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotAPIGateway(t, "default", nil, func(entry *structs.APIGatewayConfigEntry, bound *structs.BoundAPIGatewayConfigEntry) { - entry.Listeners = []structs.APIGatewayListener{ - { - Name: "listener", - Protocol: structs.ListenerProtocolTCP, - Port: 8080, - }, - } - bound.Listeners = []structs.BoundAPIGatewayListener{ - { - Name: "listener", - Routes: []structs.ResourceReference{ - { - Name: "tcp-route", - Kind: structs.TCPRoute, - }, - }, - }, - } - - }, []structs.BoundRoute{ - &structs.TCPRouteConfigEntry{ - Name: "tcp-route", - Kind: structs.TCPRoute, - Parents: []structs.ResourceReference{ - { - Kind: structs.APIGateway, - Name: "api-gateway", - }, - }, - Services: []structs.TCPService{ - {Name: "tcp-service"}, - }, - }, - }, nil, nil) - }, - }, - { - name: "api-gateway-http-listener", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotAPIGateway(t, "default", nil, func(entry *structs.APIGatewayConfigEntry, bound *structs.BoundAPIGatewayConfigEntry) { - entry.Listeners = []structs.APIGatewayListener{ - { - Name: "listener", - Protocol: structs.ListenerProtocolHTTP, - Port: 8080, - }, - } - bound.Listeners = []structs.BoundAPIGatewayListener{ - { - Name: "listener", - Routes: []structs.ResourceReference{}, - }, - } - }, nil, nil, nil) - }, - }, - { - name: "api-gateway-http-listener-with-http-route", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotAPIGateway(t, "default", nil, func(entry *structs.APIGatewayConfigEntry, bound *structs.BoundAPIGatewayConfigEntry) { - entry.Listeners = []structs.APIGatewayListener{ - { - Name: "listener", - Protocol: structs.ListenerProtocolHTTP, - Port: 8080, - }, - } - bound.Listeners = []structs.BoundAPIGatewayListener{ - { - Name: "listener", - Routes: []structs.ResourceReference{ - { - Name: "http-route", - Kind: structs.HTTPRoute, - }, - }, - }, - } - }, []structs.BoundRoute{ - &structs.HTTPRouteConfigEntry{ - Name: "http-route", - Kind: structs.HTTPRoute, - Parents: []structs.ResourceReference{ - { - Kind: structs.APIGateway, - Name: "api-gateway", - }, - }, - Rules: []structs.HTTPRouteRule{ - { - Services: []structs.HTTPService{ - {Name: "http-service"}, - }, - }, - }, - }, - }, nil, nil) - }, - }, - { - name: "api-gateway-tcp-listener-with-tcp-and-http-route", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotAPIGateway(t, "default", nil, func(entry *structs.APIGatewayConfigEntry, bound *structs.BoundAPIGatewayConfigEntry) { - entry.Listeners = []structs.APIGatewayListener{ - { - Name: "listener-tcp", - Protocol: structs.ListenerProtocolTCP, - Port: 8080, - }, - { - Name: "listener-http", - Protocol: structs.ListenerProtocolHTTP, - Port: 8081, - }, - } - bound.Listeners = []structs.BoundAPIGatewayListener{ - { - Name: "listener-tcp", - Routes: []structs.ResourceReference{ - { - Name: "tcp-route", - Kind: structs.TCPRoute, - }, - }, - }, - { - Name: "listener-http", - Routes: []structs.ResourceReference{ - { - Name: "http-route", - Kind: structs.HTTPRoute, - }, - }, - }, - } - }, []structs.BoundRoute{ - &structs.TCPRouteConfigEntry{ - Name: "tcp-route", - Kind: structs.TCPRoute, - Parents: []structs.ResourceReference{ - { - Kind: structs.APIGateway, - Name: "api-gateway", - }, - }, - Services: []structs.TCPService{ - {Name: "tcp-service"}, - }, - }, - &structs.HTTPRouteConfigEntry{ - Name: "http-route", - Kind: structs.HTTPRoute, - Parents: []structs.ResourceReference{ - { - Kind: structs.APIGateway, - Name: "api-gateway", - }, - }, - Rules: []structs.HTTPRouteRule{ - { - Services: []structs.HTTPService{ - {Name: "http-service"}, - }, - }, - }, - }, - }, nil, nil) - }, - }, - { - name: "api-gateway-with-multiple-hostnames", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotAPIGateway(t, "default", nil, func(entry *structs.APIGatewayConfigEntry, bound *structs.BoundAPIGatewayConfigEntry) { - entry.Listeners = []structs.APIGatewayListener{ - { - Name: "http", - Protocol: structs.ListenerProtocolHTTP, - Port: 8080, - Hostname: "*.example.com", - }, - } - bound.Listeners = []structs.BoundAPIGatewayListener{ - { - Name: "http", - Routes: []structs.ResourceReference{ - {Kind: structs.HTTPRoute, Name: "backend-route"}, - {Kind: structs.HTTPRoute, Name: "frontend-route"}, - {Kind: structs.HTTPRoute, Name: "generic-route"}, - }}, - } - }, - []structs.BoundRoute{ - &structs.HTTPRouteConfigEntry{ - Kind: structs.HTTPRoute, - Name: "backend-route", - Hostnames: []string{"backend.example.com"}, - Parents: []structs.ResourceReference{{Kind: structs.APIGateway, Name: "api-gateway"}}, - Rules: []structs.HTTPRouteRule{ - {Services: []structs.HTTPService{{Name: "backend"}}}, - }, - }, - &structs.HTTPRouteConfigEntry{ - Kind: structs.HTTPRoute, - Name: "frontend-route", - Hostnames: []string{"frontend.example.com"}, - Parents: []structs.ResourceReference{{Kind: structs.APIGateway, Name: "api-gateway"}}, - Rules: []structs.HTTPRouteRule{ - {Services: []structs.HTTPService{{Name: "frontend"}}}, - }, - }, - &structs.HTTPRouteConfigEntry{ - Kind: structs.HTTPRoute, - Name: "generic-route", - Parents: []structs.ResourceReference{{Kind: structs.APIGateway, Name: "api-gateway"}}, - Rules: []structs.HTTPRouteRule{ - { - Matches: []structs.HTTPMatch{{Path: structs.HTTPPathMatch{Match: structs.HTTPPathMatchPrefix, Value: "/frontend"}}}, - Services: []structs.HTTPService{{Name: "frontend"}}, - }, - { - Matches: []structs.HTTPMatch{{Path: structs.HTTPPathMatch{Match: structs.HTTPPathMatchPrefix, Value: "/backend"}}}, - Services: []structs.HTTPService{{Name: "backend"}}, - }, - }, - }, - }, nil, nil) - }, - }, - } -} - -func getExposePathGoldenTestCases() []goldenTestCase { - return []goldenTestCase{ - { - name: "expose-paths-local-app-paths", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotExposeConfig(t, nil) - }, - alsoRunTestForV2: true, - }, - { - name: "downstream-service-with-unix-sockets", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { - ns.Address = "" - ns.Port = 0 - ns.Proxy.LocalServiceAddress = "" - ns.Proxy.LocalServicePort = 0 - ns.Proxy.LocalServiceSocketPath = "/tmp/downstream_proxy.sock" - }, nil) - }, - alsoRunTestForV2: true, - }, - { - name: "expose-paths-new-cluster-http2", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotExposeConfig(t, func(ns *structs.NodeService) { - ns.Proxy.Expose.Paths[1] = structs.ExposePath{ - LocalPathPort: 9090, - Path: "/grpc.health.v1.Health/Check", - ListenerPort: 21501, - Protocol: "http2", - } - }) - }, - alsoRunTestForV2: true, - }, - { - name: "expose-checks", - create: proxycfg.TestConfigSnapshotExposeChecks, - generatorSetup: func(s *ResourceGenerator) { - s.CfgFetcher = configFetcherFunc(func() string { - return "192.0.2.1" - }) - }, - alsoRunTestForV2: true, - }, - { - name: "expose-paths-grpc-new-cluster-http1", - create: proxycfg.TestConfigSnapshotGRPCExposeHTTP1, - alsoRunTestForV2: true, - }, - { - // NOTE: if IPv6 is not supported in the kernel per - // platform.SupportsIPv6() then this test will fail because the golden - // files were generated assuming ipv6 support was present - name: "expose-checks-http", - create: proxycfg.TestConfigSnapshotExposeChecks, - generatorSetup: func(s *ResourceGenerator) { - s.CfgFetcher = configFetcherFunc(func() string { - return "192.0.2.1" - }) - }, - }, - { - // NOTE: if IPv6 is not supported in the kernel per - // platform.SupportsIPv6() then this test will fail because the golden - // files were generated assuming ipv6 support was present - name: "expose-checks-http-with-bind-override", - create: proxycfg.TestConfigSnapshotExposeChecksWithBindOverride, - generatorSetup: func(s *ResourceGenerator) { - s.CfgFetcher = configFetcherFunc(func() string { - return "192.0.2.1" - }) - }, - }, - { - // NOTE: if IPv6 is not supported in the kernel per - // platform.SupportsIPv6() then this test will fail because the golden - // files were generated assuming ipv6 support was present - name: "expose-checks-grpc", - create: proxycfg.TestConfigSnapshotExposeChecksGRPC, - generatorSetup: func(s *ResourceGenerator) { - s.CfgFetcher = configFetcherFunc(func() string { - return "192.0.2.1" - }) - }, - }, - } -} - -func getCustomConfigurationGoldenTestCases(enterprise bool) []goldenTestCase { - return []goldenTestCase{ - { - name: "custom-upstream-default-chain", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotDiscoveryChain(t, "default", enterprise, func(ns *structs.NodeService) { - ns.Proxy.Upstreams[0].Config["envoy_cluster_json"] = - customAppClusterJSON(t, customClusterJSONOptions{ - Name: "myservice", - }) - }, nil) - }, - // TODO(proxystate): requires custom cluster work - alsoRunTestForV2: false, - }, - { - name: "custom-local-app", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { - ns.Proxy.Config["envoy_local_cluster_json"] = - customAppClusterJSON(t, customClusterJSONOptions{ - Name: "mylocal", - }) - }, nil) - }, - // TODO(proxystate): requires custom cluster work - alsoRunTestForV2: false, - }, - { - name: "custom-upstream", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { - ns.Proxy.Upstreams[0].Config["envoy_cluster_json"] = - customAppClusterJSON(t, customClusterJSONOptions{ - Name: "myservice", - }) - }, nil) - }, - // TODO(proxystate): requires custom cluster work - alsoRunTestForV2: false, - }, - { - name: "custom-upstream-ignores-tls", - overrideGoldenName: "custom-upstream", // should be the same - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { - ns.Proxy.Upstreams[0].Config["envoy_cluster_json"] = - customAppClusterJSON(t, customClusterJSONOptions{ - Name: "myservice", - // Attempt to override the TLS context should be ignored - TLSContext: `"allowRenegotiation": false`, - }) - }, nil) - }, - // TODO(proxystate): requires custom cluster work - alsoRunTestForV2: false, - }, - { - name: "custom-upstream-with-prepared-query", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { - for i := range ns.Proxy.Upstreams { - - switch ns.Proxy.Upstreams[i].DestinationName { - case "db": - if ns.Proxy.Upstreams[i].Config == nil { - ns.Proxy.Upstreams[i].Config = map[string]interface{}{} - } - - uid := proxycfg.NewUpstreamID(&ns.Proxy.Upstreams[i]) - - // Triggers an override with the presence of the escape hatch listener - ns.Proxy.Upstreams[i].DestinationType = structs.UpstreamDestTypePreparedQuery - - ns.Proxy.Upstreams[i].Config["envoy_cluster_json"] = - customClusterJSON(t, customClusterJSONOptions{ - Name: uid.EnvoyID() + ":custom-upstream", - }) - - // Also test that http2 options are triggered. - // A separate upstream without an override is required to test - case "geo-cache": - if ns.Proxy.Upstreams[i].Config == nil { - ns.Proxy.Upstreams[i].Config = map[string]interface{}{} - } - ns.Proxy.Upstreams[i].Config["protocol"] = "http2" - default: - continue - } - } - }, nil) - }, - // TODO(proxystate): requires custom cluster work - alsoRunTestForV2: false, - }, - { - name: "custom-timeouts", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { - ns.Proxy.Config["local_connect_timeout_ms"] = 1234 - ns.Proxy.Upstreams[0].Config["connect_timeout_ms"] = 2345 - }, nil) - }, - alsoRunTestForV2: true, - }, - { - name: "custom-passive-healthcheck", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { - ns.Proxy.Upstreams[0].Config["passive_health_check"] = map[string]interface{}{ - "enforcing_consecutive_5xx": float64(80), - "max_failures": float64(5), - "interval": float64(10 * time.Second), - "max_ejection_percent": float64(100), - "base_ejection_time": float64(10 * time.Second), - } - }, nil) - }, - alsoRunTestForV2: true, - }, - { - name: "custom-passive-healthcheck-zero-consecutive_5xx", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { - ns.Proxy.Upstreams[0].Config["passive_health_check"] = map[string]interface{}{ - "enforcing_consecutive_5xx": float64(0), - "max_failures": float64(5), - "interval": float64(10 * time.Second), - "max_ejection_percent": float64(100), - "base_ejection_time": float64(10 * time.Second), - } - }, nil) - }, - alsoRunTestForV2: true, - }, - { - name: "custom-max-inbound-connections", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { - ns.Proxy.Config["max_inbound_connections"] = 3456 - }, nil) - }, - alsoRunTestForV2: true, - }, - { - name: "custom-limits-max-connections-only", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { - for i := range ns.Proxy.Upstreams { - // We check if Config is nil because the prepared_query upstream is - // initialized without a Config map. Use Upstreams[i] syntax to - // modify the actual ConfigSnapshot instead of copying the Upstream - // in the range. - if ns.Proxy.Upstreams[i].Config == nil { - ns.Proxy.Upstreams[i].Config = map[string]interface{}{} - } - - ns.Proxy.Upstreams[i].Config["limits"] = map[string]interface{}{ - "max_connections": 500, - } - } - }, nil) - }, - alsoRunTestForV2: true, - }, - { - name: "custom-limits-set-to-zero", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { - for i := range ns.Proxy.Upstreams { - if ns.Proxy.Upstreams[i].Config == nil { - ns.Proxy.Upstreams[i].Config = map[string]interface{}{} - } - - ns.Proxy.Upstreams[i].Config["limits"] = map[string]interface{}{ - "max_connections": 0, - "max_pending_requests": 0, - "max_concurrent_requests": 0, - } - } - }, nil) - }, - alsoRunTestForV2: true, - }, - { - name: "custom-limits", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { - for i := range ns.Proxy.Upstreams { - if ns.Proxy.Upstreams[i].Config == nil { - ns.Proxy.Upstreams[i].Config = map[string]interface{}{} - } - - ns.Proxy.Upstreams[i].Config["limits"] = map[string]interface{}{ - "max_connections": 500, - "max_pending_requests": 600, - "max_concurrent_requests": 700, - } - } - }, nil) - }, - alsoRunTestForV2: true, - }, - { - name: "connect-proxy-with-default-chain-and-custom-cluster", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotDiscoveryChain(t, "default", enterprise, func(ns *structs.NodeService) { - ns.Proxy.Upstreams[0].Config["envoy_cluster_json"] = - customAppClusterJSON(t, customClusterJSONOptions{ - Name: "myservice", - }) - }, nil) - }, - // TODO(proxystate): requires custom cluster work - alsoRunTestForV2: false, - }, - { - name: "custom-public-listener", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { - ns.Proxy.Config["envoy_public_listener_json"] = - customListenerJSON(t, customListenerJSONOptions{ - Name: "custom-public-listen", - }) - }, nil) - }, - }, - { - name: "custom-public-listener-http", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { - ns.Proxy.Config["protocol"] = "http" - ns.Proxy.Config["envoy_public_listener_json"] = - customHTTPListenerJSON(t, customHTTPListenerJSONOptions{ - Name: "custom-public-listen", - }) - }, nil) - }, - }, - { - name: "custom-public-listener-http-2", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { - ns.Proxy.Config["protocol"] = "http" - ns.Proxy.Config["envoy_public_listener_json"] = - customHTTPListenerJSON(t, customHTTPListenerJSONOptions{ - Name: "custom-public-listen", - HTTPConnectionManagerName: httpConnectionManagerNewName, - }) - }, nil) - }, - }, - { - name: "custom-public-listener-http-missing", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { - ns.Proxy.Config["protocol"] = "http" - ns.Proxy.Config["envoy_public_listener_json"] = - customListenerJSON(t, customListenerJSONOptions{ - Name: "custom-public-listen", - }) - }, nil) - }, - }, - { - name: "custom-public-listener-ignores-tls", - overrideGoldenName: "custom-public-listener", // should be the same - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { - ns.Proxy.Config["envoy_public_listener_json"] = - customListenerJSON(t, customListenerJSONOptions{ - Name: "custom-public-listen", - // Attempt to override the TLS context should be ignored - TLSContext: `"allowRenegotiation": false`, - }) - }, nil) - }, - }, - { - name: "custom-trace-listener", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { - ns.Proxy.Config["protocol"] = "http" - ns.Proxy.Config["envoy_listener_tracing_json"] = customTraceJSON(t) - }, nil) - }, - }, - } -} - -func getConnectProxyJWTProviderGoldenTestCases() []goldenTestCase { - return []goldenTestCase{ - { - name: "connect-proxy-with-jwt-config-entry-with-local", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshot(t, nil, []proxycfg.UpdateEvent{ - { - CorrelationID: "jwt-provider", - Result: &structs.IndexedConfigEntries{ - Kind: "jwt-provider", - Entries: []structs.ConfigEntry{ - &structs.JWTProviderConfigEntry{ - Name: "okta", - JSONWebKeySet: &structs.JSONWebKeySet{ - Local: &structs.LocalJWKS{ - JWKS: "xxx", - }, - }, - }, - }, - }, - }, - }) - }, - // TODO(proxystate): jwt work will come at a later time - alsoRunTestForV2: false, - }, - { - name: "connect-proxy-with-jwt-config-entry-with-remote-jwks", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshot(t, nil, []proxycfg.UpdateEvent{ - { - CorrelationID: "jwt-provider", - Result: &structs.IndexedConfigEntries{ - Kind: "jwt-provider", - Entries: []structs.ConfigEntry{ - &structs.JWTProviderConfigEntry{ - Name: "okta", - JSONWebKeySet: &structs.JSONWebKeySet{ - Remote: &structs.RemoteJWKS{ - RequestTimeoutMs: 1000, - FetchAsynchronously: true, - URI: "https://test.test.com", - JWKSCluster: &structs.JWKSCluster{ - DiscoveryType: structs.DiscoveryTypeStatic, - ConnectTimeout: time.Duration(5) * time.Second, - TLSCertificates: &structs.JWKSTLSCertificate{ - TrustedCA: &structs.JWKSTLSCertTrustedCA{ - Filename: "mycert.crt", - }, - }, - }, - }, - }, - }, - }, - }, - }, - }) - }, - // TODO(proxystate): jwt work will come at a later time - alsoRunTestForV2: false, - }, - } -} - -func getTerminatingGatewayPeeringGoldenTestCases() []goldenTestCase { - return []goldenTestCase{ - { - name: "terminating-gateway", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotTerminatingGateway(t, true, nil, nil) - }, - // TODO(proxystate): terminating gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "terminating-gateway-no-services", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotTerminatingGateway(t, false, nil, nil) - }, - // TODO(proxystate): terminating gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "terminating-gateway-service-subsets", - create: proxycfg.TestConfigSnapshotTerminatingGatewayServiceSubsetsWebAndCache, - // TODO(proxystate): terminating gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "terminating-gateway-hostname-service-subsets", - create: proxycfg.TestConfigSnapshotTerminatingGatewayHostnameSubsets, - // TODO(proxystate): terminating gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "terminating-gateway-sni", - create: proxycfg.TestConfigSnapshotTerminatingGatewaySNI, - // TODO(proxystate): terminating gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "terminating-gateway-http2-upstream", - create: proxycfg.TestConfigSnapshotTerminatingGatewayHTTP2, - // TODO(proxystate): terminating gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "terminating-gateway-http2-upstream-subsets", - create: proxycfg.TestConfigSnapshotTerminatingGatewaySubsetsHTTP2, - // TODO(proxystate): terminating gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "terminating-gateway-ignore-extra-resolvers", - create: proxycfg.TestConfigSnapshotTerminatingGatewayIgnoreExtraResolvers, - // TODO(proxystate): terminating gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "terminating-gateway-lb-config", - create: proxycfg.TestConfigSnapshotTerminatingGatewayLBConfig, - // TODO(proxystate): terminating gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "terminating-gateway-lb-config-no-hash-policies", - create: proxycfg.TestConfigSnapshotTerminatingGatewayLBConfigNoHashPolicies, - // TODO(proxystate): terminating gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "terminating-gateway-tcp-keepalives", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotTerminatingGateway(t, true, func(ns *structs.NodeService) { - if ns.Proxy.Config == nil { - ns.Proxy.Config = map[string]interface{}{} - } - ns.Proxy.Config["envoy_gateway_remote_tcp_enable_keepalive"] = true - ns.Proxy.Config["envoy_gateway_remote_tcp_keepalive_time"] = 133 - ns.Proxy.Config["envoy_gateway_remote_tcp_keepalive_interval"] = 27 - ns.Proxy.Config["envoy_gateway_remote_tcp_keepalive_probes"] = 5 - }, nil) - }, - // TODO(proxystate): terminating gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "terminating-gateway-custom-trace-listener", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotTerminatingGateway(t, true, func(ns *structs.NodeService) { - ns.Proxy.Config = map[string]interface{}{} - ns.Proxy.Config["protocol"] = "http" - ns.Proxy.Config["envoy_listener_tracing_json"] = customTraceJSON(t) - }, nil) - }, - // TODO(proxystate): terminating gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "terminating-gateway-with-tls-incoming-min-version", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotTerminatingGateway(t, true, nil, []proxycfg.UpdateEvent{ - { - CorrelationID: "mesh", - Result: &structs.ConfigEntryResponse{ - Entry: &structs.MeshConfigEntry{ - TLS: &structs.MeshTLSConfig{ - Incoming: &structs.MeshDirectionalTLSConfig{ - TLSMinVersion: types.TLSv1_3, - }, - }, - }, - }, - }, - }) - }, - // TODO(proxystate): terminating gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "terminating-gateway-with-tls-incoming-max-version", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotTerminatingGateway(t, true, nil, []proxycfg.UpdateEvent{ - { - CorrelationID: "mesh", - Result: &structs.ConfigEntryResponse{ - Entry: &structs.MeshConfigEntry{ - TLS: &structs.MeshTLSConfig{ - Incoming: &structs.MeshDirectionalTLSConfig{ - TLSMaxVersion: types.TLSv1_2, - }, - }, - }, - }, - }, - }) - }, - // TODO(proxystate): terminating gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "terminating-gateway-with-tls-incoming-cipher-suites", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotTerminatingGateway(t, true, nil, []proxycfg.UpdateEvent{ - { - CorrelationID: "mesh", - Result: &structs.ConfigEntryResponse{ - Entry: &structs.MeshConfigEntry{ - TLS: &structs.MeshTLSConfig{ - Incoming: &structs.MeshDirectionalTLSConfig{ - CipherSuites: []types.TLSCipherSuite{ - types.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, - types.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, - }, - }, - }, - }, - }, - }, - }) - }, - // TODO(proxystate): terminating gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "terminating-gateway-custom-and-tagged-addresses", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotTerminatingGateway(t, true, func(ns *structs.NodeService) { - ns.Proxy.Config = map[string]interface{}{ - "envoy_gateway_no_default_bind": true, - "envoy_gateway_bind_tagged_addresses": true, - "envoy_gateway_bind_addresses": map[string]structs.ServiceAddress{ - // This bind address should not get a listener due to deduplication and it sorts to the end - "z-duplicate-of-tagged-wan-addr": { - Address: "198.18.0.1", - Port: 443, - }, - "foo": { - Address: "198.17.2.3", - Port: 8080, - }, - }, - } - }, nil) - }, - // TODO(proxystate): terminating gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "terminating-gateway-no-api-cert", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - api := structs.NewServiceName("api", nil) - return proxycfg.TestConfigSnapshotTerminatingGateway(t, true, nil, []proxycfg.UpdateEvent{ - { - CorrelationID: "service-leaf:" + api.String(), // serviceLeafIDPrefix - Result: nil, // tombstone this - }, - }) - }, - // TODO(proxystate): terminating gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "terminating-gateway-with-peer-trust-bundle", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - roots, _ := proxycfg.TestCerts(t) - return proxycfg.TestConfigSnapshotTerminatingGateway(t, true, nil, []proxycfg.UpdateEvent{ - { - CorrelationID: "peer-trust-bundle:web", - Result: &pbpeering.TrustBundleListByServiceResponse{ - Bundles: []*pbpeering.PeeringTrustBundle{ - { - TrustDomain: "foo.bar.gov", - PeerName: "dc2", - Partition: "default", - RootPEMs: []string{ - roots.Roots[0].RootCert, - }, - ExportedPartition: "default", - CreateIndex: 0, - ModifyIndex: 0, - }, - }, - }, - }, - { - CorrelationID: "service-intentions:web", - Result: structs.SimplifiedIntentions{ - { - SourceName: "source", - SourcePeer: "dc2", - DestinationName: "web", - DestinationPartition: "default", - Action: structs.IntentionActionAllow, - }, - }, - }, - }) - }, - // TODO(proxystate): terminating gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "terminating-gateway-default-service-subset", - create: proxycfg.TestConfigSnapshotTerminatingGatewayDefaultServiceSubset, - // TODO(proxystate): terminating gateway will come at a later time - alsoRunTestForV2: false, - }, - } -} - -func getIngressGatewayGoldenTestCases() []goldenTestCase { - return []goldenTestCase{ - { - name: "ingress-gateway", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", - "default", nil, nil, nil) - }, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-gateway-nil-config-entry", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotIngressGateway_NilConfigEntry(t) - }, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-gateway-with-tls-outgoing-min-version", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", "default", nil, nil, []proxycfg.UpdateEvent{ - { - CorrelationID: "mesh", - Result: &structs.ConfigEntryResponse{ - Entry: &structs.MeshConfigEntry{ - TLS: &structs.MeshTLSConfig{ - Outgoing: &structs.MeshDirectionalTLSConfig{ - TLSMinVersion: types.TLSv1_3, - }, - }, - }, - }, - }, - }) - }, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-gateway-with-tls-outgoing-max-version", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", "default", nil, nil, []proxycfg.UpdateEvent{ - { - CorrelationID: "mesh", - Result: &structs.ConfigEntryResponse{ - Entry: &structs.MeshConfigEntry{ - TLS: &structs.MeshTLSConfig{ - Outgoing: &structs.MeshDirectionalTLSConfig{ - TLSMaxVersion: types.TLSv1_2, - }, - }, - }, - }, - }, - }) - }, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-gateway-with-tls-outgoing-cipher-suites", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", "default", nil, nil, []proxycfg.UpdateEvent{ - { - CorrelationID: "mesh", - Result: &structs.ConfigEntryResponse{ - Entry: &structs.MeshConfigEntry{ - TLS: &structs.MeshTLSConfig{ - Outgoing: &structs.MeshDirectionalTLSConfig{ - CipherSuites: []types.TLSCipherSuite{ - types.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, - types.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, - }, - }, - }, - }, - }, - }, - }) - }, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-gateway-no-services", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotIngressGateway(t, false, "tcp", - "default", nil, nil, nil) - }, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-with-chain", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", - "simple", nil, nil, nil) - }, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-with-service-max-connections", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", - "simple", nil, - func(entry *structs.IngressGatewayConfigEntry) { - entry.Listeners[0].Services[0].MaxConnections = 4096 - }, nil) - }, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-with-defaults-service-max-connections", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", - "simple", nil, - func(entry *structs.IngressGatewayConfigEntry) { - entry.Defaults = &structs.IngressServiceConfig{ - MaxConnections: 2048, - MaxPendingRequests: 512, - MaxConcurrentRequests: 4096, - } - }, nil) - }, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-with-overwrite-defaults-service-max-connections", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", - "simple", nil, - func(entry *structs.IngressGatewayConfigEntry) { - entry.Defaults = &structs.IngressServiceConfig{ - MaxConnections: 2048, - MaxPendingRequests: 512, - } - entry.Listeners[0].Services[0].MaxConnections = 4096 - entry.Listeners[0].Services[0].MaxPendingRequests = 2048 - }, nil) - }, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-with-service-passive-health-check", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", - "simple", nil, - func(entry *structs.IngressGatewayConfigEntry) { - entry.Listeners[0].Services[0].MaxConnections = 4096 - entry.Listeners[0].Services[0].PassiveHealthCheck = &structs.PassiveHealthCheck{ - Interval: 5000000000, - MaxFailures: 10, - MaxEjectionPercent: uint32ptr(90), - } - }, nil) - }, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-with-defaults-passive-health-check", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", - "simple", nil, - func(entry *structs.IngressGatewayConfigEntry) { - enforcingConsecutive5xx := uint32(80) - entry.Defaults = &structs.IngressServiceConfig{ - MaxConnections: 2048, - MaxPendingRequests: 512, - MaxConcurrentRequests: 4096, - PassiveHealthCheck: &structs.PassiveHealthCheck{ - Interval: 5000000000, - MaxFailures: 10, - EnforcingConsecutive5xx: &enforcingConsecutive5xx, - MaxEjectionPercent: uint32ptr(90), - }, - } - }, nil) - }, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-with-overwrite-defaults-passive-health-check", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", - "simple", nil, - func(entry *structs.IngressGatewayConfigEntry) { - defaultEnforcingConsecutive5xx := uint32(80) - entry.Defaults = &structs.IngressServiceConfig{ - MaxConnections: 2048, - MaxPendingRequests: 512, - PassiveHealthCheck: &structs.PassiveHealthCheck{ - Interval: 5000000000, - EnforcingConsecutive5xx: &defaultEnforcingConsecutive5xx, - MaxEjectionPercent: uint32ptr(80), - }, - } - enforcingConsecutive5xx := uint32(50) - entry.Listeners[0].Services[0].MaxConnections = 4096 - entry.Listeners[0].Services[0].MaxPendingRequests = 2048 - entry.Listeners[0].Services[0].PassiveHealthCheck = &structs.PassiveHealthCheck{ - Interval: 8000000000, - EnforcingConsecutive5xx: &enforcingConsecutive5xx, - MaxEjectionPercent: uint32ptr(90), - BaseEjectionTime: durationPtr(12 * time.Second), - } - }, nil) - }, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-with-chain-external-sni", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", - "external-sni", nil, nil, nil) - }, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-with-chain-and-failover", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", - "failover", nil, nil, nil) - }, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-with-chain-and-failover-to-cluster-peer", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", - "failover-to-cluster-peer", nil, nil, nil) - }, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-with-tcp-chain-failover-through-remote-gateway", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", - "failover-through-remote-gateway", nil, nil, nil) - }, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-with-tcp-chain-failover-through-remote-gateway-triggered", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", - "failover-through-remote-gateway-triggered", nil, nil, nil) - }, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-with-tcp-chain-double-failover-through-remote-gateway", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", - "failover-through-double-remote-gateway", nil, nil, nil) - }, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-with-tcp-chain-double-failover-through-remote-gateway-triggered", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", - "failover-through-double-remote-gateway-triggered", nil, nil, nil) - }, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-with-tcp-chain-failover-through-local-gateway", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", - "failover-through-local-gateway", nil, nil, nil) - }, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-with-tcp-chain-failover-through-local-gateway-triggered", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", - "failover-through-local-gateway-triggered", nil, nil, nil) - }, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-with-tcp-chain-double-failover-through-local-gateway", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", - "failover-through-double-local-gateway", nil, nil, nil) - }, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-with-tcp-chain-double-failover-through-local-gateway-triggered", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", - "failover-through-double-local-gateway-triggered", nil, nil, nil) - }, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-splitter-with-resolver-redirect", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotIngressGateway(t, true, "http", - "splitter-with-resolver-redirect-multidc", nil, nil, nil) - }, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-lb-in-resolver", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotIngressGateway(t, true, "http", - "lb-resolver", nil, nil, nil) - }, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-multiple-listeners-duplicate-service", - create: proxycfg.TestConfigSnapshotIngress_MultipleListenersDuplicateService, - // TODO(proxystate): terminating gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-config-entry-nil", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotIngressGateway_NilConfigEntry(t) - }, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-defaults-no-chain", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotIngressGateway(t, false, "tcp", - "default", nil, nil, nil) - }, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-with-chain-and-splitter", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotIngressGateway(t, true, "http", - "chain-and-splitter", nil, nil, nil) - }, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-with-grpc-router", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotIngressGateway(t, true, "http", - "grpc-router", nil, nil, nil) - }, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-with-chain-and-router", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotIngressGateway(t, true, "http", - "chain-and-router", nil, nil, nil) - }, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-http-multiple-services", - create: proxycfg.TestConfigSnapshotIngress_HTTPMultipleServices, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-grpc-multiple-services", - create: proxycfg.TestConfigSnapshotIngress_GRPCMultipleServices, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-with-chain-and-router-header-manip", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotIngressGatewayWithChain(t, "router-header-manip", nil, nil) - }, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-with-sds-listener-level", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotIngressGatewayWithChain(t, "sds-listener-level", nil, nil) - }, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-with-sds-listener-level-wildcard", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotIngressGatewayWithChain(t, "sds-listener-level-wildcard", nil, nil) - }, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-with-tls-listener", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", "default", nil, - func(entry *structs.IngressGatewayConfigEntry) { - entry.TLS.Enabled = true - }, nil) - }, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-with-tls-listener-min-version", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", "default", nil, - func(entry *structs.IngressGatewayConfigEntry) { - entry.TLS.Enabled = true - entry.TLS.TLSMinVersion = types.TLSv1_3 - }, nil) - }, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-with-tls-listener-max-version", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", "default", nil, - func(entry *structs.IngressGatewayConfigEntry) { - entry.TLS.Enabled = true - entry.TLS.TLSMaxVersion = types.TLSv1_2 - }, nil) - }, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-with-tls-listener-cipher-suites", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", "default", nil, - func(entry *structs.IngressGatewayConfigEntry) { - entry.TLS.Enabled = true - entry.TLS.CipherSuites = []types.TLSCipherSuite{ - types.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, - types.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, - } - }, nil) - }, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-with-tls-mixed-listeners", - create: proxycfg.TestConfigSnapshotIngressGateway_MixedListeners, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-with-tls-min-version-listeners-gateway-defaults", - create: proxycfg.TestConfigSnapshotIngressGateway_TLSMinVersionListenersGatewayDefaults, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-with-single-tls-listener", - create: proxycfg.TestConfigSnapshotIngressGateway_SingleTLSListener, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-with-tls-mixed-min-version-listeners", - create: proxycfg.TestConfigSnapshotIngressGateway_TLSMixedMinVersionListeners, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-with-tls-mixed-max-version-listeners", - create: proxycfg.TestConfigSnapshotIngressGateway_TLSMixedMaxVersionListeners, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-with-tls-mixed-cipher-suites-listeners", - create: proxycfg.TestConfigSnapshotIngressGateway_TLSMixedCipherVersionListeners, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-with-sds-listener-gw-level", - create: proxycfg.TestConfigSnapshotIngressGatewaySDS_GatewayLevel, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-with-sds-listener-listener-level", - create: proxycfg.TestConfigSnapshotIngressGatewaySDS_GatewayAndListenerLevel, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-with-sds-listener-gw-level-http", - create: proxycfg.TestConfigSnapshotIngressGatewaySDS_GatewayAndListenerLevel_HTTP, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-with-sds-listener-gw-level-mixed-tls", - create: proxycfg.TestConfigSnapshotIngressGatewaySDS_GatewayLevel_MixedTLS, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - // TODO: cross reference with ingress-with-sds-service-level and figure out which should stay - { - name: "ingress-with-sds-service-level-2", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotIngressGatewayWithChain(t, "sds-service-level", nil, nil) - }, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-with-sds-service-level-mixed-tls", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotIngressGatewayWithChain(t, "sds-service-level-mixed-tls", nil, nil) - }, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-with-sds-service-level", - create: proxycfg.TestConfigSnapshotIngressGatewaySDS_ServiceLevel, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-with-sds-listener+service-level", - create: proxycfg.TestConfigSnapshotIngressGatewaySDS_ListenerAndServiceLevel, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-with-sds-service-level-mixed-no-tls", - create: proxycfg.TestConfigSnapshotIngressGatewaySDS_MixedNoTLS, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-with-grpc-single-tls-listener", - create: proxycfg.TestConfigSnapshotIngressGateway_SingleTLSListener_GRPC, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-with-http2-single-tls-listener", - create: proxycfg.TestConfigSnapshotIngressGateway_SingleTLSListener_HTTP2, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-with-http2-and-grpc-multiple-tls-listener", - create: proxycfg.TestConfigSnapshotIngressGateway_GWTLSListener_MixedHTTP2gRPC, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - { - name: "ingress-gateway-bind-addrs", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", "default", func(ns *structs.NodeService) { - // - ns.TaggedAddresses = map[string]structs.ServiceAddress{ - "lan": {Address: "10.0.0.1"}, - "wan": {Address: "172.16.0.1"}, - } - ns.Proxy.Config = map[string]interface{}{ - "envoy_gateway_no_default_bind": true, - "envoy_gateway_bind_tagged_addresses": true, - "envoy_gateway_bind_addresses": map[string]structs.ServiceAddress{ - "foo": {Address: "8.8.8.8"}, - }, - } - }, nil, nil) - }, - // TODO(proxystate): ingress gateway will come at a later time - alsoRunTestForV2: false, - }, - } -} - -func getAccessLogsGoldenTestCases() []goldenTestCase { - return []goldenTestCase{ - { - name: "access-logs-defaults", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { - // This should be passed into the snapshot through proxy-defaults - ns.Proxy.AccessLogs = structs.AccessLogsConfig{ - Enabled: true, - } - }, - nil) - }, - }, - { - name: "access-logs-json-file", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { - // This should be passed into the snapshot through proxy-defaults - ns.Proxy.AccessLogs = structs.AccessLogsConfig{ - Enabled: true, - Type: structs.FileLogSinkType, - Path: "/tmp/accesslog.txt", - JSONFormat: "{ \"custom_start_time\": \"%START_TIME%\" }", - } - }, - nil) - }, - }, - { - name: "access-logs-text-stderr-disablelistenerlogs", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { - // This should be passed into the snapshot through proxy-defaults - ns.Proxy.AccessLogs = structs.AccessLogsConfig{ - Enabled: true, - DisableListenerLogs: true, - Type: structs.StdErrLogSinkType, - TextFormat: "CUSTOM FORMAT %START_TIME%", - } - }, - nil) - }, - }, - } -} - -func getTLSGoldenTestCases() []goldenTestCase { - return []goldenTestCase{ - { - name: "connect-proxy-with-tls-outgoing-min-version-auto", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshot(t, nil, []proxycfg.UpdateEvent{ - { - CorrelationID: "mesh", - Result: &structs.ConfigEntryResponse{ - Entry: &structs.MeshConfigEntry{ - TLS: &structs.MeshTLSConfig{ - Outgoing: &structs.MeshDirectionalTLSConfig{ - TLSMinVersion: types.TLSVersionAuto, - }, - }, - }, - }, - }, - }) - }, - alsoRunTestForV2: true, - }, - { - name: "connect-proxy-with-tls-outgoing-min-version", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshot(t, nil, []proxycfg.UpdateEvent{ - { - CorrelationID: "mesh", - Result: &structs.ConfigEntryResponse{ - Entry: &structs.MeshConfigEntry{ - TLS: &structs.MeshTLSConfig{ - Outgoing: &structs.MeshDirectionalTLSConfig{ - TLSMinVersion: types.TLSv1_3, - }, - }, - }, - }, - }, - }) - }, - alsoRunTestForV2: true, - }, - { - name: "connect-proxy-with-tls-outgoing-max-version", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshot(t, nil, []proxycfg.UpdateEvent{ - { - CorrelationID: "mesh", - Result: &structs.ConfigEntryResponse{ - Entry: &structs.MeshConfigEntry{ - TLS: &structs.MeshTLSConfig{ - Outgoing: &structs.MeshDirectionalTLSConfig{ - TLSMaxVersion: types.TLSv1_2, - }, - }, - }, - }, - }, - }) - }, - alsoRunTestForV2: true, - }, - { - name: "connect-proxy-with-tls-outgoing-cipher-suites", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshot(t, nil, []proxycfg.UpdateEvent{ - { - CorrelationID: "mesh", - Result: &structs.ConfigEntryResponse{ - Entry: &structs.MeshConfigEntry{ - TLS: &structs.MeshTLSConfig{ - Outgoing: &structs.MeshDirectionalTLSConfig{ - CipherSuites: []types.TLSCipherSuite{ - types.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, - types.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, - }, - }, - }, - }, - }, - }, - }) - }, - alsoRunTestForV2: true, - }, - { - name: "connect-proxy-with-tls-incoming-min-version", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshot(t, nil, []proxycfg.UpdateEvent{ - { - CorrelationID: "mesh", - Result: &structs.ConfigEntryResponse{ - Entry: &structs.MeshConfigEntry{ - TLS: &structs.MeshTLSConfig{ - Incoming: &structs.MeshDirectionalTLSConfig{ - TLSMinVersion: types.TLSv1_3, - }, - }, - }, - }, - }, - }) - }, - alsoRunTestForV2: true, - }, - { - name: "connect-proxy-with-tls-incoming-max-version", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshot(t, nil, []proxycfg.UpdateEvent{ - { - CorrelationID: "mesh", - Result: &structs.ConfigEntryResponse{ - Entry: &structs.MeshConfigEntry{ - TLS: &structs.MeshTLSConfig{ - Incoming: &structs.MeshDirectionalTLSConfig{ - TLSMaxVersion: types.TLSv1_2, - }, - }, - }, - }, - }, - }) - }, - alsoRunTestForV2: true, - }, - { - name: "connect-proxy-with-tls-incoming-cipher-suites", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshot(t, nil, []proxycfg.UpdateEvent{ - { - CorrelationID: "mesh", - Result: &structs.ConfigEntryResponse{ - Entry: &structs.MeshConfigEntry{ - TLS: &structs.MeshTLSConfig{ - Incoming: &structs.MeshDirectionalTLSConfig{ - CipherSuites: []types.TLSCipherSuite{ - types.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, - types.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, - }, - }, - }, - }, - }, - }, - }) - }, - alsoRunTestForV2: true, - }, - { - name: "connect-proxy-with-tproxy-and-permissive-mtls", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { - ns.Proxy.MutualTLSMode = structs.MutualTLSModePermissive - ns.Proxy.Mode = structs.ProxyModeTransparent - ns.Proxy.TransparentProxy.OutboundListenerPort = 1234 - }, - nil) - }, - alsoRunTestForV2: true, - }, - { - name: "connect-proxy-without-tproxy-and-permissive-mtls", - create: func(t testinf.T) *proxycfg.ConfigSnapshot { - return proxycfg.TestConfigSnapshot(t, func(ns *structs.NodeService) { - ns.Proxy.MutualTLSMode = structs.MutualTLSModePermissive - }, - nil) - }, - alsoRunTestForV2: true, - }, - } -} - -func getPeeredGoldenTestCases() []goldenTestCase { - return []goldenTestCase{ - { - name: "connect-proxy-with-peered-upstreams", - create: proxycfg.TestConfigSnapshotPeering, - // TODO(proxystate): peering will come at a later date. - alsoRunTestForV2: false, - }, - { - name: "connect-proxy-with-peered-upstreams-escape-overrides", - create: proxycfg.TestConfigSnapshotPeeringWithEscapeOverrides, - // TODO(proxystate): peering will come at a later date. - alsoRunTestForV2: false, - }, - { - name: "connect-proxy-with-peered-upstreams-http2", - create: proxycfg.TestConfigSnapshotPeeringWithHTTP2, - // TODO(proxystate): peering will come at a later date. - alsoRunTestForV2: false, - }, - { - name: "transparent-proxy-with-peered-upstreams", - create: proxycfg.TestConfigSnapshotPeeringTProxy, - // TODO(proxystate): peering will come at a later date. - alsoRunTestForV2: false, - }, - { - name: "local-mesh-gateway-with-peered-upstreams", - create: proxycfg.TestConfigSnapshotPeeringLocalMeshGateway, - // TODO(proxystate): mesh gateways and peering will come at a later date. - alsoRunTestForV2: false, }, } } diff --git a/agent/xds/routes.go b/agent/xds/routes.go index d4e289e033785..99d72735b35d6 100644 --- a/agent/xds/routes.go +++ b/agent/xds/routes.go @@ -61,11 +61,6 @@ func (s *ResourceGenerator) routesForConnectProxy(cfgSnap *proxycfg.ConfigSnapsh continue } - if !structs.IsProtocolHTTPLike(chain.Protocol) { - // Routes can only be defined for HTTP services - continue - } - virtualHost, err := s.makeUpstreamRouteForDiscoveryChain(cfgSnap, uid, chain, []string{"*"}, false, perRouteFilterBuilder{}) if err != nil { return nil, err diff --git a/agent/xds/routes_test.go b/agent/xds/routes_test.go index eff0e32ad1b89..eda10f2234667 100644 --- a/agent/xds/routes_test.go +++ b/agent/xds/routes_test.go @@ -4,16 +4,403 @@ package xds import ( + "path/filepath" + "sort" "testing" "time" envoy_route_v3 "github.com/envoyproxy/go-control-plane/envoy/config/route/v3" + testinf "github.com/mitchellh/go-testing-interface" "github.com/stretchr/testify/require" "google.golang.org/protobuf/types/known/durationpb" + "github.com/hashicorp/consul/agent/proxycfg" "github.com/hashicorp/consul/agent/structs" + "github.com/hashicorp/consul/agent/xds/proxystateconverter" + "github.com/hashicorp/consul/agent/xds/response" + "github.com/hashicorp/consul/agent/xds/testcommon" + "github.com/hashicorp/consul/agent/xdsv2" + "github.com/hashicorp/consul/envoyextensions/xdscommon" + "github.com/hashicorp/consul/sdk/testutil" ) +type routeTestCase struct { + name string + create func(t testinf.T) *proxycfg.ConfigSnapshot + overrideGoldenName string + alsoRunTestForV2 bool +} + +func makeRouteDiscoChainTests(enterprise bool) []routeTestCase { + return []routeTestCase{ + { + name: "connect-proxy-with-chain", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "simple", enterprise, nil, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "connect-proxy-with-chain-external-sni", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "external-sni", enterprise, nil, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "connect-proxy-splitter-overweight", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "splitter-overweight", enterprise, nil, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "connect-proxy-with-chain-and-overrides", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "simple-with-overrides", enterprise, nil, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "splitter-with-resolver-redirect", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "splitter-with-resolver-redirect-multidc", enterprise, nil, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "connect-proxy-with-chain-and-splitter", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "chain-and-splitter", enterprise, nil, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "connect-proxy-with-grpc-router", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "grpc-router", enterprise, nil, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "connect-proxy-with-chain-and-router", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "chain-and-router", enterprise, nil, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "connect-proxy-lb-in-resolver", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "lb-resolver", enterprise, nil, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "connect-proxy-route-to-lb-resolver", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "redirect-to-lb-node", enterprise, nil, nil) + }, + alsoRunTestForV2: true, + }, + { + name: "connect-proxy-resolver-with-lb", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotDiscoveryChain(t, "resolver-with-lb", enterprise, nil, nil) + }, + alsoRunTestForV2: true, + }, + } +} + +func TestRoutesFromSnapshot(t *testing.T) { + // TODO: we should move all of these to TestAllResourcesFromSnapshot + // eventually to test all of the xDS types at once with the same input, + // just as it would be triggered by our xDS server. + if testing.Short() { + t.Skip("too slow for testing.Short") + } + + tests := []routeTestCase{ + // TODO(rb): test match stanza skipped for grpc + // Start ingress gateway test cases + { + name: "ingress-config-entry-nil", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway_NilConfigEntry(t) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-defaults-no-chain", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, false, "tcp", + "default", nil, nil, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-with-chain", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", + "simple", nil, nil, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-with-chain-external-sni", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "tcp", + "external-sni", nil, nil, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-splitter-with-resolver-redirect", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "http", + "splitter-with-resolver-redirect-multidc", nil, nil, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-with-chain-and-splitter", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "http", + "chain-and-splitter", nil, nil, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-with-grpc-router", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "http", + "grpc-router", nil, nil, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-with-chain-and-router", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "http", + "chain-and-router", nil, nil, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-lb-in-resolver", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGateway(t, true, "http", + "lb-resolver", nil, nil, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-http-multiple-services", + create: proxycfg.TestConfigSnapshotIngress_HTTPMultipleServices, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-grpc-multiple-services", + create: proxycfg.TestConfigSnapshotIngress_GRPCMultipleServices, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-with-chain-and-router-header-manip", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGatewayWithChain(t, "router-header-manip", nil, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-with-sds-listener-level", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGatewayWithChain(t, "sds-listener-level", nil, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-with-sds-listener-level-wildcard", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGatewayWithChain(t, "sds-listener-level-wildcard", nil, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-with-sds-service-level", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGatewayWithChain(t, "sds-service-level", nil, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "ingress-with-sds-service-level-mixed-tls", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotIngressGatewayWithChain(t, "sds-service-level-mixed-tls", nil, nil) + }, + // TODO(proxystate): ingress gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "terminating-gateway-lb-config", + create: proxycfg.TestConfigSnapshotTerminatingGatewayLBConfig, + // TODO(proxystate): terminating gateway will come at a later time + alsoRunTestForV2: false, + }, + { + name: "api-gateway-with-multiple-hostnames", + create: func(t testinf.T) *proxycfg.ConfigSnapshot { + return proxycfg.TestConfigSnapshotAPIGateway(t, "default", nil, func(entry *structs.APIGatewayConfigEntry, bound *structs.BoundAPIGatewayConfigEntry) { + entry.Listeners = []structs.APIGatewayListener{ + { + Name: "http", + Protocol: structs.ListenerProtocolHTTP, + Port: 8080, + Hostname: "*.example.com", + }, + } + bound.Listeners = []structs.BoundAPIGatewayListener{ + { + Name: "http", + Routes: []structs.ResourceReference{ + {Kind: structs.HTTPRoute, Name: "backend-route"}, + {Kind: structs.HTTPRoute, Name: "frontend-route"}, + {Kind: structs.HTTPRoute, Name: "generic-route"}, + }}, + } + }, + []structs.BoundRoute{ + &structs.HTTPRouteConfigEntry{ + Kind: structs.HTTPRoute, + Name: "backend-route", + Hostnames: []string{"backend.example.com"}, + Parents: []structs.ResourceReference{{Kind: structs.APIGateway, Name: "api-gateway"}}, + Rules: []structs.HTTPRouteRule{ + {Services: []structs.HTTPService{{Name: "backend"}}}, + }, + }, + &structs.HTTPRouteConfigEntry{ + Kind: structs.HTTPRoute, + Name: "frontend-route", + Hostnames: []string{"frontend.example.com"}, + Parents: []structs.ResourceReference{{Kind: structs.APIGateway, Name: "api-gateway"}}, + Rules: []structs.HTTPRouteRule{ + {Services: []structs.HTTPService{{Name: "frontend"}}}, + }, + }, + &structs.HTTPRouteConfigEntry{ + Kind: structs.HTTPRoute, + Name: "generic-route", + Parents: []structs.ResourceReference{{Kind: structs.APIGateway, Name: "api-gateway"}}, + Rules: []structs.HTTPRouteRule{ + { + Matches: []structs.HTTPMatch{{Path: structs.HTTPPathMatch{Match: structs.HTTPPathMatchPrefix, Value: "/frontend"}}}, + Services: []structs.HTTPService{{Name: "frontend"}}, + }, + { + Matches: []structs.HTTPMatch{{Path: structs.HTTPPathMatch{Match: structs.HTTPPathMatchPrefix, Value: "/backend"}}}, + Services: []structs.HTTPService{{Name: "backend"}}, + }, + }, + }, + }, nil, nil) + }, + }, + } + + tests = append(tests, makeRouteDiscoChainTests(false)...) + + latestEnvoyVersion := xdscommon.EnvoyVersions[0] + for _, envoyVersion := range xdscommon.EnvoyVersions { + sf, err := xdscommon.DetermineSupportedProxyFeaturesFromString(envoyVersion) + require.NoError(t, err) + t.Run("envoy-"+envoyVersion, func(t *testing.T) { + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + // Sanity check default with no overrides first + snap := tt.create(t) + + // We need to replace the TLS certs with deterministic ones to make golden + // files workable. Note we don't update these otherwise they'd change + // golden files for every test case and so not be any use! + testcommon.SetupTLSRootsAndLeaf(t, snap) + + g := NewResourceGenerator(testutil.Logger(t), nil, false) + g.ProxyFeatures = sf + + routes, err := g.routesFromSnapshot(snap) + require.NoError(t, err) + + sort.Slice(routes, func(i, j int) bool { + return routes[i].(*envoy_route_v3.RouteConfiguration).Name < routes[j].(*envoy_route_v3.RouteConfiguration).Name + }) + r, err := response.CreateResponse(xdscommon.RouteType, "00000001", "00000001", routes) + require.NoError(t, err) + + t.Run("current-xdsv1", func(t *testing.T) { + gotJSON := protoToJSON(t, r) + + gName := tt.name + if tt.overrideGoldenName != "" { + gName = tt.overrideGoldenName + } + + require.JSONEq(t, goldenEnvoy(t, filepath.Join("routes", gName), envoyVersion, latestEnvoyVersion, gotJSON), gotJSON) + }) + + if tt.alsoRunTestForV2 { + generator := xdsv2.NewResourceGenerator(testutil.Logger(t)) + + converter := proxystateconverter.NewConverter(testutil.Logger(t), &mockCfgFetcher{addressLan: "10.10.10.10"}) + proxyState, err := converter.ProxyStateFromSnapshot(snap) + require.NoError(t, err) + + res, err := generator.AllResourcesFromIR(proxyState) + require.NoError(t, err) + + routes = res[xdscommon.RouteType] + // The order of routes returned via RDS isn't relevant, so it's safe + // to sort these for the purposes of test comparisons. + sort.Slice(routes, func(i, j int) bool { + return routes[i].(*envoy_route_v3.Route).Name < routes[j].(*envoy_route_v3.Route).Name + }) + + r, err := response.CreateResponse(xdscommon.RouteType, "00000001", "00000001", routes) + require.NoError(t, err) + + t.Run("current-xdsv2", func(t *testing.T) { + gotJSON := protoToJSON(t, r) + + gName := tt.name + if tt.overrideGoldenName != "" { + gName = tt.overrideGoldenName + } + + expectedJSON := goldenEnvoy(t, filepath.Join("routes", gName), envoyVersion, latestEnvoyVersion, gotJSON) + require.JSONEq(t, expectedJSON, gotJSON) + }) + } + }) + } + }) + } +} + func TestEnvoyLBConfig_InjectToRouteAction(t *testing.T) { var tests = []struct { name string diff --git a/agent/xds/testdata/builtin_extension/routes/propertyoverride-patch-specific-upstream-service-failover.latest.golden b/agent/xds/testdata/builtin_extension/routes/propertyoverride-patch-specific-upstream-service-failover.latest.golden index 8b919343d21a9..63ede4b9ebe1e 100644 --- a/agent/xds/testdata/builtin_extension/routes/propertyoverride-patch-specific-upstream-service-failover.latest.golden +++ b/agent/xds/testdata/builtin_extension/routes/propertyoverride-patch-specific-upstream-service-failover.latest.golden @@ -1,5 +1,32 @@ { "nonce": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", + "mostSpecificHeaderMutationsWins": true, + "name": "db", + "validateClusters": true, + "virtualHosts": [ + { + "domains": [ + "*" + ], + "name": "db", + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "timeout": "33s" + } + } + ] + } + ] + } + ], "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", "versionInfo": "00000001" } \ No newline at end of file diff --git a/agent/xds/testdata/clusters/access-logs-defaults.latest.golden b/agent/xds/testdata/clusters/access-logs-defaults.latest.golden deleted file mode 100644 index 5a25e882ab312..0000000000000 --- a/agent/xds/testdata/clusters/access-logs-defaults.latest.golden +++ /dev/null @@ -1,127 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "circuitBreakers": {}, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/geo-cache-target" - }, - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc2/svc/geo-cache-target" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - }, - "name": "local_app", - "type": "STATIC" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/access-logs-json-file.latest.golden b/agent/xds/testdata/clusters/access-logs-json-file.latest.golden deleted file mode 100644 index 5a25e882ab312..0000000000000 --- a/agent/xds/testdata/clusters/access-logs-json-file.latest.golden +++ /dev/null @@ -1,127 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "circuitBreakers": {}, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/geo-cache-target" - }, - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc2/svc/geo-cache-target" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - }, - "name": "local_app", - "type": "STATIC" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/access-logs-text-stderr-disablelistenerlogs.latest.golden b/agent/xds/testdata/clusters/access-logs-text-stderr-disablelistenerlogs.latest.golden deleted file mode 100644 index 5a25e882ab312..0000000000000 --- a/agent/xds/testdata/clusters/access-logs-text-stderr-disablelistenerlogs.latest.golden +++ /dev/null @@ -1,127 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "circuitBreakers": {}, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/geo-cache-target" - }, - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc2/svc/geo-cache-target" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - }, - "name": "local_app", - "type": "STATIC" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/api-gateway-http-listener-with-http-route.latest.golden b/agent/xds/testdata/clusters/api-gateway-http-listener-with-http-route.latest.golden deleted file mode 100644 index a03e0e29fc3ab..0000000000000 --- a/agent/xds/testdata/clusters/api-gateway-http-listener-with-http-route.latest.golden +++ /dev/null @@ -1,55 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "http-service.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "http-service.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/http-service" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "http-service.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/api-gateway-http-listener.latest.golden b/agent/xds/testdata/clusters/api-gateway-http-listener.latest.golden deleted file mode 100644 index 04106b67f20ad..0000000000000 --- a/agent/xds/testdata/clusters/api-gateway-http-listener.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/api-gateway-nil-config-entry.latest.golden b/agent/xds/testdata/clusters/api-gateway-nil-config-entry.latest.golden deleted file mode 100644 index 04106b67f20ad..0000000000000 --- a/agent/xds/testdata/clusters/api-gateway-nil-config-entry.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/api-gateway-tcp-listener-with-tcp-and-http-route.latest.golden b/agent/xds/testdata/clusters/api-gateway-tcp-listener-with-tcp-and-http-route.latest.golden deleted file mode 100644 index 83c3cae4e875a..0000000000000 --- a/agent/xds/testdata/clusters/api-gateway-tcp-listener-with-tcp-and-http-route.latest.golden +++ /dev/null @@ -1,103 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "http-service.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "http-service.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/http-service" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "http-service.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "tcp-service.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "tcp-service.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/tcp-service" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "tcp-service.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/api-gateway-tcp-listener-with-tcp-route.latest.golden b/agent/xds/testdata/clusters/api-gateway-tcp-listener-with-tcp-route.latest.golden deleted file mode 100644 index c1a9d880f9144..0000000000000 --- a/agent/xds/testdata/clusters/api-gateway-tcp-listener-with-tcp-route.latest.golden +++ /dev/null @@ -1,55 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "tcp-service.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "tcp-service.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/tcp-service" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "tcp-service.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/api-gateway-tcp-listener.latest.golden b/agent/xds/testdata/clusters/api-gateway-tcp-listener.latest.golden deleted file mode 100644 index 04106b67f20ad..0000000000000 --- a/agent/xds/testdata/clusters/api-gateway-tcp-listener.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/api-gateway-with-multiple-hostnames.latest.golden b/agent/xds/testdata/clusters/api-gateway-with-multiple-hostnames.latest.golden deleted file mode 100644 index 216574da828df..0000000000000 --- a/agent/xds/testdata/clusters/api-gateway-with-multiple-hostnames.latest.golden +++ /dev/null @@ -1,103 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "backend.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "backend.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/backend" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "backend.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "frontend.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "frontend.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/frontend" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "frontend.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/api-gateway.latest.golden b/agent/xds/testdata/clusters/api-gateway.latest.golden deleted file mode 100644 index 04106b67f20ad..0000000000000 --- a/agent/xds/testdata/clusters/api-gateway.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/connect-proxy-resolver-with-lb.latest.golden b/agent/xds/testdata/clusters/connect-proxy-resolver-with-lb.latest.golden deleted file mode 100644 index ff832d784bcb0..0000000000000 --- a/agent/xds/testdata/clusters/connect-proxy-resolver-with-lb.latest.golden +++ /dev/null @@ -1,132 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "lbPolicy": "RING_HASH", - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "ringHashLbConfig": { - "maximumRingSize": "30", - "minimumRingSize": "20" - }, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "circuitBreakers": {}, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/geo-cache-target" - }, - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc2/svc/geo-cache-target" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - }, - "name": "local_app", - "type": "STATIC" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/connect-proxy-route-to-lb-resolver.latest.golden b/agent/xds/testdata/clusters/connect-proxy-route-to-lb-resolver.latest.golden deleted file mode 100644 index 4235b653fabfe..0000000000000 --- a/agent/xds/testdata/clusters/connect-proxy-route-to-lb-resolver.latest.golden +++ /dev/null @@ -1,180 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "circuitBreakers": {}, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/geo-cache-target" - }, - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc2/svc/geo-cache-target" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - }, - "name": "local_app", - "type": "STATIC" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "lbPolicy": "RING_HASH", - "name": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "ringHashLbConfig": { - "maximumRingSize": "30", - "minimumRingSize": "20" - }, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/web" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/connect-proxy-splitter-overweight.latest.golden b/agent/xds/testdata/clusters/connect-proxy-splitter-overweight.latest.golden deleted file mode 100644 index 4f4e0d2144af1..0000000000000 --- a/agent/xds/testdata/clusters/connect-proxy-splitter-overweight.latest.golden +++ /dev/null @@ -1,223 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "big-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "big-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/big-side" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "big-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "circuitBreakers": {}, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/geo-cache-target" - }, - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc2/svc/geo-cache-target" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "goldilocks-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "goldilocks-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/goldilocks-side" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "goldilocks-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "lil-bit-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "lil-bit-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/lil-bit-side" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "lil-bit-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - }, - "name": "local_app", - "type": "STATIC" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/connect-proxy-upstream-defaults.latest.golden b/agent/xds/testdata/clusters/connect-proxy-upstream-defaults.latest.golden deleted file mode 100644 index 5a25e882ab312..0000000000000 --- a/agent/xds/testdata/clusters/connect-proxy-upstream-defaults.latest.golden +++ /dev/null @@ -1,127 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "circuitBreakers": {}, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/geo-cache-target" - }, - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc2/svc/geo-cache-target" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - }, - "name": "local_app", - "type": "STATIC" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/connect-proxy-with-chain-and-router.latest.golden b/agent/xds/testdata/clusters/connect-proxy-with-chain-and-router.latest.golden deleted file mode 100644 index 013e86137f282..0000000000000 --- a/agent/xds/testdata/clusters/connect-proxy-with-chain-and-router.latest.golden +++ /dev/null @@ -1,1519 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "big-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "big-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/big-side" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "big-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "33s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "empty-match-1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "empty-match-1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/empty-match-1" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "empty-match-1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "empty-match-2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "empty-match-2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/empty-match-2" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "empty-match-2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/exact" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "circuitBreakers": {}, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/geo-cache-target" - }, - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc2/svc/geo-cache-target" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "goldilocks-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "goldilocks-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/goldilocks-side" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "goldilocks-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "hdr-exact-with-method.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "hdr-exact-with-method.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/hdr-exact-with-method" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "hdr-exact-with-method.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "hdr-exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "hdr-exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/hdr-exact" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "hdr-exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "hdr-not-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "hdr-not-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/hdr-not-present" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "hdr-not-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "hdr-prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "hdr-prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/hdr-prefix" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "hdr-prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "hdr-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "hdr-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/hdr-present" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "hdr-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "hdr-regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "hdr-regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/hdr-regex" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "hdr-regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "hdr-suffix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "hdr-suffix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/hdr-suffix" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "hdr-suffix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "header-manip.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "header-manip.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/header-manip" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "header-manip.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "idle-timeout.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "idle-timeout.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/idle-timeout" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "idle-timeout.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "just-methods.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "just-methods.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/just-methods" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "just-methods.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "lil-bit-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "lil-bit-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/lil-bit-side" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "lil-bit-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - }, - "name": "local_app", - "type": "STATIC" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "nil-match.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "nil-match.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/nil-match" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "nil-match.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "prefix-rewrite-1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "prefix-rewrite-1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/prefix-rewrite-1" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "prefix-rewrite-1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "prefix-rewrite-2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "prefix-rewrite-2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/prefix-rewrite-2" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "prefix-rewrite-2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/prefix" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "prm-exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "prm-exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/prm-exact" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "prm-exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "prm-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "prm-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/prm-present" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "prm-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "prm-regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "prm-regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/prm-regex" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "prm-regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/regex" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "req-timeout.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "req-timeout.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/req-timeout" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "req-timeout.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "retry-all.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "retry-all.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/retry-all" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "retry-all.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "retry-codes.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "retry-codes.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/retry-codes" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "retry-codes.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "retry-connect.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "retry-connect.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/retry-connect" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "retry-connect.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "retry-reset.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "retry-reset.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/retry-reset" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "retry-reset.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/connect-proxy-with-chain-and-splitter.latest.golden b/agent/xds/testdata/clusters/connect-proxy-with-chain-and-splitter.latest.golden deleted file mode 100644 index 4f4e0d2144af1..0000000000000 --- a/agent/xds/testdata/clusters/connect-proxy-with-chain-and-splitter.latest.golden +++ /dev/null @@ -1,223 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "big-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "big-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/big-side" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "big-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "circuitBreakers": {}, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/geo-cache-target" - }, - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc2/svc/geo-cache-target" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "goldilocks-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "goldilocks-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/goldilocks-side" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "goldilocks-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "lil-bit-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "lil-bit-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/lil-bit-side" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "lil-bit-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - }, - "name": "local_app", - "type": "STATIC" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/connect-proxy-with-default-chain-and-custom-cluster.latest.golden b/agent/xds/testdata/clusters/connect-proxy-with-default-chain-and-custom-cluster.latest.golden deleted file mode 100644 index 8ec7314419f19..0000000000000 --- a/agent/xds/testdata/clusters/connect-proxy-with-default-chain-and-custom-cluster.latest.golden +++ /dev/null @@ -1,133 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "circuitBreakers": {}, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/geo-cache-target" - }, - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc2/svc/geo-cache-target" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - }, - "name": "local_app", - "type": "STATIC" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "15s", - "loadAssignment": { - "clusterName": "myservice", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - }, - "name": "myservice", - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/connect-proxy-with-grpc-chain.latest.golden b/agent/xds/testdata/clusters/connect-proxy-with-grpc-chain.latest.golden deleted file mode 100644 index f03d8c0ffcc9a..0000000000000 --- a/agent/xds/testdata/clusters/connect-proxy-with-grpc-chain.latest.golden +++ /dev/null @@ -1,135 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "33s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS", - "typedExtensionProtocolOptions": { - "envoy.extensions.upstreams.http.v3.HttpProtocolOptions": { - "@type": "type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions", - "explicitHttpConfig": { - "http2ProtocolOptions": {} - } - } - } - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "circuitBreakers": {}, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/geo-cache-target" - }, - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc2/svc/geo-cache-target" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - }, - "name": "local_app", - "type": "STATIC" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/connect-proxy-with-grpc-router.latest.golden b/agent/xds/testdata/clusters/connect-proxy-with-grpc-router.latest.golden deleted file mode 100644 index a594d0b7cee3f..0000000000000 --- a/agent/xds/testdata/clusters/connect-proxy-with-grpc-router.latest.golden +++ /dev/null @@ -1,191 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "33s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS", - "typedExtensionProtocolOptions": { - "envoy.extensions.upstreams.http.v3.HttpProtocolOptions": { - "@type": "type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions", - "explicitHttpConfig": { - "http2ProtocolOptions": {} - } - } - } - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "circuitBreakers": {}, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/geo-cache-target" - }, - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc2/svc/geo-cache-target" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - }, - "name": "local_app", - "type": "STATIC" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/prefix" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS", - "typedExtensionProtocolOptions": { - "envoy.extensions.upstreams.http.v3.HttpProtocolOptions": { - "@type": "type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions", - "explicitHttpConfig": { - "http2ProtocolOptions": {} - } - } - } - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/connect-proxy-with-http-chain.latest.golden b/agent/xds/testdata/clusters/connect-proxy-with-http-chain.latest.golden deleted file mode 100644 index 69904e61ca163..0000000000000 --- a/agent/xds/testdata/clusters/connect-proxy-with-http-chain.latest.golden +++ /dev/null @@ -1,127 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "33s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "circuitBreakers": {}, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/geo-cache-target" - }, - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc2/svc/geo-cache-target" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - }, - "name": "local_app", - "type": "STATIC" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/connect-proxy-with-http2-chain.latest.golden b/agent/xds/testdata/clusters/connect-proxy-with-http2-chain.latest.golden deleted file mode 100644 index f03d8c0ffcc9a..0000000000000 --- a/agent/xds/testdata/clusters/connect-proxy-with-http2-chain.latest.golden +++ /dev/null @@ -1,135 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "33s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS", - "typedExtensionProtocolOptions": { - "envoy.extensions.upstreams.http.v3.HttpProtocolOptions": { - "@type": "type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions", - "explicitHttpConfig": { - "http2ProtocolOptions": {} - } - } - } - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "circuitBreakers": {}, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/geo-cache-target" - }, - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc2/svc/geo-cache-target" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - }, - "name": "local_app", - "type": "STATIC" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain.latest.golden b/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain.latest.golden deleted file mode 100644 index 69904e61ca163..0000000000000 --- a/agent/xds/testdata/clusters/connect-proxy-with-tcp-chain.latest.golden +++ /dev/null @@ -1,127 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "33s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "circuitBreakers": {}, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/geo-cache-target" - }, - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc2/svc/geo-cache-target" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - }, - "name": "local_app", - "type": "STATIC" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/connect-proxy-with-tls-incoming-cipher-suites.latest.golden b/agent/xds/testdata/clusters/connect-proxy-with-tls-incoming-cipher-suites.latest.golden deleted file mode 100644 index 5a25e882ab312..0000000000000 --- a/agent/xds/testdata/clusters/connect-proxy-with-tls-incoming-cipher-suites.latest.golden +++ /dev/null @@ -1,127 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "circuitBreakers": {}, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/geo-cache-target" - }, - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc2/svc/geo-cache-target" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - }, - "name": "local_app", - "type": "STATIC" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/connect-proxy-with-tls-incoming-max-version.latest.golden b/agent/xds/testdata/clusters/connect-proxy-with-tls-incoming-max-version.latest.golden deleted file mode 100644 index 5a25e882ab312..0000000000000 --- a/agent/xds/testdata/clusters/connect-proxy-with-tls-incoming-max-version.latest.golden +++ /dev/null @@ -1,127 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "circuitBreakers": {}, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/geo-cache-target" - }, - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc2/svc/geo-cache-target" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - }, - "name": "local_app", - "type": "STATIC" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/connect-proxy-with-tls-incoming-min-version.latest.golden b/agent/xds/testdata/clusters/connect-proxy-with-tls-incoming-min-version.latest.golden deleted file mode 100644 index 5a25e882ab312..0000000000000 --- a/agent/xds/testdata/clusters/connect-proxy-with-tls-incoming-min-version.latest.golden +++ /dev/null @@ -1,127 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "circuitBreakers": {}, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/geo-cache-target" - }, - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc2/svc/geo-cache-target" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - }, - "name": "local_app", - "type": "STATIC" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/connect-proxy-with-tproxy-and-permissive-mtls.latest.golden b/agent/xds/testdata/clusters/connect-proxy-with-tproxy-and-permissive-mtls.latest.golden deleted file mode 100644 index c8d1eb2d356d3..0000000000000 --- a/agent/xds/testdata/clusters/connect-proxy-with-tproxy-and-permissive-mtls.latest.golden +++ /dev/null @@ -1,134 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "circuitBreakers": {}, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/geo-cache-target" - }, - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc2/svc/geo-cache-target" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - }, - "name": "local_app", - "type": "STATIC" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "lbPolicy": "CLUSTER_PROVIDED", - "name": "original-destination", - "type": "ORIGINAL_DST" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/connect-proxy-without-tproxy-and-permissive-mtls.latest.golden b/agent/xds/testdata/clusters/connect-proxy-without-tproxy-and-permissive-mtls.latest.golden deleted file mode 100644 index 5a25e882ab312..0000000000000 --- a/agent/xds/testdata/clusters/connect-proxy-without-tproxy-and-permissive-mtls.latest.golden +++ /dev/null @@ -1,127 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "circuitBreakers": {}, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/geo-cache-target" - }, - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc2/svc/geo-cache-target" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - }, - "name": "local_app", - "type": "STATIC" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/custom-public-listener-http-2.latest.golden b/agent/xds/testdata/clusters/custom-public-listener-http-2.latest.golden deleted file mode 100644 index 5a25e882ab312..0000000000000 --- a/agent/xds/testdata/clusters/custom-public-listener-http-2.latest.golden +++ /dev/null @@ -1,127 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "circuitBreakers": {}, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/geo-cache-target" - }, - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc2/svc/geo-cache-target" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - }, - "name": "local_app", - "type": "STATIC" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/custom-public-listener-http-missing.latest.golden b/agent/xds/testdata/clusters/custom-public-listener-http-missing.latest.golden deleted file mode 100644 index 5a25e882ab312..0000000000000 --- a/agent/xds/testdata/clusters/custom-public-listener-http-missing.latest.golden +++ /dev/null @@ -1,127 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "circuitBreakers": {}, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/geo-cache-target" - }, - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc2/svc/geo-cache-target" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - }, - "name": "local_app", - "type": "STATIC" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/custom-public-listener-http.latest.golden b/agent/xds/testdata/clusters/custom-public-listener-http.latest.golden deleted file mode 100644 index 5a25e882ab312..0000000000000 --- a/agent/xds/testdata/clusters/custom-public-listener-http.latest.golden +++ /dev/null @@ -1,127 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "circuitBreakers": {}, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/geo-cache-target" - }, - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc2/svc/geo-cache-target" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - }, - "name": "local_app", - "type": "STATIC" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/custom-public-listener.latest.golden b/agent/xds/testdata/clusters/custom-public-listener.latest.golden deleted file mode 100644 index 5a25e882ab312..0000000000000 --- a/agent/xds/testdata/clusters/custom-public-listener.latest.golden +++ /dev/null @@ -1,127 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "circuitBreakers": {}, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/geo-cache-target" - }, - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc2/svc/geo-cache-target" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - }, - "name": "local_app", - "type": "STATIC" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/custom-trace-listener.latest.golden b/agent/xds/testdata/clusters/custom-trace-listener.latest.golden deleted file mode 100644 index 5a25e882ab312..0000000000000 --- a/agent/xds/testdata/clusters/custom-trace-listener.latest.golden +++ /dev/null @@ -1,127 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "circuitBreakers": {}, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/geo-cache-target" - }, - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc2/svc/geo-cache-target" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - }, - "name": "local_app", - "type": "STATIC" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/custom-upstream-ignored-with-disco-chain.latest.golden b/agent/xds/testdata/clusters/custom-upstream-ignored-with-disco-chain.latest.golden deleted file mode 100644 index a6c7b69749e67..0000000000000 --- a/agent/xds/testdata/clusters/custom-upstream-ignored-with-disco-chain.latest.golden +++ /dev/null @@ -1,192 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "clusterType": { - "name": "envoy.clusters.aggregate", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.clusters.aggregate.v3.ClusterConfig", - "clusters": [ - "failover-target~0~db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "failover-target~1~db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - ] - } - }, - "connectTimeout": "33s", - "lbPolicy": "CLUSTER_PROVIDED", - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "failover-target~0~db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "33s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "failover-target~0~db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "failover-target~1~db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "33s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "failover-target~1~db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/fail" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "fail.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "circuitBreakers": {}, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/geo-cache-target" - }, - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc2/svc/geo-cache-target" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - }, - "name": "local_app", - "type": "STATIC" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/expose-checks-grpc.latest.golden b/agent/xds/testdata/clusters/expose-checks-grpc.latest.golden deleted file mode 100644 index 0c94321dbb68b..0000000000000 --- a/agent/xds/testdata/clusters/expose-checks-grpc.latest.golden +++ /dev/null @@ -1,65 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "exposed_cluster_9090", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9090 - } - } - } - } - ] - } - ] - }, - "name": "exposed_cluster_9090", - "type": "STATIC", - "typedExtensionProtocolOptions": { - "envoy.extensions.upstreams.http.v3.HttpProtocolOptions": { - "@type": "type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions", - "explicitHttpConfig": { - "http2ProtocolOptions": {} - } - } - } - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - }, - "name": "local_app", - "type": "STATIC" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/expose-checks-http-with-bind-override.latest.golden b/agent/xds/testdata/clusters/expose-checks-http-with-bind-override.latest.golden deleted file mode 100644 index 59d8b46b80e29..0000000000000 --- a/agent/xds/testdata/clusters/expose-checks-http-with-bind-override.latest.golden +++ /dev/null @@ -1,57 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "exposed_cluster_8181", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8181 - } - } - } - } - ] - } - ] - }, - "name": "exposed_cluster_8181", - "type": "STATIC" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - }, - "name": "local_app", - "type": "STATIC" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/expose-checks-http.latest.golden b/agent/xds/testdata/clusters/expose-checks-http.latest.golden deleted file mode 100644 index 59d8b46b80e29..0000000000000 --- a/agent/xds/testdata/clusters/expose-checks-http.latest.golden +++ /dev/null @@ -1,57 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "exposed_cluster_8181", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8181 - } - } - } - } - ] - } - ] - }, - "name": "exposed_cluster_8181", - "type": "STATIC" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - }, - "name": "local_app", - "type": "STATIC" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/grpc-public-listener.latest.golden b/agent/xds/testdata/clusters/grpc-public-listener.latest.golden deleted file mode 100644 index a5bb1cfdea55f..0000000000000 --- a/agent/xds/testdata/clusters/grpc-public-listener.latest.golden +++ /dev/null @@ -1,136 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "circuitBreakers": {}, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/geo-cache-target" - }, - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc2/svc/geo-cache-target" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - }, - "name": "local_app", - "type": "STATIC", - "typedExtensionProtocolOptions": { - "envoy.extensions.upstreams.http.v3.HttpProtocolOptions": { - "@type": "type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions", - "useDownstreamProtocolConfig": { - "http2ProtocolOptions": {}, - "httpProtocolOptions": {} - } - } - } - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/http-listener-with-timeouts.latest.golden b/agent/xds/testdata/clusters/http-listener-with-timeouts.latest.golden deleted file mode 100644 index 688adfb4c5698..0000000000000 --- a/agent/xds/testdata/clusters/http-listener-with-timeouts.latest.golden +++ /dev/null @@ -1,127 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "circuitBreakers": {}, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/geo-cache-target" - }, - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc2/svc/geo-cache-target" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "1.234s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - }, - "name": "local_app", - "type": "STATIC" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/http-public-listener-no-xfcc.latest.golden b/agent/xds/testdata/clusters/http-public-listener-no-xfcc.latest.golden deleted file mode 100644 index 5a25e882ab312..0000000000000 --- a/agent/xds/testdata/clusters/http-public-listener-no-xfcc.latest.golden +++ /dev/null @@ -1,127 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "circuitBreakers": {}, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/geo-cache-target" - }, - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc2/svc/geo-cache-target" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - }, - "name": "local_app", - "type": "STATIC" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/http-public-listener.latest.golden b/agent/xds/testdata/clusters/http-public-listener.latest.golden deleted file mode 100644 index 5a25e882ab312..0000000000000 --- a/agent/xds/testdata/clusters/http-public-listener.latest.golden +++ /dev/null @@ -1,127 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "circuitBreakers": {}, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/geo-cache-target" - }, - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc2/svc/geo-cache-target" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - }, - "name": "local_app", - "type": "STATIC" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/http-upstream.latest.golden b/agent/xds/testdata/clusters/http-upstream.latest.golden deleted file mode 100644 index 5a25e882ab312..0000000000000 --- a/agent/xds/testdata/clusters/http-upstream.latest.golden +++ /dev/null @@ -1,127 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "circuitBreakers": {}, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/geo-cache-target" - }, - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc2/svc/geo-cache-target" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - }, - "name": "local_app", - "type": "STATIC" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/http2-public-listener.latest.golden b/agent/xds/testdata/clusters/http2-public-listener.latest.golden deleted file mode 100644 index a5bb1cfdea55f..0000000000000 --- a/agent/xds/testdata/clusters/http2-public-listener.latest.golden +++ /dev/null @@ -1,136 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "circuitBreakers": {}, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/geo-cache-target" - }, - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc2/svc/geo-cache-target" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - }, - "name": "local_app", - "type": "STATIC", - "typedExtensionProtocolOptions": { - "envoy.extensions.upstreams.http.v3.HttpProtocolOptions": { - "@type": "type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions", - "useDownstreamProtocolConfig": { - "http2ProtocolOptions": {}, - "httpProtocolOptions": {} - } - } - } - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/ingress-config-entry-nil.latest.golden b/agent/xds/testdata/clusters/ingress-config-entry-nil.latest.golden deleted file mode 100644 index 04106b67f20ad..0000000000000 --- a/agent/xds/testdata/clusters/ingress-config-entry-nil.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/ingress-defaults-no-chain.latest.golden b/agent/xds/testdata/clusters/ingress-defaults-no-chain.latest.golden deleted file mode 100644 index 04106b67f20ad..0000000000000 --- a/agent/xds/testdata/clusters/ingress-defaults-no-chain.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/ingress-gateway-bind-addrs.latest.golden b/agent/xds/testdata/clusters/ingress-gateway-bind-addrs.latest.golden deleted file mode 100644 index 699ed14e9cc25..0000000000000 --- a/agent/xds/testdata/clusters/ingress-gateway-bind-addrs.latest.golden +++ /dev/null @@ -1,55 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/ingress-grpc-multiple-services.latest.golden b/agent/xds/testdata/clusters/ingress-grpc-multiple-services.latest.golden deleted file mode 100644 index 6fad08d9c3b2f..0000000000000 --- a/agent/xds/testdata/clusters/ingress-grpc-multiple-services.latest.golden +++ /dev/null @@ -1,119 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "22s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/bar" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS", - "typedExtensionProtocolOptions": { - "envoy.extensions.upstreams.http.v3.HttpProtocolOptions": { - "@type": "type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions", - "explicitHttpConfig": { - "http2ProtocolOptions": {} - } - } - } - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "22s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/foo" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS", - "typedExtensionProtocolOptions": { - "envoy.extensions.upstreams.http.v3.HttpProtocolOptions": { - "@type": "type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions", - "explicitHttpConfig": { - "http2ProtocolOptions": {} - } - } - } - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/ingress-http-multiple-services.latest.golden b/agent/xds/testdata/clusters/ingress-http-multiple-services.latest.golden deleted file mode 100644 index f4ba7f1802db1..0000000000000 --- a/agent/xds/testdata/clusters/ingress-http-multiple-services.latest.golden +++ /dev/null @@ -1,199 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "22s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/bar" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "baz.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "baz.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/baz" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "baz.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "22s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/foo" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "qux.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "qux.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/qux" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "qux.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/ingress-with-chain-and-router-header-manip.latest.golden b/agent/xds/testdata/clusters/ingress-with-chain-and-router-header-manip.latest.golden deleted file mode 100644 index 284cbeb37ce6b..0000000000000 --- a/agent/xds/testdata/clusters/ingress-with-chain-and-router-header-manip.latest.golden +++ /dev/null @@ -1,1447 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "big-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "big-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/big-side" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "big-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "33s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "empty-match-1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "empty-match-1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/empty-match-1" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "empty-match-1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "empty-match-2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "empty-match-2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/empty-match-2" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "empty-match-2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/exact" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "goldilocks-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "goldilocks-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/goldilocks-side" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "goldilocks-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "hdr-exact-with-method.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "hdr-exact-with-method.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/hdr-exact-with-method" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "hdr-exact-with-method.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "hdr-exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "hdr-exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/hdr-exact" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "hdr-exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "hdr-not-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "hdr-not-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/hdr-not-present" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "hdr-not-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "hdr-prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "hdr-prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/hdr-prefix" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "hdr-prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "hdr-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "hdr-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/hdr-present" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "hdr-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "hdr-regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "hdr-regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/hdr-regex" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "hdr-regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "hdr-suffix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "hdr-suffix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/hdr-suffix" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "hdr-suffix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "header-manip.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "header-manip.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/header-manip" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "header-manip.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "idle-timeout.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "idle-timeout.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/idle-timeout" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "idle-timeout.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "just-methods.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "just-methods.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/just-methods" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "just-methods.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "lil-bit-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "lil-bit-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/lil-bit-side" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "lil-bit-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "nil-match.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "nil-match.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/nil-match" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "nil-match.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "prefix-rewrite-1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "prefix-rewrite-1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/prefix-rewrite-1" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "prefix-rewrite-1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "prefix-rewrite-2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "prefix-rewrite-2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/prefix-rewrite-2" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "prefix-rewrite-2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/prefix" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "prm-exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "prm-exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/prm-exact" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "prm-exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "prm-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "prm-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/prm-present" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "prm-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "prm-regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "prm-regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/prm-regex" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "prm-regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/regex" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "req-timeout.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "req-timeout.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/req-timeout" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "req-timeout.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "retry-all.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "retry-all.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/retry-all" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "retry-all.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "retry-codes.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "retry-codes.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/retry-codes" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "retry-codes.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "retry-connect.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "retry-connect.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/retry-connect" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "retry-connect.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "retry-reset.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "retry-reset.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/retry-reset" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "retry-reset.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/ingress-with-chain-and-router.latest.golden b/agent/xds/testdata/clusters/ingress-with-chain-and-router.latest.golden deleted file mode 100644 index 284cbeb37ce6b..0000000000000 --- a/agent/xds/testdata/clusters/ingress-with-chain-and-router.latest.golden +++ /dev/null @@ -1,1447 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "big-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "big-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/big-side" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "big-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "33s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "empty-match-1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "empty-match-1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/empty-match-1" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "empty-match-1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "empty-match-2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "empty-match-2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/empty-match-2" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "empty-match-2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/exact" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "goldilocks-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "goldilocks-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/goldilocks-side" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "goldilocks-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "hdr-exact-with-method.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "hdr-exact-with-method.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/hdr-exact-with-method" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "hdr-exact-with-method.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "hdr-exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "hdr-exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/hdr-exact" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "hdr-exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "hdr-not-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "hdr-not-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/hdr-not-present" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "hdr-not-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "hdr-prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "hdr-prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/hdr-prefix" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "hdr-prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "hdr-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "hdr-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/hdr-present" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "hdr-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "hdr-regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "hdr-regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/hdr-regex" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "hdr-regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "hdr-suffix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "hdr-suffix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/hdr-suffix" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "hdr-suffix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "header-manip.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "header-manip.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/header-manip" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "header-manip.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "idle-timeout.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "idle-timeout.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/idle-timeout" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "idle-timeout.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "just-methods.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "just-methods.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/just-methods" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "just-methods.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "lil-bit-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "lil-bit-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/lil-bit-side" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "lil-bit-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "nil-match.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "nil-match.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/nil-match" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "nil-match.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "prefix-rewrite-1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "prefix-rewrite-1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/prefix-rewrite-1" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "prefix-rewrite-1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "prefix-rewrite-2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "prefix-rewrite-2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/prefix-rewrite-2" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "prefix-rewrite-2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/prefix" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "prm-exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "prm-exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/prm-exact" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "prm-exact.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "prm-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "prm-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/prm-present" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "prm-present.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "prm-regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "prm-regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/prm-regex" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "prm-regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/regex" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "regex.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "req-timeout.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "req-timeout.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/req-timeout" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "req-timeout.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "retry-all.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "retry-all.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/retry-all" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "retry-all.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "retry-codes.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "retry-codes.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/retry-codes" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "retry-codes.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "retry-connect.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "retry-connect.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/retry-connect" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "retry-connect.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "retry-reset.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "retry-reset.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/retry-reset" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "retry-reset.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/ingress-with-chain-and-splitter.latest.golden b/agent/xds/testdata/clusters/ingress-with-chain-and-splitter.latest.golden deleted file mode 100644 index 22df1ec44b2ef..0000000000000 --- a/agent/xds/testdata/clusters/ingress-with-chain-and-splitter.latest.golden +++ /dev/null @@ -1,151 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "big-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "big-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/big-side" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "big-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "goldilocks-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "goldilocks-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/goldilocks-side" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "goldilocks-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "lil-bit-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "lil-bit-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/lil-bit-side" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "lil-bit-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/ingress-with-grpc-router.latest.golden b/agent/xds/testdata/clusters/ingress-with-grpc-router.latest.golden deleted file mode 100644 index 110fab806ef8c..0000000000000 --- a/agent/xds/testdata/clusters/ingress-with-grpc-router.latest.golden +++ /dev/null @@ -1,103 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "33s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/prefix" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "prefix.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/ingress-with-grpc-single-tls-listener.latest.golden b/agent/xds/testdata/clusters/ingress-with-grpc-single-tls-listener.latest.golden deleted file mode 100644 index f1a8500c6c5b1..0000000000000 --- a/agent/xds/testdata/clusters/ingress-with-grpc-single-tls-listener.latest.golden +++ /dev/null @@ -1,119 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/s1" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS", - "typedExtensionProtocolOptions": { - "envoy.extensions.upstreams.http.v3.HttpProtocolOptions": { - "@type": "type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions", - "explicitHttpConfig": { - "http2ProtocolOptions": {} - } - } - } - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/s2" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS", - "typedExtensionProtocolOptions": { - "envoy.extensions.upstreams.http.v3.HttpProtocolOptions": { - "@type": "type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions", - "explicitHttpConfig": { - "http2ProtocolOptions": {} - } - } - } - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/ingress-with-http2-and-grpc-multiple-tls-listener.latest.golden b/agent/xds/testdata/clusters/ingress-with-http2-and-grpc-multiple-tls-listener.latest.golden deleted file mode 100644 index f1a8500c6c5b1..0000000000000 --- a/agent/xds/testdata/clusters/ingress-with-http2-and-grpc-multiple-tls-listener.latest.golden +++ /dev/null @@ -1,119 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/s1" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS", - "typedExtensionProtocolOptions": { - "envoy.extensions.upstreams.http.v3.HttpProtocolOptions": { - "@type": "type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions", - "explicitHttpConfig": { - "http2ProtocolOptions": {} - } - } - } - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/s2" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS", - "typedExtensionProtocolOptions": { - "envoy.extensions.upstreams.http.v3.HttpProtocolOptions": { - "@type": "type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions", - "explicitHttpConfig": { - "http2ProtocolOptions": {} - } - } - } - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/ingress-with-http2-single-tls-listener.latest.golden b/agent/xds/testdata/clusters/ingress-with-http2-single-tls-listener.latest.golden deleted file mode 100644 index f1a8500c6c5b1..0000000000000 --- a/agent/xds/testdata/clusters/ingress-with-http2-single-tls-listener.latest.golden +++ /dev/null @@ -1,119 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/s1" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS", - "typedExtensionProtocolOptions": { - "envoy.extensions.upstreams.http.v3.HttpProtocolOptions": { - "@type": "type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions", - "explicitHttpConfig": { - "http2ProtocolOptions": {} - } - } - } - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/s2" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS", - "typedExtensionProtocolOptions": { - "envoy.extensions.upstreams.http.v3.HttpProtocolOptions": { - "@type": "type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions", - "explicitHttpConfig": { - "http2ProtocolOptions": {} - } - } - } - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/ingress-with-sds-listener+service-level.latest.golden b/agent/xds/testdata/clusters/ingress-with-sds-listener+service-level.latest.golden deleted file mode 100644 index 8a9c954b9709f..0000000000000 --- a/agent/xds/testdata/clusters/ingress-with-sds-listener+service-level.latest.golden +++ /dev/null @@ -1,103 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/s1" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/s2" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/ingress-with-sds-listener-gw-level-http.latest.golden b/agent/xds/testdata/clusters/ingress-with-sds-listener-gw-level-http.latest.golden deleted file mode 100644 index 64347312f9384..0000000000000 --- a/agent/xds/testdata/clusters/ingress-with-sds-listener-gw-level-http.latest.golden +++ /dev/null @@ -1,55 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "http.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "http.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/http" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "http.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/ingress-with-sds-listener-gw-level-mixed-tls.latest.golden b/agent/xds/testdata/clusters/ingress-with-sds-listener-gw-level-mixed-tls.latest.golden deleted file mode 100644 index d168b6488e653..0000000000000 --- a/agent/xds/testdata/clusters/ingress-with-sds-listener-gw-level-mixed-tls.latest.golden +++ /dev/null @@ -1,103 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "insecure.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "insecure.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/insecure" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "insecure.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "secure.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "secure.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/secure" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "secure.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/ingress-with-sds-listener-gw-level.latest.golden b/agent/xds/testdata/clusters/ingress-with-sds-listener-gw-level.latest.golden deleted file mode 100644 index 699ed14e9cc25..0000000000000 --- a/agent/xds/testdata/clusters/ingress-with-sds-listener-gw-level.latest.golden +++ /dev/null @@ -1,55 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/ingress-with-sds-listener-level-wildcard.latest.golden b/agent/xds/testdata/clusters/ingress-with-sds-listener-level-wildcard.latest.golden deleted file mode 100644 index d8aee80140849..0000000000000 --- a/agent/xds/testdata/clusters/ingress-with-sds-listener-level-wildcard.latest.golden +++ /dev/null @@ -1,103 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "22s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/foo" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "22s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/web" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/ingress-with-sds-listener-level.latest.golden b/agent/xds/testdata/clusters/ingress-with-sds-listener-level.latest.golden deleted file mode 100644 index d8aee80140849..0000000000000 --- a/agent/xds/testdata/clusters/ingress-with-sds-listener-level.latest.golden +++ /dev/null @@ -1,103 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "22s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/foo" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "22s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/web" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/ingress-with-sds-listener-listener-level.latest.golden b/agent/xds/testdata/clusters/ingress-with-sds-listener-listener-level.latest.golden deleted file mode 100644 index 699ed14e9cc25..0000000000000 --- a/agent/xds/testdata/clusters/ingress-with-sds-listener-listener-level.latest.golden +++ /dev/null @@ -1,55 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/ingress-with-sds-service-level-2.latest.golden b/agent/xds/testdata/clusters/ingress-with-sds-service-level-2.latest.golden deleted file mode 100644 index d8aee80140849..0000000000000 --- a/agent/xds/testdata/clusters/ingress-with-sds-service-level-2.latest.golden +++ /dev/null @@ -1,103 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "22s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/foo" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "22s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/web" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/ingress-with-sds-service-level-mixed-no-tls.latest.golden b/agent/xds/testdata/clusters/ingress-with-sds-service-level-mixed-no-tls.latest.golden deleted file mode 100644 index 8a9c954b9709f..0000000000000 --- a/agent/xds/testdata/clusters/ingress-with-sds-service-level-mixed-no-tls.latest.golden +++ /dev/null @@ -1,103 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/s1" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/s2" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/ingress-with-sds-service-level-mixed-tls.latest.golden b/agent/xds/testdata/clusters/ingress-with-sds-service-level-mixed-tls.latest.golden deleted file mode 100644 index d8aee80140849..0000000000000 --- a/agent/xds/testdata/clusters/ingress-with-sds-service-level-mixed-tls.latest.golden +++ /dev/null @@ -1,103 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "22s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/foo" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "22s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/web" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/ingress-with-sds-service-level.latest.golden b/agent/xds/testdata/clusters/ingress-with-sds-service-level.latest.golden deleted file mode 100644 index 8a9c954b9709f..0000000000000 --- a/agent/xds/testdata/clusters/ingress-with-sds-service-level.latest.golden +++ /dev/null @@ -1,103 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/s1" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/s2" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/ingress-with-single-tls-listener.latest.golden b/agent/xds/testdata/clusters/ingress-with-single-tls-listener.latest.golden deleted file mode 100644 index 8a9c954b9709f..0000000000000 --- a/agent/xds/testdata/clusters/ingress-with-single-tls-listener.latest.golden +++ /dev/null @@ -1,103 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/s1" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/s2" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/ingress-with-tls-listener-cipher-suites.latest.golden b/agent/xds/testdata/clusters/ingress-with-tls-listener-cipher-suites.latest.golden deleted file mode 100644 index 699ed14e9cc25..0000000000000 --- a/agent/xds/testdata/clusters/ingress-with-tls-listener-cipher-suites.latest.golden +++ /dev/null @@ -1,55 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/ingress-with-tls-listener-max-version.latest.golden b/agent/xds/testdata/clusters/ingress-with-tls-listener-max-version.latest.golden deleted file mode 100644 index 699ed14e9cc25..0000000000000 --- a/agent/xds/testdata/clusters/ingress-with-tls-listener-max-version.latest.golden +++ /dev/null @@ -1,55 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/ingress-with-tls-listener-min-version.latest.golden b/agent/xds/testdata/clusters/ingress-with-tls-listener-min-version.latest.golden deleted file mode 100644 index 699ed14e9cc25..0000000000000 --- a/agent/xds/testdata/clusters/ingress-with-tls-listener-min-version.latest.golden +++ /dev/null @@ -1,55 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/ingress-with-tls-listener.latest.golden b/agent/xds/testdata/clusters/ingress-with-tls-listener.latest.golden deleted file mode 100644 index 699ed14e9cc25..0000000000000 --- a/agent/xds/testdata/clusters/ingress-with-tls-listener.latest.golden +++ /dev/null @@ -1,55 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/ingress-with-tls-min-version-listeners-gateway-defaults.latest.golden b/agent/xds/testdata/clusters/ingress-with-tls-min-version-listeners-gateway-defaults.latest.golden deleted file mode 100644 index e911eee75ce88..0000000000000 --- a/agent/xds/testdata/clusters/ingress-with-tls-min-version-listeners-gateway-defaults.latest.golden +++ /dev/null @@ -1,199 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/s1" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/s2" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "s3.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "s3.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/s3" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "s3.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "s4.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "s4.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/s4" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "s4.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/ingress-with-tls-mixed-cipher-suites-listeners.latest.golden b/agent/xds/testdata/clusters/ingress-with-tls-mixed-cipher-suites-listeners.latest.golden deleted file mode 100644 index 8a9c954b9709f..0000000000000 --- a/agent/xds/testdata/clusters/ingress-with-tls-mixed-cipher-suites-listeners.latest.golden +++ /dev/null @@ -1,103 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/s1" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/s2" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/ingress-with-tls-mixed-listeners.latest.golden b/agent/xds/testdata/clusters/ingress-with-tls-mixed-listeners.latest.golden deleted file mode 100644 index 8a9c954b9709f..0000000000000 --- a/agent/xds/testdata/clusters/ingress-with-tls-mixed-listeners.latest.golden +++ /dev/null @@ -1,103 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/s1" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/s2" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/ingress-with-tls-mixed-max-version-listeners.latest.golden b/agent/xds/testdata/clusters/ingress-with-tls-mixed-max-version-listeners.latest.golden deleted file mode 100644 index 4773f59818994..0000000000000 --- a/agent/xds/testdata/clusters/ingress-with-tls-mixed-max-version-listeners.latest.golden +++ /dev/null @@ -1,151 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/s1" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/s2" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "s3.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "s3.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/s3" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "s3.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/ingress-with-tls-mixed-min-version-listeners.latest.golden b/agent/xds/testdata/clusters/ingress-with-tls-mixed-min-version-listeners.latest.golden deleted file mode 100644 index 4773f59818994..0000000000000 --- a/agent/xds/testdata/clusters/ingress-with-tls-mixed-min-version-listeners.latest.golden +++ /dev/null @@ -1,151 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/s1" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/s2" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "s3.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "s3.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/s3" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "s3.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/listener-balance-inbound-connections.latest.golden b/agent/xds/testdata/clusters/listener-balance-inbound-connections.latest.golden deleted file mode 100644 index 5a25e882ab312..0000000000000 --- a/agent/xds/testdata/clusters/listener-balance-inbound-connections.latest.golden +++ /dev/null @@ -1,127 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "circuitBreakers": {}, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/geo-cache-target" - }, - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc2/svc/geo-cache-target" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - }, - "name": "local_app", - "type": "STATIC" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/listener-balance-outbound-connections-bind-port.latest.golden b/agent/xds/testdata/clusters/listener-balance-outbound-connections-bind-port.latest.golden deleted file mode 100644 index 5a25e882ab312..0000000000000 --- a/agent/xds/testdata/clusters/listener-balance-outbound-connections-bind-port.latest.golden +++ /dev/null @@ -1,127 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "circuitBreakers": {}, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/geo-cache-target" - }, - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc2/svc/geo-cache-target" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - }, - "name": "local_app", - "type": "STATIC" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/listener-bind-address-port.latest.golden b/agent/xds/testdata/clusters/listener-bind-address-port.latest.golden deleted file mode 100644 index 5a25e882ab312..0000000000000 --- a/agent/xds/testdata/clusters/listener-bind-address-port.latest.golden +++ /dev/null @@ -1,127 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "circuitBreakers": {}, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/geo-cache-target" - }, - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc2/svc/geo-cache-target" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - }, - "name": "local_app", - "type": "STATIC" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/listener-bind-address.latest.golden b/agent/xds/testdata/clusters/listener-bind-address.latest.golden deleted file mode 100644 index 5a25e882ab312..0000000000000 --- a/agent/xds/testdata/clusters/listener-bind-address.latest.golden +++ /dev/null @@ -1,127 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "circuitBreakers": {}, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/geo-cache-target" - }, - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc2/svc/geo-cache-target" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - }, - "name": "local_app", - "type": "STATIC" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/listener-bind-port.latest.golden b/agent/xds/testdata/clusters/listener-bind-port.latest.golden deleted file mode 100644 index 5a25e882ab312..0000000000000 --- a/agent/xds/testdata/clusters/listener-bind-port.latest.golden +++ /dev/null @@ -1,127 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "circuitBreakers": {}, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/geo-cache-target" - }, - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc2/svc/geo-cache-target" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - }, - "name": "local_app", - "type": "STATIC" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/listener-max-inbound-connections.latest.golden b/agent/xds/testdata/clusters/listener-max-inbound-connections.latest.golden deleted file mode 100644 index e7bd10da000cc..0000000000000 --- a/agent/xds/testdata/clusters/listener-max-inbound-connections.latest.golden +++ /dev/null @@ -1,134 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "circuitBreakers": {}, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/geo-cache-target" - }, - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc2/svc/geo-cache-target" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "circuitBreakers": { - "thresholds": [ - { - "maxConnections": 222 - } - ] - }, - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - }, - "name": "local_app", - "type": "STATIC" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/listener-unix-domain-socket.latest.golden b/agent/xds/testdata/clusters/listener-unix-domain-socket.latest.golden deleted file mode 100644 index 5a25e882ab312..0000000000000 --- a/agent/xds/testdata/clusters/listener-unix-domain-socket.latest.golden +++ /dev/null @@ -1,127 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "circuitBreakers": {}, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/geo-cache-target" - }, - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc2/svc/geo-cache-target" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - }, - "name": "local_app", - "type": "STATIC" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/mesh-gateway-custom-addresses.latest.golden b/agent/xds/testdata/clusters/mesh-gateway-custom-addresses.latest.golden deleted file mode 100644 index caa140aac2d50..0000000000000 --- a/agent/xds/testdata/clusters/mesh-gateway-custom-addresses.latest.golden +++ /dev/null @@ -1,106 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "dnsLookupFamily": "V4_ONLY", - "dnsRefreshRate": "10s", - "loadAssignment": { - "clusterName": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "123.us-west-2.elb.notaws.com", - "portValue": 443 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - "name": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "LOGICAL_DNS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "dnsLookupFamily": "V4_ONLY", - "dnsRefreshRate": "10s", - "loadAssignment": { - "clusterName": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "123.us-east-1.elb.notaws.com", - "portValue": 443 - } - } - }, - "healthStatus": "UNHEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - "name": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "LOGICAL_DNS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "EDS" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/mesh-gateway-default-service-subset.latest.golden b/agent/xds/testdata/clusters/mesh-gateway-default-service-subset.latest.golden deleted file mode 100644 index fb63679d49ba7..0000000000000 --- a/agent/xds/testdata/clusters/mesh-gateway-default-service-subset.latest.golden +++ /dev/null @@ -1,158 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "dnsLookupFamily": "V4_ONLY", - "dnsRefreshRate": "10s", - "loadAssignment": { - "clusterName": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "123.us-west-2.elb.notaws.com", - "portValue": 443 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - "name": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "LOGICAL_DNS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "dnsLookupFamily": "V4_ONLY", - "dnsRefreshRate": "10s", - "loadAssignment": { - "clusterName": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "123.us-east-1.elb.notaws.com", - "portValue": 443 - } - } - }, - "healthStatus": "UNHEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - "name": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "LOGICAL_DNS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "v1.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "v1.foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "v2.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "v2.foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "EDS" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/mesh-gateway-newer-information-in-federation-states.latest.golden b/agent/xds/testdata/clusters/mesh-gateway-newer-information-in-federation-states.latest.golden deleted file mode 100644 index caa140aac2d50..0000000000000 --- a/agent/xds/testdata/clusters/mesh-gateway-newer-information-in-federation-states.latest.golden +++ /dev/null @@ -1,106 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "dnsLookupFamily": "V4_ONLY", - "dnsRefreshRate": "10s", - "loadAssignment": { - "clusterName": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "123.us-west-2.elb.notaws.com", - "portValue": 443 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - "name": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "LOGICAL_DNS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "dnsLookupFamily": "V4_ONLY", - "dnsRefreshRate": "10s", - "loadAssignment": { - "clusterName": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "123.us-east-1.elb.notaws.com", - "portValue": 443 - } - } - }, - "healthStatus": "UNHEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - "name": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "LOGICAL_DNS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "EDS" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/mesh-gateway-older-information-in-federation-states.latest.golden b/agent/xds/testdata/clusters/mesh-gateway-older-information-in-federation-states.latest.golden deleted file mode 100644 index caa140aac2d50..0000000000000 --- a/agent/xds/testdata/clusters/mesh-gateway-older-information-in-federation-states.latest.golden +++ /dev/null @@ -1,106 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "dnsLookupFamily": "V4_ONLY", - "dnsRefreshRate": "10s", - "loadAssignment": { - "clusterName": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "123.us-west-2.elb.notaws.com", - "portValue": 443 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - "name": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "LOGICAL_DNS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "dnsLookupFamily": "V4_ONLY", - "dnsRefreshRate": "10s", - "loadAssignment": { - "clusterName": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "123.us-east-1.elb.notaws.com", - "portValue": 443 - } - } - }, - "healthStatus": "UNHEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - "name": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "LOGICAL_DNS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "EDS" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/mesh-gateway-service-subsets2.latest.golden b/agent/xds/testdata/clusters/mesh-gateway-service-subsets2.latest.golden deleted file mode 100644 index fb63679d49ba7..0000000000000 --- a/agent/xds/testdata/clusters/mesh-gateway-service-subsets2.latest.golden +++ /dev/null @@ -1,158 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "dnsLookupFamily": "V4_ONLY", - "dnsRefreshRate": "10s", - "loadAssignment": { - "clusterName": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "123.us-west-2.elb.notaws.com", - "portValue": 443 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - "name": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "LOGICAL_DNS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "dnsLookupFamily": "V4_ONLY", - "dnsRefreshRate": "10s", - "loadAssignment": { - "clusterName": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "123.us-east-1.elb.notaws.com", - "portValue": 443 - } - } - }, - "healthStatus": "UNHEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - "name": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "LOGICAL_DNS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "v1.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "v1.foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "v2.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "v2.foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "EDS" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/mesh-gateway-tagged-addresses.latest.golden b/agent/xds/testdata/clusters/mesh-gateway-tagged-addresses.latest.golden deleted file mode 100644 index caa140aac2d50..0000000000000 --- a/agent/xds/testdata/clusters/mesh-gateway-tagged-addresses.latest.golden +++ /dev/null @@ -1,106 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "dnsLookupFamily": "V4_ONLY", - "dnsRefreshRate": "10s", - "loadAssignment": { - "clusterName": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "123.us-west-2.elb.notaws.com", - "portValue": 443 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - "name": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "LOGICAL_DNS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "dnsLookupFamily": "V4_ONLY", - "dnsRefreshRate": "10s", - "loadAssignment": { - "clusterName": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "123.us-east-1.elb.notaws.com", - "portValue": 443 - } - } - }, - "healthStatus": "UNHEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - "name": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "LOGICAL_DNS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "EDS" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/terminating-gateway-custom-and-tagged-addresses.latest.golden b/agent/xds/testdata/clusters/terminating-gateway-custom-and-tagged-addresses.latest.golden deleted file mode 100644 index 07cf25087bd1c..0000000000000 --- a/agent/xds/testdata/clusters/terminating-gateway-custom-and-tagged-addresses.latest.golden +++ /dev/null @@ -1,148 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "dnsLookupFamily": "V4_ONLY", - "dnsRefreshRate": "10s", - "loadAssignment": { - "clusterName": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "api.altdomain", - "portValue": 8081 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - "name": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "filename": "api.cert.pem" - }, - "privateKey": { - "filename": "api.key.pem" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "filename": "ca.cert.pem" - } - } - } - } - }, - "type": "LOGICAL_DNS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "dnsLookupFamily": "V4_ONLY", - "dnsRefreshRate": "10s", - "loadAssignment": { - "clusterName": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "cache.mydomain", - "portValue": 8081 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - "name": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "LOGICAL_DNS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "dnsLookupFamily": "V4_ONLY", - "dnsRefreshRate": "10s", - "loadAssignment": { - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "db.mydomain", - "portValue": 8081 - } - } - }, - "healthStatus": "UNHEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "LOGICAL_DNS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "filename": "ca.cert.pem" - } - } - } - } - }, - "type": "EDS" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/terminating-gateway-custom-trace-listener.latest.golden b/agent/xds/testdata/clusters/terminating-gateway-custom-trace-listener.latest.golden deleted file mode 100644 index 07cf25087bd1c..0000000000000 --- a/agent/xds/testdata/clusters/terminating-gateway-custom-trace-listener.latest.golden +++ /dev/null @@ -1,148 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "dnsLookupFamily": "V4_ONLY", - "dnsRefreshRate": "10s", - "loadAssignment": { - "clusterName": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "api.altdomain", - "portValue": 8081 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - "name": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "filename": "api.cert.pem" - }, - "privateKey": { - "filename": "api.key.pem" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "filename": "ca.cert.pem" - } - } - } - } - }, - "type": "LOGICAL_DNS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "dnsLookupFamily": "V4_ONLY", - "dnsRefreshRate": "10s", - "loadAssignment": { - "clusterName": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "cache.mydomain", - "portValue": 8081 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - "name": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "LOGICAL_DNS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "dnsLookupFamily": "V4_ONLY", - "dnsRefreshRate": "10s", - "loadAssignment": { - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "db.mydomain", - "portValue": 8081 - } - } - }, - "healthStatus": "UNHEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "LOGICAL_DNS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "filename": "ca.cert.pem" - } - } - } - } - }, - "type": "EDS" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/terminating-gateway-default-service-subset.latest.golden b/agent/xds/testdata/clusters/terminating-gateway-default-service-subset.latest.golden deleted file mode 100644 index 067195261be88..0000000000000 --- a/agent/xds/testdata/clusters/terminating-gateway-default-service-subset.latest.golden +++ /dev/null @@ -1,202 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "dnsLookupFamily": "V4_ONLY", - "dnsRefreshRate": "10s", - "loadAssignment": { - "clusterName": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "api.altdomain", - "portValue": 8081 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - "name": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "filename": "api.cert.pem" - }, - "privateKey": { - "filename": "api.key.pem" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "filename": "ca.cert.pem" - } - } - } - } - }, - "type": "LOGICAL_DNS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "dnsLookupFamily": "V4_ONLY", - "dnsRefreshRate": "10s", - "loadAssignment": { - "clusterName": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "cache.mydomain", - "portValue": 8081 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - "name": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "LOGICAL_DNS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "dnsLookupFamily": "V4_ONLY", - "dnsRefreshRate": "10s", - "loadAssignment": { - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "db.mydomain", - "portValue": 8081 - } - } - }, - "healthStatus": "UNHEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "LOGICAL_DNS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "v1.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "filename": "ca.cert.pem" - } - } - } - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "v2.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "filename": "ca.cert.pem" - } - } - } - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "filename": "ca.cert.pem" - } - } - } - } - }, - "type": "EDS" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/terminating-gateway-lb-config-no-hash-policies.latest.golden b/agent/xds/testdata/clusters/terminating-gateway-lb-config-no-hash-policies.latest.golden deleted file mode 100644 index 2820af6f1e977..0000000000000 --- a/agent/xds/testdata/clusters/terminating-gateway-lb-config-no-hash-policies.latest.golden +++ /dev/null @@ -1,217 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "dnsLookupFamily": "V4_ONLY", - "dnsRefreshRate": "10s", - "loadAssignment": { - "clusterName": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "api.altdomain", - "portValue": 8081 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - "name": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "filename": "api.cert.pem" - }, - "privateKey": { - "filename": "api.key.pem" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "filename": "ca.cert.pem" - } - } - } - } - }, - "type": "LOGICAL_DNS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "dnsLookupFamily": "V4_ONLY", - "dnsRefreshRate": "10s", - "loadAssignment": { - "clusterName": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "cache.mydomain", - "portValue": 8081 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - "name": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "LOGICAL_DNS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "dnsLookupFamily": "V4_ONLY", - "dnsRefreshRate": "10s", - "loadAssignment": { - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "db.mydomain", - "portValue": 8081 - } - } - }, - "healthStatus": "UNHEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "LOGICAL_DNS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "lbPolicy": "RING_HASH", - "name": "v1.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "ringHashLbConfig": { - "maximumRingSize": "50", - "minimumRingSize": "20" - }, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "filename": "ca.cert.pem" - } - } - } - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "lbPolicy": "RING_HASH", - "name": "v2.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "ringHashLbConfig": { - "maximumRingSize": "50", - "minimumRingSize": "20" - }, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "filename": "ca.cert.pem" - } - } - } - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "lbPolicy": "RING_HASH", - "name": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "ringHashLbConfig": { - "maximumRingSize": "50", - "minimumRingSize": "20" - }, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "filename": "ca.cert.pem" - } - } - } - } - }, - "type": "EDS" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/terminating-gateway-no-api-cert.latest.golden b/agent/xds/testdata/clusters/terminating-gateway-no-api-cert.latest.golden deleted file mode 100644 index 07cf25087bd1c..0000000000000 --- a/agent/xds/testdata/clusters/terminating-gateway-no-api-cert.latest.golden +++ /dev/null @@ -1,148 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "dnsLookupFamily": "V4_ONLY", - "dnsRefreshRate": "10s", - "loadAssignment": { - "clusterName": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "api.altdomain", - "portValue": 8081 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - "name": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "filename": "api.cert.pem" - }, - "privateKey": { - "filename": "api.key.pem" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "filename": "ca.cert.pem" - } - } - } - } - }, - "type": "LOGICAL_DNS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "dnsLookupFamily": "V4_ONLY", - "dnsRefreshRate": "10s", - "loadAssignment": { - "clusterName": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "cache.mydomain", - "portValue": 8081 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - "name": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "LOGICAL_DNS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "dnsLookupFamily": "V4_ONLY", - "dnsRefreshRate": "10s", - "loadAssignment": { - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "db.mydomain", - "portValue": 8081 - } - } - }, - "healthStatus": "UNHEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "LOGICAL_DNS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "filename": "ca.cert.pem" - } - } - } - } - }, - "type": "EDS" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/terminating-gateway-with-peer-trust-bundle.latest.golden b/agent/xds/testdata/clusters/terminating-gateway-with-peer-trust-bundle.latest.golden deleted file mode 100644 index 07cf25087bd1c..0000000000000 --- a/agent/xds/testdata/clusters/terminating-gateway-with-peer-trust-bundle.latest.golden +++ /dev/null @@ -1,148 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "dnsLookupFamily": "V4_ONLY", - "dnsRefreshRate": "10s", - "loadAssignment": { - "clusterName": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "api.altdomain", - "portValue": 8081 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - "name": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "filename": "api.cert.pem" - }, - "privateKey": { - "filename": "api.key.pem" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "filename": "ca.cert.pem" - } - } - } - } - }, - "type": "LOGICAL_DNS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "dnsLookupFamily": "V4_ONLY", - "dnsRefreshRate": "10s", - "loadAssignment": { - "clusterName": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "cache.mydomain", - "portValue": 8081 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - "name": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "LOGICAL_DNS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "dnsLookupFamily": "V4_ONLY", - "dnsRefreshRate": "10s", - "loadAssignment": { - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "db.mydomain", - "portValue": 8081 - } - } - }, - "healthStatus": "UNHEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "LOGICAL_DNS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "filename": "ca.cert.pem" - } - } - } - } - }, - "type": "EDS" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/terminating-gateway-with-tls-incoming-cipher-suites.latest.golden b/agent/xds/testdata/clusters/terminating-gateway-with-tls-incoming-cipher-suites.latest.golden deleted file mode 100644 index 07cf25087bd1c..0000000000000 --- a/agent/xds/testdata/clusters/terminating-gateway-with-tls-incoming-cipher-suites.latest.golden +++ /dev/null @@ -1,148 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "dnsLookupFamily": "V4_ONLY", - "dnsRefreshRate": "10s", - "loadAssignment": { - "clusterName": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "api.altdomain", - "portValue": 8081 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - "name": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "filename": "api.cert.pem" - }, - "privateKey": { - "filename": "api.key.pem" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "filename": "ca.cert.pem" - } - } - } - } - }, - "type": "LOGICAL_DNS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "dnsLookupFamily": "V4_ONLY", - "dnsRefreshRate": "10s", - "loadAssignment": { - "clusterName": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "cache.mydomain", - "portValue": 8081 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - "name": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "LOGICAL_DNS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "dnsLookupFamily": "V4_ONLY", - "dnsRefreshRate": "10s", - "loadAssignment": { - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "db.mydomain", - "portValue": 8081 - } - } - }, - "healthStatus": "UNHEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "LOGICAL_DNS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "filename": "ca.cert.pem" - } - } - } - } - }, - "type": "EDS" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/terminating-gateway-with-tls-incoming-max-version.latest.golden b/agent/xds/testdata/clusters/terminating-gateway-with-tls-incoming-max-version.latest.golden deleted file mode 100644 index 07cf25087bd1c..0000000000000 --- a/agent/xds/testdata/clusters/terminating-gateway-with-tls-incoming-max-version.latest.golden +++ /dev/null @@ -1,148 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "dnsLookupFamily": "V4_ONLY", - "dnsRefreshRate": "10s", - "loadAssignment": { - "clusterName": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "api.altdomain", - "portValue": 8081 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - "name": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "filename": "api.cert.pem" - }, - "privateKey": { - "filename": "api.key.pem" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "filename": "ca.cert.pem" - } - } - } - } - }, - "type": "LOGICAL_DNS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "dnsLookupFamily": "V4_ONLY", - "dnsRefreshRate": "10s", - "loadAssignment": { - "clusterName": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "cache.mydomain", - "portValue": 8081 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - "name": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "LOGICAL_DNS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "dnsLookupFamily": "V4_ONLY", - "dnsRefreshRate": "10s", - "loadAssignment": { - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "db.mydomain", - "portValue": 8081 - } - } - }, - "healthStatus": "UNHEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "LOGICAL_DNS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "filename": "ca.cert.pem" - } - } - } - } - }, - "type": "EDS" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/terminating-gateway-with-tls-incoming-min-version.latest.golden b/agent/xds/testdata/clusters/terminating-gateway-with-tls-incoming-min-version.latest.golden deleted file mode 100644 index 07cf25087bd1c..0000000000000 --- a/agent/xds/testdata/clusters/terminating-gateway-with-tls-incoming-min-version.latest.golden +++ /dev/null @@ -1,148 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "dnsLookupFamily": "V4_ONLY", - "dnsRefreshRate": "10s", - "loadAssignment": { - "clusterName": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "api.altdomain", - "portValue": 8081 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - "name": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "filename": "api.cert.pem" - }, - "privateKey": { - "filename": "api.key.pem" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "filename": "ca.cert.pem" - } - } - } - } - }, - "type": "LOGICAL_DNS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "dnsLookupFamily": "V4_ONLY", - "dnsRefreshRate": "10s", - "loadAssignment": { - "clusterName": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "cache.mydomain", - "portValue": 8081 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - "name": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "LOGICAL_DNS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "dnsLookupFamily": "V4_ONLY", - "dnsRefreshRate": "10s", - "loadAssignment": { - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "db.mydomain", - "portValue": 8081 - } - } - }, - "healthStatus": "UNHEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "type": "LOGICAL_DNS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "filename": "ca.cert.pem" - } - } - } - } - }, - "type": "EDS" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/transparent-proxy-http-upstream.latest.golden b/agent/xds/testdata/clusters/transparent-proxy-http-upstream.latest.golden deleted file mode 100644 index fdc8e773170d0..0000000000000 --- a/agent/xds/testdata/clusters/transparent-proxy-http-upstream.latest.golden +++ /dev/null @@ -1,230 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "circuitBreakers": {}, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/geo-cache-target" - }, - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc2/svc/geo-cache-target" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "google.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "google.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/google" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "google.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - }, - "name": "local_app", - "type": "STATIC" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "no-endpoints.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "no-endpoints.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/no-endpoints" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "no-endpoints.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "lbPolicy": "CLUSTER_PROVIDED", - "name": "original-destination", - "type": "ORIGINAL_DST" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/transparent-proxy-terminating-gateway.latest.golden b/agent/xds/testdata/clusters/transparent-proxy-terminating-gateway.latest.golden deleted file mode 100644 index 2b3ceabc61b71..0000000000000 --- a/agent/xds/testdata/clusters/transparent-proxy-terminating-gateway.latest.golden +++ /dev/null @@ -1,223 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "circuitBreakers": {}, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/geo-cache-target" - }, - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc2/svc/geo-cache-target" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "google.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "google.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/google" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "google.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "kafka.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "kafka.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/kafka" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "kafka.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - }, - "name": "local_app", - "type": "STATIC" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/clusters/transparent-proxy-with-resolver-redirect-upstream.latest.golden b/agent/xds/testdata/clusters/transparent-proxy-with-resolver-redirect-upstream.latest.golden deleted file mode 100644 index bf459c9ad9855..0000000000000 --- a/agent/xds/testdata/clusters/transparent-proxy-with-resolver-redirect-upstream.latest.golden +++ /dev/null @@ -1,182 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/db" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "circuitBreakers": {}, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/geo-cache-target" - }, - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc2/svc/geo-cache-target" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "altStatName": "google.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "circuitBreakers": {}, - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "connectTimeout": "5s", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "name": "google.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "outlierDetection": {}, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "matchSubjectAltNames": [ - { - "exact": "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/google" - } - ], - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "sni": "google.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - }, - "type": "EDS" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "loadAssignment": { - "clusterName": "local_app", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - }, - "name": "local_app", - "type": "STATIC" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "connectTimeout": "5s", - "lbPolicy": "CLUSTER_PROVIDED", - "name": "original-destination", - "type": "ORIGINAL_DST" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/access-logs-defaults.latest.golden b/agent/xds/testdata/endpoints/access-logs-defaults.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/access-logs-defaults.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/access-logs-json-file.latest.golden b/agent/xds/testdata/endpoints/access-logs-json-file.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/access-logs-json-file.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/access-logs-text-stderr-disablelistenerlogs.latest.golden b/agent/xds/testdata/endpoints/access-logs-text-stderr-disablelistenerlogs.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/access-logs-text-stderr-disablelistenerlogs.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/api-gateway-http-listener-with-http-route.latest.golden b/agent/xds/testdata/endpoints/api-gateway-http-listener-with-http-route.latest.golden deleted file mode 100644 index 96ee5c7094687..0000000000000 --- a/agent/xds/testdata/endpoints/api-gateway-http-listener-with-http-route.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/api-gateway-http-listener.latest.golden b/agent/xds/testdata/endpoints/api-gateway-http-listener.latest.golden deleted file mode 100644 index 96ee5c7094687..0000000000000 --- a/agent/xds/testdata/endpoints/api-gateway-http-listener.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/api-gateway-nil-config-entry.latest.golden b/agent/xds/testdata/endpoints/api-gateway-nil-config-entry.latest.golden deleted file mode 100644 index 96ee5c7094687..0000000000000 --- a/agent/xds/testdata/endpoints/api-gateway-nil-config-entry.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/api-gateway-tcp-listener-with-tcp-and-http-route.latest.golden b/agent/xds/testdata/endpoints/api-gateway-tcp-listener-with-tcp-and-http-route.latest.golden deleted file mode 100644 index 96ee5c7094687..0000000000000 --- a/agent/xds/testdata/endpoints/api-gateway-tcp-listener-with-tcp-and-http-route.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/api-gateway-tcp-listener-with-tcp-route.latest.golden b/agent/xds/testdata/endpoints/api-gateway-tcp-listener-with-tcp-route.latest.golden deleted file mode 100644 index 96ee5c7094687..0000000000000 --- a/agent/xds/testdata/endpoints/api-gateway-tcp-listener-with-tcp-route.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/api-gateway-tcp-listener.latest.golden b/agent/xds/testdata/endpoints/api-gateway-tcp-listener.latest.golden deleted file mode 100644 index 96ee5c7094687..0000000000000 --- a/agent/xds/testdata/endpoints/api-gateway-tcp-listener.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/api-gateway-with-multiple-hostnames.latest.golden b/agent/xds/testdata/endpoints/api-gateway-with-multiple-hostnames.latest.golden deleted file mode 100644 index 96ee5c7094687..0000000000000 --- a/agent/xds/testdata/endpoints/api-gateway-with-multiple-hostnames.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/api-gateway.latest.golden b/agent/xds/testdata/endpoints/api-gateway.latest.golden deleted file mode 100644 index 96ee5c7094687..0000000000000 --- a/agent/xds/testdata/endpoints/api-gateway.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/connect-proxy-lb-in-resolver.latest.golden b/agent/xds/testdata/endpoints/connect-proxy-lb-in-resolver.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/connect-proxy-lb-in-resolver.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/connect-proxy-resolver-with-lb.latest.golden b/agent/xds/testdata/endpoints/connect-proxy-resolver-with-lb.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/connect-proxy-resolver-with-lb.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/connect-proxy-route-to-lb-resolver.latest.golden b/agent/xds/testdata/endpoints/connect-proxy-route-to-lb-resolver.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/connect-proxy-route-to-lb-resolver.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/connect-proxy-splitter-overweight.latest.golden b/agent/xds/testdata/endpoints/connect-proxy-splitter-overweight.latest.golden deleted file mode 100644 index fde7857a2ebd8..0000000000000 --- a/agent/xds/testdata/endpoints/connect-proxy-splitter-overweight.latest.golden +++ /dev/null @@ -1,41 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/connect-proxy-upstream-defaults.latest.golden b/agent/xds/testdata/endpoints/connect-proxy-upstream-defaults.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/connect-proxy-upstream-defaults.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/connect-proxy-with-chain-and-router.latest.golden b/agent/xds/testdata/endpoints/connect-proxy-with-chain-and-router.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/connect-proxy-with-chain-and-router.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/connect-proxy-with-chain-and-splitter.latest.golden b/agent/xds/testdata/endpoints/connect-proxy-with-chain-and-splitter.latest.golden deleted file mode 100644 index fde7857a2ebd8..0000000000000 --- a/agent/xds/testdata/endpoints/connect-proxy-with-chain-and-splitter.latest.golden +++ /dev/null @@ -1,41 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/connect-proxy-with-chain-http2.latest.golden b/agent/xds/testdata/endpoints/connect-proxy-with-chain-http2.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/connect-proxy-with-chain-http2.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/connect-proxy-with-grpc-chain.latest.golden b/agent/xds/testdata/endpoints/connect-proxy-with-grpc-chain.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/connect-proxy-with-grpc-chain.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/connect-proxy-with-grpc-router.latest.golden b/agent/xds/testdata/endpoints/connect-proxy-with-grpc-router.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/connect-proxy-with-grpc-router.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/connect-proxy-with-http-chain.latest.golden b/agent/xds/testdata/endpoints/connect-proxy-with-http-chain.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/connect-proxy-with-http-chain.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/connect-proxy-with-http2-chain.latest.golden b/agent/xds/testdata/endpoints/connect-proxy-with-http2-chain.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/connect-proxy-with-http2-chain.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/connect-proxy-with-jwt-config-entry-with-local.latest.golden b/agent/xds/testdata/endpoints/connect-proxy-with-jwt-config-entry-with-local.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/connect-proxy-with-jwt-config-entry-with-local.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/connect-proxy-with-jwt-config-entry-with-remote-jwks.latest.golden b/agent/xds/testdata/endpoints/connect-proxy-with-jwt-config-entry-with-remote-jwks.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/connect-proxy-with-jwt-config-entry-with-remote-jwks.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain.latest.golden b/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/connect-proxy-with-tcp-chain.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/connect-proxy-with-tls-incoming-cipher-suites.latest.golden b/agent/xds/testdata/endpoints/connect-proxy-with-tls-incoming-cipher-suites.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/connect-proxy-with-tls-incoming-cipher-suites.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/connect-proxy-with-tls-incoming-max-version.latest.golden b/agent/xds/testdata/endpoints/connect-proxy-with-tls-incoming-max-version.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/connect-proxy-with-tls-incoming-max-version.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/connect-proxy-with-tls-incoming-min-version.latest.golden b/agent/xds/testdata/endpoints/connect-proxy-with-tls-incoming-min-version.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/connect-proxy-with-tls-incoming-min-version.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/connect-proxy-with-tls-outgoing-cipher-suites.latest.golden b/agent/xds/testdata/endpoints/connect-proxy-with-tls-outgoing-cipher-suites.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/connect-proxy-with-tls-outgoing-cipher-suites.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/connect-proxy-with-tls-outgoing-max-version.latest.golden b/agent/xds/testdata/endpoints/connect-proxy-with-tls-outgoing-max-version.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/connect-proxy-with-tls-outgoing-max-version.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/connect-proxy-with-tls-outgoing-min-version-auto.latest.golden b/agent/xds/testdata/endpoints/connect-proxy-with-tls-outgoing-min-version-auto.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/connect-proxy-with-tls-outgoing-min-version-auto.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/connect-proxy-with-tls-outgoing-min-version.latest.golden b/agent/xds/testdata/endpoints/connect-proxy-with-tls-outgoing-min-version.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/connect-proxy-with-tls-outgoing-min-version.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/connect-proxy-with-tproxy-and-permissive-mtls.latest.golden b/agent/xds/testdata/endpoints/connect-proxy-with-tproxy-and-permissive-mtls.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/connect-proxy-with-tproxy-and-permissive-mtls.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/connect-proxy-without-tproxy-and-permissive-mtls.latest.golden b/agent/xds/testdata/endpoints/connect-proxy-without-tproxy-and-permissive-mtls.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/connect-proxy-without-tproxy-and-permissive-mtls.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/custom-limits-max-connections-only.latest.golden b/agent/xds/testdata/endpoints/custom-limits-max-connections-only.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/custom-limits-max-connections-only.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/custom-limits-set-to-zero.latest.golden b/agent/xds/testdata/endpoints/custom-limits-set-to-zero.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/custom-limits-set-to-zero.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/custom-limits.latest.golden b/agent/xds/testdata/endpoints/custom-limits.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/custom-limits.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/custom-local-app.latest.golden b/agent/xds/testdata/endpoints/custom-local-app.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/custom-local-app.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/custom-max-inbound-connections.latest.golden b/agent/xds/testdata/endpoints/custom-max-inbound-connections.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/custom-max-inbound-connections.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/custom-passive-healthcheck-zero-consecutive_5xx.latest.golden b/agent/xds/testdata/endpoints/custom-passive-healthcheck-zero-consecutive_5xx.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/custom-passive-healthcheck-zero-consecutive_5xx.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/custom-passive-healthcheck.latest.golden b/agent/xds/testdata/endpoints/custom-passive-healthcheck.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/custom-passive-healthcheck.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/custom-public-listener-http-2.latest.golden b/agent/xds/testdata/endpoints/custom-public-listener-http-2.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/custom-public-listener-http-2.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/custom-public-listener-http-missing.latest.golden b/agent/xds/testdata/endpoints/custom-public-listener-http-missing.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/custom-public-listener-http-missing.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/custom-public-listener-http.latest.golden b/agent/xds/testdata/endpoints/custom-public-listener-http.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/custom-public-listener-http.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/custom-public-listener.latest.golden b/agent/xds/testdata/endpoints/custom-public-listener.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/custom-public-listener.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/custom-timeouts.latest.golden b/agent/xds/testdata/endpoints/custom-timeouts.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/custom-timeouts.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/custom-trace-listener.latest.golden b/agent/xds/testdata/endpoints/custom-trace-listener.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/custom-trace-listener.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/custom-upstream-default-chain.latest.golden b/agent/xds/testdata/endpoints/custom-upstream-default-chain.latest.golden deleted file mode 100644 index c0d604ae53a7b..0000000000000 --- a/agent/xds/testdata/endpoints/custom-upstream-default-chain.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "myservice", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/custom-upstream-ignored-with-disco-chain.latest.golden b/agent/xds/testdata/endpoints/custom-upstream-ignored-with-disco-chain.latest.golden deleted file mode 100644 index ffaf0a6bae06e..0000000000000 --- a/agent/xds/testdata/endpoints/custom-upstream-ignored-with-disco-chain.latest.golden +++ /dev/null @@ -1,109 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "failover-target~0~db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "failover-target~1~db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/custom-upstream-with-prepared-query.latest.golden b/agent/xds/testdata/endpoints/custom-upstream-with-prepared-query.latest.golden deleted file mode 100644 index fde7857a2ebd8..0000000000000 --- a/agent/xds/testdata/endpoints/custom-upstream-with-prepared-query.latest.golden +++ /dev/null @@ -1,41 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/custom-upstream.latest.golden b/agent/xds/testdata/endpoints/custom-upstream.latest.golden deleted file mode 100644 index c0d604ae53a7b..0000000000000 --- a/agent/xds/testdata/endpoints/custom-upstream.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "myservice", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/downstream-service-with-unix-sockets.latest.golden b/agent/xds/testdata/endpoints/downstream-service-with-unix-sockets.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/downstream-service-with-unix-sockets.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/expose-checks-grpc.latest.golden b/agent/xds/testdata/endpoints/expose-checks-grpc.latest.golden deleted file mode 100644 index 96ee5c7094687..0000000000000 --- a/agent/xds/testdata/endpoints/expose-checks-grpc.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/expose-checks-http-with-bind-override.latest.golden b/agent/xds/testdata/endpoints/expose-checks-http-with-bind-override.latest.golden deleted file mode 100644 index 96ee5c7094687..0000000000000 --- a/agent/xds/testdata/endpoints/expose-checks-http-with-bind-override.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/expose-checks-http.latest.golden b/agent/xds/testdata/endpoints/expose-checks-http.latest.golden deleted file mode 100644 index 96ee5c7094687..0000000000000 --- a/agent/xds/testdata/endpoints/expose-checks-http.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/expose-checks.latest.golden b/agent/xds/testdata/endpoints/expose-checks.latest.golden deleted file mode 100644 index 96ee5c7094687..0000000000000 --- a/agent/xds/testdata/endpoints/expose-checks.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/expose-paths-grpc-new-cluster-http1.latest.golden b/agent/xds/testdata/endpoints/expose-paths-grpc-new-cluster-http1.latest.golden deleted file mode 100644 index 96ee5c7094687..0000000000000 --- a/agent/xds/testdata/endpoints/expose-paths-grpc-new-cluster-http1.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/expose-paths-local-app-paths.latest.golden b/agent/xds/testdata/endpoints/expose-paths-local-app-paths.latest.golden deleted file mode 100644 index 96ee5c7094687..0000000000000 --- a/agent/xds/testdata/endpoints/expose-paths-local-app-paths.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/expose-paths-new-cluster-http2.latest.golden b/agent/xds/testdata/endpoints/expose-paths-new-cluster-http2.latest.golden deleted file mode 100644 index 96ee5c7094687..0000000000000 --- a/agent/xds/testdata/endpoints/expose-paths-new-cluster-http2.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/grpc-public-listener.latest.golden b/agent/xds/testdata/endpoints/grpc-public-listener.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/grpc-public-listener.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/http-listener-with-timeouts.latest.golden b/agent/xds/testdata/endpoints/http-listener-with-timeouts.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/http-listener-with-timeouts.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/http-public-listener-no-xfcc.latest.golden b/agent/xds/testdata/endpoints/http-public-listener-no-xfcc.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/http-public-listener-no-xfcc.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/http-public-listener.latest.golden b/agent/xds/testdata/endpoints/http-public-listener.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/http-public-listener.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/http-upstream.latest.golden b/agent/xds/testdata/endpoints/http-upstream.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/http-upstream.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/http2-public-listener.latest.golden b/agent/xds/testdata/endpoints/http2-public-listener.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/http2-public-listener.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/ingress-config-entry-nil.latest.golden b/agent/xds/testdata/endpoints/ingress-config-entry-nil.latest.golden deleted file mode 100644 index 96ee5c7094687..0000000000000 --- a/agent/xds/testdata/endpoints/ingress-config-entry-nil.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/ingress-defaults-no-chain.latest.golden b/agent/xds/testdata/endpoints/ingress-defaults-no-chain.latest.golden deleted file mode 100644 index 96ee5c7094687..0000000000000 --- a/agent/xds/testdata/endpoints/ingress-defaults-no-chain.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/ingress-gateway-bind-addrs.latest.golden b/agent/xds/testdata/endpoints/ingress-gateway-bind-addrs.latest.golden deleted file mode 100644 index 2a1b29370b637..0000000000000 --- a/agent/xds/testdata/endpoints/ingress-gateway-bind-addrs.latest.golden +++ /dev/null @@ -1,41 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/ingress-gateway-with-tls-outgoing-cipher-suites.latest.golden b/agent/xds/testdata/endpoints/ingress-gateway-with-tls-outgoing-cipher-suites.latest.golden deleted file mode 100644 index 2a1b29370b637..0000000000000 --- a/agent/xds/testdata/endpoints/ingress-gateway-with-tls-outgoing-cipher-suites.latest.golden +++ /dev/null @@ -1,41 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/ingress-gateway-with-tls-outgoing-max-version.latest.golden b/agent/xds/testdata/endpoints/ingress-gateway-with-tls-outgoing-max-version.latest.golden deleted file mode 100644 index 2a1b29370b637..0000000000000 --- a/agent/xds/testdata/endpoints/ingress-gateway-with-tls-outgoing-max-version.latest.golden +++ /dev/null @@ -1,41 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/ingress-gateway-with-tls-outgoing-min-version.latest.golden b/agent/xds/testdata/endpoints/ingress-gateway-with-tls-outgoing-min-version.latest.golden deleted file mode 100644 index 2a1b29370b637..0000000000000 --- a/agent/xds/testdata/endpoints/ingress-gateway-with-tls-outgoing-min-version.latest.golden +++ /dev/null @@ -1,41 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/ingress-grpc-multiple-services.latest.golden b/agent/xds/testdata/endpoints/ingress-grpc-multiple-services.latest.golden deleted file mode 100644 index 15a7d2b789ad4..0000000000000 --- a/agent/xds/testdata/endpoints/ingress-grpc-multiple-services.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/ingress-http-multiple-services.latest.golden b/agent/xds/testdata/endpoints/ingress-http-multiple-services.latest.golden deleted file mode 100644 index a1b8a9153d0a7..0000000000000 --- a/agent/xds/testdata/endpoints/ingress-http-multiple-services.latest.golden +++ /dev/null @@ -1,143 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "baz.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "qux.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/ingress-lb-in-resolver.latest.golden b/agent/xds/testdata/endpoints/ingress-lb-in-resolver.latest.golden deleted file mode 100644 index 2a1b29370b637..0000000000000 --- a/agent/xds/testdata/endpoints/ingress-lb-in-resolver.latest.golden +++ /dev/null @@ -1,41 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/ingress-with-chain-and-router-header-manip.latest.golden b/agent/xds/testdata/endpoints/ingress-with-chain-and-router-header-manip.latest.golden deleted file mode 100644 index 2a1b29370b637..0000000000000 --- a/agent/xds/testdata/endpoints/ingress-with-chain-and-router-header-manip.latest.golden +++ /dev/null @@ -1,41 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/ingress-with-chain-and-router.latest.golden b/agent/xds/testdata/endpoints/ingress-with-chain-and-router.latest.golden deleted file mode 100644 index 2a1b29370b637..0000000000000 --- a/agent/xds/testdata/endpoints/ingress-with-chain-and-router.latest.golden +++ /dev/null @@ -1,41 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/ingress-with-chain-and-splitter.latest.golden b/agent/xds/testdata/endpoints/ingress-with-chain-and-splitter.latest.golden deleted file mode 100644 index 96ee5c7094687..0000000000000 --- a/agent/xds/testdata/endpoints/ingress-with-chain-and-splitter.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/ingress-with-defaults-passive-health-check.latest.golden b/agent/xds/testdata/endpoints/ingress-with-defaults-passive-health-check.latest.golden deleted file mode 100644 index 2a1b29370b637..0000000000000 --- a/agent/xds/testdata/endpoints/ingress-with-defaults-passive-health-check.latest.golden +++ /dev/null @@ -1,41 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/ingress-with-defaults-service-max-connections.latest.golden b/agent/xds/testdata/endpoints/ingress-with-defaults-service-max-connections.latest.golden deleted file mode 100644 index 2a1b29370b637..0000000000000 --- a/agent/xds/testdata/endpoints/ingress-with-defaults-service-max-connections.latest.golden +++ /dev/null @@ -1,41 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/ingress-with-grpc-router.latest.golden b/agent/xds/testdata/endpoints/ingress-with-grpc-router.latest.golden deleted file mode 100644 index 2a1b29370b637..0000000000000 --- a/agent/xds/testdata/endpoints/ingress-with-grpc-router.latest.golden +++ /dev/null @@ -1,41 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/ingress-with-grpc-single-tls-listener.latest.golden b/agent/xds/testdata/endpoints/ingress-with-grpc-single-tls-listener.latest.golden deleted file mode 100644 index c745542ee476f..0000000000000 --- a/agent/xds/testdata/endpoints/ingress-with-grpc-single-tls-listener.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/ingress-with-http2-and-grpc-multiple-tls-listener.latest.golden b/agent/xds/testdata/endpoints/ingress-with-http2-and-grpc-multiple-tls-listener.latest.golden deleted file mode 100644 index c745542ee476f..0000000000000 --- a/agent/xds/testdata/endpoints/ingress-with-http2-and-grpc-multiple-tls-listener.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/ingress-with-http2-single-tls-listener.latest.golden b/agent/xds/testdata/endpoints/ingress-with-http2-single-tls-listener.latest.golden deleted file mode 100644 index c745542ee476f..0000000000000 --- a/agent/xds/testdata/endpoints/ingress-with-http2-single-tls-listener.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/ingress-with-overwrite-defaults-passive-health-check.latest.golden b/agent/xds/testdata/endpoints/ingress-with-overwrite-defaults-passive-health-check.latest.golden deleted file mode 100644 index 2a1b29370b637..0000000000000 --- a/agent/xds/testdata/endpoints/ingress-with-overwrite-defaults-passive-health-check.latest.golden +++ /dev/null @@ -1,41 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/ingress-with-overwrite-defaults-service-max-connections.latest.golden b/agent/xds/testdata/endpoints/ingress-with-overwrite-defaults-service-max-connections.latest.golden deleted file mode 100644 index 2a1b29370b637..0000000000000 --- a/agent/xds/testdata/endpoints/ingress-with-overwrite-defaults-service-max-connections.latest.golden +++ /dev/null @@ -1,41 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/ingress-with-sds-listener+service-level.latest.golden b/agent/xds/testdata/endpoints/ingress-with-sds-listener+service-level.latest.golden deleted file mode 100644 index c745542ee476f..0000000000000 --- a/agent/xds/testdata/endpoints/ingress-with-sds-listener+service-level.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/ingress-with-sds-listener-gw-level-http.latest.golden b/agent/xds/testdata/endpoints/ingress-with-sds-listener-gw-level-http.latest.golden deleted file mode 100644 index 71594fbf1b4ec..0000000000000 --- a/agent/xds/testdata/endpoints/ingress-with-sds-listener-gw-level-http.latest.golden +++ /dev/null @@ -1,41 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "http.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/ingress-with-sds-listener-gw-level-mixed-tls.latest.golden b/agent/xds/testdata/endpoints/ingress-with-sds-listener-gw-level-mixed-tls.latest.golden deleted file mode 100644 index ccf0803dc0c1e..0000000000000 --- a/agent/xds/testdata/endpoints/ingress-with-sds-listener-gw-level-mixed-tls.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "insecure.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "secure.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/ingress-with-sds-listener-gw-level.latest.golden b/agent/xds/testdata/endpoints/ingress-with-sds-listener-gw-level.latest.golden deleted file mode 100644 index 2a1b29370b637..0000000000000 --- a/agent/xds/testdata/endpoints/ingress-with-sds-listener-gw-level.latest.golden +++ /dev/null @@ -1,41 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/ingress-with-sds-listener-level-wildcard.latest.golden b/agent/xds/testdata/endpoints/ingress-with-sds-listener-level-wildcard.latest.golden deleted file mode 100644 index 903ff9e17f3c5..0000000000000 --- a/agent/xds/testdata/endpoints/ingress-with-sds-listener-level-wildcard.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/ingress-with-sds-listener-level.latest.golden b/agent/xds/testdata/endpoints/ingress-with-sds-listener-level.latest.golden deleted file mode 100644 index 903ff9e17f3c5..0000000000000 --- a/agent/xds/testdata/endpoints/ingress-with-sds-listener-level.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/ingress-with-sds-listener-listener-level.latest.golden b/agent/xds/testdata/endpoints/ingress-with-sds-listener-listener-level.latest.golden deleted file mode 100644 index 2a1b29370b637..0000000000000 --- a/agent/xds/testdata/endpoints/ingress-with-sds-listener-listener-level.latest.golden +++ /dev/null @@ -1,41 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/ingress-with-sds-service-level-2.latest.golden b/agent/xds/testdata/endpoints/ingress-with-sds-service-level-2.latest.golden deleted file mode 100644 index 903ff9e17f3c5..0000000000000 --- a/agent/xds/testdata/endpoints/ingress-with-sds-service-level-2.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/ingress-with-sds-service-level-mixed-no-tls.latest.golden b/agent/xds/testdata/endpoints/ingress-with-sds-service-level-mixed-no-tls.latest.golden deleted file mode 100644 index c745542ee476f..0000000000000 --- a/agent/xds/testdata/endpoints/ingress-with-sds-service-level-mixed-no-tls.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/ingress-with-sds-service-level-mixed-tls.latest.golden b/agent/xds/testdata/endpoints/ingress-with-sds-service-level-mixed-tls.latest.golden deleted file mode 100644 index 903ff9e17f3c5..0000000000000 --- a/agent/xds/testdata/endpoints/ingress-with-sds-service-level-mixed-tls.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/ingress-with-sds-service-level.latest.golden b/agent/xds/testdata/endpoints/ingress-with-sds-service-level.latest.golden deleted file mode 100644 index c745542ee476f..0000000000000 --- a/agent/xds/testdata/endpoints/ingress-with-sds-service-level.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/ingress-with-service-max-connections.latest.golden b/agent/xds/testdata/endpoints/ingress-with-service-max-connections.latest.golden deleted file mode 100644 index 2a1b29370b637..0000000000000 --- a/agent/xds/testdata/endpoints/ingress-with-service-max-connections.latest.golden +++ /dev/null @@ -1,41 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/ingress-with-service-passive-health-check.latest.golden b/agent/xds/testdata/endpoints/ingress-with-service-passive-health-check.latest.golden deleted file mode 100644 index 2a1b29370b637..0000000000000 --- a/agent/xds/testdata/endpoints/ingress-with-service-passive-health-check.latest.golden +++ /dev/null @@ -1,41 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/ingress-with-single-tls-listener.latest.golden b/agent/xds/testdata/endpoints/ingress-with-single-tls-listener.latest.golden deleted file mode 100644 index c745542ee476f..0000000000000 --- a/agent/xds/testdata/endpoints/ingress-with-single-tls-listener.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/ingress-with-tls-listener-cipher-suites.latest.golden b/agent/xds/testdata/endpoints/ingress-with-tls-listener-cipher-suites.latest.golden deleted file mode 100644 index 2a1b29370b637..0000000000000 --- a/agent/xds/testdata/endpoints/ingress-with-tls-listener-cipher-suites.latest.golden +++ /dev/null @@ -1,41 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/ingress-with-tls-listener-max-version.latest.golden b/agent/xds/testdata/endpoints/ingress-with-tls-listener-max-version.latest.golden deleted file mode 100644 index 2a1b29370b637..0000000000000 --- a/agent/xds/testdata/endpoints/ingress-with-tls-listener-max-version.latest.golden +++ /dev/null @@ -1,41 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/ingress-with-tls-listener-min-version.latest.golden b/agent/xds/testdata/endpoints/ingress-with-tls-listener-min-version.latest.golden deleted file mode 100644 index 2a1b29370b637..0000000000000 --- a/agent/xds/testdata/endpoints/ingress-with-tls-listener-min-version.latest.golden +++ /dev/null @@ -1,41 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/ingress-with-tls-listener.latest.golden b/agent/xds/testdata/endpoints/ingress-with-tls-listener.latest.golden deleted file mode 100644 index 2a1b29370b637..0000000000000 --- a/agent/xds/testdata/endpoints/ingress-with-tls-listener.latest.golden +++ /dev/null @@ -1,41 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/ingress-with-tls-min-version-listeners-gateway-defaults.latest.golden b/agent/xds/testdata/endpoints/ingress-with-tls-min-version-listeners-gateway-defaults.latest.golden deleted file mode 100644 index 29eb4029dd7e6..0000000000000 --- a/agent/xds/testdata/endpoints/ingress-with-tls-min-version-listeners-gateway-defaults.latest.golden +++ /dev/null @@ -1,143 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "s3.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "s4.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/ingress-with-tls-mixed-cipher-suites-listeners.latest.golden b/agent/xds/testdata/endpoints/ingress-with-tls-mixed-cipher-suites-listeners.latest.golden deleted file mode 100644 index c745542ee476f..0000000000000 --- a/agent/xds/testdata/endpoints/ingress-with-tls-mixed-cipher-suites-listeners.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/ingress-with-tls-mixed-listeners.latest.golden b/agent/xds/testdata/endpoints/ingress-with-tls-mixed-listeners.latest.golden deleted file mode 100644 index c745542ee476f..0000000000000 --- a/agent/xds/testdata/endpoints/ingress-with-tls-mixed-listeners.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/ingress-with-tls-mixed-max-version-listeners.latest.golden b/agent/xds/testdata/endpoints/ingress-with-tls-mixed-max-version-listeners.latest.golden deleted file mode 100644 index e77e740023ae7..0000000000000 --- a/agent/xds/testdata/endpoints/ingress-with-tls-mixed-max-version-listeners.latest.golden +++ /dev/null @@ -1,109 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "s3.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/ingress-with-tls-mixed-min-version-listeners.latest.golden b/agent/xds/testdata/endpoints/ingress-with-tls-mixed-min-version-listeners.latest.golden deleted file mode 100644 index e77e740023ae7..0000000000000 --- a/agent/xds/testdata/endpoints/ingress-with-tls-mixed-min-version-listeners.latest.golden +++ /dev/null @@ -1,109 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "s3.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/listener-balance-inbound-connections.latest.golden b/agent/xds/testdata/endpoints/listener-balance-inbound-connections.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/listener-balance-inbound-connections.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/listener-balance-outbound-connections-bind-port.latest.golden b/agent/xds/testdata/endpoints/listener-balance-outbound-connections-bind-port.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/listener-balance-outbound-connections-bind-port.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/listener-bind-address-port.latest.golden b/agent/xds/testdata/endpoints/listener-bind-address-port.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/listener-bind-address-port.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/listener-bind-address.latest.golden b/agent/xds/testdata/endpoints/listener-bind-address.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/listener-bind-address.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/listener-bind-port.latest.golden b/agent/xds/testdata/endpoints/listener-bind-port.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/listener-bind-port.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/listener-max-inbound-connections.latest.golden b/agent/xds/testdata/endpoints/listener-max-inbound-connections.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/listener-max-inbound-connections.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/listener-unix-domain-socket.latest.golden b/agent/xds/testdata/endpoints/listener-unix-domain-socket.latest.golden deleted file mode 100644 index b4372a3439e81..0000000000000 --- a/agent/xds/testdata/endpoints/listener-unix-domain-socket.latest.golden +++ /dev/null @@ -1,75 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/mesh-gateway-custom-addresses.latest.golden b/agent/xds/testdata/endpoints/mesh-gateway-custom-addresses.latest.golden deleted file mode 100644 index 4853c9dc932a1..0000000000000 --- a/agent/xds/testdata/endpoints/mesh-gateway-custom-addresses.latest.golden +++ /dev/null @@ -1,145 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.6", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.7", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.8", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "198.18.1.1", - "portValue": 443 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "198.18.1.2", - "portValue": 443 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.3", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.4", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.5", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.9", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/mesh-gateway-hash-lb-ignored.latest.golden b/agent/xds/testdata/endpoints/mesh-gateway-hash-lb-ignored.latest.golden deleted file mode 100644 index 8600551622112..0000000000000 --- a/agent/xds/testdata/endpoints/mesh-gateway-hash-lb-ignored.latest.golden +++ /dev/null @@ -1,159 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.6", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.7", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.8", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "198.18.1.1", - "portValue": 443 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "198.18.1.2", - "portValue": 443 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.3", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.4", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.5", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.9", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "v1.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - {} - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "v2.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - {} - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/mesh-gateway-ignore-extra-resolvers.latest.golden b/agent/xds/testdata/endpoints/mesh-gateway-ignore-extra-resolvers.latest.golden deleted file mode 100644 index 7b345547990ad..0000000000000 --- a/agent/xds/testdata/endpoints/mesh-gateway-ignore-extra-resolvers.latest.golden +++ /dev/null @@ -1,120 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - {} - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "198.18.1.1", - "portValue": 443 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "198.18.1.2", - "portValue": 443 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.3", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.4", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.5", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.9", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "v1.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - {} - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "v2.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - {} - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/mesh-gateway-non-hash-lb-injected.latest.golden b/agent/xds/testdata/endpoints/mesh-gateway-non-hash-lb-injected.latest.golden deleted file mode 100644 index 8600551622112..0000000000000 --- a/agent/xds/testdata/endpoints/mesh-gateway-non-hash-lb-injected.latest.golden +++ /dev/null @@ -1,159 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.6", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.7", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.8", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "198.18.1.1", - "portValue": 443 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "198.18.1.2", - "portValue": 443 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.3", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.4", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.5", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.9", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "v1.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - {} - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "v2.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - {} - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/mesh-gateway-service-subsets.latest.golden b/agent/xds/testdata/endpoints/mesh-gateway-service-subsets.latest.golden index 8600551622112..f4e0c1e258b04 100644 --- a/agent/xds/testdata/endpoints/mesh-gateway-service-subsets.latest.golden +++ b/agent/xds/testdata/endpoints/mesh-gateway-service-subsets.latest.golden @@ -143,14 +143,124 @@ "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", "clusterName": "v1.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", "endpoints": [ - {} + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.6", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.7", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", + "clusterName": "v1.foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.3", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.4", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } ] }, { "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", "clusterName": "v2.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", "endpoints": [ - {} + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.8", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", + "clusterName": "v2.foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.5", + "portValue": 2222 + } + } + }, + "healthStatus": "HEALTHY", + "loadBalancingWeight": 1 + }, + { + "endpoint": { + "address": { + "socketAddress": { + "address": "172.16.1.9", + "portValue": 2222 + } + } + }, + "healthStatus": "UNHEALTHY", + "loadBalancingWeight": 1 + } + ] + } ] } ], diff --git a/agent/xds/testdata/endpoints/mesh-gateway-service-subsets2.latest.golden b/agent/xds/testdata/endpoints/mesh-gateway-service-subsets2.latest.golden deleted file mode 100644 index f4e0c1e258b04..0000000000000 --- a/agent/xds/testdata/endpoints/mesh-gateway-service-subsets2.latest.golden +++ /dev/null @@ -1,269 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.6", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.7", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.8", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "198.18.1.1", - "portValue": 443 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "198.18.1.2", - "portValue": 443 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.3", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.4", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.5", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.9", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "v1.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.6", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.7", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "v1.foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.3", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.4", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "v2.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.8", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "v2.foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.5", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.9", - "portValue": 2222 - } - } - }, - "healthStatus": "UNHEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/mesh-gateway-service-timeouts.latest.golden b/agent/xds/testdata/endpoints/mesh-gateway-service-timeouts.latest.golden deleted file mode 100644 index 8600551622112..0000000000000 --- a/agent/xds/testdata/endpoints/mesh-gateway-service-timeouts.latest.golden +++ /dev/null @@ -1,159 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.6", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.7", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.8", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "198.18.1.1", - "portValue": 443 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "198.18.1.2", - "portValue": 443 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.3", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.4", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.5", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.9", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "v1.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - {} - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "v2.bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - {} - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/mesh-gateway-tagged-addresses.latest.golden b/agent/xds/testdata/endpoints/mesh-gateway-tagged-addresses.latest.golden deleted file mode 100644 index 4853c9dc932a1..0000000000000 --- a/agent/xds/testdata/endpoints/mesh-gateway-tagged-addresses.latest.golden +++ /dev/null @@ -1,145 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.6", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.7", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.8", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "198.18.1.1", - "portValue": 443 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "198.18.1.2", - "portValue": 443 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.3", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.4", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.5", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.9", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/mesh-gateway-tcp-keepalives.latest.golden b/agent/xds/testdata/endpoints/mesh-gateway-tcp-keepalives.latest.golden deleted file mode 100644 index 4853c9dc932a1..0000000000000 --- a/agent/xds/testdata/endpoints/mesh-gateway-tcp-keepalives.latest.golden +++ /dev/null @@ -1,145 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.6", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.7", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.8", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "198.18.1.1", - "portValue": 443 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "198.18.1.2", - "portValue": 443 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.3", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.4", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.5", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "172.16.1.9", - "portValue": 2222 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/terminating-gateway-custom-and-tagged-addresses.latest.golden b/agent/xds/testdata/endpoints/terminating-gateway-custom-and-tagged-addresses.latest.golden deleted file mode 100644 index 0b67b10323e3f..0000000000000 --- a/agent/xds/testdata/endpoints/terminating-gateway-custom-and-tagged-addresses.latest.golden +++ /dev/null @@ -1,41 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/terminating-gateway-custom-trace-listener.latest.golden b/agent/xds/testdata/endpoints/terminating-gateway-custom-trace-listener.latest.golden deleted file mode 100644 index 0b67b10323e3f..0000000000000 --- a/agent/xds/testdata/endpoints/terminating-gateway-custom-trace-listener.latest.golden +++ /dev/null @@ -1,41 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/terminating-gateway-hostname-service-subsets.latest.golden b/agent/xds/testdata/endpoints/terminating-gateway-hostname-service-subsets.latest.golden deleted file mode 100644 index 0b67b10323e3f..0000000000000 --- a/agent/xds/testdata/endpoints/terminating-gateway-hostname-service-subsets.latest.golden +++ /dev/null @@ -1,41 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/terminating-gateway-http2-upstream-subsets.latest.golden b/agent/xds/testdata/endpoints/terminating-gateway-http2-upstream-subsets.latest.golden deleted file mode 100644 index 96ee5c7094687..0000000000000 --- a/agent/xds/testdata/endpoints/terminating-gateway-http2-upstream-subsets.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/terminating-gateway-http2-upstream.latest.golden b/agent/xds/testdata/endpoints/terminating-gateway-http2-upstream.latest.golden deleted file mode 100644 index 96ee5c7094687..0000000000000 --- a/agent/xds/testdata/endpoints/terminating-gateway-http2-upstream.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/terminating-gateway-ignore-extra-resolvers.latest.golden b/agent/xds/testdata/endpoints/terminating-gateway-ignore-extra-resolvers.latest.golden deleted file mode 100644 index 5663c47c82646..0000000000000 --- a/agent/xds/testdata/endpoints/terminating-gateway-ignore-extra-resolvers.latest.golden +++ /dev/null @@ -1,28 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "v1.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - {} - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "v2.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - {} - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - {} - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/terminating-gateway-lb-config-no-hash-policies.latest.golden b/agent/xds/testdata/endpoints/terminating-gateway-lb-config-no-hash-policies.latest.golden deleted file mode 100644 index 5663c47c82646..0000000000000 --- a/agent/xds/testdata/endpoints/terminating-gateway-lb-config-no-hash-policies.latest.golden +++ /dev/null @@ -1,28 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "v1.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - {} - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "v2.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - {} - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - {} - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/terminating-gateway-lb-config.latest.golden b/agent/xds/testdata/endpoints/terminating-gateway-lb-config.latest.golden deleted file mode 100644 index 5663c47c82646..0000000000000 --- a/agent/xds/testdata/endpoints/terminating-gateway-lb-config.latest.golden +++ /dev/null @@ -1,28 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "v1.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - {} - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "v2.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - {} - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - {} - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/terminating-gateway-no-api-cert.latest.golden b/agent/xds/testdata/endpoints/terminating-gateway-no-api-cert.latest.golden deleted file mode 100644 index 0b67b10323e3f..0000000000000 --- a/agent/xds/testdata/endpoints/terminating-gateway-no-api-cert.latest.golden +++ /dev/null @@ -1,41 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/terminating-gateway-sni.latest.golden b/agent/xds/testdata/endpoints/terminating-gateway-sni.latest.golden deleted file mode 100644 index 0b67b10323e3f..0000000000000 --- a/agent/xds/testdata/endpoints/terminating-gateway-sni.latest.golden +++ /dev/null @@ -1,41 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/terminating-gateway-tcp-keepalives.latest.golden b/agent/xds/testdata/endpoints/terminating-gateway-tcp-keepalives.latest.golden deleted file mode 100644 index 0b67b10323e3f..0000000000000 --- a/agent/xds/testdata/endpoints/terminating-gateway-tcp-keepalives.latest.golden +++ /dev/null @@ -1,41 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/terminating-gateway-with-peer-trust-bundle.latest.golden b/agent/xds/testdata/endpoints/terminating-gateway-with-peer-trust-bundle.latest.golden deleted file mode 100644 index 0b67b10323e3f..0000000000000 --- a/agent/xds/testdata/endpoints/terminating-gateway-with-peer-trust-bundle.latest.golden +++ /dev/null @@ -1,41 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/terminating-gateway-with-tls-incoming-cipher-suites.latest.golden b/agent/xds/testdata/endpoints/terminating-gateway-with-tls-incoming-cipher-suites.latest.golden deleted file mode 100644 index 0b67b10323e3f..0000000000000 --- a/agent/xds/testdata/endpoints/terminating-gateway-with-tls-incoming-cipher-suites.latest.golden +++ /dev/null @@ -1,41 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/terminating-gateway-with-tls-incoming-max-version.latest.golden b/agent/xds/testdata/endpoints/terminating-gateway-with-tls-incoming-max-version.latest.golden deleted file mode 100644 index 0b67b10323e3f..0000000000000 --- a/agent/xds/testdata/endpoints/terminating-gateway-with-tls-incoming-max-version.latest.golden +++ /dev/null @@ -1,41 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/terminating-gateway-with-tls-incoming-min-version.latest.golden b/agent/xds/testdata/endpoints/terminating-gateway-with-tls-incoming-min-version.latest.golden deleted file mode 100644 index 0b67b10323e3f..0000000000000 --- a/agent/xds/testdata/endpoints/terminating-gateway-with-tls-incoming-min-version.latest.golden +++ /dev/null @@ -1,41 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/transparent-proxy-catalog-destinations-only.latest.golden b/agent/xds/testdata/endpoints/transparent-proxy-catalog-destinations-only.latest.golden deleted file mode 100644 index ebf0eb91d97e9..0000000000000 --- a/agent/xds/testdata/endpoints/transparent-proxy-catalog-destinations-only.latest.golden +++ /dev/null @@ -1,104 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "google.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "9.9.9.9", - "portValue": 9090 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "no-endpoints.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - {} - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/transparent-proxy-dial-instances-directly.latest.golden b/agent/xds/testdata/endpoints/transparent-proxy-dial-instances-directly.latest.golden deleted file mode 100644 index 202693781ebd6..0000000000000 --- a/agent/xds/testdata/endpoints/transparent-proxy-dial-instances-directly.latest.golden +++ /dev/null @@ -1,131 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "kafka.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "9.9.9.9", - "portValue": 9092 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "mongo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.10.10", - "portValue": 27017 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.10.12", - "portValue": 27017 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/transparent-proxy-http-upstream.latest.golden b/agent/xds/testdata/endpoints/transparent-proxy-http-upstream.latest.golden deleted file mode 100644 index ebf0eb91d97e9..0000000000000 --- a/agent/xds/testdata/endpoints/transparent-proxy-http-upstream.latest.golden +++ /dev/null @@ -1,104 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "google.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "9.9.9.9", - "portValue": 9090 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "no-endpoints.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - {} - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/transparent-proxy-terminating-gateway.latest.golden b/agent/xds/testdata/endpoints/transparent-proxy-terminating-gateway.latest.golden deleted file mode 100644 index ce0d1b671c92e..0000000000000 --- a/agent/xds/testdata/endpoints/transparent-proxy-terminating-gateway.latest.golden +++ /dev/null @@ -1,119 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "google.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "9.9.9.9", - "portValue": 9090 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "kafka.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "9.9.9.9", - "portValue": 9090 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/endpoints/transparent-proxy-with-resolver-redirect-upstream.latest.golden b/agent/xds/testdata/endpoints/transparent-proxy-with-resolver-redirect-upstream.latest.golden deleted file mode 100644 index 545759eaf5b48..0000000000000 --- a/agent/xds/testdata/endpoints/transparent-proxy-with-resolver-redirect-upstream.latest.golden +++ /dev/null @@ -1,63 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.10.1.1", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - }, - { - "endpoint": { - "address": { - "socketAddress": { - "address": "10.20.1.2", - "portValue": 8080 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "clusterName": "google.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "9.9.9.9", - "portValue": 9090 - } - } - }, - "healthStatus": "HEALTHY", - "loadBalancingWeight": 1 - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/api-gateway-with-multiple-hostnames.latest.golden b/agent/xds/testdata/listeners/api-gateway-with-multiple-hostnames.latest.golden deleted file mode 100644 index 6469727f97989..0000000000000 --- a/agent/xds/testdata/listeners/api-gateway-with-multiple-hostnames.latest.golden +++ /dev/null @@ -1,54 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8080 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.http_connection_manager", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "httpFilters": [ - { - "name": "envoy.filters.http.router", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" - } - } - ], - "rds": { - "configSource": { - "ads": {}, - "resourceApiVersion": "V3" - }, - "routeConfigName": "8080" - }, - "statPrefix": "ingress_upstream_8080", - "tracing": { - "randomSampling": {} - }, - "upgradeConfigs": [ - { - "upgradeType": "websocket" - } - ] - } - } - ] - } - ], - "name": "http:1.2.3.4:8080", - "trafficDirection": "OUTBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/connect-proxy-lb-in-resolver.latest.golden b/agent/xds/testdata/listeners/connect-proxy-lb-in-resolver.latest.golden deleted file mode 100644 index 96c6814291eb7..0000000000000 --- a/agent/xds/testdata/listeners/connect-proxy-lb-in-resolver.latest.golden +++ /dev/null @@ -1,137 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.http_connection_manager", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "httpFilters": [ - { - "name": "envoy.filters.http.router", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" - } - } - ], - "rds": { - "configSource": { - "ads": {}, - "resourceApiVersion": "V3" - }, - "routeConfigName": "db" - }, - "statPrefix": "upstream.db.default.default.dc1", - "tracing": { - "randomSampling": {} - }, - "upgradeConfigs": [ - { - "upgradeType": "websocket" - } - ] - } - } - ] - } - ], - "name": "db:127.0.0.1:9191", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.10.10.10", - "portValue": 8181 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.prepared_query_geo-cache" - } - } - ] - } - ], - "name": "prepared_query:geo-cache:127.10.10.10:8181", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "0.0.0.0", - "portValue": 9999 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "local_app", - "statPrefix": "public_listener" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - } - ], - "name": "public_listener:0.0.0.0:9999", - "trafficDirection": "INBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/connect-proxy-resolver-with-lb.latest.golden b/agent/xds/testdata/listeners/connect-proxy-resolver-with-lb.latest.golden deleted file mode 100644 index 96c6814291eb7..0000000000000 --- a/agent/xds/testdata/listeners/connect-proxy-resolver-with-lb.latest.golden +++ /dev/null @@ -1,137 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.http_connection_manager", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "httpFilters": [ - { - "name": "envoy.filters.http.router", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" - } - } - ], - "rds": { - "configSource": { - "ads": {}, - "resourceApiVersion": "V3" - }, - "routeConfigName": "db" - }, - "statPrefix": "upstream.db.default.default.dc1", - "tracing": { - "randomSampling": {} - }, - "upgradeConfigs": [ - { - "upgradeType": "websocket" - } - ] - } - } - ] - } - ], - "name": "db:127.0.0.1:9191", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.10.10.10", - "portValue": 8181 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.prepared_query_geo-cache" - } - } - ] - } - ], - "name": "prepared_query:geo-cache:127.10.10.10:8181", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "0.0.0.0", - "portValue": 9999 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "local_app", - "statPrefix": "public_listener" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - } - ], - "name": "public_listener:0.0.0.0:9999", - "trafficDirection": "INBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/connect-proxy-route-to-lb-resolver.latest.golden b/agent/xds/testdata/listeners/connect-proxy-route-to-lb-resolver.latest.golden deleted file mode 100644 index 96c6814291eb7..0000000000000 --- a/agent/xds/testdata/listeners/connect-proxy-route-to-lb-resolver.latest.golden +++ /dev/null @@ -1,137 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.http_connection_manager", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "httpFilters": [ - { - "name": "envoy.filters.http.router", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" - } - } - ], - "rds": { - "configSource": { - "ads": {}, - "resourceApiVersion": "V3" - }, - "routeConfigName": "db" - }, - "statPrefix": "upstream.db.default.default.dc1", - "tracing": { - "randomSampling": {} - }, - "upgradeConfigs": [ - { - "upgradeType": "websocket" - } - ] - } - } - ] - } - ], - "name": "db:127.0.0.1:9191", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.10.10.10", - "portValue": 8181 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.prepared_query_geo-cache" - } - } - ] - } - ], - "name": "prepared_query:geo-cache:127.10.10.10:8181", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "0.0.0.0", - "portValue": 9999 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "local_app", - "statPrefix": "public_listener" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - } - ], - "name": "public_listener:0.0.0.0:9999", - "trafficDirection": "INBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/connect-proxy-splitter-overweight.latest.golden b/agent/xds/testdata/listeners/connect-proxy-splitter-overweight.latest.golden deleted file mode 100644 index 96c6814291eb7..0000000000000 --- a/agent/xds/testdata/listeners/connect-proxy-splitter-overweight.latest.golden +++ /dev/null @@ -1,137 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.http_connection_manager", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "httpFilters": [ - { - "name": "envoy.filters.http.router", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" - } - } - ], - "rds": { - "configSource": { - "ads": {}, - "resourceApiVersion": "V3" - }, - "routeConfigName": "db" - }, - "statPrefix": "upstream.db.default.default.dc1", - "tracing": { - "randomSampling": {} - }, - "upgradeConfigs": [ - { - "upgradeType": "websocket" - } - ] - } - } - ] - } - ], - "name": "db:127.0.0.1:9191", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.10.10.10", - "portValue": 8181 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.prepared_query_geo-cache" - } - } - ] - } - ], - "name": "prepared_query:geo-cache:127.10.10.10:8181", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "0.0.0.0", - "portValue": 9999 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "local_app", - "statPrefix": "public_listener" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - } - ], - "name": "public_listener:0.0.0.0:9999", - "trafficDirection": "INBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/connect-proxy-with-chain-and-failover.latest.golden b/agent/xds/testdata/listeners/connect-proxy-with-chain-and-failover.latest.golden deleted file mode 100644 index 0254a224d513b..0000000000000 --- a/agent/xds/testdata/listeners/connect-proxy-with-chain-and-failover.latest.golden +++ /dev/null @@ -1,115 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" - } - } - ] - } - ], - "name": "db:127.0.0.1:9191", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.10.10.10", - "portValue": 8181 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.prepared_query_geo-cache" - } - } - ] - } - ], - "name": "prepared_query:geo-cache:127.10.10.10:8181", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "0.0.0.0", - "portValue": 9999 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "local_app", - "statPrefix": "public_listener" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - } - ], - "name": "public_listener:0.0.0.0:9999", - "trafficDirection": "INBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/connect-proxy-with-chain-and-router.latest.golden b/agent/xds/testdata/listeners/connect-proxy-with-chain-and-router.latest.golden deleted file mode 100644 index 96c6814291eb7..0000000000000 --- a/agent/xds/testdata/listeners/connect-proxy-with-chain-and-router.latest.golden +++ /dev/null @@ -1,137 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.http_connection_manager", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "httpFilters": [ - { - "name": "envoy.filters.http.router", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" - } - } - ], - "rds": { - "configSource": { - "ads": {}, - "resourceApiVersion": "V3" - }, - "routeConfigName": "db" - }, - "statPrefix": "upstream.db.default.default.dc1", - "tracing": { - "randomSampling": {} - }, - "upgradeConfigs": [ - { - "upgradeType": "websocket" - } - ] - } - } - ] - } - ], - "name": "db:127.0.0.1:9191", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.10.10.10", - "portValue": 8181 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.prepared_query_geo-cache" - } - } - ] - } - ], - "name": "prepared_query:geo-cache:127.10.10.10:8181", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "0.0.0.0", - "portValue": 9999 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "local_app", - "statPrefix": "public_listener" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - } - ], - "name": "public_listener:0.0.0.0:9999", - "trafficDirection": "INBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/connect-proxy-with-chain-and-splitter.latest.golden b/agent/xds/testdata/listeners/connect-proxy-with-chain-and-splitter.latest.golden deleted file mode 100644 index 96c6814291eb7..0000000000000 --- a/agent/xds/testdata/listeners/connect-proxy-with-chain-and-splitter.latest.golden +++ /dev/null @@ -1,137 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.http_connection_manager", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "httpFilters": [ - { - "name": "envoy.filters.http.router", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" - } - } - ], - "rds": { - "configSource": { - "ads": {}, - "resourceApiVersion": "V3" - }, - "routeConfigName": "db" - }, - "statPrefix": "upstream.db.default.default.dc1", - "tracing": { - "randomSampling": {} - }, - "upgradeConfigs": [ - { - "upgradeType": "websocket" - } - ] - } - } - ] - } - ], - "name": "db:127.0.0.1:9191", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.10.10.10", - "portValue": 8181 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.prepared_query_geo-cache" - } - } - ] - } - ], - "name": "prepared_query:geo-cache:127.10.10.10:8181", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "0.0.0.0", - "portValue": 9999 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "local_app", - "statPrefix": "public_listener" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - } - ], - "name": "public_listener:0.0.0.0:9999", - "trafficDirection": "INBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/connect-proxy-with-chain-http2.latest.golden b/agent/xds/testdata/listeners/connect-proxy-with-chain-http2.latest.golden deleted file mode 100644 index 287fd5d69ae88..0000000000000 --- a/agent/xds/testdata/listeners/connect-proxy-with-chain-http2.latest.golden +++ /dev/null @@ -1,152 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.http_connection_manager", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "http2ProtocolOptions": {}, - "httpFilters": [ - { - "name": "envoy.filters.http.router", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" - } - } - ], - "routeConfig": { - "name": "db", - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "db.default.default.dc1", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ] - }, - "statPrefix": "upstream.db.default.default.dc1", - "tracing": { - "randomSampling": {} - }, - "upgradeConfigs": [ - { - "upgradeType": "websocket" - } - ] - } - } - ] - } - ], - "name": "db:127.0.0.1:9191", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.10.10.10", - "portValue": 8181 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.prepared_query_geo-cache" - } - } - ] - } - ], - "name": "prepared_query:geo-cache:127.10.10.10:8181", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "0.0.0.0", - "portValue": 9999 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "local_app", - "statPrefix": "public_listener" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - } - ], - "name": "public_listener:0.0.0.0:9999", - "trafficDirection": "INBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/connect-proxy-with-chain.latest.golden b/agent/xds/testdata/listeners/connect-proxy-with-chain.latest.golden deleted file mode 100644 index 0254a224d513b..0000000000000 --- a/agent/xds/testdata/listeners/connect-proxy-with-chain.latest.golden +++ /dev/null @@ -1,115 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" - } - } - ] - } - ], - "name": "db:127.0.0.1:9191", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.10.10.10", - "portValue": 8181 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.prepared_query_geo-cache" - } - } - ] - } - ], - "name": "prepared_query:geo-cache:127.10.10.10:8181", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "0.0.0.0", - "portValue": 9999 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "local_app", - "statPrefix": "public_listener" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - } - ], - "name": "public_listener:0.0.0.0:9999", - "trafficDirection": "INBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/connect-proxy-with-default-chain-and-custom-cluster.latest.golden b/agent/xds/testdata/listeners/connect-proxy-with-default-chain-and-custom-cluster.latest.golden deleted file mode 100644 index 0254a224d513b..0000000000000 --- a/agent/xds/testdata/listeners/connect-proxy-with-default-chain-and-custom-cluster.latest.golden +++ /dev/null @@ -1,115 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" - } - } - ] - } - ], - "name": "db:127.0.0.1:9191", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.10.10.10", - "portValue": 8181 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.prepared_query_geo-cache" - } - } - ] - } - ], - "name": "prepared_query:geo-cache:127.10.10.10:8181", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "0.0.0.0", - "portValue": 9999 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "local_app", - "statPrefix": "public_listener" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - } - ], - "name": "public_listener:0.0.0.0:9999", - "trafficDirection": "INBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/connect-proxy-with-grpc-router.latest.golden b/agent/xds/testdata/listeners/connect-proxy-with-grpc-router.latest.golden deleted file mode 100644 index bdfe7aa7bd6fa..0000000000000 --- a/agent/xds/testdata/listeners/connect-proxy-with-grpc-router.latest.golden +++ /dev/null @@ -1,151 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.http_connection_manager", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "http2ProtocolOptions": {}, - "httpFilters": [ - { - "name": "envoy.filters.http.grpc_stats", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.grpc_stats.v3.FilterConfig", - "statsForAllMethods": true - } - }, - { - "name": "envoy.filters.http.grpc_http1_bridge", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.grpc_http1_bridge.v3.Config" - } - }, - { - "name": "envoy.filters.http.router", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" - } - } - ], - "rds": { - "configSource": { - "ads": {}, - "resourceApiVersion": "V3" - }, - "routeConfigName": "db" - }, - "statPrefix": "upstream.db.default.default.dc1", - "tracing": { - "randomSampling": {} - }, - "upgradeConfigs": [ - { - "upgradeType": "websocket" - } - ] - } - } - ] - } - ], - "name": "db:127.0.0.1:9191", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.10.10.10", - "portValue": 8181 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.prepared_query_geo-cache" - } - } - ] - } - ], - "name": "prepared_query:geo-cache:127.10.10.10:8181", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "0.0.0.0", - "portValue": 9999 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "local_app", - "statPrefix": "public_listener" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - } - ], - "name": "public_listener:0.0.0.0:9999", - "trafficDirection": "INBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/connect-proxy-with-jwt-config-entry-with-local.latest.golden b/agent/xds/testdata/listeners/connect-proxy-with-jwt-config-entry-with-local.latest.golden index 0254a224d513b..e543143959774 100644 --- a/agent/xds/testdata/listeners/connect-proxy-with-jwt-config-entry-with-local.latest.golden +++ b/agent/xds/testdata/listeners/connect-proxy-with-jwt-config-entry-with-local.latest.golden @@ -63,19 +63,179 @@ { "filters": [ { - "name": "envoy.filters.network.rbac", + "name": "envoy.filters.network.http_connection_manager", "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "local_app", - "statPrefix": "public_listener" + "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", + "forwardClientCertDetails": "APPEND_FORWARD", + "httpFilters": [ + { + "name": "envoy.filters.http.jwt_authn", + "typedConfig": { + "@type": "type.googleapis.com/envoy.extensions.filters.http.jwt_authn.v3.JwtAuthentication", + "providers": { + "okta": { + "fromCookies": [ + "token" + ], + "fromParams": [ + "token" + ], + "localJwks": { + "inlineString": "hello world\n" + }, + "payloadInMetadata": "jwt_payload_okta" + } + }, + "rules": [ + { + "match": { + "prefix": "/" + }, + "requires": { + "requiresAny": { + "requirements": [ + { + "providerName": "okta" + }, + { + "allowMissingOrFailed": {} + } + ] + } + } + } + ] + } + }, + { + "name": "envoy.filters.http.rbac", + "typedConfig": { + "@type": "type.googleapis.com/envoy.extensions.filters.http.rbac.v3.RBAC", + "rules": {} + } + }, + { + "name": "envoy.filters.http.header_to_metadata", + "typedConfig": { + "@type": "type.googleapis.com/envoy.extensions.filters.http.header_to_metadata.v3.Config", + "requestRules": [ + { + "header": "x-forwarded-client-cert", + "onHeaderPresent": { + "key": "trust-domain", + "metadataNamespace": "consul", + "regexValueRewrite": { + "pattern": { + "googleRe2": {}, + "regex": ".*URI=spiffe://([^/]+.[^/]+)(?:/ap/([^/]+))?/ns/([^/]+)/dc/([^/]+)/svc/([^/;,]+).*" + }, + "substitution": "\\1" + } + } + }, + { + "header": "x-forwarded-client-cert", + "onHeaderPresent": { + "key": "partition", + "metadataNamespace": "consul", + "regexValueRewrite": { + "pattern": { + "googleRe2": {}, + "regex": ".*URI=spiffe://([^/]+.[^/]+)(?:/ap/([^/]+))?/ns/([^/]+)/dc/([^/]+)/svc/([^/;,]+).*" + }, + "substitution": "\\2" + } + } + }, + { + "header": "x-forwarded-client-cert", + "onHeaderPresent": { + "key": "namespace", + "metadataNamespace": "consul", + "regexValueRewrite": { + "pattern": { + "googleRe2": {}, + "regex": ".*URI=spiffe://([^/]+.[^/]+)(?:/ap/([^/]+))?/ns/([^/]+)/dc/([^/]+)/svc/([^/;,]+).*" + }, + "substitution": "\\3" + } + } + }, + { + "header": "x-forwarded-client-cert", + "onHeaderPresent": { + "key": "datacenter", + "metadataNamespace": "consul", + "regexValueRewrite": { + "pattern": { + "googleRe2": {}, + "regex": ".*URI=spiffe://([^/]+.[^/]+)(?:/ap/([^/]+))?/ns/([^/]+)/dc/([^/]+)/svc/([^/;,]+).*" + }, + "substitution": "\\4" + } + } + }, + { + "header": "x-forwarded-client-cert", + "onHeaderPresent": { + "key": "service", + "metadataNamespace": "consul", + "regexValueRewrite": { + "pattern": { + "googleRe2": {}, + "regex": ".*URI=spiffe://([^/]+.[^/]+)(?:/ap/([^/]+))?/ns/([^/]+)/dc/([^/]+)/svc/([^/;,]+).*" + }, + "substitution": "\\5" + } + } + } + ] + } + }, + { + "name": "envoy.filters.http.router", + "typedConfig": { + "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" + } + } + ], + "routeConfig": { + "name": "public_listener", + "virtualHosts": [ + { + "domains": [ + "*" + ], + "name": "public_listener", + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "local_app" + } + } + ] + } + ] + }, + "setCurrentClientCertDetails": { + "cert": true, + "chain": true, + "dns": true, + "subject": true, + "uri": true + }, + "statPrefix": "public_listener", + "tracing": { + "randomSampling": {} + }, + "upgradeConfigs": [ + { + "upgradeType": "websocket" + } + ] } } ], @@ -84,6 +244,9 @@ "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", "commonTlsContext": { + "alpnProtocols": [ + "http/1.1" + ], "tlsCertificates": [ { "certificateChain": { diff --git a/agent/xds/testdata/listeners/connect-proxy-with-jwt-config-entry-with-remote-jwks.latest.golden b/agent/xds/testdata/listeners/connect-proxy-with-jwt-config-entry-with-remote-jwks.latest.golden deleted file mode 100644 index 0254a224d513b..0000000000000 --- a/agent/xds/testdata/listeners/connect-proxy-with-jwt-config-entry-with-remote-jwks.latest.golden +++ /dev/null @@ -1,115 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" - } - } - ] - } - ], - "name": "db:127.0.0.1:9191", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.10.10.10", - "portValue": 8181 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.prepared_query_geo-cache" - } - } - ] - } - ], - "name": "prepared_query:geo-cache:127.10.10.10:8181", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "0.0.0.0", - "portValue": 9999 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "local_app", - "statPrefix": "public_listener" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - } - ], - "name": "public_listener:0.0.0.0:9999", - "trafficDirection": "INBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.latest.golden b/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.latest.golden deleted file mode 100644 index 0254a224d513b..0000000000000 --- a/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.latest.golden +++ /dev/null @@ -1,115 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" - } - } - ] - } - ], - "name": "db:127.0.0.1:9191", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.10.10.10", - "portValue": 8181 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.prepared_query_geo-cache" - } - } - ] - } - ], - "name": "prepared_query:geo-cache:127.10.10.10:8181", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "0.0.0.0", - "portValue": 9999 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "local_app", - "statPrefix": "public_listener" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - } - ], - "name": "public_listener:0.0.0.0:9999", - "trafficDirection": "INBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.latest.golden b/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.latest.golden deleted file mode 100644 index 0254a224d513b..0000000000000 --- a/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.latest.golden +++ /dev/null @@ -1,115 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" - } - } - ] - } - ], - "name": "db:127.0.0.1:9191", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.10.10.10", - "portValue": 8181 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.prepared_query_geo-cache" - } - } - ] - } - ], - "name": "prepared_query:geo-cache:127.10.10.10:8181", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "0.0.0.0", - "portValue": 9999 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "local_app", - "statPrefix": "public_listener" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - } - ], - "name": "public_listener:0.0.0.0:9999", - "trafficDirection": "INBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.latest.golden b/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.latest.golden deleted file mode 100644 index 0254a224d513b..0000000000000 --- a/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.latest.golden +++ /dev/null @@ -1,115 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" - } - } - ] - } - ], - "name": "db:127.0.0.1:9191", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.10.10.10", - "portValue": 8181 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.prepared_query_geo-cache" - } - } - ] - } - ], - "name": "prepared_query:geo-cache:127.10.10.10:8181", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "0.0.0.0", - "portValue": 9999 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "local_app", - "statPrefix": "public_listener" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - } - ], - "name": "public_listener:0.0.0.0:9999", - "trafficDirection": "INBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.latest.golden b/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.latest.golden deleted file mode 100644 index 0254a224d513b..0000000000000 --- a/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.latest.golden +++ /dev/null @@ -1,115 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" - } - } - ] - } - ], - "name": "db:127.0.0.1:9191", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.10.10.10", - "portValue": 8181 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.prepared_query_geo-cache" - } - } - ] - } - ], - "name": "prepared_query:geo-cache:127.10.10.10:8181", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "0.0.0.0", - "portValue": 9999 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "local_app", - "statPrefix": "public_listener" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - } - ], - "name": "public_listener:0.0.0.0:9999", - "trafficDirection": "INBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.latest.golden b/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.latest.golden deleted file mode 100644 index 0254a224d513b..0000000000000 --- a/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.latest.golden +++ /dev/null @@ -1,115 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" - } - } - ] - } - ], - "name": "db:127.0.0.1:9191", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.10.10.10", - "portValue": 8181 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.prepared_query_geo-cache" - } - } - ] - } - ], - "name": "prepared_query:geo-cache:127.10.10.10:8181", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "0.0.0.0", - "portValue": 9999 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "local_app", - "statPrefix": "public_listener" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - } - ], - "name": "public_listener:0.0.0.0:9999", - "trafficDirection": "INBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.latest.golden b/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.latest.golden deleted file mode 100644 index 0254a224d513b..0000000000000 --- a/agent/xds/testdata/listeners/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.latest.golden +++ /dev/null @@ -1,115 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" - } - } - ] - } - ], - "name": "db:127.0.0.1:9191", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.10.10.10", - "portValue": 8181 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.prepared_query_geo-cache" - } - } - ] - } - ], - "name": "prepared_query:geo-cache:127.10.10.10:8181", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "0.0.0.0", - "portValue": 9999 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "local_app", - "statPrefix": "public_listener" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - } - ], - "name": "public_listener:0.0.0.0:9999", - "trafficDirection": "INBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/connect-proxy-with-tls-outgoing-cipher-suites.latest.golden b/agent/xds/testdata/listeners/connect-proxy-with-tls-outgoing-cipher-suites.latest.golden deleted file mode 100644 index 0254a224d513b..0000000000000 --- a/agent/xds/testdata/listeners/connect-proxy-with-tls-outgoing-cipher-suites.latest.golden +++ /dev/null @@ -1,115 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" - } - } - ] - } - ], - "name": "db:127.0.0.1:9191", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.10.10.10", - "portValue": 8181 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.prepared_query_geo-cache" - } - } - ] - } - ], - "name": "prepared_query:geo-cache:127.10.10.10:8181", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "0.0.0.0", - "portValue": 9999 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "local_app", - "statPrefix": "public_listener" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - } - ], - "name": "public_listener:0.0.0.0:9999", - "trafficDirection": "INBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/connect-proxy-with-tls-outgoing-max-version.latest.golden b/agent/xds/testdata/listeners/connect-proxy-with-tls-outgoing-max-version.latest.golden deleted file mode 100644 index 0254a224d513b..0000000000000 --- a/agent/xds/testdata/listeners/connect-proxy-with-tls-outgoing-max-version.latest.golden +++ /dev/null @@ -1,115 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" - } - } - ] - } - ], - "name": "db:127.0.0.1:9191", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.10.10.10", - "portValue": 8181 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.prepared_query_geo-cache" - } - } - ] - } - ], - "name": "prepared_query:geo-cache:127.10.10.10:8181", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "0.0.0.0", - "portValue": 9999 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "local_app", - "statPrefix": "public_listener" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - } - ], - "name": "public_listener:0.0.0.0:9999", - "trafficDirection": "INBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/connect-proxy-with-tls-outgoing-min-version.latest.golden b/agent/xds/testdata/listeners/connect-proxy-with-tls-outgoing-min-version.latest.golden deleted file mode 100644 index 0254a224d513b..0000000000000 --- a/agent/xds/testdata/listeners/connect-proxy-with-tls-outgoing-min-version.latest.golden +++ /dev/null @@ -1,115 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" - } - } - ] - } - ], - "name": "db:127.0.0.1:9191", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.10.10.10", - "portValue": 8181 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.prepared_query_geo-cache" - } - } - ] - } - ], - "name": "prepared_query:geo-cache:127.10.10.10:8181", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "0.0.0.0", - "portValue": 9999 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "local_app", - "statPrefix": "public_listener" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - } - ], - "name": "public_listener:0.0.0.0:9999", - "trafficDirection": "INBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/custom-limits-max-connections-only.latest.golden b/agent/xds/testdata/listeners/custom-limits-max-connections-only.latest.golden deleted file mode 100644 index 0254a224d513b..0000000000000 --- a/agent/xds/testdata/listeners/custom-limits-max-connections-only.latest.golden +++ /dev/null @@ -1,115 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" - } - } - ] - } - ], - "name": "db:127.0.0.1:9191", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.10.10.10", - "portValue": 8181 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.prepared_query_geo-cache" - } - } - ] - } - ], - "name": "prepared_query:geo-cache:127.10.10.10:8181", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "0.0.0.0", - "portValue": 9999 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "local_app", - "statPrefix": "public_listener" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - } - ], - "name": "public_listener:0.0.0.0:9999", - "trafficDirection": "INBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/custom-limits-set-to-zero.latest.golden b/agent/xds/testdata/listeners/custom-limits-set-to-zero.latest.golden deleted file mode 100644 index 0254a224d513b..0000000000000 --- a/agent/xds/testdata/listeners/custom-limits-set-to-zero.latest.golden +++ /dev/null @@ -1,115 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" - } - } - ] - } - ], - "name": "db:127.0.0.1:9191", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.10.10.10", - "portValue": 8181 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.prepared_query_geo-cache" - } - } - ] - } - ], - "name": "prepared_query:geo-cache:127.10.10.10:8181", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "0.0.0.0", - "portValue": 9999 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "local_app", - "statPrefix": "public_listener" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - } - ], - "name": "public_listener:0.0.0.0:9999", - "trafficDirection": "INBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/custom-limits.latest.golden b/agent/xds/testdata/listeners/custom-limits.latest.golden deleted file mode 100644 index 0254a224d513b..0000000000000 --- a/agent/xds/testdata/listeners/custom-limits.latest.golden +++ /dev/null @@ -1,115 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" - } - } - ] - } - ], - "name": "db:127.0.0.1:9191", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.10.10.10", - "portValue": 8181 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.prepared_query_geo-cache" - } - } - ] - } - ], - "name": "prepared_query:geo-cache:127.10.10.10:8181", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "0.0.0.0", - "portValue": 9999 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "local_app", - "statPrefix": "public_listener" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - } - ], - "name": "public_listener:0.0.0.0:9999", - "trafficDirection": "INBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/custom-local-app.latest.golden b/agent/xds/testdata/listeners/custom-local-app.latest.golden deleted file mode 100644 index 0254a224d513b..0000000000000 --- a/agent/xds/testdata/listeners/custom-local-app.latest.golden +++ /dev/null @@ -1,115 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" - } - } - ] - } - ], - "name": "db:127.0.0.1:9191", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.10.10.10", - "portValue": 8181 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.prepared_query_geo-cache" - } - } - ] - } - ], - "name": "prepared_query:geo-cache:127.10.10.10:8181", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "0.0.0.0", - "portValue": 9999 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "local_app", - "statPrefix": "public_listener" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - } - ], - "name": "public_listener:0.0.0.0:9999", - "trafficDirection": "INBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/custom-max-inbound-connections.latest.golden b/agent/xds/testdata/listeners/custom-max-inbound-connections.latest.golden deleted file mode 100644 index 7f5652c047382..0000000000000 --- a/agent/xds/testdata/listeners/custom-max-inbound-connections.latest.golden +++ /dev/null @@ -1,123 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" - } - } - ] - } - ], - "name": "db:127.0.0.1:9191", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.10.10.10", - "portValue": 8181 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.prepared_query_geo-cache" - } - } - ] - } - ], - "name": "prepared_query:geo-cache:127.10.10.10:8181", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "0.0.0.0", - "portValue": 9999 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.connection_limit", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.connection_limit.v3.ConnectionLimit", - "maxConnections": "3456", - "statPrefix": "inbound_connection_limit" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "local_app", - "statPrefix": "public_listener" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - } - ], - "name": "public_listener:0.0.0.0:9999", - "trafficDirection": "INBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/custom-passive-healthcheck-zero-consecutive_5xx.latest.golden b/agent/xds/testdata/listeners/custom-passive-healthcheck-zero-consecutive_5xx.latest.golden deleted file mode 100644 index 0254a224d513b..0000000000000 --- a/agent/xds/testdata/listeners/custom-passive-healthcheck-zero-consecutive_5xx.latest.golden +++ /dev/null @@ -1,115 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" - } - } - ] - } - ], - "name": "db:127.0.0.1:9191", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.10.10.10", - "portValue": 8181 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.prepared_query_geo-cache" - } - } - ] - } - ], - "name": "prepared_query:geo-cache:127.10.10.10:8181", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "0.0.0.0", - "portValue": 9999 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "local_app", - "statPrefix": "public_listener" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - } - ], - "name": "public_listener:0.0.0.0:9999", - "trafficDirection": "INBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/custom-passive-healthcheck.latest.golden b/agent/xds/testdata/listeners/custom-passive-healthcheck.latest.golden deleted file mode 100644 index 0254a224d513b..0000000000000 --- a/agent/xds/testdata/listeners/custom-passive-healthcheck.latest.golden +++ /dev/null @@ -1,115 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" - } - } - ] - } - ], - "name": "db:127.0.0.1:9191", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.10.10.10", - "portValue": 8181 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.prepared_query_geo-cache" - } - } - ] - } - ], - "name": "prepared_query:geo-cache:127.10.10.10:8181", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "0.0.0.0", - "portValue": 9999 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "local_app", - "statPrefix": "public_listener" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - } - ], - "name": "public_listener:0.0.0.0:9999", - "trafficDirection": "INBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/custom-timeouts.latest.golden b/agent/xds/testdata/listeners/custom-timeouts.latest.golden deleted file mode 100644 index 0254a224d513b..0000000000000 --- a/agent/xds/testdata/listeners/custom-timeouts.latest.golden +++ /dev/null @@ -1,115 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" - } - } - ] - } - ], - "name": "db:127.0.0.1:9191", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.10.10.10", - "portValue": 8181 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.prepared_query_geo-cache" - } - } - ] - } - ], - "name": "prepared_query:geo-cache:127.10.10.10:8181", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "0.0.0.0", - "portValue": 9999 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "local_app", - "statPrefix": "public_listener" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - } - ], - "name": "public_listener:0.0.0.0:9999", - "trafficDirection": "INBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/custom-upstream-default-chain.latest.golden b/agent/xds/testdata/listeners/custom-upstream-default-chain.latest.golden deleted file mode 100644 index 0254a224d513b..0000000000000 --- a/agent/xds/testdata/listeners/custom-upstream-default-chain.latest.golden +++ /dev/null @@ -1,115 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" - } - } - ] - } - ], - "name": "db:127.0.0.1:9191", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.10.10.10", - "portValue": 8181 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.prepared_query_geo-cache" - } - } - ] - } - ], - "name": "prepared_query:geo-cache:127.10.10.10:8181", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "0.0.0.0", - "portValue": 9999 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "local_app", - "statPrefix": "public_listener" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - } - ], - "name": "public_listener:0.0.0.0:9999", - "trafficDirection": "INBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/custom-upstream-with-prepared-query.latest.golden b/agent/xds/testdata/listeners/custom-upstream-with-prepared-query.latest.golden index 41d2e0f4ff241..ca92cf2177a55 100644 --- a/agent/xds/testdata/listeners/custom-upstream-with-prepared-query.latest.golden +++ b/agent/xds/testdata/listeners/custom-upstream-with-prepared-query.latest.golden @@ -5,8 +5,8 @@ "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", "address": { "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 + "address": "11.11.11.11", + "portValue": 11111 } }, "filterChains": [ @@ -16,15 +16,14 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.prepared_query_db" + "cluster": "random-cluster", + "statPrefix": "foo-stats" } } ] } ], - "name": "prepared_query:db:127.0.0.1:9191", - "trafficDirection": "OUTBOUND" + "name": "db:custom-upstream" }, { "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", @@ -38,48 +37,11 @@ { "filters": [ { - "name": "envoy.filters.network.http_connection_manager", + "name": "envoy.filters.network.tcp_proxy", "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "http2ProtocolOptions": {}, - "httpFilters": [ - { - "name": "envoy.filters.http.router", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" - } - } - ], - "routeConfig": { - "name": "prepared_query:geo-cache", - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "prepared_query:geo-cache", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ] - }, - "statPrefix": "upstream.prepared_query_geo-cache", - "tracing": { - "randomSampling": {} - }, - "upgradeConfigs": [ - { - "upgradeType": "websocket" - } - ] + "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", + "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", + "statPrefix": "upstream.prepared_query_geo-cache" } } ] diff --git a/agent/xds/testdata/listeners/custom-upstream.latest.golden b/agent/xds/testdata/listeners/custom-upstream.latest.golden index 0254a224d513b..ca92cf2177a55 100644 --- a/agent/xds/testdata/listeners/custom-upstream.latest.golden +++ b/agent/xds/testdata/listeners/custom-upstream.latest.golden @@ -5,8 +5,8 @@ "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", "address": { "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 + "address": "11.11.11.11", + "portValue": 11111 } }, "filterChains": [ @@ -16,15 +16,14 @@ "name": "envoy.filters.network.tcp_proxy", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" + "cluster": "random-cluster", + "statPrefix": "foo-stats" } } ] } ], - "name": "db:127.0.0.1:9191", - "trafficDirection": "OUTBOUND" + "name": "db:custom-upstream" }, { "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", diff --git a/agent/xds/testdata/listeners/downstream-service-with-unix-sockets.latest.golden b/agent/xds/testdata/listeners/downstream-service-with-unix-sockets.latest.golden deleted file mode 100644 index 78526457cc956..0000000000000 --- a/agent/xds/testdata/listeners/downstream-service-with-unix-sockets.latest.golden +++ /dev/null @@ -1,115 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" - } - } - ] - } - ], - "name": "db:127.0.0.1:9191", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "127.10.10.10", - "portValue": 8181 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "geo-cache.default.dc1.query.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.prepared_query_geo-cache" - } - } - ] - } - ], - "name": "prepared_query:geo-cache:127.10.10.10:8181", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "0.0.0.0", - "portValue": 0 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "local_app", - "statPrefix": "public_listener" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - } - ], - "name": "public_listener:0.0.0.0:0", - "trafficDirection": "INBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/expose-checks.latest.golden b/agent/xds/testdata/listeners/expose-checks.latest.golden deleted file mode 100644 index 2299f061ddec7..0000000000000 --- a/agent/xds/testdata/listeners/expose-checks.latest.golden +++ /dev/null @@ -1,142 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 21500 - } - }, - "filterChains": [ - { - "filterChainMatch": { - "sourcePrefixRanges": [ - { - "addressPrefix": "127.0.0.1", - "prefixLen": 8 - }, - { - "addressPrefix": "192.0.2.1", - "prefixLen": 32 - }, - { - "addressPrefix": "::1", - "prefixLen": 128 - } - ] - }, - "filters": [ - { - "name": "envoy.filters.network.http_connection_manager", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "httpFilters": [ - { - "name": "envoy.filters.http.router", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" - } - } - ], - "routeConfig": { - "name": "exposed_path_filter_debug_21500", - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "exposed_path_filter_debug_21500", - "routes": [ - { - "match": { - "path": "/debug" - }, - "route": { - "cluster": "exposed_cluster_8181" - } - } - ] - } - ] - }, - "statPrefix": "exposed_path_filter_debug_21500", - "tracing": { - "randomSampling": {} - }, - "upgradeConfigs": [ - { - "upgradeType": "websocket" - } - ] - } - } - ] - } - ], - "name": "exposed_path_debug:1.2.3.4:21500", - "trafficDirection": "INBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8080 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "local_app", - "statPrefix": "public_listener" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - } - ], - "name": "public_listener:1.2.3.4:8080", - "trafficDirection": "INBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/expose-paths-grpc-new-cluster-http1.latest.golden b/agent/xds/testdata/listeners/expose-paths-grpc-new-cluster-http1.latest.golden deleted file mode 100644 index 90cb383d20c45..0000000000000 --- a/agent/xds/testdata/listeners/expose-paths-grpc-new-cluster-http1.latest.golden +++ /dev/null @@ -1,179 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 21500 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.http_connection_manager", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "httpFilters": [ - { - "name": "envoy.filters.http.router", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" - } - } - ], - "routeConfig": { - "name": "exposed_path_filter_healthz_21500", - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "exposed_path_filter_healthz_21500", - "routes": [ - { - "match": { - "path": "/healthz" - }, - "route": { - "cluster": "exposed_cluster_8090" - } - } - ] - } - ] - }, - "statPrefix": "exposed_path_filter_healthz_21500", - "tracing": { - "randomSampling": {} - }, - "upgradeConfigs": [ - { - "upgradeType": "websocket" - } - ] - } - } - ] - } - ], - "name": "exposed_path_healthz:1.2.3.4:21500", - "trafficDirection": "INBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8080 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.http_connection_manager", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "http2ProtocolOptions": {}, - "httpFilters": [ - { - "name": "envoy.filters.http.grpc_stats", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.grpc_stats.v3.FilterConfig", - "statsForAllMethods": true - } - }, - { - "name": "envoy.filters.http.grpc_http1_bridge", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.grpc_http1_bridge.v3.Config" - } - }, - { - "name": "envoy.filters.http.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.rbac.v3.RBAC", - "rules": {} - } - }, - { - "name": "envoy.filters.http.router", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" - } - } - ], - "routeConfig": { - "name": "public_listener", - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "local_app" - } - } - ] - } - ] - }, - "statPrefix": "public_listener", - "tracing": { - "randomSampling": {} - }, - "upgradeConfigs": [ - { - "upgradeType": "websocket" - } - ] - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "alpnProtocols": [ - "h2", - "http/1.1" - ], - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - } - ], - "name": "public_listener:1.2.3.4:8080", - "trafficDirection": "INBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/ingress-config-entry-nil.latest.golden b/agent/xds/testdata/listeners/ingress-config-entry-nil.latest.golden deleted file mode 100644 index 97cdec41ef13e..0000000000000 --- a/agent/xds/testdata/listeners/ingress-config-entry-nil.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/ingress-defaults-no-chain.latest.golden b/agent/xds/testdata/listeners/ingress-defaults-no-chain.latest.golden deleted file mode 100644 index 97cdec41ef13e..0000000000000 --- a/agent/xds/testdata/listeners/ingress-defaults-no-chain.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/ingress-gateway-with-tls-outgoing-cipher-suites.latest.golden b/agent/xds/testdata/listeners/ingress-gateway-with-tls-outgoing-cipher-suites.latest.golden deleted file mode 100644 index 068e01983c926..0000000000000 --- a/agent/xds/testdata/listeners/ingress-gateway-with-tls-outgoing-cipher-suites.latest.golden +++ /dev/null @@ -1,32 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8080 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" - } - } - ] - } - ], - "name": "db:1.2.3.4:8080", - "trafficDirection": "OUTBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/ingress-gateway-with-tls-outgoing-max-version.latest.golden b/agent/xds/testdata/listeners/ingress-gateway-with-tls-outgoing-max-version.latest.golden deleted file mode 100644 index 068e01983c926..0000000000000 --- a/agent/xds/testdata/listeners/ingress-gateway-with-tls-outgoing-max-version.latest.golden +++ /dev/null @@ -1,32 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8080 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" - } - } - ] - } - ], - "name": "db:1.2.3.4:8080", - "trafficDirection": "OUTBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/ingress-gateway-with-tls-outgoing-min-version.latest.golden b/agent/xds/testdata/listeners/ingress-gateway-with-tls-outgoing-min-version.latest.golden deleted file mode 100644 index 068e01983c926..0000000000000 --- a/agent/xds/testdata/listeners/ingress-gateway-with-tls-outgoing-min-version.latest.golden +++ /dev/null @@ -1,32 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8080 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" - } - } - ] - } - ], - "name": "db:1.2.3.4:8080", - "trafficDirection": "OUTBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/ingress-lb-in-resolver.latest.golden b/agent/xds/testdata/listeners/ingress-lb-in-resolver.latest.golden deleted file mode 100644 index 6469727f97989..0000000000000 --- a/agent/xds/testdata/listeners/ingress-lb-in-resolver.latest.golden +++ /dev/null @@ -1,54 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8080 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.http_connection_manager", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "httpFilters": [ - { - "name": "envoy.filters.http.router", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" - } - } - ], - "rds": { - "configSource": { - "ads": {}, - "resourceApiVersion": "V3" - }, - "routeConfigName": "8080" - }, - "statPrefix": "ingress_upstream_8080", - "tracing": { - "randomSampling": {} - }, - "upgradeConfigs": [ - { - "upgradeType": "websocket" - } - ] - } - } - ] - } - ], - "name": "http:1.2.3.4:8080", - "trafficDirection": "OUTBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/ingress-multiple-listeners-duplicate-service.latest.golden b/agent/xds/testdata/listeners/ingress-multiple-listeners-duplicate-service.latest.golden deleted file mode 100644 index 63affa4498850..0000000000000 --- a/agent/xds/testdata/listeners/ingress-multiple-listeners-duplicate-service.latest.golden +++ /dev/null @@ -1,101 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 443 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.http_connection_manager", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "httpFilters": [ - { - "name": "envoy.filters.http.router", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" - } - } - ], - "rds": { - "configSource": { - "ads": {}, - "resourceApiVersion": "V3" - }, - "routeConfigName": "443" - }, - "statPrefix": "ingress_upstream_443", - "tracing": { - "randomSampling": {} - }, - "upgradeConfigs": [ - { - "upgradeType": "websocket" - } - ] - } - } - ] - } - ], - "name": "http:1.2.3.4:443", - "trafficDirection": "OUTBOUND" - }, - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8080 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.http_connection_manager", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "httpFilters": [ - { - "name": "envoy.filters.http.router", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" - } - } - ], - "rds": { - "configSource": { - "ads": {}, - "resourceApiVersion": "V3" - }, - "routeConfigName": "8080" - }, - "statPrefix": "ingress_upstream_8080", - "tracing": { - "randomSampling": {} - }, - "upgradeConfigs": [ - { - "upgradeType": "websocket" - } - ] - } - } - ] - } - ], - "name": "http:1.2.3.4:8080", - "trafficDirection": "OUTBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/ingress-with-chain-and-failover-to-cluster-peer.latest.golden b/agent/xds/testdata/listeners/ingress-with-chain-and-failover-to-cluster-peer.latest.golden deleted file mode 100644 index 068e01983c926..0000000000000 --- a/agent/xds/testdata/listeners/ingress-with-chain-and-failover-to-cluster-peer.latest.golden +++ /dev/null @@ -1,32 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8080 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" - } - } - ] - } - ], - "name": "db:1.2.3.4:8080", - "trafficDirection": "OUTBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/ingress-with-chain-and-failover.latest.golden b/agent/xds/testdata/listeners/ingress-with-chain-and-failover.latest.golden deleted file mode 100644 index 068e01983c926..0000000000000 --- a/agent/xds/testdata/listeners/ingress-with-chain-and-failover.latest.golden +++ /dev/null @@ -1,32 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8080 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" - } - } - ] - } - ], - "name": "db:1.2.3.4:8080", - "trafficDirection": "OUTBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/ingress-with-chain-and-router-header-manip.latest.golden b/agent/xds/testdata/listeners/ingress-with-chain-and-router-header-manip.latest.golden deleted file mode 100644 index 6469727f97989..0000000000000 --- a/agent/xds/testdata/listeners/ingress-with-chain-and-router-header-manip.latest.golden +++ /dev/null @@ -1,54 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8080 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.http_connection_manager", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "httpFilters": [ - { - "name": "envoy.filters.http.router", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" - } - } - ], - "rds": { - "configSource": { - "ads": {}, - "resourceApiVersion": "V3" - }, - "routeConfigName": "8080" - }, - "statPrefix": "ingress_upstream_8080", - "tracing": { - "randomSampling": {} - }, - "upgradeConfigs": [ - { - "upgradeType": "websocket" - } - ] - } - } - ] - } - ], - "name": "http:1.2.3.4:8080", - "trafficDirection": "OUTBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/ingress-with-chain-and-router.latest.golden b/agent/xds/testdata/listeners/ingress-with-chain-and-router.latest.golden deleted file mode 100644 index 6469727f97989..0000000000000 --- a/agent/xds/testdata/listeners/ingress-with-chain-and-router.latest.golden +++ /dev/null @@ -1,54 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8080 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.http_connection_manager", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "httpFilters": [ - { - "name": "envoy.filters.http.router", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" - } - } - ], - "rds": { - "configSource": { - "ads": {}, - "resourceApiVersion": "V3" - }, - "routeConfigName": "8080" - }, - "statPrefix": "ingress_upstream_8080", - "tracing": { - "randomSampling": {} - }, - "upgradeConfigs": [ - { - "upgradeType": "websocket" - } - ] - } - } - ] - } - ], - "name": "http:1.2.3.4:8080", - "trafficDirection": "OUTBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/ingress-with-chain-and-splitter.latest.golden b/agent/xds/testdata/listeners/ingress-with-chain-and-splitter.latest.golden deleted file mode 100644 index 6469727f97989..0000000000000 --- a/agent/xds/testdata/listeners/ingress-with-chain-and-splitter.latest.golden +++ /dev/null @@ -1,54 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8080 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.http_connection_manager", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "httpFilters": [ - { - "name": "envoy.filters.http.router", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" - } - } - ], - "rds": { - "configSource": { - "ads": {}, - "resourceApiVersion": "V3" - }, - "routeConfigName": "8080" - }, - "statPrefix": "ingress_upstream_8080", - "tracing": { - "randomSampling": {} - }, - "upgradeConfigs": [ - { - "upgradeType": "websocket" - } - ] - } - } - ] - } - ], - "name": "http:1.2.3.4:8080", - "trafficDirection": "OUTBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/ingress-with-chain.latest.golden b/agent/xds/testdata/listeners/ingress-with-chain.latest.golden deleted file mode 100644 index 068e01983c926..0000000000000 --- a/agent/xds/testdata/listeners/ingress-with-chain.latest.golden +++ /dev/null @@ -1,32 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8080 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" - } - } - ] - } - ], - "name": "db:1.2.3.4:8080", - "trafficDirection": "OUTBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/ingress-with-defaults-passive-health-check.latest.golden b/agent/xds/testdata/listeners/ingress-with-defaults-passive-health-check.latest.golden deleted file mode 100644 index 068e01983c926..0000000000000 --- a/agent/xds/testdata/listeners/ingress-with-defaults-passive-health-check.latest.golden +++ /dev/null @@ -1,32 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8080 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" - } - } - ] - } - ], - "name": "db:1.2.3.4:8080", - "trafficDirection": "OUTBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/ingress-with-defaults-service-max-connections.latest.golden b/agent/xds/testdata/listeners/ingress-with-defaults-service-max-connections.latest.golden deleted file mode 100644 index 068e01983c926..0000000000000 --- a/agent/xds/testdata/listeners/ingress-with-defaults-service-max-connections.latest.golden +++ /dev/null @@ -1,32 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8080 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" - } - } - ] - } - ], - "name": "db:1.2.3.4:8080", - "trafficDirection": "OUTBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/ingress-with-grpc-router.latest.golden b/agent/xds/testdata/listeners/ingress-with-grpc-router.latest.golden deleted file mode 100644 index 6469727f97989..0000000000000 --- a/agent/xds/testdata/listeners/ingress-with-grpc-router.latest.golden +++ /dev/null @@ -1,54 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8080 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.http_connection_manager", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "httpFilters": [ - { - "name": "envoy.filters.http.router", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" - } - } - ], - "rds": { - "configSource": { - "ads": {}, - "resourceApiVersion": "V3" - }, - "routeConfigName": "8080" - }, - "statPrefix": "ingress_upstream_8080", - "tracing": { - "randomSampling": {} - }, - "upgradeConfigs": [ - { - "upgradeType": "websocket" - } - ] - } - } - ] - } - ], - "name": "http:1.2.3.4:8080", - "trafficDirection": "OUTBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/ingress-with-overwrite-defaults-passive-health-check.latest.golden b/agent/xds/testdata/listeners/ingress-with-overwrite-defaults-passive-health-check.latest.golden deleted file mode 100644 index 068e01983c926..0000000000000 --- a/agent/xds/testdata/listeners/ingress-with-overwrite-defaults-passive-health-check.latest.golden +++ /dev/null @@ -1,32 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8080 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" - } - } - ] - } - ], - "name": "db:1.2.3.4:8080", - "trafficDirection": "OUTBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/ingress-with-overwrite-defaults-service-max-connections.latest.golden b/agent/xds/testdata/listeners/ingress-with-overwrite-defaults-service-max-connections.latest.golden deleted file mode 100644 index 068e01983c926..0000000000000 --- a/agent/xds/testdata/listeners/ingress-with-overwrite-defaults-service-max-connections.latest.golden +++ /dev/null @@ -1,32 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8080 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" - } - } - ] - } - ], - "name": "db:1.2.3.4:8080", - "trafficDirection": "OUTBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/ingress-with-sds-listener-level-wildcard.latest.golden b/agent/xds/testdata/listeners/ingress-with-sds-listener-level-wildcard.latest.golden deleted file mode 100644 index 309e66dc0ed4b..0000000000000 --- a/agent/xds/testdata/listeners/ingress-with-sds-listener-level-wildcard.latest.golden +++ /dev/null @@ -1,87 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.http_connection_manager", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "httpFilters": [ - { - "name": "envoy.filters.http.router", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" - } - } - ], - "rds": { - "configSource": { - "ads": {}, - "resourceApiVersion": "V3" - }, - "routeConfigName": "9191" - }, - "statPrefix": "ingress_upstream_9191", - "tracing": { - "randomSampling": {} - }, - "upgradeConfigs": [ - { - "upgradeType": "websocket" - } - ] - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "alpnProtocols": [ - "http/1.1" - ], - "tlsCertificateSdsSecretConfigs": [ - { - "name": "listener-cert", - "sdsConfig": { - "apiConfigSource": { - "apiType": "GRPC", - "grpcServices": [ - { - "envoyGrpc": { - "clusterName": "listener-cluster" - }, - "timeout": "5s" - } - ], - "transportApiVersion": "V3" - }, - "resourceApiVersion": "V3" - } - } - ], - "tlsParams": {} - }, - "requireClientCertificate": false - } - } - } - ], - "name": "http:1.2.3.4:9191", - "trafficDirection": "OUTBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/ingress-with-sds-listener-level.latest.golden b/agent/xds/testdata/listeners/ingress-with-sds-listener-level.latest.golden deleted file mode 100644 index 309e66dc0ed4b..0000000000000 --- a/agent/xds/testdata/listeners/ingress-with-sds-listener-level.latest.golden +++ /dev/null @@ -1,87 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.http_connection_manager", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "httpFilters": [ - { - "name": "envoy.filters.http.router", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" - } - } - ], - "rds": { - "configSource": { - "ads": {}, - "resourceApiVersion": "V3" - }, - "routeConfigName": "9191" - }, - "statPrefix": "ingress_upstream_9191", - "tracing": { - "randomSampling": {} - }, - "upgradeConfigs": [ - { - "upgradeType": "websocket" - } - ] - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "alpnProtocols": [ - "http/1.1" - ], - "tlsCertificateSdsSecretConfigs": [ - { - "name": "listener-cert", - "sdsConfig": { - "apiConfigSource": { - "apiType": "GRPC", - "grpcServices": [ - { - "envoyGrpc": { - "clusterName": "listener-cluster" - }, - "timeout": "5s" - } - ], - "transportApiVersion": "V3" - }, - "resourceApiVersion": "V3" - } - } - ], - "tlsParams": {} - }, - "requireClientCertificate": false - } - } - } - ], - "name": "http:1.2.3.4:9191", - "trafficDirection": "OUTBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/ingress-with-sds-service-level-2.latest.golden b/agent/xds/testdata/listeners/ingress-with-sds-service-level-2.latest.golden deleted file mode 100644 index db099e6b7d370..0000000000000 --- a/agent/xds/testdata/listeners/ingress-with-sds-service-level-2.latest.golden +++ /dev/null @@ -1,172 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filterChainMatch": { - "serverNames": [ - "www.example.com" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.http_connection_manager", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "httpFilters": [ - { - "name": "envoy.filters.http.router", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" - } - } - ], - "rds": { - "configSource": { - "ads": {}, - "resourceApiVersion": "V3" - }, - "routeConfigName": "9191_web" - }, - "statPrefix": "ingress_upstream_9191_web", - "tracing": { - "randomSampling": {} - }, - "upgradeConfigs": [ - { - "upgradeType": "websocket" - } - ] - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "alpnProtocols": [ - "http/1.1" - ], - "tlsCertificateSdsSecretConfigs": [ - { - "name": "www-cert", - "sdsConfig": { - "apiConfigSource": { - "apiType": "GRPC", - "grpcServices": [ - { - "envoyGrpc": { - "clusterName": "web-cluster" - }, - "timeout": "5s" - } - ], - "transportApiVersion": "V3" - }, - "resourceApiVersion": "V3" - } - } - ], - "tlsParams": {} - }, - "requireClientCertificate": false - } - } - }, - { - "filterChainMatch": { - "serverNames": [ - "foo.example.com" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.http_connection_manager", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "httpFilters": [ - { - "name": "envoy.filters.http.router", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" - } - } - ], - "rds": { - "configSource": { - "ads": {}, - "resourceApiVersion": "V3" - }, - "routeConfigName": "9191_foo" - }, - "statPrefix": "ingress_upstream_9191_foo", - "tracing": { - "randomSampling": {} - }, - "upgradeConfigs": [ - { - "upgradeType": "websocket" - } - ] - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "alpnProtocols": [ - "http/1.1" - ], - "tlsCertificateSdsSecretConfigs": [ - { - "name": "foo-cert", - "sdsConfig": { - "apiConfigSource": { - "apiType": "GRPC", - "grpcServices": [ - { - "envoyGrpc": { - "clusterName": "foo-cluster" - }, - "timeout": "5s" - } - ], - "transportApiVersion": "V3" - }, - "resourceApiVersion": "V3" - } - } - ], - "tlsParams": {} - }, - "requireClientCertificate": false - } - } - } - ], - "listenerFilters": [ - { - "name": "envoy.filters.listener.tls_inspector", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.listener.tls_inspector.v3.TlsInspector" - } - } - ], - "name": "http:1.2.3.4:9191", - "trafficDirection": "OUTBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/ingress-with-sds-service-level-mixed-tls.latest.golden b/agent/xds/testdata/listeners/ingress-with-sds-service-level-mixed-tls.latest.golden deleted file mode 100644 index dca1e584ae533..0000000000000 --- a/agent/xds/testdata/listeners/ingress-with-sds-service-level-mixed-tls.latest.golden +++ /dev/null @@ -1,134 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 9191 - } - }, - "filterChains": [ - { - "filterChainMatch": { - "serverNames": [ - "www.example.com" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.http_connection_manager", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "httpFilters": [ - { - "name": "envoy.filters.http.router", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" - } - } - ], - "rds": { - "configSource": { - "ads": {}, - "resourceApiVersion": "V3" - }, - "routeConfigName": "9191_web" - }, - "statPrefix": "ingress_upstream_9191_web", - "tracing": { - "randomSampling": {} - }, - "upgradeConfigs": [ - { - "upgradeType": "websocket" - } - ] - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "alpnProtocols": [ - "http/1.1" - ], - "tlsCertificateSdsSecretConfigs": [ - { - "name": "www-cert", - "sdsConfig": { - "apiConfigSource": { - "apiType": "GRPC", - "grpcServices": [ - { - "envoyGrpc": { - "clusterName": "web-cluster" - }, - "timeout": "5s" - } - ], - "transportApiVersion": "V3" - }, - "resourceApiVersion": "V3" - } - } - ], - "tlsParams": {} - }, - "requireClientCertificate": false - } - } - }, - { - "filters": [ - { - "name": "envoy.filters.network.http_connection_manager", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "httpFilters": [ - { - "name": "envoy.filters.http.router", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" - } - } - ], - "rds": { - "configSource": { - "ads": {}, - "resourceApiVersion": "V3" - }, - "routeConfigName": "9191" - }, - "statPrefix": "ingress_upstream_9191", - "tracing": { - "randomSampling": {} - }, - "upgradeConfigs": [ - { - "upgradeType": "websocket" - } - ] - } - } - ] - } - ], - "listenerFilters": [ - { - "name": "envoy.filters.listener.tls_inspector", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.listener.tls_inspector.v3.TlsInspector" - } - } - ], - "name": "http:1.2.3.4:9191", - "trafficDirection": "OUTBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/ingress-with-service-max-connections.latest.golden b/agent/xds/testdata/listeners/ingress-with-service-max-connections.latest.golden deleted file mode 100644 index 068e01983c926..0000000000000 --- a/agent/xds/testdata/listeners/ingress-with-service-max-connections.latest.golden +++ /dev/null @@ -1,32 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8080 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" - } - } - ] - } - ], - "name": "db:1.2.3.4:8080", - "trafficDirection": "OUTBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/ingress-with-service-passive-health-check.latest.golden b/agent/xds/testdata/listeners/ingress-with-service-passive-health-check.latest.golden deleted file mode 100644 index 068e01983c926..0000000000000 --- a/agent/xds/testdata/listeners/ingress-with-service-passive-health-check.latest.golden +++ /dev/null @@ -1,32 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8080 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" - } - } - ] - } - ], - "name": "db:1.2.3.4:8080", - "trafficDirection": "OUTBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/ingress-with-tcp-chain-double-failover-through-local-gateway-triggered.latest.golden b/agent/xds/testdata/listeners/ingress-with-tcp-chain-double-failover-through-local-gateway-triggered.latest.golden deleted file mode 100644 index 068e01983c926..0000000000000 --- a/agent/xds/testdata/listeners/ingress-with-tcp-chain-double-failover-through-local-gateway-triggered.latest.golden +++ /dev/null @@ -1,32 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8080 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" - } - } - ] - } - ], - "name": "db:1.2.3.4:8080", - "trafficDirection": "OUTBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/ingress-with-tcp-chain-double-failover-through-local-gateway.latest.golden b/agent/xds/testdata/listeners/ingress-with-tcp-chain-double-failover-through-local-gateway.latest.golden deleted file mode 100644 index 068e01983c926..0000000000000 --- a/agent/xds/testdata/listeners/ingress-with-tcp-chain-double-failover-through-local-gateway.latest.golden +++ /dev/null @@ -1,32 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8080 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" - } - } - ] - } - ], - "name": "db:1.2.3.4:8080", - "trafficDirection": "OUTBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/ingress-with-tcp-chain-double-failover-through-remote-gateway-triggered.latest.golden b/agent/xds/testdata/listeners/ingress-with-tcp-chain-double-failover-through-remote-gateway-triggered.latest.golden deleted file mode 100644 index 068e01983c926..0000000000000 --- a/agent/xds/testdata/listeners/ingress-with-tcp-chain-double-failover-through-remote-gateway-triggered.latest.golden +++ /dev/null @@ -1,32 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8080 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" - } - } - ] - } - ], - "name": "db:1.2.3.4:8080", - "trafficDirection": "OUTBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/ingress-with-tcp-chain-double-failover-through-remote-gateway.latest.golden b/agent/xds/testdata/listeners/ingress-with-tcp-chain-double-failover-through-remote-gateway.latest.golden deleted file mode 100644 index 068e01983c926..0000000000000 --- a/agent/xds/testdata/listeners/ingress-with-tcp-chain-double-failover-through-remote-gateway.latest.golden +++ /dev/null @@ -1,32 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8080 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" - } - } - ] - } - ], - "name": "db:1.2.3.4:8080", - "trafficDirection": "OUTBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-local-gateway-triggered.latest.golden b/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-local-gateway-triggered.latest.golden deleted file mode 100644 index 068e01983c926..0000000000000 --- a/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-local-gateway-triggered.latest.golden +++ /dev/null @@ -1,32 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8080 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" - } - } - ] - } - ], - "name": "db:1.2.3.4:8080", - "trafficDirection": "OUTBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-remote-gateway-triggered.latest.golden b/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-remote-gateway-triggered.latest.golden deleted file mode 100644 index 068e01983c926..0000000000000 --- a/agent/xds/testdata/listeners/ingress-with-tcp-chain-failover-through-remote-gateway-triggered.latest.golden +++ /dev/null @@ -1,32 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8080 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" - } - } - ] - } - ], - "name": "db:1.2.3.4:8080", - "trafficDirection": "OUTBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/mesh-gateway-default-service-subset.latest.golden b/agent/xds/testdata/listeners/mesh-gateway-default-service-subset.latest.golden deleted file mode 100644 index 3b77ccca9b996..0000000000000 --- a/agent/xds/testdata/listeners/mesh-gateway-default-service-subset.latest.golden +++ /dev/null @@ -1,96 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8443 - } - }, - "filterChains": [ - { - "filterChainMatch": { - "serverNames": [ - "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "mesh_gateway_remote.default.dc2" - } - } - ] - }, - { - "filterChainMatch": { - "serverNames": [ - "*.dc4.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "mesh_gateway_remote.default.dc4" - } - } - ] - }, - { - "filterChainMatch": { - "serverNames": [ - "*.dc6.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "mesh_gateway_remote.default.dc6" - } - } - ] - }, - { - "filters": [ - { - "name": "envoy.filters.network.sni_cluster", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.sni_cluster.v3.SniCluster" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "", - "statPrefix": "mesh_gateway_local.default" - } - } - ] - } - ], - "listenerFilters": [ - { - "name": "envoy.filters.listener.tls_inspector", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.listener.tls_inspector.v3.TlsInspector" - } - } - ], - "name": "default:1.2.3.4:8443" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/mesh-gateway-hash-lb-ignored.latest.golden b/agent/xds/testdata/listeners/mesh-gateway-hash-lb-ignored.latest.golden deleted file mode 100644 index 3b77ccca9b996..0000000000000 --- a/agent/xds/testdata/listeners/mesh-gateway-hash-lb-ignored.latest.golden +++ /dev/null @@ -1,96 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8443 - } - }, - "filterChains": [ - { - "filterChainMatch": { - "serverNames": [ - "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "mesh_gateway_remote.default.dc2" - } - } - ] - }, - { - "filterChainMatch": { - "serverNames": [ - "*.dc4.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "mesh_gateway_remote.default.dc4" - } - } - ] - }, - { - "filterChainMatch": { - "serverNames": [ - "*.dc6.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "mesh_gateway_remote.default.dc6" - } - } - ] - }, - { - "filters": [ - { - "name": "envoy.filters.network.sni_cluster", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.sni_cluster.v3.SniCluster" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "", - "statPrefix": "mesh_gateway_local.default" - } - } - ] - } - ], - "listenerFilters": [ - { - "name": "envoy.filters.listener.tls_inspector", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.listener.tls_inspector.v3.TlsInspector" - } - } - ], - "name": "default:1.2.3.4:8443" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/mesh-gateway-ignore-extra-resolvers.latest.golden b/agent/xds/testdata/listeners/mesh-gateway-ignore-extra-resolvers.latest.golden deleted file mode 100644 index 3b77ccca9b996..0000000000000 --- a/agent/xds/testdata/listeners/mesh-gateway-ignore-extra-resolvers.latest.golden +++ /dev/null @@ -1,96 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8443 - } - }, - "filterChains": [ - { - "filterChainMatch": { - "serverNames": [ - "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "mesh_gateway_remote.default.dc2" - } - } - ] - }, - { - "filterChainMatch": { - "serverNames": [ - "*.dc4.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "mesh_gateway_remote.default.dc4" - } - } - ] - }, - { - "filterChainMatch": { - "serverNames": [ - "*.dc6.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "mesh_gateway_remote.default.dc6" - } - } - ] - }, - { - "filters": [ - { - "name": "envoy.filters.network.sni_cluster", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.sni_cluster.v3.SniCluster" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "", - "statPrefix": "mesh_gateway_local.default" - } - } - ] - } - ], - "listenerFilters": [ - { - "name": "envoy.filters.listener.tls_inspector", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.listener.tls_inspector.v3.TlsInspector" - } - } - ], - "name": "default:1.2.3.4:8443" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/mesh-gateway-newer-information-in-federation-states.latest.golden b/agent/xds/testdata/listeners/mesh-gateway-newer-information-in-federation-states.latest.golden deleted file mode 100644 index 3b77ccca9b996..0000000000000 --- a/agent/xds/testdata/listeners/mesh-gateway-newer-information-in-federation-states.latest.golden +++ /dev/null @@ -1,96 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8443 - } - }, - "filterChains": [ - { - "filterChainMatch": { - "serverNames": [ - "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "mesh_gateway_remote.default.dc2" - } - } - ] - }, - { - "filterChainMatch": { - "serverNames": [ - "*.dc4.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "mesh_gateway_remote.default.dc4" - } - } - ] - }, - { - "filterChainMatch": { - "serverNames": [ - "*.dc6.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "mesh_gateway_remote.default.dc6" - } - } - ] - }, - { - "filters": [ - { - "name": "envoy.filters.network.sni_cluster", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.sni_cluster.v3.SniCluster" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "", - "statPrefix": "mesh_gateway_local.default" - } - } - ] - } - ], - "listenerFilters": [ - { - "name": "envoy.filters.listener.tls_inspector", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.listener.tls_inspector.v3.TlsInspector" - } - } - ], - "name": "default:1.2.3.4:8443" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/mesh-gateway-non-hash-lb-injected.latest.golden b/agent/xds/testdata/listeners/mesh-gateway-non-hash-lb-injected.latest.golden deleted file mode 100644 index 3b77ccca9b996..0000000000000 --- a/agent/xds/testdata/listeners/mesh-gateway-non-hash-lb-injected.latest.golden +++ /dev/null @@ -1,96 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8443 - } - }, - "filterChains": [ - { - "filterChainMatch": { - "serverNames": [ - "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "mesh_gateway_remote.default.dc2" - } - } - ] - }, - { - "filterChainMatch": { - "serverNames": [ - "*.dc4.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "mesh_gateway_remote.default.dc4" - } - } - ] - }, - { - "filterChainMatch": { - "serverNames": [ - "*.dc6.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "mesh_gateway_remote.default.dc6" - } - } - ] - }, - { - "filters": [ - { - "name": "envoy.filters.network.sni_cluster", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.sni_cluster.v3.SniCluster" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "", - "statPrefix": "mesh_gateway_local.default" - } - } - ] - } - ], - "listenerFilters": [ - { - "name": "envoy.filters.listener.tls_inspector", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.listener.tls_inspector.v3.TlsInspector" - } - } - ], - "name": "default:1.2.3.4:8443" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/mesh-gateway-older-information-in-federation-states.latest.golden b/agent/xds/testdata/listeners/mesh-gateway-older-information-in-federation-states.latest.golden deleted file mode 100644 index 3b77ccca9b996..0000000000000 --- a/agent/xds/testdata/listeners/mesh-gateway-older-information-in-federation-states.latest.golden +++ /dev/null @@ -1,96 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8443 - } - }, - "filterChains": [ - { - "filterChainMatch": { - "serverNames": [ - "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "mesh_gateway_remote.default.dc2" - } - } - ] - }, - { - "filterChainMatch": { - "serverNames": [ - "*.dc4.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "mesh_gateway_remote.default.dc4" - } - } - ] - }, - { - "filterChainMatch": { - "serverNames": [ - "*.dc6.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "mesh_gateway_remote.default.dc6" - } - } - ] - }, - { - "filters": [ - { - "name": "envoy.filters.network.sni_cluster", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.sni_cluster.v3.SniCluster" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "", - "statPrefix": "mesh_gateway_local.default" - } - } - ] - } - ], - "listenerFilters": [ - { - "name": "envoy.filters.listener.tls_inspector", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.listener.tls_inspector.v3.TlsInspector" - } - } - ], - "name": "default:1.2.3.4:8443" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/mesh-gateway-service-subsets.latest.golden b/agent/xds/testdata/listeners/mesh-gateway-service-subsets.latest.golden deleted file mode 100644 index 3b77ccca9b996..0000000000000 --- a/agent/xds/testdata/listeners/mesh-gateway-service-subsets.latest.golden +++ /dev/null @@ -1,96 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8443 - } - }, - "filterChains": [ - { - "filterChainMatch": { - "serverNames": [ - "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "mesh_gateway_remote.default.dc2" - } - } - ] - }, - { - "filterChainMatch": { - "serverNames": [ - "*.dc4.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "mesh_gateway_remote.default.dc4" - } - } - ] - }, - { - "filterChainMatch": { - "serverNames": [ - "*.dc6.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "mesh_gateway_remote.default.dc6" - } - } - ] - }, - { - "filters": [ - { - "name": "envoy.filters.network.sni_cluster", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.sni_cluster.v3.SniCluster" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "", - "statPrefix": "mesh_gateway_local.default" - } - } - ] - } - ], - "listenerFilters": [ - { - "name": "envoy.filters.listener.tls_inspector", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.listener.tls_inspector.v3.TlsInspector" - } - } - ], - "name": "default:1.2.3.4:8443" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/mesh-gateway-service-subsets2.latest.golden b/agent/xds/testdata/listeners/mesh-gateway-service-subsets2.latest.golden deleted file mode 100644 index 3b77ccca9b996..0000000000000 --- a/agent/xds/testdata/listeners/mesh-gateway-service-subsets2.latest.golden +++ /dev/null @@ -1,96 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8443 - } - }, - "filterChains": [ - { - "filterChainMatch": { - "serverNames": [ - "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "mesh_gateway_remote.default.dc2" - } - } - ] - }, - { - "filterChainMatch": { - "serverNames": [ - "*.dc4.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "mesh_gateway_remote.default.dc4" - } - } - ] - }, - { - "filterChainMatch": { - "serverNames": [ - "*.dc6.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "mesh_gateway_remote.default.dc6" - } - } - ] - }, - { - "filters": [ - { - "name": "envoy.filters.network.sni_cluster", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.sni_cluster.v3.SniCluster" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "", - "statPrefix": "mesh_gateway_local.default" - } - } - ] - } - ], - "listenerFilters": [ - { - "name": "envoy.filters.listener.tls_inspector", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.listener.tls_inspector.v3.TlsInspector" - } - } - ], - "name": "default:1.2.3.4:8443" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/mesh-gateway-service-timeouts.latest.golden b/agent/xds/testdata/listeners/mesh-gateway-service-timeouts.latest.golden deleted file mode 100644 index 3b77ccca9b996..0000000000000 --- a/agent/xds/testdata/listeners/mesh-gateway-service-timeouts.latest.golden +++ /dev/null @@ -1,96 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8443 - } - }, - "filterChains": [ - { - "filterChainMatch": { - "serverNames": [ - "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "mesh_gateway_remote.default.dc2" - } - } - ] - }, - { - "filterChainMatch": { - "serverNames": [ - "*.dc4.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "mesh_gateway_remote.default.dc4" - } - } - ] - }, - { - "filterChainMatch": { - "serverNames": [ - "*.dc6.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "mesh_gateway_remote.default.dc6" - } - } - ] - }, - { - "filters": [ - { - "name": "envoy.filters.network.sni_cluster", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.sni_cluster.v3.SniCluster" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "", - "statPrefix": "mesh_gateway_local.default" - } - } - ] - } - ], - "listenerFilters": [ - { - "name": "envoy.filters.listener.tls_inspector", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.listener.tls_inspector.v3.TlsInspector" - } - } - ], - "name": "default:1.2.3.4:8443" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/mesh-gateway-tcp-keepalives.latest.golden b/agent/xds/testdata/listeners/mesh-gateway-tcp-keepalives.latest.golden deleted file mode 100644 index 3b77ccca9b996..0000000000000 --- a/agent/xds/testdata/listeners/mesh-gateway-tcp-keepalives.latest.golden +++ /dev/null @@ -1,96 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8443 - } - }, - "filterChains": [ - { - "filterChainMatch": { - "serverNames": [ - "*.dc2.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "dc2.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "mesh_gateway_remote.default.dc2" - } - } - ] - }, - { - "filterChainMatch": { - "serverNames": [ - "*.dc4.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "dc4.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "mesh_gateway_remote.default.dc4" - } - } - ] - }, - { - "filterChainMatch": { - "serverNames": [ - "*.dc6.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "dc6.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "mesh_gateway_remote.default.dc6" - } - } - ] - }, - { - "filters": [ - { - "name": "envoy.filters.network.sni_cluster", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.sni_cluster.v3.SniCluster" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "", - "statPrefix": "mesh_gateway_local.default" - } - } - ] - } - ], - "listenerFilters": [ - { - "name": "envoy.filters.listener.tls_inspector", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.listener.tls_inspector.v3.TlsInspector" - } - } - ], - "name": "default:1.2.3.4:8443" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/terminating-gateway-default-service-subset.latest.golden b/agent/xds/testdata/listeners/terminating-gateway-default-service-subset.latest.golden deleted file mode 100644 index 7f77ee4de3f80..0000000000000 --- a/agent/xds/testdata/listeners/terminating-gateway-default-service-subset.latest.golden +++ /dev/null @@ -1,346 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8443 - } - }, - "filterChains": [ - { - "filterChainMatch": { - "serverNames": [ - "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.api.default.default.dc1" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkKgAwIBAgIRAJrvEdaRAkSltrotd/l/j2cwCgYIKoZIzj0EAwIwgbgx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjE/MD0GA1UEAxM2Q29uc3VsIEFnZW50IENB\nIDk2NjM4NzM1MDkzNTU5NTIwNDk3MTQwOTU3MDY1MTc0OTg3NDMxMB4XDTIwMDQx\nNDIyMzE1MloXDTIxMDQxNDIyMzE1MlowHDEaMBgGA1UEAxMRc2VydmVyLmRjMS5j\nb25zdWwwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQ4v0FoIYI0OWmxE2MR6w5l\n0pWGhc02RpsOPj/6RS1fmXMMu7JzPzwCmkGcR16RlwwhNFKCZsWpvAjVRHf/pTp+\no4HHMIHEMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB\nBQUHAwIwDAYDVR0TAQH/BAIwADApBgNVHQ4EIgQgk7kABFitAy3PluyNtmzYiC7H\njSN8W/K/OXNJQAQAscMwKwYDVR0jBCQwIoAgNKbPPepvRHXSAPTc+a/BXBzFX1qJ\ny+Zi7qtjlFX7qtUwLQYDVR0RBCYwJIIRc2VydmVyLmRjMS5jb25zdWyCCWxvY2Fs\naG9zdIcEfwAAATAKBggqhkjOPQQDAgNJADBGAiEAhP4HmN5BWysWTbQWClXaWUah\nLpBGFrvc/2cCQuyEZKsCIQD6JyYCYMArtWwZ4G499zktxrFlqfX14bqyONrxtA5I\nDw==\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIE3KbKXHdsa0vvC1fysQaGdoJRgjRALIolI4XJanie+coAoGCCqGSM49\nAwEHoUQDQgAEOL9BaCGCNDlpsRNjEesOZdKVhoXNNkabDj4/+kUtX5lzDLuycz88\nAppBnEdekZcMITRSgmbFqbwI1UR3/6U6fg==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - }, - { - "filterChainMatch": { - "serverNames": [ - "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.cache.default.default.dc1" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICmjCCAkGgAwIBAgIQe1ZmC0rzRwer6jaH1YIUIjAKBggqhkjOPQQDAjCBuDEL\nMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2Nv\nMRowGAYDVQQJExExMDEgU2Vjb25kIFN0cmVldDEOMAwGA1UEERMFOTQxMDUxFzAV\nBgNVBAoTDkhhc2hpQ29ycCBJbmMuMT8wPQYDVQQDEzZDb25zdWwgQWdlbnQgQ0Eg\nODE5ODAwNjg0MDM0MTM3ODkyNDYxNTA1MDk0NDU3OTU1MTQxNjEwHhcNMjAwNjE5\nMTU1MjAzWhcNMjEwNjE5MTU1MjAzWjAcMRowGAYDVQQDExFzZXJ2ZXIuZGMxLmNv\nbnN1bDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH2aWaaa3fpQLBayheHiKlrH\n+z53m0frfGknKjOhOPVYDVHV8x0OE01negswVQbKHAtxPf1M8Zy+WbI9rK7Ua1mj\ngccwgcQwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF\nBQcDAjAMBgNVHRMBAf8EAjAAMCkGA1UdDgQiBCDf9CPBSUwwZvpeW73oJLTmgQE2\ntW1NKpL5t1uq9WFcqDArBgNVHSMEJDAigCCPPd/NxgZB0tq2M8pdVpPj3Cr79iTv\ni4/T1ysodfMb7zAtBgNVHREEJjAkghFzZXJ2ZXIuZGMxLmNvbnN1bIIJbG9jYWxo\nb3N0hwR/AAABMAoGCCqGSM49BAMCA0cAMEQCIFCjFZAoXq0s2ied2eIBv0i1KoW5\nIhCylnKFt6iHkyDeAiBBCByTcjHRgEQmqyPojQKoO584EFiczTub9aWdnf9tEw==\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEINsen3S8xzxMrKcRZIvxXzhKDn43Tw9ttqWEFU9TqS5hoAoGCCqGSM49\nAwEHoUQDQgAEfZpZpprd+lAsFrKF4eIqWsf7PnebR+t8aScqM6E49VgNUdXzHQ4T\nTWd6CzBVBsocC3E9/UzxnL5Zsj2srtRrWQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - }, - { - "filterChainMatch": { - "serverNames": [ - "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkOgAwIBAgIRAKF+qDJbaOULNL1TIatrsBowCgYIKoZIzj0EAwIwgbkx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjFAMD4GA1UEAxM3Q29uc3VsIEFnZW50IENB\nIDE4Nzg3MDAwNjUzMDcxOTYzNTk1ODkwNTE1ODY1NjEzMDA2MTU0NDAeFw0yMDA2\nMTkxNTMxMzRaFw0yMTA2MTkxNTMxMzRaMBwxGjAYBgNVBAMTEXNlcnZlci5kYzEu\nY29uc3VsMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEdQ8Igci5f7ZvvCVsxXt9\ntLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZbz/82EwPoS7Dqo3LTK4IuelOimoNNxuk\nkaOBxzCBxDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG\nAQUFBwMCMAwGA1UdEwEB/wQCMAAwKQYDVR0OBCIEILzTLkfJcdWQnTMKUcai/YJq\n0RqH1pjCqtY7SOU4gGOTMCsGA1UdIwQkMCKAIMa2vNcTEC5AGfHIYARJ/4sodX0o\nLzCj3lpw7BcEzPTcMC0GA1UdEQQmMCSCEXNlcnZlci5kYzEuY29uc3Vsgglsb2Nh\nbGhvc3SHBH8AAAEwCgYIKoZIzj0EAwIDSAAwRQIgBZ/Z4GSLEc98WvT/qjTVCNTG\n1WNaAaesVbkRx+J0yl8CIQDAVoqY9ByA5vKHjnQrxWlc/JUtJz8wudg7e/OCRriP\nSg==\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIN1v14FaNxgY4MgjDOOWthen8dgwB0lNMs9/j2TfrnxzoAoGCCqGSM49\nAwEHoUQDQgAEdQ8Igci5f7ZvvCVsxXt9tLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZ\nbz/82EwPoS7Dqo3LTK4IuelOimoNNxukkQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - }, - { - "filterChainMatch": { - "serverNames": [ - "v1.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "v1.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.web.default.default.dc1" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - }, - { - "filterChainMatch": { - "serverNames": [ - "v2.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "v2.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.web.default.default.dc1" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - }, - { - "filterChainMatch": { - "serverNames": [ - "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.web.default.default.dc1" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - }, - { - "filters": [ - { - "name": "envoy.filters.network.sni_cluster", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.sni_cluster.v3.SniCluster" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "", - "statPrefix": "terminating_gateway.default" - } - } - ] - } - ], - "listenerFilters": [ - { - "name": "envoy.filters.listener.tls_inspector", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.listener.tls_inspector.v3.TlsInspector" - } - } - ], - "name": "default:1.2.3.4:8443", - "trafficDirection": "INBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/terminating-gateway-hostname-service-subsets.latest.golden b/agent/xds/testdata/listeners/terminating-gateway-hostname-service-subsets.latest.golden deleted file mode 100644 index 85a4720d732da..0000000000000 --- a/agent/xds/testdata/listeners/terminating-gateway-hostname-service-subsets.latest.golden +++ /dev/null @@ -1,462 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8443 - } - }, - "filterChains": [ - { - "filterChainMatch": { - "serverNames": [ - "alt.api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.http_connection_manager", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "forwardClientCertDetails": "APPEND_FORWARD", - "httpFilters": [ - { - "name": "envoy.filters.http.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.rbac.v3.RBAC", - "rules": {} - } - }, - { - "name": "envoy.filters.http.router", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" - } - } - ], - "rds": { - "configSource": { - "ads": {}, - "resourceApiVersion": "V3" - }, - "routeConfigName": "alt.api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - }, - "setCurrentClientCertDetails": { - "cert": true, - "chain": true, - "dns": true, - "subject": true, - "uri": true - }, - "statPrefix": "upstream.api.default.default.dc1", - "tracing": { - "randomSampling": {} - }, - "upgradeConfigs": [ - { - "upgradeType": "websocket" - } - ] - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkKgAwIBAgIRAJrvEdaRAkSltrotd/l/j2cwCgYIKoZIzj0EAwIwgbgx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjE/MD0GA1UEAxM2Q29uc3VsIEFnZW50IENB\nIDk2NjM4NzM1MDkzNTU5NTIwNDk3MTQwOTU3MDY1MTc0OTg3NDMxMB4XDTIwMDQx\nNDIyMzE1MloXDTIxMDQxNDIyMzE1MlowHDEaMBgGA1UEAxMRc2VydmVyLmRjMS5j\nb25zdWwwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQ4v0FoIYI0OWmxE2MR6w5l\n0pWGhc02RpsOPj/6RS1fmXMMu7JzPzwCmkGcR16RlwwhNFKCZsWpvAjVRHf/pTp+\no4HHMIHEMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB\nBQUHAwIwDAYDVR0TAQH/BAIwADApBgNVHQ4EIgQgk7kABFitAy3PluyNtmzYiC7H\njSN8W/K/OXNJQAQAscMwKwYDVR0jBCQwIoAgNKbPPepvRHXSAPTc+a/BXBzFX1qJ\ny+Zi7qtjlFX7qtUwLQYDVR0RBCYwJIIRc2VydmVyLmRjMS5jb25zdWyCCWxvY2Fs\naG9zdIcEfwAAATAKBggqhkjOPQQDAgNJADBGAiEAhP4HmN5BWysWTbQWClXaWUah\nLpBGFrvc/2cCQuyEZKsCIQD6JyYCYMArtWwZ4G499zktxrFlqfX14bqyONrxtA5I\nDw==\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIE3KbKXHdsa0vvC1fysQaGdoJRgjRALIolI4XJanie+coAoGCCqGSM49\nAwEHoUQDQgAEOL9BaCGCNDlpsRNjEesOZdKVhoXNNkabDj4/+kUtX5lzDLuycz88\nAppBnEdekZcMITRSgmbFqbwI1UR3/6U6fg==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - }, - { - "filterChainMatch": { - "serverNames": [ - "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.http_connection_manager", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "forwardClientCertDetails": "APPEND_FORWARD", - "httpFilters": [ - { - "name": "envoy.filters.http.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.rbac.v3.RBAC", - "rules": {} - } - }, - { - "name": "envoy.filters.http.router", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" - } - } - ], - "rds": { - "configSource": { - "ads": {}, - "resourceApiVersion": "V3" - }, - "routeConfigName": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - }, - "setCurrentClientCertDetails": { - "cert": true, - "chain": true, - "dns": true, - "subject": true, - "uri": true - }, - "statPrefix": "upstream.api.default.default.dc1", - "tracing": { - "randomSampling": {} - }, - "upgradeConfigs": [ - { - "upgradeType": "websocket" - } - ] - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkKgAwIBAgIRAJrvEdaRAkSltrotd/l/j2cwCgYIKoZIzj0EAwIwgbgx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjE/MD0GA1UEAxM2Q29uc3VsIEFnZW50IENB\nIDk2NjM4NzM1MDkzNTU5NTIwNDk3MTQwOTU3MDY1MTc0OTg3NDMxMB4XDTIwMDQx\nNDIyMzE1MloXDTIxMDQxNDIyMzE1MlowHDEaMBgGA1UEAxMRc2VydmVyLmRjMS5j\nb25zdWwwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQ4v0FoIYI0OWmxE2MR6w5l\n0pWGhc02RpsOPj/6RS1fmXMMu7JzPzwCmkGcR16RlwwhNFKCZsWpvAjVRHf/pTp+\no4HHMIHEMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB\nBQUHAwIwDAYDVR0TAQH/BAIwADApBgNVHQ4EIgQgk7kABFitAy3PluyNtmzYiC7H\njSN8W/K/OXNJQAQAscMwKwYDVR0jBCQwIoAgNKbPPepvRHXSAPTc+a/BXBzFX1qJ\ny+Zi7qtjlFX7qtUwLQYDVR0RBCYwJIIRc2VydmVyLmRjMS5jb25zdWyCCWxvY2Fs\naG9zdIcEfwAAATAKBggqhkjOPQQDAgNJADBGAiEAhP4HmN5BWysWTbQWClXaWUah\nLpBGFrvc/2cCQuyEZKsCIQD6JyYCYMArtWwZ4G499zktxrFlqfX14bqyONrxtA5I\nDw==\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIE3KbKXHdsa0vvC1fysQaGdoJRgjRALIolI4XJanie+coAoGCCqGSM49\nAwEHoUQDQgAEOL9BaCGCNDlpsRNjEesOZdKVhoXNNkabDj4/+kUtX5lzDLuycz88\nAppBnEdekZcMITRSgmbFqbwI1UR3/6U6fg==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - }, - { - "filterChainMatch": { - "serverNames": [ - "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.http_connection_manager", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "forwardClientCertDetails": "APPEND_FORWARD", - "httpFilters": [ - { - "name": "envoy.filters.http.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.rbac.v3.RBAC", - "rules": {} - } - }, - { - "name": "envoy.filters.http.router", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" - } - } - ], - "rds": { - "configSource": { - "ads": {}, - "resourceApiVersion": "V3" - }, - "routeConfigName": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - }, - "setCurrentClientCertDetails": { - "cert": true, - "chain": true, - "dns": true, - "subject": true, - "uri": true - }, - "statPrefix": "upstream.cache.default.default.dc1", - "tracing": { - "randomSampling": {} - }, - "upgradeConfigs": [ - { - "upgradeType": "websocket" - } - ] - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICmjCCAkGgAwIBAgIQe1ZmC0rzRwer6jaH1YIUIjAKBggqhkjOPQQDAjCBuDEL\nMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2Nv\nMRowGAYDVQQJExExMDEgU2Vjb25kIFN0cmVldDEOMAwGA1UEERMFOTQxMDUxFzAV\nBgNVBAoTDkhhc2hpQ29ycCBJbmMuMT8wPQYDVQQDEzZDb25zdWwgQWdlbnQgQ0Eg\nODE5ODAwNjg0MDM0MTM3ODkyNDYxNTA1MDk0NDU3OTU1MTQxNjEwHhcNMjAwNjE5\nMTU1MjAzWhcNMjEwNjE5MTU1MjAzWjAcMRowGAYDVQQDExFzZXJ2ZXIuZGMxLmNv\nbnN1bDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH2aWaaa3fpQLBayheHiKlrH\n+z53m0frfGknKjOhOPVYDVHV8x0OE01negswVQbKHAtxPf1M8Zy+WbI9rK7Ua1mj\ngccwgcQwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF\nBQcDAjAMBgNVHRMBAf8EAjAAMCkGA1UdDgQiBCDf9CPBSUwwZvpeW73oJLTmgQE2\ntW1NKpL5t1uq9WFcqDArBgNVHSMEJDAigCCPPd/NxgZB0tq2M8pdVpPj3Cr79iTv\ni4/T1ysodfMb7zAtBgNVHREEJjAkghFzZXJ2ZXIuZGMxLmNvbnN1bIIJbG9jYWxo\nb3N0hwR/AAABMAoGCCqGSM49BAMCA0cAMEQCIFCjFZAoXq0s2ied2eIBv0i1KoW5\nIhCylnKFt6iHkyDeAiBBCByTcjHRgEQmqyPojQKoO584EFiczTub9aWdnf9tEw==\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEINsen3S8xzxMrKcRZIvxXzhKDn43Tw9ttqWEFU9TqS5hoAoGCCqGSM49\nAwEHoUQDQgAEfZpZpprd+lAsFrKF4eIqWsf7PnebR+t8aScqM6E49VgNUdXzHQ4T\nTWd6CzBVBsocC3E9/UzxnL5Zsj2srtRrWQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - }, - { - "filterChainMatch": { - "serverNames": [ - "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkOgAwIBAgIRAKF+qDJbaOULNL1TIatrsBowCgYIKoZIzj0EAwIwgbkx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjFAMD4GA1UEAxM3Q29uc3VsIEFnZW50IENB\nIDE4Nzg3MDAwNjUzMDcxOTYzNTk1ODkwNTE1ODY1NjEzMDA2MTU0NDAeFw0yMDA2\nMTkxNTMxMzRaFw0yMTA2MTkxNTMxMzRaMBwxGjAYBgNVBAMTEXNlcnZlci5kYzEu\nY29uc3VsMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEdQ8Igci5f7ZvvCVsxXt9\ntLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZbz/82EwPoS7Dqo3LTK4IuelOimoNNxuk\nkaOBxzCBxDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG\nAQUFBwMCMAwGA1UdEwEB/wQCMAAwKQYDVR0OBCIEILzTLkfJcdWQnTMKUcai/YJq\n0RqH1pjCqtY7SOU4gGOTMCsGA1UdIwQkMCKAIMa2vNcTEC5AGfHIYARJ/4sodX0o\nLzCj3lpw7BcEzPTcMC0GA1UdEQQmMCSCEXNlcnZlci5kYzEuY29uc3Vsgglsb2Nh\nbGhvc3SHBH8AAAEwCgYIKoZIzj0EAwIDSAAwRQIgBZ/Z4GSLEc98WvT/qjTVCNTG\n1WNaAaesVbkRx+J0yl8CIQDAVoqY9ByA5vKHjnQrxWlc/JUtJz8wudg7e/OCRriP\nSg==\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIN1v14FaNxgY4MgjDOOWthen8dgwB0lNMs9/j2TfrnxzoAoGCCqGSM49\nAwEHoUQDQgAEdQ8Igci5f7ZvvCVsxXt9tLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZ\nbz/82EwPoS7Dqo3LTK4IuelOimoNNxukkQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - }, - { - "filterChainMatch": { - "serverNames": [ - "prod.cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.http_connection_manager", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "forwardClientCertDetails": "APPEND_FORWARD", - "httpFilters": [ - { - "name": "envoy.filters.http.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.rbac.v3.RBAC", - "rules": {} - } - }, - { - "name": "envoy.filters.http.router", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" - } - } - ], - "rds": { - "configSource": { - "ads": {}, - "resourceApiVersion": "V3" - }, - "routeConfigName": "prod.cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - }, - "setCurrentClientCertDetails": { - "cert": true, - "chain": true, - "dns": true, - "subject": true, - "uri": true - }, - "statPrefix": "upstream.cache.default.default.dc1", - "tracing": { - "randomSampling": {} - }, - "upgradeConfigs": [ - { - "upgradeType": "websocket" - } - ] - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICmjCCAkGgAwIBAgIQe1ZmC0rzRwer6jaH1YIUIjAKBggqhkjOPQQDAjCBuDEL\nMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2Nv\nMRowGAYDVQQJExExMDEgU2Vjb25kIFN0cmVldDEOMAwGA1UEERMFOTQxMDUxFzAV\nBgNVBAoTDkhhc2hpQ29ycCBJbmMuMT8wPQYDVQQDEzZDb25zdWwgQWdlbnQgQ0Eg\nODE5ODAwNjg0MDM0MTM3ODkyNDYxNTA1MDk0NDU3OTU1MTQxNjEwHhcNMjAwNjE5\nMTU1MjAzWhcNMjEwNjE5MTU1MjAzWjAcMRowGAYDVQQDExFzZXJ2ZXIuZGMxLmNv\nbnN1bDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH2aWaaa3fpQLBayheHiKlrH\n+z53m0frfGknKjOhOPVYDVHV8x0OE01negswVQbKHAtxPf1M8Zy+WbI9rK7Ua1mj\ngccwgcQwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF\nBQcDAjAMBgNVHRMBAf8EAjAAMCkGA1UdDgQiBCDf9CPBSUwwZvpeW73oJLTmgQE2\ntW1NKpL5t1uq9WFcqDArBgNVHSMEJDAigCCPPd/NxgZB0tq2M8pdVpPj3Cr79iTv\ni4/T1ysodfMb7zAtBgNVHREEJjAkghFzZXJ2ZXIuZGMxLmNvbnN1bIIJbG9jYWxo\nb3N0hwR/AAABMAoGCCqGSM49BAMCA0cAMEQCIFCjFZAoXq0s2ied2eIBv0i1KoW5\nIhCylnKFt6iHkyDeAiBBCByTcjHRgEQmqyPojQKoO584EFiczTub9aWdnf9tEw==\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEINsen3S8xzxMrKcRZIvxXzhKDn43Tw9ttqWEFU9TqS5hoAoGCCqGSM49\nAwEHoUQDQgAEfZpZpprd+lAsFrKF4eIqWsf7PnebR+t8aScqM6E49VgNUdXzHQ4T\nTWd6CzBVBsocC3E9/UzxnL5Zsj2srtRrWQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - }, - { - "filterChainMatch": { - "serverNames": [ - "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.web.default.default.dc1" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - }, - { - "filters": [ - { - "name": "envoy.filters.network.sni_cluster", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.sni_cluster.v3.SniCluster" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "", - "statPrefix": "terminating_gateway.default" - } - } - ] - } - ], - "listenerFilters": [ - { - "name": "envoy.filters.listener.tls_inspector", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.listener.tls_inspector.v3.TlsInspector" - } - } - ], - "name": "default:1.2.3.4:8443", - "trafficDirection": "INBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/terminating-gateway-http2-upstream-subsets.latest.golden b/agent/xds/testdata/listeners/terminating-gateway-http2-upstream-subsets.latest.golden deleted file mode 100644 index 1e4dd317a7698..0000000000000 --- a/agent/xds/testdata/listeners/terminating-gateway-http2-upstream-subsets.latest.golden +++ /dev/null @@ -1,46 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8443 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.sni_cluster", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.sni_cluster.v3.SniCluster" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "", - "statPrefix": "terminating_gateway.default" - } - } - ] - } - ], - "listenerFilters": [ - { - "name": "envoy.filters.listener.tls_inspector", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.listener.tls_inspector.v3.TlsInspector" - } - } - ], - "name": "default:1.2.3.4:8443", - "trafficDirection": "INBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/terminating-gateway-http2-upstream.latest.golden b/agent/xds/testdata/listeners/terminating-gateway-http2-upstream.latest.golden deleted file mode 100644 index 1e4dd317a7698..0000000000000 --- a/agent/xds/testdata/listeners/terminating-gateway-http2-upstream.latest.golden +++ /dev/null @@ -1,46 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8443 - } - }, - "filterChains": [ - { - "filters": [ - { - "name": "envoy.filters.network.sni_cluster", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.sni_cluster.v3.SniCluster" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "", - "statPrefix": "terminating_gateway.default" - } - } - ] - } - ], - "listenerFilters": [ - { - "name": "envoy.filters.listener.tls_inspector", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.listener.tls_inspector.v3.TlsInspector" - } - } - ], - "name": "default:1.2.3.4:8443", - "trafficDirection": "INBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/terminating-gateway-ignore-extra-resolvers.latest.golden b/agent/xds/testdata/listeners/terminating-gateway-ignore-extra-resolvers.latest.golden deleted file mode 100644 index a508e82d51595..0000000000000 --- a/agent/xds/testdata/listeners/terminating-gateway-ignore-extra-resolvers.latest.golden +++ /dev/null @@ -1,433 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8443 - } - }, - "filterChains": [ - { - "filterChainMatch": { - "serverNames": [ - "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.api.default.default.dc1" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkKgAwIBAgIRAJrvEdaRAkSltrotd/l/j2cwCgYIKoZIzj0EAwIwgbgx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjE/MD0GA1UEAxM2Q29uc3VsIEFnZW50IENB\nIDk2NjM4NzM1MDkzNTU5NTIwNDk3MTQwOTU3MDY1MTc0OTg3NDMxMB4XDTIwMDQx\nNDIyMzE1MloXDTIxMDQxNDIyMzE1MlowHDEaMBgGA1UEAxMRc2VydmVyLmRjMS5j\nb25zdWwwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQ4v0FoIYI0OWmxE2MR6w5l\n0pWGhc02RpsOPj/6RS1fmXMMu7JzPzwCmkGcR16RlwwhNFKCZsWpvAjVRHf/pTp+\no4HHMIHEMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB\nBQUHAwIwDAYDVR0TAQH/BAIwADApBgNVHQ4EIgQgk7kABFitAy3PluyNtmzYiC7H\njSN8W/K/OXNJQAQAscMwKwYDVR0jBCQwIoAgNKbPPepvRHXSAPTc+a/BXBzFX1qJ\ny+Zi7qtjlFX7qtUwLQYDVR0RBCYwJIIRc2VydmVyLmRjMS5jb25zdWyCCWxvY2Fs\naG9zdIcEfwAAATAKBggqhkjOPQQDAgNJADBGAiEAhP4HmN5BWysWTbQWClXaWUah\nLpBGFrvc/2cCQuyEZKsCIQD6JyYCYMArtWwZ4G499zktxrFlqfX14bqyONrxtA5I\nDw==\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIE3KbKXHdsa0vvC1fysQaGdoJRgjRALIolI4XJanie+coAoGCCqGSM49\nAwEHoUQDQgAEOL9BaCGCNDlpsRNjEesOZdKVhoXNNkabDj4/+kUtX5lzDLuycz88\nAppBnEdekZcMITRSgmbFqbwI1UR3/6U6fg==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - }, - { - "filterChainMatch": { - "serverNames": [ - "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.cache.default.default.dc1" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICmjCCAkGgAwIBAgIQe1ZmC0rzRwer6jaH1YIUIjAKBggqhkjOPQQDAjCBuDEL\nMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2Nv\nMRowGAYDVQQJExExMDEgU2Vjb25kIFN0cmVldDEOMAwGA1UEERMFOTQxMDUxFzAV\nBgNVBAoTDkhhc2hpQ29ycCBJbmMuMT8wPQYDVQQDEzZDb25zdWwgQWdlbnQgQ0Eg\nODE5ODAwNjg0MDM0MTM3ODkyNDYxNTA1MDk0NDU3OTU1MTQxNjEwHhcNMjAwNjE5\nMTU1MjAzWhcNMjEwNjE5MTU1MjAzWjAcMRowGAYDVQQDExFzZXJ2ZXIuZGMxLmNv\nbnN1bDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH2aWaaa3fpQLBayheHiKlrH\n+z53m0frfGknKjOhOPVYDVHV8x0OE01negswVQbKHAtxPf1M8Zy+WbI9rK7Ua1mj\ngccwgcQwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF\nBQcDAjAMBgNVHRMBAf8EAjAAMCkGA1UdDgQiBCDf9CPBSUwwZvpeW73oJLTmgQE2\ntW1NKpL5t1uq9WFcqDArBgNVHSMEJDAigCCPPd/NxgZB0tq2M8pdVpPj3Cr79iTv\ni4/T1ysodfMb7zAtBgNVHREEJjAkghFzZXJ2ZXIuZGMxLmNvbnN1bIIJbG9jYWxo\nb3N0hwR/AAABMAoGCCqGSM49BAMCA0cAMEQCIFCjFZAoXq0s2ied2eIBv0i1KoW5\nIhCylnKFt6iHkyDeAiBBCByTcjHRgEQmqyPojQKoO584EFiczTub9aWdnf9tEw==\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEINsen3S8xzxMrKcRZIvxXzhKDn43Tw9ttqWEFU9TqS5hoAoGCCqGSM49\nAwEHoUQDQgAEfZpZpprd+lAsFrKF4eIqWsf7PnebR+t8aScqM6E49VgNUdXzHQ4T\nTWd6CzBVBsocC3E9/UzxnL5Zsj2srtRrWQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - }, - { - "filterChainMatch": { - "serverNames": [ - "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkOgAwIBAgIRAKF+qDJbaOULNL1TIatrsBowCgYIKoZIzj0EAwIwgbkx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjFAMD4GA1UEAxM3Q29uc3VsIEFnZW50IENB\nIDE4Nzg3MDAwNjUzMDcxOTYzNTk1ODkwNTE1ODY1NjEzMDA2MTU0NDAeFw0yMDA2\nMTkxNTMxMzRaFw0yMTA2MTkxNTMxMzRaMBwxGjAYBgNVBAMTEXNlcnZlci5kYzEu\nY29uc3VsMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEdQ8Igci5f7ZvvCVsxXt9\ntLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZbz/82EwPoS7Dqo3LTK4IuelOimoNNxuk\nkaOBxzCBxDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG\nAQUFBwMCMAwGA1UdEwEB/wQCMAAwKQYDVR0OBCIEILzTLkfJcdWQnTMKUcai/YJq\n0RqH1pjCqtY7SOU4gGOTMCsGA1UdIwQkMCKAIMa2vNcTEC5AGfHIYARJ/4sodX0o\nLzCj3lpw7BcEzPTcMC0GA1UdEQQmMCSCEXNlcnZlci5kYzEuY29uc3Vsgglsb2Nh\nbGhvc3SHBH8AAAEwCgYIKoZIzj0EAwIDSAAwRQIgBZ/Z4GSLEc98WvT/qjTVCNTG\n1WNaAaesVbkRx+J0yl8CIQDAVoqY9ByA5vKHjnQrxWlc/JUtJz8wudg7e/OCRriP\nSg==\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIN1v14FaNxgY4MgjDOOWthen8dgwB0lNMs9/j2TfrnxzoAoGCCqGSM49\nAwEHoUQDQgAEdQ8Igci5f7ZvvCVsxXt9tLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZ\nbz/82EwPoS7Dqo3LTK4IuelOimoNNxukkQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - }, - { - "filterChainMatch": { - "serverNames": [ - "v1.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.http_connection_manager", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "forwardClientCertDetails": "APPEND_FORWARD", - "httpFilters": [ - { - "name": "envoy.filters.http.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.rbac.v3.RBAC", - "rules": {} - } - }, - { - "name": "envoy.filters.http.router", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" - } - } - ], - "rds": { - "configSource": { - "ads": {}, - "resourceApiVersion": "V3" - }, - "routeConfigName": "v1.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - }, - "setCurrentClientCertDetails": { - "cert": true, - "chain": true, - "dns": true, - "subject": true, - "uri": true - }, - "statPrefix": "upstream.web.default.default.dc1", - "tracing": { - "randomSampling": {} - }, - "upgradeConfigs": [ - { - "upgradeType": "websocket" - } - ] - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - }, - { - "filterChainMatch": { - "serverNames": [ - "v2.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.http_connection_manager", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "forwardClientCertDetails": "APPEND_FORWARD", - "httpFilters": [ - { - "name": "envoy.filters.http.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.rbac.v3.RBAC", - "rules": {} - } - }, - { - "name": "envoy.filters.http.router", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" - } - } - ], - "rds": { - "configSource": { - "ads": {}, - "resourceApiVersion": "V3" - }, - "routeConfigName": "v2.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - }, - "setCurrentClientCertDetails": { - "cert": true, - "chain": true, - "dns": true, - "subject": true, - "uri": true - }, - "statPrefix": "upstream.web.default.default.dc1", - "tracing": { - "randomSampling": {} - }, - "upgradeConfigs": [ - { - "upgradeType": "websocket" - } - ] - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - }, - { - "filterChainMatch": { - "serverNames": [ - "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.http_connection_manager", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "forwardClientCertDetails": "APPEND_FORWARD", - "httpFilters": [ - { - "name": "envoy.filters.http.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.rbac.v3.RBAC", - "rules": {} - } - }, - { - "name": "envoy.filters.http.router", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" - } - } - ], - "rds": { - "configSource": { - "ads": {}, - "resourceApiVersion": "V3" - }, - "routeConfigName": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - }, - "setCurrentClientCertDetails": { - "cert": true, - "chain": true, - "dns": true, - "subject": true, - "uri": true - }, - "statPrefix": "upstream.web.default.default.dc1", - "tracing": { - "randomSampling": {} - }, - "upgradeConfigs": [ - { - "upgradeType": "websocket" - } - ] - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - }, - { - "filters": [ - { - "name": "envoy.filters.network.sni_cluster", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.sni_cluster.v3.SniCluster" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "", - "statPrefix": "terminating_gateway.default" - } - } - ] - } - ], - "listenerFilters": [ - { - "name": "envoy.filters.listener.tls_inspector", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.listener.tls_inspector.v3.TlsInspector" - } - } - ], - "name": "default:1.2.3.4:8443", - "trafficDirection": "INBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/terminating-gateway-lb-config-no-hash-policies.latest.golden b/agent/xds/testdata/listeners/terminating-gateway-lb-config-no-hash-policies.latest.golden deleted file mode 100644 index a508e82d51595..0000000000000 --- a/agent/xds/testdata/listeners/terminating-gateway-lb-config-no-hash-policies.latest.golden +++ /dev/null @@ -1,433 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8443 - } - }, - "filterChains": [ - { - "filterChainMatch": { - "serverNames": [ - "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.api.default.default.dc1" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkKgAwIBAgIRAJrvEdaRAkSltrotd/l/j2cwCgYIKoZIzj0EAwIwgbgx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjE/MD0GA1UEAxM2Q29uc3VsIEFnZW50IENB\nIDk2NjM4NzM1MDkzNTU5NTIwNDk3MTQwOTU3MDY1MTc0OTg3NDMxMB4XDTIwMDQx\nNDIyMzE1MloXDTIxMDQxNDIyMzE1MlowHDEaMBgGA1UEAxMRc2VydmVyLmRjMS5j\nb25zdWwwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQ4v0FoIYI0OWmxE2MR6w5l\n0pWGhc02RpsOPj/6RS1fmXMMu7JzPzwCmkGcR16RlwwhNFKCZsWpvAjVRHf/pTp+\no4HHMIHEMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB\nBQUHAwIwDAYDVR0TAQH/BAIwADApBgNVHQ4EIgQgk7kABFitAy3PluyNtmzYiC7H\njSN8W/K/OXNJQAQAscMwKwYDVR0jBCQwIoAgNKbPPepvRHXSAPTc+a/BXBzFX1qJ\ny+Zi7qtjlFX7qtUwLQYDVR0RBCYwJIIRc2VydmVyLmRjMS5jb25zdWyCCWxvY2Fs\naG9zdIcEfwAAATAKBggqhkjOPQQDAgNJADBGAiEAhP4HmN5BWysWTbQWClXaWUah\nLpBGFrvc/2cCQuyEZKsCIQD6JyYCYMArtWwZ4G499zktxrFlqfX14bqyONrxtA5I\nDw==\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIE3KbKXHdsa0vvC1fysQaGdoJRgjRALIolI4XJanie+coAoGCCqGSM49\nAwEHoUQDQgAEOL9BaCGCNDlpsRNjEesOZdKVhoXNNkabDj4/+kUtX5lzDLuycz88\nAppBnEdekZcMITRSgmbFqbwI1UR3/6U6fg==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - }, - { - "filterChainMatch": { - "serverNames": [ - "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.cache.default.default.dc1" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICmjCCAkGgAwIBAgIQe1ZmC0rzRwer6jaH1YIUIjAKBggqhkjOPQQDAjCBuDEL\nMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2Nv\nMRowGAYDVQQJExExMDEgU2Vjb25kIFN0cmVldDEOMAwGA1UEERMFOTQxMDUxFzAV\nBgNVBAoTDkhhc2hpQ29ycCBJbmMuMT8wPQYDVQQDEzZDb25zdWwgQWdlbnQgQ0Eg\nODE5ODAwNjg0MDM0MTM3ODkyNDYxNTA1MDk0NDU3OTU1MTQxNjEwHhcNMjAwNjE5\nMTU1MjAzWhcNMjEwNjE5MTU1MjAzWjAcMRowGAYDVQQDExFzZXJ2ZXIuZGMxLmNv\nbnN1bDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH2aWaaa3fpQLBayheHiKlrH\n+z53m0frfGknKjOhOPVYDVHV8x0OE01negswVQbKHAtxPf1M8Zy+WbI9rK7Ua1mj\ngccwgcQwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF\nBQcDAjAMBgNVHRMBAf8EAjAAMCkGA1UdDgQiBCDf9CPBSUwwZvpeW73oJLTmgQE2\ntW1NKpL5t1uq9WFcqDArBgNVHSMEJDAigCCPPd/NxgZB0tq2M8pdVpPj3Cr79iTv\ni4/T1ysodfMb7zAtBgNVHREEJjAkghFzZXJ2ZXIuZGMxLmNvbnN1bIIJbG9jYWxo\nb3N0hwR/AAABMAoGCCqGSM49BAMCA0cAMEQCIFCjFZAoXq0s2ied2eIBv0i1KoW5\nIhCylnKFt6iHkyDeAiBBCByTcjHRgEQmqyPojQKoO584EFiczTub9aWdnf9tEw==\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEINsen3S8xzxMrKcRZIvxXzhKDn43Tw9ttqWEFU9TqS5hoAoGCCqGSM49\nAwEHoUQDQgAEfZpZpprd+lAsFrKF4eIqWsf7PnebR+t8aScqM6E49VgNUdXzHQ4T\nTWd6CzBVBsocC3E9/UzxnL5Zsj2srtRrWQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - }, - { - "filterChainMatch": { - "serverNames": [ - "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkOgAwIBAgIRAKF+qDJbaOULNL1TIatrsBowCgYIKoZIzj0EAwIwgbkx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjFAMD4GA1UEAxM3Q29uc3VsIEFnZW50IENB\nIDE4Nzg3MDAwNjUzMDcxOTYzNTk1ODkwNTE1ODY1NjEzMDA2MTU0NDAeFw0yMDA2\nMTkxNTMxMzRaFw0yMTA2MTkxNTMxMzRaMBwxGjAYBgNVBAMTEXNlcnZlci5kYzEu\nY29uc3VsMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEdQ8Igci5f7ZvvCVsxXt9\ntLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZbz/82EwPoS7Dqo3LTK4IuelOimoNNxuk\nkaOBxzCBxDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG\nAQUFBwMCMAwGA1UdEwEB/wQCMAAwKQYDVR0OBCIEILzTLkfJcdWQnTMKUcai/YJq\n0RqH1pjCqtY7SOU4gGOTMCsGA1UdIwQkMCKAIMa2vNcTEC5AGfHIYARJ/4sodX0o\nLzCj3lpw7BcEzPTcMC0GA1UdEQQmMCSCEXNlcnZlci5kYzEuY29uc3Vsgglsb2Nh\nbGhvc3SHBH8AAAEwCgYIKoZIzj0EAwIDSAAwRQIgBZ/Z4GSLEc98WvT/qjTVCNTG\n1WNaAaesVbkRx+J0yl8CIQDAVoqY9ByA5vKHjnQrxWlc/JUtJz8wudg7e/OCRriP\nSg==\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIN1v14FaNxgY4MgjDOOWthen8dgwB0lNMs9/j2TfrnxzoAoGCCqGSM49\nAwEHoUQDQgAEdQ8Igci5f7ZvvCVsxXt9tLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZ\nbz/82EwPoS7Dqo3LTK4IuelOimoNNxukkQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - }, - { - "filterChainMatch": { - "serverNames": [ - "v1.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.http_connection_manager", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "forwardClientCertDetails": "APPEND_FORWARD", - "httpFilters": [ - { - "name": "envoy.filters.http.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.rbac.v3.RBAC", - "rules": {} - } - }, - { - "name": "envoy.filters.http.router", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" - } - } - ], - "rds": { - "configSource": { - "ads": {}, - "resourceApiVersion": "V3" - }, - "routeConfigName": "v1.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - }, - "setCurrentClientCertDetails": { - "cert": true, - "chain": true, - "dns": true, - "subject": true, - "uri": true - }, - "statPrefix": "upstream.web.default.default.dc1", - "tracing": { - "randomSampling": {} - }, - "upgradeConfigs": [ - { - "upgradeType": "websocket" - } - ] - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - }, - { - "filterChainMatch": { - "serverNames": [ - "v2.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.http_connection_manager", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "forwardClientCertDetails": "APPEND_FORWARD", - "httpFilters": [ - { - "name": "envoy.filters.http.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.rbac.v3.RBAC", - "rules": {} - } - }, - { - "name": "envoy.filters.http.router", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" - } - } - ], - "rds": { - "configSource": { - "ads": {}, - "resourceApiVersion": "V3" - }, - "routeConfigName": "v2.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - }, - "setCurrentClientCertDetails": { - "cert": true, - "chain": true, - "dns": true, - "subject": true, - "uri": true - }, - "statPrefix": "upstream.web.default.default.dc1", - "tracing": { - "randomSampling": {} - }, - "upgradeConfigs": [ - { - "upgradeType": "websocket" - } - ] - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - }, - { - "filterChainMatch": { - "serverNames": [ - "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.http_connection_manager", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "forwardClientCertDetails": "APPEND_FORWARD", - "httpFilters": [ - { - "name": "envoy.filters.http.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.rbac.v3.RBAC", - "rules": {} - } - }, - { - "name": "envoy.filters.http.router", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" - } - } - ], - "rds": { - "configSource": { - "ads": {}, - "resourceApiVersion": "V3" - }, - "routeConfigName": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - }, - "setCurrentClientCertDetails": { - "cert": true, - "chain": true, - "dns": true, - "subject": true, - "uri": true - }, - "statPrefix": "upstream.web.default.default.dc1", - "tracing": { - "randomSampling": {} - }, - "upgradeConfigs": [ - { - "upgradeType": "websocket" - } - ] - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - }, - { - "filters": [ - { - "name": "envoy.filters.network.sni_cluster", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.sni_cluster.v3.SniCluster" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "", - "statPrefix": "terminating_gateway.default" - } - } - ] - } - ], - "listenerFilters": [ - { - "name": "envoy.filters.listener.tls_inspector", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.listener.tls_inspector.v3.TlsInspector" - } - } - ], - "name": "default:1.2.3.4:8443", - "trafficDirection": "INBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/terminating-gateway-lb-config.latest.golden b/agent/xds/testdata/listeners/terminating-gateway-lb-config.latest.golden deleted file mode 100644 index a508e82d51595..0000000000000 --- a/agent/xds/testdata/listeners/terminating-gateway-lb-config.latest.golden +++ /dev/null @@ -1,433 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8443 - } - }, - "filterChains": [ - { - "filterChainMatch": { - "serverNames": [ - "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.api.default.default.dc1" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkKgAwIBAgIRAJrvEdaRAkSltrotd/l/j2cwCgYIKoZIzj0EAwIwgbgx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjE/MD0GA1UEAxM2Q29uc3VsIEFnZW50IENB\nIDk2NjM4NzM1MDkzNTU5NTIwNDk3MTQwOTU3MDY1MTc0OTg3NDMxMB4XDTIwMDQx\nNDIyMzE1MloXDTIxMDQxNDIyMzE1MlowHDEaMBgGA1UEAxMRc2VydmVyLmRjMS5j\nb25zdWwwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQ4v0FoIYI0OWmxE2MR6w5l\n0pWGhc02RpsOPj/6RS1fmXMMu7JzPzwCmkGcR16RlwwhNFKCZsWpvAjVRHf/pTp+\no4HHMIHEMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB\nBQUHAwIwDAYDVR0TAQH/BAIwADApBgNVHQ4EIgQgk7kABFitAy3PluyNtmzYiC7H\njSN8W/K/OXNJQAQAscMwKwYDVR0jBCQwIoAgNKbPPepvRHXSAPTc+a/BXBzFX1qJ\ny+Zi7qtjlFX7qtUwLQYDVR0RBCYwJIIRc2VydmVyLmRjMS5jb25zdWyCCWxvY2Fs\naG9zdIcEfwAAATAKBggqhkjOPQQDAgNJADBGAiEAhP4HmN5BWysWTbQWClXaWUah\nLpBGFrvc/2cCQuyEZKsCIQD6JyYCYMArtWwZ4G499zktxrFlqfX14bqyONrxtA5I\nDw==\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIE3KbKXHdsa0vvC1fysQaGdoJRgjRALIolI4XJanie+coAoGCCqGSM49\nAwEHoUQDQgAEOL9BaCGCNDlpsRNjEesOZdKVhoXNNkabDj4/+kUtX5lzDLuycz88\nAppBnEdekZcMITRSgmbFqbwI1UR3/6U6fg==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - }, - { - "filterChainMatch": { - "serverNames": [ - "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.cache.default.default.dc1" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICmjCCAkGgAwIBAgIQe1ZmC0rzRwer6jaH1YIUIjAKBggqhkjOPQQDAjCBuDEL\nMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2Nv\nMRowGAYDVQQJExExMDEgU2Vjb25kIFN0cmVldDEOMAwGA1UEERMFOTQxMDUxFzAV\nBgNVBAoTDkhhc2hpQ29ycCBJbmMuMT8wPQYDVQQDEzZDb25zdWwgQWdlbnQgQ0Eg\nODE5ODAwNjg0MDM0MTM3ODkyNDYxNTA1MDk0NDU3OTU1MTQxNjEwHhcNMjAwNjE5\nMTU1MjAzWhcNMjEwNjE5MTU1MjAzWjAcMRowGAYDVQQDExFzZXJ2ZXIuZGMxLmNv\nbnN1bDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH2aWaaa3fpQLBayheHiKlrH\n+z53m0frfGknKjOhOPVYDVHV8x0OE01negswVQbKHAtxPf1M8Zy+WbI9rK7Ua1mj\ngccwgcQwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF\nBQcDAjAMBgNVHRMBAf8EAjAAMCkGA1UdDgQiBCDf9CPBSUwwZvpeW73oJLTmgQE2\ntW1NKpL5t1uq9WFcqDArBgNVHSMEJDAigCCPPd/NxgZB0tq2M8pdVpPj3Cr79iTv\ni4/T1ysodfMb7zAtBgNVHREEJjAkghFzZXJ2ZXIuZGMxLmNvbnN1bIIJbG9jYWxo\nb3N0hwR/AAABMAoGCCqGSM49BAMCA0cAMEQCIFCjFZAoXq0s2ied2eIBv0i1KoW5\nIhCylnKFt6iHkyDeAiBBCByTcjHRgEQmqyPojQKoO584EFiczTub9aWdnf9tEw==\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEINsen3S8xzxMrKcRZIvxXzhKDn43Tw9ttqWEFU9TqS5hoAoGCCqGSM49\nAwEHoUQDQgAEfZpZpprd+lAsFrKF4eIqWsf7PnebR+t8aScqM6E49VgNUdXzHQ4T\nTWd6CzBVBsocC3E9/UzxnL5Zsj2srtRrWQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - }, - { - "filterChainMatch": { - "serverNames": [ - "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkOgAwIBAgIRAKF+qDJbaOULNL1TIatrsBowCgYIKoZIzj0EAwIwgbkx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjFAMD4GA1UEAxM3Q29uc3VsIEFnZW50IENB\nIDE4Nzg3MDAwNjUzMDcxOTYzNTk1ODkwNTE1ODY1NjEzMDA2MTU0NDAeFw0yMDA2\nMTkxNTMxMzRaFw0yMTA2MTkxNTMxMzRaMBwxGjAYBgNVBAMTEXNlcnZlci5kYzEu\nY29uc3VsMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEdQ8Igci5f7ZvvCVsxXt9\ntLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZbz/82EwPoS7Dqo3LTK4IuelOimoNNxuk\nkaOBxzCBxDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG\nAQUFBwMCMAwGA1UdEwEB/wQCMAAwKQYDVR0OBCIEILzTLkfJcdWQnTMKUcai/YJq\n0RqH1pjCqtY7SOU4gGOTMCsGA1UdIwQkMCKAIMa2vNcTEC5AGfHIYARJ/4sodX0o\nLzCj3lpw7BcEzPTcMC0GA1UdEQQmMCSCEXNlcnZlci5kYzEuY29uc3Vsgglsb2Nh\nbGhvc3SHBH8AAAEwCgYIKoZIzj0EAwIDSAAwRQIgBZ/Z4GSLEc98WvT/qjTVCNTG\n1WNaAaesVbkRx+J0yl8CIQDAVoqY9ByA5vKHjnQrxWlc/JUtJz8wudg7e/OCRriP\nSg==\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIN1v14FaNxgY4MgjDOOWthen8dgwB0lNMs9/j2TfrnxzoAoGCCqGSM49\nAwEHoUQDQgAEdQ8Igci5f7ZvvCVsxXt9tLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZ\nbz/82EwPoS7Dqo3LTK4IuelOimoNNxukkQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - }, - { - "filterChainMatch": { - "serverNames": [ - "v1.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.http_connection_manager", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "forwardClientCertDetails": "APPEND_FORWARD", - "httpFilters": [ - { - "name": "envoy.filters.http.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.rbac.v3.RBAC", - "rules": {} - } - }, - { - "name": "envoy.filters.http.router", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" - } - } - ], - "rds": { - "configSource": { - "ads": {}, - "resourceApiVersion": "V3" - }, - "routeConfigName": "v1.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - }, - "setCurrentClientCertDetails": { - "cert": true, - "chain": true, - "dns": true, - "subject": true, - "uri": true - }, - "statPrefix": "upstream.web.default.default.dc1", - "tracing": { - "randomSampling": {} - }, - "upgradeConfigs": [ - { - "upgradeType": "websocket" - } - ] - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - }, - { - "filterChainMatch": { - "serverNames": [ - "v2.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.http_connection_manager", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "forwardClientCertDetails": "APPEND_FORWARD", - "httpFilters": [ - { - "name": "envoy.filters.http.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.rbac.v3.RBAC", - "rules": {} - } - }, - { - "name": "envoy.filters.http.router", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" - } - } - ], - "rds": { - "configSource": { - "ads": {}, - "resourceApiVersion": "V3" - }, - "routeConfigName": "v2.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - }, - "setCurrentClientCertDetails": { - "cert": true, - "chain": true, - "dns": true, - "subject": true, - "uri": true - }, - "statPrefix": "upstream.web.default.default.dc1", - "tracing": { - "randomSampling": {} - }, - "upgradeConfigs": [ - { - "upgradeType": "websocket" - } - ] - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - }, - { - "filterChainMatch": { - "serverNames": [ - "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.http_connection_manager", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "forwardClientCertDetails": "APPEND_FORWARD", - "httpFilters": [ - { - "name": "envoy.filters.http.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.rbac.v3.RBAC", - "rules": {} - } - }, - { - "name": "envoy.filters.http.router", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" - } - } - ], - "rds": { - "configSource": { - "ads": {}, - "resourceApiVersion": "V3" - }, - "routeConfigName": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - }, - "setCurrentClientCertDetails": { - "cert": true, - "chain": true, - "dns": true, - "subject": true, - "uri": true - }, - "statPrefix": "upstream.web.default.default.dc1", - "tracing": { - "randomSampling": {} - }, - "upgradeConfigs": [ - { - "upgradeType": "websocket" - } - ] - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - }, - { - "filters": [ - { - "name": "envoy.filters.network.sni_cluster", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.sni_cluster.v3.SniCluster" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "", - "statPrefix": "terminating_gateway.default" - } - } - ] - } - ], - "listenerFilters": [ - { - "name": "envoy.filters.listener.tls_inspector", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.listener.tls_inspector.v3.TlsInspector" - } - } - ], - "name": "default:1.2.3.4:8443", - "trafficDirection": "INBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/terminating-gateway-service-subsets.latest.golden b/agent/xds/testdata/listeners/terminating-gateway-service-subsets.latest.golden index 61c0f6e3b98d4..a508e82d51595 100644 --- a/agent/xds/testdata/listeners/terminating-gateway-service-subsets.latest.golden +++ b/agent/xds/testdata/listeners/terminating-gateway-service-subsets.latest.golden @@ -160,56 +160,6 @@ } } }, - { - "filterChainMatch": { - "serverNames": [ - "prod.cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "prod.cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.cache.default.default.dc1" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICmjCCAkGgAwIBAgIQe1ZmC0rzRwer6jaH1YIUIjAKBggqhkjOPQQDAjCBuDEL\nMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2Nv\nMRowGAYDVQQJExExMDEgU2Vjb25kIFN0cmVldDEOMAwGA1UEERMFOTQxMDUxFzAV\nBgNVBAoTDkhhc2hpQ29ycCBJbmMuMT8wPQYDVQQDEzZDb25zdWwgQWdlbnQgQ0Eg\nODE5ODAwNjg0MDM0MTM3ODkyNDYxNTA1MDk0NDU3OTU1MTQxNjEwHhcNMjAwNjE5\nMTU1MjAzWhcNMjEwNjE5MTU1MjAzWjAcMRowGAYDVQQDExFzZXJ2ZXIuZGMxLmNv\nbnN1bDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH2aWaaa3fpQLBayheHiKlrH\n+z53m0frfGknKjOhOPVYDVHV8x0OE01negswVQbKHAtxPf1M8Zy+WbI9rK7Ua1mj\ngccwgcQwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF\nBQcDAjAMBgNVHRMBAf8EAjAAMCkGA1UdDgQiBCDf9CPBSUwwZvpeW73oJLTmgQE2\ntW1NKpL5t1uq9WFcqDArBgNVHSMEJDAigCCPPd/NxgZB0tq2M8pdVpPj3Cr79iTv\ni4/T1ysodfMb7zAtBgNVHREEJjAkghFzZXJ2ZXIuZGMxLmNvbnN1bIIJbG9jYWxo\nb3N0hwR/AAABMAoGCCqGSM49BAMCA0cAMEQCIFCjFZAoXq0s2ied2eIBv0i1KoW5\nIhCylnKFt6iHkyDeAiBBCByTcjHRgEQmqyPojQKoO584EFiczTub9aWdnf9tEw==\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEINsen3S8xzxMrKcRZIvxXzhKDn43Tw9ttqWEFU9TqS5hoAoGCCqGSM49\nAwEHoUQDQgAEfZpZpprd+lAsFrKF4eIqWsf7PnebR+t8aScqM6E49VgNUdXzHQ4T\nTWd6CzBVBsocC3E9/UzxnL5Zsj2srtRrWQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - }, { "filterChainMatch": { "serverNames": [ diff --git a/agent/xds/testdata/listeners/terminating-gateway-sni.latest.golden b/agent/xds/testdata/listeners/terminating-gateway-sni.latest.golden deleted file mode 100644 index 45ad9d29a0958..0000000000000 --- a/agent/xds/testdata/listeners/terminating-gateway-sni.latest.golden +++ /dev/null @@ -1,246 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8443 - } - }, - "filterChains": [ - { - "filterChainMatch": { - "serverNames": [ - "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.api.default.default.dc1" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkKgAwIBAgIRAJrvEdaRAkSltrotd/l/j2cwCgYIKoZIzj0EAwIwgbgx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjE/MD0GA1UEAxM2Q29uc3VsIEFnZW50IENB\nIDk2NjM4NzM1MDkzNTU5NTIwNDk3MTQwOTU3MDY1MTc0OTg3NDMxMB4XDTIwMDQx\nNDIyMzE1MloXDTIxMDQxNDIyMzE1MlowHDEaMBgGA1UEAxMRc2VydmVyLmRjMS5j\nb25zdWwwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQ4v0FoIYI0OWmxE2MR6w5l\n0pWGhc02RpsOPj/6RS1fmXMMu7JzPzwCmkGcR16RlwwhNFKCZsWpvAjVRHf/pTp+\no4HHMIHEMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB\nBQUHAwIwDAYDVR0TAQH/BAIwADApBgNVHQ4EIgQgk7kABFitAy3PluyNtmzYiC7H\njSN8W/K/OXNJQAQAscMwKwYDVR0jBCQwIoAgNKbPPepvRHXSAPTc+a/BXBzFX1qJ\ny+Zi7qtjlFX7qtUwLQYDVR0RBCYwJIIRc2VydmVyLmRjMS5jb25zdWyCCWxvY2Fs\naG9zdIcEfwAAATAKBggqhkjOPQQDAgNJADBGAiEAhP4HmN5BWysWTbQWClXaWUah\nLpBGFrvc/2cCQuyEZKsCIQD6JyYCYMArtWwZ4G499zktxrFlqfX14bqyONrxtA5I\nDw==\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIE3KbKXHdsa0vvC1fysQaGdoJRgjRALIolI4XJanie+coAoGCCqGSM49\nAwEHoUQDQgAEOL9BaCGCNDlpsRNjEesOZdKVhoXNNkabDj4/+kUtX5lzDLuycz88\nAppBnEdekZcMITRSgmbFqbwI1UR3/6U6fg==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - }, - { - "filterChainMatch": { - "serverNames": [ - "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.cache.default.default.dc1" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICmjCCAkGgAwIBAgIQe1ZmC0rzRwer6jaH1YIUIjAKBggqhkjOPQQDAjCBuDEL\nMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2Nv\nMRowGAYDVQQJExExMDEgU2Vjb25kIFN0cmVldDEOMAwGA1UEERMFOTQxMDUxFzAV\nBgNVBAoTDkhhc2hpQ29ycCBJbmMuMT8wPQYDVQQDEzZDb25zdWwgQWdlbnQgQ0Eg\nODE5ODAwNjg0MDM0MTM3ODkyNDYxNTA1MDk0NDU3OTU1MTQxNjEwHhcNMjAwNjE5\nMTU1MjAzWhcNMjEwNjE5MTU1MjAzWjAcMRowGAYDVQQDExFzZXJ2ZXIuZGMxLmNv\nbnN1bDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH2aWaaa3fpQLBayheHiKlrH\n+z53m0frfGknKjOhOPVYDVHV8x0OE01negswVQbKHAtxPf1M8Zy+WbI9rK7Ua1mj\ngccwgcQwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF\nBQcDAjAMBgNVHRMBAf8EAjAAMCkGA1UdDgQiBCDf9CPBSUwwZvpeW73oJLTmgQE2\ntW1NKpL5t1uq9WFcqDArBgNVHSMEJDAigCCPPd/NxgZB0tq2M8pdVpPj3Cr79iTv\ni4/T1ysodfMb7zAtBgNVHREEJjAkghFzZXJ2ZXIuZGMxLmNvbnN1bIIJbG9jYWxo\nb3N0hwR/AAABMAoGCCqGSM49BAMCA0cAMEQCIFCjFZAoXq0s2ied2eIBv0i1KoW5\nIhCylnKFt6iHkyDeAiBBCByTcjHRgEQmqyPojQKoO584EFiczTub9aWdnf9tEw==\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEINsen3S8xzxMrKcRZIvxXzhKDn43Tw9ttqWEFU9TqS5hoAoGCCqGSM49\nAwEHoUQDQgAEfZpZpprd+lAsFrKF4eIqWsf7PnebR+t8aScqM6E49VgNUdXzHQ4T\nTWd6CzBVBsocC3E9/UzxnL5Zsj2srtRrWQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - }, - { - "filterChainMatch": { - "serverNames": [ - "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkOgAwIBAgIRAKF+qDJbaOULNL1TIatrsBowCgYIKoZIzj0EAwIwgbkx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjFAMD4GA1UEAxM3Q29uc3VsIEFnZW50IENB\nIDE4Nzg3MDAwNjUzMDcxOTYzNTk1ODkwNTE1ODY1NjEzMDA2MTU0NDAeFw0yMDA2\nMTkxNTMxMzRaFw0yMTA2MTkxNTMxMzRaMBwxGjAYBgNVBAMTEXNlcnZlci5kYzEu\nY29uc3VsMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEdQ8Igci5f7ZvvCVsxXt9\ntLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZbz/82EwPoS7Dqo3LTK4IuelOimoNNxuk\nkaOBxzCBxDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG\nAQUFBwMCMAwGA1UdEwEB/wQCMAAwKQYDVR0OBCIEILzTLkfJcdWQnTMKUcai/YJq\n0RqH1pjCqtY7SOU4gGOTMCsGA1UdIwQkMCKAIMa2vNcTEC5AGfHIYARJ/4sodX0o\nLzCj3lpw7BcEzPTcMC0GA1UdEQQmMCSCEXNlcnZlci5kYzEuY29uc3Vsgglsb2Nh\nbGhvc3SHBH8AAAEwCgYIKoZIzj0EAwIDSAAwRQIgBZ/Z4GSLEc98WvT/qjTVCNTG\n1WNaAaesVbkRx+J0yl8CIQDAVoqY9ByA5vKHjnQrxWlc/JUtJz8wudg7e/OCRriP\nSg==\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIN1v14FaNxgY4MgjDOOWthen8dgwB0lNMs9/j2TfrnxzoAoGCCqGSM49\nAwEHoUQDQgAEdQ8Igci5f7ZvvCVsxXt9tLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZ\nbz/82EwPoS7Dqo3LTK4IuelOimoNNxukkQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - }, - { - "filterChainMatch": { - "serverNames": [ - "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.web.default.default.dc1" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - }, - { - "filters": [ - { - "name": "envoy.filters.network.sni_cluster", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.sni_cluster.v3.SniCluster" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "", - "statPrefix": "terminating_gateway.default" - } - } - ] - } - ], - "listenerFilters": [ - { - "name": "envoy.filters.listener.tls_inspector", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.listener.tls_inspector.v3.TlsInspector" - } - } - ], - "name": "default:1.2.3.4:8443", - "trafficDirection": "INBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/listeners/terminating-gateway-tcp-keepalives.latest.golden b/agent/xds/testdata/listeners/terminating-gateway-tcp-keepalives.latest.golden deleted file mode 100644 index 45ad9d29a0958..0000000000000 --- a/agent/xds/testdata/listeners/terminating-gateway-tcp-keepalives.latest.golden +++ /dev/null @@ -1,246 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "address": { - "socketAddress": { - "address": "1.2.3.4", - "portValue": 8443 - } - }, - "filterChains": [ - { - "filterChainMatch": { - "serverNames": [ - "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.api.default.default.dc1" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkKgAwIBAgIRAJrvEdaRAkSltrotd/l/j2cwCgYIKoZIzj0EAwIwgbgx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjE/MD0GA1UEAxM2Q29uc3VsIEFnZW50IENB\nIDk2NjM4NzM1MDkzNTU5NTIwNDk3MTQwOTU3MDY1MTc0OTg3NDMxMB4XDTIwMDQx\nNDIyMzE1MloXDTIxMDQxNDIyMzE1MlowHDEaMBgGA1UEAxMRc2VydmVyLmRjMS5j\nb25zdWwwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQ4v0FoIYI0OWmxE2MR6w5l\n0pWGhc02RpsOPj/6RS1fmXMMu7JzPzwCmkGcR16RlwwhNFKCZsWpvAjVRHf/pTp+\no4HHMIHEMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB\nBQUHAwIwDAYDVR0TAQH/BAIwADApBgNVHQ4EIgQgk7kABFitAy3PluyNtmzYiC7H\njSN8W/K/OXNJQAQAscMwKwYDVR0jBCQwIoAgNKbPPepvRHXSAPTc+a/BXBzFX1qJ\ny+Zi7qtjlFX7qtUwLQYDVR0RBCYwJIIRc2VydmVyLmRjMS5jb25zdWyCCWxvY2Fs\naG9zdIcEfwAAATAKBggqhkjOPQQDAgNJADBGAiEAhP4HmN5BWysWTbQWClXaWUah\nLpBGFrvc/2cCQuyEZKsCIQD6JyYCYMArtWwZ4G499zktxrFlqfX14bqyONrxtA5I\nDw==\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIE3KbKXHdsa0vvC1fysQaGdoJRgjRALIolI4XJanie+coAoGCCqGSM49\nAwEHoUQDQgAEOL9BaCGCNDlpsRNjEesOZdKVhoXNNkabDj4/+kUtX5lzDLuycz88\nAppBnEdekZcMITRSgmbFqbwI1UR3/6U6fg==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - }, - { - "filterChainMatch": { - "serverNames": [ - "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.cache.default.default.dc1" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICmjCCAkGgAwIBAgIQe1ZmC0rzRwer6jaH1YIUIjAKBggqhkjOPQQDAjCBuDEL\nMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2Nv\nMRowGAYDVQQJExExMDEgU2Vjb25kIFN0cmVldDEOMAwGA1UEERMFOTQxMDUxFzAV\nBgNVBAoTDkhhc2hpQ29ycCBJbmMuMT8wPQYDVQQDEzZDb25zdWwgQWdlbnQgQ0Eg\nODE5ODAwNjg0MDM0MTM3ODkyNDYxNTA1MDk0NDU3OTU1MTQxNjEwHhcNMjAwNjE5\nMTU1MjAzWhcNMjEwNjE5MTU1MjAzWjAcMRowGAYDVQQDExFzZXJ2ZXIuZGMxLmNv\nbnN1bDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH2aWaaa3fpQLBayheHiKlrH\n+z53m0frfGknKjOhOPVYDVHV8x0OE01negswVQbKHAtxPf1M8Zy+WbI9rK7Ua1mj\ngccwgcQwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF\nBQcDAjAMBgNVHRMBAf8EAjAAMCkGA1UdDgQiBCDf9CPBSUwwZvpeW73oJLTmgQE2\ntW1NKpL5t1uq9WFcqDArBgNVHSMEJDAigCCPPd/NxgZB0tq2M8pdVpPj3Cr79iTv\ni4/T1ysodfMb7zAtBgNVHREEJjAkghFzZXJ2ZXIuZGMxLmNvbnN1bIIJbG9jYWxo\nb3N0hwR/AAABMAoGCCqGSM49BAMCA0cAMEQCIFCjFZAoXq0s2ied2eIBv0i1KoW5\nIhCylnKFt6iHkyDeAiBBCByTcjHRgEQmqyPojQKoO584EFiczTub9aWdnf9tEw==\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEINsen3S8xzxMrKcRZIvxXzhKDn43Tw9ttqWEFU9TqS5hoAoGCCqGSM49\nAwEHoUQDQgAEfZpZpprd+lAsFrKF4eIqWsf7PnebR+t8aScqM6E49VgNUdXzHQ4T\nTWd6CzBVBsocC3E9/UzxnL5Zsj2srtRrWQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - }, - { - "filterChainMatch": { - "serverNames": [ - "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.db.default.default.dc1" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICnTCCAkOgAwIBAgIRAKF+qDJbaOULNL1TIatrsBowCgYIKoZIzj0EAwIwgbkx\nCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj\nbzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw\nFQYDVQQKEw5IYXNoaUNvcnAgSW5jLjFAMD4GA1UEAxM3Q29uc3VsIEFnZW50IENB\nIDE4Nzg3MDAwNjUzMDcxOTYzNTk1ODkwNTE1ODY1NjEzMDA2MTU0NDAeFw0yMDA2\nMTkxNTMxMzRaFw0yMTA2MTkxNTMxMzRaMBwxGjAYBgNVBAMTEXNlcnZlci5kYzEu\nY29uc3VsMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEdQ8Igci5f7ZvvCVsxXt9\ntLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZbz/82EwPoS7Dqo3LTK4IuelOimoNNxuk\nkaOBxzCBxDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG\nAQUFBwMCMAwGA1UdEwEB/wQCMAAwKQYDVR0OBCIEILzTLkfJcdWQnTMKUcai/YJq\n0RqH1pjCqtY7SOU4gGOTMCsGA1UdIwQkMCKAIMa2vNcTEC5AGfHIYARJ/4sodX0o\nLzCj3lpw7BcEzPTcMC0GA1UdEQQmMCSCEXNlcnZlci5kYzEuY29uc3Vsgglsb2Nh\nbGhvc3SHBH8AAAEwCgYIKoZIzj0EAwIDSAAwRQIgBZ/Z4GSLEc98WvT/qjTVCNTG\n1WNaAaesVbkRx+J0yl8CIQDAVoqY9ByA5vKHjnQrxWlc/JUtJz8wudg7e/OCRriP\nSg==\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIN1v14FaNxgY4MgjDOOWthen8dgwB0lNMs9/j2TfrnxzoAoGCCqGSM49\nAwEHoUQDQgAEdQ8Igci5f7ZvvCVsxXt9tLfvczD+60XHg0OC0+Aka7ZjQfbEjQwZ\nbz/82EwPoS7Dqo3LTK4IuelOimoNNxukkQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - }, - { - "filterChainMatch": { - "serverNames": [ - "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "statPrefix": "upstream.web.default.default.dc1" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICjDCCAjKgAwIBAgIIC5llxGV1gB8wCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowDjEMMAoG\nA1UEAxMDd2ViMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADPv1RHVNRfa2VKR\nAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Favq5E0ivpNtv1QnFhxtPd7d5k4e+T7\nSkW1TaOCAXIwggFuMA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcD\nAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBoBgNVHQ4EYQRfN2Q6MDc6ODc6M2E6\nNDA6MTk6NDc6YzM6NWE6YzA6YmE6NjI6ZGY6YWY6NGI6ZDQ6MDU6MjU6NzY6M2Q6\nNWE6OGQ6MTY6OGQ6Njc6NWU6MmU6YTA6MzQ6N2Q6ZGM6ZmYwagYDVR0jBGMwYYBf\nZDE6MTE6MTE6YWM6MmE6YmE6OTc6YjI6M2Y6YWM6N2I6YmQ6ZGE6YmU6YjE6OGE6\nZmM6OWE6YmE6YjU6YmM6ODM6ZTc6NWU6NDE6NmY6ZjI6NzM6OTU6NTg6MGM6ZGIw\nWQYDVR0RBFIwUIZOc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9ucy9kZWZhdWx0L2RjL2RjMS9zdmMvd2ViMAoGCCqG\nSM49BAMCA0gAMEUCIGC3TTvvjj76KMrguVyFf4tjOqaSCRie3nmHMRNNRav7AiEA\npY0heYeK9A6iOLrzqxSerkXXQyj5e9bE4VgUnxgPU6g=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIMoTkpRggp3fqZzFKh82yS4LjtJI+XY+qX/7DefHFrtdoAoGCCqGSM49\nAwEHoUQDQgAEADPv1RHVNRfa2VKRAB16b6rZnEt7tuhaxCFpQXPj7M2omb0B9Fav\nq5E0ivpNtv1QnFhxtPd7d5k4e+T7SkW1TQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "tlsParams": {}, - "validationContext": { - "trustedCa": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICXDCCAgKgAwIBAgIICpZq70Z9LyUwCgYIKoZIzj0EAwIwFDESMBAGA1UEAxMJ\nVGVzdCBDQSAyMB4XDTE5MDMyMjEzNTgyNloXDTI5MDMyMjEzNTgyNlowFDESMBAG\nA1UEAxMJVGVzdCBDQSAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIhywH1gx\nAsMwuF3ukAI5YL2jFxH6Usnma1HFSfVyxbXX1/uoZEYrj8yCAtdU2yoHETyd+Zx2\nThhRLP79pYegCaOCATwwggE4MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTAD\nAQH/MGgGA1UdDgRhBF9kMToxMToxMTphYzoyYTpiYTo5NzpiMjozZjphYzo3Yjpi\nZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1ZTo0MTo2ZjpmMjo3\nMzo5NTo1ODowYzpkYjBqBgNVHSMEYzBhgF9kMToxMToxMTphYzoyYTpiYTo5Nzpi\nMjozZjphYzo3YjpiZDpkYTpiZTpiMTo4YTpmYzo5YTpiYTpiNTpiYzo4MzplNzo1\nZTo0MTo2ZjpmMjo3Mzo5NTo1ODowYzpkYjA/BgNVHREEODA2hjRzcGlmZmU6Ly8x\nMTExMTExMS0yMjIyLTMzMzMtNDQ0NC01NTU1NTU1NTU1NTUuY29uc3VsMAoGCCqG\nSM49BAMCA0gAMEUCICOY0i246rQHJt8o8Oya0D5PLL1FnmsQmQqIGCi31RwnAiEA\noR5f6Ku+cig2Il8T8LJujOp2/2A72QcHZA57B13y+8o=\n-----END CERTIFICATE-----\n" - } - } - }, - "requireClientCertificate": true - } - } - }, - { - "filters": [ - { - "name": "envoy.filters.network.sni_cluster", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.sni_cluster.v3.SniCluster" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "cluster": "", - "statPrefix": "terminating_gateway.default" - } - } - ] - } - ], - "listenerFilters": [ - { - "name": "envoy.filters.listener.tls_inspector", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.listener.tls_inspector.v3.TlsInspector" - } - } - ], - "name": "default:1.2.3.4:8443", - "trafficDirection": "INBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/access-logs-defaults.latest.golden b/agent/xds/testdata/routes/access-logs-defaults.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/access-logs-defaults.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/access-logs-json-file.latest.golden b/agent/xds/testdata/routes/access-logs-json-file.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/access-logs-json-file.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/access-logs-text-stderr-disablelistenerlogs.latest.golden b/agent/xds/testdata/routes/access-logs-text-stderr-disablelistenerlogs.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/access-logs-text-stderr-disablelistenerlogs.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/api-gateway-http-listener-with-http-route.latest.golden b/agent/xds/testdata/routes/api-gateway-http-listener-with-http-route.latest.golden deleted file mode 100644 index 3409e2f0dabc2..0000000000000 --- a/agent/xds/testdata/routes/api-gateway-http-listener-with-http-route.latest.golden +++ /dev/null @@ -1,31 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "8080", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "*", - "*:8080" - ], - "name": "api-gateway-listener-9b9265b", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "http-service.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/api-gateway-http-listener.latest.golden b/agent/xds/testdata/routes/api-gateway-http-listener.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/api-gateway-http-listener.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/api-gateway-nil-config-entry.latest.golden b/agent/xds/testdata/routes/api-gateway-nil-config-entry.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/api-gateway-nil-config-entry.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/api-gateway-tcp-listener-with-tcp-and-http-route.latest.golden b/agent/xds/testdata/routes/api-gateway-tcp-listener-with-tcp-and-http-route.latest.golden deleted file mode 100644 index 9a3033d238161..0000000000000 --- a/agent/xds/testdata/routes/api-gateway-tcp-listener-with-tcp-and-http-route.latest.golden +++ /dev/null @@ -1,31 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "8081", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "*", - "*:8081" - ], - "name": "api-gateway-listener-http-9b9265b", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "http-service.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/api-gateway-tcp-listener-with-tcp-route.latest.golden b/agent/xds/testdata/routes/api-gateway-tcp-listener-with-tcp-route.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/api-gateway-tcp-listener-with-tcp-route.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/api-gateway-tcp-listener.latest.golden b/agent/xds/testdata/routes/api-gateway-tcp-listener.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/api-gateway-tcp-listener.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/api-gateway.latest.golden b/agent/xds/testdata/routes/api-gateway.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/api-gateway.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/connect-proxy-upstream-defaults.latest.golden b/agent/xds/testdata/routes/connect-proxy-upstream-defaults.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/connect-proxy-upstream-defaults.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/connect-proxy-with-chain-and-failover-to-cluster-peer.latest.golden b/agent/xds/testdata/routes/connect-proxy-with-chain-and-failover-to-cluster-peer.latest.golden index 8b919343d21a9..9a73db46e0d6e 100644 --- a/agent/xds/testdata/routes/connect-proxy-with-chain-and-failover-to-cluster-peer.latest.golden +++ b/agent/xds/testdata/routes/connect-proxy-with-chain-and-failover-to-cluster-peer.latest.golden @@ -1,5 +1,31 @@ { "nonce": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", + "name": "db", + "validateClusters": true, + "virtualHosts": [ + { + "domains": [ + "*" + ], + "name": "db", + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "timeout": "33s" + } + } + ] + } + ] + } + ], "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", "versionInfo": "00000001" } \ No newline at end of file diff --git a/agent/xds/testdata/routes/connect-proxy-with-chain-and-failover.latest.golden b/agent/xds/testdata/routes/connect-proxy-with-chain-and-failover.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/connect-proxy-with-chain-and-failover.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/connect-proxy-with-chain-and-redirect-to-cluster-peer.latest.golden b/agent/xds/testdata/routes/connect-proxy-with-chain-and-redirect-to-cluster-peer.latest.golden index 8b919343d21a9..b5da244e3e67f 100644 --- a/agent/xds/testdata/routes/connect-proxy-with-chain-and-redirect-to-cluster-peer.latest.golden +++ b/agent/xds/testdata/routes/connect-proxy-with-chain-and-redirect-to-cluster-peer.latest.golden @@ -1,5 +1,31 @@ { "nonce": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", + "name": "db", + "validateClusters": true, + "virtualHosts": [ + { + "domains": [ + "*" + ], + "name": "db", + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "db.default.cluster-01.external.peer1.domain", + "timeout": "33s" + } + } + ] + } + ] + } + ], "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", "versionInfo": "00000001" } \ No newline at end of file diff --git a/agent/xds/testdata/routes/connect-proxy-with-chain-external-sni.latest.golden b/agent/xds/testdata/routes/connect-proxy-with-chain-external-sni.latest.golden index 8b919343d21a9..9a73db46e0d6e 100644 --- a/agent/xds/testdata/routes/connect-proxy-with-chain-external-sni.latest.golden +++ b/agent/xds/testdata/routes/connect-proxy-with-chain-external-sni.latest.golden @@ -1,5 +1,31 @@ { "nonce": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", + "name": "db", + "validateClusters": true, + "virtualHosts": [ + { + "domains": [ + "*" + ], + "name": "db", + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "timeout": "33s" + } + } + ] + } + ] + } + ], "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", "versionInfo": "00000001" } \ No newline at end of file diff --git a/agent/xds/testdata/routes/connect-proxy-with-chain-http2.latest.golden b/agent/xds/testdata/routes/connect-proxy-with-chain-http2.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/connect-proxy-with-chain-http2.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/connect-proxy-with-chain.latest.golden b/agent/xds/testdata/routes/connect-proxy-with-chain.latest.golden index 8b919343d21a9..9a73db46e0d6e 100644 --- a/agent/xds/testdata/routes/connect-proxy-with-chain.latest.golden +++ b/agent/xds/testdata/routes/connect-proxy-with-chain.latest.golden @@ -1,5 +1,31 @@ { "nonce": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", + "name": "db", + "validateClusters": true, + "virtualHosts": [ + { + "domains": [ + "*" + ], + "name": "db", + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "timeout": "33s" + } + } + ] + } + ] + } + ], "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", "versionInfo": "00000001" } \ No newline at end of file diff --git a/agent/xds/testdata/routes/connect-proxy-with-default-chain-and-custom-cluster.latest.golden b/agent/xds/testdata/routes/connect-proxy-with-default-chain-and-custom-cluster.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/connect-proxy-with-default-chain-and-custom-cluster.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/connect-proxy-with-grpc-chain.latest.golden b/agent/xds/testdata/routes/connect-proxy-with-grpc-chain.latest.golden deleted file mode 100644 index 9a73db46e0d6e..0000000000000 --- a/agent/xds/testdata/routes/connect-proxy-with-grpc-chain.latest.golden +++ /dev/null @@ -1,31 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "db", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "db", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "timeout": "33s" - } - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/connect-proxy-with-http-chain.latest.golden b/agent/xds/testdata/routes/connect-proxy-with-http-chain.latest.golden deleted file mode 100644 index 9a73db46e0d6e..0000000000000 --- a/agent/xds/testdata/routes/connect-proxy-with-http-chain.latest.golden +++ /dev/null @@ -1,31 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "db", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "db", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "timeout": "33s" - } - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/connect-proxy-with-http2-chain.latest.golden b/agent/xds/testdata/routes/connect-proxy-with-http2-chain.latest.golden deleted file mode 100644 index 9a73db46e0d6e..0000000000000 --- a/agent/xds/testdata/routes/connect-proxy-with-http2-chain.latest.golden +++ /dev/null @@ -1,31 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "db", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "db", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "timeout": "33s" - } - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/connect-proxy-with-jwt-config-entry-with-local.latest.golden b/agent/xds/testdata/routes/connect-proxy-with-jwt-config-entry-with-local.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/connect-proxy-with-jwt-config-entry-with-local.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/connect-proxy-with-jwt-config-entry-with-remote-jwks.latest.golden b/agent/xds/testdata/routes/connect-proxy-with-jwt-config-entry-with-remote-jwks.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/connect-proxy-with-jwt-config-entry-with-remote-jwks.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.latest.golden b/agent/xds/testdata/routes/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.latest.golden b/agent/xds/testdata/routes/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.latest.golden b/agent/xds/testdata/routes/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.latest.golden b/agent/xds/testdata/routes/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.latest.golden b/agent/xds/testdata/routes/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/connect-proxy-with-tcp-chain-failover-through-local-gateway.latest.golden b/agent/xds/testdata/routes/connect-proxy-with-tcp-chain-failover-through-local-gateway.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/connect-proxy-with-tcp-chain-failover-through-local-gateway.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.latest.golden b/agent/xds/testdata/routes/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/connect-proxy-with-tcp-chain-failover-through-remote-gateway.latest.golden b/agent/xds/testdata/routes/connect-proxy-with-tcp-chain-failover-through-remote-gateway.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/connect-proxy-with-tcp-chain-failover-through-remote-gateway.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/connect-proxy-with-tcp-chain.latest.golden b/agent/xds/testdata/routes/connect-proxy-with-tcp-chain.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/connect-proxy-with-tcp-chain.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/connect-proxy-with-tls-incoming-cipher-suites.latest.golden b/agent/xds/testdata/routes/connect-proxy-with-tls-incoming-cipher-suites.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/connect-proxy-with-tls-incoming-cipher-suites.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/connect-proxy-with-tls-incoming-max-version.latest.golden b/agent/xds/testdata/routes/connect-proxy-with-tls-incoming-max-version.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/connect-proxy-with-tls-incoming-max-version.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/connect-proxy-with-tls-incoming-min-version.latest.golden b/agent/xds/testdata/routes/connect-proxy-with-tls-incoming-min-version.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/connect-proxy-with-tls-incoming-min-version.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/connect-proxy-with-tls-outgoing-cipher-suites.latest.golden b/agent/xds/testdata/routes/connect-proxy-with-tls-outgoing-cipher-suites.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/connect-proxy-with-tls-outgoing-cipher-suites.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/connect-proxy-with-tls-outgoing-max-version.latest.golden b/agent/xds/testdata/routes/connect-proxy-with-tls-outgoing-max-version.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/connect-proxy-with-tls-outgoing-max-version.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/connect-proxy-with-tls-outgoing-min-version-auto.latest.golden b/agent/xds/testdata/routes/connect-proxy-with-tls-outgoing-min-version-auto.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/connect-proxy-with-tls-outgoing-min-version-auto.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/connect-proxy-with-tls-outgoing-min-version.latest.golden b/agent/xds/testdata/routes/connect-proxy-with-tls-outgoing-min-version.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/connect-proxy-with-tls-outgoing-min-version.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/connect-proxy-with-tproxy-and-permissive-mtls.latest.golden b/agent/xds/testdata/routes/connect-proxy-with-tproxy-and-permissive-mtls.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/connect-proxy-with-tproxy-and-permissive-mtls.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/connect-proxy-without-tproxy-and-permissive-mtls.latest.golden b/agent/xds/testdata/routes/connect-proxy-without-tproxy-and-permissive-mtls.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/connect-proxy-without-tproxy-and-permissive-mtls.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/custom-limits-max-connections-only.latest.golden b/agent/xds/testdata/routes/custom-limits-max-connections-only.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/custom-limits-max-connections-only.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/custom-limits-set-to-zero.latest.golden b/agent/xds/testdata/routes/custom-limits-set-to-zero.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/custom-limits-set-to-zero.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/custom-limits.latest.golden b/agent/xds/testdata/routes/custom-limits.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/custom-limits.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/custom-local-app.latest.golden b/agent/xds/testdata/routes/custom-local-app.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/custom-local-app.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/custom-max-inbound-connections.latest.golden b/agent/xds/testdata/routes/custom-max-inbound-connections.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/custom-max-inbound-connections.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/custom-passive-healthcheck-zero-consecutive_5xx.latest.golden b/agent/xds/testdata/routes/custom-passive-healthcheck-zero-consecutive_5xx.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/custom-passive-healthcheck-zero-consecutive_5xx.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/custom-passive-healthcheck.latest.golden b/agent/xds/testdata/routes/custom-passive-healthcheck.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/custom-passive-healthcheck.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/custom-public-listener-http-2.latest.golden b/agent/xds/testdata/routes/custom-public-listener-http-2.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/custom-public-listener-http-2.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/custom-public-listener-http-missing.latest.golden b/agent/xds/testdata/routes/custom-public-listener-http-missing.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/custom-public-listener-http-missing.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/custom-public-listener-http.latest.golden b/agent/xds/testdata/routes/custom-public-listener-http.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/custom-public-listener-http.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/custom-public-listener.latest.golden b/agent/xds/testdata/routes/custom-public-listener.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/custom-public-listener.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/custom-timeouts.latest.golden b/agent/xds/testdata/routes/custom-timeouts.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/custom-timeouts.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/custom-trace-listener.latest.golden b/agent/xds/testdata/routes/custom-trace-listener.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/custom-trace-listener.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/custom-upstream-default-chain.latest.golden b/agent/xds/testdata/routes/custom-upstream-default-chain.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/custom-upstream-default-chain.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/custom-upstream-ignored-with-disco-chain.latest.golden b/agent/xds/testdata/routes/custom-upstream-ignored-with-disco-chain.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/custom-upstream-ignored-with-disco-chain.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/custom-upstream-with-prepared-query.latest.golden b/agent/xds/testdata/routes/custom-upstream-with-prepared-query.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/custom-upstream-with-prepared-query.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/custom-upstream.latest.golden b/agent/xds/testdata/routes/custom-upstream.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/custom-upstream.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/downstream-service-with-unix-sockets.latest.golden b/agent/xds/testdata/routes/downstream-service-with-unix-sockets.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/downstream-service-with-unix-sockets.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/expose-checks-grpc.latest.golden b/agent/xds/testdata/routes/expose-checks-grpc.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/expose-checks-grpc.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/expose-checks-http-with-bind-override.latest.golden b/agent/xds/testdata/routes/expose-checks-http-with-bind-override.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/expose-checks-http-with-bind-override.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/expose-checks-http.latest.golden b/agent/xds/testdata/routes/expose-checks-http.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/expose-checks-http.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/expose-checks.latest.golden b/agent/xds/testdata/routes/expose-checks.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/expose-checks.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/expose-paths-grpc-new-cluster-http1.latest.golden b/agent/xds/testdata/routes/expose-paths-grpc-new-cluster-http1.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/expose-paths-grpc-new-cluster-http1.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/expose-paths-local-app-paths.latest.golden b/agent/xds/testdata/routes/expose-paths-local-app-paths.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/expose-paths-local-app-paths.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/expose-paths-new-cluster-http2.latest.golden b/agent/xds/testdata/routes/expose-paths-new-cluster-http2.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/expose-paths-new-cluster-http2.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/grpc-public-listener.latest.golden b/agent/xds/testdata/routes/grpc-public-listener.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/grpc-public-listener.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/http-listener-with-timeouts.latest.golden b/agent/xds/testdata/routes/http-listener-with-timeouts.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/http-listener-with-timeouts.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/http-public-listener-no-xfcc.latest.golden b/agent/xds/testdata/routes/http-public-listener-no-xfcc.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/http-public-listener-no-xfcc.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/http-public-listener.latest.golden b/agent/xds/testdata/routes/http-public-listener.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/http-public-listener.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/http-upstream.latest.golden b/agent/xds/testdata/routes/http-upstream.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/http-upstream.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/http2-public-listener.latest.golden b/agent/xds/testdata/routes/http2-public-listener.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/http2-public-listener.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/ingress-gateway-bind-addrs.latest.golden b/agent/xds/testdata/routes/ingress-gateway-bind-addrs.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/ingress-gateway-bind-addrs.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/ingress-gateway-nil-config-entry.latest.golden b/agent/xds/testdata/routes/ingress-gateway-nil-config-entry.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/ingress-gateway-nil-config-entry.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/ingress-gateway-no-services.latest.golden b/agent/xds/testdata/routes/ingress-gateway-no-services.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/ingress-gateway-no-services.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/ingress-gateway-with-tls-outgoing-cipher-suites.latest.golden b/agent/xds/testdata/routes/ingress-gateway-with-tls-outgoing-cipher-suites.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/ingress-gateway-with-tls-outgoing-cipher-suites.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/ingress-gateway-with-tls-outgoing-max-version.latest.golden b/agent/xds/testdata/routes/ingress-gateway-with-tls-outgoing-max-version.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/ingress-gateway-with-tls-outgoing-max-version.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/ingress-gateway-with-tls-outgoing-min-version.latest.golden b/agent/xds/testdata/routes/ingress-gateway-with-tls-outgoing-min-version.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/ingress-gateway-with-tls-outgoing-min-version.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/ingress-gateway.latest.golden b/agent/xds/testdata/routes/ingress-gateway.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/ingress-gateway.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/ingress-multiple-listeners-duplicate-service.latest.golden b/agent/xds/testdata/routes/ingress-multiple-listeners-duplicate-service.latest.golden deleted file mode 100644 index cb29b2bdabd18..0000000000000 --- a/agent/xds/testdata/routes/ingress-multiple-listeners-duplicate-service.latest.golden +++ /dev/null @@ -1,72 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "443", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "foo.ingress.*", - "foo.ingress.*:443" - ], - "name": "foo", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "8080", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "foo.ingress.*", - "foo.ingress.*:8080" - ], - "name": "foo", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - }, - { - "domains": [ - "bar.ingress.*", - "bar.ingress.*:8080" - ], - "name": "bar", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "bar.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/ingress-with-chain-and-failover-to-cluster-peer.latest.golden b/agent/xds/testdata/routes/ingress-with-chain-and-failover-to-cluster-peer.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/ingress-with-chain-and-failover-to-cluster-peer.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/ingress-with-chain-and-failover.latest.golden b/agent/xds/testdata/routes/ingress-with-chain-and-failover.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/ingress-with-chain-and-failover.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/ingress-with-defaults-passive-health-check.latest.golden b/agent/xds/testdata/routes/ingress-with-defaults-passive-health-check.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/ingress-with-defaults-passive-health-check.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/ingress-with-defaults-service-max-connections.latest.golden b/agent/xds/testdata/routes/ingress-with-defaults-service-max-connections.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/ingress-with-defaults-service-max-connections.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/ingress-with-grpc-single-tls-listener.latest.golden b/agent/xds/testdata/routes/ingress-with-grpc-single-tls-listener.latest.golden deleted file mode 100644 index a5fd13c151256..0000000000000 --- a/agent/xds/testdata/routes/ingress-with-grpc-single-tls-listener.latest.golden +++ /dev/null @@ -1,55 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "8080", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "s1.ingress.*", - "s1.ingress.*:8080" - ], - "name": "s1", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "8081", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "s2.ingress.*", - "s2.ingress.*:8081" - ], - "name": "s2", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/ingress-with-http2-and-grpc-multiple-tls-listener.latest.golden b/agent/xds/testdata/routes/ingress-with-http2-and-grpc-multiple-tls-listener.latest.golden deleted file mode 100644 index a5fd13c151256..0000000000000 --- a/agent/xds/testdata/routes/ingress-with-http2-and-grpc-multiple-tls-listener.latest.golden +++ /dev/null @@ -1,55 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "8080", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "s1.ingress.*", - "s1.ingress.*:8080" - ], - "name": "s1", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "8081", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "s2.ingress.*", - "s2.ingress.*:8081" - ], - "name": "s2", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/ingress-with-http2-single-tls-listener.latest.golden b/agent/xds/testdata/routes/ingress-with-http2-single-tls-listener.latest.golden deleted file mode 100644 index a5fd13c151256..0000000000000 --- a/agent/xds/testdata/routes/ingress-with-http2-single-tls-listener.latest.golden +++ /dev/null @@ -1,55 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "8080", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "s1.ingress.*", - "s1.ingress.*:8080" - ], - "name": "s1", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "8081", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "s2.ingress.*", - "s2.ingress.*:8081" - ], - "name": "s2", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/ingress-with-overwrite-defaults-passive-health-check.latest.golden b/agent/xds/testdata/routes/ingress-with-overwrite-defaults-passive-health-check.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/ingress-with-overwrite-defaults-passive-health-check.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/ingress-with-overwrite-defaults-service-max-connections.latest.golden b/agent/xds/testdata/routes/ingress-with-overwrite-defaults-service-max-connections.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/ingress-with-overwrite-defaults-service-max-connections.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/ingress-with-sds-listener+service-level.latest.golden b/agent/xds/testdata/routes/ingress-with-sds-listener+service-level.latest.golden deleted file mode 100644 index de35eeddfdd7c..0000000000000 --- a/agent/xds/testdata/routes/ingress-with-sds-listener+service-level.latest.golden +++ /dev/null @@ -1,55 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "8080", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "s2.ingress.*", - "s2.ingress.*:8080" - ], - "name": "s2", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "8080_s1", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "s1.ingress.*", - "s1.ingress.*:8080" - ], - "name": "s1", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/ingress-with-sds-listener-gw-level-http.latest.golden b/agent/xds/testdata/routes/ingress-with-sds-listener-gw-level-http.latest.golden deleted file mode 100644 index 70dcd591060de..0000000000000 --- a/agent/xds/testdata/routes/ingress-with-sds-listener-gw-level-http.latest.golden +++ /dev/null @@ -1,31 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "8080", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "http.ingress.*", - "http.ingress.*:8080" - ], - "name": "http", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "http.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/ingress-with-sds-listener-gw-level-mixed-tls.latest.golden b/agent/xds/testdata/routes/ingress-with-sds-listener-gw-level-mixed-tls.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/ingress-with-sds-listener-gw-level-mixed-tls.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/ingress-with-sds-listener-gw-level.latest.golden b/agent/xds/testdata/routes/ingress-with-sds-listener-gw-level.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/ingress-with-sds-listener-gw-level.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/ingress-with-sds-listener-listener-level.latest.golden b/agent/xds/testdata/routes/ingress-with-sds-listener-listener-level.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/ingress-with-sds-listener-listener-level.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/ingress-with-sds-service-level-2.latest.golden b/agent/xds/testdata/routes/ingress-with-sds-service-level-2.latest.golden deleted file mode 100644 index 48d9d7b774439..0000000000000 --- a/agent/xds/testdata/routes/ingress-with-sds-service-level-2.latest.golden +++ /dev/null @@ -1,57 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "9191_foo", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "foo.example.com", - "foo.example.com:9191" - ], - "name": "foo", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "timeout": "22s" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "9191_web", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "www.example.com", - "www.example.com:9191" - ], - "name": "web", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "timeout": "22s" - } - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/ingress-with-sds-service-level-mixed-no-tls.latest.golden b/agent/xds/testdata/routes/ingress-with-sds-service-level-mixed-no-tls.latest.golden deleted file mode 100644 index de35eeddfdd7c..0000000000000 --- a/agent/xds/testdata/routes/ingress-with-sds-service-level-mixed-no-tls.latest.golden +++ /dev/null @@ -1,55 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "8080", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "s2.ingress.*", - "s2.ingress.*:8080" - ], - "name": "s2", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "8080_s1", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "s1.ingress.*", - "s1.ingress.*:8080" - ], - "name": "s1", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/ingress-with-sds-service-level.latest.golden b/agent/xds/testdata/routes/ingress-with-sds-service-level.latest.golden index be0cb1f2a4a50..48d9d7b774439 100644 --- a/agent/xds/testdata/routes/ingress-with-sds-service-level.latest.golden +++ b/agent/xds/testdata/routes/ingress-with-sds-service-level.latest.golden @@ -3,22 +3,23 @@ "resources": [ { "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "8080_s1", + "name": "9191_foo", "validateClusters": true, "virtualHosts": [ { "domains": [ - "s1.ingress.*", - "s1.ingress.*:8080" + "foo.example.com", + "foo.example.com:9191" ], - "name": "s1", + "name": "foo", "routes": [ { "match": { "prefix": "/" }, "route": { - "cluster": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + "cluster": "foo.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "timeout": "22s" } } ] @@ -27,22 +28,23 @@ }, { "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "8080_s2", + "name": "9191_web", "validateClusters": true, "virtualHosts": [ { "domains": [ - "s2.ingress.*", - "s2.ingress.*:8080" + "www.example.com", + "www.example.com:9191" ], - "name": "s2", + "name": "web", "routes": [ { "match": { "prefix": "/" }, "route": { - "cluster": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + "cluster": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", + "timeout": "22s" } } ] diff --git a/agent/xds/testdata/routes/ingress-with-service-max-connections.latest.golden b/agent/xds/testdata/routes/ingress-with-service-max-connections.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/ingress-with-service-max-connections.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/ingress-with-service-passive-health-check.latest.golden b/agent/xds/testdata/routes/ingress-with-service-passive-health-check.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/ingress-with-service-passive-health-check.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/ingress-with-single-tls-listener.latest.golden b/agent/xds/testdata/routes/ingress-with-single-tls-listener.latest.golden deleted file mode 100644 index a5fd13c151256..0000000000000 --- a/agent/xds/testdata/routes/ingress-with-single-tls-listener.latest.golden +++ /dev/null @@ -1,55 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "8080", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "s1.ingress.*", - "s1.ingress.*:8080" - ], - "name": "s1", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "8081", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "s2.ingress.*", - "s2.ingress.*:8081" - ], - "name": "s2", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/ingress-with-tcp-chain-double-failover-through-local-gateway-triggered.latest.golden b/agent/xds/testdata/routes/ingress-with-tcp-chain-double-failover-through-local-gateway-triggered.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/ingress-with-tcp-chain-double-failover-through-local-gateway-triggered.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/ingress-with-tcp-chain-double-failover-through-local-gateway.latest.golden b/agent/xds/testdata/routes/ingress-with-tcp-chain-double-failover-through-local-gateway.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/ingress-with-tcp-chain-double-failover-through-local-gateway.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/ingress-with-tcp-chain-double-failover-through-remote-gateway-triggered.latest.golden b/agent/xds/testdata/routes/ingress-with-tcp-chain-double-failover-through-remote-gateway-triggered.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/ingress-with-tcp-chain-double-failover-through-remote-gateway-triggered.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/ingress-with-tcp-chain-double-failover-through-remote-gateway.latest.golden b/agent/xds/testdata/routes/ingress-with-tcp-chain-double-failover-through-remote-gateway.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/ingress-with-tcp-chain-double-failover-through-remote-gateway.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/ingress-with-tcp-chain-failover-through-local-gateway-triggered.latest.golden b/agent/xds/testdata/routes/ingress-with-tcp-chain-failover-through-local-gateway-triggered.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/ingress-with-tcp-chain-failover-through-local-gateway-triggered.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/ingress-with-tcp-chain-failover-through-local-gateway.latest.golden b/agent/xds/testdata/routes/ingress-with-tcp-chain-failover-through-local-gateway.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/ingress-with-tcp-chain-failover-through-local-gateway.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/ingress-with-tcp-chain-failover-through-remote-gateway-triggered.latest.golden b/agent/xds/testdata/routes/ingress-with-tcp-chain-failover-through-remote-gateway-triggered.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/ingress-with-tcp-chain-failover-through-remote-gateway-triggered.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/ingress-with-tcp-chain-failover-through-remote-gateway.latest.golden b/agent/xds/testdata/routes/ingress-with-tcp-chain-failover-through-remote-gateway.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/ingress-with-tcp-chain-failover-through-remote-gateway.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/ingress-with-tls-listener-cipher-suites.latest.golden b/agent/xds/testdata/routes/ingress-with-tls-listener-cipher-suites.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/ingress-with-tls-listener-cipher-suites.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/ingress-with-tls-listener-max-version.latest.golden b/agent/xds/testdata/routes/ingress-with-tls-listener-max-version.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/ingress-with-tls-listener-max-version.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/ingress-with-tls-listener-min-version.latest.golden b/agent/xds/testdata/routes/ingress-with-tls-listener-min-version.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/ingress-with-tls-listener-min-version.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/ingress-with-tls-listener.latest.golden b/agent/xds/testdata/routes/ingress-with-tls-listener.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/ingress-with-tls-listener.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/ingress-with-tls-min-version-listeners-gateway-defaults.latest.golden b/agent/xds/testdata/routes/ingress-with-tls-min-version-listeners-gateway-defaults.latest.golden deleted file mode 100644 index 8dd74e7de7147..0000000000000 --- a/agent/xds/testdata/routes/ingress-with-tls-min-version-listeners-gateway-defaults.latest.golden +++ /dev/null @@ -1,127 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "8080", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "s1.ingress.*", - "s1.ingress.*:8080" - ], - "name": "s1", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "8081", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "s2.ingress.*", - "s2.ingress.*:8081" - ], - "name": "s2", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "8082", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "s3.ingress.*", - "s3.ingress.*:8082" - ], - "name": "s3", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "s3.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "8083", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "s4.ingress.*", - "s4.ingress.*:8083" - ], - "name": "s4", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "s4.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "8084", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "s4.ingress.*", - "s4.ingress.*:8084" - ], - "name": "s4", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "s4.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/ingress-with-tls-mixed-cipher-suites-listeners.latest.golden b/agent/xds/testdata/routes/ingress-with-tls-mixed-cipher-suites-listeners.latest.golden deleted file mode 100644 index a5fd13c151256..0000000000000 --- a/agent/xds/testdata/routes/ingress-with-tls-mixed-cipher-suites-listeners.latest.golden +++ /dev/null @@ -1,55 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "8080", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "s1.ingress.*", - "s1.ingress.*:8080" - ], - "name": "s1", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "8081", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "s2.ingress.*", - "s2.ingress.*:8081" - ], - "name": "s2", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/ingress-with-tls-mixed-listeners.latest.golden b/agent/xds/testdata/routes/ingress-with-tls-mixed-listeners.latest.golden deleted file mode 100644 index 78f110c770367..0000000000000 --- a/agent/xds/testdata/routes/ingress-with-tls-mixed-listeners.latest.golden +++ /dev/null @@ -1,55 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "8080", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "s1.ingress.*", - "s1.ingress.*:8080" - ], - "name": "s1", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "9090", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "s2.ingress.*", - "s2.ingress.*:9090" - ], - "name": "s2", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/ingress-with-tls-mixed-max-version-listeners.latest.golden b/agent/xds/testdata/routes/ingress-with-tls-mixed-max-version-listeners.latest.golden deleted file mode 100644 index 977c827264b28..0000000000000 --- a/agent/xds/testdata/routes/ingress-with-tls-mixed-max-version-listeners.latest.golden +++ /dev/null @@ -1,79 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "8080", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "s1.ingress.*", - "s1.ingress.*:8080" - ], - "name": "s1", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "8081", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "s2.ingress.*", - "s2.ingress.*:8081" - ], - "name": "s2", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "8082", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "s3.ingress.*", - "s3.ingress.*:8082" - ], - "name": "s3", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "s3.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/ingress-with-tls-mixed-min-version-listeners.latest.golden b/agent/xds/testdata/routes/ingress-with-tls-mixed-min-version-listeners.latest.golden deleted file mode 100644 index 977c827264b28..0000000000000 --- a/agent/xds/testdata/routes/ingress-with-tls-mixed-min-version-listeners.latest.golden +++ /dev/null @@ -1,79 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "8080", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "s1.ingress.*", - "s1.ingress.*:8080" - ], - "name": "s1", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "s1.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "8081", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "s2.ingress.*", - "s2.ingress.*:8081" - ], - "name": "s2", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "s2.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "8082", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "s3.ingress.*", - "s3.ingress.*:8082" - ], - "name": "s3", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "s3.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/listener-balance-inbound-connections.latest.golden b/agent/xds/testdata/routes/listener-balance-inbound-connections.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/listener-balance-inbound-connections.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/listener-balance-outbound-connections-bind-port.latest.golden b/agent/xds/testdata/routes/listener-balance-outbound-connections-bind-port.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/listener-balance-outbound-connections-bind-port.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/listener-bind-address-port.latest.golden b/agent/xds/testdata/routes/listener-bind-address-port.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/listener-bind-address-port.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/listener-bind-address.latest.golden b/agent/xds/testdata/routes/listener-bind-address.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/listener-bind-address.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/listener-bind-port.latest.golden b/agent/xds/testdata/routes/listener-bind-port.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/listener-bind-port.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/listener-max-inbound-connections.latest.golden b/agent/xds/testdata/routes/listener-max-inbound-connections.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/listener-max-inbound-connections.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/listener-unix-domain-socket.latest.golden b/agent/xds/testdata/routes/listener-unix-domain-socket.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/listener-unix-domain-socket.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/mesh-gateway-custom-addresses.latest.golden b/agent/xds/testdata/routes/mesh-gateway-custom-addresses.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/mesh-gateway-custom-addresses.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/mesh-gateway-default-service-subset.latest.golden b/agent/xds/testdata/routes/mesh-gateway-default-service-subset.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/mesh-gateway-default-service-subset.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/mesh-gateway-hash-lb-ignored.latest.golden b/agent/xds/testdata/routes/mesh-gateway-hash-lb-ignored.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/mesh-gateway-hash-lb-ignored.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/mesh-gateway-ignore-extra-resolvers.latest.golden b/agent/xds/testdata/routes/mesh-gateway-ignore-extra-resolvers.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/mesh-gateway-ignore-extra-resolvers.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/mesh-gateway-newer-information-in-federation-states.latest.golden b/agent/xds/testdata/routes/mesh-gateway-newer-information-in-federation-states.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/mesh-gateway-newer-information-in-federation-states.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/mesh-gateway-no-services.latest.golden b/agent/xds/testdata/routes/mesh-gateway-no-services.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/mesh-gateway-no-services.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/mesh-gateway-non-hash-lb-injected.latest.golden b/agent/xds/testdata/routes/mesh-gateway-non-hash-lb-injected.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/mesh-gateway-non-hash-lb-injected.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/mesh-gateway-older-information-in-federation-states.latest.golden b/agent/xds/testdata/routes/mesh-gateway-older-information-in-federation-states.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/mesh-gateway-older-information-in-federation-states.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/mesh-gateway-service-subsets.latest.golden b/agent/xds/testdata/routes/mesh-gateway-service-subsets.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/mesh-gateway-service-subsets.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/mesh-gateway-service-subsets2.latest.golden b/agent/xds/testdata/routes/mesh-gateway-service-subsets2.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/mesh-gateway-service-subsets2.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/mesh-gateway-service-timeouts.latest.golden b/agent/xds/testdata/routes/mesh-gateway-service-timeouts.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/mesh-gateway-service-timeouts.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/mesh-gateway-tagged-addresses.latest.golden b/agent/xds/testdata/routes/mesh-gateway-tagged-addresses.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/mesh-gateway-tagged-addresses.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/mesh-gateway-tcp-keepalives.latest.golden b/agent/xds/testdata/routes/mesh-gateway-tcp-keepalives.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/mesh-gateway-tcp-keepalives.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/mesh-gateway-using-federation-control-plane.latest.golden b/agent/xds/testdata/routes/mesh-gateway-using-federation-control-plane.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/mesh-gateway-using-federation-control-plane.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/mesh-gateway-using-federation-states.latest.golden b/agent/xds/testdata/routes/mesh-gateway-using-federation-states.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/mesh-gateway-using-federation-states.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/mesh-gateway.latest.golden b/agent/xds/testdata/routes/mesh-gateway.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/mesh-gateway.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/terminating-gateway-custom-and-tagged-addresses.latest.golden b/agent/xds/testdata/routes/terminating-gateway-custom-and-tagged-addresses.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/terminating-gateway-custom-and-tagged-addresses.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/terminating-gateway-custom-trace-listener.latest.golden b/agent/xds/testdata/routes/terminating-gateway-custom-trace-listener.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/terminating-gateway-custom-trace-listener.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/terminating-gateway-default-service-subset.latest.golden b/agent/xds/testdata/routes/terminating-gateway-default-service-subset.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/terminating-gateway-default-service-subset.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/terminating-gateway-hostname-service-subsets.latest.golden b/agent/xds/testdata/routes/terminating-gateway-hostname-service-subsets.latest.golden deleted file mode 100644 index f05a3fc603401..0000000000000 --- a/agent/xds/testdata/routes/terminating-gateway-hostname-service-subsets.latest.golden +++ /dev/null @@ -1,103 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "alt.api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "alt.api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "autoHostRewrite": true, - "cluster": "alt.api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "autoHostRewrite": true, - "cluster": "api.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "autoHostRewrite": true, - "cluster": "cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "prod.cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "prod.cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "autoHostRewrite": true, - "cluster": "prod.cache.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/terminating-gateway-http2-upstream-subsets.latest.golden b/agent/xds/testdata/routes/terminating-gateway-http2-upstream-subsets.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/terminating-gateway-http2-upstream-subsets.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/terminating-gateway-http2-upstream.latest.golden b/agent/xds/testdata/routes/terminating-gateway-http2-upstream.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/terminating-gateway-http2-upstream.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/terminating-gateway-ignore-extra-resolvers.latest.golden b/agent/xds/testdata/routes/terminating-gateway-ignore-extra-resolvers.latest.golden deleted file mode 100644 index fa5dbf99a413e..0000000000000 --- a/agent/xds/testdata/routes/terminating-gateway-ignore-extra-resolvers.latest.golden +++ /dev/null @@ -1,79 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "v1.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "v1.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "autoHostRewrite": true, - "cluster": "v1.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "v2.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "v2.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "autoHostRewrite": true, - "cluster": "v2.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "autoHostRewrite": true, - "cluster": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/terminating-gateway-lb-config-no-hash-policies.latest.golden b/agent/xds/testdata/routes/terminating-gateway-lb-config-no-hash-policies.latest.golden deleted file mode 100644 index 39689dc5b2ea6..0000000000000 --- a/agent/xds/testdata/routes/terminating-gateway-lb-config-no-hash-policies.latest.golden +++ /dev/null @@ -1,82 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "v1.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "v1.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "autoHostRewrite": true, - "cluster": "v1.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "timeout": "0.200s" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "v2.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "v2.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "autoHostRewrite": true, - "cluster": "v2.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "timeout": "0.200s" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "autoHostRewrite": true, - "cluster": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "timeout": "0.200s" - } - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/terminating-gateway-no-api-cert.latest.golden b/agent/xds/testdata/routes/terminating-gateway-no-api-cert.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/terminating-gateway-no-api-cert.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/terminating-gateway-no-services.latest.golden b/agent/xds/testdata/routes/terminating-gateway-no-services.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/terminating-gateway-no-services.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/terminating-gateway-service-subsets.latest.golden b/agent/xds/testdata/routes/terminating-gateway-service-subsets.latest.golden deleted file mode 100644 index fa5dbf99a413e..0000000000000 --- a/agent/xds/testdata/routes/terminating-gateway-service-subsets.latest.golden +++ /dev/null @@ -1,79 +0,0 @@ -{ - "nonce": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "v1.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "v1.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "autoHostRewrite": true, - "cluster": "v1.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "v2.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "v2.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "autoHostRewrite": true, - "cluster": "v2.web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "autoHostRewrite": true, - "cluster": "web.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ] - } - ], - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/terminating-gateway-sni.latest.golden b/agent/xds/testdata/routes/terminating-gateway-sni.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/terminating-gateway-sni.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/terminating-gateway-tcp-keepalives.latest.golden b/agent/xds/testdata/routes/terminating-gateway-tcp-keepalives.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/terminating-gateway-tcp-keepalives.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/terminating-gateway-with-peer-trust-bundle.latest.golden b/agent/xds/testdata/routes/terminating-gateway-with-peer-trust-bundle.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/terminating-gateway-with-peer-trust-bundle.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/terminating-gateway-with-tls-incoming-cipher-suites.latest.golden b/agent/xds/testdata/routes/terminating-gateway-with-tls-incoming-cipher-suites.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/terminating-gateway-with-tls-incoming-cipher-suites.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/terminating-gateway-with-tls-incoming-max-version.latest.golden b/agent/xds/testdata/routes/terminating-gateway-with-tls-incoming-max-version.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/terminating-gateway-with-tls-incoming-max-version.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/terminating-gateway-with-tls-incoming-min-version.latest.golden b/agent/xds/testdata/routes/terminating-gateway-with-tls-incoming-min-version.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/terminating-gateway-with-tls-incoming-min-version.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/terminating-gateway.latest.golden b/agent/xds/testdata/routes/terminating-gateway.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/terminating-gateway.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/transparent-proxy-catalog-destinations-only.latest.golden b/agent/xds/testdata/routes/transparent-proxy-catalog-destinations-only.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/transparent-proxy-catalog-destinations-only.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/transparent-proxy-dial-instances-directly.latest.golden b/agent/xds/testdata/routes/transparent-proxy-dial-instances-directly.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/transparent-proxy-dial-instances-directly.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/transparent-proxy-http-upstream.latest.golden b/agent/xds/testdata/routes/transparent-proxy-http-upstream.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/transparent-proxy-http-upstream.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/transparent-proxy-terminating-gateway.latest.golden b/agent/xds/testdata/routes/transparent-proxy-terminating-gateway.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/transparent-proxy-terminating-gateway.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/routes/transparent-proxy-with-resolver-redirect-upstream.latest.golden b/agent/xds/testdata/routes/transparent-proxy-with-resolver-redirect-upstream.latest.golden deleted file mode 100644 index 8b919343d21a9..0000000000000 --- a/agent/xds/testdata/routes/transparent-proxy-with-resolver-redirect-upstream.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/access-logs-defaults.latest.golden b/agent/xds/testdata/secrets/access-logs-defaults.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/access-logs-defaults.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/access-logs-json-file.latest.golden b/agent/xds/testdata/secrets/access-logs-json-file.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/access-logs-json-file.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/access-logs-text-stderr-disablelistenerlogs.latest.golden b/agent/xds/testdata/secrets/access-logs-text-stderr-disablelistenerlogs.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/access-logs-text-stderr-disablelistenerlogs.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/api-gateway-http-listener-with-http-route.latest.golden b/agent/xds/testdata/secrets/api-gateway-http-listener-with-http-route.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/api-gateway-http-listener-with-http-route.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/api-gateway-http-listener.latest.golden b/agent/xds/testdata/secrets/api-gateway-http-listener.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/api-gateway-http-listener.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/api-gateway-nil-config-entry.latest.golden b/agent/xds/testdata/secrets/api-gateway-nil-config-entry.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/api-gateway-nil-config-entry.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/api-gateway-tcp-listener-with-tcp-and-http-route.latest.golden b/agent/xds/testdata/secrets/api-gateway-tcp-listener-with-tcp-and-http-route.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/api-gateway-tcp-listener-with-tcp-and-http-route.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/api-gateway-tcp-listener-with-tcp-route.latest.golden b/agent/xds/testdata/secrets/api-gateway-tcp-listener-with-tcp-route.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/api-gateway-tcp-listener-with-tcp-route.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/api-gateway-tcp-listener.latest.golden b/agent/xds/testdata/secrets/api-gateway-tcp-listener.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/api-gateway-tcp-listener.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/api-gateway-with-multiple-hostnames.latest.golden b/agent/xds/testdata/secrets/api-gateway-with-multiple-hostnames.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/api-gateway-with-multiple-hostnames.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/api-gateway.latest.golden b/agent/xds/testdata/secrets/api-gateway.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/api-gateway.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/connect-proxy-lb-in-resolver.latest.golden b/agent/xds/testdata/secrets/connect-proxy-lb-in-resolver.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/connect-proxy-lb-in-resolver.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/connect-proxy-resolver-with-lb.latest.golden b/agent/xds/testdata/secrets/connect-proxy-resolver-with-lb.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/connect-proxy-resolver-with-lb.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/connect-proxy-route-to-lb-resolver.latest.golden b/agent/xds/testdata/secrets/connect-proxy-route-to-lb-resolver.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/connect-proxy-route-to-lb-resolver.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/connect-proxy-splitter-overweight.latest.golden b/agent/xds/testdata/secrets/connect-proxy-splitter-overweight.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/connect-proxy-splitter-overweight.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/connect-proxy-upstream-defaults.latest.golden b/agent/xds/testdata/secrets/connect-proxy-upstream-defaults.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/connect-proxy-upstream-defaults.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/connect-proxy-with-chain-and-failover.latest.golden b/agent/xds/testdata/secrets/connect-proxy-with-chain-and-failover.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/connect-proxy-with-chain-and-failover.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/connect-proxy-with-chain-and-overrides.latest.golden b/agent/xds/testdata/secrets/connect-proxy-with-chain-and-overrides.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/connect-proxy-with-chain-and-overrides.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/connect-proxy-with-chain-and-router.latest.golden b/agent/xds/testdata/secrets/connect-proxy-with-chain-and-router.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/connect-proxy-with-chain-and-router.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/connect-proxy-with-chain-and-splitter.latest.golden b/agent/xds/testdata/secrets/connect-proxy-with-chain-and-splitter.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/connect-proxy-with-chain-and-splitter.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/connect-proxy-with-chain-external-sni.latest.golden b/agent/xds/testdata/secrets/connect-proxy-with-chain-external-sni.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/connect-proxy-with-chain-external-sni.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/connect-proxy-with-chain-http2.latest.golden b/agent/xds/testdata/secrets/connect-proxy-with-chain-http2.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/connect-proxy-with-chain-http2.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/connect-proxy-with-chain.latest.golden b/agent/xds/testdata/secrets/connect-proxy-with-chain.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/connect-proxy-with-chain.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/connect-proxy-with-default-chain-and-custom-cluster.latest.golden b/agent/xds/testdata/secrets/connect-proxy-with-default-chain-and-custom-cluster.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/connect-proxy-with-default-chain-and-custom-cluster.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/connect-proxy-with-grpc-chain.latest.golden b/agent/xds/testdata/secrets/connect-proxy-with-grpc-chain.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/connect-proxy-with-grpc-chain.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/connect-proxy-with-grpc-router.latest.golden b/agent/xds/testdata/secrets/connect-proxy-with-grpc-router.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/connect-proxy-with-grpc-router.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/connect-proxy-with-http-chain.latest.golden b/agent/xds/testdata/secrets/connect-proxy-with-http-chain.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/connect-proxy-with-http-chain.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/connect-proxy-with-http2-chain.latest.golden b/agent/xds/testdata/secrets/connect-proxy-with-http2-chain.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/connect-proxy-with-http2-chain.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/connect-proxy-with-jwt-config-entry-with-local.latest.golden b/agent/xds/testdata/secrets/connect-proxy-with-jwt-config-entry-with-local.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/connect-proxy-with-jwt-config-entry-with-local.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/connect-proxy-with-jwt-config-entry-with-remote-jwks.latest.golden b/agent/xds/testdata/secrets/connect-proxy-with-jwt-config-entry-with-remote-jwks.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/connect-proxy-with-jwt-config-entry-with-remote-jwks.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.latest.golden b/agent/xds/testdata/secrets/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/connect-proxy-with-tcp-chain-double-failover-through-local-gateway-triggered.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.latest.golden b/agent/xds/testdata/secrets/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/connect-proxy-with-tcp-chain-double-failover-through-local-gateway.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.latest.golden b/agent/xds/testdata/secrets/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway-triggered.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.latest.golden b/agent/xds/testdata/secrets/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/connect-proxy-with-tcp-chain-double-failover-through-remote-gateway.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.latest.golden b/agent/xds/testdata/secrets/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/connect-proxy-with-tcp-chain-failover-through-local-gateway-triggered.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/connect-proxy-with-tcp-chain-failover-through-local-gateway.latest.golden b/agent/xds/testdata/secrets/connect-proxy-with-tcp-chain-failover-through-local-gateway.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/connect-proxy-with-tcp-chain-failover-through-local-gateway.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.latest.golden b/agent/xds/testdata/secrets/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/connect-proxy-with-tcp-chain-failover-through-remote-gateway-triggered.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/connect-proxy-with-tcp-chain-failover-through-remote-gateway.latest.golden b/agent/xds/testdata/secrets/connect-proxy-with-tcp-chain-failover-through-remote-gateway.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/connect-proxy-with-tcp-chain-failover-through-remote-gateway.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/connect-proxy-with-tcp-chain.latest.golden b/agent/xds/testdata/secrets/connect-proxy-with-tcp-chain.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/connect-proxy-with-tcp-chain.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/connect-proxy-with-tls-incoming-cipher-suites.latest.golden b/agent/xds/testdata/secrets/connect-proxy-with-tls-incoming-cipher-suites.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/connect-proxy-with-tls-incoming-cipher-suites.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/connect-proxy-with-tls-incoming-max-version.latest.golden b/agent/xds/testdata/secrets/connect-proxy-with-tls-incoming-max-version.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/connect-proxy-with-tls-incoming-max-version.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/connect-proxy-with-tls-incoming-min-version.latest.golden b/agent/xds/testdata/secrets/connect-proxy-with-tls-incoming-min-version.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/connect-proxy-with-tls-incoming-min-version.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/connect-proxy-with-tls-outgoing-cipher-suites.latest.golden b/agent/xds/testdata/secrets/connect-proxy-with-tls-outgoing-cipher-suites.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/connect-proxy-with-tls-outgoing-cipher-suites.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/connect-proxy-with-tls-outgoing-max-version.latest.golden b/agent/xds/testdata/secrets/connect-proxy-with-tls-outgoing-max-version.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/connect-proxy-with-tls-outgoing-max-version.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/connect-proxy-with-tls-outgoing-min-version-auto.latest.golden b/agent/xds/testdata/secrets/connect-proxy-with-tls-outgoing-min-version-auto.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/connect-proxy-with-tls-outgoing-min-version-auto.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/connect-proxy-with-tls-outgoing-min-version.latest.golden b/agent/xds/testdata/secrets/connect-proxy-with-tls-outgoing-min-version.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/connect-proxy-with-tls-outgoing-min-version.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/connect-proxy-with-tproxy-and-permissive-mtls.latest.golden b/agent/xds/testdata/secrets/connect-proxy-with-tproxy-and-permissive-mtls.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/connect-proxy-with-tproxy-and-permissive-mtls.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/connect-proxy-without-tproxy-and-permissive-mtls.latest.golden b/agent/xds/testdata/secrets/connect-proxy-without-tproxy-and-permissive-mtls.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/connect-proxy-without-tproxy-and-permissive-mtls.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/custom-limits-max-connections-only.latest.golden b/agent/xds/testdata/secrets/custom-limits-max-connections-only.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/custom-limits-max-connections-only.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/custom-limits-set-to-zero.latest.golden b/agent/xds/testdata/secrets/custom-limits-set-to-zero.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/custom-limits-set-to-zero.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/custom-limits.latest.golden b/agent/xds/testdata/secrets/custom-limits.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/custom-limits.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/custom-local-app.latest.golden b/agent/xds/testdata/secrets/custom-local-app.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/custom-local-app.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/custom-max-inbound-connections.latest.golden b/agent/xds/testdata/secrets/custom-max-inbound-connections.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/custom-max-inbound-connections.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/custom-passive-healthcheck-zero-consecutive_5xx.latest.golden b/agent/xds/testdata/secrets/custom-passive-healthcheck-zero-consecutive_5xx.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/custom-passive-healthcheck-zero-consecutive_5xx.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/custom-passive-healthcheck.latest.golden b/agent/xds/testdata/secrets/custom-passive-healthcheck.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/custom-passive-healthcheck.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/custom-public-listener-http-2.latest.golden b/agent/xds/testdata/secrets/custom-public-listener-http-2.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/custom-public-listener-http-2.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/custom-public-listener-http-missing.latest.golden b/agent/xds/testdata/secrets/custom-public-listener-http-missing.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/custom-public-listener-http-missing.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/custom-public-listener-http.latest.golden b/agent/xds/testdata/secrets/custom-public-listener-http.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/custom-public-listener-http.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/custom-public-listener.latest.golden b/agent/xds/testdata/secrets/custom-public-listener.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/custom-public-listener.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/custom-timeouts.latest.golden b/agent/xds/testdata/secrets/custom-timeouts.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/custom-timeouts.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/custom-trace-listener.latest.golden b/agent/xds/testdata/secrets/custom-trace-listener.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/custom-trace-listener.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/custom-upstream-default-chain.latest.golden b/agent/xds/testdata/secrets/custom-upstream-default-chain.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/custom-upstream-default-chain.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/custom-upstream-ignored-with-disco-chain.latest.golden b/agent/xds/testdata/secrets/custom-upstream-ignored-with-disco-chain.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/custom-upstream-ignored-with-disco-chain.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/custom-upstream-with-prepared-query.latest.golden b/agent/xds/testdata/secrets/custom-upstream-with-prepared-query.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/custom-upstream-with-prepared-query.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/custom-upstream.latest.golden b/agent/xds/testdata/secrets/custom-upstream.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/custom-upstream.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/downstream-service-with-unix-sockets.latest.golden b/agent/xds/testdata/secrets/downstream-service-with-unix-sockets.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/downstream-service-with-unix-sockets.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/expose-checks-grpc.latest.golden b/agent/xds/testdata/secrets/expose-checks-grpc.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/expose-checks-grpc.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/expose-checks-http-with-bind-override.latest.golden b/agent/xds/testdata/secrets/expose-checks-http-with-bind-override.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/expose-checks-http-with-bind-override.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/expose-checks-http.latest.golden b/agent/xds/testdata/secrets/expose-checks-http.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/expose-checks-http.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/expose-checks.latest.golden b/agent/xds/testdata/secrets/expose-checks.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/expose-checks.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/expose-paths-grpc-new-cluster-http1.latest.golden b/agent/xds/testdata/secrets/expose-paths-grpc-new-cluster-http1.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/expose-paths-grpc-new-cluster-http1.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/expose-paths-local-app-paths.latest.golden b/agent/xds/testdata/secrets/expose-paths-local-app-paths.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/expose-paths-local-app-paths.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/expose-paths-new-cluster-http2.latest.golden b/agent/xds/testdata/secrets/expose-paths-new-cluster-http2.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/expose-paths-new-cluster-http2.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/grpc-public-listener.latest.golden b/agent/xds/testdata/secrets/grpc-public-listener.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/grpc-public-listener.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/http-listener-with-timeouts.latest.golden b/agent/xds/testdata/secrets/http-listener-with-timeouts.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/http-listener-with-timeouts.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/http-public-listener-no-xfcc.latest.golden b/agent/xds/testdata/secrets/http-public-listener-no-xfcc.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/http-public-listener-no-xfcc.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/http-public-listener.latest.golden b/agent/xds/testdata/secrets/http-public-listener.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/http-public-listener.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/http-upstream.latest.golden b/agent/xds/testdata/secrets/http-upstream.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/http-upstream.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/http2-public-listener.latest.golden b/agent/xds/testdata/secrets/http2-public-listener.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/http2-public-listener.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-config-entry-nil.latest.golden b/agent/xds/testdata/secrets/ingress-config-entry-nil.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-config-entry-nil.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-defaults-no-chain.latest.golden b/agent/xds/testdata/secrets/ingress-defaults-no-chain.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-defaults-no-chain.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-gateway-bind-addrs.latest.golden b/agent/xds/testdata/secrets/ingress-gateway-bind-addrs.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-gateway-bind-addrs.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-gateway-nil-config-entry.latest.golden b/agent/xds/testdata/secrets/ingress-gateway-nil-config-entry.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-gateway-nil-config-entry.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-gateway-no-services.latest.golden b/agent/xds/testdata/secrets/ingress-gateway-no-services.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-gateway-no-services.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-gateway-with-tls-outgoing-cipher-suites.latest.golden b/agent/xds/testdata/secrets/ingress-gateway-with-tls-outgoing-cipher-suites.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-gateway-with-tls-outgoing-cipher-suites.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-gateway-with-tls-outgoing-max-version.latest.golden b/agent/xds/testdata/secrets/ingress-gateway-with-tls-outgoing-max-version.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-gateway-with-tls-outgoing-max-version.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-gateway-with-tls-outgoing-min-version.latest.golden b/agent/xds/testdata/secrets/ingress-gateway-with-tls-outgoing-min-version.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-gateway-with-tls-outgoing-min-version.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-gateway.latest.golden b/agent/xds/testdata/secrets/ingress-gateway.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-gateway.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-grpc-multiple-services.latest.golden b/agent/xds/testdata/secrets/ingress-grpc-multiple-services.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-grpc-multiple-services.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-http-multiple-services.latest.golden b/agent/xds/testdata/secrets/ingress-http-multiple-services.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-http-multiple-services.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-lb-in-resolver.latest.golden b/agent/xds/testdata/secrets/ingress-lb-in-resolver.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-lb-in-resolver.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-multiple-listeners-duplicate-service.latest.golden b/agent/xds/testdata/secrets/ingress-multiple-listeners-duplicate-service.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-multiple-listeners-duplicate-service.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-splitter-with-resolver-redirect.latest.golden b/agent/xds/testdata/secrets/ingress-splitter-with-resolver-redirect.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-splitter-with-resolver-redirect.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-with-chain-and-failover-to-cluster-peer.latest.golden b/agent/xds/testdata/secrets/ingress-with-chain-and-failover-to-cluster-peer.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-with-chain-and-failover-to-cluster-peer.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-with-chain-and-failover.latest.golden b/agent/xds/testdata/secrets/ingress-with-chain-and-failover.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-with-chain-and-failover.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-with-chain-and-router-header-manip.latest.golden b/agent/xds/testdata/secrets/ingress-with-chain-and-router-header-manip.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-with-chain-and-router-header-manip.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-with-chain-and-router.latest.golden b/agent/xds/testdata/secrets/ingress-with-chain-and-router.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-with-chain-and-router.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-with-chain-and-splitter.latest.golden b/agent/xds/testdata/secrets/ingress-with-chain-and-splitter.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-with-chain-and-splitter.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-with-chain-external-sni.latest.golden b/agent/xds/testdata/secrets/ingress-with-chain-external-sni.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-with-chain-external-sni.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-with-chain.latest.golden b/agent/xds/testdata/secrets/ingress-with-chain.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-with-chain.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-with-defaults-passive-health-check.latest.golden b/agent/xds/testdata/secrets/ingress-with-defaults-passive-health-check.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-with-defaults-passive-health-check.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-with-defaults-service-max-connections.latest.golden b/agent/xds/testdata/secrets/ingress-with-defaults-service-max-connections.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-with-defaults-service-max-connections.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-with-grpc-router.latest.golden b/agent/xds/testdata/secrets/ingress-with-grpc-router.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-with-grpc-router.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-with-grpc-single-tls-listener.latest.golden b/agent/xds/testdata/secrets/ingress-with-grpc-single-tls-listener.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-with-grpc-single-tls-listener.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-with-http2-and-grpc-multiple-tls-listener.latest.golden b/agent/xds/testdata/secrets/ingress-with-http2-and-grpc-multiple-tls-listener.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-with-http2-and-grpc-multiple-tls-listener.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-with-http2-single-tls-listener.latest.golden b/agent/xds/testdata/secrets/ingress-with-http2-single-tls-listener.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-with-http2-single-tls-listener.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-with-overwrite-defaults-passive-health-check.latest.golden b/agent/xds/testdata/secrets/ingress-with-overwrite-defaults-passive-health-check.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-with-overwrite-defaults-passive-health-check.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-with-overwrite-defaults-service-max-connections.latest.golden b/agent/xds/testdata/secrets/ingress-with-overwrite-defaults-service-max-connections.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-with-overwrite-defaults-service-max-connections.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-with-sds-listener+service-level.latest.golden b/agent/xds/testdata/secrets/ingress-with-sds-listener+service-level.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-with-sds-listener+service-level.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-with-sds-listener-gw-level-http.latest.golden b/agent/xds/testdata/secrets/ingress-with-sds-listener-gw-level-http.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-with-sds-listener-gw-level-http.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-with-sds-listener-gw-level-mixed-tls.latest.golden b/agent/xds/testdata/secrets/ingress-with-sds-listener-gw-level-mixed-tls.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-with-sds-listener-gw-level-mixed-tls.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-with-sds-listener-gw-level.latest.golden b/agent/xds/testdata/secrets/ingress-with-sds-listener-gw-level.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-with-sds-listener-gw-level.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-with-sds-listener-level-wildcard.latest.golden b/agent/xds/testdata/secrets/ingress-with-sds-listener-level-wildcard.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-with-sds-listener-level-wildcard.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-with-sds-listener-level.latest.golden b/agent/xds/testdata/secrets/ingress-with-sds-listener-level.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-with-sds-listener-level.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-with-sds-listener-listener-level.latest.golden b/agent/xds/testdata/secrets/ingress-with-sds-listener-listener-level.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-with-sds-listener-listener-level.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-with-sds-service-level-2.latest.golden b/agent/xds/testdata/secrets/ingress-with-sds-service-level-2.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-with-sds-service-level-2.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-with-sds-service-level-mixed-no-tls.latest.golden b/agent/xds/testdata/secrets/ingress-with-sds-service-level-mixed-no-tls.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-with-sds-service-level-mixed-no-tls.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-with-sds-service-level-mixed-tls.latest.golden b/agent/xds/testdata/secrets/ingress-with-sds-service-level-mixed-tls.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-with-sds-service-level-mixed-tls.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-with-sds-service-level.latest.golden b/agent/xds/testdata/secrets/ingress-with-sds-service-level.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-with-sds-service-level.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-with-service-max-connections.latest.golden b/agent/xds/testdata/secrets/ingress-with-service-max-connections.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-with-service-max-connections.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-with-service-passive-health-check.latest.golden b/agent/xds/testdata/secrets/ingress-with-service-passive-health-check.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-with-service-passive-health-check.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-with-single-tls-listener.latest.golden b/agent/xds/testdata/secrets/ingress-with-single-tls-listener.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-with-single-tls-listener.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-with-tcp-chain-double-failover-through-local-gateway-triggered.latest.golden b/agent/xds/testdata/secrets/ingress-with-tcp-chain-double-failover-through-local-gateway-triggered.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-with-tcp-chain-double-failover-through-local-gateway-triggered.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-with-tcp-chain-double-failover-through-local-gateway.latest.golden b/agent/xds/testdata/secrets/ingress-with-tcp-chain-double-failover-through-local-gateway.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-with-tcp-chain-double-failover-through-local-gateway.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-with-tcp-chain-double-failover-through-remote-gateway-triggered.latest.golden b/agent/xds/testdata/secrets/ingress-with-tcp-chain-double-failover-through-remote-gateway-triggered.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-with-tcp-chain-double-failover-through-remote-gateway-triggered.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-with-tcp-chain-double-failover-through-remote-gateway.latest.golden b/agent/xds/testdata/secrets/ingress-with-tcp-chain-double-failover-through-remote-gateway.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-with-tcp-chain-double-failover-through-remote-gateway.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-with-tcp-chain-failover-through-local-gateway-triggered.latest.golden b/agent/xds/testdata/secrets/ingress-with-tcp-chain-failover-through-local-gateway-triggered.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-with-tcp-chain-failover-through-local-gateway-triggered.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-with-tcp-chain-failover-through-local-gateway.latest.golden b/agent/xds/testdata/secrets/ingress-with-tcp-chain-failover-through-local-gateway.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-with-tcp-chain-failover-through-local-gateway.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-with-tcp-chain-failover-through-remote-gateway-triggered.latest.golden b/agent/xds/testdata/secrets/ingress-with-tcp-chain-failover-through-remote-gateway-triggered.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-with-tcp-chain-failover-through-remote-gateway-triggered.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-with-tcp-chain-failover-through-remote-gateway.latest.golden b/agent/xds/testdata/secrets/ingress-with-tcp-chain-failover-through-remote-gateway.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-with-tcp-chain-failover-through-remote-gateway.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-with-tls-listener-cipher-suites.latest.golden b/agent/xds/testdata/secrets/ingress-with-tls-listener-cipher-suites.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-with-tls-listener-cipher-suites.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-with-tls-listener-max-version.latest.golden b/agent/xds/testdata/secrets/ingress-with-tls-listener-max-version.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-with-tls-listener-max-version.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-with-tls-listener-min-version.latest.golden b/agent/xds/testdata/secrets/ingress-with-tls-listener-min-version.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-with-tls-listener-min-version.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-with-tls-listener.latest.golden b/agent/xds/testdata/secrets/ingress-with-tls-listener.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-with-tls-listener.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-with-tls-min-version-listeners-gateway-defaults.latest.golden b/agent/xds/testdata/secrets/ingress-with-tls-min-version-listeners-gateway-defaults.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-with-tls-min-version-listeners-gateway-defaults.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-with-tls-mixed-cipher-suites-listeners.latest.golden b/agent/xds/testdata/secrets/ingress-with-tls-mixed-cipher-suites-listeners.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-with-tls-mixed-cipher-suites-listeners.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-with-tls-mixed-listeners.latest.golden b/agent/xds/testdata/secrets/ingress-with-tls-mixed-listeners.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-with-tls-mixed-listeners.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-with-tls-mixed-max-version-listeners.latest.golden b/agent/xds/testdata/secrets/ingress-with-tls-mixed-max-version-listeners.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-with-tls-mixed-max-version-listeners.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/ingress-with-tls-mixed-min-version-listeners.latest.golden b/agent/xds/testdata/secrets/ingress-with-tls-mixed-min-version-listeners.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/ingress-with-tls-mixed-min-version-listeners.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/listener-balance-inbound-connections.latest.golden b/agent/xds/testdata/secrets/listener-balance-inbound-connections.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/listener-balance-inbound-connections.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/listener-balance-outbound-connections-bind-port.latest.golden b/agent/xds/testdata/secrets/listener-balance-outbound-connections-bind-port.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/listener-balance-outbound-connections-bind-port.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/listener-bind-address-port.latest.golden b/agent/xds/testdata/secrets/listener-bind-address-port.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/listener-bind-address-port.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/listener-bind-address.latest.golden b/agent/xds/testdata/secrets/listener-bind-address.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/listener-bind-address.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/listener-bind-port.latest.golden b/agent/xds/testdata/secrets/listener-bind-port.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/listener-bind-port.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/listener-max-inbound-connections.latest.golden b/agent/xds/testdata/secrets/listener-max-inbound-connections.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/listener-max-inbound-connections.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/listener-unix-domain-socket.latest.golden b/agent/xds/testdata/secrets/listener-unix-domain-socket.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/listener-unix-domain-socket.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/mesh-gateway-custom-addresses.latest.golden b/agent/xds/testdata/secrets/mesh-gateway-custom-addresses.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/mesh-gateway-custom-addresses.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/mesh-gateway-default-service-subset.latest.golden b/agent/xds/testdata/secrets/mesh-gateway-default-service-subset.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/mesh-gateway-default-service-subset.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/mesh-gateway-hash-lb-ignored.latest.golden b/agent/xds/testdata/secrets/mesh-gateway-hash-lb-ignored.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/mesh-gateway-hash-lb-ignored.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/mesh-gateway-ignore-extra-resolvers.latest.golden b/agent/xds/testdata/secrets/mesh-gateway-ignore-extra-resolvers.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/mesh-gateway-ignore-extra-resolvers.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/mesh-gateway-newer-information-in-federation-states.latest.golden b/agent/xds/testdata/secrets/mesh-gateway-newer-information-in-federation-states.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/mesh-gateway-newer-information-in-federation-states.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/mesh-gateway-no-services.latest.golden b/agent/xds/testdata/secrets/mesh-gateway-no-services.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/mesh-gateway-no-services.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/mesh-gateway-non-hash-lb-injected.latest.golden b/agent/xds/testdata/secrets/mesh-gateway-non-hash-lb-injected.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/mesh-gateway-non-hash-lb-injected.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/mesh-gateway-older-information-in-federation-states.latest.golden b/agent/xds/testdata/secrets/mesh-gateway-older-information-in-federation-states.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/mesh-gateway-older-information-in-federation-states.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/mesh-gateway-service-subsets.latest.golden b/agent/xds/testdata/secrets/mesh-gateway-service-subsets.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/mesh-gateway-service-subsets.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/mesh-gateway-service-subsets2.latest.golden b/agent/xds/testdata/secrets/mesh-gateway-service-subsets2.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/mesh-gateway-service-subsets2.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/mesh-gateway-service-timeouts.latest.golden b/agent/xds/testdata/secrets/mesh-gateway-service-timeouts.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/mesh-gateway-service-timeouts.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/mesh-gateway-tagged-addresses.latest.golden b/agent/xds/testdata/secrets/mesh-gateway-tagged-addresses.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/mesh-gateway-tagged-addresses.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/mesh-gateway-tcp-keepalives.latest.golden b/agent/xds/testdata/secrets/mesh-gateway-tcp-keepalives.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/mesh-gateway-tcp-keepalives.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/mesh-gateway-using-federation-control-plane.latest.golden b/agent/xds/testdata/secrets/mesh-gateway-using-federation-control-plane.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/mesh-gateway-using-federation-control-plane.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/mesh-gateway-using-federation-states.latest.golden b/agent/xds/testdata/secrets/mesh-gateway-using-federation-states.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/mesh-gateway-using-federation-states.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/mesh-gateway.latest.golden b/agent/xds/testdata/secrets/mesh-gateway.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/mesh-gateway.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/splitter-with-resolver-redirect.latest.golden b/agent/xds/testdata/secrets/splitter-with-resolver-redirect.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/splitter-with-resolver-redirect.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/terminating-gateway-custom-and-tagged-addresses.latest.golden b/agent/xds/testdata/secrets/terminating-gateway-custom-and-tagged-addresses.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/terminating-gateway-custom-and-tagged-addresses.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/terminating-gateway-custom-trace-listener.latest.golden b/agent/xds/testdata/secrets/terminating-gateway-custom-trace-listener.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/terminating-gateway-custom-trace-listener.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/terminating-gateway-default-service-subset.latest.golden b/agent/xds/testdata/secrets/terminating-gateway-default-service-subset.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/terminating-gateway-default-service-subset.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/terminating-gateway-hostname-service-subsets.latest.golden b/agent/xds/testdata/secrets/terminating-gateway-hostname-service-subsets.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/terminating-gateway-hostname-service-subsets.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/terminating-gateway-http2-upstream-subsets.latest.golden b/agent/xds/testdata/secrets/terminating-gateway-http2-upstream-subsets.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/terminating-gateway-http2-upstream-subsets.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/terminating-gateway-http2-upstream.latest.golden b/agent/xds/testdata/secrets/terminating-gateway-http2-upstream.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/terminating-gateway-http2-upstream.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/terminating-gateway-ignore-extra-resolvers.latest.golden b/agent/xds/testdata/secrets/terminating-gateway-ignore-extra-resolvers.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/terminating-gateway-ignore-extra-resolvers.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/terminating-gateway-lb-config-no-hash-policies.latest.golden b/agent/xds/testdata/secrets/terminating-gateway-lb-config-no-hash-policies.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/terminating-gateway-lb-config-no-hash-policies.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/terminating-gateway-lb-config.latest.golden b/agent/xds/testdata/secrets/terminating-gateway-lb-config.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/terminating-gateway-lb-config.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/terminating-gateway-no-api-cert.latest.golden b/agent/xds/testdata/secrets/terminating-gateway-no-api-cert.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/terminating-gateway-no-api-cert.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/terminating-gateway-no-services.latest.golden b/agent/xds/testdata/secrets/terminating-gateway-no-services.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/terminating-gateway-no-services.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/terminating-gateway-service-subsets.latest.golden b/agent/xds/testdata/secrets/terminating-gateway-service-subsets.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/terminating-gateway-service-subsets.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/terminating-gateway-sni.latest.golden b/agent/xds/testdata/secrets/terminating-gateway-sni.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/terminating-gateway-sni.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/terminating-gateway-tcp-keepalives.latest.golden b/agent/xds/testdata/secrets/terminating-gateway-tcp-keepalives.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/terminating-gateway-tcp-keepalives.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/terminating-gateway-with-peer-trust-bundle.latest.golden b/agent/xds/testdata/secrets/terminating-gateway-with-peer-trust-bundle.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/terminating-gateway-with-peer-trust-bundle.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/terminating-gateway-with-tls-incoming-cipher-suites.latest.golden b/agent/xds/testdata/secrets/terminating-gateway-with-tls-incoming-cipher-suites.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/terminating-gateway-with-tls-incoming-cipher-suites.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/terminating-gateway-with-tls-incoming-max-version.latest.golden b/agent/xds/testdata/secrets/terminating-gateway-with-tls-incoming-max-version.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/terminating-gateway-with-tls-incoming-max-version.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/terminating-gateway-with-tls-incoming-min-version.latest.golden b/agent/xds/testdata/secrets/terminating-gateway-with-tls-incoming-min-version.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/terminating-gateway-with-tls-incoming-min-version.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/terminating-gateway.latest.golden b/agent/xds/testdata/secrets/terminating-gateway.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/terminating-gateway.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/transparent-proxy-catalog-destinations-only.latest.golden b/agent/xds/testdata/secrets/transparent-proxy-catalog-destinations-only.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/transparent-proxy-catalog-destinations-only.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/transparent-proxy-dial-instances-directly.latest.golden b/agent/xds/testdata/secrets/transparent-proxy-dial-instances-directly.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/transparent-proxy-dial-instances-directly.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/transparent-proxy-http-upstream.latest.golden b/agent/xds/testdata/secrets/transparent-proxy-http-upstream.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/transparent-proxy-http-upstream.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/transparent-proxy-terminating-gateway.latest.golden b/agent/xds/testdata/secrets/transparent-proxy-terminating-gateway.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/transparent-proxy-terminating-gateway.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xds/testdata/secrets/transparent-proxy-with-resolver-redirect-upstream.latest.golden b/agent/xds/testdata/secrets/transparent-proxy-with-resolver-redirect-upstream.latest.golden deleted file mode 100644 index 82e45650658b4..0000000000000 --- a/agent/xds/testdata/secrets/transparent-proxy-with-resolver-redirect-upstream.latest.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "nonce": "00000001", - "typeUrl": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret", - "versionInfo": "00000001" -} \ No newline at end of file diff --git a/agent/xdsv2/cluster_resources.go b/agent/xdsv2/cluster_resources.go index 8d280853c2ad7..d32eeed2ec62b 100644 --- a/agent/xdsv2/cluster_resources.go +++ b/agent/xdsv2/cluster_resources.go @@ -9,7 +9,6 @@ import ( envoy_cluster_v3 "github.com/envoyproxy/go-control-plane/envoy/config/cluster/v3" envoy_core_v3 "github.com/envoyproxy/go-control-plane/envoy/config/core/v3" - envoy_endpoint_v3 "github.com/envoyproxy/go-control-plane/envoy/config/endpoint/v3" envoy_aggregate_cluster_v3 "github.com/envoyproxy/go-control-plane/envoy/extensions/clusters/aggregate/v3" envoy_upstreams_v3 "github.com/envoyproxy/go-control-plane/envoy/extensions/upstreams/http/v3" envoy_type_v3 "github.com/envoyproxy/go-control-plane/envoy/type/v3" @@ -20,58 +19,77 @@ import ( "github.com/hashicorp/consul/proto-public/pbmesh/v2beta1/pbproxystate" ) -func (pr *ProxyResources) makeClustersAndEndpoints(name string) (map[string]proto.Message, map[string]proto.Message, error) { - envoyClusters := make(map[string]proto.Message) - envoyEndpoints := make(map[string]proto.Message) +func (pr *ProxyResources) doesEnvoyClusterAlreadyExist(name string) bool { + // TODO(proxystate): consider using a map instead of [] for this kind of lookup + for _, envoyCluster := range pr.envoyResources[xdscommon.ClusterType] { + if envoyCluster.(*envoy_cluster_v3.Cluster).Name == name { + return true + } + } + return false +} + +func (pr *ProxyResources) makeXDSClusters() ([]proto.Message, error) { + clusters := make([]proto.Message, 0) + + for clusterName := range pr.proxyState.Clusters { + protoCluster, err := pr.makeClusters(clusterName) + // TODO: aggregate errors for clusters and still return any properly formed clusters. + if err != nil { + return nil, err + } + clusters = append(clusters, protoCluster...) + } + + return clusters, nil +} + +func (pr *ProxyResources) makeClusters(name string) ([]proto.Message, error) { + clusters := make([]proto.Message, 0) proxyStateCluster, ok := pr.proxyState.Clusters[name] if !ok { - return nil, nil, fmt.Errorf("cluster %q not found", name) + return nil, fmt.Errorf("cluster %q not found", name) + } + + if pr.doesEnvoyClusterAlreadyExist(name) { + // don't error + return []proto.Message{}, nil } switch proxyStateCluster.Group.(type) { case *pbproxystate.Cluster_FailoverGroup: fg := proxyStateCluster.GetFailoverGroup() - clusters, eps, err := pr.makeEnvoyAggregateClusterAndEndpoint(name, proxyStateCluster.Protocol, fg) + clusters, err := pr.makeEnvoyAggregateCluster(name, proxyStateCluster.Protocol, fg) if err != nil { - return nil, nil, err + return nil, err } - // for each cluster, add it to clusters map and add endpoint to endpoint map for _, c := range clusters { - envoyClusters[c.Name] = c - if ep, ok := eps[c.Name]; ok { - envoyEndpoints[c.Name] = ep - } + clusters = append(clusters, c) } case *pbproxystate.Cluster_EndpointGroup: eg := proxyStateCluster.GetEndpointGroup() - cluster, eps, err := pr.makeEnvoyClusterAndEndpoint(name, proxyStateCluster.Protocol, eg) + cluster, err := pr.makeEnvoyCluster(name, proxyStateCluster.Protocol, eg) if err != nil { - return nil, nil, err - } - - // for each cluster, add it to clusters map and add endpoint to endpoint map - envoyClusters[cluster.Name] = cluster - if ep, ok := eps[cluster.Name]; ok { - envoyEndpoints[cluster.Name] = ep + return nil, err } + clusters = append(clusters, cluster) default: - return nil, nil, errors.New("cluster group type should be Endpoint Group or Failover Group") + return nil, errors.New("cluster group type should be Endpoint Group or Failover Group") } - return envoyClusters, envoyEndpoints, nil + return clusters, nil } -func (pr *ProxyResources) makeEnvoyClusterAndEndpoint(name string, protocol pbproxystate.Protocol, - eg *pbproxystate.EndpointGroup) (*envoy_cluster_v3.Cluster, map[string]*envoy_endpoint_v3.ClusterLoadAssignment, error) { +func (pr *ProxyResources) makeEnvoyCluster(name string, protocol pbproxystate.Protocol, eg *pbproxystate.EndpointGroup) (*envoy_cluster_v3.Cluster, error) { if eg != nil { switch t := eg.Group.(type) { case *pbproxystate.EndpointGroup_Dynamic: dynamic := eg.GetDynamic() - return pr.makeEnvoyDynamicClusterAndEndpoint(name, protocol, dynamic) + return pr.makeEnvoyDynamicCluster(name, protocol, dynamic) case *pbproxystate.EndpointGroup_Static: static := eg.GetStatic() - return pr.makeEnvoyStaticClusterAndEndpoint(name, protocol, static) + return pr.makeEnvoyStaticCluster(name, protocol, static) case *pbproxystate.EndpointGroup_Dns: dns := eg.GetDns() return pr.makeEnvoyDnsCluster(name, protocol, dns) @@ -79,14 +97,13 @@ func (pr *ProxyResources) makeEnvoyClusterAndEndpoint(name string, protocol pbpr passthrough := eg.GetPassthrough() return pr.makeEnvoyPassthroughCluster(name, protocol, passthrough) default: - return nil, nil, fmt.Errorf("unsupported endpoint group type: %s", t) + return nil, fmt.Errorf("unsupported endpoint group type: %s", t) } } - return nil, nil, fmt.Errorf("no endpoint group") + return nil, fmt.Errorf("no endpoint group") } -func (pr *ProxyResources) makeEnvoyDynamicClusterAndEndpoint(name string, protocol pbproxystate.Protocol, - dynamic *pbproxystate.DynamicEndpointGroup) (*envoy_cluster_v3.Cluster, map[string]*envoy_endpoint_v3.ClusterLoadAssignment, error) { +func (pr *ProxyResources) makeEnvoyDynamicCluster(name string, protocol pbproxystate.Protocol, dynamic *pbproxystate.DynamicEndpointGroup) (*envoy_cluster_v3.Cluster, error) { cluster := &envoy_cluster_v3.Cluster{ Name: name, ClusterDiscoveryType: &envoy_cluster_v3.Cluster_Type{Type: envoy_cluster_v3.Cluster_EDS}, @@ -101,7 +118,7 @@ func (pr *ProxyResources) makeEnvoyDynamicClusterAndEndpoint(name string, protoc } err := addHttpProtocolOptions(protocol, cluster) if err != nil { - return nil, nil, err + return nil, err } if dynamic.Config != nil { if dynamic.Config.UseAltStatName { @@ -120,31 +137,23 @@ func (pr *ProxyResources) makeEnvoyDynamicClusterAndEndpoint(name string, protoc err := addEnvoyLBToCluster(dynamic.Config, cluster) if err != nil { - return nil, nil, err + return nil, err } } if dynamic.OutboundTls != nil { envoyTransportSocket, err := pr.makeEnvoyTransportSocket(dynamic.OutboundTls) if err != nil { - return nil, nil, err + return nil, err } cluster.TransportSocket = envoyTransportSocket } - // Generate Envoy endpoint - endpointResources := make(map[string]*envoy_endpoint_v3.ClusterLoadAssignment) - if endpointList, ok := pr.proxyState.Endpoints[cluster.Name]; ok { - protoEndpoint := makeEnvoyClusterLoadAssignment(cluster.Name, endpointList.Endpoints) - endpointResources[cluster.Name] = protoEndpoint - } - - return cluster, endpointResources, nil + return cluster, nil } -func (pr *ProxyResources) makeEnvoyStaticClusterAndEndpoint(name string, protocol pbproxystate.Protocol, - static *pbproxystate.StaticEndpointGroup) (*envoy_cluster_v3.Cluster, map[string]*envoy_endpoint_v3.ClusterLoadAssignment, error) { +func (pr *ProxyResources) makeEnvoyStaticCluster(name string, protocol pbproxystate.Protocol, static *pbproxystate.StaticEndpointGroup) (*envoy_cluster_v3.Cluster, error) { cluster := &envoy_cluster_v3.Cluster{ Name: name, ClusterDiscoveryType: &envoy_cluster_v3.Cluster_Type{Type: envoy_cluster_v3.Cluster_STATIC}, @@ -163,23 +172,21 @@ func (pr *ProxyResources) makeEnvoyStaticClusterAndEndpoint(name string, protoco err = addHttpProtocolOptions(protocol, cluster) } if err != nil { - return nil, nil, err + return nil, err } if static.Config != nil { cluster.ConnectTimeout = static.Config.ConnectTimeout addEnvoyCircuitBreakers(static.GetConfig().CircuitBreakers, cluster) } - return cluster, nil, nil + return cluster, nil } -func (pr *ProxyResources) makeEnvoyDnsCluster(name string, protocol pbproxystate.Protocol, - dns *pbproxystate.DNSEndpointGroup) (*envoy_cluster_v3.Cluster, map[string]*envoy_endpoint_v3.ClusterLoadAssignment, error) { - return nil, nil, nil +func (pr *ProxyResources) makeEnvoyDnsCluster(name string, protocol pbproxystate.Protocol, dns *pbproxystate.DNSEndpointGroup) (*envoy_cluster_v3.Cluster, error) { + return nil, nil } -func (pr *ProxyResources) makeEnvoyPassthroughCluster(name string, protocol pbproxystate.Protocol, - passthrough *pbproxystate.PassthroughEndpointGroup) (*envoy_cluster_v3.Cluster, map[string]*envoy_endpoint_v3.ClusterLoadAssignment, error) { +func (pr *ProxyResources) makeEnvoyPassthroughCluster(name string, protocol pbproxystate.Protocol, passthrough *pbproxystate.PassthroughEndpointGroup) (*envoy_cluster_v3.Cluster, error) { cluster := &envoy_cluster_v3.Cluster{ Name: name, ConnectTimeout: passthrough.Config.ConnectTimeout, @@ -189,47 +196,37 @@ func (pr *ProxyResources) makeEnvoyPassthroughCluster(name string, protocol pbpr if passthrough.OutboundTls != nil { envoyTransportSocket, err := pr.makeEnvoyTransportSocket(passthrough.OutboundTls) if err != nil { - return nil, nil, err + return nil, err } cluster.TransportSocket = envoyTransportSocket } err := addHttpProtocolOptions(protocol, cluster) if err != nil { - return nil, nil, err + return nil, err } - return cluster, nil, nil + return cluster, nil } -func (pr *ProxyResources) makeEnvoyAggregateClusterAndEndpoint(name string, protocol pbproxystate.Protocol, - fg *pbproxystate.FailoverGroup) (map[string]*envoy_cluster_v3.Cluster, map[string]*envoy_endpoint_v3.ClusterLoadAssignment, error) { - clusters := make(map[string]*envoy_cluster_v3.Cluster) - endpointResources := make(map[string]*envoy_endpoint_v3.ClusterLoadAssignment) +func (pr *ProxyResources) makeEnvoyAggregateCluster(name string, protocol pbproxystate.Protocol, fg *pbproxystate.FailoverGroup) ([]*envoy_cluster_v3.Cluster, error) { + var clusters []*envoy_cluster_v3.Cluster if fg != nil { var egNames []string for _, eg := range fg.EndpointGroups { - cluster, eps, err := pr.makeEnvoyClusterAndEndpoint(eg.Name, protocol, eg) + cluster, err := pr.makeEnvoyCluster(eg.Name, protocol, eg) if err != nil { - return nil, eps, err + return nil, err } egNames = append(egNames, cluster.Name) - - // add failover cluster - clusters[cluster.Name] = cluster - - // add endpoint for failover cluster - if ep, ok := eps[cluster.Name]; ok { - endpointResources[cluster.Name] = ep - } + clusters = append(clusters, cluster) } aggregateClusterConfig, err := anypb.New(&envoy_aggregate_cluster_v3.ClusterConfig{ Clusters: egNames, }) if err != nil { - return nil, nil, err + return nil, err } - // create aggregate cluster c := &envoy_cluster_v3.Cluster{ Name: name, ConnectTimeout: fg.Config.ConnectTimeout, @@ -246,19 +243,11 @@ func (pr *ProxyResources) makeEnvoyAggregateClusterAndEndpoint(name string, prot } err = addHttpProtocolOptions(protocol, c) if err != nil { - return nil, nil, err - } - - // add aggregate cluster - clusters[c.Name] = c - - // add endpoint for aggregate cluster - if endpointList, ok := pr.proxyState.Endpoints[c.Name]; ok { - protoEndpoint := makeEnvoyClusterLoadAssignment(c.Name, endpointList.Endpoints) - endpointResources[c.Name] = protoEndpoint + return nil, err } + clusters = append(clusters, c) } - return clusters, endpointResources, nil + return clusters, nil } func addLocalAppHttpProtocolOptions(protocol pbproxystate.Protocol, c *envoy_cluster_v3.Cluster) error { @@ -387,19 +376,9 @@ func addEnvoyLBToCluster(dynamicConfig *pbproxystate.DynamicEndpointGroupConfig, return nil } -func (pr *ProxyResources) makeEnvoyClustersAndEndpointsFromL4Destination(l4 *pbproxystate.L4Destination) error { - switch l4.Destination.(type) { - case *pbproxystate.L4Destination_Cluster: - pr.addEnvoyClustersAndEndpointsToEnvoyResources(l4.GetCluster().GetName()) - - case *pbproxystate.L4Destination_WeightedClusters: - psWeightedClusters := l4.GetWeightedClusters() - for _, psCluster := range psWeightedClusters.GetClusters() { - pr.addEnvoyClustersAndEndpointsToEnvoyResources(psCluster.Name) - } - default: - return errors.New("cluster group type should be Endpoint Group or Failover Group") - } - +// TODO(proxystate): In a future PR this will create clusters and add it to ProxyResources.proxyState +// Currently, we do not traverse the listener -> endpoint paths and instead just generate each resource by iterating +// through its top level map. In the future we want to traverse these paths to ensure each listener has a cluster, etc. +func (pr *ProxyResources) makeEnvoyClusterFromL4Destination(l4 *pbproxystate.L4Destination) error { return nil } diff --git a/agent/xdsv2/endpoint_resources.go b/agent/xdsv2/endpoint_resources.go index ce81d5cad0f60..fa3d39d8779fe 100644 --- a/agent/xdsv2/endpoint_resources.go +++ b/agent/xdsv2/endpoint_resources.go @@ -7,7 +7,9 @@ import ( envoy_core_v3 "github.com/envoyproxy/go-control-plane/envoy/config/core/v3" envoy_endpoint_v3 "github.com/envoyproxy/go-control-plane/envoy/config/endpoint/v3" "github.com/hashicorp/consul/agent/xds/response" + "github.com/hashicorp/consul/envoyextensions/xdscommon" "github.com/hashicorp/consul/proto-public/pbmesh/v2beta1/pbproxystate" + "google.golang.org/protobuf/proto" ) func makeEnvoyLbEndpoint(endpoint *pbproxystate.Endpoint) *envoy_endpoint_v3.LbEndpoint { @@ -44,3 +46,16 @@ func makeEnvoyClusterLoadAssignment(clusterName string, endpoints []*pbproxystat Endpoints: []*envoy_endpoint_v3.LocalityLbEndpoints{localityLbEndpoints}, } } + +func (pr *ProxyResources) makeXDSEndpoints() ([]proto.Message, error) { + endpoints := make([]proto.Message, 0) + + for clusterName, eps := range pr.proxyState.GetEndpoints() { + if clusterName != xdscommon.LocalAppClusterName { + protoEndpoint := makeEnvoyClusterLoadAssignment(clusterName, eps.Endpoints) + endpoints = append(endpoints, protoEndpoint) + } + } + + return endpoints, nil +} diff --git a/agent/xdsv2/listener_resources.go b/agent/xdsv2/listener_resources.go index 29c0e42af0e0b..1ccfb42a6d5e1 100644 --- a/agent/xdsv2/listener_resources.go +++ b/agent/xdsv2/listener_resources.go @@ -42,16 +42,18 @@ const ( envoyHttpConnectionManagerFilterName = "envoy.filters.network.http_connection_manager" ) -func (pr *ProxyResources) makeEnvoyResourceGraphsStartingFromListeners() error { +func (pr *ProxyResources) makeXDSListeners() ([]proto.Message, error) { + listeners := make([]proto.Message, 0) + for _, l := range pr.proxyState.Listeners { protoListener, err := pr.makeListener(l) // TODO: aggregate errors for listeners and still return any properly formed listeners. if err != nil { - return err + return nil, err } - pr.envoyResources[xdscommon.ListenerType][protoListener.Name] = protoListener + listeners = append(listeners, protoListener) } - return nil + return listeners, nil } func (pr *ProxyResources) makeListener(listener *pbproxystate.Listener) (*envoy_listener_v3.Listener, error) { @@ -303,11 +305,11 @@ func (pr *ProxyResources) makeEnvoyResourcesForSNIDestination(sni *pbproxystate. } func (pr *ProxyResources) makeEnvoyResourcesForL4Destination(l4 *pbproxystate.Router_L4) ([]*envoy_listener_v3.Filter, error) { - err := pr.makeEnvoyClustersAndEndpointsFromL4Destination(l4.L4) + err := pr.makeEnvoyClusterFromL4Destination(l4.L4) if err != nil { return nil, err } - envoyFilters, err := pr.makeL4Filters(l4.L4) + envoyFilters, err := makeL4Filters(l4.L4) return envoyFilters, err } @@ -332,7 +334,7 @@ func getAlpnProtocols(protocol pbproxystate.L7Protocol) []string { return alpnProtocols } -func (pr *ProxyResources) makeL4Filters(l4 *pbproxystate.L4Destination) ([]*envoy_listener_v3.Filter, error) { +func makeL4Filters(l4 *pbproxystate.L4Destination) ([]*envoy_listener_v3.Filter, error) { var envoyFilters []*envoy_listener_v3.Filter if l4 != nil { rbacFilters, err := MakeRBACNetworkFilters(l4.TrafficPermissions) @@ -440,7 +442,7 @@ func (pr *ProxyResources) makeL7Filters(l7 *pbproxystate.L7Destination) ([]*envo } } else { // Add Envoy route under the route resource since it's not inlined. - pr.envoyResources[xdscommon.RouteType][routeConfig.Name] = routeConfig + pr.envoyResources[xdscommon.RouteType] = append(pr.envoyResources[xdscommon.RouteType], routeConfig) httpConnMgr.RouteSpecifier = &envoy_http_v3.HttpConnectionManager_Rds{ Rds: &envoy_http_v3.Rds{ diff --git a/agent/xdsv2/resources.go b/agent/xdsv2/resources.go index 1c3251930cebb..fa5f7179e6a5d 100644 --- a/agent/xdsv2/resources.go +++ b/agent/xdsv2/resources.go @@ -20,7 +20,6 @@ type ResourceGenerator struct { ProxyFeatures xdscommon.SupportedProxyFeatures } -// NewResourceGenerator will create a new ResourceGenerator. func NewResourceGenerator( logger hclog.Logger, ) *ResourceGenerator { @@ -29,63 +28,48 @@ func NewResourceGenerator( } } -// ProxyResources is the main state used to convert proxyState resources to Envoy resources. type ProxyResources struct { - // proxyState is the final proxyState computed by Consul controllers. - proxyState *proxytracker.ProxyState - // envoyResources is a map of each resource type (listener, endpoint, route, cluster, etc.) - // with a corresponding map of k/v pairs of resource name to envoy proto message. - // map[string]map[string]proto.Message is used over map[string][]proto.Message because - // AllResourcesFromIR() will create envoy resource by walking the object graph from listener - // to endpoint. In the process, the same resource might be referenced more than once, - // so the map is used to prevent duplicate resources being created and also will use - // an O(1) lookup to see if it exists (it actually will set the map key rather than - // checks everywhere) where as each lookup would be O(n) with a []proto structure. - envoyResources map[string]map[string]proto.Message + proxyState *proxytracker.ProxyState + envoyResources map[string][]proto.Message } func (g *ResourceGenerator) AllResourcesFromIR(proxyState *proxytracker.ProxyState) (map[string][]proto.Message, error) { pr := &ProxyResources{ proxyState: proxyState, - envoyResources: make(map[string]map[string]proto.Message), + envoyResources: make(map[string][]proto.Message), } - pr.envoyResources[xdscommon.ListenerType] = make(map[string]proto.Message) - pr.envoyResources[xdscommon.RouteType] = make(map[string]proto.Message) - pr.envoyResources[xdscommon.ClusterType] = make(map[string]proto.Message) - pr.envoyResources[xdscommon.EndpointType] = make(map[string]proto.Message) - - err := pr.makeEnvoyResourceGraphsStartingFromListeners() + err := pr.generateXDSResources() if err != nil { return nil, fmt.Errorf("failed to generate xDS resources for ProxyState: %v", err) } + return pr.envoyResources, nil +} - // Now account for Clusters that did not have a destination. - for name := range proxyState.Clusters { - if _, ok := pr.envoyResources[xdscommon.ClusterType][name]; !ok { - pr.addEnvoyClustersAndEndpointsToEnvoyResources(name) - } +func (pr *ProxyResources) generateXDSResources() error { + listeners, err := pr.makeXDSListeners() + if err != nil { + return err } - envoyResources := convertResourceMapsToResourceArrays(pr.envoyResources) - return envoyResources, nil -} + pr.envoyResources[xdscommon.ListenerType] = listeners -// convertResourceMapsToResourceArrays will convert map[string]map[string]proto.Message, which is used to -// prevent duplicate resource being created, to map[string][]proto.Message which is used by Delta server. -func convertResourceMapsToResourceArrays(resourceMap map[string]map[string]proto.Message) map[string][]proto.Message { - resources := make(map[string][]proto.Message) - resources[xdscommon.ListenerType] = make([]proto.Message, 0) - resources[xdscommon.RouteType] = make([]proto.Message, 0) - resources[xdscommon.ClusterType] = make([]proto.Message, 0) - resources[xdscommon.EndpointType] = make([]proto.Message, 0) + clusters, err := pr.makeXDSClusters() + if err != nil { + return err + } + pr.envoyResources[xdscommon.ClusterType] = clusters - // This conversion incurs processing cost which is done once in the generating envoy resources. - // This tradeoff is preferable to doing array scan every time an envoy resource needs to be - // to pr.envoyResource to see if it already exists. - for resourceTypeName, resourceMap := range resourceMap { - for _, resource := range resourceMap { - resources[resourceTypeName] = append(resources[resourceTypeName], resource) - } + endpoints, err := pr.makeXDSEndpoints() + if err != nil { + return err } - return resources + pr.envoyResources[xdscommon.EndpointType] = endpoints + + routes, err := pr.makeXDSRoutes() + if err != nil { + return err + } + pr.envoyResources[xdscommon.RouteType] = routes + + return nil } diff --git a/agent/xdsv2/resources_test.go b/agent/xdsv2/resources_test.go index 1210124494e44..c1afbda705be8 100644 --- a/agent/xdsv2/resources_test.go +++ b/agent/xdsv2/resources_test.go @@ -54,16 +54,17 @@ func TestAllResourcesFromIR_XDSGoldenFileInputs(t *testing.T) { "destination/multiport-l4-and-l7-single-implicit-destination-with-multiple-workloads-tproxy", //sources - please add in alphabetical order - "source/l7-expose-paths", - "source/local-and-inbound-connections", - "source/multiple-workload-addresses-with-specific-ports", - "source/multiple-workload-addresses-without-ports", - "source/multiport-l4-multiple-workload-addresses-with-specific-ports", - "source/multiport-l4-multiple-workload-addresses-without-ports", - "source/multiport-l4-workload-with-only-mesh-port", - "source/multiport-l7-multiple-workload-addresses-with-specific-ports", - "source/multiport-l7-multiple-workload-addresses-without-ports", - "source/single-workload-address-without-ports", + //"source/l4-multiple-workload-addresses-with-specific-ports", + //"source/l4-multiple-workload-addresses-without-ports", + //"source/l4-single-workload-address-without-ports", + //"source/l7-expose-paths", + //"source/local-and-inbound-connections", + //"source/multiport-l4-multiple-workload-addresses-with-specific-ports", + //"source/multiport-l4-multiple-workload-addresses-without-ports", + //"source/multiport-l4-workload-with-only-mesh-port", + //"source/multiport-l7-multiple-workload-addresses-with-specific-ports", + //"source/multiport-l7-multiple-workload-addresses-without-ports", + //"source/multiport-l7-multiple-workload-addresses-without-ports", } for _, name := range cases { diff --git a/agent/xdsv2/route_resources.go b/agent/xdsv2/route_resources.go index 073b89d22ca87..af06c174484f8 100644 --- a/agent/xdsv2/route_resources.go +++ b/agent/xdsv2/route_resources.go @@ -16,8 +16,21 @@ import ( "github.com/hashicorp/consul/proto-public/pbmesh/v2beta1/pbproxystate" envoy_route_v3 "github.com/envoyproxy/go-control-plane/envoy/config/route/v3" + "google.golang.org/protobuf/proto" ) +func (pr *ProxyResources) makeXDSRoutes() ([]proto.Message, error) { + routes := make([]proto.Message, 0) + + for name, r := range pr.proxyState.Routes { + protoRoute := pr.makeEnvoyRouteConfigFromProxystateRoute(name, r) + // TODO: aggregate errors for routes and still return any properly formed routes. + routes = append(routes, protoRoute) + } + + return routes, nil +} + func (pr *ProxyResources) makeEnvoyRoute(name string) (*envoy_route_v3.RouteConfiguration, error) { var route *envoy_route_v3.RouteConfiguration // TODO(proxystate): This will make routes in the future. This function should distinguish between static routes @@ -234,18 +247,6 @@ func makeEnvoyQueryParamFromProxystateQueryMatch(psMatch *pbproxystate.QueryPara return envoyQueryParamMatcher } -func (pr *ProxyResources) addEnvoyClustersAndEndpointsToEnvoyResources(clusterName string) { - clusters, endpoints, _ := pr.makeClustersAndEndpoints(clusterName) - - for name, cluster := range clusters { - pr.envoyResources[xdscommon.ClusterType][name] = cluster - } - - for name, ep := range endpoints { - pr.envoyResources[xdscommon.EndpointType][name] = ep - } -} - // TODO (dans): Will this always be envoy_route_v3.Route_Route? // Definitely for connect proxies this is the only option. func (pr *ProxyResources) makeEnvoyRouteActionFromProxystateRouteDestination(psRouteDestination *pbproxystate.RouteDestination) *envoy_route_v3.Route_Route { @@ -259,15 +260,16 @@ func (pr *ProxyResources) makeEnvoyRouteActionFromProxystateRouteDestination(psR envoyRouteRoute.Route.ClusterSpecifier = &envoy_route_v3.RouteAction_Cluster{ Cluster: psCluster.GetName(), } - pr.addEnvoyClustersAndEndpointsToEnvoyResources(psCluster.Name) + clusters, _ := pr.makeClusters(psCluster.Name) + pr.envoyResources[xdscommon.ClusterType] = append(pr.envoyResources[xdscommon.ClusterType], clusters...) case *pbproxystate.RouteDestination_WeightedClusters: psWeightedClusters := psRouteDestination.GetWeightedClusters() envoyClusters := make([]*envoy_route_v3.WeightedCluster_ClusterWeight, 0, len(psWeightedClusters.GetClusters())) totalWeight := 0 for _, psCluster := range psWeightedClusters.GetClusters() { - pr.addEnvoyClustersAndEndpointsToEnvoyResources(psCluster.Name) - + clusters, _ := pr.makeClusters(psCluster.Name) + pr.envoyResources[xdscommon.ClusterType] = append(pr.envoyResources[xdscommon.ClusterType], clusters...) totalWeight += int(psCluster.Weight.GetValue()) envoyClusters = append(envoyClusters, makeEnvoyClusterWeightFromProxystateWeightedCluster(psCluster)) } @@ -316,7 +318,10 @@ func (pr *ProxyResources) makeEnvoyRouteActionFromProxystateRouteDestination(psR } func makeEnvoyClusterWeightFromProxystateWeightedCluster(cluster *pbproxystate.L7WeightedDestinationCluster) *envoy_route_v3.WeightedCluster_ClusterWeight { - envoyClusterWeight := makeEnvoyClusterWeightFromNameAndWeight(cluster.GetName(), cluster.GetWeight()) + envoyClusterWeight := &envoy_route_v3.WeightedCluster_ClusterWeight{ + Name: cluster.GetName(), + Weight: cluster.GetWeight(), + } for _, hm := range cluster.GetHeaderMutations() { injectEnvoyClusterWeightWithProxystateHeaderMutation(envoyClusterWeight, hm) @@ -325,15 +330,6 @@ func makeEnvoyClusterWeightFromProxystateWeightedCluster(cluster *pbproxystate.L return envoyClusterWeight } -func makeEnvoyClusterWeightFromNameAndWeight(name string, weight *wrapperspb.UInt32Value) *envoy_route_v3.WeightedCluster_ClusterWeight { - envoyClusterWeight := &envoy_route_v3.WeightedCluster_ClusterWeight{ - Name: name, - Weight: weight, - } - - return envoyClusterWeight -} - func injectEnvoyClusterWeightWithProxystateHeaderMutation(envoyClusterWeight *envoy_route_v3.WeightedCluster_ClusterWeight, mutation *pbproxystate.HeaderMutation) { mutation.GetAction() switch mutation.GetAction().(type) { diff --git a/agent/xdsv2/testdata/clusters/destination/mixed-multi-destination.golden b/agent/xdsv2/testdata/clusters/destination/mixed-multi-destination.golden index b87031ba81b1b..280f42b8581f5 100644 --- a/agent/xdsv2/testdata/clusters/destination/mixed-multi-destination.golden +++ b/agent/xdsv2/testdata/clusters/destination/mixed-multi-destination.golden @@ -1,270 +1,157 @@ { - "versionInfo": "00000001", - "resources": [ + "versionInfo": "00000001", + "resources": [ { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "name": "failover-target~0~http.api-1.default.dc1.internal.foo.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" + "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", + "name": "http.api-2.default.dc1.internal.foo.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": {}, + "resourceApiVersion": "V3" } }, - "connectTimeout": "55s", - "commonLbConfig": { - "healthyPanicThreshold": {} + "connectTimeout": "5s", + "commonLbConfig": { + "healthyPanicThreshold": {} }, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsParams": {}, - "tlsCertificates": [ + "transportSocket": { + "name": "tls", + "typedConfig": { + "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", + "commonTlsContext": { + "tlsParams": {}, + "tlsCertificates": [ { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICDjCCAbWgAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDEwlUZXN0IENB\nIDEwHhcNMjMxMDE2MTYxMzI5WhcNMjMxMDE2MTYyMzI5WjAAMFkwEwYHKoZIzj0C\nAQYIKoZIzj0DAQcDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9\nta/bGT+5orZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJaOCAQowggEGMA4GA1UdDwEB\n/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDAYDVR0TAQH/\nBAIwADApBgNVHQ4EIgQg3ogXVz9cqaK2B6xdiJYMa5NtT0KkYv7BA2dR7h9EcwUw\nKwYDVR0jBCQwIoAgq+C1mPlPoGa4lt7sSft1goN5qPGyBIB/3mUHJZKSFY8wbwYD\nVR0RAQH/BGUwY4Zhc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9hcC9kZWZhdWx0L25zL2RlZmF1bHQvaWRlbnRpdHkv\ndGVzdC1pZGVudGl0eTAKBggqhkjOPQQDAgNHADBEAiB6L+t5bzRrBPhiQYNeA7fF\nUCuLWrdjW4Xbv3SLg0IKMgIgfRC5hEx+DqzQxTCP4sexX3hVWMjKoWmHdwiUcg+K\n/IE=\n-----END CERTIFICATE-----\n" + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICDjCCAbWgAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDEwlUZXN0IENB\nIDEwHhcNMjMxMDE2MTYxMzI5WhcNMjMxMDE2MTYyMzI5WjAAMFkwEwYHKoZIzj0C\nAQYIKoZIzj0DAQcDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9\nta/bGT+5orZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJaOCAQowggEGMA4GA1UdDwEB\n/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDAYDVR0TAQH/\nBAIwADApBgNVHQ4EIgQg3ogXVz9cqaK2B6xdiJYMa5NtT0KkYv7BA2dR7h9EcwUw\nKwYDVR0jBCQwIoAgq+C1mPlPoGa4lt7sSft1goN5qPGyBIB/3mUHJZKSFY8wbwYD\nVR0RAQH/BGUwY4Zhc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9hcC9kZWZhdWx0L25zL2RlZmF1bHQvaWRlbnRpdHkv\ndGVzdC1pZGVudGl0eTAKBggqhkjOPQQDAgNHADBEAiB6L+t5bzRrBPhiQYNeA7fF\nUCuLWrdjW4Xbv3SLg0IKMgIgfRC5hEx+DqzQxTCP4sexX3hVWMjKoWmHdwiUcg+K\n/IE=\n-----END CERTIFICATE-----\n" }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIFIFkTIL1iUV4O/RpveVHzHs7ZzhSkvYIzbdXDttz9EooAoGCCqGSM49\nAwEHoUQDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9ta/bGT+5\norZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJQ==\n-----END EC PRIVATE KEY-----\n" + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIFIFkTIL1iUV4O/RpveVHzHs7ZzhSkvYIzbdXDttz9EooAoGCCqGSM49\nAwEHoUQDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9ta/bGT+5\norZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJQ==\n-----END EC PRIVATE KEY-----\n" } } ], - "validationContext": { - "trustedCa": { - "inlineString": "some-root\nsome-other-root\n" + "validationContext": { + "trustedCa": { + "inlineString": "some-root\nsome-other-root\n" }, - "matchSubjectAltNames": [ + "matchSubjectAltNames": [ { - "exact": "spiffe://foo.consul/ap/default/ns/default/identity/api1-identity" + "exact": "spiffe://foo.consul/ap/default/ns/default/identity/api2-identity" } ] }, - "alpnProtocols": [ + "alpnProtocols": [ "consul~http" ] }, - "sni": "api-1.default.dc1.internal.foo.consul" + "sni": "api-2.default.dc1.internal.foo.consul" } } }, { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "name": "failover-target~1~http.api-1.default.dc1.internal.foo.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "connectTimeout": "5s", - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsParams": {}, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICDjCCAbWgAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDEwlUZXN0IENB\nIDEwHhcNMjMxMDE2MTYxMzI5WhcNMjMxMDE2MTYyMzI5WjAAMFkwEwYHKoZIzj0C\nAQYIKoZIzj0DAQcDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9\nta/bGT+5orZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJaOCAQowggEGMA4GA1UdDwEB\n/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDAYDVR0TAQH/\nBAIwADApBgNVHQ4EIgQg3ogXVz9cqaK2B6xdiJYMa5NtT0KkYv7BA2dR7h9EcwUw\nKwYDVR0jBCQwIoAgq+C1mPlPoGa4lt7sSft1goN5qPGyBIB/3mUHJZKSFY8wbwYD\nVR0RAQH/BGUwY4Zhc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9hcC9kZWZhdWx0L25zL2RlZmF1bHQvaWRlbnRpdHkv\ndGVzdC1pZGVudGl0eTAKBggqhkjOPQQDAgNHADBEAiB6L+t5bzRrBPhiQYNeA7fF\nUCuLWrdjW4Xbv3SLg0IKMgIgfRC5hEx+DqzQxTCP4sexX3hVWMjKoWmHdwiUcg+K\n/IE=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIFIFkTIL1iUV4O/RpveVHzHs7ZzhSkvYIzbdXDttz9EooAoGCCqGSM49\nAwEHoUQDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9ta/bGT+5\norZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "some-root\nsome-other-root\n" - }, - "matchSubjectAltNames": [ - { - "exact": "spiffe://foo.consul/ap/default/ns/default/identity/backup1-identity" - } - ] - }, - "alpnProtocols": [ - "consul~http" - ] - }, - "sni": "backup-1.default.dc1.internal.foo.consul" - } - } - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "name": "http.api-1.default.dc1.internal.foo.consul", - "altStatName": "http.api-1.default.dc1.internal.foo.consul", - "clusterType": { - "name": "envoy.clusters.aggregate", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.clusters.aggregate.v3.ClusterConfig", - "clusters": [ - "failover-target~0~http.api-1.default.dc1.internal.foo.consul", - "failover-target~1~http.api-1.default.dc1.internal.foo.consul" - ] - } - }, - "connectTimeout": "55s", - "lbPolicy": "CLUSTER_PROVIDED" - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "name": "http.api-2.default.dc1.internal.foo.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" - } - }, - "connectTimeout": "5s", - "commonLbConfig": { - "healthyPanicThreshold": {} - }, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsParams": {}, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICDjCCAbWgAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDEwlUZXN0IENB\nIDEwHhcNMjMxMDE2MTYxMzI5WhcNMjMxMDE2MTYyMzI5WjAAMFkwEwYHKoZIzj0C\nAQYIKoZIzj0DAQcDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9\nta/bGT+5orZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJaOCAQowggEGMA4GA1UdDwEB\n/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDAYDVR0TAQH/\nBAIwADApBgNVHQ4EIgQg3ogXVz9cqaK2B6xdiJYMa5NtT0KkYv7BA2dR7h9EcwUw\nKwYDVR0jBCQwIoAgq+C1mPlPoGa4lt7sSft1goN5qPGyBIB/3mUHJZKSFY8wbwYD\nVR0RAQH/BGUwY4Zhc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9hcC9kZWZhdWx0L25zL2RlZmF1bHQvaWRlbnRpdHkv\ndGVzdC1pZGVudGl0eTAKBggqhkjOPQQDAgNHADBEAiB6L+t5bzRrBPhiQYNeA7fF\nUCuLWrdjW4Xbv3SLg0IKMgIgfRC5hEx+DqzQxTCP4sexX3hVWMjKoWmHdwiUcg+K\n/IE=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIFIFkTIL1iUV4O/RpveVHzHs7ZzhSkvYIzbdXDttz9EooAoGCCqGSM49\nAwEHoUQDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9ta/bGT+5\norZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "some-root\nsome-other-root\n" - }, - "matchSubjectAltNames": [ - { - "exact": "spiffe://foo.consul/ap/default/ns/default/identity/api2-identity" - } - ] - }, - "alpnProtocols": [ - "consul~http" - ] - }, - "sni": "api-2.default.dc1.internal.foo.consul" - } - } - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "name": "null_route_cluster", - "type": "STATIC", - "connectTimeout": "10s" + "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", + "name": "null_route_cluster", + "type": "STATIC", + "connectTimeout": "10s" }, { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "name": "tcp.api-1.default.dc1.internal.foo.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" + "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", + "name": "tcp.api-1.default.dc1.internal.foo.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": {}, + "resourceApiVersion": "V3" } }, - "connectTimeout": "5s", - "commonLbConfig": { - "healthyPanicThreshold": {} + "connectTimeout": "5s", + "commonLbConfig": { + "healthyPanicThreshold": {} }, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsParams": {}, - "tlsCertificates": [ + "transportSocket": { + "name": "tls", + "typedConfig": { + "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", + "commonTlsContext": { + "tlsParams": {}, + "tlsCertificates": [ { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICDjCCAbWgAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDEwlUZXN0IENB\nIDEwHhcNMjMxMDE2MTYxMzI5WhcNMjMxMDE2MTYyMzI5WjAAMFkwEwYHKoZIzj0C\nAQYIKoZIzj0DAQcDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9\nta/bGT+5orZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJaOCAQowggEGMA4GA1UdDwEB\n/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDAYDVR0TAQH/\nBAIwADApBgNVHQ4EIgQg3ogXVz9cqaK2B6xdiJYMa5NtT0KkYv7BA2dR7h9EcwUw\nKwYDVR0jBCQwIoAgq+C1mPlPoGa4lt7sSft1goN5qPGyBIB/3mUHJZKSFY8wbwYD\nVR0RAQH/BGUwY4Zhc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9hcC9kZWZhdWx0L25zL2RlZmF1bHQvaWRlbnRpdHkv\ndGVzdC1pZGVudGl0eTAKBggqhkjOPQQDAgNHADBEAiB6L+t5bzRrBPhiQYNeA7fF\nUCuLWrdjW4Xbv3SLg0IKMgIgfRC5hEx+DqzQxTCP4sexX3hVWMjKoWmHdwiUcg+K\n/IE=\n-----END CERTIFICATE-----\n" + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICDjCCAbWgAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDEwlUZXN0IENB\nIDEwHhcNMjMxMDE2MTYxMzI5WhcNMjMxMDE2MTYyMzI5WjAAMFkwEwYHKoZIzj0C\nAQYIKoZIzj0DAQcDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9\nta/bGT+5orZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJaOCAQowggEGMA4GA1UdDwEB\n/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDAYDVR0TAQH/\nBAIwADApBgNVHQ4EIgQg3ogXVz9cqaK2B6xdiJYMa5NtT0KkYv7BA2dR7h9EcwUw\nKwYDVR0jBCQwIoAgq+C1mPlPoGa4lt7sSft1goN5qPGyBIB/3mUHJZKSFY8wbwYD\nVR0RAQH/BGUwY4Zhc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9hcC9kZWZhdWx0L25zL2RlZmF1bHQvaWRlbnRpdHkv\ndGVzdC1pZGVudGl0eTAKBggqhkjOPQQDAgNHADBEAiB6L+t5bzRrBPhiQYNeA7fF\nUCuLWrdjW4Xbv3SLg0IKMgIgfRC5hEx+DqzQxTCP4sexX3hVWMjKoWmHdwiUcg+K\n/IE=\n-----END CERTIFICATE-----\n" }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIFIFkTIL1iUV4O/RpveVHzHs7ZzhSkvYIzbdXDttz9EooAoGCCqGSM49\nAwEHoUQDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9ta/bGT+5\norZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJQ==\n-----END EC PRIVATE KEY-----\n" + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIFIFkTIL1iUV4O/RpveVHzHs7ZzhSkvYIzbdXDttz9EooAoGCCqGSM49\nAwEHoUQDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9ta/bGT+5\norZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJQ==\n-----END EC PRIVATE KEY-----\n" } } ], - "validationContext": { - "trustedCa": { - "inlineString": "some-root\nsome-other-root\n" + "validationContext": { + "trustedCa": { + "inlineString": "some-root\nsome-other-root\n" }, - "matchSubjectAltNames": [ + "matchSubjectAltNames": [ { - "exact": "spiffe://foo.consul/ap/default/ns/default/identity/api1-identity" + "exact": "spiffe://foo.consul/ap/default/ns/default/identity/api1-identity" } ] }, - "alpnProtocols": [ + "alpnProtocols": [ "consul~tcp" ] }, - "sni": "api-1.default.dc1.internal.foo.consul" + "sni": "api-1.default.dc1.internal.foo.consul" } } }, { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "name": "tcp.api-2.default.dc1.internal.foo.consul", - "type": "EDS", - "edsClusterConfig": { - "edsConfig": { - "ads": {}, - "resourceApiVersion": "V3" + "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", + "name": "tcp.api-2.default.dc1.internal.foo.consul", + "type": "EDS", + "edsClusterConfig": { + "edsConfig": { + "ads": {}, + "resourceApiVersion": "V3" } }, - "connectTimeout": "5s", - "commonLbConfig": { - "healthyPanicThreshold": {} + "connectTimeout": "5s", + "commonLbConfig": { + "healthyPanicThreshold": {} }, - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", - "commonTlsContext": { - "tlsParams": {}, - "tlsCertificates": [ + "transportSocket": { + "name": "tls", + "typedConfig": { + "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext", + "commonTlsContext": { + "tlsParams": {}, + "tlsCertificates": [ { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICDjCCAbWgAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDEwlUZXN0IENB\nIDEwHhcNMjMxMDE2MTYxMzI5WhcNMjMxMDE2MTYyMzI5WjAAMFkwEwYHKoZIzj0C\nAQYIKoZIzj0DAQcDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9\nta/bGT+5orZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJaOCAQowggEGMA4GA1UdDwEB\n/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDAYDVR0TAQH/\nBAIwADApBgNVHQ4EIgQg3ogXVz9cqaK2B6xdiJYMa5NtT0KkYv7BA2dR7h9EcwUw\nKwYDVR0jBCQwIoAgq+C1mPlPoGa4lt7sSft1goN5qPGyBIB/3mUHJZKSFY8wbwYD\nVR0RAQH/BGUwY4Zhc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9hcC9kZWZhdWx0L25zL2RlZmF1bHQvaWRlbnRpdHkv\ndGVzdC1pZGVudGl0eTAKBggqhkjOPQQDAgNHADBEAiB6L+t5bzRrBPhiQYNeA7fF\nUCuLWrdjW4Xbv3SLg0IKMgIgfRC5hEx+DqzQxTCP4sexX3hVWMjKoWmHdwiUcg+K\n/IE=\n-----END CERTIFICATE-----\n" + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICDjCCAbWgAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDEwlUZXN0IENB\nIDEwHhcNMjMxMDE2MTYxMzI5WhcNMjMxMDE2MTYyMzI5WjAAMFkwEwYHKoZIzj0C\nAQYIKoZIzj0DAQcDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9\nta/bGT+5orZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJaOCAQowggEGMA4GA1UdDwEB\n/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDAYDVR0TAQH/\nBAIwADApBgNVHQ4EIgQg3ogXVz9cqaK2B6xdiJYMa5NtT0KkYv7BA2dR7h9EcwUw\nKwYDVR0jBCQwIoAgq+C1mPlPoGa4lt7sSft1goN5qPGyBIB/3mUHJZKSFY8wbwYD\nVR0RAQH/BGUwY4Zhc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9hcC9kZWZhdWx0L25zL2RlZmF1bHQvaWRlbnRpdHkv\ndGVzdC1pZGVudGl0eTAKBggqhkjOPQQDAgNHADBEAiB6L+t5bzRrBPhiQYNeA7fF\nUCuLWrdjW4Xbv3SLg0IKMgIgfRC5hEx+DqzQxTCP4sexX3hVWMjKoWmHdwiUcg+K\n/IE=\n-----END CERTIFICATE-----\n" }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIFIFkTIL1iUV4O/RpveVHzHs7ZzhSkvYIzbdXDttz9EooAoGCCqGSM49\nAwEHoUQDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9ta/bGT+5\norZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJQ==\n-----END EC PRIVATE KEY-----\n" + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIFIFkTIL1iUV4O/RpveVHzHs7ZzhSkvYIzbdXDttz9EooAoGCCqGSM49\nAwEHoUQDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9ta/bGT+5\norZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJQ==\n-----END EC PRIVATE KEY-----\n" } } ], - "validationContext": { - "trustedCa": { - "inlineString": "some-root\nsome-other-root\n" + "validationContext": { + "trustedCa": { + "inlineString": "some-root\nsome-other-root\n" }, - "matchSubjectAltNames": [ + "matchSubjectAltNames": [ { - "exact": "spiffe://foo.consul/ap/default/ns/default/identity/api2-identity" + "exact": "spiffe://foo.consul/ap/default/ns/default/identity/api2-identity" } ] }, - "alpnProtocols": [ + "alpnProtocols": [ "consul~tcp" ] }, - "sni": "api-2.default.dc1.internal.foo.consul" + "sni": "api-2.default.dc1.internal.foo.consul" } } } ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "nonce": "00000001" + "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", + "nonce": "00000001" } \ No newline at end of file diff --git a/agent/xdsv2/testdata/clusters/source/l4-multiple-workload-addresses-with-specific-ports.golden b/agent/xdsv2/testdata/clusters/source/l4-multiple-workload-addresses-with-specific-ports.golden new file mode 100644 index 0000000000000..ce9870c06cd9d --- /dev/null +++ b/agent/xdsv2/testdata/clusters/source/l4-multiple-workload-addresses-with-specific-ports.golden @@ -0,0 +1,31 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", + "name": "local_app:port1", + "type": "STATIC", + "loadAssignment": { + "clusterName": "local_app:port1", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff --git a/agent/xdsv2/testdata/clusters/source/l4-multiple-workload-addresses-without-ports.golden b/agent/xdsv2/testdata/clusters/source/l4-multiple-workload-addresses-without-ports.golden new file mode 100644 index 0000000000000..ce9870c06cd9d --- /dev/null +++ b/agent/xdsv2/testdata/clusters/source/l4-multiple-workload-addresses-without-ports.golden @@ -0,0 +1,31 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", + "name": "local_app:port1", + "type": "STATIC", + "loadAssignment": { + "clusterName": "local_app:port1", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff --git a/agent/xdsv2/testdata/clusters/source/l4-single-workload-address-without-ports.golden b/agent/xdsv2/testdata/clusters/source/l4-single-workload-address-without-ports.golden new file mode 100644 index 0000000000000..ce9870c06cd9d --- /dev/null +++ b/agent/xdsv2/testdata/clusters/source/l4-single-workload-address-without-ports.golden @@ -0,0 +1,31 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", + "name": "local_app:port1", + "type": "STATIC", + "loadAssignment": { + "clusterName": "local_app:port1", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + } + ], + "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", + "nonce": "00000001" +} \ No newline at end of file diff --git a/agent/xdsv2/testdata/clusters/source/multiple-workload-addresses-with-specific-ports.golden b/agent/xdsv2/testdata/clusters/source/multiple-workload-addresses-with-specific-ports.golden deleted file mode 100644 index 0d7d009aa1027..0000000000000 --- a/agent/xdsv2/testdata/clusters/source/multiple-workload-addresses-with-specific-ports.golden +++ /dev/null @@ -1,119 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "name": "local_app:grpc", - "type": "STATIC", - "loadAssignment": { - "clusterName": "local_app:grpc", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8083 - } - } - } - } - ] - } - ] - }, - "typedExtensionProtocolOptions": { - "envoy.extensions.upstreams.http.v3.HttpProtocolOptions": { - "@type": "type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions", - "explicitHttpConfig": { - "http2ProtocolOptions": {} - } - } - } - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "name": "local_app:http", - "type": "STATIC", - "loadAssignment": { - "clusterName": "local_app:http", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8081 - } - } - } - } - ] - } - ] - } - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "name": "local_app:http2", - "type": "STATIC", - "loadAssignment": { - "clusterName": "local_app:http2", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8082 - } - } - } - } - ] - } - ] - }, - "typedExtensionProtocolOptions": { - "envoy.extensions.upstreams.http.v3.HttpProtocolOptions": { - "@type": "type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions", - "explicitHttpConfig": { - "http2ProtocolOptions": {} - } - } - } - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "name": "local_app:tcp", - "type": "STATIC", - "loadAssignment": { - "clusterName": "local_app:tcp", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - } - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "nonce": "00000001" -} \ No newline at end of file diff --git a/agent/xdsv2/testdata/clusters/source/multiple-workload-addresses-without-ports.golden b/agent/xdsv2/testdata/clusters/source/multiple-workload-addresses-without-ports.golden deleted file mode 100644 index 0d7d009aa1027..0000000000000 --- a/agent/xdsv2/testdata/clusters/source/multiple-workload-addresses-without-ports.golden +++ /dev/null @@ -1,119 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "name": "local_app:grpc", - "type": "STATIC", - "loadAssignment": { - "clusterName": "local_app:grpc", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8083 - } - } - } - } - ] - } - ] - }, - "typedExtensionProtocolOptions": { - "envoy.extensions.upstreams.http.v3.HttpProtocolOptions": { - "@type": "type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions", - "explicitHttpConfig": { - "http2ProtocolOptions": {} - } - } - } - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "name": "local_app:http", - "type": "STATIC", - "loadAssignment": { - "clusterName": "local_app:http", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8081 - } - } - } - } - ] - } - ] - } - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "name": "local_app:http2", - "type": "STATIC", - "loadAssignment": { - "clusterName": "local_app:http2", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8082 - } - } - } - } - ] - } - ] - }, - "typedExtensionProtocolOptions": { - "envoy.extensions.upstreams.http.v3.HttpProtocolOptions": { - "@type": "type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions", - "explicitHttpConfig": { - "http2ProtocolOptions": {} - } - } - } - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "name": "local_app:tcp", - "type": "STATIC", - "loadAssignment": { - "clusterName": "local_app:tcp", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - } - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "nonce": "00000001" -} \ No newline at end of file diff --git a/agent/xdsv2/testdata/clusters/source/single-workload-address-without-ports.golden b/agent/xdsv2/testdata/clusters/source/single-workload-address-without-ports.golden deleted file mode 100644 index 0d7d009aa1027..0000000000000 --- a/agent/xdsv2/testdata/clusters/source/single-workload-address-without-ports.golden +++ /dev/null @@ -1,119 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "name": "local_app:grpc", - "type": "STATIC", - "loadAssignment": { - "clusterName": "local_app:grpc", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8083 - } - } - } - } - ] - } - ] - }, - "typedExtensionProtocolOptions": { - "envoy.extensions.upstreams.http.v3.HttpProtocolOptions": { - "@type": "type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions", - "explicitHttpConfig": { - "http2ProtocolOptions": {} - } - } - } - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "name": "local_app:http", - "type": "STATIC", - "loadAssignment": { - "clusterName": "local_app:http", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8081 - } - } - } - } - ] - } - ] - } - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "name": "local_app:http2", - "type": "STATIC", - "loadAssignment": { - "clusterName": "local_app:http2", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8082 - } - } - } - } - ] - } - ] - }, - "typedExtensionProtocolOptions": { - "envoy.extensions.upstreams.http.v3.HttpProtocolOptions": { - "@type": "type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions", - "explicitHttpConfig": { - "http2ProtocolOptions": {} - } - } - } - }, - { - "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "name": "local_app:tcp", - "type": "STATIC", - "loadAssignment": { - "clusterName": "local_app:tcp", - "endpoints": [ - { - "lbEndpoints": [ - { - "endpoint": { - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 8080 - } - } - } - } - ] - } - ] - } - } - ], - "typeUrl": "type.googleapis.com/envoy.config.cluster.v3.Cluster", - "nonce": "00000001" -} \ No newline at end of file diff --git a/agent/xdsv2/testdata/endpoints/source/l4-multiple-workload-addresses-with-specific-ports.golden b/agent/xdsv2/testdata/endpoints/source/l4-multiple-workload-addresses-with-specific-ports.golden new file mode 100644 index 0000000000000..b0c31e6e79c77 --- /dev/null +++ b/agent/xdsv2/testdata/endpoints/source/l4-multiple-workload-addresses-with-specific-ports.golden @@ -0,0 +1,27 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", + "clusterName": "local_app:port1", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff --git a/agent/xdsv2/testdata/endpoints/source/l4-multiple-workload-addresses-without-ports.golden b/agent/xdsv2/testdata/endpoints/source/l4-multiple-workload-addresses-without-ports.golden new file mode 100644 index 0000000000000..b0c31e6e79c77 --- /dev/null +++ b/agent/xdsv2/testdata/endpoints/source/l4-multiple-workload-addresses-without-ports.golden @@ -0,0 +1,27 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", + "clusterName": "local_app:port1", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff --git a/agent/xdsv2/testdata/endpoints/source/l4-single-workload-address-without-ports.golden b/agent/xdsv2/testdata/endpoints/source/l4-single-workload-address-without-ports.golden new file mode 100644 index 0000000000000..b0c31e6e79c77 --- /dev/null +++ b/agent/xdsv2/testdata/endpoints/source/l4-single-workload-address-without-ports.golden @@ -0,0 +1,27 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", + "clusterName": "local_app:port1", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + ], + "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", + "nonce": "00000001" +} \ No newline at end of file diff --git a/agent/xdsv2/testdata/endpoints/source/l7-expose-paths.golden b/agent/xdsv2/testdata/endpoints/source/l7-expose-paths.golden index 47b46bca225bf..1ccb234c89dbc 100644 --- a/agent/xdsv2/testdata/endpoints/source/l7-expose-paths.golden +++ b/agent/xdsv2/testdata/endpoints/source/l7-expose-paths.golden @@ -1,5 +1,67 @@ { "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", + "clusterName": "exposed_cluster_9090", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9090 + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", + "clusterName": "exposed_cluster_9091", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9091 + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", + "clusterName": "local_app:port1", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + } + ], "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", "nonce": "00000001" } \ No newline at end of file diff --git a/agent/xdsv2/testdata/endpoints/source/local-and-inbound-connections.golden b/agent/xdsv2/testdata/endpoints/source/local-and-inbound-connections.golden index 47b46bca225bf..c9e8727f031d4 100644 --- a/agent/xdsv2/testdata/endpoints/source/local-and-inbound-connections.golden +++ b/agent/xdsv2/testdata/endpoints/source/local-and-inbound-connections.golden @@ -1,5 +1,87 @@ { "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", + "clusterName": "exposed_cluster_9090", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9090 + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", + "clusterName": "exposed_cluster_9091", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9091 + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", + "clusterName": "local_app:port1", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", + "clusterName": "local_app:port3", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8081 + } + } + } + } + ] + } + ] + } + ], "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", "nonce": "00000001" } \ No newline at end of file diff --git a/agent/xdsv2/testdata/endpoints/source/multiple-workload-addresses-with-specific-ports.golden b/agent/xdsv2/testdata/endpoints/source/multiple-workload-addresses-with-specific-ports.golden deleted file mode 100644 index 47b46bca225bf..0000000000000 --- a/agent/xdsv2/testdata/endpoints/source/multiple-workload-addresses-with-specific-ports.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "versionInfo": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "nonce": "00000001" -} \ No newline at end of file diff --git a/agent/xdsv2/testdata/endpoints/source/multiple-workload-addresses-without-ports.golden b/agent/xdsv2/testdata/endpoints/source/multiple-workload-addresses-without-ports.golden deleted file mode 100644 index 47b46bca225bf..0000000000000 --- a/agent/xdsv2/testdata/endpoints/source/multiple-workload-addresses-without-ports.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "versionInfo": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "nonce": "00000001" -} \ No newline at end of file diff --git a/agent/xdsv2/testdata/endpoints/source/multiport-l4-multiple-workload-addresses-with-specific-ports.golden b/agent/xdsv2/testdata/endpoints/source/multiport-l4-multiple-workload-addresses-with-specific-ports.golden index 47b46bca225bf..916fbc26ceab7 100644 --- a/agent/xdsv2/testdata/endpoints/source/multiport-l4-multiple-workload-addresses-with-specific-ports.golden +++ b/agent/xdsv2/testdata/endpoints/source/multiport-l4-multiple-workload-addresses-with-specific-ports.golden @@ -1,5 +1,47 @@ { "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", + "clusterName": "local_app:admin-port", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", + "clusterName": "local_app:api-port", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9090 + } + } + } + } + ] + } + ] + } + ], "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", "nonce": "00000001" } \ No newline at end of file diff --git a/agent/xdsv2/testdata/endpoints/source/multiport-l4-multiple-workload-addresses-without-ports.golden b/agent/xdsv2/testdata/endpoints/source/multiport-l4-multiple-workload-addresses-without-ports.golden index 47b46bca225bf..916fbc26ceab7 100644 --- a/agent/xdsv2/testdata/endpoints/source/multiport-l4-multiple-workload-addresses-without-ports.golden +++ b/agent/xdsv2/testdata/endpoints/source/multiport-l4-multiple-workload-addresses-without-ports.golden @@ -1,5 +1,47 @@ { "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", + "clusterName": "local_app:admin-port", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", + "clusterName": "local_app:api-port", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9090 + } + } + } + } + ] + } + ] + } + ], "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", "nonce": "00000001" } \ No newline at end of file diff --git a/agent/xdsv2/testdata/endpoints/source/multiport-l7-multiple-workload-addresses-with-specific-ports.golden b/agent/xdsv2/testdata/endpoints/source/multiport-l7-multiple-workload-addresses-with-specific-ports.golden index 47b46bca225bf..916fbc26ceab7 100644 --- a/agent/xdsv2/testdata/endpoints/source/multiport-l7-multiple-workload-addresses-with-specific-ports.golden +++ b/agent/xdsv2/testdata/endpoints/source/multiport-l7-multiple-workload-addresses-with-specific-ports.golden @@ -1,5 +1,47 @@ { "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", + "clusterName": "local_app:admin-port", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", + "clusterName": "local_app:api-port", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9090 + } + } + } + } + ] + } + ] + } + ], "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", "nonce": "00000001" } \ No newline at end of file diff --git a/agent/xdsv2/testdata/endpoints/source/multiport-l7-multiple-workload-addresses-without-ports.golden b/agent/xdsv2/testdata/endpoints/source/multiport-l7-multiple-workload-addresses-without-ports.golden index 47b46bca225bf..e3c67d2c90ae8 100644 --- a/agent/xdsv2/testdata/endpoints/source/multiport-l7-multiple-workload-addresses-without-ports.golden +++ b/agent/xdsv2/testdata/endpoints/source/multiport-l7-multiple-workload-addresses-without-ports.golden @@ -1,5 +1,67 @@ { "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", + "clusterName": "local_app:admin-port", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 8080 + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", + "clusterName": "local_app:api-port", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9090 + } + } + } + } + ] + } + ] + }, + { + "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", + "clusterName": "local_app:grpc-port", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "socketAddress": { + "address": "127.0.0.1", + "portValue": 9091 + } + } + } + } + ] + } + ] + } + ], "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", "nonce": "00000001" } \ No newline at end of file diff --git a/agent/xdsv2/testdata/endpoints/source/single-workload-address-without-ports.golden b/agent/xdsv2/testdata/endpoints/source/single-workload-address-without-ports.golden deleted file mode 100644 index 47b46bca225bf..0000000000000 --- a/agent/xdsv2/testdata/endpoints/source/single-workload-address-without-ports.golden +++ /dev/null @@ -1,5 +0,0 @@ -{ - "versionInfo": "00000001", - "typeUrl": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", - "nonce": "00000001" -} \ No newline at end of file diff --git a/agent/xdsv2/testdata/listeners/destination/mixed-multi-destination.golden b/agent/xdsv2/testdata/listeners/destination/mixed-multi-destination.golden index eae168bf8aa04..23dd5e4c6475c 100644 --- a/agent/xdsv2/testdata/listeners/destination/mixed-multi-destination.golden +++ b/agent/xdsv2/testdata/listeners/destination/mixed-multi-destination.golden @@ -17,7 +17,7 @@ "name": "envoy.filters.network.http_connection_manager", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "statPrefix": "upstream.http.api-1.default.default.dc1", + "statPrefix": "upstream.", "rds": { "configSource": { "ads": {}, diff --git a/agent/xdsv2/testdata/listeners/destination/multiport-l4-and-l7-multiple-implicit-destinations-tproxy.golden b/agent/xdsv2/testdata/listeners/destination/multiport-l4-and-l7-multiple-implicit-destinations-tproxy.golden index b0477d8310e14..9cd146e6ef0d5 100644 --- a/agent/xdsv2/testdata/listeners/destination/multiport-l4-and-l7-multiple-implicit-destinations-tproxy.golden +++ b/agent/xdsv2/testdata/listeners/destination/multiport-l4-and-l7-multiple-implicit-destinations-tproxy.golden @@ -47,7 +47,7 @@ "name": "envoy.filters.network.http_connection_manager", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "statPrefix": "upstream.http.api-app.default.default.dc1", + "statPrefix": "upstream.", "rds": { "configSource": { "ads": {}, @@ -140,7 +140,7 @@ "name": "envoy.filters.network.http_connection_manager", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "statPrefix": "upstream.http.api-app2.default.default.dc1", + "statPrefix": "upstream.", "rds": { "configSource": { "ads": {}, diff --git a/agent/xdsv2/testdata/listeners/destination/multiport-l4-and-l7-single-implicit-destination-tproxy.golden b/agent/xdsv2/testdata/listeners/destination/multiport-l4-and-l7-single-implicit-destination-tproxy.golden index 180213b6523c0..71dec1b4db466 100644 --- a/agent/xdsv2/testdata/listeners/destination/multiport-l4-and-l7-single-implicit-destination-tproxy.golden +++ b/agent/xdsv2/testdata/listeners/destination/multiport-l4-and-l7-single-implicit-destination-tproxy.golden @@ -47,7 +47,7 @@ "name": "envoy.filters.network.http_connection_manager", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "statPrefix": "upstream.http.api-app.default.default.dc1", + "statPrefix": "upstream.", "rds": { "configSource": { "ads": {}, diff --git a/agent/xdsv2/testdata/listeners/destination/multiport-l4-and-l7-single-implicit-destination-with-multiple-workloads-tproxy.golden b/agent/xdsv2/testdata/listeners/destination/multiport-l4-and-l7-single-implicit-destination-with-multiple-workloads-tproxy.golden index 180213b6523c0..71dec1b4db466 100644 --- a/agent/xdsv2/testdata/listeners/destination/multiport-l4-and-l7-single-implicit-destination-with-multiple-workloads-tproxy.golden +++ b/agent/xdsv2/testdata/listeners/destination/multiport-l4-and-l7-single-implicit-destination-with-multiple-workloads-tproxy.golden @@ -47,7 +47,7 @@ "name": "envoy.filters.network.http_connection_manager", "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "statPrefix": "upstream.http.api-app.default.default.dc1", + "statPrefix": "upstream.", "rds": { "configSource": { "ads": {}, diff --git a/agent/xdsv2/testdata/listeners/source/l4-multiple-workload-addresses-with-specific-ports.golden b/agent/xdsv2/testdata/listeners/source/l4-multiple-workload-addresses-with-specific-ports.golden new file mode 100644 index 0000000000000..644769d8423fc --- /dev/null +++ b/agent/xdsv2/testdata/listeners/source/l4-multiple-workload-addresses-with-specific-ports.golden @@ -0,0 +1,100 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", + "name": "public_listener", + "address": { + "socketAddress": { + "address": "10.0.0.2", + "portValue": 20000 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "applicationProtocols": [ + "consul~port1" + ] + }, + "filters": [ + { + "name": "envoy.filters.network.rbac", + "typedConfig": { + "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", + "rules": { + "policies": { + "consul-intentions-layer4": { + "permissions": [ + { + "any": true + } + ], + "principals": [ + { + "authenticated": { + "principalName": { + "safeRegex": { + "googleRe2": {}, + "regex": "^spiffe://foo.consul/ap/default/ns/default/identity/foo$" + } + } + } + } + ] + } + } + }, + "statPrefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.tcp_proxy", + "typedConfig": { + "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", + "statPrefix": "public_listener", + "cluster": "local_app:port1" + } + } + ], + "transportSocket": { + "name": "tls", + "typedConfig": { + "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", + "commonTlsContext": { + "tlsParams": {}, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICDjCCAbWgAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDEwlUZXN0IENB\nIDEwHhcNMjMxMDE2MTYxMzI5WhcNMjMxMDE2MTYyMzI5WjAAMFkwEwYHKoZIzj0C\nAQYIKoZIzj0DAQcDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9\nta/bGT+5orZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJaOCAQowggEGMA4GA1UdDwEB\n/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDAYDVR0TAQH/\nBAIwADApBgNVHQ4EIgQg3ogXVz9cqaK2B6xdiJYMa5NtT0KkYv7BA2dR7h9EcwUw\nKwYDVR0jBCQwIoAgq+C1mPlPoGa4lt7sSft1goN5qPGyBIB/3mUHJZKSFY8wbwYD\nVR0RAQH/BGUwY4Zhc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9hcC9kZWZhdWx0L25zL2RlZmF1bHQvaWRlbnRpdHkv\ndGVzdC1pZGVudGl0eTAKBggqhkjOPQQDAgNHADBEAiB6L+t5bzRrBPhiQYNeA7fF\nUCuLWrdjW4Xbv3SLg0IKMgIgfRC5hEx+DqzQxTCP4sexX3hVWMjKoWmHdwiUcg+K\n/IE=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIFIFkTIL1iUV4O/RpveVHzHs7ZzhSkvYIzbdXDttz9EooAoGCCqGSM49\nAwEHoUQDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9ta/bGT+5\norZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "some-root\nsome-other-root\n" + } + } + }, + "requireClientCertificate": true + } + } + } + ], + "listenerFilters": [ + { + "name": "envoy.filters.listener.tls_inspector", + "typedConfig": { + "@type": "type.googleapis.com/envoy.extensions.filters.listener.tls_inspector.v3.TlsInspector" + } + } + ], + "trafficDirection": "INBOUND" + } + ], + "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", + "nonce": "00000001" +} \ No newline at end of file diff --git a/agent/xdsv2/testdata/listeners/source/l4-multiple-workload-addresses-without-ports.golden b/agent/xdsv2/testdata/listeners/source/l4-multiple-workload-addresses-without-ports.golden new file mode 100644 index 0000000000000..82581d5762489 --- /dev/null +++ b/agent/xdsv2/testdata/listeners/source/l4-multiple-workload-addresses-without-ports.golden @@ -0,0 +1,78 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", + "name": "public_listener", + "address": { + "socketAddress": { + "address": "10.0.0.1", + "portValue": 20000 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "applicationProtocols": [ + "consul~port1" + ] + }, + "filters": [ + { + "name": "envoy.filters.network.rbac", + "typedConfig": { + "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", + "rules": {}, + "statPrefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.tcp_proxy", + "typedConfig": { + "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", + "statPrefix": "public_listener", + "cluster": "local_app:port1" + } + } + ], + "transportSocket": { + "name": "tls", + "typedConfig": { + "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", + "commonTlsContext": { + "tlsParams": {}, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICDjCCAbWgAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDEwlUZXN0IENB\nIDEwHhcNMjMxMDE2MTYxMzI5WhcNMjMxMDE2MTYyMzI5WjAAMFkwEwYHKoZIzj0C\nAQYIKoZIzj0DAQcDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9\nta/bGT+5orZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJaOCAQowggEGMA4GA1UdDwEB\n/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDAYDVR0TAQH/\nBAIwADApBgNVHQ4EIgQg3ogXVz9cqaK2B6xdiJYMa5NtT0KkYv7BA2dR7h9EcwUw\nKwYDVR0jBCQwIoAgq+C1mPlPoGa4lt7sSft1goN5qPGyBIB/3mUHJZKSFY8wbwYD\nVR0RAQH/BGUwY4Zhc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9hcC9kZWZhdWx0L25zL2RlZmF1bHQvaWRlbnRpdHkv\ndGVzdC1pZGVudGl0eTAKBggqhkjOPQQDAgNHADBEAiB6L+t5bzRrBPhiQYNeA7fF\nUCuLWrdjW4Xbv3SLg0IKMgIgfRC5hEx+DqzQxTCP4sexX3hVWMjKoWmHdwiUcg+K\n/IE=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIFIFkTIL1iUV4O/RpveVHzHs7ZzhSkvYIzbdXDttz9EooAoGCCqGSM49\nAwEHoUQDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9ta/bGT+5\norZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "some-root\nsome-other-root\n" + } + } + }, + "requireClientCertificate": true + } + } + } + ], + "listenerFilters": [ + { + "name": "envoy.filters.listener.tls_inspector", + "typedConfig": { + "@type": "type.googleapis.com/envoy.extensions.filters.listener.tls_inspector.v3.TlsInspector" + } + } + ], + "trafficDirection": "INBOUND" + } + ], + "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", + "nonce": "00000001" +} \ No newline at end of file diff --git a/agent/xdsv2/testdata/listeners/source/l4-single-workload-address-without-ports.golden b/agent/xdsv2/testdata/listeners/source/l4-single-workload-address-without-ports.golden new file mode 100644 index 0000000000000..82581d5762489 --- /dev/null +++ b/agent/xdsv2/testdata/listeners/source/l4-single-workload-address-without-ports.golden @@ -0,0 +1,78 @@ +{ + "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", + "name": "public_listener", + "address": { + "socketAddress": { + "address": "10.0.0.1", + "portValue": 20000 + } + }, + "filterChains": [ + { + "filterChainMatch": { + "applicationProtocols": [ + "consul~port1" + ] + }, + "filters": [ + { + "name": "envoy.filters.network.rbac", + "typedConfig": { + "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", + "rules": {}, + "statPrefix": "connect_authz" + } + }, + { + "name": "envoy.filters.network.tcp_proxy", + "typedConfig": { + "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", + "statPrefix": "public_listener", + "cluster": "local_app:port1" + } + } + ], + "transportSocket": { + "name": "tls", + "typedConfig": { + "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", + "commonTlsContext": { + "tlsParams": {}, + "tlsCertificates": [ + { + "certificateChain": { + "inlineString": "-----BEGIN CERTIFICATE-----\nMIICDjCCAbWgAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDEwlUZXN0IENB\nIDEwHhcNMjMxMDE2MTYxMzI5WhcNMjMxMDE2MTYyMzI5WjAAMFkwEwYHKoZIzj0C\nAQYIKoZIzj0DAQcDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9\nta/bGT+5orZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJaOCAQowggEGMA4GA1UdDwEB\n/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDAYDVR0TAQH/\nBAIwADApBgNVHQ4EIgQg3ogXVz9cqaK2B6xdiJYMa5NtT0KkYv7BA2dR7h9EcwUw\nKwYDVR0jBCQwIoAgq+C1mPlPoGa4lt7sSft1goN5qPGyBIB/3mUHJZKSFY8wbwYD\nVR0RAQH/BGUwY4Zhc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9hcC9kZWZhdWx0L25zL2RlZmF1bHQvaWRlbnRpdHkv\ndGVzdC1pZGVudGl0eTAKBggqhkjOPQQDAgNHADBEAiB6L+t5bzRrBPhiQYNeA7fF\nUCuLWrdjW4Xbv3SLg0IKMgIgfRC5hEx+DqzQxTCP4sexX3hVWMjKoWmHdwiUcg+K\n/IE=\n-----END CERTIFICATE-----\n" + }, + "privateKey": { + "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIFIFkTIL1iUV4O/RpveVHzHs7ZzhSkvYIzbdXDttz9EooAoGCCqGSM49\nAwEHoUQDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9ta/bGT+5\norZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJQ==\n-----END EC PRIVATE KEY-----\n" + } + } + ], + "validationContext": { + "trustedCa": { + "inlineString": "some-root\nsome-other-root\n" + } + } + }, + "requireClientCertificate": true + } + } + } + ], + "listenerFilters": [ + { + "name": "envoy.filters.listener.tls_inspector", + "typedConfig": { + "@type": "type.googleapis.com/envoy.extensions.filters.listener.tls_inspector.v3.TlsInspector" + } + } + ], + "trafficDirection": "INBOUND" + } + ], + "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", + "nonce": "00000001" +} \ No newline at end of file diff --git a/agent/xdsv2/testdata/listeners/source/multiple-workload-addresses-with-specific-ports.golden b/agent/xdsv2/testdata/listeners/source/multiple-workload-addresses-with-specific-ports.golden deleted file mode 100644 index cb81777262f64..0000000000000 --- a/agent/xdsv2/testdata/listeners/source/multiple-workload-addresses-with-specific-ports.golden +++ /dev/null @@ -1,359 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "name": "public_listener", - "address": { - "socketAddress": { - "address": "127.0.0.1", - "portValue": 20000 - } - }, - "filterChains": [ - { - "filterChainMatch": { - "applicationProtocols": [ - "consul~grpc" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.http_connection_manager", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "statPrefix": "public_listener", - "routeConfig": { - "name": "public_listener:grpc", - "virtualHosts": [ - { - "name": "public_listener:grpc", - "domains": [ - "*" - ], - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "local_app:grpc" - } - } - ] - } - ] - }, - "httpFilters": [ - { - "name": "envoy.filters.http.grpc_stats", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.grpc_stats.v3.FilterConfig", - "statsForAllMethods": true - } - }, - { - "name": "envoy.filters.http.grpc_http1_bridge", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.grpc_http1_bridge.v3.Config" - } - }, - { - "name": "envoy.filters.http.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.rbac.v3.RBAC", - "rules": {} - } - }, - { - "name": "envoy.filters.http.router", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" - } - } - ], - "tracing": { - "randomSampling": {} - }, - "http2ProtocolOptions": {}, - "upgradeConfigs": [ - { - "upgradeType": "websocket" - } - ] - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsParams": {}, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICDjCCAbWgAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDEwlUZXN0IENB\nIDEwHhcNMjMxMDE2MTYxMzI5WhcNMjMxMDE2MTYyMzI5WjAAMFkwEwYHKoZIzj0C\nAQYIKoZIzj0DAQcDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9\nta/bGT+5orZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJaOCAQowggEGMA4GA1UdDwEB\n/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDAYDVR0TAQH/\nBAIwADApBgNVHQ4EIgQg3ogXVz9cqaK2B6xdiJYMa5NtT0KkYv7BA2dR7h9EcwUw\nKwYDVR0jBCQwIoAgq+C1mPlPoGa4lt7sSft1goN5qPGyBIB/3mUHJZKSFY8wbwYD\nVR0RAQH/BGUwY4Zhc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9hcC9kZWZhdWx0L25zL2RlZmF1bHQvaWRlbnRpdHkv\ndGVzdC1pZGVudGl0eTAKBggqhkjOPQQDAgNHADBEAiB6L+t5bzRrBPhiQYNeA7fF\nUCuLWrdjW4Xbv3SLg0IKMgIgfRC5hEx+DqzQxTCP4sexX3hVWMjKoWmHdwiUcg+K\n/IE=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIFIFkTIL1iUV4O/RpveVHzHs7ZzhSkvYIzbdXDttz9EooAoGCCqGSM49\nAwEHoUQDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9ta/bGT+5\norZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "some-root\nsome-other-root\n" - } - }, - "alpnProtocols": [ - "h2", - "http/1.1" - ] - }, - "requireClientCertificate": true - } - } - }, - { - "filterChainMatch": { - "applicationProtocols": [ - "consul~http" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.http_connection_manager", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "statPrefix": "public_listener", - "routeConfig": { - "name": "public_listener:http", - "virtualHosts": [ - { - "name": "public_listener:http", - "domains": [ - "*" - ], - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "local_app:http" - } - } - ] - } - ] - }, - "httpFilters": [ - { - "name": "envoy.filters.http.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.rbac.v3.RBAC", - "rules": {} - } - }, - { - "name": "envoy.filters.http.router", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" - } - } - ], - "tracing": { - "randomSampling": {} - }, - "upgradeConfigs": [ - { - "upgradeType": "websocket" - } - ] - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsParams": {}, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICDjCCAbWgAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDEwlUZXN0IENB\nIDEwHhcNMjMxMDE2MTYxMzI5WhcNMjMxMDE2MTYyMzI5WjAAMFkwEwYHKoZIzj0C\nAQYIKoZIzj0DAQcDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9\nta/bGT+5orZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJaOCAQowggEGMA4GA1UdDwEB\n/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDAYDVR0TAQH/\nBAIwADApBgNVHQ4EIgQg3ogXVz9cqaK2B6xdiJYMa5NtT0KkYv7BA2dR7h9EcwUw\nKwYDVR0jBCQwIoAgq+C1mPlPoGa4lt7sSft1goN5qPGyBIB/3mUHJZKSFY8wbwYD\nVR0RAQH/BGUwY4Zhc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9hcC9kZWZhdWx0L25zL2RlZmF1bHQvaWRlbnRpdHkv\ndGVzdC1pZGVudGl0eTAKBggqhkjOPQQDAgNHADBEAiB6L+t5bzRrBPhiQYNeA7fF\nUCuLWrdjW4Xbv3SLg0IKMgIgfRC5hEx+DqzQxTCP4sexX3hVWMjKoWmHdwiUcg+K\n/IE=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIFIFkTIL1iUV4O/RpveVHzHs7ZzhSkvYIzbdXDttz9EooAoGCCqGSM49\nAwEHoUQDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9ta/bGT+5\norZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "some-root\nsome-other-root\n" - } - }, - "alpnProtocols": [ - "http/1.1" - ] - }, - "requireClientCertificate": true - } - } - }, - { - "filterChainMatch": { - "applicationProtocols": [ - "consul~http2" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.http_connection_manager", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "statPrefix": "public_listener", - "routeConfig": { - "name": "public_listener:http2", - "virtualHosts": [ - { - "name": "public_listener:http2", - "domains": [ - "*" - ], - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "local_app:http2" - } - } - ] - } - ] - }, - "httpFilters": [ - { - "name": "envoy.filters.http.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.rbac.v3.RBAC", - "rules": {} - } - }, - { - "name": "envoy.filters.http.router", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" - } - } - ], - "tracing": { - "randomSampling": {} - }, - "http2ProtocolOptions": {}, - "upgradeConfigs": [ - { - "upgradeType": "websocket" - } - ] - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsParams": {}, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICDjCCAbWgAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDEwlUZXN0IENB\nIDEwHhcNMjMxMDE2MTYxMzI5WhcNMjMxMDE2MTYyMzI5WjAAMFkwEwYHKoZIzj0C\nAQYIKoZIzj0DAQcDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9\nta/bGT+5orZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJaOCAQowggEGMA4GA1UdDwEB\n/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDAYDVR0TAQH/\nBAIwADApBgNVHQ4EIgQg3ogXVz9cqaK2B6xdiJYMa5NtT0KkYv7BA2dR7h9EcwUw\nKwYDVR0jBCQwIoAgq+C1mPlPoGa4lt7sSft1goN5qPGyBIB/3mUHJZKSFY8wbwYD\nVR0RAQH/BGUwY4Zhc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9hcC9kZWZhdWx0L25zL2RlZmF1bHQvaWRlbnRpdHkv\ndGVzdC1pZGVudGl0eTAKBggqhkjOPQQDAgNHADBEAiB6L+t5bzRrBPhiQYNeA7fF\nUCuLWrdjW4Xbv3SLg0IKMgIgfRC5hEx+DqzQxTCP4sexX3hVWMjKoWmHdwiUcg+K\n/IE=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIFIFkTIL1iUV4O/RpveVHzHs7ZzhSkvYIzbdXDttz9EooAoGCCqGSM49\nAwEHoUQDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9ta/bGT+5\norZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "some-root\nsome-other-root\n" - } - }, - "alpnProtocols": [ - "h2", - "http/1.1" - ] - }, - "requireClientCertificate": true - } - } - }, - { - "filterChainMatch": { - "applicationProtocols": [ - "consul~tcp" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "public_listener", - "cluster": "local_app:tcp" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsParams": {}, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICDjCCAbWgAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDEwlUZXN0IENB\nIDEwHhcNMjMxMDE2MTYxMzI5WhcNMjMxMDE2MTYyMzI5WjAAMFkwEwYHKoZIzj0C\nAQYIKoZIzj0DAQcDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9\nta/bGT+5orZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJaOCAQowggEGMA4GA1UdDwEB\n/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDAYDVR0TAQH/\nBAIwADApBgNVHQ4EIgQg3ogXVz9cqaK2B6xdiJYMa5NtT0KkYv7BA2dR7h9EcwUw\nKwYDVR0jBCQwIoAgq+C1mPlPoGa4lt7sSft1goN5qPGyBIB/3mUHJZKSFY8wbwYD\nVR0RAQH/BGUwY4Zhc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9hcC9kZWZhdWx0L25zL2RlZmF1bHQvaWRlbnRpdHkv\ndGVzdC1pZGVudGl0eTAKBggqhkjOPQQDAgNHADBEAiB6L+t5bzRrBPhiQYNeA7fF\nUCuLWrdjW4Xbv3SLg0IKMgIgfRC5hEx+DqzQxTCP4sexX3hVWMjKoWmHdwiUcg+K\n/IE=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIFIFkTIL1iUV4O/RpveVHzHs7ZzhSkvYIzbdXDttz9EooAoGCCqGSM49\nAwEHoUQDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9ta/bGT+5\norZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "some-root\nsome-other-root\n" - } - } - }, - "requireClientCertificate": true - } - } - } - ], - "listenerFilters": [ - { - "name": "envoy.filters.listener.tls_inspector", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.listener.tls_inspector.v3.TlsInspector" - } - } - ], - "trafficDirection": "INBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "nonce": "00000001" -} \ No newline at end of file diff --git a/agent/xdsv2/testdata/listeners/source/multiple-workload-addresses-without-ports.golden b/agent/xdsv2/testdata/listeners/source/multiple-workload-addresses-without-ports.golden deleted file mode 100644 index 81f3bcca70ffe..0000000000000 --- a/agent/xdsv2/testdata/listeners/source/multiple-workload-addresses-without-ports.golden +++ /dev/null @@ -1,359 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "name": "public_listener", - "address": { - "socketAddress": { - "address": "10.0.0.1", - "portValue": 20000 - } - }, - "filterChains": [ - { - "filterChainMatch": { - "applicationProtocols": [ - "consul~grpc" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.http_connection_manager", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "statPrefix": "public_listener", - "routeConfig": { - "name": "public_listener:grpc", - "virtualHosts": [ - { - "name": "public_listener:grpc", - "domains": [ - "*" - ], - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "local_app:grpc" - } - } - ] - } - ] - }, - "httpFilters": [ - { - "name": "envoy.filters.http.grpc_stats", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.grpc_stats.v3.FilterConfig", - "statsForAllMethods": true - } - }, - { - "name": "envoy.filters.http.grpc_http1_bridge", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.grpc_http1_bridge.v3.Config" - } - }, - { - "name": "envoy.filters.http.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.rbac.v3.RBAC", - "rules": {} - } - }, - { - "name": "envoy.filters.http.router", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" - } - } - ], - "tracing": { - "randomSampling": {} - }, - "http2ProtocolOptions": {}, - "upgradeConfigs": [ - { - "upgradeType": "websocket" - } - ] - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsParams": {}, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICDjCCAbWgAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDEwlUZXN0IENB\nIDEwHhcNMjMxMDE2MTYxMzI5WhcNMjMxMDE2MTYyMzI5WjAAMFkwEwYHKoZIzj0C\nAQYIKoZIzj0DAQcDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9\nta/bGT+5orZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJaOCAQowggEGMA4GA1UdDwEB\n/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDAYDVR0TAQH/\nBAIwADApBgNVHQ4EIgQg3ogXVz9cqaK2B6xdiJYMa5NtT0KkYv7BA2dR7h9EcwUw\nKwYDVR0jBCQwIoAgq+C1mPlPoGa4lt7sSft1goN5qPGyBIB/3mUHJZKSFY8wbwYD\nVR0RAQH/BGUwY4Zhc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9hcC9kZWZhdWx0L25zL2RlZmF1bHQvaWRlbnRpdHkv\ndGVzdC1pZGVudGl0eTAKBggqhkjOPQQDAgNHADBEAiB6L+t5bzRrBPhiQYNeA7fF\nUCuLWrdjW4Xbv3SLg0IKMgIgfRC5hEx+DqzQxTCP4sexX3hVWMjKoWmHdwiUcg+K\n/IE=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIFIFkTIL1iUV4O/RpveVHzHs7ZzhSkvYIzbdXDttz9EooAoGCCqGSM49\nAwEHoUQDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9ta/bGT+5\norZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "some-root\nsome-other-root\n" - } - }, - "alpnProtocols": [ - "h2", - "http/1.1" - ] - }, - "requireClientCertificate": true - } - } - }, - { - "filterChainMatch": { - "applicationProtocols": [ - "consul~http" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.http_connection_manager", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "statPrefix": "public_listener", - "routeConfig": { - "name": "public_listener:http", - "virtualHosts": [ - { - "name": "public_listener:http", - "domains": [ - "*" - ], - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "local_app:http" - } - } - ] - } - ] - }, - "httpFilters": [ - { - "name": "envoy.filters.http.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.rbac.v3.RBAC", - "rules": {} - } - }, - { - "name": "envoy.filters.http.router", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" - } - } - ], - "tracing": { - "randomSampling": {} - }, - "upgradeConfigs": [ - { - "upgradeType": "websocket" - } - ] - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsParams": {}, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICDjCCAbWgAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDEwlUZXN0IENB\nIDEwHhcNMjMxMDE2MTYxMzI5WhcNMjMxMDE2MTYyMzI5WjAAMFkwEwYHKoZIzj0C\nAQYIKoZIzj0DAQcDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9\nta/bGT+5orZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJaOCAQowggEGMA4GA1UdDwEB\n/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDAYDVR0TAQH/\nBAIwADApBgNVHQ4EIgQg3ogXVz9cqaK2B6xdiJYMa5NtT0KkYv7BA2dR7h9EcwUw\nKwYDVR0jBCQwIoAgq+C1mPlPoGa4lt7sSft1goN5qPGyBIB/3mUHJZKSFY8wbwYD\nVR0RAQH/BGUwY4Zhc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9hcC9kZWZhdWx0L25zL2RlZmF1bHQvaWRlbnRpdHkv\ndGVzdC1pZGVudGl0eTAKBggqhkjOPQQDAgNHADBEAiB6L+t5bzRrBPhiQYNeA7fF\nUCuLWrdjW4Xbv3SLg0IKMgIgfRC5hEx+DqzQxTCP4sexX3hVWMjKoWmHdwiUcg+K\n/IE=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIFIFkTIL1iUV4O/RpveVHzHs7ZzhSkvYIzbdXDttz9EooAoGCCqGSM49\nAwEHoUQDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9ta/bGT+5\norZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "some-root\nsome-other-root\n" - } - }, - "alpnProtocols": [ - "http/1.1" - ] - }, - "requireClientCertificate": true - } - } - }, - { - "filterChainMatch": { - "applicationProtocols": [ - "consul~http2" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.http_connection_manager", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "statPrefix": "public_listener", - "routeConfig": { - "name": "public_listener:http2", - "virtualHosts": [ - { - "name": "public_listener:http2", - "domains": [ - "*" - ], - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "local_app:http2" - } - } - ] - } - ] - }, - "httpFilters": [ - { - "name": "envoy.filters.http.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.rbac.v3.RBAC", - "rules": {} - } - }, - { - "name": "envoy.filters.http.router", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" - } - } - ], - "tracing": { - "randomSampling": {} - }, - "http2ProtocolOptions": {}, - "upgradeConfigs": [ - { - "upgradeType": "websocket" - } - ] - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsParams": {}, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICDjCCAbWgAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDEwlUZXN0IENB\nIDEwHhcNMjMxMDE2MTYxMzI5WhcNMjMxMDE2MTYyMzI5WjAAMFkwEwYHKoZIzj0C\nAQYIKoZIzj0DAQcDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9\nta/bGT+5orZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJaOCAQowggEGMA4GA1UdDwEB\n/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDAYDVR0TAQH/\nBAIwADApBgNVHQ4EIgQg3ogXVz9cqaK2B6xdiJYMa5NtT0KkYv7BA2dR7h9EcwUw\nKwYDVR0jBCQwIoAgq+C1mPlPoGa4lt7sSft1goN5qPGyBIB/3mUHJZKSFY8wbwYD\nVR0RAQH/BGUwY4Zhc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9hcC9kZWZhdWx0L25zL2RlZmF1bHQvaWRlbnRpdHkv\ndGVzdC1pZGVudGl0eTAKBggqhkjOPQQDAgNHADBEAiB6L+t5bzRrBPhiQYNeA7fF\nUCuLWrdjW4Xbv3SLg0IKMgIgfRC5hEx+DqzQxTCP4sexX3hVWMjKoWmHdwiUcg+K\n/IE=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIFIFkTIL1iUV4O/RpveVHzHs7ZzhSkvYIzbdXDttz9EooAoGCCqGSM49\nAwEHoUQDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9ta/bGT+5\norZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "some-root\nsome-other-root\n" - } - }, - "alpnProtocols": [ - "h2", - "http/1.1" - ] - }, - "requireClientCertificate": true - } - } - }, - { - "filterChainMatch": { - "applicationProtocols": [ - "consul~tcp" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "public_listener", - "cluster": "local_app:tcp" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsParams": {}, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICDjCCAbWgAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDEwlUZXN0IENB\nIDEwHhcNMjMxMDE2MTYxMzI5WhcNMjMxMDE2MTYyMzI5WjAAMFkwEwYHKoZIzj0C\nAQYIKoZIzj0DAQcDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9\nta/bGT+5orZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJaOCAQowggEGMA4GA1UdDwEB\n/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDAYDVR0TAQH/\nBAIwADApBgNVHQ4EIgQg3ogXVz9cqaK2B6xdiJYMa5NtT0KkYv7BA2dR7h9EcwUw\nKwYDVR0jBCQwIoAgq+C1mPlPoGa4lt7sSft1goN5qPGyBIB/3mUHJZKSFY8wbwYD\nVR0RAQH/BGUwY4Zhc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9hcC9kZWZhdWx0L25zL2RlZmF1bHQvaWRlbnRpdHkv\ndGVzdC1pZGVudGl0eTAKBggqhkjOPQQDAgNHADBEAiB6L+t5bzRrBPhiQYNeA7fF\nUCuLWrdjW4Xbv3SLg0IKMgIgfRC5hEx+DqzQxTCP4sexX3hVWMjKoWmHdwiUcg+K\n/IE=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIFIFkTIL1iUV4O/RpveVHzHs7ZzhSkvYIzbdXDttz9EooAoGCCqGSM49\nAwEHoUQDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9ta/bGT+5\norZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "some-root\nsome-other-root\n" - } - } - }, - "requireClientCertificate": true - } - } - } - ], - "listenerFilters": [ - { - "name": "envoy.filters.listener.tls_inspector", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.listener.tls_inspector.v3.TlsInspector" - } - } - ], - "trafficDirection": "INBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "nonce": "00000001" -} \ No newline at end of file diff --git a/agent/xdsv2/testdata/listeners/source/single-workload-address-without-ports.golden b/agent/xdsv2/testdata/listeners/source/single-workload-address-without-ports.golden deleted file mode 100644 index 81f3bcca70ffe..0000000000000 --- a/agent/xdsv2/testdata/listeners/source/single-workload-address-without-ports.golden +++ /dev/null @@ -1,359 +0,0 @@ -{ - "versionInfo": "00000001", - "resources": [ - { - "@type": "type.googleapis.com/envoy.config.listener.v3.Listener", - "name": "public_listener", - "address": { - "socketAddress": { - "address": "10.0.0.1", - "portValue": 20000 - } - }, - "filterChains": [ - { - "filterChainMatch": { - "applicationProtocols": [ - "consul~grpc" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.http_connection_manager", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "statPrefix": "public_listener", - "routeConfig": { - "name": "public_listener:grpc", - "virtualHosts": [ - { - "name": "public_listener:grpc", - "domains": [ - "*" - ], - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "local_app:grpc" - } - } - ] - } - ] - }, - "httpFilters": [ - { - "name": "envoy.filters.http.grpc_stats", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.grpc_stats.v3.FilterConfig", - "statsForAllMethods": true - } - }, - { - "name": "envoy.filters.http.grpc_http1_bridge", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.grpc_http1_bridge.v3.Config" - } - }, - { - "name": "envoy.filters.http.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.rbac.v3.RBAC", - "rules": {} - } - }, - { - "name": "envoy.filters.http.router", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" - } - } - ], - "tracing": { - "randomSampling": {} - }, - "http2ProtocolOptions": {}, - "upgradeConfigs": [ - { - "upgradeType": "websocket" - } - ] - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsParams": {}, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICDjCCAbWgAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDEwlUZXN0IENB\nIDEwHhcNMjMxMDE2MTYxMzI5WhcNMjMxMDE2MTYyMzI5WjAAMFkwEwYHKoZIzj0C\nAQYIKoZIzj0DAQcDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9\nta/bGT+5orZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJaOCAQowggEGMA4GA1UdDwEB\n/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDAYDVR0TAQH/\nBAIwADApBgNVHQ4EIgQg3ogXVz9cqaK2B6xdiJYMa5NtT0KkYv7BA2dR7h9EcwUw\nKwYDVR0jBCQwIoAgq+C1mPlPoGa4lt7sSft1goN5qPGyBIB/3mUHJZKSFY8wbwYD\nVR0RAQH/BGUwY4Zhc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9hcC9kZWZhdWx0L25zL2RlZmF1bHQvaWRlbnRpdHkv\ndGVzdC1pZGVudGl0eTAKBggqhkjOPQQDAgNHADBEAiB6L+t5bzRrBPhiQYNeA7fF\nUCuLWrdjW4Xbv3SLg0IKMgIgfRC5hEx+DqzQxTCP4sexX3hVWMjKoWmHdwiUcg+K\n/IE=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIFIFkTIL1iUV4O/RpveVHzHs7ZzhSkvYIzbdXDttz9EooAoGCCqGSM49\nAwEHoUQDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9ta/bGT+5\norZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "some-root\nsome-other-root\n" - } - }, - "alpnProtocols": [ - "h2", - "http/1.1" - ] - }, - "requireClientCertificate": true - } - } - }, - { - "filterChainMatch": { - "applicationProtocols": [ - "consul~http" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.http_connection_manager", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "statPrefix": "public_listener", - "routeConfig": { - "name": "public_listener:http", - "virtualHosts": [ - { - "name": "public_listener:http", - "domains": [ - "*" - ], - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "local_app:http" - } - } - ] - } - ] - }, - "httpFilters": [ - { - "name": "envoy.filters.http.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.rbac.v3.RBAC", - "rules": {} - } - }, - { - "name": "envoy.filters.http.router", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" - } - } - ], - "tracing": { - "randomSampling": {} - }, - "upgradeConfigs": [ - { - "upgradeType": "websocket" - } - ] - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsParams": {}, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICDjCCAbWgAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDEwlUZXN0IENB\nIDEwHhcNMjMxMDE2MTYxMzI5WhcNMjMxMDE2MTYyMzI5WjAAMFkwEwYHKoZIzj0C\nAQYIKoZIzj0DAQcDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9\nta/bGT+5orZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJaOCAQowggEGMA4GA1UdDwEB\n/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDAYDVR0TAQH/\nBAIwADApBgNVHQ4EIgQg3ogXVz9cqaK2B6xdiJYMa5NtT0KkYv7BA2dR7h9EcwUw\nKwYDVR0jBCQwIoAgq+C1mPlPoGa4lt7sSft1goN5qPGyBIB/3mUHJZKSFY8wbwYD\nVR0RAQH/BGUwY4Zhc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9hcC9kZWZhdWx0L25zL2RlZmF1bHQvaWRlbnRpdHkv\ndGVzdC1pZGVudGl0eTAKBggqhkjOPQQDAgNHADBEAiB6L+t5bzRrBPhiQYNeA7fF\nUCuLWrdjW4Xbv3SLg0IKMgIgfRC5hEx+DqzQxTCP4sexX3hVWMjKoWmHdwiUcg+K\n/IE=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIFIFkTIL1iUV4O/RpveVHzHs7ZzhSkvYIzbdXDttz9EooAoGCCqGSM49\nAwEHoUQDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9ta/bGT+5\norZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "some-root\nsome-other-root\n" - } - }, - "alpnProtocols": [ - "http/1.1" - ] - }, - "requireClientCertificate": true - } - } - }, - { - "filterChainMatch": { - "applicationProtocols": [ - "consul~http2" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.http_connection_manager", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager", - "statPrefix": "public_listener", - "routeConfig": { - "name": "public_listener:http2", - "virtualHosts": [ - { - "name": "public_listener:http2", - "domains": [ - "*" - ], - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "local_app:http2" - } - } - ] - } - ] - }, - "httpFilters": [ - { - "name": "envoy.filters.http.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.rbac.v3.RBAC", - "rules": {} - } - }, - { - "name": "envoy.filters.http.router", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router" - } - } - ], - "tracing": { - "randomSampling": {} - }, - "http2ProtocolOptions": {}, - "upgradeConfigs": [ - { - "upgradeType": "websocket" - } - ] - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsParams": {}, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICDjCCAbWgAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDEwlUZXN0IENB\nIDEwHhcNMjMxMDE2MTYxMzI5WhcNMjMxMDE2MTYyMzI5WjAAMFkwEwYHKoZIzj0C\nAQYIKoZIzj0DAQcDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9\nta/bGT+5orZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJaOCAQowggEGMA4GA1UdDwEB\n/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDAYDVR0TAQH/\nBAIwADApBgNVHQ4EIgQg3ogXVz9cqaK2B6xdiJYMa5NtT0KkYv7BA2dR7h9EcwUw\nKwYDVR0jBCQwIoAgq+C1mPlPoGa4lt7sSft1goN5qPGyBIB/3mUHJZKSFY8wbwYD\nVR0RAQH/BGUwY4Zhc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9hcC9kZWZhdWx0L25zL2RlZmF1bHQvaWRlbnRpdHkv\ndGVzdC1pZGVudGl0eTAKBggqhkjOPQQDAgNHADBEAiB6L+t5bzRrBPhiQYNeA7fF\nUCuLWrdjW4Xbv3SLg0IKMgIgfRC5hEx+DqzQxTCP4sexX3hVWMjKoWmHdwiUcg+K\n/IE=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIFIFkTIL1iUV4O/RpveVHzHs7ZzhSkvYIzbdXDttz9EooAoGCCqGSM49\nAwEHoUQDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9ta/bGT+5\norZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "some-root\nsome-other-root\n" - } - }, - "alpnProtocols": [ - "h2", - "http/1.1" - ] - }, - "requireClientCertificate": true - } - } - }, - { - "filterChainMatch": { - "applicationProtocols": [ - "consul~tcp" - ] - }, - "filters": [ - { - "name": "envoy.filters.network.rbac", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC", - "rules": {}, - "statPrefix": "connect_authz" - } - }, - { - "name": "envoy.filters.network.tcp_proxy", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy", - "statPrefix": "public_listener", - "cluster": "local_app:tcp" - } - } - ], - "transportSocket": { - "name": "tls", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext", - "commonTlsContext": { - "tlsParams": {}, - "tlsCertificates": [ - { - "certificateChain": { - "inlineString": "-----BEGIN CERTIFICATE-----\nMIICDjCCAbWgAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDEwlUZXN0IENB\nIDEwHhcNMjMxMDE2MTYxMzI5WhcNMjMxMDE2MTYyMzI5WjAAMFkwEwYHKoZIzj0C\nAQYIKoZIzj0DAQcDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9\nta/bGT+5orZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJaOCAQowggEGMA4GA1UdDwEB\n/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDAYDVR0TAQH/\nBAIwADApBgNVHQ4EIgQg3ogXVz9cqaK2B6xdiJYMa5NtT0KkYv7BA2dR7h9EcwUw\nKwYDVR0jBCQwIoAgq+C1mPlPoGa4lt7sSft1goN5qPGyBIB/3mUHJZKSFY8wbwYD\nVR0RAQH/BGUwY4Zhc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9hcC9kZWZhdWx0L25zL2RlZmF1bHQvaWRlbnRpdHkv\ndGVzdC1pZGVudGl0eTAKBggqhkjOPQQDAgNHADBEAiB6L+t5bzRrBPhiQYNeA7fF\nUCuLWrdjW4Xbv3SLg0IKMgIgfRC5hEx+DqzQxTCP4sexX3hVWMjKoWmHdwiUcg+K\n/IE=\n-----END CERTIFICATE-----\n" - }, - "privateKey": { - "inlineString": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIFIFkTIL1iUV4O/RpveVHzHs7ZzhSkvYIzbdXDttz9EooAoGCCqGSM49\nAwEHoUQDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9ta/bGT+5\norZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJQ==\n-----END EC PRIVATE KEY-----\n" - } - } - ], - "validationContext": { - "trustedCa": { - "inlineString": "some-root\nsome-other-root\n" - } - } - }, - "requireClientCertificate": true - } - } - } - ], - "listenerFilters": [ - { - "name": "envoy.filters.listener.tls_inspector", - "typedConfig": { - "@type": "type.googleapis.com/envoy.extensions.filters.listener.tls_inspector.v3.TlsInspector" - } - } - ], - "trafficDirection": "INBOUND" - } - ], - "typeUrl": "type.googleapis.com/envoy.config.listener.v3.Listener", - "nonce": "00000001" -} \ No newline at end of file diff --git a/agent/xdsv2/testdata/routes/source/multiple-workload-addresses-with-specific-ports.golden b/agent/xdsv2/testdata/routes/source/l4-multiple-workload-addresses-with-specific-ports.golden similarity index 100% rename from agent/xdsv2/testdata/routes/source/multiple-workload-addresses-with-specific-ports.golden rename to agent/xdsv2/testdata/routes/source/l4-multiple-workload-addresses-with-specific-ports.golden diff --git a/agent/xdsv2/testdata/routes/source/multiple-workload-addresses-without-ports.golden b/agent/xdsv2/testdata/routes/source/l4-multiple-workload-addresses-without-ports.golden similarity index 100% rename from agent/xdsv2/testdata/routes/source/multiple-workload-addresses-without-ports.golden rename to agent/xdsv2/testdata/routes/source/l4-multiple-workload-addresses-without-ports.golden diff --git a/agent/xdsv2/testdata/routes/source/single-workload-address-without-ports.golden b/agent/xdsv2/testdata/routes/source/l4-single-workload-address-without-ports.golden similarity index 100% rename from agent/xdsv2/testdata/routes/source/single-workload-address-without-ports.golden rename to agent/xdsv2/testdata/routes/source/l4-single-workload-address-without-ports.golden diff --git a/agent/xdsv2/testdata/routes/source/l7-expose-paths.golden b/agent/xdsv2/testdata/routes/source/l7-expose-paths.golden index 306f5220e7b9c..68b5239aec9ed 100644 --- a/agent/xdsv2/testdata/routes/source/l7-expose-paths.golden +++ b/agent/xdsv2/testdata/routes/source/l7-expose-paths.golden @@ -1,5 +1,53 @@ { "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", + "name": "exposed_path_route_GetHealth1235", + "virtualHosts": [ + { + "name": "exposed_path_route_GetHealth1235", + "domains": [ + "*" + ], + "routes": [ + { + "match": { + "path": "GetHealth" + }, + "route": { + "cluster": "exposed_cluster_9091" + } + } + ] + } + ], + "validateClusters": true + }, + { + "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", + "name": "exposed_path_route_health1234", + "virtualHosts": [ + { + "name": "exposed_path_route_health1234", + "domains": [ + "*" + ], + "routes": [ + { + "match": { + "path": "/health" + }, + "route": { + "cluster": "exposed_cluster_9090" + } + } + ] + } + ], + "validateClusters": true + } + ], "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", "nonce": "00000001" } \ No newline at end of file diff --git a/agent/xdsv2/testdata/routes/source/local-and-inbound-connections.golden b/agent/xdsv2/testdata/routes/source/local-and-inbound-connections.golden index 306f5220e7b9c..97c96f44bb629 100644 --- a/agent/xdsv2/testdata/routes/source/local-and-inbound-connections.golden +++ b/agent/xdsv2/testdata/routes/source/local-and-inbound-connections.golden @@ -1,5 +1,77 @@ { "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", + "name": "exposed_path_route_GetHealth1235", + "virtualHosts": [ + { + "name": "exposed_path_route_GetHealth1235", + "domains": [ + "*" + ], + "routes": [ + { + "match": { + "path": "GetHealth" + }, + "route": { + "cluster": "exposed_cluster_9091" + } + } + ] + } + ], + "validateClusters": true + }, + { + "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", + "name": "exposed_path_route_health1234", + "virtualHosts": [ + { + "name": "exposed_path_route_health1234", + "domains": [ + "*" + ], + "routes": [ + { + "match": { + "path": "/health" + }, + "route": { + "cluster": "exposed_cluster_9090" + } + } + ] + } + ], + "validateClusters": true + }, + { + "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", + "name": "public_listener:port3", + "virtualHosts": [ + { + "name": "public_listener:port3", + "domains": [ + "*" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "local_app:port3", + "timeout": "9s" + } + } + ] + } + ], + "validateClusters": true + } + ], "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", "nonce": "00000001" } \ No newline at end of file diff --git a/agent/xdsv2/testdata/routes/source/multiport-l7-multiple-workload-addresses-with-specific-ports.golden b/agent/xdsv2/testdata/routes/source/multiport-l7-multiple-workload-addresses-with-specific-ports.golden index 306f5220e7b9c..3b1a61403ba7d 100644 --- a/agent/xdsv2/testdata/routes/source/multiport-l7-multiple-workload-addresses-with-specific-ports.golden +++ b/agent/xdsv2/testdata/routes/source/multiport-l7-multiple-workload-addresses-with-specific-ports.golden @@ -1,5 +1,53 @@ { "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", + "name": "public_listener:admin-port", + "virtualHosts": [ + { + "name": "public_listener:admin-port", + "domains": [ + "*" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "local_app:admin-port" + } + } + ] + } + ], + "validateClusters": true + }, + { + "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", + "name": "public_listener:api-port", + "virtualHosts": [ + { + "name": "public_listener:api-port", + "domains": [ + "*" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "local_app:api-port" + } + } + ] + } + ], + "validateClusters": true + } + ], "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", "nonce": "00000001" } \ No newline at end of file diff --git a/agent/xdsv2/testdata/routes/source/multiport-l7-multiple-workload-addresses-without-ports.golden b/agent/xdsv2/testdata/routes/source/multiport-l7-multiple-workload-addresses-without-ports.golden index 306f5220e7b9c..7f976890c64b0 100644 --- a/agent/xdsv2/testdata/routes/source/multiport-l7-multiple-workload-addresses-without-ports.golden +++ b/agent/xdsv2/testdata/routes/source/multiport-l7-multiple-workload-addresses-without-ports.golden @@ -1,5 +1,76 @@ { "versionInfo": "00000001", + "resources": [ + { + "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", + "name": "public_listener:admin-port", + "virtualHosts": [ + { + "name": "public_listener:admin-port", + "domains": [ + "*" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "local_app:admin-port" + } + } + ] + } + ], + "validateClusters": true + }, + { + "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", + "name": "public_listener:api-port", + "virtualHosts": [ + { + "name": "public_listener:api-port", + "domains": [ + "*" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "local_app:api-port" + } + } + ] + } + ], + "validateClusters": true + }, + { + "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", + "name": "public_listener:grpc-port", + "virtualHosts": [ + { + "name": "public_listener:grpc-port", + "domains": [ + "*" + ], + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "local_app:grpc-port" + } + } + ] + } + ], + "validateClusters": true + } + ], "typeUrl": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", "nonce": "00000001" } \ No newline at end of file diff --git a/api/acl.go b/api/acl.go index e40ae1cd49cf6..f95e597af48ca 100644 --- a/api/acl.go +++ b/api/acl.go @@ -26,6 +26,8 @@ const ( ACLTemplatedPolicyDNSName = "builtin/dns" ACLTemplatedPolicyNomadServerName = "builtin/nomad-server" ACLTemplatedPolicyWorkloadIdentityName = "builtin/workload-identity" + ACLTemplatedPolicyAPIGatewayName = "builtin/api-gateway" + ACLTemplatedPolicyNomadClientName = "builtin/nomad-client" ) type ACLLink struct { @@ -172,6 +174,7 @@ type ACLTemplatedPolicyResponse struct { TemplateName string Schema string Template string + Description string } type ACLTemplatedPolicyVariables struct { @@ -253,9 +256,6 @@ const ( // BindingRuleBindTypeNode binds to a node identity with given name. BindingRuleBindTypeNode BindingRuleBindType = "node" - // BindingRuleBindTypePolicy binds to a specific policy with given name. - BindingRuleBindTypePolicy BindingRuleBindType = "policy" - // BindingRuleBindTypeTemplatedPolicy binds to a templated policy with given template name and variables. BindingRuleBindTypeTemplatedPolicy BindingRuleBindType = "templated-policy" ) diff --git a/build-support/scripts/devtools.sh b/build-support/scripts/devtools.sh index 15e9401d7f781..e3f6d154520b5 100755 --- a/build-support/scripts/devtools.sh +++ b/build-support/scripts/devtools.sh @@ -25,7 +25,6 @@ Options: -protobuf Just install tools for protobuf. -lint Just install tools for linting. -codegen Just install tools for codegen. - -pre-commit Just install pre-commit. -h | --help Print this help text. EOF } @@ -52,10 +51,6 @@ function main { codegen_install return 0 ;; - -pre-commit ) - pre_commit_install - return 0 - ;; -h | --help ) usage return 0 @@ -141,15 +136,16 @@ function proto_tools_install { } function lint_install { + local lint_consul_retry_version + lint_consul_retry_version="$(make --no-print-directory print-LINT_CONSUL_RETRY_VERSION)" local golangci_lint_version golangci_lint_version="$(make --no-print-directory print-GOLANGCI_LINT_VERSION)" - local gci_version - gci_version="$(make --no-print-directory print-GCI_VERSION)" - - install_unversioned_tool \ + install_versioned_tool \ 'lint-consul-retry' \ - 'github.com/hashicorp/lint-consul-retry@master' + 'github.com/hashicorp/lint-consul-retry' \ + "${lint_consul_retry_version}" \ + 'github.com/hashicorp/lint-consul-retry' install_unversioned_tool \ 'enumcover' \ @@ -160,12 +156,6 @@ function lint_install { 'github.com/golangci/golangci-lint' \ "${golangci_lint_version}" \ 'github.com/golangci/golangci-lint/cmd/golangci-lint' - - install_versioned_tool \ - 'gci' \ - 'github.com/daixiang0/gci' \ - "${gci_version}" \ - 'github.com/daixiang0/gci' } function codegen_install { @@ -195,50 +185,11 @@ function copywrite_install { 'github.com/hashicorp/copywrite' } -function pre_commit_install { - # if already installed make sure the hook is also installed - if command -v "pre-commit" &>/dev/null; then - # Not to be confused with installing the tool, this installs - # the git hook locally (.git/hooks/pre-commit) which pre-commit - # uses as a vector to run checks on `git commit`. This hook is - # generated based on the local environment hence not source - # controlled. - pre-commit install - return 0 - fi - - # Install options based on https://pre-commit.com/#installation - if command -v "brew" &>/dev/null; then - brew install pre-commit && pre-commit install - return 0 - fi - - # Try python regardless of platform (mac, linux, etc) - if command -v "pip3" &>/dev/null; then - pip3 install pre-commit && pre-commit install - return 0 - fi - - # Can't disappoint the linux/debian folks - if command -v "apt" &>/dev/null; then - sudo apt-get install -yq pre-commit && pre-commit install - return 0 - fi - - if [[ "$(uname)" == "Darwin" ]]; then - echo "ERROR: Install homebrew from https://brew.sh/ so that pre-commit (https://pre-commit.com) can be installed." - return 1 - fi - - echo "ERROR: Install python3 and pip3 so that pre-commit (https://pre-commit.com) can be installed." - return 1 -} - function tools_install { + lint_install proto_tools_install codegen_install - pre_commit_install copywrite_install return 0 diff --git a/command/acl/bindingrule/create/bindingrule_create.go b/command/acl/bindingrule/create/bindingrule_create.go index 0b09a5eb2f0cc..ab6a16f3ed5c3 100644 --- a/command/acl/bindingrule/create/bindingrule_create.go +++ b/command/acl/bindingrule/create/bindingrule_create.go @@ -73,7 +73,7 @@ func (c *cmd) init() { &c.bindType, "bind-type", string(api.BindingRuleBindTypeService), - "Type of binding to perform (\"service\", \"role\", \"node\", \"policy\", or \"templated-policy\").", + "Type of binding to perform (\"service\", \"role\", \"node\" or \"templated-policy\").", ) c.flags.Var( (*flags.FlagMapValue)(&c.bindVars), diff --git a/command/acl/bindingrule/update/bindingrule_update.go b/command/acl/bindingrule/update/bindingrule_update.go index 40c03cab546e6..ce7006748728d 100644 --- a/command/acl/bindingrule/update/bindingrule_update.go +++ b/command/acl/bindingrule/update/bindingrule_update.go @@ -77,7 +77,7 @@ func (c *cmd) init() { &c.bindType, "bind-type", string(api.BindingRuleBindTypeService), - "Type of binding to perform (\"service\", \"policy\", or \"role\").", + "Type of binding to perform (\"service\" or \"role\").", ) c.flags.StringVar( &c.bindName, diff --git a/command/acl/bindingrule/update/bindingrule_update_test.go b/command/acl/bindingrule/update/bindingrule_update_test.go index c873aadcb4898..1bbcd35cc25d9 100644 --- a/command/acl/bindingrule/update/bindingrule_update_test.go +++ b/command/acl/bindingrule/update/bindingrule_update_test.go @@ -242,39 +242,6 @@ func TestBindingRuleUpdateCommand(t *testing.T) { require.Equal(t, "serviceaccount.namespace==alt and serviceaccount.name==demo", rule.Selector) }) - t.Run("update all fields with policy", func(t *testing.T) { - id := createRule(t, false) - - ui := cli.NewMockUi() - cmd := New(ui) - - args := []string{ - "-http-addr=" + a.HTTPAddr(), - "-token=root", - "-id", id, - "-description=test rule edited", - "-bind-type", "policy", - "-bind-name=policy-updated", - "-selector=serviceaccount.namespace==alt and serviceaccount.name==demo", - } - - code := cmd.Run(args) - require.Equal(t, code, 0, "err: %s", ui.ErrorWriter.String()) - require.Empty(t, ui.ErrorWriter.String()) - - rule, _, err := client.ACL().BindingRuleRead( - id, - &api.QueryOptions{Token: "root"}, - ) - require.NoError(t, err) - require.NotNil(t, rule) - - require.Equal(t, "test rule edited", rule.Description) - require.Equal(t, "policy-updated", rule.BindName) - require.Equal(t, api.BindingRuleBindTypePolicy, rule.BindType) - require.Equal(t, "serviceaccount.namespace==alt and serviceaccount.name==demo", rule.Selector) - }) - t.Run("update all fields with templated policy", func(t *testing.T) { id := createRule(t, false) diff --git a/command/acl/templatedpolicy/formatter.go b/command/acl/templatedpolicy/formatter.go index dec8378bcc5fd..19f279a9faeb1 100644 --- a/command/acl/templatedpolicy/formatter.go +++ b/command/acl/templatedpolicy/formatter.go @@ -65,18 +65,19 @@ func (f *prettyFormatter) FormatTemplatedPolicy(templatedPolicy api.ACLTemplated var buffer bytes.Buffer buffer.WriteString(fmt.Sprintf("Name: %s\n", templatedPolicy.TemplateName)) + buffer.WriteString(fmt.Sprintf("Description: %s\n", templatedPolicy.Description)) buffer.WriteString("Input variables:") switch templatedPolicy.TemplateName { case api.ACLTemplatedPolicyServiceName: - buffer.WriteString(fmt.Sprintf("\n%sName: String - Required - The name of the service.\n", WhitespaceIndent)) - buffer.WriteString("Example usage:\n") - buffer.WriteString(WhitespaceIndent + "consul acl token create -templated-policy builtin/service -var name:api\n") + nameRequiredVariableOutput(&buffer, templatedPolicy.TemplateName, "The name of the service", "api") case api.ACLTemplatedPolicyNodeName: - buffer.WriteString(fmt.Sprintf("\n%sName: String - Required - The node name.\n", WhitespaceIndent)) - buffer.WriteString("Example usage:\n") - buffer.WriteString(fmt.Sprintf("%sconsul acl token create -templated-policy builtin/node -var name:node-1\n", WhitespaceIndent)) - case api.ACLTemplatedPolicyDNSName, api.ACLTemplatedPolicyNomadServerName: + nameRequiredVariableOutput(&buffer, templatedPolicy.TemplateName, "The node name", "node-1") + case api.ACLTemplatedPolicyWorkloadIdentityName: + nameRequiredVariableOutput(&buffer, templatedPolicy.TemplateName, "The workload name", "api") + case api.ACLTemplatedPolicyAPIGatewayName: + nameRequiredVariableOutput(&buffer, templatedPolicy.TemplateName, "The api gateway service name", "api-gateway") + case api.ACLTemplatedPolicyDNSName, api.ACLTemplatedPolicyNomadServerName, api.ACLTemplatedPolicyNomadClientName: noRequiredVariablesOutput(&buffer, templatedPolicy.TemplateName) default: buffer.WriteString(" None\n") @@ -98,6 +99,12 @@ func noRequiredVariablesOutput(buffer *bytes.Buffer, templateName string) { buffer.WriteString(fmt.Sprintf("%sconsul acl token create -templated-policy %s\n", WhitespaceIndent, templateName)) } +func nameRequiredVariableOutput(buffer *bytes.Buffer, templateName, description, exampleName string) { + buffer.WriteString(fmt.Sprintf("\n%sName: String - Required - %s.\n", WhitespaceIndent, description)) + buffer.WriteString("Example usage:\n") + buffer.WriteString(fmt.Sprintf("%sconsul acl token create -templated-policy %s -var name:%s\n", WhitespaceIndent, templateName, exampleName)) +} + func (f *prettyFormatter) FormatTemplatedPolicyList(policies map[string]api.ACLTemplatedPolicyResponse) (string, error) { var buffer bytes.Buffer diff --git a/command/acl/templatedpolicy/formatter_test.go b/command/acl/templatedpolicy/formatter_test.go index aa00854980b45..fe2e11d8fd077 100644 --- a/command/acl/templatedpolicy/formatter_test.go +++ b/command/acl/templatedpolicy/formatter_test.go @@ -37,6 +37,7 @@ func testFormatTemplatedPolicy(t *testing.T, dirPath string) { TemplateName: api.ACLTemplatedPolicyNodeName, Schema: structs.ACLTemplatedPolicyNodeSchema, Template: structs.ACLTemplatedPolicyNode, + Description: structs.ACLTemplatedPolicyNodeDescription, }, }, "dns-templated-policy": { @@ -44,6 +45,7 @@ func testFormatTemplatedPolicy(t *testing.T, dirPath string) { TemplateName: api.ACLTemplatedPolicyDNSName, Schema: structs.ACLTemplatedPolicyNoRequiredVariablesSchema, Template: structs.ACLTemplatedPolicyDNS, + Description: structs.ACLTemplatedPolicyDNSDescription, }, }, "service-templated-policy": { @@ -51,6 +53,7 @@ func testFormatTemplatedPolicy(t *testing.T, dirPath string) { TemplateName: api.ACLTemplatedPolicyServiceName, Schema: structs.ACLTemplatedPolicyServiceSchema, Template: structs.ACLTemplatedPolicyService, + Description: structs.ACLTemplatedPolicyServiceDescription, }, }, "nomad-server-templated-policy": { @@ -58,6 +61,15 @@ func testFormatTemplatedPolicy(t *testing.T, dirPath string) { TemplateName: api.ACLTemplatedPolicyNomadServerName, Schema: structs.ACLTemplatedPolicyNoRequiredVariablesSchema, Template: structs.ACLTemplatedPolicyNomadServer, + Description: structs.ACLTemplatedPolicyNomadServerDescription, + }, + }, + "nomad-client-templated-policy": { + templatedPolicy: api.ACLTemplatedPolicyResponse{ + TemplateName: api.ACLTemplatedPolicyNomadClientName, + Schema: structs.ACLTemplatedPolicyNoRequiredVariablesSchema, + Template: structs.ACLTemplatedPolicyNomadClient, + Description: structs.ACLTemplatedPolicyNomadClientDescription, }, }, } @@ -98,16 +110,19 @@ func testFormatTemplatedPolicyList(t *testing.T, dirPath string) { TemplateName: api.ACLTemplatedPolicyNodeName, Schema: structs.ACLTemplatedPolicyNodeSchema, Template: structs.ACLTemplatedPolicyNode, + Description: structs.ACLTemplatedPolicyNodeDescription, }, "builtin/dns": { TemplateName: api.ACLTemplatedPolicyDNSName, Schema: structs.ACLTemplatedPolicyNoRequiredVariablesSchema, Template: structs.ACLTemplatedPolicyDNS, + Description: structs.ACLTemplatedPolicyDNSDescription, }, "builtin/service": { TemplateName: api.ACLTemplatedPolicyServiceName, Schema: structs.ACLTemplatedPolicyServiceSchema, Template: structs.ACLTemplatedPolicyService, + Description: structs.ACLTemplatedPolicyServiceDescription, }, } diff --git a/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/dns-templated-policy.json.golden b/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/dns-templated-policy.json.golden index 36682729f1cb5..98073893df795 100644 --- a/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/dns-templated-policy.json.golden +++ b/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/dns-templated-policy.json.golden @@ -1,5 +1,6 @@ { "TemplateName": "builtin/dns", "Schema": "", - "Template": "\nnode_prefix \"\" {\n\tpolicy = \"read\"\n}\nservice_prefix \"\" {\n\tpolicy = \"read\"\n}\nquery_prefix \"\" {\n\tpolicy = \"read\"\n}" + "Template": "\nnode_prefix \"\" {\n\tpolicy = \"read\"\n}\nservice_prefix \"\" {\n\tpolicy = \"read\"\n}\nquery_prefix \"\" {\n\tpolicy = \"read\"\n}", + "Description": "Gives the token or role permissions for the Consul DNS to query services in the network." } \ No newline at end of file diff --git a/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/dns-templated-policy.pretty-meta.golden b/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/dns-templated-policy.pretty-meta.golden index a30a0c5355470..f296c9b578e76 100644 --- a/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/dns-templated-policy.pretty-meta.golden +++ b/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/dns-templated-policy.pretty-meta.golden @@ -1,4 +1,5 @@ Name: builtin/dns +Description: Gives the token or role permissions for the Consul DNS to query services in the network. Input variables: None Example usage: consul acl token create -templated-policy builtin/dns diff --git a/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/dns-templated-policy.pretty.golden b/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/dns-templated-policy.pretty.golden index f52cfdfe1dfcf..26afd29a4fd4b 100644 --- a/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/dns-templated-policy.pretty.golden +++ b/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/dns-templated-policy.pretty.golden @@ -1,4 +1,5 @@ Name: builtin/dns +Description: Gives the token or role permissions for the Consul DNS to query services in the network. Input variables: None Example usage: consul acl token create -templated-policy builtin/dns diff --git a/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/node-templated-policy.json.golden b/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/node-templated-policy.json.golden index 22981af04666d..3fd3b495fe13d 100644 --- a/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/node-templated-policy.json.golden +++ b/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/node-templated-policy.json.golden @@ -1,5 +1,6 @@ { "TemplateName": "builtin/node", "Schema": "{\n\t\"type\": \"object\",\n\t\"properties\": {\n\t\t\"name\": { \"type\": \"string\", \"$ref\": \"#/definitions/min-length-one\" }\n\t},\n\t\"required\": [\"name\"],\n\t\"definitions\": {\n\t\t\"min-length-one\": {\n\t\t\t\t\"type\": \"string\",\n\t\t\t\t\"minLength\": 1\n\t\t}\n\t}\n}", - "Template": "\nnode \"{{.Name}}\" {\n\tpolicy = \"write\"\n}\nservice_prefix \"\" {\n\tpolicy = \"read\"\n}" + "Template": "\nnode \"{{.Name}}\" {\n\tpolicy = \"write\"\n}\nservice_prefix \"\" {\n\tpolicy = \"read\"\n}", + "Description": "Gives the token or role permissions for a register an agent/node into the catalog. A node is typically a consul agent but can also be a physical server, cloud instance or a container." } \ No newline at end of file diff --git a/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/node-templated-policy.pretty-meta.golden b/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/node-templated-policy.pretty-meta.golden index fda0d9559e37d..1066fae0485a8 100644 --- a/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/node-templated-policy.pretty-meta.golden +++ b/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/node-templated-policy.pretty-meta.golden @@ -1,4 +1,5 @@ Name: builtin/node +Description: Gives the token or role permissions for a register an agent/node into the catalog. A node is typically a consul agent but can also be a physical server, cloud instance or a container. Input variables: Name: String - Required - The node name. Example usage: diff --git a/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/node-templated-policy.pretty.golden b/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/node-templated-policy.pretty.golden index a923087028c01..099cb31064946 100644 --- a/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/node-templated-policy.pretty.golden +++ b/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/node-templated-policy.pretty.golden @@ -1,4 +1,5 @@ Name: builtin/node +Description: Gives the token or role permissions for a register an agent/node into the catalog. A node is typically a consul agent but can also be a physical server, cloud instance or a container. Input variables: Name: String - Required - The node name. Example usage: diff --git a/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/nomad-client-templated-policy.json.golden b/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/nomad-client-templated-policy.json.golden new file mode 100644 index 0000000000000..00d361fac806a --- /dev/null +++ b/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/nomad-client-templated-policy.json.golden @@ -0,0 +1,6 @@ +{ + "TemplateName": "builtin/nomad-client", + "Schema": "", + "Template": "agent_prefix \"\" {\n policy = \"read\"\n}\nnode_prefix \"\" {\n policy = \"read\"\n}\nservice_prefix \"\" {\n policy = \"write\"\n}\nkey_prefix \"\" {\n policy = \"read\"\n}", + "Description": "Gives the token or role permissions required for integration with a nomad client." +} \ No newline at end of file diff --git a/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/nomad-client-templated-policy.pretty-meta.golden b/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/nomad-client-templated-policy.pretty-meta.golden new file mode 100644 index 0000000000000..bb8053bcc2297 --- /dev/null +++ b/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/nomad-client-templated-policy.pretty-meta.golden @@ -0,0 +1,18 @@ +Name: builtin/nomad-client +Description: Gives the token or role permissions required for integration with a nomad client. +Input variables: None +Example usage: + consul acl token create -templated-policy builtin/nomad-client +Raw Template: +agent_prefix "" { + policy = "read" +} +node_prefix "" { + policy = "read" +} +service_prefix "" { + policy = "write" +} +key_prefix "" { + policy = "read" +} diff --git a/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/nomad-client-templated-policy.pretty.golden b/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/nomad-client-templated-policy.pretty.golden new file mode 100644 index 0000000000000..6dd152d4985c9 --- /dev/null +++ b/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/nomad-client-templated-policy.pretty.golden @@ -0,0 +1,5 @@ +Name: builtin/nomad-client +Description: Gives the token or role permissions required for integration with a nomad client. +Input variables: None +Example usage: + consul acl token create -templated-policy builtin/nomad-client diff --git a/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/nomad-server-templated-policy.json.golden b/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/nomad-server-templated-policy.json.golden index 7c9981e7f8c95..871b26dac3494 100644 --- a/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/nomad-server-templated-policy.json.golden +++ b/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/nomad-server-templated-policy.json.golden @@ -1,5 +1,6 @@ { "TemplateName": "builtin/nomad-server", "Schema": "", - "Template": "\nacl = \"write\"\nagent_prefix \"\" {\n policy = \"read\"\n}\nnode_prefix \"\" {\n policy = \"read\"\n}\nservice_prefix \"\" {\n policy = \"write\"\n}" + "Template": "\nacl = \"write\"\nagent_prefix \"\" {\n policy = \"read\"\n}\nnode_prefix \"\" {\n policy = \"read\"\n}\nservice_prefix \"\" {\n policy = \"write\"\n}", + "Description": "Gives the token or role permissions required for integration with a nomad server." } \ No newline at end of file diff --git a/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/nomad-server-templated-policy.pretty-meta.golden b/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/nomad-server-templated-policy.pretty-meta.golden index be000cce1d5c4..60c1961151802 100644 --- a/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/nomad-server-templated-policy.pretty-meta.golden +++ b/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/nomad-server-templated-policy.pretty-meta.golden @@ -1,4 +1,5 @@ Name: builtin/nomad-server +Description: Gives the token or role permissions required for integration with a nomad server. Input variables: None Example usage: consul acl token create -templated-policy builtin/nomad-server diff --git a/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/nomad-server-templated-policy.pretty.golden b/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/nomad-server-templated-policy.pretty.golden index d4943665e78b2..e65d016320a66 100644 --- a/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/nomad-server-templated-policy.pretty.golden +++ b/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/nomad-server-templated-policy.pretty.golden @@ -1,4 +1,5 @@ Name: builtin/nomad-server +Description: Gives the token or role permissions required for integration with a nomad server. Input variables: None Example usage: consul acl token create -templated-policy builtin/nomad-server diff --git a/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/service-templated-policy.json.golden b/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/service-templated-policy.json.golden index e4b71de9b8407..0cd714893ed84 100644 --- a/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/service-templated-policy.json.golden +++ b/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/service-templated-policy.json.golden @@ -1,5 +1,6 @@ { "TemplateName": "builtin/service", "Schema": "{\n\t\"type\": \"object\",\n\t\"properties\": {\n\t\t\"name\": { \"type\": \"string\", \"$ref\": \"#/definitions/min-length-one\" }\n\t},\n\t\"required\": [\"name\"],\n\t\"definitions\": {\n\t\t\"min-length-one\": {\n\t\t\t\t\"type\": \"string\",\n\t\t\t\t\"minLength\": 1\n\t\t}\n\t}\n}", - "Template": "\nservice \"{{.Name}}\" {\n\tpolicy = \"write\"\n}\nservice \"{{.Name}}-sidecar-proxy\" {\n\tpolicy = \"write\"\n}\nservice_prefix \"\" {\n\tpolicy = \"read\"\n}\nnode_prefix \"\" {\n\tpolicy = \"read\"\n}" + "Template": "\nservice \"{{.Name}}\" {\n\tpolicy = \"write\"\n}\nservice \"{{.Name}}-sidecar-proxy\" {\n\tpolicy = \"write\"\n}\nservice_prefix \"\" {\n\tpolicy = \"read\"\n}\nnode_prefix \"\" {\n\tpolicy = \"read\"\n}", + "Description": "Gives the token or role permissions to register a service and discover services in the Consul catalog. It also gives the specified service's sidecar proxy the permission to discover and route traffic to other services." } \ No newline at end of file diff --git a/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/service-templated-policy.pretty-meta.golden b/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/service-templated-policy.pretty-meta.golden index f3ae5c6d7be2c..bcb0f8c26bdd2 100644 --- a/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/service-templated-policy.pretty-meta.golden +++ b/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/service-templated-policy.pretty-meta.golden @@ -1,4 +1,5 @@ Name: builtin/service +Description: Gives the token or role permissions to register a service and discover services in the Consul catalog. It also gives the specified service's sidecar proxy the permission to discover and route traffic to other services. Input variables: Name: String - Required - The name of the service. Example usage: diff --git a/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/service-templated-policy.pretty.golden b/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/service-templated-policy.pretty.golden index bc3ffcfd25e0f..0c0b545b63499 100644 --- a/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/service-templated-policy.pretty.golden +++ b/command/acl/templatedpolicy/testdata/FormatTemplatedPolicy/ce/service-templated-policy.pretty.golden @@ -1,4 +1,5 @@ Name: builtin/service +Description: Gives the token or role permissions to register a service and discover services in the Consul catalog. It also gives the specified service's sidecar proxy the permission to discover and route traffic to other services. Input variables: Name: String - Required - The name of the service. Example usage: diff --git a/command/acl/templatedpolicy/testdata/FormatTemplatedPolicyList/ce/list.json.golden b/command/acl/templatedpolicy/testdata/FormatTemplatedPolicyList/ce/list.json.golden index b634ddc9d8f46..af63cec4fc4dc 100644 --- a/command/acl/templatedpolicy/testdata/FormatTemplatedPolicyList/ce/list.json.golden +++ b/command/acl/templatedpolicy/testdata/FormatTemplatedPolicyList/ce/list.json.golden @@ -2,16 +2,19 @@ "builtin/dns": { "TemplateName": "builtin/dns", "Schema": "", - "Template": "\nnode_prefix \"\" {\n\tpolicy = \"read\"\n}\nservice_prefix \"\" {\n\tpolicy = \"read\"\n}\nquery_prefix \"\" {\n\tpolicy = \"read\"\n}" + "Template": "\nnode_prefix \"\" {\n\tpolicy = \"read\"\n}\nservice_prefix \"\" {\n\tpolicy = \"read\"\n}\nquery_prefix \"\" {\n\tpolicy = \"read\"\n}", + "Description": "Gives the token or role permissions for the Consul DNS to query services in the network." }, "builtin/node": { "TemplateName": "builtin/node", "Schema": "{\n\t\"type\": \"object\",\n\t\"properties\": {\n\t\t\"name\": { \"type\": \"string\", \"$ref\": \"#/definitions/min-length-one\" }\n\t},\n\t\"required\": [\"name\"],\n\t\"definitions\": {\n\t\t\"min-length-one\": {\n\t\t\t\t\"type\": \"string\",\n\t\t\t\t\"minLength\": 1\n\t\t}\n\t}\n}", - "Template": "\nnode \"{{.Name}}\" {\n\tpolicy = \"write\"\n}\nservice_prefix \"\" {\n\tpolicy = \"read\"\n}" + "Template": "\nnode \"{{.Name}}\" {\n\tpolicy = \"write\"\n}\nservice_prefix \"\" {\n\tpolicy = \"read\"\n}", + "Description": "Gives the token or role permissions for a register an agent/node into the catalog. A node is typically a consul agent but can also be a physical server, cloud instance or a container." }, "builtin/service": { "TemplateName": "builtin/service", "Schema": "{\n\t\"type\": \"object\",\n\t\"properties\": {\n\t\t\"name\": { \"type\": \"string\", \"$ref\": \"#/definitions/min-length-one\" }\n\t},\n\t\"required\": [\"name\"],\n\t\"definitions\": {\n\t\t\"min-length-one\": {\n\t\t\t\t\"type\": \"string\",\n\t\t\t\t\"minLength\": 1\n\t\t}\n\t}\n}", - "Template": "\nservice \"{{.Name}}\" {\n\tpolicy = \"write\"\n}\nservice \"{{.Name}}-sidecar-proxy\" {\n\tpolicy = \"write\"\n}\nservice_prefix \"\" {\n\tpolicy = \"read\"\n}\nnode_prefix \"\" {\n\tpolicy = \"read\"\n}" + "Template": "\nservice \"{{.Name}}\" {\n\tpolicy = \"write\"\n}\nservice \"{{.Name}}-sidecar-proxy\" {\n\tpolicy = \"write\"\n}\nservice_prefix \"\" {\n\tpolicy = \"read\"\n}\nnode_prefix \"\" {\n\tpolicy = \"read\"\n}", + "Description": "Gives the token or role permissions to register a service and discover services in the Consul catalog. It also gives the specified service's sidecar proxy the permission to discover and route traffic to other services." } } \ No newline at end of file diff --git a/command/connect/envoy/bootstrap_config.go b/command/connect/envoy/bootstrap_config.go index fa3b317255be3..452d3679d6f2f 100644 --- a/command/connect/envoy/bootstrap_config.go +++ b/command/connect/envoy/bootstrap_config.go @@ -251,11 +251,6 @@ func (c *BootstrapConfig) ConfigureArgs(args *BootstrapTplArgs, omitDeprecatedTa // Setup telemetry collector if needed. This MUST happen after the Static*JSON is set above if c.TelemetryCollectorBindSocketDir != "" { - // Override StatsFlushInterval as 60 seconds (1 minute) to reduce number of metric flushes. - // Only perform this override if there is no custom configuration for stats sinks and flush interval. - if c.StatsFlushInterval == "" && args.StatsSinksJSON == "" { - args.StatsFlushInterval = "60s" - } appendTelemetryCollectorConfig(args, c.TelemetryCollectorBindSocketDir) } diff --git a/command/connect/envoy/bootstrap_config_test.go b/command/connect/envoy/bootstrap_config_test.go index c3bc04c201e75..ef05786347142 100644 --- a/command/connect/envoy/bootstrap_config_test.go +++ b/command/connect/envoy/bootstrap_config_test.go @@ -5,7 +5,6 @@ package envoy import ( "encoding/json" - "fmt" "reflect" "regexp" "strings" @@ -629,50 +628,47 @@ func TestBootstrapConfig_ConfigureArgs(t *testing.T) { TelemetryCollectorBindSocketDir: "/tmp/consul/telemetry-collector", }, wantArgs: BootstrapTplArgs{ - StatsFlushInterval: "60s", - ProxyID: "web-sidecar-proxy", - StatsConfigJSON: defaultStatsConfigJSON, - StatsSinksJSON: expectedTelemetryCollectorStatsSink, - StaticClustersJSON: expectedTelemetryCollectorCluster, + ProxyID: "web-sidecar-proxy", + StatsConfigJSON: defaultStatsConfigJSON, + StatsSinksJSON: `{ + "name": "envoy.stat_sinks.metrics_service", + "typed_config": { + "@type": "type.googleapis.com/envoy.config.metrics.v3.MetricsServiceConfig", + "transport_api_version": "V3", + "grpc_service": { + "envoy_grpc": { + "cluster_name": "consul_telemetry_collector_loopback" + } + }, + "emit_tags_as_labels": true + } + }`, + StaticClustersJSON: `{ + "name": "consul_telemetry_collector_loopback", + "type": "STATIC", + "http2_protocol_options": {}, + "loadAssignment": { + "clusterName": "consul_telemetry_collector_loopback", + "endpoints": [ + { + "lbEndpoints": [ + { + "endpoint": { + "address": { + "pipe": { + "path": "/tmp/consul/telemetry-collector/gqmuzdHCUPAEY5mbF8vgkZCNI14.sock" + } + } + } + } + ] + } + ] + } + }`, }, wantErr: false, }, - { - name: "telemetry-collector-no-default-flush-interval-when-interval-preconfigured", - baseArgs: BootstrapTplArgs{ - ProxyID: "web-sidecar-proxy", - }, - input: BootstrapConfig{ - // Explicitly defined StatsFlushInterval by end user should not be overriden. - StatsFlushInterval: "10s", - TelemetryCollectorBindSocketDir: "/tmp/consul/telemetry-collector", - }, - wantArgs: BootstrapTplArgs{ - StatsFlushInterval: "10s", - ProxyID: "web-sidecar-proxy", - StatsConfigJSON: defaultStatsConfigJSON, - StatsSinksJSON: expectedTelemetryCollectorStatsSink, - StaticClustersJSON: expectedTelemetryCollectorCluster, - }, - }, - { - name: "telemetry-collector-no-default-flush-interval-when-sinks-preconfigured", - baseArgs: BootstrapTplArgs{ - ProxyID: "web-sidecar-proxy", - }, - input: BootstrapConfig{ - // If stats sinks are explicitly defined by end user, do not default StatsFlushInterval. - StatsdURL: "udp://127.0.0.1:9125", - TelemetryCollectorBindSocketDir: "/tmp/consul/telemetry-collector", - }, - wantArgs: BootstrapTplArgs{ - StatsFlushInterval: "", - ProxyID: "web-sidecar-proxy", - StatsConfigJSON: defaultStatsConfigJSON, - StatsSinksJSON: fmt.Sprintf(`%s,%s`, expectedStatsdSink, expectedTelemetryCollectorStatsSink), - StaticClustersJSON: expectedTelemetryCollectorCluster, - }, - }, { name: "simple-statsd-sink", input: BootstrapConfig{ diff --git a/command/connect/envoy/exec_test.go b/command/connect/envoy/exec_test.go index 332dd77a4fe7c..e949019e8235e 100644 --- a/command/connect/envoy/exec_test.go +++ b/command/connect/envoy/exec_test.go @@ -355,9 +355,6 @@ func patchExecArgs(t *testing.T) { } func TestMakeBootstrapPipe_DoesNotBlockOnAFullPipe(t *testing.T) { - if testing.Short() { - t.Skip("too slow for testing.Short") - } // A named pipe can buffer up to 64k, use a value larger than that bootstrap := bytes.Repeat([]byte("a"), 66000) diff --git a/command/connect/envoy/testdata/telemetry-collector.golden b/command/connect/envoy/testdata/telemetry-collector.golden index 5992029c2b971..81ef486622985 100644 --- a/command/connect/envoy/testdata/telemetry-collector.golden +++ b/command/connect/envoy/testdata/telemetry-collector.golden @@ -219,7 +219,6 @@ ], "use_all_default_tags": true }, - "stats_flush_interval": "60s", "dynamic_resources": { "lds_config": { "ads": {}, diff --git a/command/resource/read/read_test.go b/command/resource/read/read_test.go index a293a9faf5e20..ee78acdd19602 100644 --- a/command/resource/read/read_test.go +++ b/command/resource/read/read_test.go @@ -139,7 +139,7 @@ func TestResourceRead(t *testing.T) { name: "read resource that doesn't exist", args: []string{"demo.v2.Artist", "fake-korn", "-partition=default", "-namespace=default", "-peer=local"}, expectedCode: 1, - errMsg: "Error reading resource &{demo v2 Artist}/fake-korn: Unexpected response code: 404 (rpc error: code = NotFound desc = resource not found)\n", + errMsg: "Error reading resource demo.v2.Artist/fake-korn: Unexpected response code: 404 (rpc error: code = NotFound desc = resource not found)\n", }, } diff --git a/docs/README.md b/docs/README.md index 72bd17d6d7ae7..0d61b30fa5778 100644 --- a/docs/README.md +++ b/docs/README.md @@ -25,7 +25,7 @@ be found in the public [user documentation]. 1. [Agent Configuration](./config) 1. [RPC](./rpc) 1. [Cluster Persistence](./persistence) -1. [V2 Architecture](v2-architecture) +1. [Resources and Controllers](./resources) 1. [Client Agent](./client-agent) 1. [Service Discovery](./service-discovery) 1. [Service Mesh (Connect)](./service-mesh) diff --git a/docs/persistence/README.md b/docs/persistence/README.md index 68df1addc89c7..c8ca1089d807d 100644 --- a/docs/persistence/README.md +++ b/docs/persistence/README.md @@ -3,7 +3,7 @@ > **Note** > While the content of this document is still accurate, it doesn't cover the new > generic resource-oriented storage layer introduced in Consul 1.16. Please see -> [Resources](../v2-architecture/controller-architecture) for more information. +> [Resources](../resources) for more information. The cluser persistence subsystem runs entirely in Server Agents. It handles both read and write requests from the [RPC] subsystem. See the [Consul Architecture Guide] for an diff --git a/docs/v2-architecture/controller-architecture/README.md b/docs/resources/README.md similarity index 77% rename from docs/v2-architecture/controller-architecture/README.md rename to docs/resources/README.md index d781a63cc098e..b2a05744ad563 100644 --- a/docs/v2-architecture/controller-architecture/README.md +++ b/docs/resources/README.md @@ -1,14 +1,14 @@ -# Overview +# Resources > **Note** > Looking for guidance on adding new resources and controllers to Consul? Check -> out the [developer guide](guide.md). +> out the [developer guide](./guide.md). Consul 1.16 introduced a set of [generic APIs] for managing resources, and a [controller runtime] for building functionality on top of them. -[generic APIs]: ../../../proto-public/pbresource/resource.proto -[controller runtime]: ../../../internal/controller +[generic APIs]: ../../proto-public/pbresource/resource.proto +[controller runtime]: ../../internal/controller Previously, adding features to Consul involved making changes at every layer of the stack, including: HTTP handlers, RPC handlers, MemDB tables, Raft @@ -25,7 +25,7 @@ of a shared platform and own their resource types and controllers. ## Architecture Overview -![architecture diagram](architecture-overview.png) +![architecture diagram](./architecture-overview.png) [source](https://whimsical.com/state-store-v2-UKE6SaEPXNc4UrZBrZj4Kg) @@ -33,20 +33,20 @@ Our resource-oriented architecture comprises the following components: #### Resource Service -[Resource Service](../../../proto-public/pbresource/resource.proto) is a gRPC +[Resource Service](../../proto-public/pbresource/resource.proto) is a gRPC service that contains the shared logic for creating, reading, updating, deleting, and watching resources. It will be consumed by controllers, our Kubernetes integration, the CLI, and mapped to an HTTP+JSON API. #### Type Registry -[Type Registry](../../../internal/resource/registry.go) is where teams register +[Type Registry](../../internal/resource/registry.go) is where teams register their resource types, along with hooks for performing structural validation, authorization, etc. #### Storage Backend -[Storage Backend](../../../internal/storage/storage.go) is an abstraction over +[Storage Backend](../../internal/storage/storage.go) is an abstraction over low-level storage primitives. Today, there are two implementations (Raft and an in-memory backend for tests) but in the future, we envisage external storage systems such as the Kubernetes API or an RDBMS could be supported which would @@ -54,13 +54,12 @@ reduce operational complexity for our customers. #### Controllers -[Controllers](../../../internal/controller/api.go) implement Consul's business +[Controllers](../../internal/controller/api.go) implement Consul's business logic using asynchronous control loops that respond to changes in resources. -Please see [Controller docs](controllers.md) for more details about controllers ## Raft Storage Backend -Our [Raft Storage Backend](../../../internal/storage/raft/backend.go) integrates +Our [Raft Storage Backend](../../internal/storage/raft/backend.go) integrates with the existing Raft machinery (e.g. FSM) used by the [old state store]. It also transparently forwards writes and strongly consistent reads to the leader over gRPC. @@ -70,7 +69,7 @@ at how a write operation is handled. [old state store]: ../persistence/ -![raft storage backend diagram](raft-backend.png) +![raft storage backend diagram](./raft-backend.png) [source](https://whimsical.com/state-store-v2-UKE6SaEPXNc4UrZBrZj4Kg) @@ -85,24 +84,24 @@ The storage backend determines that the current server is a Raft follower, and forwards the operation to the leader via a gRPC [forwarding service] listening on the multiplexed RPC port ([`ports.server`]). -[forwarding service]: ../../../proto/private/pbstorage/raft.proto +[forwarding service]: ../../proto/private/pbstorage/raft.proto [`ports.server`]: https://developer.hashicorp.com/consul/docs/agent/config/config-files#server_rpc_port #### Step 5 The leader's storage backend serializes the operation to protobuf and applies it to the Raft log. As we need to share the Raft log with the old state store, we go -through the [`consul.raftHandle`](../../../agent/consul/raft_handle.go) and +through the [`consul.raftHandle`](../../agent/consul/raft_handle.go) and [`consul.Server`](../../agent/consul/server/server.go) which applies a msgpack envelope and type byte prefix. #### Step 6 Raft consensus happens! Once the log has been committed, it is applied to the -[FSM](../../../agent/consul/fsm/fsm.go) which calls the storage backend's `Apply` +[FSM](../../agent/consul/fsm/fsm.go) which calls the storage backend's `Apply` method to apply the protobuf-encoded operation to the [`inmem.Store`]. -[`inmem.Store`]: ../../../internal/storage/inmem/store.go +[`inmem.Store`]: ../../internal/storage/inmem/store.go #### Steps 7, 8, 9 diff --git a/docs/v2-architecture/controller-architecture/architecture-overview.png b/docs/resources/architecture-overview.png similarity index 100% rename from docs/v2-architecture/controller-architecture/architecture-overview.png rename to docs/resources/architecture-overview.png diff --git a/docs/v2-architecture/controller-architecture/guide.md b/docs/resources/guide.md similarity index 97% rename from docs/v2-architecture/controller-architecture/guide.md rename to docs/resources/guide.md index 91ae2f494e58c..aaecdecef07df 100644 --- a/docs/v2-architecture/controller-architecture/guide.md +++ b/docs/resources/guide.md @@ -6,7 +6,7 @@ Consul 🚂 ## Resource Schema Adding a new resource type begins with defining the object schema as a protobuf -message, in the appropriate package under [`proto-public`](../../../proto-public). +message, in the appropriate package under [`proto-public`](../../proto-public). ```shell $ mkdir proto-public/pbfoo/v1alpha1 @@ -34,7 +34,7 @@ $ make proto ``` Next, we must add our resource type to the registry. At this point, it's useful -to add a package (e.g. under [`internal`](../../../internal)) to contain the logic +to add a package (e.g. under [`internal`](../../internal)) to contain the logic associated with this resource type. The convention is to have this package export variables for its type identifiers @@ -65,7 +65,7 @@ and a partition. Update the `NewTypeRegistry` method in [`type_registry.go`] to call your package's type registration method: -[`type_registry.go`]: ../../../agent/consul/type_registry.go +[`type_registry.go`]: ../../agent/consul/type_registry.go ```Go import ( @@ -90,7 +90,7 @@ $ consul agent -dev ``` You can now use [grpcurl](https://github.com/fullstorydev/grpcurl) to interact -with the [resource service](../../../proto-public/pbresource/resource.proto): +with the [resource service](../../proto-public/pbresource/resource.proto): ```shell $ grpcurl -d @ \ @@ -283,7 +283,7 @@ Next, register your controller with the controller manager. Another common pattern is to have your package expose a method for registering controllers, which is called from `registerControllers` in [`server.go`]. -[`server.go`]: ../../../agent/consul/server.go +[`server.go`]: ../../agent/consul/server.go ```Go package foo diff --git a/docs/v2-architecture/controller-architecture/raft-backend.png b/docs/resources/raft-backend.png similarity index 100% rename from docs/v2-architecture/controller-architecture/raft-backend.png rename to docs/resources/raft-backend.png diff --git a/docs/v2-architecture/controller-architecture/controllers.md b/docs/v2-architecture/controller-architecture/controllers.md deleted file mode 100644 index d346dfeacff94..0000000000000 --- a/docs/v2-architecture/controller-architecture/controllers.md +++ /dev/null @@ -1,223 +0,0 @@ -# Controllers - -This page describes how to write controllers in Consul's new controller architecture. - --> **Note**: This information is valid as of Consul 1.17 but some portions may change in future releases. - -## Controller Basics - -A controller consists of several parts: - -1. **The watched type** - This is the main type a controller is watching and reconciling. -2. **Additional watched types** - These are additional types a controller may care about in addition to the main watched type. -3. **Additional custom watches** - These are the watches for things that aren't resources in Consul. -4. **Reconciler** - This is the instance that's responsible for reconciling requests whenever there's an event for the main watched type or for any of the watched types. - -A basic controller setup could look like this: - -```go -func barController() controller.Controller { - return controller.ForType(pbexample.BarType). - WithReconciler(barReconciler{}) -} -``` - -barReconciler needs to implement the `Reconcile` method of the `Reconciler` interface. -It's important to note that the `Reconcile` method only gets the request with the `ID` of the main -watched resource and so it's up to the reconcile implementation to fetch the resource and any relevant information needed -to perform the reconciliation. The most basic reconciler could look as follows: - -```go -type barReconciler struct {} - -func (b *barReconciler) Reconcile(ctx context.Context, rt Runtime, req Request) error { - ... -} -``` - -## Watching Additional Resources - -Most of the time, controllers will need to watch more resources in addition to the main watched type. -To set up an additional watch, the main thing we need to figure out is how to map additional watched resource to the main -watched resource. Controller-runtime allows us to implement a mapper function that can take the additional watched resource -as the input and produce reconcile `Requests` for our main watched type. - -To figure out how to map the two resources together, we need to think about the relationship between the two resources. - -There are several common relationship types between resources that are being used currently: -1. Name-alignment: this relationship means that resources are named the same and live in the same tenancy, but have different data. Examples: `Service` and `ServiceEndpoints`, `Workload` and `ProxyStateTemplate`. -2. Selector: this relationship happens when one resource selects another by name or name prefix. Examples: `Service` and `Workload`, `ProxyConfiguration` and `Workload`. -3. Owner: in this relationship, one resource is the owner of another resource. Examples: `Service` and `ServiceEndpoints`, `HealthStatus` and `Workload`. -4. Arbitrary reference: in this relationship, one resource may reference another by some sort of reference. This reference could be a single string in the resource data or a more composite reference containing name, tenancy, and type. Examples: `Workload` and `WorkloadIdentity`, `HTTPRoute` and `Service`. - -Note that it's possible for the two watched resources to have more than one relationship type simultaneously. -For example, `FailoverPolicy` type is name-aligned with a service to which it applies, however, it also contains -references to destination services, and for a controller that reconciles `FailoverPolicy` and watches `Service` -we need to account for both type 1 and type 4 relationship whenever we get an event for a `Service`. - -### Simple Mappers - -Let's look at some simple mapping examples. - -#### Name-aligned resources -If our resources only have a name-aligned relationship, we can map them with a built-in function: - -```go -func barController() controller.Controller { - return controller.ForType(pbexample.BarType). - WithWatch(pbexample.FooType, controller.ReplaceType(pbexample.BarType)). - WithReconciler(barReconciler{}) -} -``` - -Here, all we need to do is replace the type of the `Foo` resource whenever we get an event for it. - -#### Owned resources - -Let's say our `Foo` resource owns `Bar` resources, where any `Foo` resource can own multiple `Bar` resources. -In this case, whenever we see a new event for `Foo`, all we need to do is get all `Bar` resources that `Foo` currently owns. -For this, we can also use a built-in function to set up our watch: - -```go -func MapOwned(ctx context.Context, rt controller.Runtime, res *pbresource.Resource) ([]controller.Request, error) { - resp, err := rt.Client.ListByOwner(ctx, &pbresource.ListByOwnerRequest{Owner: res.Id}) - if err != nil { - return nil, err - } - - var result []controller.Request - for _, r := range resp.Resources { - result = append(result, controller.Request{ID: r.Id}) - } - - return result, nil -} - -func barController() controller.Controller { - return controller.ForType(pbexample.BarType). - WithWatch(pbexample.FooType, MapOwned). - WithReconciler(barReconciler{}) -} -``` - -### Advanced Mappers and Caches - -For selector or arbitrary reference relationships, the mapping that we choose may need to be more advanced. - -#### Naive mapper implementation - -Let's first consider what a naive mapping function could look like in this case. Let's say that the `Bar` resource -references `Foo` resource by name in the data. Now to watch and map `Foo` resources, we need to be able to find all relevant `Bar` resources -whenever we get an event for a `Foo` resource. - -```go -func MapFoo(ctx context.Context, rt controller.Runtime, res *pbresource.Resource) ([]controller.Request, error) { - resp, err := rt.Client.List(ctx, &pbresource.ListRequest{Type: pbexample.BarType, Tenancy: res.Id.Tenancy}) - if err != nil { - return nil, err - } - - var result []controller.Request - for _, r := range resp.Resources { - decodedResource, err := resource.Decode[*pbexample.Bar](r) - if err != nil { - return nil, err - } - - // Only add Bar resources that match Foo by name. - if decodedResource.GetData().GetFooName() == res.Id.Name { - result = append(result, controller.Request{ID: r.Id}) - } - } -} -``` - -This approach is fine for cases when the number of `Bar` resources in a cluster is relatively small. If it's not, -then we'd be doing a large `O(N)` search on each `Bar` event which could be too expensive. - -#### Caching mappers - -For cases when `N` is too large, we'd want to use a caching layer to help us make lookups more efficient so that they -don't require an `O(N)` search of potentially all cluster resources. - -Caching mappers need to be kept up-to-date by individual controllers and because of their added complexity, it's important -to carefully consider whether these mappers are strictly necessary for any given controller implementation. - -For reference-relationships, we recommend using the `bimapper` to track relationships, while for the workload selector relationships, -we recommend using the `workloadselectionmapper.Mapper` or the underlying `selectiontracker.WorkloadSelectionTracker`. -These two mappers types can be combined into more complex mappers such as the ones used by the `routes-controller` -or the `sidecar-proxy-controller`. - -In our example, because we `Foo` and `Bar` are using name-reference relationship, we'll use a `bimapper`. - -```go -func barController() controller.Controller { - mapper := bimapper.New(pbexample.Bar, pbexample.Foo) - - return controller.ForType(pbexample.BarType). - WithWatch(pbexample.FooType, mapper.MapLink). - WithReconciler(barReconciler{mapper: mapper}) -} -``` - -Now we need to make sure that we populate and clear the mapper as necessary. Generally, this should happen when the data -is fetched in the reconcile. - -```go -func (b *barReconciler) Reconcile(ctx context.Context, rt Runtime, req Request) error { - // Fetch the `Bar` resource we're reconciling. - barResource, err := resource.GetDecodedResource[*pbexample.Bar](ctx, rt.Client, req.ID) - if err != nil { - return err - } - - // If the resource is not found, we should make sure to untrack it from mapper. - if barResource == nil { - b.mapper.UntrackItem(req.ID) - } - - // Fetch our referenced `Foo` resource. - fooID := &pbresource.ID{ - Type: pbexample.FooType, - Name: barResource.GetData().GetFooName(), - Tenancy: req.Id.Tenancy, - } - res, err := resource.GetDecodedResource[*pbexample.Foo](ctx, rt.Client, fooID) - if err != nil { - return err - } - // If the referenced Foo resource is not found, we should not untrack it in case it comes back. - if res == nil { - // no-op - } - // Otherwise, we need to track it. - b.mapper.TrackItem(req.ID, []resource.ReferenceOrID{fooID}) -} -``` - -TODO: bound ref problem - -### Custom Watches - -In some cases, we may want to trigger reconciles for events that aren't generated from CRUD operations on resources, for example -when Envoy proxy connects or disconnects to a server. Controller-runtime allows us to setup watches from -events that come from a custom event channel. Please see [xds-controller](https://github.com/hashicorp/consul/blob/ecfeb7aac51df8730064d869bb1f2c633a531522/internal/mesh/internal/controllers/xds/controller.go#L40-L41) for examples of custom watches. - -## Statuses - -In many cases, controllers would need to update statuses on resources to let the user know about the successful or unsuccessful -state of a resource. - -These are the guidelines that we recommend for statuses: - -* While status conditions is a list, the Condition type should be treated as a key in a map, meaning a resource should not have two status conditions with the same type. -* Controllers need to both update successful and unsuccessful conditions states. This is because we need to make sure that we clear any failed status conditions. -* Status conditions should be named such that the `True` state is a successful state and `False` state is a failed state. - -## Best Practices - -Below is a list of controller best practices that we've learned so far. Many of them are inspired by [kubebuilder](https://book.kubebuilder.io/reference/good-practices). - -* Avoid monolithic controllers as much as possible. A single controller should only manage a single resource to avoid complexity and race conditions. -* If using cached mappers, aim to write (update or delete entries) to mappers in the `Reconcile` method and read from them in the mapper functions used by watches. -* Fetch all data in the `Reconcile` method and avoid caching it from the mapper functions. This ensures that we get the latest data for each reconciliation. diff --git a/docs/v2-architecture/service-mesh/README.md b/docs/v2-architecture/service-mesh/README.md deleted file mode 100644 index 4d0b6e9ff279d..0000000000000 --- a/docs/v2-architecture/service-mesh/README.md +++ /dev/null @@ -1,47 +0,0 @@ -# V2 Service Mesh Architecture - -In Consul 1.16 and 1.17 releases, Consul's service mesh has been rewritten to use the controller architecture and the -resource APIs. - -At a high level, the service mesh consists of resources and controllers living in three groups: `catalog`, `mesh`, -and `auth`. - -![controllers diagram](controllers.png) - -The controllers in each groups are responsible for producing an output that may then be used by other controllers. - --> **Note:** This diagram is valid as of Consul 1.17. It may change in the future releases. - -## Catalog controllers - -Catalog controllers are responsible for reconciling resources in the `catalog` API group. - -1. **FailoverPolicy** controller validates `FailoverPolicy` resource has valid service references and updating the - status the `FailoverPolicy` resource with the result. -2. **WorkloadHealth** controller takes in workloads and any relevant health statuses and updates the status of a - workload with the combined health status. -3. **NodeHealth** controller takes in nodes and any relevant health statuses and updates the status of a node with the - combined health status. -4. **ServiceEndpoints** controller generates a `ServiceEndpoints` object that is name-aligned with a service and - contains workload addresses and ports that constitute a service. - -## Mesh Controllers - -1. **ProxyConfiguration** controller generates a `ComputedProxyConfiguration` resource that is name-aligned with a - workload. `ComputedProxyConfiguration` contains all merged `ProxyConfiguration` resources that apply to a specific - workload. -2. **Routes** controller generates a `ComputedRoutes` resource that is name-aligned with a service. It contains merged - configuration from all xRoutes objects as well as `FailoverPolicy` and `DestinationPolicy`. -3. **ExplicitDestinations** controller generates a `ComputedExplicitDestinations` resource that is name-aligned with a - workload. It contains merged `Destinations` resources that apply to a specific workload. -4. **SidecarProxy** controller takes in the results of the previous three controllers as well as some user-provided - resources and generates `ProxyStateTemplate` resource which serves as the representation of Envoy configuration for - sidecar proxies. -5. **XDSController** takes in `ProxyStateTemplate` resources, fills in missing endpoints references as well as - certificates and CA roots and sends them over to another component that sends this information over to Envoy. - -## Auth Controllers - -1. **TrafficPermissions** controller generates `ComputedTrafficPermissions` resource that is name-aligned - with `WorkloadIdentity`. This computed resource contains all traffic permissions that apply to a specific workload - identity. \ No newline at end of file diff --git a/docs/v2-architecture/service-mesh/controllers.png b/docs/v2-architecture/service-mesh/controllers.png deleted file mode 100644 index 76efac1d059cd..0000000000000 Binary files a/docs/v2-architecture/service-mesh/controllers.png and /dev/null differ diff --git a/go.mod b/go.mod index a443ce4336e5a..88a2eb86a5b32 100644 --- a/go.mod +++ b/go.mod @@ -24,14 +24,13 @@ require ( github.com/aws/aws-sdk-go v1.44.289 github.com/coredns/coredns v1.10.1 github.com/coreos/go-oidc v2.1.0+incompatible - github.com/deckarep/golang-set/v2 v2.3.1 github.com/docker/go-connections v0.4.0 github.com/envoyproxy/go-control-plane v0.11.1 github.com/envoyproxy/go-control-plane/xdsmatcher v0.0.0-20230524161521-aaaacbfbe53e github.com/fatih/color v1.14.1 github.com/fsnotify/fsnotify v1.6.0 - github.com/go-openapi/runtime v0.25.0 - github.com/go-openapi/strfmt v0.21.3 + github.com/go-openapi/runtime v0.26.0 + github.com/go-openapi/strfmt v0.21.7 github.com/google/go-cmp v0.5.9 github.com/google/gofuzz v1.2.0 github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 @@ -66,7 +65,7 @@ require ( github.com/hashicorp/hcl v1.0.0 github.com/hashicorp/hcl/v2 v2.14.1 github.com/hashicorp/hcp-scada-provider v0.2.3 - github.com/hashicorp/hcp-sdk-go v0.61.0 + github.com/hashicorp/hcp-sdk-go v0.73.0 github.com/hashicorp/hil v0.0.0-20200423225030-a18a1cd20038 github.com/hashicorp/memberlist v0.5.0 github.com/hashicorp/raft v1.5.0 @@ -100,7 +99,7 @@ require ( github.com/rboyer/safeio v0.2.3 github.com/ryanuber/columnize v2.1.2+incompatible github.com/shirou/gopsutil/v3 v3.22.9 - github.com/stretchr/testify v1.8.3 + github.com/stretchr/testify v1.8.4 github.com/xeipuuv/gojsonschema v1.2.0 github.com/zclconf/go-cty v1.11.1 go.etcd.io/bbolt v1.3.7 @@ -113,13 +112,13 @@ require ( golang.org/x/crypto v0.14.0 golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63 golang.org/x/net v0.17.0 - golang.org/x/oauth2 v0.7.0 + golang.org/x/oauth2 v0.13.0 golang.org/x/sync v0.3.0 golang.org/x/sys v0.13.0 golang.org/x/time v0.3.0 - google.golang.org/genproto/googleapis/rpc v0.0.0-20230526203410-71b5a4ffd15e + google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc google.golang.org/grpc v1.56.3 - google.golang.org/protobuf v1.30.0 + google.golang.org/protobuf v1.31.0 gopkg.in/square/go-jose.v2 v2.5.1 gotest.tools/v3 v3.4.0 k8s.io/api v0.26.2 @@ -128,7 +127,7 @@ require ( ) require ( - cloud.google.com/go/compute v1.19.1 // indirect + cloud.google.com/go/compute v1.20.1 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect cloud.google.com/go/iam v0.13.0 // indirect github.com/Azure/azure-sdk-for-go v68.0.0+incompatible // indirect @@ -149,7 +148,7 @@ require ( github.com/Microsoft/go-winio v0.6.1 // indirect github.com/agext/levenshtein v1.2.3 // indirect github.com/apparentlymart/go-textseg/v13 v13.0.0 // indirect - github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d // indirect + github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect github.com/benbjohnson/immutable v0.4.0 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bgentry/speakeasy v0.1.0 // indirect @@ -174,25 +173,26 @@ require ( github.com/go-logr/stdr v1.2.2 // indirect github.com/go-ole/go-ole v1.2.6 // indirect github.com/go-openapi/analysis v0.21.4 // indirect - github.com/go-openapi/errors v0.20.3 // indirect + github.com/go-openapi/errors v0.20.4 // indirect github.com/go-openapi/jsonpointer v0.19.5 // indirect github.com/go-openapi/jsonreference v0.20.0 // indirect github.com/go-openapi/loads v0.21.2 // indirect github.com/go-openapi/spec v0.20.8 // indirect - github.com/go-openapi/swag v0.22.3 // indirect + github.com/go-openapi/swag v0.22.4 // indirect github.com/go-openapi/validate v0.22.1 // indirect github.com/go-ozzo/ozzo-validation v3.6.0+incompatible // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang-jwt/jwt/v4 v4.2.0 // indirect + github.com/golang-jwt/jwt/v4 v4.5.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.3 // indirect github.com/golang/snappy v0.0.4 // indirect github.com/google/btree v1.0.1 // indirect github.com/google/gnostic v0.5.7-v3refs // indirect github.com/google/go-querystring v1.0.0 // indirect + github.com/google/s2a-go v0.1.4 // indirect github.com/google/uuid v1.3.0 // indirect github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect - github.com/googleapis/gax-go/v2 v2.7.1 // indirect + github.com/googleapis/gax-go/v2 v2.11.0 // indirect github.com/gophercloud/gophercloud v0.3.0 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect @@ -256,7 +256,7 @@ require ( github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect github.com/yusufpapurcu/wmi v1.2.2 // indirect - go.mongodb.org/mongo-driver v1.11.0 // indirect + go.mongodb.org/mongo-driver v1.11.3 // indirect go.opencensus.io v0.24.0 // indirect go.opentelemetry.io/otel/trace v1.16.0 // indirect go.uber.org/atomic v1.9.0 // indirect @@ -265,10 +265,10 @@ require ( golang.org/x/term v0.13.0 // indirect golang.org/x/text v0.13.0 // indirect golang.org/x/tools v0.12.1-0.20230815132531-74c255bcf846 // indirect - google.golang.org/api v0.114.0 // indirect + google.golang.org/api v0.126.0 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto v0.0.0-20230526203410-71b5a4ffd15e // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20230526203410-71b5a4ffd15e // indirect + google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/ini.v1 v1.66.2 // indirect gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect diff --git a/go.sum b/go.sum index 7ba17c40bc504..bca1359dadc77 100644 --- a/go.sum +++ b/go.sum @@ -25,22 +25,20 @@ cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aD cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= -cloud.google.com/go v0.110.0 h1:Zc8gqp3+a9/Eyph2KDmcGaPtbKRIoqq4YTlL4NMD0Ys= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/compute v1.19.1 h1:am86mquDUgjGNWxiGn+5PGLbmgiWXlE/yNWpIpNvuXY= -cloud.google.com/go/compute v1.19.1/go.mod h1:6ylj3a05WF8leseCdIf77NK0g1ey+nj5IKd5/kvShxE= +cloud.google.com/go/compute v1.20.1 h1:6aKEtlUiwEpJzM001l0yFkpXmUVXaN8W+fbkb2AZNbg= +cloud.google.com/go/compute v1.20.1/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= cloud.google.com/go/iam v0.13.0 h1:+CmB+K0J/33d0zSQ9SlFWUeCCEn5XJA0ZMZ3pHE9u8k= cloud.google.com/go/iam v0.13.0/go.mod h1:ljOg+rcNfzZ5d6f1nAUJ8ZIxOaZUVoS14bKCtaLZ/D0= -cloud.google.com/go/longrunning v0.4.1 h1:v+yFJOfKC3yZdY6ZUI933pIYdhyhV8S3NpWrXWmg7jM= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= @@ -142,8 +140,8 @@ github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj github.com/armon/go-radix v1.0.0 h1:F4z6KzEeeQIMeLFa97iZU6vupzoecKdU5TX24SNppXI= github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= -github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d h1:Byv0BzEl3/e6D5CLfI0j/7hiIEtvGVFPCZ7Ei2oq8iQ= -github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= +github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so= +github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= github.com/aws/aws-sdk-go v1.25.41/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.30.27/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= github.com/aws/aws-sdk-go v1.44.289 h1:5CVEjiHFvdiVlKPBzv0rjG4zH/21W/onT18R5AH/qx0= @@ -210,8 +208,6 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/deckarep/golang-set/v2 v2.3.1 h1:vjmkvJt/IV27WXPyYQpAh4bRyWJc5Y435D17XQ9QU5A= -github.com/deckarep/golang-set/v2 v2.3.1/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= github.com/denverdino/aliyungo v0.0.0-20170926055100-d3308649c661 h1:lrWnAyy/F72MbxIxFUzKmcMCdt9Oi8RzpAxzTNQHD7o= github.com/denverdino/aliyungo v0.0.0-20170926055100-d3308649c661/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= @@ -291,8 +287,8 @@ github.com/go-openapi/analysis v0.21.4/go.mod h1:4zQ35W4neeZTqh3ol0rv/O8JBbka9Qy github.com/go-openapi/errors v0.19.8/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= github.com/go-openapi/errors v0.19.9/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= github.com/go-openapi/errors v0.20.2/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= -github.com/go-openapi/errors v0.20.3 h1:rz6kiC84sqNQoqrtulzaL/VERgkoCyB6WdEkc2ujzUc= -github.com/go-openapi/errors v0.20.3/go.mod h1:Z3FlZ4I8jEGxjUK+bugx3on2mIAk4txuAOhlsB1FSgk= +github.com/go-openapi/errors v0.20.4 h1:unTcVm6PispJsMECE3zWgvG4xTiKda1LIR5rCRWLG6M= +github.com/go-openapi/errors v0.20.4/go.mod h1:Z3FlZ4I8jEGxjUK+bugx3on2mIAk4txuAOhlsB1FSgk= github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= @@ -304,8 +300,8 @@ github.com/go-openapi/jsonreference v0.20.0/go.mod h1:Ag74Ico3lPc+zR+qjn4XBUmXym github.com/go-openapi/loads v0.21.1/go.mod h1:/DtAMXXneXFjbQMGEtbamCZb+4x7eGwkvZCvBmwUG+g= github.com/go-openapi/loads v0.21.2 h1:r2a/xFIYeZ4Qd2TnGpWDIQNcP80dIaZgf704za8enro= github.com/go-openapi/loads v0.21.2/go.mod h1:Jq58Os6SSGz0rzh62ptiu8Z31I+OTHqmULx5e/gJbNw= -github.com/go-openapi/runtime v0.25.0 h1:7yQTCdRbWhX8vnIjdzU8S00tBYf7Sg71EBeorlPHvhc= -github.com/go-openapi/runtime v0.25.0/go.mod h1:Ux6fikcHXyyob6LNWxtE96hWwjBPYF0DXgVFuMTneOs= +github.com/go-openapi/runtime v0.26.0 h1:HYOFtG00FM1UvqrcxbEJg/SwvDRvYLQKGhw2zaQjTcc= +github.com/go-openapi/runtime v0.26.0/go.mod h1:QgRGeZwrUcSHdeh4Ka9Glvo0ug1LC5WyE+EV88plZrQ= github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= github.com/go-openapi/spec v0.20.4/go.mod h1:faYFR1CvsJZ0mNsmsphTMSoRrNV3TEDoAM7FOEWeq8I= github.com/go-openapi/spec v0.20.6/go.mod h1:2OpW+JddWPrpXSCIX8eOx7lZ5iyuWj3RYR6VaaBKcWA= @@ -313,14 +309,15 @@ github.com/go-openapi/spec v0.20.8 h1:ubHmXNY3FCIOinT8RNrrPfGc9t7I1qhPtdOGoG2AxR github.com/go-openapi/spec v0.20.8/go.mod h1:2OpW+JddWPrpXSCIX8eOx7lZ5iyuWj3RYR6VaaBKcWA= github.com/go-openapi/strfmt v0.21.0/go.mod h1:ZRQ409bWMj+SOgXofQAGTIo2Ebu72Gs+WaRADcS5iNg= github.com/go-openapi/strfmt v0.21.1/go.mod h1:I/XVKeLc5+MM5oPNN7P6urMOpuLXEcNrCX/rPGuWb0k= -github.com/go-openapi/strfmt v0.21.3 h1:xwhj5X6CjXEZZHMWy1zKJxvW9AfHC9pkyUjLvHtKG7o= github.com/go-openapi/strfmt v0.21.3/go.mod h1:k+RzNO0Da+k3FrrynSNN8F7n/peCmQQqbbXjtDfvmGg= +github.com/go-openapi/strfmt v0.21.7 h1:rspiXgNWgeUzhjo1YU01do6qsahtJNByjLVbPLNHb8k= +github.com/go-openapi/strfmt v0.21.7/go.mod h1:adeGTkxE44sPyLk0JV235VQAO/ZXUr8KAzYjclFs3ew= github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-openapi/swag v0.21.1/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= -github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= -github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= +github.com/go-openapi/swag v0.22.4 h1:QLMzNJnMGPRNDCbySlcj1x01tzU8/9LTTL9hZZZogBU= +github.com/go-openapi/swag v0.22.4/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= github.com/go-openapi/validate v0.22.1 h1:G+c2ub6q47kfX1sOBLwIQwzBVt8qmOAARyo/9Fqs9NU= github.com/go-openapi/validate v0.22.1/go.mod h1:rjnrwK57VJ7A8xqfpAOEKRH8yQSGUriMu5/zuPSQ1hg= github.com/go-ozzo/ozzo-validation v3.6.0+incompatible h1:msy24VGS42fKO9K1vLz82/GeYW1cILu7Nuuj1N3BBkE= @@ -361,8 +358,9 @@ github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/goji/httpauth v0.0.0-20160601135302-2da839ab0f4d/go.mod h1:nnjvkQ9ptGaCkuDUx6wNykzzlUixGxvkme+H/lnzb+A= github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= -github.com/golang-jwt/jwt/v4 v4.2.0 h1:besgBTC8w8HjP6NzQdxwKH9Z5oQMZ24ThTrHp3cZ8eU= github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= +github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE= @@ -453,6 +451,8 @@ github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/s2a-go v0.1.4 h1:1kZ/sQM3srePvKs3tXAvQzo66XfcReoqFpIpIccE7Oc= +github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= github.com/google/tcpproxy v0.0.0-20180808230851-dfa16c61dad2 h1:AtvtonGEH/fZK0XPNNBdB6swgy7Iudfx88wzyIpwqJ8= github.com/google/tcpproxy v0.0.0-20180808230851-dfa16c61dad2/go.mod h1:DavVbd41y+b7ukKDmlnPR4nGYmkWXR6vHUkjQNiHPBs= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -464,8 +464,8 @@ github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5 github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= -github.com/googleapis/gax-go/v2 v2.7.1 h1:gF4c0zjUP2H/s/hEGyLA3I0fA2ZWjzYiONAD6cvPr8A= -github.com/googleapis/gax-go/v2 v2.7.1/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= +github.com/googleapis/gax-go/v2 v2.11.0 h1:9V9PWXEsWnPpQhu/PeQIkS4eGzMlTLGgt80cUUI8Ki4= +github.com/googleapis/gax-go/v2 v2.11.0/go.mod h1:DxmR61SGKkGLa2xigwuZIQpkCI2S5iydzRfb3peWZJI= github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.1.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.2.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= @@ -573,8 +573,8 @@ github.com/hashicorp/hcl/v2 v2.14.1 h1:x0BpjfZ+CYdbiz+8yZTQ+gdLO7IXvOut7Da+XJayx github.com/hashicorp/hcl/v2 v2.14.1/go.mod h1:e4z5nxYlWNPdDSNYX+ph14EvWYMFm3eP0zIUqPc2jr0= github.com/hashicorp/hcp-scada-provider v0.2.3 h1:AarYR+/Pcv+cMvPdAlb92uOBmZfEH6ny4+DT+4NY2VQ= github.com/hashicorp/hcp-scada-provider v0.2.3/go.mod h1:ZFTgGwkzNv99PLQjTsulzaCplCzOTBh0IUQsPKzrQFo= -github.com/hashicorp/hcp-sdk-go v0.61.0 h1:x4hJ8SlLI5WCE8Uzcu4q5jfdOEz/hFxfUkhAdoFdzSg= -github.com/hashicorp/hcp-sdk-go v0.61.0/go.mod h1:xP7wmWAmdMxs/7+ovH3jZn+MCDhHRj50Rn+m7JIY3Ck= +github.com/hashicorp/hcp-sdk-go v0.73.0 h1:KjizNN/53nu4YkrDZ24xKjy4EgFt9b3nk1vgfAmgwUk= +github.com/hashicorp/hcp-sdk-go v0.73.0/go.mod h1:k/wgUsKSa2OzWBM5/Pj5ST0YwFGpgC4O5EtCq882jSw= github.com/hashicorp/hil v0.0.0-20200423225030-a18a1cd20038 h1:n9J0rwVWXDpNd5iZnwY7w4WZyq53/rROeI7OVvLW8Ok= github.com/hashicorp/hil v0.0.0-20200423225030-a18a1cd20038/go.mod h1:n2TSygSNwsLJ76m8qFXTSc7beTb+auJxYdqrnoqwZWE= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= @@ -932,8 +932,8 @@ github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1F github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY= -github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/tencentcloud/tencentcloud-sdk-go v1.0.162 h1:8fDzz4GuVg4skjY2B0nMN7h6uN61EDVkuLyI2+qGHhI= github.com/tencentcloud/tencentcloud-sdk-go v1.0.162/go.mod h1:asUz5BPXxgoPGaRgZaVm1iGcUAuHyYUo1nXqKa83cvI= github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= @@ -986,8 +986,8 @@ go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= go.mongodb.org/mongo-driver v1.7.3/go.mod h1:NqaYOwnXWr5Pm7AOpO5QFxKJ503nbMse/R79oO62zWg= go.mongodb.org/mongo-driver v1.7.5/go.mod h1:VXEWRZ6URJIkUq2SCAyapmhH0ZLRBP+FT4xhp5Zvxng= go.mongodb.org/mongo-driver v1.10.0/go.mod h1:wsihk0Kdgv8Kqu1Anit4sfK+22vSFbUrAVEYRhCXrA8= -go.mongodb.org/mongo-driver v1.11.0 h1:FZKhBSTydeuffHj9CBjXlR8vQLee1cQyTWYPA6/tqiE= -go.mongodb.org/mongo-driver v1.11.0/go.mod h1:s7p5vEtfbeR1gYi6pnj3c3/urpbLv2T5Sfd6Rp2HBB8= +go.mongodb.org/mongo-driver v1.11.3 h1:Ql6K6qYHEzB6xvu4+AU0BoRoqf9vFPcc4o7MUIdPW8Y= +go.mongodb.org/mongo-driver v1.11.3/go.mod h1:PTSz5yu21bkT/wXpkS7WR5f0ddqw5quethTUn9WM+2g= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -1037,6 +1037,7 @@ golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= @@ -1153,8 +1154,8 @@ golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.7.0 h1:qe6s0zUXlPX80/dITx3440hWZ7GwMwgDDyrSGTPJG/g= -golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4= +golang.org/x/oauth2 v0.13.0 h1:jDDenyj+WgFtmV3zYVoi8aE2BwtXFLWOA67ZfNWftiY= +golang.org/x/oauth2 v0.13.0/go.mod h1:/JMhi4ZRXAf4HG9LiNmxvk+45+96RUlVThiH8FzNBn0= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1270,6 +1271,7 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= @@ -1378,8 +1380,8 @@ google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00 google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= -google.golang.org/api v0.114.0 h1:1xQPji6cO2E2vLiI+C/XiFAnsn1WV3mjaEwGLhi3grE= -google.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45N5Yg= +google.golang.org/api v0.126.0 h1:q4GJq+cAdMAC7XP7njvQ4tvohGLiSlytuL4BQxbIZ+o= +google.golang.org/api v0.126.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvyo4Aw= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1447,12 +1449,12 @@ google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEc google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20230526203410-71b5a4ffd15e h1:Ao9GzfUMPH3zjVfzXG5rlWlk+Q8MXWKwWpwVQE1MXfw= -google.golang.org/genproto v0.0.0-20230526203410-71b5a4ffd15e/go.mod h1:zqTuNwFlFRsw5zIts5VnzLQxSRqh+CGOTVMlYbY0Eyk= -google.golang.org/genproto/googleapis/api v0.0.0-20230526203410-71b5a4ffd15e h1:AZX1ra8YbFMSb7+1pI8S9v4rrgRR7jU1FmuFSSjTVcQ= -google.golang.org/genproto/googleapis/api v0.0.0-20230526203410-71b5a4ffd15e/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230526203410-71b5a4ffd15e h1:NumxXLPfHSndr3wBBdeKiVHjGVFzi9RX2HwwQke94iY= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230526203410-71b5a4ffd15e/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= +google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc h1:8DyZCyvI8mE1IdLy/60bS+52xfymkE72wv1asokgtao= +google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= +google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc h1:kVKPf/IiYSBWEWtkIn6wZXwWGCnLKcC8oWfZvXjsGnM= +google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc h1:XSJ8Vk1SWuNr8S18z1NZSziL0CPIXLCCMDOEFtHBOFc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= @@ -1482,6 +1484,7 @@ google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnD google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/grpc v1.41.0/go.mod h1:U3l9uK9J0sini8mHphKoXyaqDA/8VyGnDee1zzIUK6k= google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= google.golang.org/grpc v1.56.3 h1:8I4C0Yq1EjstUzUJzpcRVbuYA2mODtEmpWiQoN/b2nc= google.golang.org/grpc v1.56.3/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= @@ -1499,8 +1502,8 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0 google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= -google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= +google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/internal/auth/internal/controllers/trafficpermissions/controller_test.go b/internal/auth/internal/controllers/trafficpermissions/controller_test.go index dde95cb76fdf0..910a6fb88e71e 100644 --- a/internal/auth/internal/controllers/trafficpermissions/controller_test.go +++ b/internal/auth/internal/controllers/trafficpermissions/controller_test.go @@ -5,7 +5,6 @@ package trafficpermissions import ( "context" - "fmt" "testing" "github.com/stretchr/testify/require" @@ -16,13 +15,11 @@ import ( "github.com/hashicorp/consul/internal/auth/internal/types" "github.com/hashicorp/consul/internal/controller" "github.com/hashicorp/consul/internal/resource" - "github.com/hashicorp/consul/internal/resource/resourcetest" rtest "github.com/hashicorp/consul/internal/resource/resourcetest" pbauth "github.com/hashicorp/consul/proto-public/pbauth/v2beta1" "github.com/hashicorp/consul/proto-public/pbresource" "github.com/hashicorp/consul/proto/private/prototest" "github.com/hashicorp/consul/sdk/testutil" - "github.com/hashicorp/consul/version/versiontest" ) type controllerSuite struct { @@ -31,17 +28,13 @@ type controllerSuite struct { client *rtest.Client rt controller.Runtime - mapper *trafficpermissionsmapper.TrafficPermissionsMapper - reconciler *reconciler - tenancies []*pbresource.Tenancy - isEnterprise bool + mapper *trafficpermissionsmapper.TrafficPermissionsMapper + reconciler *reconciler } func (suite *controllerSuite) SetupTest() { - suite.isEnterprise = versiontest.IsEnterprise() - suite.tenancies = resourcetest.TestTenancies() suite.ctx = testutil.TestContext(suite.T()) - client := svctest.RunResourceServiceWithTenancies(suite.T(), types.Register) + client := svctest.RunResourceService(suite.T(), types.Register) suite.client = rtest.NewClient(client) suite.rt = controller.Runtime{ Client: suite.client, @@ -73,514 +66,371 @@ func (suite *controllerSuite) requireCTP(resource *pbresource.Resource, allowExp } func (suite *controllerSuite) TestReconcile_CTPCreate_NoReferencingTrafficPermissionsExist() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - wi := rtest.Resource(pbauth.WorkloadIdentityType, "wi1").WithTenancy(tenancy).Write(suite.T(), suite.client) - require.NotNil(suite.T(), wi) - id := rtest.Resource(pbauth.ComputedTrafficPermissionsType, wi.Id.Name).WithTenancy(tenancy).WithOwner(wi.Id).ID() - require.NotNil(suite.T(), id) - - err := suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: id}) - require.NoError(suite.T(), err) - - // Ensure that the CTP was created - ctp := suite.client.RequireResourceExists(suite.T(), id) - suite.requireCTP(ctp, []*pbauth.Permission{}, []*pbauth.Permission{}) - }) + wi := rtest.Resource(pbauth.WorkloadIdentityType, "wi1").Write(suite.T(), suite.client) + require.NotNil(suite.T(), wi) + id := rtest.Resource(pbauth.ComputedTrafficPermissionsType, wi.Id.Name).WithTenancy(resource.DefaultNamespacedTenancy()).WithOwner(wi.Id).ID() + require.NotNil(suite.T(), id) + + err := suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: id}) + require.NoError(suite.T(), err) + + // Ensure that the CTP was created + ctp := suite.client.RequireResourceExists(suite.T(), id) + suite.requireCTP(ctp, []*pbauth.Permission{}, []*pbauth.Permission{}) } func (suite *controllerSuite) TestReconcile_CTPCreate_ReferencingTrafficPermissionsExist() { // create dead-end traffic permissions - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - p1 := &pbauth.Permission{ - Sources: []*pbauth.Source{ - { - IdentityName: "foo", - Namespace: "default", - Partition: "default", - Peer: "local", - }}, - } - tp1 := rtest.Resource(pbauth.TrafficPermissionsType, "tp1").WithData(suite.T(), &pbauth.TrafficPermissions{ - Destination: &pbauth.Destination{ - IdentityName: "wi1", - }, - Action: pbauth.Action_ACTION_DENY, - Permissions: []*pbauth.Permission{p1}, - }). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - wi1ID := &pbresource.ID{ - Name: "wi1", - Type: pbauth.ComputedTrafficPermissionsType, - Tenancy: tp1.Id.Tenancy, - } - suite.requireTrafficPermissionsTracking(tp1, wi1ID) - p2 := &pbauth.Permission{ - Sources: []*pbauth.Source{ - { - IdentityName: "wi2", - Namespace: "default", - Partition: "default", - Peer: "local", - }}, - } - tp2 := rtest.Resource(pbauth.TrafficPermissionsType, "tp2").WithData(suite.T(), &pbauth.TrafficPermissions{ - Destination: &pbauth.Destination{ - IdentityName: "wi1", - }, - Action: pbauth.Action_ACTION_ALLOW, - Permissions: []*pbauth.Permission{p2}, - }). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - suite.requireTrafficPermissionsTracking(tp2, wi1ID) - - // create the workload identity that they reference - wi := rtest.Resource(pbauth.WorkloadIdentityType, "wi1").WithTenancy(tenancy).Write(suite.T(), suite.client) - id := rtest.Resource(pbauth.ComputedTrafficPermissionsType, wi.Id.Name).WithTenancy(tenancy).WithOwner(wi.Id).ID() - - err := suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: id}) - require.NoError(suite.T(), err) - - // Ensure that the CTP was created - ctp := suite.client.RequireResourceExists(suite.T(), id) - suite.requireCTP(ctp, []*pbauth.Permission{p2}, []*pbauth.Permission{p1}) - rtest.RequireOwner(suite.T(), ctp, wi.Id, true) - }) + p1 := &pbauth.Permission{ + Sources: []*pbauth.Source{ + { + IdentityName: "foo", + Namespace: "default", + Partition: "default", + Peer: "local", + }}, + } + tp1 := rtest.Resource(pbauth.TrafficPermissionsType, "tp1").WithData(suite.T(), &pbauth.TrafficPermissions{ + Destination: &pbauth.Destination{ + IdentityName: "wi1", + }, + Action: pbauth.Action_ACTION_DENY, + Permissions: []*pbauth.Permission{p1}, + }).Write(suite.T(), suite.client) + wi1ID := &pbresource.ID{ + Name: "wi1", + Type: pbauth.ComputedTrafficPermissionsType, + Tenancy: tp1.Id.Tenancy, + } + suite.requireTrafficPermissionsTracking(tp1, wi1ID) + p2 := &pbauth.Permission{ + Sources: []*pbauth.Source{ + { + IdentityName: "wi2", + Namespace: "default", + Partition: "default", + Peer: "local", + }}, + } + tp2 := rtest.Resource(pbauth.TrafficPermissionsType, "tp2").WithData(suite.T(), &pbauth.TrafficPermissions{ + Destination: &pbauth.Destination{ + IdentityName: "wi1", + }, + Action: pbauth.Action_ACTION_ALLOW, + Permissions: []*pbauth.Permission{p2}, + }).Write(suite.T(), suite.client) + suite.requireTrafficPermissionsTracking(tp2, wi1ID) + + // create the workload identity that they reference + wi := rtest.Resource(pbauth.WorkloadIdentityType, "wi1").Write(suite.T(), suite.client) + id := rtest.Resource(pbauth.ComputedTrafficPermissionsType, wi.Id.Name).WithTenancy(resource.DefaultNamespacedTenancy()).WithOwner(wi.Id).ID() + + err := suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: id}) + require.NoError(suite.T(), err) + + // Ensure that the CTP was created + ctp := suite.client.RequireResourceExists(suite.T(), id) + suite.requireCTP(ctp, []*pbauth.Permission{p2}, []*pbauth.Permission{p1}) + rtest.RequireOwner(suite.T(), ctp, wi.Id, true) } func (suite *controllerSuite) TestReconcile_WorkloadIdentityDelete_ReferencingTrafficPermissionsExist() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - p1 := &pbauth.Permission{ - Sources: []*pbauth.Source{ - { - IdentityName: "foo", - Namespace: "default", - Partition: "default", - Peer: "local", - }}, - } - tp1 := rtest.Resource(pbauth.TrafficPermissionsType, "tp1").WithData(suite.T(), &pbauth.TrafficPermissions{ - Destination: &pbauth.Destination{ - IdentityName: "wi1", - }, - Action: pbauth.Action_ACTION_DENY, - Permissions: []*pbauth.Permission{p1}, - }). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - wi1ID := &pbresource.ID{ - Name: "wi1", - Type: pbauth.ComputedTrafficPermissionsType, - Tenancy: tp1.Id.Tenancy, - } - suite.requireTrafficPermissionsTracking(tp1, wi1ID) - p2 := &pbauth.Permission{ - Sources: []*pbauth.Source{ - { - IdentityName: "wi2", - Namespace: "default", - Partition: "default", - Peer: "local", - }}, - } - tp2 := rtest.Resource(pbauth.TrafficPermissionsType, "tp2").WithData(suite.T(), &pbauth.TrafficPermissions{ - Destination: &pbauth.Destination{ - IdentityName: "wi1", - }, - Action: pbauth.Action_ACTION_ALLOW, - Permissions: []*pbauth.Permission{p2}, - }). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - suite.requireTrafficPermissionsTracking(tp2, wi1ID) - - // create the workload identity that they reference - wi := rtest.Resource(pbauth.WorkloadIdentityType, "wi1").WithTenancy(tenancy).Write(suite.T(), suite.client) - id := rtest.Resource(pbauth.ComputedTrafficPermissionsType, wi.Id.Name).WithTenancy(tenancy).WithOwner(wi.Id).ID() - - err := suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: id}) - require.NoError(suite.T(), err) - - // delete the workload identity - suite.client.MustDelete(suite.T(), wi.Id) - - // re-reconcile: should untrack the CTP - err = suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: id}) - require.NoError(suite.T(), err) - }) + p1 := &pbauth.Permission{ + Sources: []*pbauth.Source{ + { + IdentityName: "foo", + Namespace: "default", + Partition: "default", + Peer: "local", + }}, + } + tp1 := rtest.Resource(pbauth.TrafficPermissionsType, "tp1").WithData(suite.T(), &pbauth.TrafficPermissions{ + Destination: &pbauth.Destination{ + IdentityName: "wi1", + }, + Action: pbauth.Action_ACTION_DENY, + Permissions: []*pbauth.Permission{p1}, + }).Write(suite.T(), suite.client) + wi1ID := &pbresource.ID{ + Name: "wi1", + Type: pbauth.ComputedTrafficPermissionsType, + Tenancy: tp1.Id.Tenancy, + } + suite.requireTrafficPermissionsTracking(tp1, wi1ID) + p2 := &pbauth.Permission{ + Sources: []*pbauth.Source{ + { + IdentityName: "wi2", + Namespace: "default", + Partition: "default", + Peer: "local", + }}, + } + tp2 := rtest.Resource(pbauth.TrafficPermissionsType, "tp2").WithData(suite.T(), &pbauth.TrafficPermissions{ + Destination: &pbauth.Destination{ + IdentityName: "wi1", + }, + Action: pbauth.Action_ACTION_ALLOW, + Permissions: []*pbauth.Permission{p2}, + }).Write(suite.T(), suite.client) + suite.requireTrafficPermissionsTracking(tp2, wi1ID) + + // create the workload identity that they reference + wi := rtest.Resource(pbauth.WorkloadIdentityType, "wi1").Write(suite.T(), suite.client) + id := rtest.Resource(pbauth.ComputedTrafficPermissionsType, wi.Id.Name).WithTenancy(resource.DefaultNamespacedTenancy()).WithOwner(wi.Id).ID() + + err := suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: id}) + require.NoError(suite.T(), err) + + // delete the workload identity + suite.client.MustDelete(suite.T(), wi.Id) + + // re-reconcile: should untrack the CTP + err = suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: id}) + require.NoError(suite.T(), err) } func (suite *controllerSuite) TestReconcile_WorkloadIdentityDelete_NoReferencingTrafficPermissionsExist() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - // create the workload identity that they reference - wi := rtest.Resource(pbauth.WorkloadIdentityType, "wi1").WithTenancy(tenancy).Write(suite.T(), suite.client) - id := rtest.Resource(pbauth.ComputedTrafficPermissionsType, wi.Id.Name).WithTenancy(tenancy).WithOwner(wi.Id).ID() + // create the workload identity that they reference + wi := rtest.Resource(pbauth.WorkloadIdentityType, "wi1").Write(suite.T(), suite.client) + id := rtest.Resource(pbauth.ComputedTrafficPermissionsType, wi.Id.Name).WithTenancy(resource.DefaultNamespacedTenancy()).WithOwner(wi.Id).ID() - err := suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: id}) - require.NoError(suite.T(), err) + err := suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: id}) + require.NoError(suite.T(), err) - // delete the workload identity - suite.client.MustDelete(suite.T(), wi.Id) + // delete the workload identity + suite.client.MustDelete(suite.T(), wi.Id) - // re-reconcile: should untrack the CTP - err = suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: id}) - require.NoError(suite.T(), err) + // re-reconcile: should untrack the CTP + err = suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: id}) + require.NoError(suite.T(), err) - // there should not be any traffic permissions to compute - tps := suite.mapper.GetTrafficPermissionsForCTP(id) - require.Len(suite.T(), tps, 0) - }) + // there should not be any traffic permissions to compute + tps := suite.mapper.GetTrafficPermissionsForCTP(id) + require.Len(suite.T(), tps, 0) } func (suite *controllerSuite) TestReconcile_TrafficPermissionsCreate_DestinationWorkloadIdentityExists() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - // create the workload identity to be referenced - wi := rtest.Resource(pbauth.WorkloadIdentityType, "wi1").WithTenancy(tenancy).Write(suite.T(), suite.client) - id := rtest.Resource(pbauth.ComputedTrafficPermissionsType, wi.Id.Name).WithTenancy(tenancy).WithOwner(wi.Id).ID() - - err := suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: id}) - require.NoError(suite.T(), err) - - ctpResource := suite.client.RequireResourceExists(suite.T(), id) - assertCTPDefaultStatus(suite.T(), ctpResource, true) - - // create traffic permissions - p1 := &pbauth.Permission{ - Sources: []*pbauth.Source{ - { - IdentityName: "foo", - Namespace: "default", - Partition: "default", - Peer: "local", - }}, - } - tp1 := rtest.Resource(pbauth.TrafficPermissionsType, "tp1").WithTenancy(tenancy).WithData(suite.T(), &pbauth.TrafficPermissions{ - Destination: &pbauth.Destination{ - IdentityName: "wi1", - }, - Action: pbauth.Action_ACTION_DENY, - Permissions: []*pbauth.Permission{p1}, - }).Write(suite.T(), suite.client) - suite.requireTrafficPermissionsTracking(tp1, id) - - p2 := &pbauth.Permission{ - Sources: []*pbauth.Source{ - { - IdentityName: "wi2", - Namespace: "default", - Partition: "default", - Peer: "local", - }}, - } - tp2 := rtest.Resource(pbauth.TrafficPermissionsType, "tp2").WithTenancy(tenancy).WithData(suite.T(), &pbauth.TrafficPermissions{ - Destination: &pbauth.Destination{ - IdentityName: "wi1", - }, - Action: pbauth.Action_ACTION_ALLOW, - Permissions: []*pbauth.Permission{p2}, - }).Write(suite.T(), suite.client) - suite.requireTrafficPermissionsTracking(tp2, id) - - err = suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: id}) - require.NoError(suite.T(), err) - - // Ensure that the CTP was updated - ctpResource = suite.client.RequireResourceExists(suite.T(), id) - suite.requireCTP(ctpResource, []*pbauth.Permission{p2}, []*pbauth.Permission{p1}) - rtest.RequireOwner(suite.T(), ctpResource, wi.Id, true) - assertCTPDefaultStatus(suite.T(), ctpResource, false) - - // Add another TP - p3 := &pbauth.Permission{ - Sources: []*pbauth.Source{ - { - IdentityName: "wi3", - Namespace: "default", - Partition: "default", - Peer: "local", - }}, - } - tp3 := rtest.Resource(pbauth.TrafficPermissionsType, "tp3").WithTenancy(tenancy).WithData(suite.T(), &pbauth.TrafficPermissions{ - Destination: &pbauth.Destination{ - IdentityName: "wi1", - }, - Action: pbauth.Action_ACTION_DENY, - Permissions: []*pbauth.Permission{p3}, - }).Write(suite.T(), suite.client) - suite.requireTrafficPermissionsTracking(tp3, id) - - err = suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: id}) - require.NoError(suite.T(), err) - - // Ensure that the CTP was updated - ctpResource = suite.client.RequireResourceExists(suite.T(), id) - suite.requireCTP(ctpResource, []*pbauth.Permission{p2}, []*pbauth.Permission{p1, p3}) - rtest.RequireOwner(suite.T(), ctpResource, wi.Id, true) - assertCTPDefaultStatus(suite.T(), ctpResource, false) - - // Delete the traffic permissions without updating the caches. Ensure is default is right even when the caches contain stale data. - suite.client.MustDelete(suite.T(), tp1.Id) - suite.client.MustDelete(suite.T(), tp2.Id) - suite.client.MustDelete(suite.T(), tp3.Id) - - err = suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: id}) - require.NoError(suite.T(), err) - - ctpResource = suite.client.RequireResourceExists(suite.T(), id) - suite.requireCTP(ctpResource, []*pbauth.Permission{}, []*pbauth.Permission{}) - rtest.RequireOwner(suite.T(), ctpResource, wi.Id, true) - assertCTPDefaultStatus(suite.T(), ctpResource, true) - }) + // create the workload identity to be referenced + wi := rtest.Resource(pbauth.WorkloadIdentityType, "wi1").Write(suite.T(), suite.client) + id := rtest.Resource(pbauth.ComputedTrafficPermissionsType, wi.Id.Name).WithTenancy(resource.DefaultNamespacedTenancy()).WithOwner(wi.Id).ID() + + err := suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: id}) + require.NoError(suite.T(), err) + + ctpResource := suite.client.RequireResourceExists(suite.T(), id) + assertCTPDefaultStatus(suite.T(), ctpResource, true) + + // create traffic permissions + p1 := &pbauth.Permission{ + Sources: []*pbauth.Source{ + { + IdentityName: "foo", + Namespace: "default", + Partition: "default", + Peer: "local", + }}, + } + tp1 := rtest.Resource(pbauth.TrafficPermissionsType, "tp1").WithData(suite.T(), &pbauth.TrafficPermissions{ + Destination: &pbauth.Destination{ + IdentityName: "wi1", + }, + Action: pbauth.Action_ACTION_DENY, + Permissions: []*pbauth.Permission{p1}, + }).Write(suite.T(), suite.client) + suite.requireTrafficPermissionsTracking(tp1, id) + + p2 := &pbauth.Permission{ + Sources: []*pbauth.Source{ + { + IdentityName: "wi2", + Namespace: "default", + Partition: "default", + Peer: "local", + }}, + } + tp2 := rtest.Resource(pbauth.TrafficPermissionsType, "tp2").WithData(suite.T(), &pbauth.TrafficPermissions{ + Destination: &pbauth.Destination{ + IdentityName: "wi1", + }, + Action: pbauth.Action_ACTION_ALLOW, + Permissions: []*pbauth.Permission{p2}, + }).Write(suite.T(), suite.client) + suite.requireTrafficPermissionsTracking(tp2, id) + + err = suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: id}) + require.NoError(suite.T(), err) + + // Ensure that the CTP was updated + ctpResource = suite.client.RequireResourceExists(suite.T(), id) + suite.requireCTP(ctpResource, []*pbauth.Permission{p2}, []*pbauth.Permission{p1}) + rtest.RequireOwner(suite.T(), ctpResource, wi.Id, true) + assertCTPDefaultStatus(suite.T(), ctpResource, false) + + // Add another TP + p3 := &pbauth.Permission{ + Sources: []*pbauth.Source{ + { + IdentityName: "wi3", + Namespace: "default", + Partition: "default", + Peer: "local", + }}, + } + tp3 := rtest.Resource(pbauth.TrafficPermissionsType, "tp3").WithData(suite.T(), &pbauth.TrafficPermissions{ + Destination: &pbauth.Destination{ + IdentityName: "wi1", + }, + Action: pbauth.Action_ACTION_DENY, + Permissions: []*pbauth.Permission{p3}, + }).Write(suite.T(), suite.client) + suite.requireTrafficPermissionsTracking(tp3, id) + + err = suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: id}) + require.NoError(suite.T(), err) + + // Ensure that the CTP was updated + ctpResource = suite.client.RequireResourceExists(suite.T(), id) + suite.requireCTP(ctpResource, []*pbauth.Permission{p2}, []*pbauth.Permission{p1, p3}) + rtest.RequireOwner(suite.T(), ctpResource, wi.Id, true) + assertCTPDefaultStatus(suite.T(), ctpResource, false) + + // Delete the traffic permissions without updating the caches. Ensure is default is right even when the caches contain stale data. + suite.client.MustDelete(suite.T(), tp1.Id) + suite.client.MustDelete(suite.T(), tp2.Id) + suite.client.MustDelete(suite.T(), tp3.Id) + + err = suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: id}) + require.NoError(suite.T(), err) + + ctpResource = suite.client.RequireResourceExists(suite.T(), id) + suite.requireCTP(ctpResource, []*pbauth.Permission{}, []*pbauth.Permission{}) + rtest.RequireOwner(suite.T(), ctpResource, wi.Id, true) + assertCTPDefaultStatus(suite.T(), ctpResource, true) } func (suite *controllerSuite) TestReconcile_TrafficPermissionsDelete_DestinationWorkloadIdentityExists() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - // create the workload identity to be referenced - wi := rtest.Resource(pbauth.WorkloadIdentityType, "wi1").WithTenancy(tenancy).Write(suite.T(), suite.client) - id := rtest.Resource(pbauth.ComputedTrafficPermissionsType, wi.Id.Name).WithTenancy(tenancy).WithOwner(wi.Id).ID() - - err := suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: id}) - require.NoError(suite.T(), err) - - // create traffic permissions - p1 := &pbauth.Permission{ - Sources: []*pbauth.Source{ - { - IdentityName: "foo", - Namespace: "default", - Partition: "default", - Peer: "local", - }}, - } - tp1 := rtest.Resource(pbauth.TrafficPermissionsType, "tp1").WithData(suite.T(), &pbauth.TrafficPermissions{ - Destination: &pbauth.Destination{ - IdentityName: "wi1", - }, - Action: pbauth.Action_ACTION_DENY, - Permissions: []*pbauth.Permission{p1}, - }). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - suite.requireTrafficPermissionsTracking(tp1, id) - p2 := &pbauth.Permission{ - Sources: []*pbauth.Source{ - { - IdentityName: "wi2", - Namespace: "default", - Partition: "default", - Peer: "local", - }}, - } - tp2 := rtest.Resource(pbauth.TrafficPermissionsType, "tp2").WithData(suite.T(), &pbauth.TrafficPermissions{ - Destination: &pbauth.Destination{ - IdentityName: "wi1", - }, - Action: pbauth.Action_ACTION_ALLOW, - Permissions: []*pbauth.Permission{p2}, - }). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - suite.requireTrafficPermissionsTracking(tp2, id) - - err = suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: id}) - require.NoError(suite.T(), err) - - ctp := suite.client.RequireResourceExists(suite.T(), id) - suite.requireCTP(ctp, []*pbauth.Permission{p2}, []*pbauth.Permission{p1}) - rtest.RequireOwner(suite.T(), ctp, wi.Id, true) - - // Delete TP2 - suite.client.MustDelete(suite.T(), tp2.Id) - - err = suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: id}) - require.NoError(suite.T(), err) - - // Ensure that the CTP was updated - ctp = suite.client.RequireResourceExists(suite.T(), id) - suite.requireCTP(ctp, []*pbauth.Permission{}, []*pbauth.Permission{p1}) - - // Ensure TP2 is untracked - newTps := suite.mapper.GetTrafficPermissionsForCTP(ctp.Id) - require.Len(suite.T(), newTps, 1) - require.Equal(suite.T(), newTps[0].Name, tp1.Id.Name) - }) -} + // create the workload identity to be referenced + wi := rtest.Resource(pbauth.WorkloadIdentityType, "wi1").Write(suite.T(), suite.client) + id := rtest.Resource(pbauth.ComputedTrafficPermissionsType, wi.Id.Name).WithTenancy(resource.DefaultNamespacedTenancy()).WithOwner(wi.Id).ID() -func (suite *controllerSuite) TestReconcile_TrafficPermissionsDelete_DestinationWorkloadIdentityDoesNotExist() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - // create traffic permissions - p1 := &pbauth.Permission{ - Sources: []*pbauth.Source{ - { - IdentityName: "foo", - Namespace: "default", - Partition: "default", - Peer: "local", - }}, - } - tp1 := rtest.Resource(pbauth.TrafficPermissionsType, "tp1").WithData(suite.T(), &pbauth.TrafficPermissions{ - Destination: &pbauth.Destination{ - IdentityName: "wi1", - }, - Action: pbauth.Action_ACTION_DENY, - Permissions: []*pbauth.Permission{p1}, - }). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - wi1ID := &pbresource.ID{ - Name: "wi1", - Type: pbauth.ComputedTrafficPermissionsType, - Tenancy: tp1.Id.Tenancy, - } - suite.requireTrafficPermissionsTracking(tp1, wi1ID) - p2 := &pbauth.Permission{ - Sources: []*pbauth.Source{ - { - IdentityName: "wi2", - Namespace: "default", - Partition: "default", - Peer: "local", - }}, - } - tp2 := rtest.Resource(pbauth.TrafficPermissionsType, "tp2").WithData(suite.T(), &pbauth.TrafficPermissions{ - Destination: &pbauth.Destination{ - IdentityName: "wi1", - }, - Action: pbauth.Action_ACTION_ALLOW, - Permissions: []*pbauth.Permission{p2}, - }). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - suite.requireTrafficPermissionsTracking(tp2, wi1ID) - - // Delete TP2 - suite.client.MustDelete(suite.T(), tp2.Id) - - // Ensure that no CTPs exist - rsp, err := suite.client.List(suite.ctx, &pbresource.ListRequest{ - Type: pbauth.ComputedTrafficPermissionsType, - Tenancy: resource.DefaultNamespacedTenancy(), - }) - require.NoError(suite.T(), err) - require.Empty(suite.T(), rsp.Resources) - }) -} + err := suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: id}) + require.NoError(suite.T(), err) -func (suite *controllerSuite) TestControllerBasic() { - // TODO: refactor this - // In this test we check basic operations for a workload identity and referencing traffic permission - mgr := controller.NewManager(suite.client, suite.rt.Logger) - mgr.Register(Controller(suite.mapper)) - mgr.SetRaftLeader(true) - go mgr.Run(suite.ctx) + // create traffic permissions + p1 := &pbauth.Permission{ + Sources: []*pbauth.Source{ + { + IdentityName: "foo", + Namespace: "default", + Partition: "default", + Peer: "local", + }}, + } + tp1 := rtest.Resource(pbauth.TrafficPermissionsType, "tp1").WithData(suite.T(), &pbauth.TrafficPermissions{ + Destination: &pbauth.Destination{ + IdentityName: "wi1", + }, + Action: pbauth.Action_ACTION_DENY, + Permissions: []*pbauth.Permission{p1}, + }).Write(suite.T(), suite.client) + suite.requireTrafficPermissionsTracking(tp1, id) + p2 := &pbauth.Permission{ + Sources: []*pbauth.Source{ + { + IdentityName: "wi2", + Namespace: "default", + Partition: "default", + Peer: "local", + }}, + } + tp2 := rtest.Resource(pbauth.TrafficPermissionsType, "tp2").WithData(suite.T(), &pbauth.TrafficPermissions{ + Destination: &pbauth.Destination{ + IdentityName: "wi1", + }, + Action: pbauth.Action_ACTION_ALLOW, + Permissions: []*pbauth.Permission{p2}, + }).Write(suite.T(), suite.client) + suite.requireTrafficPermissionsTracking(tp2, id) - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - // Add a workload identity - workloadIdentity := rtest.Resource(pbauth.WorkloadIdentityType, "wi1").WithTenancy(tenancy).Write(suite.T(), suite.client) + err = suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: id}) + require.NoError(suite.T(), err) - // Wait for the controller to record that the CTP has been computed - res := suite.client.WaitForReconciliation(suite.T(), resource.ReplaceType(pbauth.ComputedTrafficPermissionsType, workloadIdentity.Id), StatusKey) - // Check that the status was updated - rtest.RequireStatusCondition(suite.T(), res, StatusKey, ConditionComputed("wi1", true)) + ctp := suite.client.RequireResourceExists(suite.T(), id) + suite.requireCTP(ctp, []*pbauth.Permission{p2}, []*pbauth.Permission{p1}) + rtest.RequireOwner(suite.T(), ctp, wi.Id, true) - // Check that the CTP resource exists and contains no permissions - ctpID := rtest.Resource(pbauth.ComputedTrafficPermissionsType, "wi1").WithTenancy(tenancy).ID() - ctpObject := suite.client.RequireResourceExists(suite.T(), ctpID) - suite.requireCTP(ctpObject, nil, nil) + // Delete TP2 + suite.client.MustDelete(suite.T(), tp2.Id) - // add a traffic permission that references wi1 - p1 := &pbauth.Permission{ - Sources: []*pbauth.Source{{ - IdentityName: "wi2", + err = suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: id}) + require.NoError(suite.T(), err) + + // Ensure that the CTP was updated + ctp = suite.client.RequireResourceExists(suite.T(), id) + suite.requireCTP(ctp, []*pbauth.Permission{}, []*pbauth.Permission{p1}) + + // Ensure TP2 is untracked + newTps := suite.mapper.GetTrafficPermissionsForCTP(ctp.Id) + require.Len(suite.T(), newTps, 1) + require.Equal(suite.T(), newTps[0].Name, tp1.Id.Name) +} + +func (suite *controllerSuite) TestReconcile_TrafficPermissionsDelete_DestinationWorkloadIdentityDoesNotExist() { + // create traffic permissions + p1 := &pbauth.Permission{ + Sources: []*pbauth.Source{ + { + IdentityName: "foo", Namespace: "default", Partition: "default", Peer: "local", }}, - DestinationRules: nil, - } - tp1 := rtest.Resource(pbauth.TrafficPermissionsType, "tp1").WithData(suite.T(), &pbauth.TrafficPermissions{ - Destination: &pbauth.Destination{IdentityName: "wi1"}, - Action: pbauth.Action_ACTION_ALLOW, - Permissions: []*pbauth.Permission{p1}, - }). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - suite.client.RequireResourceExists(suite.T(), tp1.Id) - // Wait for the controller to record that the CTP has been re-computed - suite.client.WaitForReconciliation(suite.T(), resource.ReplaceType(pbauth.ComputedTrafficPermissionsType, workloadIdentity.Id), StatusKey) - // Check that the ctp has been regenerated - ctpObject = suite.client.WaitForNewVersion(suite.T(), ctpID, ctpObject.Version) - rtest.RequireStatusCondition(suite.T(), ctpObject, StatusKey, ConditionComputed("wi1", false)) - // check wi1 - suite.requireCTP(ctpObject, []*pbauth.Permission{p1}, nil) - - // add a traffic permission that references wi2 - p2 := &pbauth.Permission{ - Sources: []*pbauth.Source{{ - IdentityName: "wi1", + } + tp1 := rtest.Resource(pbauth.TrafficPermissionsType, "tp1").WithData(suite.T(), &pbauth.TrafficPermissions{ + Destination: &pbauth.Destination{ + IdentityName: "wi1", + }, + Action: pbauth.Action_ACTION_DENY, + Permissions: []*pbauth.Permission{p1}, + }).Write(suite.T(), suite.client) + wi1ID := &pbresource.ID{ + Name: "wi1", + Type: pbauth.ComputedTrafficPermissionsType, + Tenancy: tp1.Id.Tenancy, + } + suite.requireTrafficPermissionsTracking(tp1, wi1ID) + p2 := &pbauth.Permission{ + Sources: []*pbauth.Source{ + { + IdentityName: "wi2", Namespace: "default", Partition: "default", Peer: "local", }}, - DestinationRules: nil, - } - tp2 := rtest.Resource(pbauth.TrafficPermissionsType, "tp2").WithData(suite.T(), &pbauth.TrafficPermissions{ - Destination: &pbauth.Destination{IdentityName: "wi2"}, - Action: pbauth.Action_ACTION_ALLOW, - Permissions: []*pbauth.Permission{p2}, - }). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - suite.client.RequireResourceExists(suite.T(), tp2.Id) - // check wi1 is the same - ctpObject = suite.client.RequireResourceExists(suite.T(), ctpID) - suite.requireCTP(ctpObject, []*pbauth.Permission{p1}, nil) - // check no ctp2 - ctpID2 := rtest.Resource(pbauth.ComputedTrafficPermissionsType, "wi2").WithTenancy(tenancy).ID() - suite.client.RequireResourceNotFound(suite.T(), ctpID2) - - // delete tp1 - suite.client.MustDelete(suite.T(), tp1.Id) - suite.client.WaitForDeletion(suite.T(), tp1.Id) - // check wi1 has no permissions - ctpObject = suite.client.WaitForNewVersion(suite.T(), ctpID, ctpObject.Version) - suite.requireCTP(ctpObject, nil, nil) - - // edit tp2 to point to wi1 - rtest.Resource(pbauth.TrafficPermissionsType, "tp2").WithData(suite.T(), &pbauth.TrafficPermissions{ - Destination: &pbauth.Destination{IdentityName: "wi1"}, - Action: pbauth.Action_ACTION_ALLOW, - Permissions: []*pbauth.Permission{p2}, - }). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - // check wi1 has tp2's permissions - ctpObject = suite.client.WaitForNewVersion(suite.T(), ctpID, ctpObject.Version) - suite.requireCTP(ctpObject, []*pbauth.Permission{p2}, nil) - // check no ctp2 - ctpID2 = rtest.Resource(pbauth.ComputedTrafficPermissionsType, "wi2").WithTenancy(tenancy).ID() - suite.client.RequireResourceNotFound(suite.T(), ctpID2) + } + tp2 := rtest.Resource(pbauth.TrafficPermissionsType, "tp2").WithData(suite.T(), &pbauth.TrafficPermissions{ + Destination: &pbauth.Destination{ + IdentityName: "wi1", + }, + Action: pbauth.Action_ACTION_ALLOW, + Permissions: []*pbauth.Permission{p2}, + }).Write(suite.T(), suite.client) + suite.requireTrafficPermissionsTracking(tp2, wi1ID) + + // Delete TP2 + suite.client.MustDelete(suite.T(), tp2.Id) + + // Ensure that no CTPs exist + rsp, err := suite.client.List(suite.ctx, &pbresource.ListRequest{ + Type: pbauth.ComputedTrafficPermissionsType, + Tenancy: resource.DefaultNamespacedTenancy(), }) + require.NoError(suite.T(), err) + require.Empty(suite.T(), rsp.Resources) } -// This test tests the behaviour of the Controller when dealing with near identical -// resources present in different tenancies. On a high level here is what the test does -// -// 1. Register two workload identities with the same name in two different tenancies (default+default, foo+bar) -// 2. Register traffic permissions separately in both of those tenants and verify if the CTPs -// get computed as expected. -// 3. Delete the traffic permission present in the default namespace and partition and verify the -// changes occurred to the CTP in the same tenant. -// 4. Delete the traffic permission present in the custom namespace and partition and verify the -// changes occurred to the CTP in the same tenant. -// 5. Add back the traffic permission tp2 to the default namespace and partition and verify the -// computed CTP in the same tenant -func (suite *controllerSuite) TestControllerBasicWithMultipleTenancyLevels() { - if !suite.isEnterprise { - suite.T().Skip("this test should only run against the enterprise build") - } - +func (suite *controllerSuite) TestControllerBasic() { // TODO: refactor this // In this test we check basic operations for a workload identity and referencing traffic permission mgr := controller.NewManager(suite.client, suite.rt.Logger) @@ -588,44 +438,25 @@ func (suite *controllerSuite) TestControllerBasicWithMultipleTenancyLevels() { mgr.SetRaftLeader(true) go mgr.Run(suite.ctx) - customTenancy := &pbresource.Tenancy{Partition: "foo", Namespace: "bar"} - - // Add a workload identity in a default namespace and partition - workloadIdentity1 := rtest.Resource(pbauth.WorkloadIdentityType, "wi1"). - WithTenancy(resource.DefaultNamespacedTenancy()). - Write(suite.T(), suite.client) + // Add a workload identity + workloadIdentity := rtest.Resource(pbauth.WorkloadIdentityType, "wi1").Write(suite.T(), suite.client) // Wait for the controller to record that the CTP has been computed - res := suite.client.WaitForReconciliation(suite.T(), resource.ReplaceType(pbauth.ComputedTrafficPermissionsType, workloadIdentity1.Id), StatusKey) + res := suite.client.WaitForReconciliation(suite.T(), resource.ReplaceType(pbauth.ComputedTrafficPermissionsType, workloadIdentity.Id), StatusKey) // Check that the status was updated rtest.RequireStatusCondition(suite.T(), res, StatusKey, ConditionComputed("wi1", true)) // Check that the CTP resource exists and contains no permissions - ctpID1 := rtest.Resource(pbauth.ComputedTrafficPermissionsType, "wi1").WithTenancy(resource.DefaultNamespacedTenancy()).ID() - ctpObject1 := suite.client.RequireResourceExists(suite.T(), ctpID1) - suite.requireCTP(ctpObject1, nil, nil) - - // Add a workload identity with the same name in a custom namespace and partition - workloadIdentity2 := rtest.Resource(pbauth.WorkloadIdentityType, "wi1"). - WithTenancy(customTenancy). - Write(suite.T(), suite.client) + ctpID := rtest.Resource(pbauth.ComputedTrafficPermissionsType, "wi1").ID() + ctpObject := suite.client.RequireResourceExists(suite.T(), ctpID) + suite.requireCTP(ctpObject, nil, nil) - // Wait for the controller to record that the CTP has been computed - res = suite.client.WaitForReconciliation(suite.T(), resource.ReplaceType(pbauth.ComputedTrafficPermissionsType, workloadIdentity2.Id), StatusKey) - // Check that the status was updated - rtest.RequireStatusCondition(suite.T(), res, StatusKey, ConditionComputed("wi1", true)) - - // Check that the CTP resource exists and contains no permissions - ctpID2 := rtest.Resource(pbauth.ComputedTrafficPermissionsType, "wi1").WithTenancy(customTenancy).ID() - ctpObject2 := suite.client.RequireResourceExists(suite.T(), ctpID2) - suite.requireCTP(ctpObject2, nil, nil) - - // add a traffic permission that references wi1 present in the default namespace and partition + // add a traffic permission that references wi1 p1 := &pbauth.Permission{ Sources: []*pbauth.Source{{ IdentityName: "wi2", - Namespace: "bar", - Partition: "foo", + Namespace: "default", + Partition: "default", Peer: "local", }}, DestinationRules: nil, @@ -634,22 +465,20 @@ func (suite *controllerSuite) TestControllerBasicWithMultipleTenancyLevels() { Destination: &pbauth.Destination{IdentityName: "wi1"}, Action: pbauth.Action_ACTION_ALLOW, Permissions: []*pbauth.Permission{p1}, - }). - WithTenancy(resource.DefaultNamespacedTenancy()). - Write(suite.T(), suite.client) + }).Write(suite.T(), suite.client) suite.client.RequireResourceExists(suite.T(), tp1.Id) // Wait for the controller to record that the CTP has been re-computed - suite.client.WaitForReconciliation(suite.T(), resource.ReplaceType(pbauth.ComputedTrafficPermissionsType, workloadIdentity1.Id), StatusKey) + suite.client.WaitForReconciliation(suite.T(), resource.ReplaceType(pbauth.ComputedTrafficPermissionsType, workloadIdentity.Id), StatusKey) // Check that the ctp has been regenerated - ctpObject1 = suite.client.WaitForNewVersion(suite.T(), ctpID1, ctpObject1.Version) - rtest.RequireStatusCondition(suite.T(), ctpObject1, StatusKey, ConditionComputed("wi1", false)) + ctpObject = suite.client.WaitForNewVersion(suite.T(), ctpID, ctpObject.Version) + rtest.RequireStatusCondition(suite.T(), ctpObject, StatusKey, ConditionComputed("wi1", false)) // check wi1 - suite.requireCTP(ctpObject1, []*pbauth.Permission{p1}, nil) + suite.requireCTP(ctpObject, []*pbauth.Permission{p1}, nil) - // add a traffic permission that references wi1 present in the custom namespace and partition + // add a traffic permission that references wi2 p2 := &pbauth.Permission{ Sources: []*pbauth.Source{{ - IdentityName: "wi2", + IdentityName: "wi1", Namespace: "default", Partition: "default", Peer: "local", @@ -657,47 +486,37 @@ func (suite *controllerSuite) TestControllerBasicWithMultipleTenancyLevels() { DestinationRules: nil, } tp2 := rtest.Resource(pbauth.TrafficPermissionsType, "tp2").WithData(suite.T(), &pbauth.TrafficPermissions{ - Destination: &pbauth.Destination{IdentityName: "wi1"}, + Destination: &pbauth.Destination{IdentityName: "wi2"}, Action: pbauth.Action_ACTION_ALLOW, Permissions: []*pbauth.Permission{p2}, - }). - WithTenancy(customTenancy). - Write(suite.T(), suite.client) + }).Write(suite.T(), suite.client) suite.client.RequireResourceExists(suite.T(), tp2.Id) - // Wait for the controller to record that the CTP has been re-computed - suite.client.WaitForReconciliation(suite.T(), resource.ReplaceType(pbauth.ComputedTrafficPermissionsType, workloadIdentity2.Id), StatusKey) - // Check that the ctp has been regenerated - ctpObject2 = suite.client.WaitForNewVersion(suite.T(), ctpID2, ctpObject2.Version) - rtest.RequireStatusCondition(suite.T(), ctpObject2, StatusKey, ConditionComputed("wi1", false)) - // check wi1 - suite.requireCTP(ctpObject2, []*pbauth.Permission{p2}, nil) + // check wi1 is the same + ctpObject = suite.client.RequireResourceExists(suite.T(), ctpID) + suite.requireCTP(ctpObject, []*pbauth.Permission{p1}, nil) + // check no ctp2 + ctpID2 := rtest.Resource(pbauth.ComputedTrafficPermissionsType, "wi2").ID() + suite.client.RequireResourceNotFound(suite.T(), ctpID2) // delete tp1 suite.client.MustDelete(suite.T(), tp1.Id) suite.client.WaitForDeletion(suite.T(), tp1.Id) - // check that the CTP in default tenancy has no permissions - ctpObject1 = suite.client.WaitForNewVersion(suite.T(), ctpID1, ctpObject1.Version) - suite.requireCTP(ctpObject1, nil, nil) + // check wi1 has no permissions + ctpObject = suite.client.WaitForNewVersion(suite.T(), ctpID, ctpObject.Version) + suite.requireCTP(ctpObject, nil, nil) - // delete tp2 in the custom partition and namespace - suite.client.MustDelete(suite.T(), tp2.Id) - suite.client.WaitForDeletion(suite.T(), tp2.Id) - // check that the CTP in custom tenancy has no permissions - ctpObject2 = suite.client.WaitForNewVersion(suite.T(), ctpID2, ctpObject2.Version) - suite.requireCTP(ctpObject2, nil, nil) - - // Add tp2 to point to wi1 in the default partition and namespace - tp2 = rtest.Resource(pbauth.TrafficPermissionsType, "tp2").WithData(suite.T(), &pbauth.TrafficPermissions{ + // edit tp2 to point to wi1 + rtest.Resource(pbauth.TrafficPermissionsType, "tp2").WithData(suite.T(), &pbauth.TrafficPermissions{ Destination: &pbauth.Destination{IdentityName: "wi1"}, Action: pbauth.Action_ACTION_ALLOW, Permissions: []*pbauth.Permission{p2}, - }). - WithTenancy(resource.DefaultNamespacedTenancy()). - Write(suite.T(), suite.client) - suite.client.RequireResourceExists(suite.T(), tp2.Id) - // check wi1 in the default partition and namespace has tp2's permissions - ctpObject1 = suite.client.WaitForNewVersion(suite.T(), ctpID1, ctpObject1.Version) - suite.requireCTP(ctpObject1, []*pbauth.Permission{p2}, nil) + }).Write(suite.T(), suite.client) + // check wi1 has tp2's permissions + ctpObject = suite.client.WaitForNewVersion(suite.T(), ctpID, ctpObject.Version) + suite.requireCTP(ctpObject, []*pbauth.Permission{p2}, nil) + // check no ctp2 + ctpID2 = rtest.Resource(pbauth.ComputedTrafficPermissionsType, "wi2").ID() + suite.client.RequireResourceNotFound(suite.T(), ctpID2) } func (suite *controllerSuite) TestControllerMultipleTrafficPermissions() { @@ -709,173 +528,147 @@ func (suite *controllerSuite) TestControllerMultipleTrafficPermissions() { mgr.SetRaftLeader(true) go mgr.Run(suite.ctx) - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - wi1ID := &pbresource.ID{ - Name: "wi1", - Type: pbauth.ComputedTrafficPermissionsType, - Tenancy: tenancy, - } - // add tp1 and tp2 - p1 := &pbauth.Permission{ - Sources: []*pbauth.Source{{ - IdentityName: "wi2", - Namespace: tenancy.Namespace, - Partition: tenancy.Partition, - Peer: "local", - }}, - DestinationRules: nil, - } - tp1 := rtest.Resource(pbauth.TrafficPermissionsType, "tp1").WithData(suite.T(), &pbauth.TrafficPermissions{ - Destination: &pbauth.Destination{IdentityName: "wi1"}, - Action: pbauth.Action_ACTION_ALLOW, - Permissions: []*pbauth.Permission{p1}, - }). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - suite.client.RequireResourceExists(suite.T(), tp1.Id) - suite.requireTrafficPermissionsTracking(tp1, wi1ID) - p2 := &pbauth.Permission{ - Sources: []*pbauth.Source{{ - IdentityName: "wi3", - Namespace: tenancy.Namespace, - Partition: tenancy.Partition, - Peer: "local", - }}, - DestinationRules: nil, - } - tp2 := rtest.Resource(pbauth.TrafficPermissionsType, "tp2").WithData(suite.T(), &pbauth.TrafficPermissions{ - Destination: &pbauth.Destination{IdentityName: "wi1"}, - Action: pbauth.Action_ACTION_ALLOW, - Permissions: []*pbauth.Permission{p2}, - }). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - suite.client.RequireResourceExists(suite.T(), tp2.Id) - suite.requireTrafficPermissionsTracking(tp1, wi1ID) - - // Add a workload identity - workloadIdentity := rtest.Resource(pbauth.WorkloadIdentityType, "wi1").WithTenancy(tenancy).Write(suite.T(), suite.client) - ctpID := resource.ReplaceType(pbauth.ComputedTrafficPermissionsType, workloadIdentity.Id) - // Wait for the controller to record that the CTP has been computed - res := suite.client.WaitForReconciliation(suite.T(), ctpID, StatusKey) - rtest.RequireStatusCondition(suite.T(), res, StatusKey, ConditionComputed("wi1", false)) - // check ctp1 has tp1 and tp2 - ctpObject := suite.client.RequireResourceExists(suite.T(), res.Id) - suite.requireCTP(ctpObject, []*pbauth.Permission{p1, p2}, nil) - - // add tp3 - p3 := &pbauth.Permission{ - Sources: []*pbauth.Source{{ - IdentityName: "wi4", - Namespace: tenancy.Namespace, - Partition: tenancy.Partition, - Peer: "local", - }}, - DestinationRules: nil, - } - tp3 := rtest.Resource(pbauth.TrafficPermissionsType, "tp3").WithData(suite.T(), &pbauth.TrafficPermissions{ - Destination: &pbauth.Destination{IdentityName: "wi1"}, - Action: pbauth.Action_ACTION_DENY, - Permissions: []*pbauth.Permission{p3}, - }). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - suite.client.RequireResourceExists(suite.T(), tp3.Id) - // check ctp1 has tp3 - ctpObject = suite.client.WaitForReconciliation(suite.T(), ctpObject.Id, StatusKey) - ctpObject = suite.client.WaitForNewVersion(suite.T(), ctpObject.Id, ctpObject.Version) - suite.requireCTP(ctpObject, []*pbauth.Permission{p1, p2}, []*pbauth.Permission{p3}) - - // delete ctp - suite.client.MustDelete(suite.T(), ctpObject.Id) - suite.client.WaitForDeletion(suite.T(), ctpObject.Id) - // check ctp regenerated, has all permissions - res = suite.client.WaitForReconciliation(suite.T(), ctpID, StatusKey) - rtest.RequireStatusCondition(suite.T(), res, StatusKey, ConditionComputed("wi1", false)) - ctpObject = suite.client.RequireResourceExists(suite.T(), res.Id) - suite.requireCTP(ctpObject, []*pbauth.Permission{p1, p2}, []*pbauth.Permission{p3}) - - // delete wi1 - suite.client.MustDelete(suite.T(), workloadIdentity.Id) - suite.client.WaitForDeletion(suite.T(), workloadIdentity.Id) - - // recreate wi1 - rtest.Resource(pbauth.WorkloadIdentityType, "wi1").WithTenancy(tenancy).Write(suite.T(), suite.client) - // check ctp regenerated, has all permissions - res = suite.client.WaitForReconciliation(suite.T(), ctpID, StatusKey) - rtest.RequireStatusCondition(suite.T(), res, StatusKey, ConditionComputed("wi1", false)) - ctpObject = suite.client.RequireResourceExists(suite.T(), res.Id) - suite.requireCTP(ctpObject, []*pbauth.Permission{p1, p2}, []*pbauth.Permission{p3}) - - // delete tp3 - suite.client.MustDelete(suite.T(), tp3.Id) - suite.client.WaitForDeletion(suite.T(), tp3.Id) - suite.client.RequireResourceNotFound(suite.T(), tp3.Id) - // check ctp1 has tp1 and tp2, and not tp3 - res = suite.client.WaitForReconciliation(suite.T(), ctpObject.Id, StatusKey) - ctpObject = suite.client.WaitForNewVersion(suite.T(), res.Id, ctpObject.Version) - suite.requireCTP(ctpObject, []*pbauth.Permission{p1, p2}, nil) - - // add wi2 - workloadIdentity2 := rtest.Resource(pbauth.WorkloadIdentityType, "wi2").WithTenancy(tenancy).Write(suite.T(), suite.client) - // Wait for the controller to record that the CTP has been computed - res2 := suite.client.WaitForReconciliation(suite.T(), resource.ReplaceType(pbauth.ComputedTrafficPermissionsType, workloadIdentity2.Id), StatusKey) - rtest.RequireStatusCondition(suite.T(), res2, StatusKey, ConditionComputed("wi2", false)) - // check ctp2 has no permissions - ctpObject2 := suite.client.RequireResourceExists(suite.T(), res2.Id) - suite.requireCTP(ctpObject2, nil, nil) - - // edit all traffic permissions to point to wi2 - tp1 = rtest.Resource(pbauth.TrafficPermissionsType, "tp1").WithData(suite.T(), &pbauth.TrafficPermissions{ - Destination: &pbauth.Destination{IdentityName: "wi2"}, - Action: pbauth.Action_ACTION_ALLOW, - Permissions: []*pbauth.Permission{p1}, - }). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - tp2 = rtest.Resource(pbauth.TrafficPermissionsType, "tp2").WithData(suite.T(), &pbauth.TrafficPermissions{ - Destination: &pbauth.Destination{IdentityName: "wi2"}, - Action: pbauth.Action_ACTION_ALLOW, - Permissions: []*pbauth.Permission{p2}, - }). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - tp3 = rtest.Resource(pbauth.TrafficPermissionsType, "tp3").WithData(suite.T(), &pbauth.TrafficPermissions{ - Destination: &pbauth.Destination{IdentityName: "wi2"}, - Action: pbauth.Action_ACTION_DENY, - Permissions: []*pbauth.Permission{p3}, - }). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - suite.client.RequireResourceExists(suite.T(), tp1.Id) - suite.client.RequireResourceExists(suite.T(), tp2.Id) - suite.client.RequireResourceExists(suite.T(), tp3.Id) - - // check wi2 has updated with all permissions after 6 reconciles - ctpObject2 = suite.client.WaitForReconciliation(suite.T(), ctpObject2.Id, StatusKey) - res2 = suite.client.WaitForReconciliation(suite.T(), ctpObject2.Id, StatusKey) - suite.client.WaitForResourceState(suite.T(), res2.Id, func(t rtest.T, res *pbresource.Resource) { - suite.requireCTP(res, []*pbauth.Permission{p1, p2}, []*pbauth.Permission{p3}) - }) - // check wi1 has no permissions after 6 reconciles - ctpObject = suite.client.WaitForReconciliation(suite.T(), ctpObject.Id, StatusKey) - res = suite.client.WaitForReconciliation(suite.T(), ctpObject.Id, StatusKey) - suite.client.WaitForResourceState(suite.T(), res.Id, func(t rtest.T, res *pbresource.Resource) { - suite.requireCTP(res, nil, nil) - }) - }) -} + wi1ID := &pbresource.ID{ + Name: "wi1", + Type: pbauth.ComputedTrafficPermissionsType, + Tenancy: resource.DefaultNamespacedTenancy(), + } + // add tp1 and tp2 + p1 := &pbauth.Permission{ + Sources: []*pbauth.Source{{ + IdentityName: "wi2", + Namespace: "default", + Partition: "default", + Peer: "local", + }}, + DestinationRules: nil, + } + tp1 := rtest.Resource(pbauth.TrafficPermissionsType, "tp1").WithData(suite.T(), &pbauth.TrafficPermissions{ + Destination: &pbauth.Destination{IdentityName: "wi1"}, + Action: pbauth.Action_ACTION_ALLOW, + Permissions: []*pbauth.Permission{p1}, + }).Write(suite.T(), suite.client) + suite.client.RequireResourceExists(suite.T(), tp1.Id) + suite.requireTrafficPermissionsTracking(tp1, wi1ID) + p2 := &pbauth.Permission{ + Sources: []*pbauth.Source{{ + IdentityName: "wi3", + Namespace: "default", + Partition: "default", + Peer: "local", + }}, + DestinationRules: nil, + } + tp2 := rtest.Resource(pbauth.TrafficPermissionsType, "tp2").WithData(suite.T(), &pbauth.TrafficPermissions{ + Destination: &pbauth.Destination{IdentityName: "wi1"}, + Action: pbauth.Action_ACTION_ALLOW, + Permissions: []*pbauth.Permission{p2}, + }).Write(suite.T(), suite.client) + suite.client.RequireResourceExists(suite.T(), tp2.Id) + suite.requireTrafficPermissionsTracking(tp1, wi1ID) -func (suite *controllerSuite) runTestCaseWithTenancies(testFunc func(*pbresource.Tenancy)) { - for _, tenancy := range suite.tenancies { - suite.Run(suite.appendTenancyInfo(tenancy), func() { - testFunc(tenancy) - }) + // Add a workload identity + workloadIdentity := rtest.Resource(pbauth.WorkloadIdentityType, "wi1").Write(suite.T(), suite.client) + ctpID := resource.ReplaceType(pbauth.ComputedTrafficPermissionsType, workloadIdentity.Id) + // Wait for the controller to record that the CTP has been computed + res := suite.client.WaitForReconciliation(suite.T(), ctpID, StatusKey) + rtest.RequireStatusCondition(suite.T(), res, StatusKey, ConditionComputed("wi1", false)) + // check ctp1 has tp1 and tp2 + ctpObject := suite.client.RequireResourceExists(suite.T(), res.Id) + suite.requireCTP(ctpObject, []*pbauth.Permission{p1, p2}, nil) + + // add tp3 + p3 := &pbauth.Permission{ + Sources: []*pbauth.Source{{ + IdentityName: "wi4", + Namespace: "default", + Partition: "default", + Peer: "local", + }}, + DestinationRules: nil, } -} + tp3 := rtest.Resource(pbauth.TrafficPermissionsType, "tp3").WithData(suite.T(), &pbauth.TrafficPermissions{ + Destination: &pbauth.Destination{IdentityName: "wi1"}, + Action: pbauth.Action_ACTION_DENY, + Permissions: []*pbauth.Permission{p3}, + }).Write(suite.T(), suite.client) + suite.client.RequireResourceExists(suite.T(), tp3.Id) + // check ctp1 has tp3 + ctpObject = suite.client.WaitForReconciliation(suite.T(), ctpObject.Id, StatusKey) + ctpObject = suite.client.WaitForNewVersion(suite.T(), ctpObject.Id, ctpObject.Version) + suite.requireCTP(ctpObject, []*pbauth.Permission{p1, p2}, []*pbauth.Permission{p3}) + + // delete ctp + suite.client.MustDelete(suite.T(), ctpObject.Id) + suite.client.WaitForDeletion(suite.T(), ctpObject.Id) + // check ctp regenerated, has all permissions + res = suite.client.WaitForReconciliation(suite.T(), ctpID, StatusKey) + rtest.RequireStatusCondition(suite.T(), res, StatusKey, ConditionComputed("wi1", false)) + ctpObject = suite.client.RequireResourceExists(suite.T(), res.Id) + suite.requireCTP(ctpObject, []*pbauth.Permission{p1, p2}, []*pbauth.Permission{p3}) + + // delete wi1 + suite.client.MustDelete(suite.T(), workloadIdentity.Id) + suite.client.WaitForDeletion(suite.T(), workloadIdentity.Id) + + // recreate wi1 + rtest.Resource(pbauth.WorkloadIdentityType, "wi1").Write(suite.T(), suite.client) + // check ctp regenerated, has all permissions + res = suite.client.WaitForReconciliation(suite.T(), ctpID, StatusKey) + rtest.RequireStatusCondition(suite.T(), res, StatusKey, ConditionComputed("wi1", false)) + ctpObject = suite.client.RequireResourceExists(suite.T(), res.Id) + suite.requireCTP(ctpObject, []*pbauth.Permission{p1, p2}, []*pbauth.Permission{p3}) + + // delete tp3 + suite.client.MustDelete(suite.T(), tp3.Id) + suite.client.WaitForDeletion(suite.T(), tp3.Id) + suite.client.RequireResourceNotFound(suite.T(), tp3.Id) + // check ctp1 has tp1 and tp2, and not tp3 + res = suite.client.WaitForReconciliation(suite.T(), ctpObject.Id, StatusKey) + ctpObject = suite.client.WaitForNewVersion(suite.T(), res.Id, ctpObject.Version) + suite.requireCTP(ctpObject, []*pbauth.Permission{p1, p2}, nil) + + // add wi2 + workloadIdentity2 := rtest.Resource(pbauth.WorkloadIdentityType, "wi2").Write(suite.T(), suite.client) + // Wait for the controller to record that the CTP has been computed + res2 := suite.client.WaitForReconciliation(suite.T(), resource.ReplaceType(pbauth.ComputedTrafficPermissionsType, workloadIdentity2.Id), StatusKey) + rtest.RequireStatusCondition(suite.T(), res2, StatusKey, ConditionComputed("wi2", false)) + // check ctp2 has no permissions + ctpObject2 := suite.client.RequireResourceExists(suite.T(), res2.Id) + suite.requireCTP(ctpObject2, nil, nil) + + // edit all traffic permissions to point to wi2 + tp1 = rtest.Resource(pbauth.TrafficPermissionsType, "tp1").WithData(suite.T(), &pbauth.TrafficPermissions{ + Destination: &pbauth.Destination{IdentityName: "wi2"}, + Action: pbauth.Action_ACTION_ALLOW, + Permissions: []*pbauth.Permission{p1}, + }).Write(suite.T(), suite.client) + tp2 = rtest.Resource(pbauth.TrafficPermissionsType, "tp2").WithData(suite.T(), &pbauth.TrafficPermissions{ + Destination: &pbauth.Destination{IdentityName: "wi2"}, + Action: pbauth.Action_ACTION_ALLOW, + Permissions: []*pbauth.Permission{p2}, + }).Write(suite.T(), suite.client) + tp3 = rtest.Resource(pbauth.TrafficPermissionsType, "tp3").WithData(suite.T(), &pbauth.TrafficPermissions{ + Destination: &pbauth.Destination{IdentityName: "wi2"}, + Action: pbauth.Action_ACTION_DENY, + Permissions: []*pbauth.Permission{p3}, + }).Write(suite.T(), suite.client) + suite.client.RequireResourceExists(suite.T(), tp1.Id) + suite.client.RequireResourceExists(suite.T(), tp2.Id) + suite.client.RequireResourceExists(suite.T(), tp3.Id) -func (suite *controllerSuite) appendTenancyInfo(tenancy *pbresource.Tenancy) string { - return fmt.Sprintf("%s_Namespace_%s_Partition", tenancy.Namespace, tenancy.Partition) + // check wi2 has updated with all permissions after 6 reconciles + ctpObject2 = suite.client.WaitForReconciliation(suite.T(), ctpObject2.Id, StatusKey) + res2 = suite.client.WaitForReconciliation(suite.T(), ctpObject2.Id, StatusKey) + suite.client.WaitForResourceState(suite.T(), res2.Id, func(t rtest.T, res *pbresource.Resource) { + suite.requireCTP(res, []*pbauth.Permission{p1, p2}, []*pbauth.Permission{p3}) + }) + // check wi1 has no permissions after 6 reconciles + ctpObject = suite.client.WaitForReconciliation(suite.T(), ctpObject.Id, StatusKey) + res = suite.client.WaitForReconciliation(suite.T(), ctpObject.Id, StatusKey) + suite.client.WaitForResourceState(suite.T(), res.Id, func(t rtest.T, res *pbresource.Resource) { + suite.requireCTP(res, nil, nil) + }) } func TestController(t *testing.T) { diff --git a/internal/auth/internal/types/computed_traffic_permissions.go b/internal/auth/internal/types/computed_traffic_permissions.go index 800d2a8fb66f4..0a32e13d29267 100644 --- a/internal/auth/internal/types/computed_traffic_permissions.go +++ b/internal/auth/internal/types/computed_traffic_permissions.go @@ -12,8 +12,6 @@ import ( "github.com/hashicorp/consul/proto-public/pbresource" ) -type DecodedComputedTrafficPermissions = resource.DecodedResource[*pbauth.ComputedTrafficPermissions] - func RegisterComputedTrafficPermission(r resource.Registry) { r.Register(resource.Registration{ Type: pbauth.ComputedTrafficPermissionsType, @@ -28,12 +26,16 @@ func RegisterComputedTrafficPermission(r resource.Registry) { }) } -var ValidateComputedTrafficPermissions = resource.DecodeAndValidate(validateComputedTrafficPermissions) +func ValidateComputedTrafficPermissions(res *pbresource.Resource) error { + var ctp pbauth.ComputedTrafficPermissions + + if err := res.Data.UnmarshalTo(&ctp); err != nil { + return resource.NewErrDataParse(&ctp, err) + } -func validateComputedTrafficPermissions(res *DecodedComputedTrafficPermissions) error { var merr error - for i, permission := range res.Data.AllowPermissions { + for i, permission := range ctp.AllowPermissions { wrapErr := func(err error) error { return resource.ErrInvalidListElement{ Name: "allow_permissions", @@ -46,7 +48,7 @@ func validateComputedTrafficPermissions(res *DecodedComputedTrafficPermissions) } } - for i, permission := range res.Data.DenyPermissions { + for i, permission := range ctp.DenyPermissions { wrapErr := func(err error) error { return resource.ErrInvalidListElement{ Name: "deny_permissions", diff --git a/internal/auth/internal/types/traffic_permissions.go b/internal/auth/internal/types/traffic_permissions.go index acf2655371697..84a30a46e2f60 100644 --- a/internal/auth/internal/types/traffic_permissions.go +++ b/internal/auth/internal/types/traffic_permissions.go @@ -12,15 +12,13 @@ import ( "github.com/hashicorp/consul/proto-public/pbresource" ) -type DecodedTrafficPermissions = resource.DecodedResource[*pbauth.TrafficPermissions] - func RegisterTrafficPermissions(r resource.Registry) { r.Register(resource.Registration{ Type: pbauth.TrafficPermissionsType, Proto: &pbauth.TrafficPermissions{}, ACLs: &resource.ACLHooks{ - Read: resource.DecodeAndAuthorizeRead(aclReadHookTrafficPermissions), - Write: resource.DecodeAndAuthorizeWrite(aclWriteHookTrafficPermissions), + Read: aclReadHookTrafficPermissions, + Write: aclWriteHookTrafficPermissions, List: resource.NoOpACLListHook, }, Validate: ValidateTrafficPermissions, @@ -29,12 +27,16 @@ func RegisterTrafficPermissions(r resource.Registry) { }) } -var MutateTrafficPermissions = resource.DecodeAndMutate(mutateTrafficPermissions) +func MutateTrafficPermissions(res *pbresource.Resource) error { + var tp pbauth.TrafficPermissions + + if err := res.Data.UnmarshalTo(&tp); err != nil { + return resource.NewErrDataParse(&tp, err) + } -func mutateTrafficPermissions(res *DecodedTrafficPermissions) (bool, error) { var changed bool - for _, p := range res.Data.Permissions { + for _, p := range tp.Permissions { for _, s := range p.Sources { if updated := normalizedTenancyForSource(s, res.Id.Tenancy); updated { changed = true @@ -42,7 +44,11 @@ func mutateTrafficPermissions(res *DecodedTrafficPermissions) (bool, error) { } } - return changed, nil + if !changed { + return nil + } + + return res.Data.MarshalFrom(&tp) } func normalizedTenancyForSource(src *pbauth.Source, parentTenancy *pbresource.Tenancy) bool { @@ -104,13 +110,17 @@ func firstNonEmptyString(a, b, c string) (string, bool) { return c, true } -var ValidateTrafficPermissions = resource.DecodeAndValidate(validateTrafficPermissions) +func ValidateTrafficPermissions(res *pbresource.Resource) error { + var tp pbauth.TrafficPermissions + + if err := res.Data.UnmarshalTo(&tp); err != nil { + return resource.NewErrDataParse(&tp, err) + } -func validateTrafficPermissions(res *DecodedTrafficPermissions) error { var merr error // enumcover:pbauth.Action - switch res.Data.Action { + switch tp.Action { case pbauth.Action_ACTION_ALLOW: case pbauth.Action_ACTION_DENY: case pbauth.Action_ACTION_UNSPECIFIED: @@ -122,14 +132,14 @@ func validateTrafficPermissions(res *DecodedTrafficPermissions) error { }) } - if res.Data.Destination == nil || (len(res.Data.Destination.IdentityName) == 0) { + if tp.Destination == nil || (len(tp.Destination.IdentityName) == 0) { merr = multierror.Append(merr, resource.ErrInvalidField{ Name: "data.destination", Wrapped: resource.ErrEmpty, }) } // Validate permissions - for i, permission := range res.Data.Permissions { + for i, permission := range tp.Permissions { wrapErr := func(err error) error { return resource.ErrInvalidListElement{ Name: "permissions", @@ -275,10 +285,30 @@ func isLocalPeer(p string) bool { return p == "local" || p == "" } -func aclReadHookTrafficPermissions(authorizer acl.Authorizer, authzContext *acl.AuthorizerContext, res *DecodedTrafficPermissions) error { - return authorizer.ToAllowAuthorizer().TrafficPermissionsReadAllowed(res.Data.Destination.IdentityName, authzContext) +func aclReadHookTrafficPermissions(authorizer acl.Authorizer, authzContext *acl.AuthorizerContext, _ *pbresource.ID, res *pbresource.Resource) error { + if res == nil { + return resource.ErrNeedResource + } + return authorizeDestination(res, func(dest string) error { + return authorizer.ToAllowAuthorizer().TrafficPermissionsReadAllowed(dest, authzContext) + }) } -func aclWriteHookTrafficPermissions(authorizer acl.Authorizer, authzContext *acl.AuthorizerContext, res *DecodedTrafficPermissions) error { - return authorizer.ToAllowAuthorizer().TrafficPermissionsWriteAllowed(res.Data.Destination.IdentityName, authzContext) +func aclWriteHookTrafficPermissions(authorizer acl.Authorizer, authzContext *acl.AuthorizerContext, res *pbresource.Resource) error { + return authorizeDestination(res, func(dest string) error { + return authorizer.ToAllowAuthorizer().TrafficPermissionsWriteAllowed(dest, authzContext) + }) +} + +func authorizeDestination(res *pbresource.Resource, intentionAllowed func(string) error) error { + tp, err := resource.Decode[*pbauth.TrafficPermissions](res) + if err != nil { + return err + } + // Check intention:x permissions for identity + err = intentionAllowed(tp.Data.Destination.IdentityName) + if err != nil { + return err + } + return nil } diff --git a/internal/auth/internal/types/workload_identity.go b/internal/auth/internal/types/workload_identity.go index a15fd5bf5b2dd..17334e66099ef 100644 --- a/internal/auth/internal/types/workload_identity.go +++ b/internal/auth/internal/types/workload_identity.go @@ -10,8 +10,6 @@ import ( "github.com/hashicorp/consul/proto-public/pbresource" ) -type DecodedWorkloadIdentity = resource.DecodedResource[*pbauth.WorkloadIdentity] - func RegisterWorkloadIdentity(r resource.Registry) { r.Register(resource.Registration{ Type: pbauth.WorkloadIdentityType, @@ -22,17 +20,10 @@ func RegisterWorkloadIdentity(r resource.Registry) { Write: aclWriteHookWorkloadIdentity, List: resource.NoOpACLListHook, }, - Validate: ValidateWorkloadIdentity, + Validate: nil, }) } -var ValidateWorkloadIdentity = resource.DecodeAndValidate(validateWorkloadIdentity) - -func validateWorkloadIdentity(res *DecodedWorkloadIdentity) error { - // currently the WorkloadIdentity type has no fields. - return nil -} - func aclReadHookWorkloadIdentity( authorizer acl.Authorizer, authzCtx *acl.AuthorizerContext, diff --git a/internal/auth/internal/types/workload_identity_test.go b/internal/auth/internal/types/workload_identity_test.go index 19ed4cbeea87e..8dfb22bc74a2e 100644 --- a/internal/auth/internal/types/workload_identity_test.go +++ b/internal/auth/internal/types/workload_identity_test.go @@ -144,13 +144,3 @@ func TestWorkloadIdentityACLs(t *testing.T) { }) } } - -func TestWorkloadIdentity_ParseError(t *testing.T) { - rsc := resourcetest.Resource(pbauth.WorkloadIdentityType, "example"). - WithData(t, &pbauth.TrafficPermissions{}). - Build() - - err := ValidateWorkloadIdentity(rsc) - var parseErr resource.ErrDataParse - require.ErrorAs(t, err, &parseErr) -} diff --git a/internal/catalog/catalogtest/test_integration_v2beta1.go b/internal/catalog/catalogtest/test_integration_v2beta1.go index a5ee1d90a0c16..6d5c5854d7b00 100644 --- a/internal/catalog/catalogtest/test_integration_v2beta1.go +++ b/internal/catalog/catalogtest/test_integration_v2beta1.go @@ -26,7 +26,7 @@ var ( testData embed.FS ) -// RunCatalogV2Beta1IntegrationTest will push up a bunch of catalog related data and then +// RunCatalogV1Alpha1IntegrationTest will push up a bunch of catalog related data and then // verify that all the expected reconciliations happened correctly. This test is // intended to exercise a large swathe of behavior of the overall catalog package. // Besides just controller reconciliation behavior, the intent is also to verify diff --git a/internal/catalog/internal/controllers/endpoints/controller_test.go b/internal/catalog/internal/controllers/endpoints/controller_test.go index 6bf54a143591a..5a0155ef76837 100644 --- a/internal/catalog/internal/controllers/endpoints/controller_test.go +++ b/internal/catalog/internal/controllers/endpoints/controller_test.go @@ -5,7 +5,6 @@ package endpoints import ( "context" - "fmt" "testing" "github.com/stretchr/testify/require" @@ -16,7 +15,6 @@ import ( "github.com/hashicorp/consul/internal/catalog/internal/types" "github.com/hashicorp/consul/internal/controller" "github.com/hashicorp/consul/internal/resource/mappers/selectiontracker" - "github.com/hashicorp/consul/internal/resource/resourcetest" rtest "github.com/hashicorp/consul/internal/resource/resourcetest" pbcatalog "github.com/hashicorp/consul/proto-public/pbcatalog/v2beta1" "github.com/hashicorp/consul/proto-public/pbresource" @@ -443,13 +441,11 @@ type controllerSuite struct { tracker *selectiontracker.WorkloadSelectionTracker reconciler *serviceEndpointsReconciler - tenancies []*pbresource.Tenancy } func (suite *controllerSuite) SetupTest() { - suite.tenancies = resourcetest.TestTenancies() suite.ctx = testutil.TestContext(suite.T()) - client := svctest.RunResourceServiceWithTenancies(suite.T(), types.Register) + client := svctest.RunResourceService(suite.T(), types.Register) suite.rt = controller.Runtime{ Client: client, Logger: testutil.Logger(suite.T()), @@ -482,28 +478,25 @@ func (suite *controllerSuite) TestReconcile_ServiceNotFound() { // generate a workload resource to use for checking if it maps // to a service endpoints object + workload := rtest.Resource(pbcatalog.WorkloadType, "foo").Build() - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - workload := rtest.Resource(pbcatalog.WorkloadType, "foo").WithTenancy(tenancy).Build() + // ensure that the tracker knows about the service prior to + // calling reconcile so that we can ensure it removes tracking + id := rtest.Resource(pbcatalog.ServiceEndpointsType, "not-found").ID() + suite.tracker.TrackIDForSelector(id, &pbcatalog.WorkloadSelector{Prefixes: []string{""}}) - // ensure that the tracker knows about the service prior to - // calling reconcile so that we can ensure it removes tracking - id := rtest.Resource(pbcatalog.ServiceEndpointsType, "not-found").WithTenancy(tenancy).ID() - suite.tracker.TrackIDForSelector(id, &pbcatalog.WorkloadSelector{Prefixes: []string{""}}) + // verify that mapping the workload to service endpoints returns a + // non-empty list prior to reconciliation which should remove the + // tracking. + suite.requireTracking(workload, id) - // verify that mapping the workload to service endpoints returns a - // non-empty list prior to reconciliation which should remove the - // tracking. - suite.requireTracking(workload, id) - - // Because the endpoints don't exist, this reconcile call should - // cause tracking of the endpoints to be removed - err := suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: id}) - require.NoError(suite.T(), err) + // Because the endpoints don't exist, this reconcile call should + // cause tracking of the endpoints to be removed + err := suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: id}) + require.NoError(suite.T(), err) - // Now ensure that the tracking was removed - suite.requireTracking(workload) - }) + // Now ensure that the tracking was removed + suite.requireTracking(workload) } func (suite *controllerSuite) TestReconcile_NoSelector_NoEndpoints() { @@ -512,23 +505,20 @@ func (suite *controllerSuite) TestReconcile_NoSelector_NoEndpoints() { // managed. Additionally, with no endpoints pre-existing it will // not attempt to delete them. - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - service := rtest.Resource(pbcatalog.ServiceType, "test"). - WithTenancy(tenancy). - WithData(suite.T(), &pbcatalog.Service{ - Ports: []*pbcatalog.ServicePort{ - {TargetPort: "http", Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, - }, - }). - Write(suite.T(), suite.client) + service := rtest.Resource(pbcatalog.ServiceType, "test"). + WithData(suite.T(), &pbcatalog.Service{ + Ports: []*pbcatalog.ServicePort{ + {TargetPort: "http", Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, + }, + }). + Write(suite.T(), suite.client) - endpointsID := rtest.Resource(pbcatalog.ServiceEndpointsType, "test").WithTenancy(tenancy).ID() + endpointsID := rtest.Resource(pbcatalog.ServiceEndpointsType, "test").ID() - err := suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: endpointsID}) - require.NoError(suite.T(), err) + err := suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: endpointsID}) + require.NoError(suite.T(), err) - suite.client.RequireStatusCondition(suite.T(), service.Id, StatusKey, ConditionUnmanaged) - }) + suite.client.RequireStatusCondition(suite.T(), service.Id, StatusKey, ConditionUnmanaged) } func (suite *controllerSuite) TestReconcile_NoSelector_ManagedEndpoints() { @@ -536,30 +526,26 @@ func (suite *controllerSuite) TestReconcile_NoSelector_ManagedEndpoints() { // to unmanaged endpoints for a service, any already generated managed endpoints // get deleted. - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - service := rtest.Resource(pbcatalog.ServiceType, "test"). - WithTenancy(tenancy). - WithData(suite.T(), &pbcatalog.Service{ - Ports: []*pbcatalog.ServicePort{ - {TargetPort: "http", Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, - }, - }). - Write(suite.T(), suite.client) - - endpoints := rtest.Resource(pbcatalog.ServiceEndpointsType, "test"). - WithTenancy(tenancy). - WithData(suite.T(), &pbcatalog.ServiceEndpoints{}). - // this marks these endpoints as under management - WithMeta(endpointsMetaManagedBy, StatusKey). - Write(suite.T(), suite.client) - - err := suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: endpoints.Id}) - require.NoError(suite.T(), err) - // the status should indicate the services endpoints are not being managed - suite.client.RequireStatusCondition(suite.T(), service.Id, StatusKey, ConditionUnmanaged) - // endpoints under management should be deleted - suite.client.RequireResourceNotFound(suite.T(), endpoints.Id) - }) + service := rtest.Resource(pbcatalog.ServiceType, "test"). + WithData(suite.T(), &pbcatalog.Service{ + Ports: []*pbcatalog.ServicePort{ + {TargetPort: "http", Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, + }, + }). + Write(suite.T(), suite.client) + + endpoints := rtest.Resource(pbcatalog.ServiceEndpointsType, "test"). + WithData(suite.T(), &pbcatalog.ServiceEndpoints{}). + // this marks these endpoints as under management + WithMeta(endpointsMetaManagedBy, StatusKey). + Write(suite.T(), suite.client) + + err := suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: endpoints.Id}) + require.NoError(suite.T(), err) + // the status should indicate the services endpoints are not being managed + suite.client.RequireStatusCondition(suite.T(), service.Id, StatusKey, ConditionUnmanaged) + // endpoints under management should be deleted + suite.client.RequireResourceNotFound(suite.T(), endpoints.Id) } func (suite *controllerSuite) TestReconcile_NoSelector_UnmanagedEndpoints() { @@ -567,73 +553,65 @@ func (suite *controllerSuite) TestReconcile_NoSelector_UnmanagedEndpoints() { // doesn't have its endpoints managed, that we do not delete any unmanaged // ServiceEndpoints resource that the user would have manually written. - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - service := rtest.Resource(pbcatalog.ServiceType, "test"). - WithTenancy(tenancy). - WithData(suite.T(), &pbcatalog.Service{ - Ports: []*pbcatalog.ServicePort{ - {TargetPort: "http", Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, - }, - }). - Write(suite.T(), suite.client) - - endpoints := rtest.Resource(pbcatalog.ServiceEndpointsType, "test"). - WithTenancy(tenancy). - WithData(suite.T(), &pbcatalog.ServiceEndpoints{}). - Write(suite.T(), suite.client) - - err := suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: endpoints.Id}) - require.NoError(suite.T(), err) - // the status should indicate the services endpoints are not being managed - suite.client.RequireStatusCondition(suite.T(), service.Id, StatusKey, ConditionUnmanaged) - // unmanaged endpoints should not be deleted when the service is unmanaged - suite.client.RequireResourceExists(suite.T(), endpoints.Id) - }) + service := rtest.Resource(pbcatalog.ServiceType, "test"). + WithData(suite.T(), &pbcatalog.Service{ + Ports: []*pbcatalog.ServicePort{ + {TargetPort: "http", Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, + }, + }). + Write(suite.T(), suite.client) + + endpoints := rtest.Resource(pbcatalog.ServiceEndpointsType, "test"). + WithData(suite.T(), &pbcatalog.ServiceEndpoints{}). + Write(suite.T(), suite.client) + + err := suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: endpoints.Id}) + require.NoError(suite.T(), err) + // the status should indicate the services endpoints are not being managed + suite.client.RequireStatusCondition(suite.T(), service.Id, StatusKey, ConditionUnmanaged) + // unmanaged endpoints should not be deleted when the service is unmanaged + suite.client.RequireResourceExists(suite.T(), endpoints.Id) } func (suite *controllerSuite) TestReconcile_Managed_NoPreviousEndpoints() { // This test's purpose is to ensure the managed endpoint generation occurs // as expected when there are no pre-existing endpoints. - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - service := rtest.Resource(pbcatalog.ServiceType, "test"). - WithTenancy(tenancy). - WithData(suite.T(), &pbcatalog.Service{ - Workloads: &pbcatalog.WorkloadSelector{ - Prefixes: []string{""}, - }, - Ports: []*pbcatalog.ServicePort{ - {TargetPort: "http", Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, - }, - }). - Write(suite.T(), suite.client) + service := rtest.Resource(pbcatalog.ServiceType, "test"). + WithData(suite.T(), &pbcatalog.Service{ + Workloads: &pbcatalog.WorkloadSelector{ + Prefixes: []string{""}, + }, + Ports: []*pbcatalog.ServicePort{ + {TargetPort: "http", Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, + }, + }). + Write(suite.T(), suite.client) - endpointsID := rtest.Resource(pbcatalog.ServiceEndpointsType, "test").WithTenancy(tenancy).ID() + endpointsID := rtest.Resource(pbcatalog.ServiceEndpointsType, "test").ID() - rtest.Resource(pbcatalog.WorkloadType, "test-workload"). - WithTenancy(tenancy). - WithData(suite.T(), &pbcatalog.Workload{ - Addresses: []*pbcatalog.WorkloadAddress{{Host: "127.0.0.1"}}, - Ports: map[string]*pbcatalog.WorkloadPort{ - "http": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, - }, - }). - Write(suite.T(), suite.client) + rtest.Resource(pbcatalog.WorkloadType, "test-workload"). + WithData(suite.T(), &pbcatalog.Workload{ + Addresses: []*pbcatalog.WorkloadAddress{{Host: "127.0.0.1"}}, + Ports: map[string]*pbcatalog.WorkloadPort{ + "http": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, + }, + }). + Write(suite.T(), suite.client) - err := suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: endpointsID}) - require.NoError(suite.T(), err) + err := suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: endpointsID}) + require.NoError(suite.T(), err) - // Verify that the services status has been set to indicate endpoints are automatically managed. - suite.client.RequireStatusCondition(suite.T(), service.Id, StatusKey, ConditionManaged) + // Verify that the services status has been set to indicate endpoints are automatically managed. + suite.client.RequireStatusCondition(suite.T(), service.Id, StatusKey, ConditionManaged) - // The service endpoints metadata should include our tag to indcate it was generated by this controller - res := suite.client.RequireResourceMeta(suite.T(), endpointsID, endpointsMetaManagedBy, StatusKey) + // The service endpoints metadata should include our tag to indcate it was generated by this controller + res := suite.client.RequireResourceMeta(suite.T(), endpointsID, endpointsMetaManagedBy, StatusKey) - var endpoints pbcatalog.ServiceEndpoints - err = res.Data.UnmarshalTo(&endpoints) - require.NoError(suite.T(), err) - require.Len(suite.T(), endpoints.Endpoints, 1) - }) + var endpoints pbcatalog.ServiceEndpoints + err = res.Data.UnmarshalTo(&endpoints) + require.NoError(suite.T(), err) + require.Len(suite.T(), endpoints.Endpoints, 1) // We are not going to retest that the workloads to endpoints conversion process // The length check should be sufficient to prove the endpoints are being // converted. The unit tests for the workloadsToEndpoints functions prove that @@ -644,46 +622,41 @@ func (suite *controllerSuite) TestReconcile_Managed_ExistingEndpoints() { // This test's purpose is to ensure that when the current set of endpoints // differs from any prior set of endpoints that the resource gets rewritten. - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - service := rtest.Resource(pbcatalog.ServiceType, "test"). - WithTenancy(tenancy). - WithData(suite.T(), &pbcatalog.Service{ - Workloads: &pbcatalog.WorkloadSelector{ - Prefixes: []string{""}, - }, - Ports: []*pbcatalog.ServicePort{ - {TargetPort: "http", Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, - }, - }). - Write(suite.T(), suite.client) - - endpoints := rtest.Resource(pbcatalog.ServiceEndpointsType, "test"). - WithTenancy(tenancy). - WithData(suite.T(), &pbcatalog.ServiceEndpoints{}). - WithOwner(service.Id). - Write(suite.T(), suite.client) - - rtest.Resource(pbcatalog.WorkloadType, "test-workload"). - WithTenancy(tenancy). - WithData(suite.T(), &pbcatalog.Workload{ - Addresses: []*pbcatalog.WorkloadAddress{{Host: "127.0.0.1"}}, - Ports: map[string]*pbcatalog.WorkloadPort{ - "http": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, - }, - }). - Write(suite.T(), suite.client) + service := rtest.Resource(pbcatalog.ServiceType, "test"). + WithData(suite.T(), &pbcatalog.Service{ + Workloads: &pbcatalog.WorkloadSelector{ + Prefixes: []string{""}, + }, + Ports: []*pbcatalog.ServicePort{ + {TargetPort: "http", Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, + }, + }). + Write(suite.T(), suite.client) - err := suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: endpoints.Id}) - require.NoError(suite.T(), err) + endpoints := rtest.Resource(pbcatalog.ServiceEndpointsType, "test"). + WithData(suite.T(), &pbcatalog.ServiceEndpoints{}). + WithOwner(service.Id). + Write(suite.T(), suite.client) - suite.client.RequireStatusCondition(suite.T(), service.Id, StatusKey, ConditionManaged) - res := suite.client.RequireResourceMeta(suite.T(), endpoints.Id, endpointsMetaManagedBy, StatusKey) + rtest.Resource(pbcatalog.WorkloadType, "test-workload"). + WithData(suite.T(), &pbcatalog.Workload{ + Addresses: []*pbcatalog.WorkloadAddress{{Host: "127.0.0.1"}}, + Ports: map[string]*pbcatalog.WorkloadPort{ + "http": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, + }, + }). + Write(suite.T(), suite.client) - var newEndpoints pbcatalog.ServiceEndpoints - err = res.Data.UnmarshalTo(&newEndpoints) - require.NoError(suite.T(), err) - require.Len(suite.T(), newEndpoints.Endpoints, 1) - }) + err := suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: endpoints.Id}) + require.NoError(suite.T(), err) + + suite.client.RequireStatusCondition(suite.T(), service.Id, StatusKey, ConditionManaged) + res := suite.client.RequireResourceMeta(suite.T(), endpoints.Id, endpointsMetaManagedBy, StatusKey) + + var newEndpoints pbcatalog.ServiceEndpoints + err = res.Data.UnmarshalTo(&newEndpoints) + require.NoError(suite.T(), err) + require.Len(suite.T(), newEndpoints.Endpoints, 1) } func (suite *controllerSuite) TestController() { @@ -700,202 +673,184 @@ func (suite *controllerSuite) TestController() { mgr.SetRaftLeader(true) go mgr.Run(suite.ctx) - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - // Add a service - there are no workloads so an empty endpoints - // object should be created. - service := rtest.Resource(pbcatalog.ServiceType, "api"). - WithTenancy(tenancy). - WithData(suite.T(), &pbcatalog.Service{ - Workloads: &pbcatalog.WorkloadSelector{ - Prefixes: []string{"api-"}, - }, - Ports: []*pbcatalog.ServicePort{ - {TargetPort: "http", Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, - }, - }). - Write(suite.T(), suite.client) - - // Wait for the controller to record that the endpoints are being managed - res := suite.client.WaitForReconciliation(suite.T(), service.Id, StatusKey) - // Check that the services status was updated accordingly - rtest.RequireStatusCondition(suite.T(), res, StatusKey, ConditionManaged) - rtest.RequireStatusCondition(suite.T(), res, StatusKey, ConditionIdentitiesNotFound) - - // Check that the endpoints resource exists and contains 0 endpoints - endpointsID := rtest.Resource(pbcatalog.ServiceEndpointsType, "api").WithTenancy(tenancy).ID() - endpoints := suite.client.RequireResourceExists(suite.T(), endpointsID) - suite.requireEndpoints(endpoints) - - // Now add a workload that would be selected by the service. Leave - // the workload in a state where its health has not been reconciled - workload := rtest.Resource(pbcatalog.WorkloadType, "api-1"). - WithTenancy(tenancy). - WithData(suite.T(), &pbcatalog.Workload{ - Addresses: []*pbcatalog.WorkloadAddress{{Host: "127.0.0.1"}}, - Ports: map[string]*pbcatalog.WorkloadPort{ - "http": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, - "grpc": {Port: 8081, Protocol: pbcatalog.Protocol_PROTOCOL_GRPC}, - }, - Identity: "api", - }). - Write(suite.T(), suite.client) - - suite.client.WaitForStatusCondition(suite.T(), service.Id, StatusKey, - ConditionIdentitiesFound([]string{"api"})) - - // Wait for the endpoints to be regenerated - endpoints = suite.client.WaitForNewVersion(suite.T(), endpointsID, endpoints.Version) - - // Verify that the generated endpoints now contain the workload - suite.requireEndpoints(endpoints, &pbcatalog.Endpoint{ - TargetRef: workload.Id, - Addresses: []*pbcatalog.WorkloadAddress{ - {Host: "127.0.0.1", Ports: []string{"http"}}, + // Add a service - there are no workloads so an empty endpoints + // object should be created. + service := rtest.Resource(pbcatalog.ServiceType, "api"). + WithData(suite.T(), &pbcatalog.Service{ + Workloads: &pbcatalog.WorkloadSelector{ + Prefixes: []string{"api-"}, + }, + Ports: []*pbcatalog.ServicePort{ + {TargetPort: "http", Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, }, + }). + Write(suite.T(), suite.client) + + // Wait for the controller to record that the endpoints are being managed + res := suite.client.WaitForReconciliation(suite.T(), service.Id, StatusKey) + // Check that the services status was updated accordingly + rtest.RequireStatusCondition(suite.T(), res, StatusKey, ConditionManaged) + rtest.RequireStatusCondition(suite.T(), res, StatusKey, ConditionIdentitiesNotFound) + + // Check that the endpoints resource exists and contains 0 endpoints + endpointsID := rtest.Resource(pbcatalog.ServiceEndpointsType, "api").ID() + endpoints := suite.client.RequireResourceExists(suite.T(), endpointsID) + suite.requireEndpoints(endpoints) + + // Now add a workload that would be selected by the service. Leave + // the workload in a state where its health has not been reconciled + workload := rtest.Resource(pbcatalog.WorkloadType, "api-1"). + WithData(suite.T(), &pbcatalog.Workload{ + Addresses: []*pbcatalog.WorkloadAddress{{Host: "127.0.0.1"}}, Ports: map[string]*pbcatalog.WorkloadPort{ "http": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, + "grpc": {Port: 8081, Protocol: pbcatalog.Protocol_PROTOCOL_GRPC}, }, - HealthStatus: pbcatalog.Health_HEALTH_CRITICAL, - Identity: "api", - }) + Identity: "api", + }). + Write(suite.T(), suite.client) - // Update the health status of the workload - suite.client.WriteStatus(suite.ctx, &pbresource.WriteStatusRequest{ - Id: workload.Id, - Key: workloadhealth.StatusKey, - Status: &pbresource.Status{ - ObservedGeneration: workload.Generation, - Conditions: []*pbresource.Condition{ - { - Type: workloadhealth.StatusConditionHealthy, - State: pbresource.Condition_STATE_TRUE, - Reason: "HEALTH_PASSING", - }, + suite.client.WaitForStatusCondition(suite.T(), service.Id, StatusKey, + ConditionIdentitiesFound([]string{"api"})) + + // Wait for the endpoints to be regenerated + endpoints = suite.client.WaitForNewVersion(suite.T(), endpointsID, endpoints.Version) + + // Verify that the generated endpoints now contain the workload + suite.requireEndpoints(endpoints, &pbcatalog.Endpoint{ + TargetRef: workload.Id, + Addresses: []*pbcatalog.WorkloadAddress{ + {Host: "127.0.0.1", Ports: []string{"http"}}, + }, + Ports: map[string]*pbcatalog.WorkloadPort{ + "http": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, + }, + HealthStatus: pbcatalog.Health_HEALTH_CRITICAL, + Identity: "api", + }) + + // Update the health status of the workload + suite.client.WriteStatus(suite.ctx, &pbresource.WriteStatusRequest{ + Id: workload.Id, + Key: workloadhealth.StatusKey, + Status: &pbresource.Status{ + ObservedGeneration: workload.Generation, + Conditions: []*pbresource.Condition{ + { + Type: workloadhealth.StatusConditionHealthy, + State: pbresource.Condition_STATE_TRUE, + Reason: "HEALTH_PASSING", }, }, - }) + }, + }) - // Wait for the endpoints to be regenerated - endpoints = suite.client.WaitForNewVersion(suite.T(), endpointsID, endpoints.Version) + // Wait for the endpoints to be regenerated + endpoints = suite.client.WaitForNewVersion(suite.T(), endpointsID, endpoints.Version) - // ensure the endpoint was put into the passing state - suite.requireEndpoints(endpoints, &pbcatalog.Endpoint{ - TargetRef: workload.Id, - Addresses: []*pbcatalog.WorkloadAddress{ - {Host: "127.0.0.1", Ports: []string{"http"}}, - }, + // ensure the endpoint was put into the passing state + suite.requireEndpoints(endpoints, &pbcatalog.Endpoint{ + TargetRef: workload.Id, + Addresses: []*pbcatalog.WorkloadAddress{ + {Host: "127.0.0.1", Ports: []string{"http"}}, + }, + Ports: map[string]*pbcatalog.WorkloadPort{ + "http": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, + }, + HealthStatus: pbcatalog.Health_HEALTH_PASSING, + Identity: "api", + }) + + // Update workload identity and check that the status on the service is updated + workload = rtest.Resource(pbcatalog.WorkloadType, "api-1"). + WithData(suite.T(), &pbcatalog.Workload{ + Addresses: []*pbcatalog.WorkloadAddress{{Host: "127.0.0.1"}}, Ports: map[string]*pbcatalog.WorkloadPort{ "http": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, + "grpc": {Port: 8081, Protocol: pbcatalog.Protocol_PROTOCOL_GRPC}, }, - HealthStatus: pbcatalog.Health_HEALTH_PASSING, - Identity: "api", - }) + Identity: "endpoints-api-identity", + }). + Write(suite.T(), suite.client) - // Update workload identity and check that the status on the service is updated - workload = rtest.Resource(pbcatalog.WorkloadType, "api-1").WithTenancy(tenancy). - WithData(suite.T(), &pbcatalog.Workload{ - Addresses: []*pbcatalog.WorkloadAddress{{Host: "127.0.0.1"}}, - Ports: map[string]*pbcatalog.WorkloadPort{ - "http": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, - "grpc": {Port: 8081, Protocol: pbcatalog.Protocol_PROTOCOL_GRPC}, - }, - Identity: "endpoints-api-identity", - }). - Write(suite.T(), suite.client) - - suite.client.WaitForStatusCondition(suite.T(), service.Id, StatusKey, ConditionIdentitiesFound([]string{"endpoints-api-identity"})) - - // Verify that the generated endpoints now contain the workload - endpoints = suite.client.WaitForNewVersion(suite.T(), endpointsID, endpoints.Version) - suite.requireEndpoints(endpoints, &pbcatalog.Endpoint{ - TargetRef: workload.Id, - Addresses: []*pbcatalog.WorkloadAddress{ - {Host: "127.0.0.1", Ports: []string{"http"}}, + suite.client.WaitForStatusCondition(suite.T(), service.Id, StatusKey, ConditionIdentitiesFound([]string{"endpoints-api-identity"})) + + // Verify that the generated endpoints now contain the workload + endpoints = suite.client.WaitForNewVersion(suite.T(), endpointsID, endpoints.Version) + suite.requireEndpoints(endpoints, &pbcatalog.Endpoint{ + TargetRef: workload.Id, + Addresses: []*pbcatalog.WorkloadAddress{ + {Host: "127.0.0.1", Ports: []string{"http"}}, + }, + Ports: map[string]*pbcatalog.WorkloadPort{ + "http": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, + }, + HealthStatus: pbcatalog.Health_HEALTH_PASSING, + Identity: "endpoints-api-identity", + }) + + // rewrite the service to add more selection criteria. This should trigger + // reconciliation but shouldn't result in updating the endpoints because + // the actual list of currently selected workloads has not changed + rtest.Resource(pbcatalog.ServiceType, "api"). + WithData(suite.T(), &pbcatalog.Service{ + Workloads: &pbcatalog.WorkloadSelector{ + Prefixes: []string{"api-"}, + Names: []string{"doesnt-matter"}, }, - Ports: map[string]*pbcatalog.WorkloadPort{ - "http": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, + Ports: []*pbcatalog.ServicePort{ + {TargetPort: "http", Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, }, - HealthStatus: pbcatalog.Health_HEALTH_PASSING, - Identity: "endpoints-api-identity", - }) - - // rewrite the service to add more selection criteria. This should trigger - // reconciliation but shouldn't result in updating the endpoints because - // the actual list of currently selected workloads has not changed - rtest.Resource(pbcatalog.ServiceType, "api").WithTenancy(tenancy). - WithData(suite.T(), &pbcatalog.Service{ - Workloads: &pbcatalog.WorkloadSelector{ - Prefixes: []string{"api-"}, - Names: []string{"doesnt-matter"}, - }, - Ports: []*pbcatalog.ServicePort{ - {TargetPort: "http", Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, - }, - }). - Write(suite.T(), suite.client) + }). + Write(suite.T(), suite.client) - // Wait for the service status' observed generation to get bumped - service = suite.client.WaitForReconciliation(suite.T(), service.Id, StatusKey) + // Wait for the service status' observed generation to get bumped + service = suite.client.WaitForReconciliation(suite.T(), service.Id, StatusKey) - // Verify that the endpoints were not regenerated - suite.client.RequireVersionUnchanged(suite.T(), endpointsID, endpoints.Version) + // Verify that the endpoints were not regenerated + suite.client.RequireVersionUnchanged(suite.T(), endpointsID, endpoints.Version) - // Update the service. - updatedService := rtest.Resource(pbcatalog.ServiceType, "api"). - WithTenancy(tenancy). - WithData(suite.T(), &pbcatalog.Service{ - Workloads: &pbcatalog.WorkloadSelector{ - Prefixes: []string{"api-"}, - }, - Ports: []*pbcatalog.ServicePort{ - {TargetPort: "http", Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, - {TargetPort: "grpc", Protocol: pbcatalog.Protocol_PROTOCOL_GRPC}, - }, - }). - Write(suite.T(), suite.client) + // Update the service. + updatedService := rtest.Resource(pbcatalog.ServiceType, "api"). + WithData(suite.T(), &pbcatalog.Service{ + Workloads: &pbcatalog.WorkloadSelector{ + Prefixes: []string{"api-"}, + }, + Ports: []*pbcatalog.ServicePort{ + {TargetPort: "http", Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, + {TargetPort: "grpc", Protocol: pbcatalog.Protocol_PROTOCOL_GRPC}, + }, + }). + Write(suite.T(), suite.client) - // Wait for the endpoints to be regenerated - endpoints = suite.client.WaitForNewVersion(suite.T(), endpointsID, endpoints.Version) - rtest.RequireOwner(suite.T(), endpoints, updatedService.Id, false) + // Wait for the endpoints to be regenerated + endpoints = suite.client.WaitForNewVersion(suite.T(), endpointsID, endpoints.Version) + rtest.RequireOwner(suite.T(), endpoints, updatedService.Id, false) - // Delete the endpoints. The controller should bring these back momentarily - suite.client.Delete(suite.ctx, &pbresource.DeleteRequest{Id: endpointsID}) + // Delete the endpoints. The controller should bring these back momentarily + suite.client.Delete(suite.ctx, &pbresource.DeleteRequest{Id: endpointsID}) - // Wait for controller to recreate the endpoints - retry.Run(suite.T(), func(r *retry.R) { - suite.client.RequireResourceExists(r, endpointsID) - }) + // Wait for controller to recreate the endpoints + retry.Run(suite.T(), func(r *retry.R) { + suite.client.RequireResourceExists(r, endpointsID) + }) - // Move the service to having unmanaged endpoints - rtest.Resource(pbcatalog.ServiceType, "api"). - WithTenancy(tenancy). - WithData(suite.T(), &pbcatalog.Service{ - Ports: []*pbcatalog.ServicePort{ - {TargetPort: "http", Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, - }, - }). - Write(suite.T(), suite.client) + // Move the service to having unmanaged endpoints + rtest.Resource(pbcatalog.ServiceType, "api"). + WithData(suite.T(), &pbcatalog.Service{ + Ports: []*pbcatalog.ServicePort{ + {TargetPort: "http", Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, + }, + }). + Write(suite.T(), suite.client) - res = suite.client.WaitForReconciliation(suite.T(), service.Id, StatusKey) - rtest.RequireStatusCondition(suite.T(), res, StatusKey, ConditionUnmanaged) + res = suite.client.WaitForReconciliation(suite.T(), service.Id, StatusKey) + rtest.RequireStatusCondition(suite.T(), res, StatusKey, ConditionUnmanaged) - // Verify that the endpoints were deleted - suite.client.RequireResourceNotFound(suite.T(), endpointsID) - }) + // Verify that the endpoints were deleted + suite.client.RequireResourceNotFound(suite.T(), endpointsID) } func TestController(t *testing.T) { suite.Run(t, new(controllerSuite)) } - -func (suite *controllerSuite) runTestCaseWithTenancies(testFunc func(*pbresource.Tenancy)) { - for _, tenancy := range suite.tenancies { - suite.Run(suite.appendTenancyInfo(tenancy), func() { - testFunc(tenancy) - }) - } -} - -func (suite *controllerSuite) appendTenancyInfo(tenancy *pbresource.Tenancy) string { - return fmt.Sprintf("%s_Namespace_%s_Partition", tenancy.Namespace, tenancy.Partition) -} diff --git a/internal/catalog/internal/controllers/endpoints/reconciliation_data.go b/internal/catalog/internal/controllers/endpoints/reconciliation_data.go index 186354eda9e0d..320ad47470d5b 100644 --- a/internal/catalog/internal/controllers/endpoints/reconciliation_data.go +++ b/internal/catalog/internal/controllers/endpoints/reconciliation_data.go @@ -34,7 +34,7 @@ type workloadData struct { // getServiceData will read the service with the given ID and unmarshal the // Data field. The return value is a struct that contains the retrieved -// resource as well as the unmarshalled form. If the resource doesn't +// resource as well as the unmsashalled form. If the resource doesn't // exist, nil will be returned. Any other error either with retrieving // the resource or unmarshalling it will cause the error to be returned // to the caller diff --git a/internal/catalog/internal/controllers/endpoints/reconciliation_data_test.go b/internal/catalog/internal/controllers/endpoints/reconciliation_data_test.go index 96ddceb481d8c..d855c710f6c28 100644 --- a/internal/catalog/internal/controllers/endpoints/reconciliation_data_test.go +++ b/internal/catalog/internal/controllers/endpoints/reconciliation_data_test.go @@ -5,7 +5,6 @@ package endpoints import ( "context" - "fmt" "testing" "github.com/stretchr/testify/require" @@ -18,7 +17,6 @@ import ( "github.com/hashicorp/consul/internal/catalog/internal/types" "github.com/hashicorp/consul/internal/controller" "github.com/hashicorp/consul/internal/resource" - "github.com/hashicorp/consul/internal/resource/resourcetest" rtest "github.com/hashicorp/consul/internal/resource/resourcetest" pbcatalog "github.com/hashicorp/consul/proto-public/pbcatalog/v2beta1" "github.com/hashicorp/consul/proto-public/pbresource" @@ -30,7 +28,7 @@ type reconciliationDataSuite struct { suite.Suite ctx context.Context - client *resourcetest.Client + client pbresource.ResourceServiceClient rt controller.Runtime apiServiceData *pbcatalog.Service @@ -43,16 +41,11 @@ type reconciliationDataSuite struct { api123Workload *pbresource.Resource web1Workload *pbresource.Resource web2Workload *pbresource.Resource - - tenancies []*pbresource.Tenancy } func (suite *reconciliationDataSuite) SetupTest() { suite.ctx = testutil.TestContext(suite.T()) - - suite.tenancies = rtest.TestTenancies() - resourceClient := svctest.RunResourceServiceWithTenancies(suite.T(), types.Register) - suite.client = resourcetest.NewClient(resourceClient) + suite.client = svctest.RunResourceService(suite.T(), types.Register) suite.rt = controller.Runtime{ Client: suite.client, Logger: testutil.Logger(suite.T()), @@ -74,174 +67,16 @@ func (suite *reconciliationDataSuite) SetupTest() { } suite.apiServiceSubsetData = proto.Clone(suite.apiServiceData).(*pbcatalog.Service) suite.apiServiceSubsetData.Workloads.Filter = "(zim in metadata) and (metadata.zim matches `^g.`)" -} - -func (suite *reconciliationDataSuite) TestGetServiceData_NotFound() { - // This test's purposes is to ensure that NotFound errors when retrieving - // the service data are ignored properly. - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - data, err := getServiceData(suite.ctx, suite.rt, rtest.Resource(pbcatalog.ServiceType, "not-found").WithTenancy(tenancy).ID()) - require.NoError(suite.T(), err) - require.Nil(suite.T(), data) - }) -} - -func (suite *reconciliationDataSuite) TestGetServiceData_ReadError() { - // This test's purpose is to ensure that Read errors other than NotFound - // are propagated back to the caller. Specifying a resource ID with an - // unregistered type is the easiest way to force a resource service error. - badType := &pbresource.Type{ - Group: "not", - Kind: "found", - GroupVersion: "vfake", - } - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - data, err := getServiceData(suite.ctx, suite.rt, rtest.Resource(badType, "foo").WithTenancy(tenancy).ID()) - require.Error(suite.T(), err) - require.Equal(suite.T(), codes.InvalidArgument, status.Code(err)) - require.Nil(suite.T(), data) - }) -} - -func (suite *reconciliationDataSuite) TestGetServiceData_UnmarshalError() { - // This test's purpose is to ensure that unmarshlling errors are returned - // to the caller. We are using a resource id that points to an endpoints - // object instead of a service to ensure that the data will be unmarshallable. - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - data, err := getServiceData(suite.ctx, suite.rt, rtest.Resource(pbcatalog.ServiceEndpointsType, "api").WithTenancy(tenancy).ID()) - require.Error(suite.T(), err) - var parseErr resource.ErrDataParse - require.ErrorAs(suite.T(), err, &parseErr) - require.Nil(suite.T(), data) - }) -} - -func (suite *reconciliationDataSuite) TestGetServiceData_Ok() { - // This test's purpose is to ensure that the happy path for - // retrieving a service works as expected. - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - data, err := getServiceData(suite.ctx, suite.rt, suite.apiService.Id) - require.NoError(suite.T(), err) - require.NotNil(suite.T(), data) - require.NotNil(suite.T(), data.resource) - prototest.AssertDeepEqual(suite.T(), suite.apiService.Id, data.resource.Id) - require.Len(suite.T(), data.service.Ports, 1) - }) -} - -func (suite *reconciliationDataSuite) TestGetEndpointsData_NotFound() { - // This test's purposes is to ensure that NotFound errors when retrieving - // the endpoint data are ignored properly. - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - data, err := getEndpointsData(suite.ctx, suite.rt, rtest.Resource(pbcatalog.ServiceEndpointsType, "not-found").WithTenancy(tenancy).ID()) - require.NoError(suite.T(), err) - require.Nil(suite.T(), data) - }) -} - -func (suite *reconciliationDataSuite) TestGetEndpointsData_ReadError() { - // This test's purpose is to ensure that Read errors other than NotFound - // are propagated back to the caller. Specifying a resource ID with an - // unregistered type is the easiest way to force a resource service error. - badType := &pbresource.Type{ - Group: "not", - Kind: "found", - GroupVersion: "vfake", - } - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - data, err := getEndpointsData(suite.ctx, suite.rt, rtest.Resource(badType, "foo").WithTenancy(tenancy).ID()) - require.Error(suite.T(), err) - require.Equal(suite.T(), codes.InvalidArgument, status.Code(err)) - require.Nil(suite.T(), data) - }) -} - -func (suite *reconciliationDataSuite) TestGetEndpointsData_UnmarshalError() { - // This test's purpose is to ensure that unmarshlling errors are returned - // to the caller. We are using a resource id that points to a service object - // instead of an endpoints object to ensure that the data will be unmarshallable. - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - data, err := getEndpointsData(suite.ctx, suite.rt, rtest.Resource(pbcatalog.ServiceType, "api").WithTenancy(tenancy).ID()) - require.Error(suite.T(), err) - var parseErr resource.ErrDataParse - require.ErrorAs(suite.T(), err, &parseErr) - require.Nil(suite.T(), data) - }) -} - -func (suite *reconciliationDataSuite) TestGetEndpointsData_Ok() { - // This test's purpose is to ensure that the happy path for - // retrieving an endpoints object works as expected. - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - data, err := getEndpointsData(suite.ctx, suite.rt, suite.apiEndpoints.Id) - require.NoError(suite.T(), err) - require.NotNil(suite.T(), data) - require.NotNil(suite.T(), data.resource) - prototest.AssertDeepEqual(suite.T(), suite.apiEndpoints.Id, data.resource.Id) - require.Len(suite.T(), data.endpoints.Endpoints, 1) - }) -} - -func (suite *reconciliationDataSuite) TestGetWorkloadData() { - // This test's purpose is to ensure that gather workloads for - // a service work as expected. The services selector was crafted - // to exercise the deduplication behavior as well as the sorting - // behavior. The assertions in this test will verify that only - // unique workloads are returned and that they are ordered. - - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - require.NotNil(suite.T(), suite.apiService) - - data, err := getWorkloadData(suite.ctx, suite.rt, &serviceData{ - resource: suite.apiService, - service: suite.apiServiceData, - }) - - require.NoError(suite.T(), err) - require.Len(suite.T(), data, 5) - prototest.AssertDeepEqual(suite.T(), suite.api1Workload, data[0].resource) - prototest.AssertDeepEqual(suite.T(), suite.api123Workload, data[1].resource) - prototest.AssertDeepEqual(suite.T(), suite.api2Workload, data[2].resource) - prototest.AssertDeepEqual(suite.T(), suite.web1Workload, data[3].resource) - prototest.AssertDeepEqual(suite.T(), suite.web2Workload, data[4].resource) - }) -} - -func (suite *reconciliationDataSuite) TestGetWorkloadDataWithFilter() { - // This is like TestGetWorkloadData except it exercises the post-read - // filter on the selector. - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - require.NotNil(suite.T(), suite.apiServiceSubset) - - data, err := getWorkloadData(suite.ctx, suite.rt, &serviceData{ - resource: suite.apiServiceSubset, - service: suite.apiServiceSubsetData, - }) - - require.NoError(suite.T(), err) - require.Len(suite.T(), data, 2) - prototest.AssertDeepEqual(suite.T(), suite.api123Workload, data[0].resource) - prototest.AssertDeepEqual(suite.T(), suite.web1Workload, data[1].resource) - }) -} - -func TestReconciliationData(t *testing.T) { - suite.Run(t, new(reconciliationDataSuite)) -} -func (suite *reconciliationDataSuite) setupResourcesWithTenancy(tenancy *pbresource.Tenancy) { suite.apiService = rtest.Resource(pbcatalog.ServiceType, "api"). - WithTenancy(tenancy). WithData(suite.T(), suite.apiServiceData). Write(suite.T(), suite.client) suite.apiServiceSubset = rtest.Resource(pbcatalog.ServiceType, "api-subset"). - WithTenancy(tenancy). WithData(suite.T(), suite.apiServiceSubsetData). Write(suite.T(), suite.client) suite.api1Workload = rtest.Resource(pbcatalog.WorkloadType, "api-1"). - WithTenancy(tenancy). WithMeta("zim", "dib"). WithData(suite.T(), &pbcatalog.Workload{ Addresses: []*pbcatalog.WorkloadAddress{ @@ -255,7 +90,6 @@ func (suite *reconciliationDataSuite) setupResourcesWithTenancy(tenancy *pbresou Write(suite.T(), suite.client) suite.api2Workload = rtest.Resource(pbcatalog.WorkloadType, "api-2"). - WithTenancy(tenancy). WithData(suite.T(), &pbcatalog.Workload{ Addresses: []*pbcatalog.WorkloadAddress{ {Host: "127.0.0.1"}, @@ -268,7 +102,6 @@ func (suite *reconciliationDataSuite) setupResourcesWithTenancy(tenancy *pbresou Write(suite.T(), suite.client) suite.api123Workload = rtest.Resource(pbcatalog.WorkloadType, "api-123"). - WithTenancy(tenancy). WithMeta("zim", "gir"). WithData(suite.T(), &pbcatalog.Workload{ Addresses: []*pbcatalog.WorkloadAddress{ @@ -282,7 +115,6 @@ func (suite *reconciliationDataSuite) setupResourcesWithTenancy(tenancy *pbresou Write(suite.T(), suite.client) suite.web1Workload = rtest.Resource(pbcatalog.WorkloadType, "web-1"). - WithTenancy(tenancy). WithMeta("zim", "gaz"). WithData(suite.T(), &pbcatalog.Workload{ Addresses: []*pbcatalog.WorkloadAddress{ @@ -296,7 +128,6 @@ func (suite *reconciliationDataSuite) setupResourcesWithTenancy(tenancy *pbresou Write(suite.T(), suite.client) suite.web2Workload = rtest.Resource(pbcatalog.WorkloadType, "web-2"). - WithTenancy(tenancy). WithData(suite.T(), &pbcatalog.Workload{ Addresses: []*pbcatalog.WorkloadAddress{ {Host: "127.0.0.1"}, @@ -309,11 +140,10 @@ func (suite *reconciliationDataSuite) setupResourcesWithTenancy(tenancy *pbresou Write(suite.T(), suite.client) suite.apiEndpoints = rtest.Resource(pbcatalog.ServiceEndpointsType, "api"). - WithTenancy(tenancy). WithData(suite.T(), &pbcatalog.ServiceEndpoints{ Endpoints: []*pbcatalog.Endpoint{ { - TargetRef: rtest.Resource(pbcatalog.WorkloadType, "api-1").WithTenancy(tenancy).ID(), + TargetRef: rtest.Resource(pbcatalog.WorkloadType, "api-1").WithTenancy(resource.DefaultNamespacedTenancy()).ID(), Addresses: []*pbcatalog.WorkloadAddress{ { Host: "127.0.0.1", @@ -330,27 +160,131 @@ func (suite *reconciliationDataSuite) setupResourcesWithTenancy(tenancy *pbresou Write(suite.T(), suite.client) } -func (suite *reconciliationDataSuite) cleanupResources() { - suite.client.MustDelete(suite.T(), suite.apiService.Id) - suite.client.MustDelete(suite.T(), suite.apiServiceSubset.Id) - suite.client.MustDelete(suite.T(), suite.api1Workload.Id) - suite.client.MustDelete(suite.T(), suite.api2Workload.Id) - suite.client.MustDelete(suite.T(), suite.api123Workload.Id) - suite.client.MustDelete(suite.T(), suite.web1Workload.Id) - suite.client.MustDelete(suite.T(), suite.web2Workload.Id) - suite.client.MustDelete(suite.T(), suite.apiEndpoints.Id) +func (suite *reconciliationDataSuite) TestGetServiceData_NotFound() { + // This test's purposes is to ensure that NotFound errors when retrieving + // the service data are ignored properly. + data, err := getServiceData(suite.ctx, suite.rt, rtest.Resource(pbcatalog.ServiceType, "not-found").WithTenancy(resource.DefaultNamespacedTenancy()).ID()) + require.NoError(suite.T(), err) + require.Nil(suite.T(), data) } -func (suite *reconciliationDataSuite) runTestCaseWithTenancies(testFunc func(*pbresource.Tenancy)) { - for _, tenancy := range suite.tenancies { - suite.Run(suite.appendTenancyInfo(tenancy), func() { - suite.setupResourcesWithTenancy(tenancy) - testFunc(tenancy) - suite.T().Cleanup(suite.cleanupResources) - }) +func (suite *reconciliationDataSuite) TestGetServiceData_ReadError() { + // This test's purpose is to ensure that Read errors other than NotFound + // are propagated back to the caller. Specifying a resource ID with an + // unregistered type is the easiest way to force a resource service error. + badType := &pbresource.Type{ + Group: "not", + Kind: "found", + GroupVersion: "vfake", } + data, err := getServiceData(suite.ctx, suite.rt, rtest.Resource(badType, "foo").ID()) + require.Error(suite.T(), err) + require.Equal(suite.T(), codes.InvalidArgument, status.Code(err)) + require.Nil(suite.T(), data) +} + +func (suite *reconciliationDataSuite) TestGetServiceData_UnmarshalError() { + // This test's purpose is to ensure that unmarshlling errors are returned + // to the caller. We are using a resource id that points to an endpoints + // object instead of a service to ensure that the data will be unmarshallable. + data, err := getServiceData(suite.ctx, suite.rt, rtest.Resource(pbcatalog.ServiceEndpointsType, "api").ID()) + require.Error(suite.T(), err) + var parseErr resource.ErrDataParse + require.ErrorAs(suite.T(), err, &parseErr) + require.Nil(suite.T(), data) +} + +func (suite *reconciliationDataSuite) TestGetServiceData_Ok() { + // This test's purpose is to ensure that the happy path for + // retrieving a service works as expected. + data, err := getServiceData(suite.ctx, suite.rt, suite.apiService.Id) + require.NoError(suite.T(), err) + require.NotNil(suite.T(), data) + require.NotNil(suite.T(), data.resource) + prototest.AssertDeepEqual(suite.T(), suite.apiService.Id, data.resource.Id) + require.Len(suite.T(), data.service.Ports, 1) +} + +func (suite *reconciliationDataSuite) TestGetEndpointsData_NotFound() { + // This test's purposes is to ensure that NotFound errors when retrieving + // the endpoint data are ignored properly. + data, err := getEndpointsData(suite.ctx, suite.rt, rtest.Resource(pbcatalog.ServiceEndpointsType, "not-found").ID()) + require.NoError(suite.T(), err) + require.Nil(suite.T(), data) } -func (suite *reconciliationDataSuite) appendTenancyInfo(tenancy *pbresource.Tenancy) string { - return fmt.Sprintf("%s_Namespace_%s_Partition", tenancy.Namespace, tenancy.Partition) +func (suite *reconciliationDataSuite) TestGetEndpointsData_ReadError() { + // This test's purpose is to ensure that Read errors other than NotFound + // are propagated back to the caller. Specifying a resource ID with an + // unregistered type is the easiest way to force a resource service error. + badType := &pbresource.Type{ + Group: "not", + Kind: "found", + GroupVersion: "vfake", + } + data, err := getEndpointsData(suite.ctx, suite.rt, rtest.Resource(badType, "foo").ID()) + require.Error(suite.T(), err) + require.Equal(suite.T(), codes.InvalidArgument, status.Code(err)) + require.Nil(suite.T(), data) +} + +func (suite *reconciliationDataSuite) TestGetEndpointsData_UnmarshalError() { + // This test's purpose is to ensure that unmarshlling errors are returned + // to the caller. We are using a resource id that points to a service object + // instead of an endpoints object to ensure that the data will be unmarshallable. + data, err := getEndpointsData(suite.ctx, suite.rt, rtest.Resource(pbcatalog.ServiceType, "api").ID()) + require.Error(suite.T(), err) + var parseErr resource.ErrDataParse + require.ErrorAs(suite.T(), err, &parseErr) + require.Nil(suite.T(), data) +} + +func (suite *reconciliationDataSuite) TestGetEndpointsData_Ok() { + // This test's purpose is to ensure that the happy path for + // retrieving an endpoints object works as expected. + data, err := getEndpointsData(suite.ctx, suite.rt, suite.apiEndpoints.Id) + require.NoError(suite.T(), err) + require.NotNil(suite.T(), data) + require.NotNil(suite.T(), data.resource) + prototest.AssertDeepEqual(suite.T(), suite.apiEndpoints.Id, data.resource.Id) + require.Len(suite.T(), data.endpoints.Endpoints, 1) +} + +func (suite *reconciliationDataSuite) TestGetWorkloadData() { + // This test's purpose is to ensure that gather workloads for + // a service work as expected. The services selector was crafted + // to exercise the deduplication behavior as well as the sorting + // behavior. The assertions in this test will verify that only + // unique workloads are returned and that they are ordered. + + data, err := getWorkloadData(suite.ctx, suite.rt, &serviceData{ + resource: suite.apiService, + service: suite.apiServiceData, + }) + + require.NoError(suite.T(), err) + require.Len(suite.T(), data, 5) + prototest.AssertDeepEqual(suite.T(), suite.api1Workload, data[0].resource) + prototest.AssertDeepEqual(suite.T(), suite.api123Workload, data[1].resource) + prototest.AssertDeepEqual(suite.T(), suite.api2Workload, data[2].resource) + prototest.AssertDeepEqual(suite.T(), suite.web1Workload, data[3].resource) + prototest.AssertDeepEqual(suite.T(), suite.web2Workload, data[4].resource) +} + +func (suite *reconciliationDataSuite) TestGetWorkloadDataWithFilter() { + // This is like TestGetWorkloadData except it exercises the post-read + // filter on the selector. + data, err := getWorkloadData(suite.ctx, suite.rt, &serviceData{ + resource: suite.apiServiceSubset, + service: suite.apiServiceSubsetData, + }) + + require.NoError(suite.T(), err) + require.Len(suite.T(), data, 2) + prototest.AssertDeepEqual(suite.T(), suite.api123Workload, data[0].resource) + prototest.AssertDeepEqual(suite.T(), suite.web1Workload, data[1].resource) +} + +func TestReconciliationData(t *testing.T) { + suite.Run(t, new(reconciliationDataSuite)) } diff --git a/internal/catalog/internal/controllers/failover/controller_test.go b/internal/catalog/internal/controllers/failover/controller_test.go index 4f1dbc3db6ffe..a82a6f0fdee60 100644 --- a/internal/catalog/internal/controllers/failover/controller_test.go +++ b/internal/catalog/internal/controllers/failover/controller_test.go @@ -5,7 +5,6 @@ package failover import ( "context" - "fmt" "testing" "github.com/stretchr/testify/suite" @@ -17,7 +16,6 @@ import ( "github.com/hashicorp/consul/internal/resource" rtest "github.com/hashicorp/consul/internal/resource/resourcetest" pbcatalog "github.com/hashicorp/consul/proto-public/pbcatalog/v2beta1" - "github.com/hashicorp/consul/proto-public/pbresource" "github.com/hashicorp/consul/sdk/testutil" ) @@ -31,13 +29,11 @@ type controllerSuite struct { failoverMapper FailoverMapper ctl failoverPolicyReconciler - - tenancies []*pbresource.Tenancy } func (suite *controllerSuite) SetupTest() { suite.ctx = testutil.TestContext(suite.T()) - client := svctest.RunResourceServiceWithTenancies(suite.T(), types.Register, types.RegisterDNSPolicy) + client := svctest.RunResourceService(suite.T(), types.Register) suite.rt = controller.Runtime{ Client: client, Logger: testutil.Logger(suite.T()), @@ -45,8 +41,6 @@ func (suite *controllerSuite) SetupTest() { suite.client = rtest.NewClient(client) suite.failoverMapper = failovermapper.New() - - suite.tenancies = rtest.TestTenancies() } func (suite *controllerSuite) TestController() { @@ -59,279 +53,216 @@ func (suite *controllerSuite) TestController() { mgr.SetRaftLeader(true) go mgr.Run(suite.ctx) - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - // Create an advance pointer to some services. - apiServiceRef := resource.Reference(rtest.Resource(pbcatalog.ServiceType, "api").WithTenancy(tenancy).ID(), "") - otherServiceRef := resource.Reference(rtest.Resource(pbcatalog.ServiceType, "other").WithTenancy(tenancy).ID(), "") + // Create an advance pointer to some services. + apiServiceRef := resource.Reference(rtest.Resource(pbcatalog.ServiceType, "api").WithTenancy(resource.DefaultNamespacedTenancy()).ID(), "") + otherServiceRef := resource.Reference(rtest.Resource(pbcatalog.ServiceType, "other").WithTenancy(resource.DefaultNamespacedTenancy()).ID(), "") - // create a failover without any services - failoverData := &pbcatalog.FailoverPolicy{ - Config: &pbcatalog.FailoverConfig{ + // create a failover without any services + failoverData := &pbcatalog.FailoverPolicy{ + Config: &pbcatalog.FailoverConfig{ + Destinations: []*pbcatalog.FailoverDestination{{ + Ref: apiServiceRef, + }}, + }, + } + failover := rtest.Resource(pbcatalog.FailoverPolicyType, "api"). + WithData(suite.T(), failoverData). + Write(suite.T(), suite.client) + + suite.client.WaitForStatusCondition(suite.T(), failover.Id, StatusKey, ConditionMissingService) + + // Provide the service. + apiServiceData := &pbcatalog.Service{ + Workloads: &pbcatalog.WorkloadSelector{Prefixes: []string{"api-"}}, + Ports: []*pbcatalog.ServicePort{{ + TargetPort: "http", + Protocol: pbcatalog.Protocol_PROTOCOL_HTTP, + }}, + } + _ = rtest.Resource(pbcatalog.ServiceType, "api"). + WithData(suite.T(), apiServiceData). + Write(suite.T(), suite.client) + suite.client.WaitForStatusCondition(suite.T(), failover.Id, StatusKey, ConditionOK) + + // Update the failover to reference an unknown port + failoverData = &pbcatalog.FailoverPolicy{ + PortConfigs: map[string]*pbcatalog.FailoverConfig{ + "http": { Destinations: []*pbcatalog.FailoverDestination{{ - Ref: apiServiceRef, + Ref: apiServiceRef, + Port: "http", }}, }, - } - failover := rtest.Resource(pbcatalog.FailoverPolicyType, "api"). - WithData(suite.T(), failoverData). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - - suite.T().Cleanup(suite.deleteResourceFunc(failover.Id)) - - suite.client.WaitForStatusCondition(suite.T(), failover.Id, StatusKey, ConditionMissingService) - - // Provide the service. - apiServiceData := &pbcatalog.Service{ - Workloads: &pbcatalog.WorkloadSelector{Prefixes: []string{"api-"}}, - Ports: []*pbcatalog.ServicePort{{ + "admin": { + Destinations: []*pbcatalog.FailoverDestination{{ + Ref: apiServiceRef, + Port: "admin", + }}, + }, + }, + } + _ = rtest.Resource(pbcatalog.FailoverPolicyType, "api"). + WithData(suite.T(), failoverData). + Write(suite.T(), suite.client) + suite.client.WaitForStatusCondition(suite.T(), failover.Id, StatusKey, ConditionUnknownPort("admin")) + + // update the service to fix the stray reference, but point to a mesh port + apiServiceData = &pbcatalog.Service{ + Workloads: &pbcatalog.WorkloadSelector{Prefixes: []string{"api-"}}, + Ports: []*pbcatalog.ServicePort{ + { TargetPort: "http", Protocol: pbcatalog.Protocol_PROTOCOL_HTTP, - }}, - } - svc := rtest.Resource(pbcatalog.ServiceType, "api"). - WithData(suite.T(), apiServiceData). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - - suite.T().Cleanup(suite.deleteResourceFunc(svc.Id)) - - suite.client.WaitForStatusCondition(suite.T(), failover.Id, StatusKey, ConditionOK) - - // Update the failover to reference an unknown port - failoverData = &pbcatalog.FailoverPolicy{ - PortConfigs: map[string]*pbcatalog.FailoverConfig{ - "http": { - Destinations: []*pbcatalog.FailoverDestination{{ - Ref: apiServiceRef, - Port: "http", - }}, - }, - "admin": { - Destinations: []*pbcatalog.FailoverDestination{{ - Ref: apiServiceRef, - Port: "admin", - }}, - }, - }, - } - svc = rtest.Resource(pbcatalog.FailoverPolicyType, "api"). - WithData(suite.T(), failoverData). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - - suite.T().Cleanup(suite.deleteResourceFunc(svc.Id)) - - suite.client.WaitForStatusCondition(suite.T(), failover.Id, StatusKey, ConditionUnknownPort("admin")) - - // update the service to fix the stray reference, but point to a mesh port - apiServiceData = &pbcatalog.Service{ - Workloads: &pbcatalog.WorkloadSelector{Prefixes: []string{"api-"}}, - Ports: []*pbcatalog.ServicePort{ - { - TargetPort: "http", - Protocol: pbcatalog.Protocol_PROTOCOL_HTTP, - }, - { - TargetPort: "admin", - Protocol: pbcatalog.Protocol_PROTOCOL_MESH, - }, }, - } - svc = rtest.Resource(pbcatalog.ServiceType, "api"). - WithData(suite.T(), apiServiceData). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - - suite.T().Cleanup(suite.deleteResourceFunc(svc.Id)) - - suite.client.WaitForStatusCondition(suite.T(), failover.Id, StatusKey, ConditionUsingMeshDestinationPort(apiServiceRef, "admin")) - - // update the service to fix the stray reference to not be a mesh port - apiServiceData = &pbcatalog.Service{ - Workloads: &pbcatalog.WorkloadSelector{Prefixes: []string{"api-"}}, - Ports: []*pbcatalog.ServicePort{ - { - TargetPort: "http", - Protocol: pbcatalog.Protocol_PROTOCOL_HTTP, - }, - { - TargetPort: "admin", - Protocol: pbcatalog.Protocol_PROTOCOL_HTTP, - }, - }, - } - svc = rtest.Resource(pbcatalog.ServiceType, "api"). - WithData(suite.T(), apiServiceData). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - - suite.T().Cleanup(suite.deleteResourceFunc(svc.Id)) - - suite.client.WaitForStatusCondition(suite.T(), failover.Id, StatusKey, ConditionOK) - - // change failover leg to point to missing service - failoverData = &pbcatalog.FailoverPolicy{ - PortConfigs: map[string]*pbcatalog.FailoverConfig{ - "http": { - Destinations: []*pbcatalog.FailoverDestination{{ - Ref: apiServiceRef, - Port: "http", - }}, - }, - "admin": { - Destinations: []*pbcatalog.FailoverDestination{{ - Ref: otherServiceRef, - Port: "admin", - }}, - }, + { + TargetPort: "admin", + Protocol: pbcatalog.Protocol_PROTOCOL_MESH, }, - } - svc = rtest.Resource(pbcatalog.FailoverPolicyType, "api"). - WithData(suite.T(), failoverData). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - - suite.T().Cleanup(suite.deleteResourceFunc(svc.Id)) - - suite.client.WaitForStatusCondition(suite.T(), failover.Id, StatusKey, ConditionMissingDestinationService(otherServiceRef)) - - // Create the missing service, but forget the port. - otherServiceData := &pbcatalog.Service{ - Workloads: &pbcatalog.WorkloadSelector{Prefixes: []string{"other-"}}, - Ports: []*pbcatalog.ServicePort{{ + }, + } + _ = rtest.Resource(pbcatalog.ServiceType, "api"). + WithData(suite.T(), apiServiceData). + Write(suite.T(), suite.client) + suite.client.WaitForStatusCondition(suite.T(), failover.Id, StatusKey, ConditionUsingMeshDestinationPort(apiServiceRef, "admin")) + + // update the service to fix the stray reference to not be a mesh port + apiServiceData = &pbcatalog.Service{ + Workloads: &pbcatalog.WorkloadSelector{Prefixes: []string{"api-"}}, + Ports: []*pbcatalog.ServicePort{ + { TargetPort: "http", Protocol: pbcatalog.Protocol_PROTOCOL_HTTP, - }}, - } - svc = rtest.Resource(pbcatalog.ServiceType, "other"). - WithData(suite.T(), otherServiceData). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - - suite.T().Cleanup(suite.deleteResourceFunc(svc.Id)) - - suite.client.WaitForStatusCondition(suite.T(), failover.Id, StatusKey, ConditionUnknownDestinationPort(otherServiceRef, "admin")) - - // fix the destination leg's port - otherServiceData = &pbcatalog.Service{ - Workloads: &pbcatalog.WorkloadSelector{Prefixes: []string{"other-"}}, - Ports: []*pbcatalog.ServicePort{ - { - TargetPort: "http", - Protocol: pbcatalog.Protocol_PROTOCOL_HTTP, - }, - { - TargetPort: "admin", - Protocol: pbcatalog.Protocol_PROTOCOL_HTTP, - }, }, - } - svc = rtest.Resource(pbcatalog.ServiceType, "other"). - WithData(suite.T(), otherServiceData). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - - suite.T().Cleanup(suite.deleteResourceFunc(svc.Id)) - - suite.client.WaitForStatusCondition(suite.T(), failover.Id, StatusKey, ConditionOK) - - // Update the two services to use differnet port names so the easy path doesn't work - apiServiceData = &pbcatalog.Service{ - Workloads: &pbcatalog.WorkloadSelector{Prefixes: []string{"api-"}}, - Ports: []*pbcatalog.ServicePort{ - { - TargetPort: "foo", - Protocol: pbcatalog.Protocol_PROTOCOL_HTTP, - }, - { - TargetPort: "bar", - Protocol: pbcatalog.Protocol_PROTOCOL_HTTP, - }, + { + TargetPort: "admin", + Protocol: pbcatalog.Protocol_PROTOCOL_HTTP, }, - } - svc = rtest.Resource(pbcatalog.ServiceType, "api"). - WithData(suite.T(), apiServiceData). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - - suite.T().Cleanup(suite.deleteResourceFunc(svc.Id)) - - otherServiceData = &pbcatalog.Service{ - Workloads: &pbcatalog.WorkloadSelector{Prefixes: []string{"other-"}}, - Ports: []*pbcatalog.ServicePort{ - { - TargetPort: "foo", - Protocol: pbcatalog.Protocol_PROTOCOL_HTTP, - }, - { - TargetPort: "baz", - Protocol: pbcatalog.Protocol_PROTOCOL_HTTP, - }, + }, + } + _ = rtest.Resource(pbcatalog.ServiceType, "api"). + WithData(suite.T(), apiServiceData). + Write(suite.T(), suite.client) + suite.client.WaitForStatusCondition(suite.T(), failover.Id, StatusKey, ConditionOK) + + // change failover leg to point to missing service + failoverData = &pbcatalog.FailoverPolicy{ + PortConfigs: map[string]*pbcatalog.FailoverConfig{ + "http": { + Destinations: []*pbcatalog.FailoverDestination{{ + Ref: apiServiceRef, + Port: "http", + }}, }, - } - svc = rtest.Resource(pbcatalog.ServiceType, "other"). - WithData(suite.T(), otherServiceData). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - - suite.T().Cleanup(suite.deleteResourceFunc(svc.Id)) - - failoverData = &pbcatalog.FailoverPolicy{ - Config: &pbcatalog.FailoverConfig{ + "admin": { Destinations: []*pbcatalog.FailoverDestination{{ - Ref: otherServiceRef, + Ref: otherServiceRef, + Port: "admin", }}, }, - } - failover = rtest.Resource(pbcatalog.FailoverPolicyType, "api"). - WithData(suite.T(), failoverData). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - - suite.T().Cleanup(suite.deleteResourceFunc(failover.Id)) - - suite.client.WaitForStatusCondition(suite.T(), failover.Id, StatusKey, ConditionUnknownDestinationPort(otherServiceRef, "bar")) - - // and fix it the silly way by removing it from api+failover - apiServiceData = &pbcatalog.Service{ - Workloads: &pbcatalog.WorkloadSelector{Prefixes: []string{"api-"}}, - Ports: []*pbcatalog.ServicePort{ - { - TargetPort: "foo", - Protocol: pbcatalog.Protocol_PROTOCOL_HTTP, - }, + }, + } + _ = rtest.Resource(pbcatalog.FailoverPolicyType, "api"). + WithData(suite.T(), failoverData). + Write(suite.T(), suite.client) + suite.client.WaitForStatusCondition(suite.T(), failover.Id, StatusKey, ConditionMissingDestinationService(otherServiceRef)) + + // Create the missing service, but forget the port. + otherServiceData := &pbcatalog.Service{ + Workloads: &pbcatalog.WorkloadSelector{Prefixes: []string{"other-"}}, + Ports: []*pbcatalog.ServicePort{{ + TargetPort: "http", + Protocol: pbcatalog.Protocol_PROTOCOL_HTTP, + }}, + } + _ = rtest.Resource(pbcatalog.ServiceType, "other"). + WithData(suite.T(), otherServiceData). + Write(suite.T(), suite.client) + suite.client.WaitForStatusCondition(suite.T(), failover.Id, StatusKey, ConditionUnknownDestinationPort(otherServiceRef, "admin")) + + // fix the destination leg's port + otherServiceData = &pbcatalog.Service{ + Workloads: &pbcatalog.WorkloadSelector{Prefixes: []string{"other-"}}, + Ports: []*pbcatalog.ServicePort{ + { + TargetPort: "http", + Protocol: pbcatalog.Protocol_PROTOCOL_HTTP, }, - } - svc = rtest.Resource(pbcatalog.ServiceType, "api"). - WithData(suite.T(), apiServiceData). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - - suite.T().Cleanup(suite.deleteResourceFunc(svc.Id)) + { + TargetPort: "admin", + Protocol: pbcatalog.Protocol_PROTOCOL_HTTP, + }, + }, + } + _ = rtest.Resource(pbcatalog.ServiceType, "other"). + WithData(suite.T(), otherServiceData). + Write(suite.T(), suite.client) + suite.client.WaitForStatusCondition(suite.T(), failover.Id, StatusKey, ConditionOK) + + // Update the two services to use differnet port names so the easy path doesn't work + apiServiceData = &pbcatalog.Service{ + Workloads: &pbcatalog.WorkloadSelector{Prefixes: []string{"api-"}}, + Ports: []*pbcatalog.ServicePort{ + { + TargetPort: "foo", + Protocol: pbcatalog.Protocol_PROTOCOL_HTTP, + }, + { + TargetPort: "bar", + Protocol: pbcatalog.Protocol_PROTOCOL_HTTP, + }, + }, + } + _ = rtest.Resource(pbcatalog.ServiceType, "api"). + WithData(suite.T(), apiServiceData). + Write(suite.T(), suite.client) + + otherServiceData = &pbcatalog.Service{ + Workloads: &pbcatalog.WorkloadSelector{Prefixes: []string{"other-"}}, + Ports: []*pbcatalog.ServicePort{ + { + TargetPort: "foo", + Protocol: pbcatalog.Protocol_PROTOCOL_HTTP, + }, + { + TargetPort: "baz", + Protocol: pbcatalog.Protocol_PROTOCOL_HTTP, + }, + }, + } + _ = rtest.Resource(pbcatalog.ServiceType, "other"). + WithData(suite.T(), otherServiceData). + Write(suite.T(), suite.client) + + failoverData = &pbcatalog.FailoverPolicy{ + Config: &pbcatalog.FailoverConfig{ + Destinations: []*pbcatalog.FailoverDestination{{ + Ref: otherServiceRef, + }}, + }, + } + failover = rtest.Resource(pbcatalog.FailoverPolicyType, "api"). + WithData(suite.T(), failoverData). + Write(suite.T(), suite.client) + + suite.client.WaitForStatusCondition(suite.T(), failover.Id, StatusKey, ConditionUnknownDestinationPort(otherServiceRef, "bar")) + + // and fix it the silly way by removing it from api+failover + apiServiceData = &pbcatalog.Service{ + Workloads: &pbcatalog.WorkloadSelector{Prefixes: []string{"api-"}}, + Ports: []*pbcatalog.ServicePort{ + { + TargetPort: "foo", + Protocol: pbcatalog.Protocol_PROTOCOL_HTTP, + }, + }, + } + _ = rtest.Resource(pbcatalog.ServiceType, "api"). + WithData(suite.T(), apiServiceData). + Write(suite.T(), suite.client) - suite.client.WaitForStatusCondition(suite.T(), failover.Id, StatusKey, ConditionOK) - }) + suite.client.WaitForStatusCondition(suite.T(), failover.Id, StatusKey, ConditionOK) } func TestFailoverController(t *testing.T) { suite.Run(t, new(controllerSuite)) } - -func (suite *controllerSuite) runTestCaseWithTenancies(testCase func(tenancy *pbresource.Tenancy)) { - for _, tenancy := range suite.tenancies { - suite.Run(suite.appendTenancyInfo(tenancy), func() { - testCase(tenancy) - }) - } -} - -func (suite *controllerSuite) appendTenancyInfo(tenancy *pbresource.Tenancy) string { - return fmt.Sprintf("%s_Namespace_%s_Partition", tenancy.Namespace, tenancy.Partition) -} - -func (suite *controllerSuite) deleteResourceFunc(id *pbresource.ID) func() { - return func() { - suite.client.MustDelete(suite.T(), id) - } -} diff --git a/internal/catalog/internal/controllers/nodehealth/controller_test.go b/internal/catalog/internal/controllers/nodehealth/controller_test.go index 4585cc223f2e8..b21c52e521f84 100644 --- a/internal/catalog/internal/controllers/nodehealth/controller_test.go +++ b/internal/catalog/internal/controllers/nodehealth/controller_test.go @@ -14,7 +14,6 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - mockres "github.com/hashicorp/consul/agent/grpc-external/services/resource" svctest "github.com/hashicorp/consul/agent/grpc-external/services/resource/testing" "github.com/hashicorp/consul/internal/catalog/internal/types" "github.com/hashicorp/consul/internal/controller" @@ -24,7 +23,6 @@ import ( "github.com/hashicorp/consul/proto/private/prototest" "github.com/hashicorp/consul/sdk/testutil" "github.com/hashicorp/consul/sdk/testutil/retry" - "github.com/hashicorp/consul/version/versiontest" ) var ( @@ -47,18 +45,22 @@ var ( } ) -func resourceID(rtype *pbresource.Type, name string, tenancy *pbresource.Tenancy) *pbresource.ID { +func resourceID(rtype *pbresource.Type, name string) *pbresource.ID { return &pbresource.ID{ - Type: rtype, - Tenancy: tenancy, - Name: name, + Type: rtype, + Tenancy: &pbresource.Tenancy{ + Partition: "default", + Namespace: "default", + PeerName: "local", + }, + Name: name, } } type nodeHealthControllerTestSuite struct { suite.Suite - resourceClient *resourcetest.Client + resourceClient pbresource.ResourceServiceClient runtime controller.Runtime ctl nodeHealthReconciler @@ -68,144 +70,159 @@ type nodeHealthControllerTestSuite struct { nodeWarning *pbresource.ID nodeCritical *pbresource.ID nodeMaintenance *pbresource.ID - isEnterprise bool - tenancies []*pbresource.Tenancy } -func (suite *nodeHealthControllerTestSuite) writeNode(name string, tenancy *pbresource.Tenancy) *pbresource.ID { - return resourcetest.Resource(pbcatalog.NodeType, name). +func (suite *nodeHealthControllerTestSuite) SetupTest() { + suite.resourceClient = svctest.RunResourceService(suite.T(), types.Register, types.RegisterDNSPolicy) + suite.runtime = controller.Runtime{Client: suite.resourceClient, Logger: testutil.Logger(suite.T())} + + // The rest of the setup will be to prime the resource service with some data + suite.nodeNoHealth = resourcetest.Resource(pbcatalog.NodeType, "test-node-no-health"). + WithData(suite.T(), nodeData). + Write(suite.T(), suite.resourceClient).Id + + suite.nodePassing = resourcetest.Resource(pbcatalog.NodeType, "test-node-passing"). WithData(suite.T(), nodeData). - WithTenancy(tenancy). Write(suite.T(), suite.resourceClient).Id -} -func (suite *nodeHealthControllerTestSuite) SetupTest() { - mockTenancyBridge := &mockres.MockTenancyBridge{} - suite.tenancies = resourcetest.TestTenancies() - for _, tenancy := range suite.tenancies { - mockTenancyBridge.On("PartitionExists", tenancy.Partition).Return(true, nil) - mockTenancyBridge.On("NamespaceExists", tenancy.Partition, tenancy.Namespace).Return(true, nil) - mockTenancyBridge.On("IsPartitionMarkedForDeletion", tenancy.Partition).Return(false, nil) - mockTenancyBridge.On("IsNamespaceMarkedForDeletion", tenancy.Partition, tenancy.Namespace).Return(false, nil) + suite.nodeWarning = resourcetest.Resource(pbcatalog.NodeType, "test-node-warning"). + WithData(suite.T(), nodeData). + Write(suite.T(), suite.resourceClient).Id + + suite.nodeCritical = resourcetest.Resource(pbcatalog.NodeType, "test-node-critical"). + WithData(suite.T(), nodeData). + Write(suite.T(), suite.resourceClient).Id + + suite.nodeMaintenance = resourcetest.Resource(pbcatalog.NodeType, "test-node-maintenance"). + WithData(suite.T(), nodeData). + Write(suite.T(), suite.resourceClient).Id + + nodeHealthDesiredStatus := map[string]pbcatalog.Health{ + suite.nodePassing.Name: pbcatalog.Health_HEALTH_PASSING, + suite.nodeWarning.Name: pbcatalog.Health_HEALTH_WARNING, + suite.nodeCritical.Name: pbcatalog.Health_HEALTH_CRITICAL, + suite.nodeMaintenance.Name: pbcatalog.Health_HEALTH_MAINTENANCE, + } + + // In order to exercise the behavior to ensure that its not a last-status-wins sort of thing + // we are strategically naming health statuses so that they will be returned in an order with + // the most precedent status being in the middle of the list. This will ensure that statuses + // seen later can overide a previous status and that statuses seen later do not override if + // they would lower the overall status such as going from critical -> warning. + precedenceHealth := []pbcatalog.Health{ + pbcatalog.Health_HEALTH_PASSING, + pbcatalog.Health_HEALTH_WARNING, + pbcatalog.Health_HEALTH_CRITICAL, + pbcatalog.Health_HEALTH_MAINTENANCE, + pbcatalog.Health_HEALTH_CRITICAL, + pbcatalog.Health_HEALTH_WARNING, + pbcatalog.Health_HEALTH_PASSING, } - cfg := mockres.Config{ - TenancyBridge: mockTenancyBridge, + + for _, node := range []*pbresource.ID{suite.nodePassing, suite.nodeWarning, suite.nodeCritical, suite.nodeMaintenance} { + for idx, health := range precedenceHealth { + if nodeHealthDesiredStatus[node.Name] >= health { + resourcetest.Resource(pbcatalog.HealthStatusType, fmt.Sprintf("test-check-%s-%d", node.Name, idx)). + WithData(suite.T(), &pbcatalog.HealthStatus{Type: "tcp", Status: health}). + WithOwner(node). + Write(suite.T(), suite.resourceClient) + } + } } - client := svctest.RunResourceServiceWithConfig(suite.T(), cfg, types.Register, types.RegisterDNSPolicy) - suite.resourceClient = resourcetest.NewClient(client) - suite.runtime = controller.Runtime{Client: suite.resourceClient, Logger: testutil.Logger(suite.T())} - suite.isEnterprise = versiontest.IsEnterprise() + + // create a DNSPolicy to be owned by the node. The type doesn't really matter it just needs + // to be something that doesn't care about its owner. All we want to prove is that we are + // filtering out non-HealthStatus types appropriately. + resourcetest.Resource(pbcatalog.DNSPolicyType, "test-policy"). + WithData(suite.T(), dnsPolicyData). + WithOwner(suite.nodeNoHealth). + Write(suite.T(), suite.resourceClient) } func (suite *nodeHealthControllerTestSuite) TestGetNodeHealthListError() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - // This resource id references a resource type that will not be - // registered with the resource service. The ListByOwner call - // should produce an InvalidArgument error. This test is meant - // to validate how that error is handled (its propagated back - // to the caller) - ref := resourceID( - &pbresource.Type{Group: "not", GroupVersion: "v1", Kind: "found"}, - "irrelevant", - tenancy, - ) - health, err := getNodeHealth(context.Background(), suite.runtime, ref) - require.Equal(suite.T(), pbcatalog.Health_HEALTH_CRITICAL, health) - require.Error(suite.T(), err) - require.Equal(suite.T(), codes.InvalidArgument, status.Code(err)) - }) + // This resource id references a resource type that will not be + // registered with the resource service. The ListByOwner call + // should produce an InvalidArgument error. This test is meant + // to validate how that error is handled (its propagated back + // to the caller) + ref := resourceID( + &pbresource.Type{Group: "not", GroupVersion: "v1", Kind: "found"}, + "irrelevant", + ) + health, err := getNodeHealth(context.Background(), suite.runtime, ref) + require.Equal(suite.T(), pbcatalog.Health_HEALTH_CRITICAL, health) + require.Error(suite.T(), err) + require.Equal(suite.T(), codes.InvalidArgument, status.Code(err)) } func (suite *nodeHealthControllerTestSuite) TestGetNodeHealthNoNode() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - // This test is meant to ensure that when the node doesn't exist - // no error is returned but also no data is. The default passing - // status should then be returned in the same manner as the node - // existing but with no associated HealthStatus resources. - ref := resourceID(pbcatalog.NodeType, "foo", tenancy) - ref.Uid = ulid.Make().String() - health, err := getNodeHealth(context.Background(), suite.runtime, ref) - - require.NoError(suite.T(), err) - require.Equal(suite.T(), pbcatalog.Health_HEALTH_PASSING, health) - }) + // This test is meant to ensure that when the node doesn't exist + // no error is returned but also no data is. The default passing + // status should then be returned in the same manner as the node + // existing but with no associated HealthStatus resources. + ref := resourceID(pbcatalog.NodeType, "foo") + ref.Uid = ulid.Make().String() + health, err := getNodeHealth(context.Background(), suite.runtime, ref) + + require.NoError(suite.T(), err) + require.Equal(suite.T(), pbcatalog.Health_HEALTH_PASSING, health) } func (suite *nodeHealthControllerTestSuite) TestGetNodeHealthNoStatus() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - - health, err := getNodeHealth(context.Background(), suite.runtime, suite.nodeNoHealth) - require.NoError(suite.T(), err) - require.Equal(suite.T(), pbcatalog.Health_HEALTH_PASSING, health) - }) + health, err := getNodeHealth(context.Background(), suite.runtime, suite.nodeNoHealth) + require.NoError(suite.T(), err) + require.Equal(suite.T(), pbcatalog.Health_HEALTH_PASSING, health) } func (suite *nodeHealthControllerTestSuite) TestGetNodeHealthPassingStatus() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - - health, err := getNodeHealth(context.Background(), suite.runtime, suite.nodePassing) - require.NoError(suite.T(), err) - require.Equal(suite.T(), pbcatalog.Health_HEALTH_PASSING, health) - }) + health, err := getNodeHealth(context.Background(), suite.runtime, suite.nodePassing) + require.NoError(suite.T(), err) + require.Equal(suite.T(), pbcatalog.Health_HEALTH_PASSING, health) } func (suite *nodeHealthControllerTestSuite) TestGetNodeHealthCriticalStatus() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - - health, err := getNodeHealth(context.Background(), suite.runtime, suite.nodeCritical) - require.NoError(suite.T(), err) - require.Equal(suite.T(), pbcatalog.Health_HEALTH_CRITICAL, health) - }) + health, err := getNodeHealth(context.Background(), suite.runtime, suite.nodeCritical) + require.NoError(suite.T(), err) + require.Equal(suite.T(), pbcatalog.Health_HEALTH_CRITICAL, health) } func (suite *nodeHealthControllerTestSuite) TestGetNodeHealthWarningStatus() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - - health, err := getNodeHealth(context.Background(), suite.runtime, suite.nodeWarning) - require.NoError(suite.T(), err) - require.Equal(suite.T(), pbcatalog.Health_HEALTH_WARNING, health) - }) + health, err := getNodeHealth(context.Background(), suite.runtime, suite.nodeWarning) + require.NoError(suite.T(), err) + require.Equal(suite.T(), pbcatalog.Health_HEALTH_WARNING, health) } func (suite *nodeHealthControllerTestSuite) TestGetNodeHealthMaintenanceStatus() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - - health, err := getNodeHealth(context.Background(), suite.runtime, suite.nodeMaintenance) - require.NoError(suite.T(), err) - require.Equal(suite.T(), pbcatalog.Health_HEALTH_MAINTENANCE, health) - }) + health, err := getNodeHealth(context.Background(), suite.runtime, suite.nodeMaintenance) + require.NoError(suite.T(), err) + require.Equal(suite.T(), pbcatalog.Health_HEALTH_MAINTENANCE, health) } func (suite *nodeHealthControllerTestSuite) TestReconcileNodeNotFound() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - // This test ensures that removed nodes are ignored. In particular we don't - // want to propagate the error and indefinitely keep re-reconciling in this case. - err := suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ - ID: resourceID(pbcatalog.NodeType, "not-found", tenancy), - }) - require.NoError(suite.T(), err) + // This test ensures that removed nodes are ignored. In particular we don't + // want to propagate the error and indefinitely keep re-reconciling in this case. + err := suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ + ID: resourceID(pbcatalog.NodeType, "not-found"), }) + require.NoError(suite.T(), err) } func (suite *nodeHealthControllerTestSuite) TestReconcilePropagateReadError() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - // This test aims to ensure that errors other than NotFound errors coming - // from the initial resource read get propagated. This case is very unrealistic - // as the controller should not have given us a request ID for a resource type - // that doesn't exist but this was the easiest way I could think of to synthesize - // a Read error. - ref := resourceID( - &pbresource.Type{Group: "not", GroupVersion: "v1", Kind: "found"}, - "irrelevant", - tenancy, - ) - - err := suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ - ID: ref, - }) - require.Error(suite.T(), err) - require.Equal(suite.T(), codes.InvalidArgument, status.Code(err)) + // This test aims to ensure that errors other than NotFound errors coming + // from the initial resource read get propagated. This case is very unrealistic + // as the controller should not have given us a request ID for a resource type + // that doesn't exist but this was the easiest way I could think of to synthesize + // a Read error. + ref := resourceID( + &pbresource.Type{Group: "not", GroupVersion: "v1", Kind: "found"}, + "irrelevant", + ) + + err := suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ + ID: ref, }) + require.Error(suite.T(), err) + require.Equal(suite.T(), codes.InvalidArgument, status.Code(err)) } func (suite *nodeHealthControllerTestSuite) testReconcileStatus(id *pbresource.ID, expectedStatus *pbresource.Condition) *pbresource.Resource { @@ -233,75 +250,60 @@ func (suite *nodeHealthControllerTestSuite) testReconcileStatus(id *pbresource.I } func (suite *nodeHealthControllerTestSuite) TestReconcile_StatusPassing() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - - suite.testReconcileStatus(suite.nodePassing, &pbresource.Condition{ - Type: StatusConditionHealthy, - State: pbresource.Condition_STATE_TRUE, - Reason: "HEALTH_PASSING", - Message: NodeHealthyMessage, - }) + suite.testReconcileStatus(suite.nodePassing, &pbresource.Condition{ + Type: StatusConditionHealthy, + State: pbresource.Condition_STATE_TRUE, + Reason: "HEALTH_PASSING", + Message: NodeHealthyMessage, }) } func (suite *nodeHealthControllerTestSuite) TestReconcile_StatusWarning() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - - suite.testReconcileStatus(suite.nodeWarning, &pbresource.Condition{ - Type: StatusConditionHealthy, - State: pbresource.Condition_STATE_FALSE, - Reason: "HEALTH_WARNING", - Message: NodeUnhealthyMessage, - }) + suite.testReconcileStatus(suite.nodeWarning, &pbresource.Condition{ + Type: StatusConditionHealthy, + State: pbresource.Condition_STATE_FALSE, + Reason: "HEALTH_WARNING", + Message: NodeUnhealthyMessage, }) } func (suite *nodeHealthControllerTestSuite) TestReconcile_StatusCritical() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - - suite.testReconcileStatus(suite.nodeCritical, &pbresource.Condition{ - Type: StatusConditionHealthy, - State: pbresource.Condition_STATE_FALSE, - Reason: "HEALTH_CRITICAL", - Message: NodeUnhealthyMessage, - }) + suite.testReconcileStatus(suite.nodeCritical, &pbresource.Condition{ + Type: StatusConditionHealthy, + State: pbresource.Condition_STATE_FALSE, + Reason: "HEALTH_CRITICAL", + Message: NodeUnhealthyMessage, }) } func (suite *nodeHealthControllerTestSuite) TestReconcile_StatusMaintenance() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - - suite.testReconcileStatus(suite.nodeMaintenance, &pbresource.Condition{ - Type: StatusConditionHealthy, - State: pbresource.Condition_STATE_FALSE, - Reason: "HEALTH_MAINTENANCE", - Message: NodeUnhealthyMessage, - }) + suite.testReconcileStatus(suite.nodeMaintenance, &pbresource.Condition{ + Type: StatusConditionHealthy, + State: pbresource.Condition_STATE_FALSE, + Reason: "HEALTH_MAINTENANCE", + Message: NodeUnhealthyMessage, }) } func (suite *nodeHealthControllerTestSuite) TestReconcile_AvoidRereconciliationWrite() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - - res1 := suite.testReconcileStatus(suite.nodeWarning, &pbresource.Condition{ - Type: StatusConditionHealthy, - State: pbresource.Condition_STATE_FALSE, - Reason: "HEALTH_WARNING", - Message: NodeUnhealthyMessage, - }) - - res2 := suite.testReconcileStatus(suite.nodeWarning, &pbresource.Condition{ - Type: StatusConditionHealthy, - State: pbresource.Condition_STATE_FALSE, - Reason: "HEALTH_WARNING", - Message: NodeUnhealthyMessage, - }) + res1 := suite.testReconcileStatus(suite.nodeWarning, &pbresource.Condition{ + Type: StatusConditionHealthy, + State: pbresource.Condition_STATE_FALSE, + Reason: "HEALTH_WARNING", + Message: NodeUnhealthyMessage, + }) - // If another status write was performed then the versions would differ. This - // therefore proves that after a second reconciliation without any change in status - // that we are not making subsequent status writes. - require.Equal(suite.T(), res1.Version, res2.Version) + res2 := suite.testReconcileStatus(suite.nodeWarning, &pbresource.Condition{ + Type: StatusConditionHealthy, + State: pbresource.Condition_STATE_FALSE, + Reason: "HEALTH_WARNING", + Message: NodeUnhealthyMessage, }) + + // If another status write was performed then the versions would differ. This + // therefore proves that after a second reconciliation without any change in status + // that we are not making subsequent status writes. + require.Equal(suite.T(), res1.Version, res2.Version) } func (suite *nodeHealthControllerTestSuite) waitForReconciliation(id *pbresource.ID, reason string) { @@ -320,127 +322,45 @@ func (suite *nodeHealthControllerTestSuite) waitForReconciliation(id *pbresource require.Equal(r, reason, nodeHealthStatus.Conditions[0].Reason) }) } - func (suite *nodeHealthControllerTestSuite) TestController() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - - // create the controller manager - mgr := controller.NewManager(suite.resourceClient, testutil.Logger(suite.T())) - - // register our controller - mgr.Register(NodeHealthController()) - mgr.SetRaftLeader(true) - ctx, cancel := context.WithCancel(context.Background()) - suite.T().Cleanup(cancel) - - // run the manager - go mgr.Run(ctx) - - // ensure that the node health eventually gets set. - suite.waitForReconciliation(suite.nodePassing, "HEALTH_PASSING") - - // rewrite the resource - this will cause the nodes health - // to be rereconciled but wont result in any health change - resourcetest.Resource(pbcatalog.NodeType, suite.nodePassing.Name). - WithData(suite.T(), &pbcatalog.Node{ - Addresses: []*pbcatalog.NodeAddress{ - { - Host: "198.18.0.1", - }, + // create the controller manager + mgr := controller.NewManager(suite.resourceClient, testutil.Logger(suite.T())) + + // register our controller + mgr.Register(NodeHealthController()) + mgr.SetRaftLeader(true) + ctx, cancel := context.WithCancel(context.Background()) + suite.T().Cleanup(cancel) + + // run the manager + go mgr.Run(ctx) + + // ensure that the node health eventually gets set. + suite.waitForReconciliation(suite.nodePassing, "HEALTH_PASSING") + + // rewrite the resource - this will cause the nodes health + // to be rereconciled but wont result in any health change + resourcetest.Resource(pbcatalog.NodeType, suite.nodePassing.Name). + WithData(suite.T(), &pbcatalog.Node{ + Addresses: []*pbcatalog.NodeAddress{ + { + Host: "198.18.0.1", }, - }). - WithTenancy(tenancy). - Write(suite.T(), suite.resourceClient) + }, + }). + Write(suite.T(), suite.resourceClient) - // wait for rereconciliation to happen - suite.waitForReconciliation(suite.nodePassing, "HEALTH_PASSING") + // wait for rereconciliation to happen + suite.waitForReconciliation(suite.nodePassing, "HEALTH_PASSING") - resourcetest.Resource(pbcatalog.HealthStatusType, "failure"). - WithData(suite.T(), &pbcatalog.HealthStatus{Type: "fake", Status: pbcatalog.Health_HEALTH_CRITICAL}). - WithOwner(suite.nodePassing). - WithTenancy(tenancy). - Write(suite.T(), suite.resourceClient) + resourcetest.Resource(pbcatalog.HealthStatusType, "failure"). + WithData(suite.T(), &pbcatalog.HealthStatus{Type: "fake", Status: pbcatalog.Health_HEALTH_CRITICAL}). + WithOwner(suite.nodePassing). + Write(suite.T(), suite.resourceClient) - suite.waitForReconciliation(suite.nodePassing, "HEALTH_CRITICAL") - }) + suite.waitForReconciliation(suite.nodePassing, "HEALTH_CRITICAL") } func TestNodeHealthController(t *testing.T) { suite.Run(t, new(nodeHealthControllerTestSuite)) } - -func (suite *nodeHealthControllerTestSuite) appendTenancyInfo(tenancy *pbresource.Tenancy) string { - return fmt.Sprintf("%s_Namespace_%s_Partition", tenancy.Namespace, tenancy.Partition) -} - -func (suite *nodeHealthControllerTestSuite) setupNodesWithTenancy(tenancy *pbresource.Tenancy) { - - // The rest of the setup will be to prime the resource service with some data - suite.nodeNoHealth = suite.writeNode("test-node-no-health", tenancy) - suite.nodePassing = suite.writeNode("test-node-passing", tenancy) - suite.nodeWarning = suite.writeNode("test-node-warning", tenancy) - suite.nodeCritical = suite.writeNode("test-node-critical", tenancy) - suite.nodeMaintenance = suite.writeNode("test-node-maintenance", tenancy) - - nodeHealthDesiredStatus := map[string]pbcatalog.Health{ - suite.nodePassing.Name: pbcatalog.Health_HEALTH_PASSING, - suite.nodeWarning.Name: pbcatalog.Health_HEALTH_WARNING, - suite.nodeCritical.Name: pbcatalog.Health_HEALTH_CRITICAL, - suite.nodeMaintenance.Name: pbcatalog.Health_HEALTH_MAINTENANCE, - } - - // In order to exercise the behavior to ensure that its not a last-status-wins sort of thing - // we are strategically naming health statuses so that they will be returned in an order with - // the most precedent status being in the middle of the list. This will ensure that statuses - // seen later can overide a previous status and that statuses seen later do not override if - // they would lower the overall status such as going from critical -> warning. - precedenceHealth := []pbcatalog.Health{ - pbcatalog.Health_HEALTH_PASSING, - pbcatalog.Health_HEALTH_WARNING, - pbcatalog.Health_HEALTH_CRITICAL, - pbcatalog.Health_HEALTH_MAINTENANCE, - pbcatalog.Health_HEALTH_CRITICAL, - pbcatalog.Health_HEALTH_WARNING, - pbcatalog.Health_HEALTH_PASSING, - } - - for _, node := range []*pbresource.ID{suite.nodePassing, suite.nodeWarning, suite.nodeCritical, suite.nodeMaintenance} { - for idx, health := range precedenceHealth { - if nodeHealthDesiredStatus[node.Name] >= health { - resourcetest.Resource(pbcatalog.HealthStatusType, fmt.Sprintf("test-check-%s-%d-%s-%s", node.Name, idx, tenancy.Partition, tenancy.Namespace)). - WithData(suite.T(), &pbcatalog.HealthStatus{Type: "tcp", Status: health}). - WithOwner(node). - Write(suite.T(), suite.resourceClient) - } - } - } - - // create a DNSPolicy to be owned by the node. The type doesn't really matter it just needs - // to be something that doesn't care about its owner. All we want to prove is that we are - // filtering out non-HealthStatus types appropriately. - resourcetest.Resource(pbcatalog.DNSPolicyType, "test-policy-"+tenancy.Partition+"-"+tenancy.Namespace). - WithData(suite.T(), dnsPolicyData). - WithOwner(suite.nodeNoHealth). - WithTenancy(tenancy). - Write(suite.T(), suite.resourceClient) -} - -func (suite *nodeHealthControllerTestSuite) cleanUpNodes() { - suite.resourceClient.MustDelete(suite.T(), suite.nodeNoHealth) - suite.resourceClient.MustDelete(suite.T(), suite.nodeCritical) - suite.resourceClient.MustDelete(suite.T(), suite.nodeWarning) - suite.resourceClient.MustDelete(suite.T(), suite.nodePassing) - suite.resourceClient.MustDelete(suite.T(), suite.nodeMaintenance) -} - -func (suite *nodeHealthControllerTestSuite) runTestCaseWithTenancies(t func(*pbresource.Tenancy)) { - for _, tenancy := range suite.tenancies { - suite.Run(suite.appendTenancyInfo(tenancy), func() { - suite.setupNodesWithTenancy(tenancy) - suite.T().Cleanup(func() { - suite.cleanUpNodes() - }) - t(tenancy) - }) - } -} diff --git a/internal/catalog/internal/controllers/workloadhealth/controller_test.go b/internal/catalog/internal/controllers/workloadhealth/controller_test.go index 79e85da3856e3..9a00a940a07e0 100644 --- a/internal/catalog/internal/controllers/workloadhealth/controller_test.go +++ b/internal/catalog/internal/controllers/workloadhealth/controller_test.go @@ -6,6 +6,8 @@ package workloadhealth import ( "context" "fmt" + "github.com/hashicorp/consul/internal/resource" + "google.golang.org/protobuf/testing/protocmp" "testing" "time" @@ -13,22 +15,18 @@ import ( "github.com/stretchr/testify/suite" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - "google.golang.org/protobuf/testing/protocmp" - svc "github.com/hashicorp/consul/agent/grpc-external/services/resource" svctest "github.com/hashicorp/consul/agent/grpc-external/services/resource/testing" "github.com/hashicorp/consul/internal/catalog/internal/controllers/nodehealth" "github.com/hashicorp/consul/internal/catalog/internal/mappers/nodemapper" "github.com/hashicorp/consul/internal/catalog/internal/types" "github.com/hashicorp/consul/internal/controller" - "github.com/hashicorp/consul/internal/resource" "github.com/hashicorp/consul/internal/resource/resourcetest" pbcatalog "github.com/hashicorp/consul/proto-public/pbcatalog/v2beta1" "github.com/hashicorp/consul/proto-public/pbresource" "github.com/hashicorp/consul/proto/private/prototest" "github.com/hashicorp/consul/sdk/testutil" "github.com/hashicorp/consul/sdk/testutil/retry" - "github.com/hashicorp/consul/version/versiontest" ) var ( @@ -47,15 +45,10 @@ var ( } ) -func resourceID(rtype *pbresource.Type, name string, tenancy *pbresource.Tenancy) *pbresource.ID { - defaultTenancy := resource.DefaultNamespacedTenancy() - if tenancy != nil { - defaultTenancy = tenancy - } - +func resourceID(rtype *pbresource.Type, name string) *pbresource.ID { return &pbresource.ID{ Type: rtype, - Tenancy: defaultTenancy, + Tenancy: resource.DefaultNamespacedTenancy(), Name: name, } } @@ -86,31 +79,18 @@ type controllerSuite struct { suite.Suite client pbresource.ResourceServiceClient runtime controller.Runtime - - isEnterprise bool - tenancies []*pbresource.Tenancy } func (suite *controllerSuite) SetupTest() { - suite.tenancies = resourcetest.TestTenancies() - mockTenancyBridge := &svc.MockTenancyBridge{} - for _, tenancy := range suite.tenancies { - mockTenancyBridge.On("PartitionExists", tenancy.Partition).Return(true, nil) - mockTenancyBridge.On("IsPartitionMarkedForDeletion", tenancy.Partition).Return(false, nil) - mockTenancyBridge.On("NamespaceExists", tenancy.Partition, tenancy.Namespace).Return(true, nil) - mockTenancyBridge.On("IsNamespaceMarkedForDeletion", tenancy.Partition, tenancy.Namespace).Return(false, nil) - } - - suite.client = svctest.RunResourceServiceWithConfig(suite.T(), svc.Config{TenancyBridge: mockTenancyBridge}, types.Register) + suite.client = svctest.RunResourceService(suite.T(), types.Register) suite.runtime = controller.Runtime{Client: suite.client, Logger: testutil.Logger(suite.T())} - suite.isEnterprise = versiontest.IsEnterprise() } // injectNodeWithStatus is a helper method to write a Node resource and synthesize its status // in a manner consistent with the node-health controller. This allows us to not actually // run and test the node-health controller but consume its "api" in the form of how // it encodes status. -func (suite *controllerSuite) injectNodeWithStatus(name string, health pbcatalog.Health, tenancy *pbresource.Tenancy) *pbresource.Resource { +func (suite *controllerSuite) injectNodeWithStatus(name string, health pbcatalog.Health) *pbresource.Resource { suite.T().Helper() state := pbresource.Condition_STATE_TRUE if health >= pbcatalog.Health_HEALTH_WARNING { @@ -119,7 +99,6 @@ func (suite *controllerSuite) injectNodeWithStatus(name string, health pbcatalog return resourcetest.Resource(pbcatalog.NodeType, name). WithData(suite.T(), nodeData). - WithTenancy(tenancy). WithStatus(nodehealth.StatusKey, &pbresource.Status{ Conditions: []*pbresource.Condition{ { @@ -163,20 +142,18 @@ func (suite *workloadHealthControllerTestSuite) SetupTest() { // // * The node to workload association is now being tracked by the node mapper // * The workloads status was updated and now matches the expected value -func (suite *workloadHealthControllerTestSuite) testReconcileWithNode(nodeHealth, workloadHealth pbcatalog.Health, tenancy *pbresource.Tenancy, status *pbresource.Condition) *pbresource.Resource { +func (suite *workloadHealthControllerTestSuite) testReconcileWithNode(nodeHealth, workloadHealth pbcatalog.Health, status *pbresource.Condition) *pbresource.Resource { suite.T().Helper() - node := suite.injectNodeWithStatus("test-node", nodeHealth, tenancy) + node := suite.injectNodeWithStatus("test-node", nodeHealth) workload := resourcetest.Resource(pbcatalog.WorkloadType, "test-workload"). WithData(suite.T(), workloadData(node.Id.Name)). - WithTenancy(tenancy). Write(suite.T(), suite.client) resourcetest.Resource(pbcatalog.HealthStatusType, "test-status"). WithData(suite.T(), &pbcatalog.HealthStatus{Type: "tcp", Status: workloadHealth}). WithOwner(workload.Id). - WithTenancy(tenancy). Write(suite.T(), suite.client) err := suite.reconciler.Reconcile(context.Background(), suite.runtime, controller.Request{ @@ -212,16 +189,14 @@ func (suite *workloadHealthControllerTestSuite) testReconcileWithNode(nodeHealth // This is really just a tirmmed down version of testReconcileWithNode. It seemed // simpler and easier to read if these were two separate methods instead of combining // them in one with more branching based off of detecting whether nodes are in use. -func (suite *workloadHealthControllerTestSuite) testReconcileWithoutNode(workloadHealth pbcatalog.Health, tenancy *pbresource.Tenancy, status *pbresource.Condition) *pbresource.Resource { +func (suite *workloadHealthControllerTestSuite) testReconcileWithoutNode(workloadHealth pbcatalog.Health, status *pbresource.Condition) *pbresource.Resource { suite.T().Helper() workload := resourcetest.Resource(pbcatalog.WorkloadType, "test-workload"). WithData(suite.T(), workloadData("")). - WithTenancy(tenancy). Write(suite.T(), suite.client) resourcetest.Resource(pbcatalog.HealthStatusType, "test-status"). WithData(suite.T(), &pbcatalog.HealthStatus{Type: "tcp", Status: workloadHealth}). - WithTenancy(tenancy). WithOwner(workload.Id). Write(suite.T(), suite.client) @@ -381,13 +356,11 @@ func (suite *workloadHealthControllerTestSuite) TestReconcile() { for name, tcase := range cases { suite.Run(name, func() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - if tcase.nodeHealth != pbcatalog.Health_HEALTH_ANY { - suite.testReconcileWithNode(tcase.nodeHealth, tcase.workloadHealth, tenancy, tcase.expectedStatus) - } else { - suite.testReconcileWithoutNode(tcase.workloadHealth, tenancy, tcase.expectedStatus) - } - }) + if tcase.nodeHealth != pbcatalog.Health_HEALTH_ANY { + suite.testReconcileWithNode(tcase.nodeHealth, tcase.workloadHealth, tcase.expectedStatus) + } else { + suite.testReconcileWithoutNode(tcase.workloadHealth, tcase.expectedStatus) + } }) } } @@ -399,60 +372,56 @@ func (suite *workloadHealthControllerTestSuite) TestReconcileReadError() { // Passing a resource with an unknown type isn't particularly realistic as the controller // manager running our reconciliation will ensure all resource ids used are valid. However // its a really easy way right not to force the error. - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - id := resourceID(fakeType, "blah", tenancy) + id := resourceID(fakeType, "blah") - err := suite.reconciler.Reconcile(context.Background(), suite.runtime, controller.Request{ID: id}) - require.Error(suite.T(), err) - require.Equal(suite.T(), codes.InvalidArgument, status.Code(err)) - }) + err := suite.reconciler.Reconcile(context.Background(), suite.runtime, controller.Request{ID: id}) + require.Error(suite.T(), err) + require.Equal(suite.T(), codes.InvalidArgument, status.Code(err)) } func (suite *workloadHealthControllerTestSuite) TestReconcileNotFound() { // This test wants to ensure that tracking for a workload is removed when the workload is deleted // so this test will inject the tracking, issue the Reconcile call which will get a // not found error and then ensure that the tracking was removed. - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - workload := resourcetest.Resource(pbcatalog.WorkloadType, "foo"). - WithData(suite.T(), workloadData("test-node")). - // don't write this because then in the call to reconcile the resource - // would be found and defeat the purpose of the tes - WithTenancy(tenancy). - Build() - - node := resourcetest.Resource(pbcatalog.NodeType, "test-node"). - WithData(suite.T(), nodeData). - WithTenancy(tenancy). - // Whether this gets written or not doesn't matter - Build() - - // Track the workload - this simulates a previous round of reconciliation - // where the workload existed and was associated to the node. Other tests - // will cover more of the lifecycle of the controller so for the purposes - // of this test we can just inject it ourselves. - suite.mapper.TrackWorkload(workload.Id, node.Id) - - // check that the worklooad is in fact tracked properly - reqs, err := suite.mapper.MapNodeToWorkloads(context.Background(), suite.runtime, node) - - require.NoError(suite.T(), err) - require.Len(suite.T(), reqs, 1) - prototest.AssertDeepEqual(suite.T(), workload.Id, reqs[0].ID) - - // This workload was never actually inserted so the request should return a NotFound - // error and remove the workload from tracking - require.NoError( - suite.T(), - suite.reconciler.Reconcile( - context.Background(), - suite.runtime, - controller.Request{ID: workload.Id})) - - // Check the mapper again to ensure the node:workload association was removed. - reqs, err = suite.mapper.MapNodeToWorkloads(context.Background(), suite.runtime, node) - require.NoError(suite.T(), err) - require.Empty(suite.T(), reqs) - }) + + workload := resourcetest.Resource(pbcatalog.WorkloadType, "foo"). + WithData(suite.T(), workloadData("test-node")). + // don't write this because then in the call to reconcile the resource + // would be found and defeat the purpose of the tes + WithTenancy(resource.DefaultNamespacedTenancy()). + Build() + + node := resourcetest.Resource(pbcatalog.NodeType, "test-node"). + WithData(suite.T(), nodeData). + // Whether this gets written or not doesn't matter + Build() + + // Track the workload - this simulates a previous round of reconciliation + // where the workload existed and was associated to the node. Other tests + // will cover more of the lifecycle of the controller so for the purposes + // of this test we can just inject it ourselves. + suite.mapper.TrackWorkload(workload.Id, node.Id) + + // check that the worklooad is in fact tracked properly + reqs, err := suite.mapper.MapNodeToWorkloads(context.Background(), suite.runtime, node) + + require.NoError(suite.T(), err) + require.Len(suite.T(), reqs, 1) + prototest.AssertDeepEqual(suite.T(), workload.Id, reqs[0].ID) + + // This workload was never actually inserted so the request should return a NotFound + // error and remove the workload from tracking + require.NoError( + suite.T(), + suite.reconciler.Reconcile( + context.Background(), + suite.runtime, + controller.Request{ID: workload.Id})) + + // Check the mapper again to ensure the node:workload association was removed. + reqs, err = suite.mapper.MapNodeToWorkloads(context.Background(), suite.runtime, node) + require.NoError(suite.T(), err) + require.Empty(suite.T(), reqs) } func (suite *workloadHealthControllerTestSuite) TestGetNodeHealthError() { @@ -465,30 +434,25 @@ func (suite *workloadHealthControllerTestSuite) TestGetNodeHealthError() { // but the exact error isn't very relevant to the core reason this // test exists. - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - node := resourcetest.Resource(pbcatalog.NodeType, "test-node"). - WithData(suite.T(), nodeData). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - - workload := resourcetest.Resource(pbcatalog.WorkloadType, "test-workload"). - WithData(suite.T(), workloadData(node.Id.Name)). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - - resourcetest.Resource(pbcatalog.HealthStatusType, "test-status"). - WithData(suite.T(), &pbcatalog.HealthStatus{Type: "tcp", Status: pbcatalog.Health_HEALTH_CRITICAL}). - WithOwner(workload.Id). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - - err := suite.reconciler.Reconcile(context.Background(), suite.runtime, controller.Request{ - ID: workload.Id, - }) + node := resourcetest.Resource(pbcatalog.NodeType, "test-node"). + WithData(suite.T(), nodeData). + Write(suite.T(), suite.client) - require.Error(suite.T(), err) - require.Equal(suite.T(), errNodeUnreconciled, err) + workload := resourcetest.Resource(pbcatalog.WorkloadType, "test-workload"). + WithData(suite.T(), workloadData(node.Id.Name)). + Write(suite.T(), suite.client) + + resourcetest.Resource(pbcatalog.HealthStatusType, "test-status"). + WithData(suite.T(), &pbcatalog.HealthStatus{Type: "tcp", Status: pbcatalog.Health_HEALTH_CRITICAL}). + WithOwner(workload.Id). + Write(suite.T(), suite.client) + + err := suite.reconciler.Reconcile(context.Background(), suite.runtime, controller.Request{ + ID: workload.Id, }) + + require.Error(suite.T(), err) + require.Equal(suite.T(), errNodeUnreconciled, err) } func (suite *workloadHealthControllerTestSuite) TestReconcile_AvoidReconciliationWrite() { @@ -497,26 +461,24 @@ func (suite *workloadHealthControllerTestSuite) TestReconcile_AvoidReconciliatio // we check that calling Reconcile twice in a row without any actual health change // doesn't bump the Version (which would increased for any write of the resource // or its status) - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - status := &pbresource.Condition{ - Type: StatusConditionHealthy, - State: pbresource.Condition_STATE_FALSE, - Reason: "HEALTH_WARNING", - Message: WorkloadUnhealthyMessage, - } - res1 := suite.testReconcileWithoutNode(pbcatalog.Health_HEALTH_WARNING, tenancy, status) + status := &pbresource.Condition{ + Type: StatusConditionHealthy, + State: pbresource.Condition_STATE_FALSE, + Reason: "HEALTH_WARNING", + Message: WorkloadUnhealthyMessage, + } + res1 := suite.testReconcileWithoutNode(pbcatalog.Health_HEALTH_WARNING, status) - err := suite.reconciler.Reconcile(context.Background(), suite.runtime, controller.Request{ID: res1.Id}) - require.NoError(suite.T(), err) + err := suite.reconciler.Reconcile(context.Background(), suite.runtime, controller.Request{ID: res1.Id}) + require.NoError(suite.T(), err) - // check that the status hasn't changed - res2 := suite.checkWorkloadStatus(res1.Id, status) + // check that the status hasn't changed + res2 := suite.checkWorkloadStatus(res1.Id, status) - // If another status write was performed then the versions would differ. This - // therefore proves that after a second reconciliation without any change - // in status that the controller is not making extra status writes. - require.Equal(suite.T(), res1.Version, res2.Version) - }) + // If another status write was performed then the versions would differ. This + // therefore proves that after a second reconciliation without any change + // in status that the controller is not making extra status writes. + require.Equal(suite.T(), res1.Version, res2.Version) } func (suite *workloadHealthControllerTestSuite) TestController() { @@ -536,52 +498,47 @@ func (suite *workloadHealthControllerTestSuite) TestController() { // run the manager go mgr.Run(ctx) - suite.controllerSuite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - node := suite.injectNodeWithStatus("test-node", pbcatalog.Health_HEALTH_PASSING, tenancy) - - // create the workload - workload := resourcetest.Resource(pbcatalog.WorkloadType, "test-workload"). - WithData(suite.T(), workloadData(node.Id.Name)). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - - // Wait for reconciliation to occur and mark the workload as passing. - suite.waitForReconciliation(workload.Id, "HEALTH_PASSING") - - // Simulate a node unhealthy - suite.injectNodeWithStatus("test-node", pbcatalog.Health_HEALTH_WARNING, tenancy) - - // Wait for reconciliation to occur and mark the workload as warning - // due to the node going into the warning state. - suite.waitForReconciliation(workload.Id, "HEALTH_WARNING") - - // Now register a critical health check that should supercede the nodes - // warning status - - resourcetest.Resource(pbcatalog.HealthStatusType, "test-status"). - WithData(suite.T(), &pbcatalog.HealthStatus{Type: "tcp", Status: pbcatalog.Health_HEALTH_CRITICAL}). - WithOwner(workload.Id). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - - // Wait for reconciliation to occur again and mark the workload as unhealthy - suite.waitForReconciliation(workload.Id, "HEALTH_CRITICAL") - - // Put the health status back into a passing state and delink the node - resourcetest.Resource(pbcatalog.HealthStatusType, "test-status"). - WithData(suite.T(), &pbcatalog.HealthStatus{Type: "tcp", Status: pbcatalog.Health_HEALTH_PASSING}). - WithOwner(workload.Id). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - workload = resourcetest.Resource(pbcatalog.WorkloadType, "test-workload"). - WithData(suite.T(), workloadData("")). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - - // Now that the workload health is passing and its not associated with the node its status should - // eventually become passing - suite.waitForReconciliation(workload.Id, "HEALTH_PASSING") - }) + // create a node to link things with + node := suite.injectNodeWithStatus("test-node", pbcatalog.Health_HEALTH_PASSING) + + // create the workload + workload := resourcetest.Resource(pbcatalog.WorkloadType, "test-workload"). + WithData(suite.T(), workloadData(node.Id.Name)). + Write(suite.T(), suite.client) + + // Wait for reconciliation to occur and mark the workload as passing. + suite.waitForReconciliation(workload.Id, "HEALTH_PASSING") + + // Simulate a node unhealthy + suite.injectNodeWithStatus("test-node", pbcatalog.Health_HEALTH_WARNING) + + // Wait for reconciliation to occur and mark the workload as warning + // due to the node going into the warning state. + suite.waitForReconciliation(workload.Id, "HEALTH_WARNING") + + // Now register a critical health check that should supercede the nodes + // warning status + + resourcetest.Resource(pbcatalog.HealthStatusType, "test-status"). + WithData(suite.T(), &pbcatalog.HealthStatus{Type: "tcp", Status: pbcatalog.Health_HEALTH_CRITICAL}). + WithOwner(workload.Id). + Write(suite.T(), suite.client) + + // Wait for reconciliation to occur again and mark the workload as unhealthy + suite.waitForReconciliation(workload.Id, "HEALTH_CRITICAL") + + // Put the health status back into a passing state and delink the node + resourcetest.Resource(pbcatalog.HealthStatusType, "test-status"). + WithData(suite.T(), &pbcatalog.HealthStatus{Type: "tcp", Status: pbcatalog.Health_HEALTH_PASSING}). + WithOwner(workload.Id). + Write(suite.T(), suite.client) + workload = resourcetest.Resource(pbcatalog.WorkloadType, "test-workload"). + WithData(suite.T(), workloadData("")). + Write(suite.T(), suite.client) + + // Now that the workload health is passing and its not associated with the node its status should + // eventually become passing + suite.waitForReconciliation(workload.Id, "HEALTH_PASSING") } // wait for reconciliation is a helper to check if a resource has been reconciled and @@ -612,7 +569,7 @@ type getWorkloadHealthTestSuite struct { controllerSuite } -func (suite *getWorkloadHealthTestSuite) addHealthStatuses(workload *pbresource.ID, tenancy *pbresource.Tenancy, desiredHealth pbcatalog.Health) { +func (suite *getWorkloadHealthTestSuite) addHealthStatuses(workload *pbresource.ID, desiredHealth pbcatalog.Health) { // In order to exercise the behavior to ensure that the ordering a health status is // seen doesn't matter this is strategically naming health status so that they will be // returned in an order with the most precedent status being in the middle of the list. @@ -633,7 +590,6 @@ func (suite *getWorkloadHealthTestSuite) addHealthStatuses(workload *pbresource. if desiredHealth >= health { resourcetest.Resource(pbcatalog.HealthStatusType, fmt.Sprintf("check-%s-%d", workload.Name, idx)). WithData(suite.T(), &pbcatalog.HealthStatus{Type: "tcp", Status: health}). - WithTenancy(tenancy). WithOwner(workload). Write(suite.T(), suite.client) } @@ -645,28 +601,23 @@ func (suite *getWorkloadHealthTestSuite) TestListError() { // getWorkloadHealth. When the resource listing fails, we want to // propagate the error which should eventually result in retrying // the operation. - suite.controllerSuite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - health, err := getWorkloadHealth(context.Background(), suite.runtime, resourceID(fakeType, "foo", tenancy)) + health, err := getWorkloadHealth(context.Background(), suite.runtime, resourceID(fakeType, "foo")) - require.Error(suite.T(), err) - require.Equal(suite.T(), codes.InvalidArgument, status.Code(err)) - require.Equal(suite.T(), pbcatalog.Health_HEALTH_CRITICAL, health) - }) + require.Error(suite.T(), err) + require.Equal(suite.T(), codes.InvalidArgument, status.Code(err)) + require.Equal(suite.T(), pbcatalog.Health_HEALTH_CRITICAL, health) } func (suite *getWorkloadHealthTestSuite) TestNoHealthStatuses() { // This test's goal is to ensure that when no HealthStatuses are owned by the // workload that the health is assumed to be passing. - suite.controllerSuite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - workload := resourcetest.Resource(pbcatalog.WorkloadType, "foo"). - WithData(suite.T(), workloadData("")). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - - health, err := getWorkloadHealth(context.Background(), suite.runtime, workload.Id) - require.NoError(suite.T(), err) - require.Equal(suite.T(), pbcatalog.Health_HEALTH_PASSING, health) - }) + workload := resourcetest.Resource(pbcatalog.WorkloadType, "foo"). + WithData(suite.T(), workloadData("")). + Write(suite.T(), suite.client) + + health, err := getWorkloadHealth(context.Background(), suite.runtime, workload.Id) + require.NoError(suite.T(), err) + require.Equal(suite.T(), pbcatalog.Health_HEALTH_PASSING, health) } func (suite *getWorkloadHealthTestSuite) TestWithStatuses() { @@ -675,27 +626,24 @@ func (suite *getWorkloadHealthTestSuite) TestWithStatuses() { // helper method is used to inject multiple statuses in a way such that // the resource service will return them in a predictable order and can // properly exercise the code. - suite.controllerSuite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - for value, status := range pbcatalog.Health_name { - health := pbcatalog.Health(value) - if health == pbcatalog.Health_HEALTH_ANY { - continue - } + for value, status := range pbcatalog.Health_name { + health := pbcatalog.Health(value) + if health == pbcatalog.Health_HEALTH_ANY { + continue + } - suite.Run(status, func() { - workload := resourcetest.Resource(pbcatalog.WorkloadType, "foo"). - WithData(suite.T(), workloadData("")). - WithTenancy(tenancy). - Write(suite.T(), suite.client) + suite.Run(status, func() { + workload := resourcetest.Resource(pbcatalog.WorkloadType, "foo"). + WithData(suite.T(), workloadData("")). + Write(suite.T(), suite.client) - suite.addHealthStatuses(workload.Id, tenancy, health) + suite.addHealthStatuses(workload.Id, health) - actualHealth, err := getWorkloadHealth(context.Background(), suite.runtime, workload.Id) - require.NoError(suite.T(), err) - require.Equal(suite.T(), health, actualHealth) - }) - } - }) + actualHealth, err := getWorkloadHealth(context.Background(), suite.runtime, workload.Id) + require.NoError(suite.T(), err) + require.Equal(suite.T(), health, actualHealth) + }) + } } func TestGetWorkloadHealth(t *testing.T) { @@ -711,62 +659,53 @@ func (suite *getNodeHealthTestSuite) TestNotfound() { // present in the system results in a the critical health but no error. This situation // could occur when a linked node gets removed without the workloads being modified/removed. // When that occurs we want to steer traffic away from the linked node as soon as possible. - suite.controllerSuite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - health, err := getNodeHealth(context.Background(), suite.runtime, resourceID(pbcatalog.NodeType, "not-found", tenancy)) - require.NoError(suite.T(), err) - require.Equal(suite.T(), pbcatalog.Health_HEALTH_CRITICAL, health) - }) + health, err := getNodeHealth(context.Background(), suite.runtime, resourceID(pbcatalog.NodeType, "not-found")) + require.NoError(suite.T(), err) + require.Equal(suite.T(), pbcatalog.Health_HEALTH_CRITICAL, health) + } func (suite *getNodeHealthTestSuite) TestReadError() { // This test's goal is to ensure the getNodeHealth propagates unexpected errors from // its resource read call back to the caller. - suite.controllerSuite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - health, err := getNodeHealth(context.Background(), suite.runtime, resourceID(fakeType, "not-found", tenancy)) - require.Error(suite.T(), err) - require.Equal(suite.T(), codes.InvalidArgument, status.Code(err)) - require.Equal(suite.T(), pbcatalog.Health_HEALTH_CRITICAL, health) - }) + health, err := getNodeHealth(context.Background(), suite.runtime, resourceID(fakeType, "not-found")) + require.Error(suite.T(), err) + require.Equal(suite.T(), codes.InvalidArgument, status.Code(err)) + require.Equal(suite.T(), pbcatalog.Health_HEALTH_CRITICAL, health) } func (suite *getNodeHealthTestSuite) TestUnreconciled() { // This test's goal is to ensure that nodes with unreconciled health are deemed // critical. Basically, the workload health controller should defer calculating // the workload health until the associated nodes health is known. - suite.controllerSuite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - node := resourcetest.Resource(pbcatalog.NodeType, "unreconciled"). - WithData(suite.T(), nodeData). - WithTenancy(tenancy). - Write(suite.T(), suite.client). - GetId() - - health, err := getNodeHealth(context.Background(), suite.runtime, node) - require.Error(suite.T(), err) - require.Equal(suite.T(), errNodeUnreconciled, err) - require.Equal(suite.T(), pbcatalog.Health_HEALTH_CRITICAL, health) - }) + node := resourcetest.Resource(pbcatalog.NodeType, "unreconciled"). + WithData(suite.T(), nodeData). + Write(suite.T(), suite.client). + GetId() + + health, err := getNodeHealth(context.Background(), suite.runtime, node) + require.Error(suite.T(), err) + require.Equal(suite.T(), errNodeUnreconciled, err) + require.Equal(suite.T(), pbcatalog.Health_HEALTH_CRITICAL, health) } func (suite *getNodeHealthTestSuite) TestNoConditions() { // This test's goal is to ensure that if a node's health status doesn't have - // the expected condition then its deemed critical. This should never happen + // the expected condition then its deemedd critical. This should never happen // in the integrated system as the node health controller would have to be // buggy to add an empty status. However it could also indicate some breaking // change went in. Regardless, the code to handle this state is written // and it will be tested here. - suite.controllerSuite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - node := resourcetest.Resource(pbcatalog.NodeType, "no-conditions"). - WithData(suite.T(), nodeData). - WithTenancy(tenancy). - WithStatus(nodehealth.StatusKey, &pbresource.Status{}). - Write(suite.T(), suite.client). - GetId() - - health, err := getNodeHealth(context.Background(), suite.runtime, node) - require.Error(suite.T(), err) - require.Equal(suite.T(), errNodeHealthConditionNotFound, err) - require.Equal(suite.T(), pbcatalog.Health_HEALTH_CRITICAL, health) - }) + node := resourcetest.Resource(pbcatalog.NodeType, "no-conditions"). + WithData(suite.T(), nodeData). + WithStatus(nodehealth.StatusKey, &pbresource.Status{}). + Write(suite.T(), suite.client). + GetId() + + health, err := getNodeHealth(context.Background(), suite.runtime, node) + require.Error(suite.T(), err) + require.Equal(suite.T(), errNodeHealthConditionNotFound, err) + require.Equal(suite.T(), pbcatalog.Health_HEALTH_CRITICAL, health) } func (suite *getNodeHealthTestSuite) TestInvalidReason() { @@ -777,65 +716,48 @@ func (suite *getNodeHealthTestSuite) TestInvalidReason() { // controller to put it into this state. As users or other controllers could // potentially force it into this state by writing the status themselves, it // would be good to ensure the defined behavior works as expected. - suite.controllerSuite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - node := resourcetest.Resource(pbcatalog.NodeType, "invalid-reason"). - WithData(suite.T(), nodeData). - WithTenancy(tenancy). - WithStatus(nodehealth.StatusKey, &pbresource.Status{ - Conditions: []*pbresource.Condition{ - { - Type: nodehealth.StatusConditionHealthy, - State: pbresource.Condition_STATE_FALSE, - Reason: "INVALID_REASON", - }, + node := resourcetest.Resource(pbcatalog.NodeType, "invalid-reason"). + WithData(suite.T(), nodeData). + WithStatus(nodehealth.StatusKey, &pbresource.Status{ + Conditions: []*pbresource.Condition{ + { + Type: nodehealth.StatusConditionHealthy, + State: pbresource.Condition_STATE_FALSE, + Reason: "INVALID_REASON", }, - }). - Write(suite.T(), suite.client). - GetId() - - health, err := getNodeHealth(context.Background(), suite.runtime, node) - require.Error(suite.T(), err) - require.Equal(suite.T(), errNodeHealthInvalid, err) - require.Equal(suite.T(), pbcatalog.Health_HEALTH_CRITICAL, health) - }) + }, + }). + Write(suite.T(), suite.client). + GetId() + + health, err := getNodeHealth(context.Background(), suite.runtime, node) + require.Error(suite.T(), err) + require.Equal(suite.T(), errNodeHealthInvalid, err) + require.Equal(suite.T(), pbcatalog.Health_HEALTH_CRITICAL, health) } func (suite *getNodeHealthTestSuite) TestValidHealth() { // This test aims to ensure that all status that would be reported by the node-health // controller gets accurately detected and returned by the getNodeHealth function. - suite.controllerSuite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - for value, healthStr := range pbcatalog.Health_name { - health := pbcatalog.Health(value) - - // this is not a valid health that a health status - // may be in. - if health == pbcatalog.Health_HEALTH_ANY { - continue - } + for value, healthStr := range pbcatalog.Health_name { + health := pbcatalog.Health(value) - suite.T().Run(healthStr, func(t *testing.T) { - node := suite.injectNodeWithStatus("test-node", health, tenancy) - - actualHealth, err := getNodeHealth(context.Background(), suite.runtime, node.Id) - require.NoError(t, err) - require.Equal(t, health, actualHealth) - }) + // this is not a valid health that a health status + // may be in. + if health == pbcatalog.Health_HEALTH_ANY { + continue } - }) -} -func TestGetNodeHealth(t *testing.T) { - suite.Run(t, new(getNodeHealthTestSuite)) -} + suite.T().Run(healthStr, func(t *testing.T) { + node := suite.injectNodeWithStatus("test-node", health) -func (suite *controllerSuite) runTestCaseWithTenancies(testFunc func(*pbresource.Tenancy)) { - for _, tenancy := range suite.tenancies { - suite.Run(suite.appendTenancyInfo(tenancy), func() { - testFunc(tenancy) + actualHealth, err := getNodeHealth(context.Background(), suite.runtime, node.Id) + require.NoError(t, err) + require.Equal(t, health, actualHealth) }) } } -func (suite *controllerSuite) appendTenancyInfo(tenancy *pbresource.Tenancy) string { - return fmt.Sprintf("%s_Namespace_%s_Partition", tenancy.Namespace, tenancy.Partition) +func TestGetNodeHealth(t *testing.T) { + suite.Run(t, new(getNodeHealthTestSuite)) } diff --git a/internal/catalog/internal/types/acl_hooks.go b/internal/catalog/internal/types/acl_hooks.go index d9ddcb8e93cc1..8250767f72549 100644 --- a/internal/catalog/internal/types/acl_hooks.go +++ b/internal/catalog/internal/types/acl_hooks.go @@ -13,22 +13,31 @@ func aclReadHookResourceWithWorkloadSelector(authorizer acl.Authorizer, authzCon return authorizer.ToAllowAuthorizer().ServiceReadAllowed(id.GetName(), authzContext) } -func aclWriteHookResourceWithWorkloadSelector[T WorkloadSelecting](authorizer acl.Authorizer, authzContext *acl.AuthorizerContext, r *resource.DecodedResource[T]) error { +func aclWriteHookResourceWithWorkloadSelector[T WorkloadSelecting](authorizer acl.Authorizer, authzContext *acl.AuthorizerContext, res *pbresource.Resource) error { + if res == nil { + return resource.ErrNeedResource + } + + decodedService, err := resource.Decode[T](res) + if err != nil { + return resource.ErrNeedResource + } + // First check service:write on the name. - err := authorizer.ToAllowAuthorizer().ServiceWriteAllowed(r.GetId().GetName(), authzContext) + err = authorizer.ToAllowAuthorizer().ServiceWriteAllowed(res.GetId().GetName(), authzContext) if err != nil { return err } // Then also check whether we're allowed to select a service. - for _, name := range r.Data.GetWorkloads().GetNames() { + for _, name := range decodedService.GetData().GetWorkloads().GetNames() { err = authorizer.ToAllowAuthorizer().ServiceReadAllowed(name, authzContext) if err != nil { return err } } - for _, prefix := range r.Data.GetWorkloads().GetPrefixes() { + for _, prefix := range decodedService.GetData().GetWorkloads().GetPrefixes() { err = authorizer.ToAllowAuthorizer().ServiceReadPrefixAllowed(prefix, authzContext) if err != nil { return err @@ -41,7 +50,7 @@ func aclWriteHookResourceWithWorkloadSelector[T WorkloadSelecting](authorizer ac func ACLHooksForWorkloadSelectingType[T WorkloadSelecting]() *resource.ACLHooks { return &resource.ACLHooks{ Read: aclReadHookResourceWithWorkloadSelector, - Write: resource.DecodeAndAuthorizeWrite(aclWriteHookResourceWithWorkloadSelector[T]), + Write: aclWriteHookResourceWithWorkloadSelector[T], List: resource.NoOpACLListHook, } } diff --git a/internal/catalog/internal/types/dns_policy.go b/internal/catalog/internal/types/dns_policy.go index 91dd2615455ca..8e9dd864a9573 100644 --- a/internal/catalog/internal/types/dns_policy.go +++ b/internal/catalog/internal/types/dns_policy.go @@ -10,10 +10,9 @@ import ( "github.com/hashicorp/consul/internal/resource" pbcatalog "github.com/hashicorp/consul/proto-public/pbcatalog/v2beta1" + "github.com/hashicorp/consul/proto-public/pbresource" ) -type DecodedDNSPolicy = resource.DecodedResource[*pbcatalog.DNSPolicy] - func RegisterDNSPolicy(r resource.Registry) { r.Register(resource.Registration{ Type: pbcatalog.DNSPolicyType, @@ -24,13 +23,17 @@ func RegisterDNSPolicy(r resource.Registry) { }) } -var ValidateDNSPolicy = resource.DecodeAndValidate(validateDNSPolicy) +func ValidateDNSPolicy(res *pbresource.Resource) error { + var policy pbcatalog.DNSPolicy + + if err := res.Data.UnmarshalTo(&policy); err != nil { + return resource.NewErrDataParse(&policy, err) + } -func validateDNSPolicy(res *DecodedDNSPolicy) error { var err error // Ensure that this resource isn't useless and is attempting to // select at least one workload. - if selErr := ValidateSelector(res.Data.Workloads, false); selErr != nil { + if selErr := ValidateSelector(policy.Workloads, false); selErr != nil { err = multierror.Append(err, resource.ErrInvalidField{ Name: "workloads", Wrapped: selErr, @@ -38,7 +41,7 @@ func validateDNSPolicy(res *DecodedDNSPolicy) error { } // Validate the weights - if weightErr := validateDNSPolicyWeights(res.Data.Weights); weightErr != nil { + if weightErr := validateDNSPolicyWeights(policy.Weights); weightErr != nil { err = multierror.Append(err, resource.ErrInvalidField{ Name: "weights", Wrapped: weightErr, diff --git a/internal/catalog/internal/types/failover_policy.go b/internal/catalog/internal/types/failover_policy.go index 012150fc046dc..047bb9a95b050 100644 --- a/internal/catalog/internal/types/failover_policy.go +++ b/internal/catalog/internal/types/failover_policy.go @@ -15,8 +15,6 @@ import ( "github.com/hashicorp/consul/proto-public/pbresource" ) -type DecodedFailoverPolicy = resource.DecodedResource[*pbcatalog.FailoverPolicy] - func RegisterFailoverPolicy(r resource.Registry) { r.Register(resource.Registration{ Type: pbcatalog.FailoverPolicyType, @@ -26,32 +24,36 @@ func RegisterFailoverPolicy(r resource.Registry) { Validate: ValidateFailoverPolicy, ACLs: &resource.ACLHooks{ Read: aclReadHookFailoverPolicy, - Write: resource.DecodeAndAuthorizeWrite(aclWriteHookFailoverPolicy), + Write: aclWriteHookFailoverPolicy, List: resource.NoOpACLListHook, }, }) } -var MutateFailoverPolicy = resource.DecodeAndMutate(mutateFailoverPolicy) +func MutateFailoverPolicy(res *pbresource.Resource) error { + var failover pbcatalog.FailoverPolicy + + if err := res.Data.UnmarshalTo(&failover); err != nil { + return resource.NewErrDataParse(&failover, err) + } -func mutateFailoverPolicy(res *DecodedFailoverPolicy) (bool, error) { changed := false // Handle eliding empty configs. - if res.Data.Config != nil && res.Data.Config.IsEmpty() { - res.Data.Config = nil + if failover.Config != nil && failover.Config.IsEmpty() { + failover.Config = nil changed = true } - if res.Data.Config != nil { - if mutateFailoverConfig(res.Id.Tenancy, res.Data.Config) { + if failover.Config != nil { + if mutateFailoverConfig(res.Id.Tenancy, failover.Config) { changed = true } } - for port, pc := range res.Data.PortConfigs { + for port, pc := range failover.PortConfigs { if pc.IsEmpty() { - delete(res.Data.PortConfigs, port) + delete(failover.PortConfigs, port) changed = true } else { if mutateFailoverConfig(res.Id.Tenancy, pc) { @@ -59,12 +61,16 @@ func mutateFailoverPolicy(res *DecodedFailoverPolicy) (bool, error) { } } } - if len(res.Data.PortConfigs) == 0 { - res.Data.PortConfigs = nil + if len(failover.PortConfigs) == 0 { + failover.PortConfigs = nil changed = true } - return changed, nil + if !changed { + return nil + } + + return res.Data.MarshalFrom(&failover) } func mutateFailoverConfig(policyTenancy *pbresource.Tenancy, config *pbcatalog.FailoverConfig) (changed bool) { @@ -103,31 +109,35 @@ func isLocalPeer(p string) bool { return p == "local" || p == "" } -var ValidateFailoverPolicy = resource.DecodeAndValidate(validateFailoverPolicy) +func ValidateFailoverPolicy(res *pbresource.Resource) error { + var failover pbcatalog.FailoverPolicy + + if err := res.Data.UnmarshalTo(&failover); err != nil { + return resource.NewErrDataParse(&failover, err) + } -func validateFailoverPolicy(res *DecodedFailoverPolicy) error { var merr error - if res.Data.Config == nil && len(res.Data.PortConfigs) == 0 { + if failover.Config == nil && len(failover.PortConfigs) == 0 { merr = multierror.Append(merr, resource.ErrInvalidField{ Name: "config", Wrapped: fmt.Errorf("at least one of config or port_configs must be set"), }) } - if res.Data.Config != nil { + if failover.Config != nil { wrapConfigErr := func(err error) error { return resource.ErrInvalidField{ Name: "config", Wrapped: err, } } - if cfgErr := validateFailoverConfig(res.Data.Config, false, wrapConfigErr); cfgErr != nil { + if cfgErr := validateFailoverConfig(failover.Config, false, wrapConfigErr); cfgErr != nil { merr = multierror.Append(merr, cfgErr) } } - for portName, pc := range res.Data.PortConfigs { + for portName, pc := range failover.PortConfigs { wrapConfigErr := func(err error) error { return resource.ErrInvalidMapValue{ Map: "port_configs", @@ -323,7 +333,7 @@ func aclReadHookFailoverPolicy(authorizer acl.Authorizer, authzContext *acl.Auth return authorizer.ToAllowAuthorizer().ServiceReadAllowed(serviceName, authzContext) } -func aclWriteHookFailoverPolicy(authorizer acl.Authorizer, authzContext *acl.AuthorizerContext, res *DecodedFailoverPolicy) error { +func aclWriteHookFailoverPolicy(authorizer acl.Authorizer, authzContext *acl.AuthorizerContext, res *pbresource.Resource) error { // FailoverPolicy is name-aligned with Service serviceName := res.Id.Name @@ -332,10 +342,15 @@ func aclWriteHookFailoverPolicy(authorizer acl.Authorizer, authzContext *acl.Aut return err } + dec, err := resource.Decode[*pbcatalog.FailoverPolicy](res) + if err != nil { + return err + } + // Ensure you have service:read on any destination that may be affected by // traffic FROM this config change. - if res.Data.Config != nil { - for _, dest := range res.Data.Config.Destinations { + if dec.Data.Config != nil { + for _, dest := range dec.Data.Config.Destinations { destAuthzContext := resource.AuthorizerContext(dest.Ref.GetTenancy()) destServiceName := dest.Ref.GetName() if err := authorizer.ToAllowAuthorizer().ServiceReadAllowed(destServiceName, destAuthzContext); err != nil { @@ -343,7 +358,7 @@ func aclWriteHookFailoverPolicy(authorizer acl.Authorizer, authzContext *acl.Aut } } } - for _, pc := range res.Data.PortConfigs { + for _, pc := range dec.Data.PortConfigs { for _, dest := range pc.Destinations { destAuthzContext := resource.AuthorizerContext(dest.Ref.GetTenancy()) destServiceName := dest.Ref.GetName() diff --git a/internal/catalog/internal/types/health_checks.go b/internal/catalog/internal/types/health_checks.go index 3d819e12885aa..1333e2368d882 100644 --- a/internal/catalog/internal/types/health_checks.go +++ b/internal/catalog/internal/types/health_checks.go @@ -8,10 +8,9 @@ import ( "github.com/hashicorp/consul/internal/resource" pbcatalog "github.com/hashicorp/consul/proto-public/pbcatalog/v2beta1" + "github.com/hashicorp/consul/proto-public/pbresource" ) -type DecodedHealthChecks = resource.DecodedResource[*pbcatalog.HealthChecks] - func RegisterHealthChecks(r resource.Registry) { r.Register(resource.Registration{ Type: pbcatalog.HealthChecksType, @@ -22,13 +21,17 @@ func RegisterHealthChecks(r resource.Registry) { }) } -var ValidateHealthChecks = resource.DecodeAndValidate(validateHealthChecks) +func ValidateHealthChecks(res *pbresource.Resource) error { + var checks pbcatalog.HealthChecks + + if err := res.Data.UnmarshalTo(&checks); err != nil { + return resource.NewErrDataParse(&checks, err) + } -func validateHealthChecks(res *DecodedHealthChecks) error { var err error // Validate the workload selector - if selErr := ValidateSelector(res.Data.Workloads, false); selErr != nil { + if selErr := ValidateSelector(checks.Workloads, false); selErr != nil { err = multierror.Append(err, resource.ErrInvalidField{ Name: "workloads", Wrapped: selErr, @@ -36,7 +39,7 @@ func validateHealthChecks(res *DecodedHealthChecks) error { } // Validate each check - for idx, check := range res.Data.HealthChecks { + for idx, check := range checks.HealthChecks { if checkErr := validateCheck(check); checkErr != nil { err = multierror.Append(err, resource.ErrInvalidListElement{ Name: "checks", diff --git a/internal/catalog/internal/types/health_status.go b/internal/catalog/internal/types/health_status.go index c5ea7e106fa3b..fe92e858b025e 100644 --- a/internal/catalog/internal/types/health_status.go +++ b/internal/catalog/internal/types/health_status.go @@ -12,8 +12,6 @@ import ( "github.com/hashicorp/consul/proto-public/pbresource" ) -type DecodedHealthStatus = resource.DecodedResource[*pbcatalog.HealthStatus] - func RegisterHealthStatus(r resource.Registry) { r.Register(resource.Registration{ Type: pbcatalog.HealthStatusType, @@ -21,29 +19,33 @@ func RegisterHealthStatus(r resource.Registry) { Scope: resource.ScopeNamespace, Validate: ValidateHealthStatus, ACLs: &resource.ACLHooks{ - Read: resource.AuthorizeReadWithResource(aclReadHookHealthStatus), + Read: aclReadHookHealthStatus, Write: aclWriteHookHealthStatus, List: resource.NoOpACLListHook, }, }) } -var ValidateHealthStatus = resource.DecodeAndValidate(validateHealthStatus) +func ValidateHealthStatus(res *pbresource.Resource) error { + var hs pbcatalog.HealthStatus + + if err := res.Data.UnmarshalTo(&hs); err != nil { + return resource.NewErrDataParse(&hs, err) + } -func validateHealthStatus(res *DecodedHealthStatus) error { var err error // Should we allow empty types? I think for now it will be safest to require // the type field is set and we can relax this restriction in the future // if we deem it desirable. - if res.Data.Type == "" { + if hs.Type == "" { err = multierror.Append(err, resource.ErrInvalidField{ Name: "type", Wrapped: resource.ErrMissing, }) } - switch res.Data.Status { + switch hs.Status { case pbcatalog.Health_HEALTH_PASSING, pbcatalog.Health_HEALTH_WARNING, pbcatalog.Health_HEALTH_CRITICAL, @@ -59,7 +61,7 @@ func validateHealthStatus(res *DecodedHealthStatus) error { // owner is currently the resource that this HealthStatus applies to. If we // change this to be a parent reference within the HealthStatus.Data then // we could allow for other owners. - if res.Resource.Owner == nil { + if res.Owner == nil { err = multierror.Append(err, resource.ErrInvalidField{ Name: "owner", Wrapped: resource.ErrMissing, @@ -71,13 +73,15 @@ func validateHealthStatus(res *DecodedHealthStatus) error { return err } -func aclReadHookHealthStatus(authorizer acl.Authorizer, authzContext *acl.AuthorizerContext, res *pbresource.Resource) error { +func aclReadHookHealthStatus(authorizer acl.Authorizer, authzContext *acl.AuthorizerContext, _ *pbresource.ID, res *pbresource.Resource) error { + if res == nil { + return resource.ErrNeedResource + } // For a health status of a workload we need to check service:read perms. if res.GetOwner() != nil && resource.EqualType(res.GetOwner().GetType(), pbcatalog.WorkloadType) { return authorizer.ToAllowAuthorizer().ServiceReadAllowed(res.GetOwner().GetName(), authzContext) } - // For a health status of a node we need to check node:read perms. if res.GetOwner() != nil && resource.EqualType(res.GetOwner().GetType(), pbcatalog.NodeType) { return authorizer.ToAllowAuthorizer().NodeReadAllowed(res.GetOwner().GetName(), authzContext) } @@ -91,7 +95,6 @@ func aclWriteHookHealthStatus(authorizer acl.Authorizer, authzContext *acl.Autho return authorizer.ToAllowAuthorizer().ServiceWriteAllowed(res.GetOwner().GetName(), authzContext) } - // For a health status of a node we need to check node:write perms. if res.GetOwner() != nil && resource.EqualType(res.GetOwner().GetType(), pbcatalog.NodeType) { return authorizer.ToAllowAuthorizer().NodeWriteAllowed(res.GetOwner().GetName(), authzContext) } diff --git a/internal/catalog/internal/types/node.go b/internal/catalog/internal/types/node.go index 1ee68f22ca82e..42ac833c6e7d8 100644 --- a/internal/catalog/internal/types/node.go +++ b/internal/catalog/internal/types/node.go @@ -12,8 +12,6 @@ import ( "github.com/hashicorp/consul/proto-public/pbresource" ) -type DecodedNode = resource.DecodedResource[*pbcatalog.Node] - func RegisterNode(r resource.Registry) { r.Register(resource.Registration{ Type: pbcatalog.NodeType, @@ -33,12 +31,16 @@ func RegisterNode(r resource.Registry) { }) } -var ValidateNode = resource.DecodeAndValidate(validateNode) +func ValidateNode(res *pbresource.Resource) error { + var node pbcatalog.Node + + if err := res.Data.UnmarshalTo(&node); err != nil { + return resource.NewErrDataParse(&node, err) + } -func validateNode(res *DecodedNode) error { var err error // Validate that the node has at least 1 address - if len(res.Data.Addresses) < 1 { + if len(node.Addresses) < 1 { err = multierror.Append(err, resource.ErrInvalidField{ Name: "addresses", Wrapped: resource.ErrEmpty, @@ -46,7 +48,7 @@ func validateNode(res *DecodedNode) error { } // Validate each node address - for idx, addr := range res.Data.Addresses { + for idx, addr := range node.Addresses { if addrErr := validateNodeAddress(addr); addrErr != nil { err = multierror.Append(err, resource.ErrInvalidListElement{ Name: "addresses", diff --git a/internal/catalog/internal/types/service.go b/internal/catalog/internal/types/service.go index bb56fe10a5710..a91f3a7c51801 100644 --- a/internal/catalog/internal/types/service.go +++ b/internal/catalog/internal/types/service.go @@ -10,10 +10,9 @@ import ( "github.com/hashicorp/consul/internal/resource" pbcatalog "github.com/hashicorp/consul/proto-public/pbcatalog/v2beta1" + "github.com/hashicorp/consul/proto-public/pbresource" ) -type DecodedService = resource.DecodedResource[*pbcatalog.Service] - func RegisterService(r resource.Registry) { r.Register(resource.Registration{ Type: pbcatalog.ServiceType, @@ -25,25 +24,37 @@ func RegisterService(r resource.Registry) { }) } -var MutateService = resource.DecodeAndMutate(mutateService) +func MutateService(res *pbresource.Resource) error { + var service pbcatalog.Service + + if err := res.Data.UnmarshalTo(&service); err != nil { + return err + } -func mutateService(res *DecodedService) (bool, error) { changed := false // Default service port protocols. - for _, port := range res.Data.Ports { + for _, port := range service.Ports { if port.Protocol == pbcatalog.Protocol_PROTOCOL_UNSPECIFIED { port.Protocol = pbcatalog.Protocol_PROTOCOL_TCP changed = true } } - return changed, nil + if !changed { + return nil + } + + return res.Data.MarshalFrom(&service) } -var ValidateService = resource.DecodeAndValidate(validateService) +func ValidateService(res *pbresource.Resource) error { + var service pbcatalog.Service + + if err := res.Data.UnmarshalTo(&service); err != nil { + return resource.NewErrDataParse(&service, err) + } -func validateService(res *DecodedService) error { var err error // Validate the workload selector. We are allowing selectors with no @@ -51,7 +62,7 @@ func validateService(res *DecodedService) error { // ServiceEndpoints objects for this service such as when desiring to // configure endpoint information for external services that are not // registered as workloads - if selErr := ValidateSelector(res.Data.Workloads, true); selErr != nil { + if selErr := ValidateSelector(service.Workloads, true); selErr != nil { err = multierror.Append(err, resource.ErrInvalidField{ Name: "workloads", Wrapped: selErr, @@ -61,7 +72,7 @@ func validateService(res *DecodedService) error { usedVirtualPorts := make(map[uint32]int) // Validate each port - for idx, port := range res.Data.Ports { + for idx, port := range service.Ports { if usedIdx, found := usedVirtualPorts[port.VirtualPort]; found { err = multierror.Append(err, resource.ErrInvalidListElement{ Name: "ports", @@ -119,7 +130,7 @@ func validateService(res *DecodedService) error { } // Validate that the Virtual IPs are all IP addresses - for idx, vip := range res.Data.VirtualIps { + for idx, vip := range service.VirtualIps { if vipErr := validateIPAddress(vip); vipErr != nil { err = multierror.Append(err, resource.ErrInvalidListElement{ Name: "virtual_ips", diff --git a/internal/catalog/internal/types/service_endpoints.go b/internal/catalog/internal/types/service_endpoints.go index b78a1bc705fa5..1991c455ad901 100644 --- a/internal/catalog/internal/types/service_endpoints.go +++ b/internal/catalog/internal/types/service_endpoints.go @@ -14,8 +14,6 @@ import ( "github.com/hashicorp/consul/proto-public/pbresource" ) -type DecodedServiceEndpoints = resource.DecodedResource[*pbcatalog.ServiceEndpoints] - func RegisterServiceEndpoints(r resource.Registry) { r.Register(resource.Registration{ Type: pbcatalog.ServiceEndpointsType, @@ -47,9 +45,13 @@ func MutateServiceEndpoints(res *pbresource.Resource) error { return nil } -var ValidateServiceEndpoints = resource.DecodeAndValidate[*pbcatalog.ServiceEndpoints](validateServiceEndpoints) +func ValidateServiceEndpoints(res *pbresource.Resource) error { + var svcEndpoints pbcatalog.ServiceEndpoints + + if err := res.Data.UnmarshalTo(&svcEndpoints); err != nil { + return resource.NewErrDataParse(&svcEndpoints, err) + } -func validateServiceEndpoints(res *DecodedServiceEndpoints) error { var err error if !resource.EqualType(res.Owner.Type, pbcatalog.ServiceType) { err = multierror.Append(err, resource.ErrOwnerTypeInvalid{ @@ -76,8 +78,8 @@ func validateServiceEndpoints(res *DecodedServiceEndpoints) error { }) } - for idx, endpoint := range res.Data.Endpoints { - if endpointErr := validateEndpoint(endpoint, res.Resource); endpointErr != nil { + for idx, endpoint := range svcEndpoints.Endpoints { + if endpointErr := validateEndpoint(endpoint, res); endpointErr != nil { err = multierror.Append(err, resource.ErrInvalidListElement{ Name: "endpoints", Index: idx, diff --git a/internal/catalog/internal/types/virtual_ips.go b/internal/catalog/internal/types/virtual_ips.go index be692f63ed65a..9c7a065474059 100644 --- a/internal/catalog/internal/types/virtual_ips.go +++ b/internal/catalog/internal/types/virtual_ips.go @@ -12,8 +12,6 @@ import ( "github.com/hashicorp/consul/proto-public/pbresource" ) -type DecodedVirtualIPs = resource.DecodedResource[*pbcatalog.VirtualIPs] - func RegisterVirtualIPs(r resource.Registry) { r.Register(resource.Registration{ Type: pbcatalog.VirtualIPsType, @@ -32,11 +30,15 @@ func RegisterVirtualIPs(r resource.Registry) { }) } -var ValidateVirtualIPs = resource.DecodeAndValidate(validateVirtualIPs) +func ValidateVirtualIPs(res *pbresource.Resource) error { + var vips pbcatalog.VirtualIPs + + if err := res.Data.UnmarshalTo(&vips); err != nil { + return resource.NewErrDataParse(&vips, err) + } -func validateVirtualIPs(res *DecodedVirtualIPs) error { var err error - for idx, ip := range res.Data.Ips { + for idx, ip := range vips.Ips { if vipErr := validateIPAddress(ip.Address); vipErr != nil { err = multierror.Append(err, resource.ErrInvalidListElement{ Name: "ips", diff --git a/internal/catalog/internal/types/workload.go b/internal/catalog/internal/types/workload.go index 8535a6250491d..c09513a4a5b3d 100644 --- a/internal/catalog/internal/types/workload.go +++ b/internal/catalog/internal/types/workload.go @@ -15,8 +15,6 @@ import ( "github.com/hashicorp/consul/proto-public/pbresource" ) -type DecodedWorkload = resource.DecodedResource[*pbcatalog.Workload] - func RegisterWorkload(r resource.Registry) { r.Register(resource.Registration{ Type: pbcatalog.WorkloadType, @@ -25,19 +23,23 @@ func RegisterWorkload(r resource.Registry) { Validate: ValidateWorkload, ACLs: &resource.ACLHooks{ Read: aclReadHookWorkload, - Write: resource.DecodeAndAuthorizeWrite(aclWriteHookWorkload), + Write: aclWriteHookWorkload, List: resource.NoOpACLListHook, }, }) } -var ValidateWorkload = resource.DecodeAndValidate(validateWorkload) +func ValidateWorkload(res *pbresource.Resource) error { + var workload pbcatalog.Workload + + if err := res.Data.UnmarshalTo(&workload); err != nil { + return resource.NewErrDataParse(&workload, err) + } -func validateWorkload(res *DecodedWorkload) error { var err error // Validate that the workload has at least one port - if len(res.Data.Ports) < 1 { + if len(workload.Ports) < 1 { err = multierror.Append(err, resource.ErrInvalidField{ Name: "ports", Wrapped: resource.ErrEmpty, @@ -47,7 +49,7 @@ func validateWorkload(res *DecodedWorkload) error { var meshPorts []string // Validate the Workload Ports - for portName, port := range res.Data.Ports { + for portName, port := range workload.Ports { if portNameErr := ValidatePortName(portName); portNameErr != nil { err = multierror.Append(err, resource.ErrInvalidMapKey{ Map: "ports", @@ -98,12 +100,12 @@ func validateWorkload(res *DecodedWorkload) error { // If the workload is mesh enabled then a valid identity must be provided. // If not mesh enabled but a non-empty identity is provided then we still // validate that its valid. - if len(meshPorts) > 0 && res.Data.Identity == "" { + if len(meshPorts) > 0 && workload.Identity == "" { err = multierror.Append(err, resource.ErrInvalidField{ Name: "identity", Wrapped: resource.ErrMissing, }) - } else if res.Data.Identity != "" && !isValidDNSLabel(res.Data.Identity) { + } else if workload.Identity != "" && !isValidDNSLabel(workload.Identity) { err = multierror.Append(err, resource.ErrInvalidField{ Name: "identity", Wrapped: errNotDNSLabel, @@ -111,7 +113,7 @@ func validateWorkload(res *DecodedWorkload) error { } // Validate workload locality - if res.Data.Locality != nil && res.Data.Locality.Region == "" && res.Data.Locality.Zone != "" { + if workload.Locality != nil && workload.Locality.Region == "" && workload.Locality.Zone != "" { err = multierror.Append(err, resource.ErrInvalidField{ Name: "locality", Wrapped: errLocalityZoneNoRegion, @@ -120,8 +122,8 @@ func validateWorkload(res *DecodedWorkload) error { // Node associations are optional but if present the name should // be a valid DNS label. - if res.Data.NodeName != "" { - if !isValidDNSLabel(res.Data.NodeName) { + if workload.NodeName != "" { + if !isValidDNSLabel(workload.NodeName) { err = multierror.Append(err, resource.ErrInvalidField{ Name: "node_name", Wrapped: errNotDNSLabel, @@ -129,7 +131,7 @@ func validateWorkload(res *DecodedWorkload) error { } } - if len(res.Data.Addresses) < 1 { + if len(workload.Addresses) < 1 { err = multierror.Append(err, resource.ErrInvalidField{ Name: "addresses", Wrapped: resource.ErrEmpty, @@ -137,8 +139,8 @@ func validateWorkload(res *DecodedWorkload) error { } // Validate Workload Addresses - for idx, addr := range res.Data.Addresses { - if addrErr := validateWorkloadAddress(addr, res.Data.Ports); addrErr != nil { + for idx, addr := range workload.Addresses { + if addrErr := validateWorkloadAddress(addr, workload.Ports); addrErr != nil { err = multierror.Append(err, resource.ErrInvalidListElement{ Name: "addresses", Index: idx, @@ -154,21 +156,26 @@ func aclReadHookWorkload(authorizer acl.Authorizer, authzContext *acl.Authorizer return authorizer.ToAllowAuthorizer().ServiceReadAllowed(id.GetName(), authzContext) } -func aclWriteHookWorkload(authorizer acl.Authorizer, authzContext *acl.AuthorizerContext, res *DecodedWorkload) error { +func aclWriteHookWorkload(authorizer acl.Authorizer, authzContext *acl.AuthorizerContext, res *pbresource.Resource) error { + decodedWorkload, err := resource.Decode[*pbcatalog.Workload](res) + if err != nil { + return resource.ErrNeedResource + } + // First check service:write on the workload name. - err := authorizer.ToAllowAuthorizer().ServiceWriteAllowed(res.GetId().GetName(), authzContext) + err = authorizer.ToAllowAuthorizer().ServiceWriteAllowed(res.GetId().GetName(), authzContext) if err != nil { return err } // Check node:read permissions if node is specified. - if res.Data.GetNodeName() != "" { - return authorizer.ToAllowAuthorizer().NodeReadAllowed(res.Data.GetNodeName(), authzContext) + if decodedWorkload.GetData().GetNodeName() != "" { + return authorizer.ToAllowAuthorizer().NodeReadAllowed(decodedWorkload.GetData().GetNodeName(), authzContext) } // Check identity:read permissions if identity is specified. - if res.Data.GetIdentity() != "" { - return authorizer.ToAllowAuthorizer().IdentityReadAllowed(res.Data.GetIdentity(), authzContext) + if decodedWorkload.GetData().GetIdentity() != "" { + return authorizer.ToAllowAuthorizer().IdentityReadAllowed(decodedWorkload.GetData().GetIdentity(), authzContext) } return nil diff --git a/internal/controller/api_test.go b/internal/controller/api_test.go index e80458541008f..40d3ec99bebdb 100644 --- a/internal/controller/api_test.go +++ b/internal/controller/api_test.go @@ -242,86 +242,6 @@ func TestController_NoReconciler(t *testing.T) { func() { mgr.Register(ctrl) }) } -func TestController_Watch(t *testing.T) { - t.Parallel() - - t.Run("partitioned scoped resources", func(t *testing.T) { - rec := newTestReconciler() - - client := svctest.RunResourceService(t, demo.RegisterTypes) - - ctrl := controller. - ForType(demo.TypeV1RecordLabel). - WithReconciler(rec) - - mgr := controller.NewManager(client, testutil.Logger(t)) - mgr.SetRaftLeader(true) - mgr.Register(ctrl) - - ctx := testContext(t) - go mgr.Run(ctx) - - res, err := demo.GenerateV1RecordLabel("test") - require.NoError(t, err) - - rsp, err := client.Write(testContext(t), &pbresource.WriteRequest{Resource: res}) - require.NoError(t, err) - - req := rec.wait(t) - prototest.AssertDeepEqual(t, rsp.Resource.Id, req.ID) - }) - - t.Run("cluster scoped resources", func(t *testing.T) { - rec := newTestReconciler() - - client := svctest.RunResourceService(t, demo.RegisterTypes) - - ctrl := controller. - ForType(demo.TypeV1Executive). - WithReconciler(rec) - - mgr := controller.NewManager(client, testutil.Logger(t)) - mgr.SetRaftLeader(true) - mgr.Register(ctrl) - - go mgr.Run(testContext(t)) - - exec, err := demo.GenerateV1Executive("test", "CEO") - require.NoError(t, err) - - rsp, err := client.Write(testContext(t), &pbresource.WriteRequest{Resource: exec}) - require.NoError(t, err) - - req := rec.wait(t) - prototest.AssertDeepEqual(t, rsp.Resource.Id, req.ID) - }) - - t.Run("namespace scoped resources", func(t *testing.T) { - rec := newTestReconciler() - - client := svctest.RunResourceService(t, demo.RegisterTypes) - - ctrl := controller. - ForType(demo.TypeV2Artist). - WithReconciler(rec) - - mgr := controller.NewManager(client, testutil.Logger(t)) - mgr.SetRaftLeader(true) - mgr.Register(ctrl) - - go mgr.Run(testContext(t)) - - artist, err := demo.GenerateV2Artist() - require.NoError(t, err) - - rsp, err := client.Write(testContext(t), &pbresource.WriteRequest{Resource: artist}) - require.NoError(t, err) - - req := rec.wait(t) - prototest.AssertDeepEqual(t, rsp.Resource.Id, req.ID) - }) -} - func newTestReconciler() *testReconciler { return &testReconciler{ calls: make(chan controller.Request), diff --git a/internal/controller/controller.go b/internal/controller/controller.go index 97955db6a3c15..ac901d355b6e3 100644 --- a/internal/controller/controller.go +++ b/internal/controller/controller.go @@ -14,6 +14,7 @@ import ( "github.com/hashicorp/consul/agent/consul/controller/queue" "github.com/hashicorp/consul/internal/resource" + "github.com/hashicorp/consul/internal/storage" "github.com/hashicorp/consul/proto-public/pbresource" ) @@ -91,6 +92,11 @@ func runQueue[T queue.ItemType](ctx context.Context, ctrl Controller) queue.Work func (c *controllerRunner) watch(ctx context.Context, typ *pbresource.Type, add func(*pbresource.Resource)) error { wl, err := c.client.WatchList(ctx, &pbresource.WatchListRequest{ Type: typ, + Tenancy: &pbresource.Tenancy{ + Partition: storage.Wildcard, + PeerName: storage.Wildcard, + Namespace: storage.Wildcard, + }, }) if err != nil { c.logger.Error("failed to create watch", "error", err) diff --git a/internal/controller/dependencies.go b/internal/controller/dependencies.go deleted file mode 100644 index 6a91d91ff7b72..0000000000000 --- a/internal/controller/dependencies.go +++ /dev/null @@ -1,100 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: BUSL-1.1 - -package controller - -import ( - "fmt" - "sort" - "strings" - - "github.com/hashicorp/go-multierror" - - "github.com/hashicorp/consul/internal/resource" - "github.com/hashicorp/consul/proto-public/pbresource" -) - -func (m *Manager) ValidateDependencies(registrations []resource.Registration) error { - deps := m.CalculateDependencies(registrations) - - return deps.validate() -} - -type Dependencies map[string][]string - -func (deps Dependencies) validate() error { - var merr error - seen := make(map[string]map[string]struct{}) - - mkErr := func(src, dst string) error { - vals := []string{src, dst} - sort.Strings(vals) - return fmt.Errorf("circular dependency between %q and %q", vals[0], vals[1]) - } - - for src, dsts := range deps { - seenDsts := seen[src] - if len(seenDsts) == 0 { - seen[src] = make(map[string]struct{}) - } - - for _, dst := range dsts { - if _, ok := seenDsts[dst]; ok { - merr = multierror.Append(merr, mkErr(src, dst)) - } - - if inverseDsts := seen[dst]; len(inverseDsts) > 0 { - if _, ok := inverseDsts[src]; ok { - merr = multierror.Append(merr, mkErr(src, dst)) - } - } - seen[src][dst] = struct{}{} - } - } - - return merr -} - -func (m *Manager) CalculateDependencies(registrations []resource.Registration) Dependencies { - typeToString := func(t *pbresource.Type) string { - return strings.ToLower(fmt.Sprintf("%s/%s/%s", t.Group, t.GroupVersion, t.Kind)) - } - - out := make(map[string][]string) - for _, r := range registrations { - out[typeToString(r.Type)] = nil - } - - for _, c := range m.controllers { - watches := make([]string, 0, len(c.watches)) - for _, w := range c.watches { - watches = append(watches, typeToString(w.watchedType)) - } - - out[typeToString(c.managedType)] = watches - } - - return out -} - -func (deps Dependencies) ToMermaid() string { - depStrings := make([]string, 0, len(deps)) - - for src, dsts := range deps { - if len(dsts) == 0 { - depStrings = append(depStrings, fmt.Sprintf(" %s", src)) - continue - } - - for _, dst := range dsts { - depStrings = append(depStrings, fmt.Sprintf(" %s --> %s", src, dst)) - } - } - - sort.Slice(depStrings, func(a, b int) bool { - return depStrings[a] < depStrings[b] - }) - out := "flowchart TD\n" + strings.Join(depStrings, "\n") - - return out -} diff --git a/internal/controller/dependencies_test.go b/internal/controller/dependencies_test.go deleted file mode 100644 index 18db58a2853ae..0000000000000 --- a/internal/controller/dependencies_test.go +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: BUSL-1.1 - -package controller - -import ( - "testing" - - "github.com/hashicorp/consul/internal/testing/golden" - "github.com/stretchr/testify/require" -) - -func TestDependenciesGolden(t *testing.T) { - deps := Dependencies{ - "t1": []string{"t2", "t3"}, - "t2": []string{"t4"}, - "t4": []string{"t1"}, - } - mermaid := deps.ToMermaid() - expected := golden.Get(t, mermaid, "dependencies.golden") - require.Equal(t, expected, mermaid) -} - -func TestValidateDependencies(t *testing.T) { - type testCase struct { - dependencies Dependencies - expectErr string - } - - run := func(t *testing.T, tc testCase) { - err := tc.dependencies.validate() - if len(tc.expectErr) > 0 { - require.Contains(t, err.Error(), tc.expectErr) - } else { - require.NoError(t, err) - } - - } - - cases := map[string]testCase{ - "empty": { - dependencies: nil, - }, - "no circular dependencies": { - dependencies: Dependencies{ - "t1": []string{"t2", "t3"}, - "t2": []string{"t3"}, - "t3": []string{"t4"}, - "t4": nil, - }, - }, - "with circular dependency": { - dependencies: Dependencies{ - "t1": []string{"t2", "t3"}, - "t2": []string{"t1"}, - }, - expectErr: `circular dependency between "t1" and "t2"`, - }, - } - - for name, tc := range cases { - t.Run(name, func(t *testing.T) { - run(t, tc) - }) - } -} diff --git a/internal/controller/manager.go b/internal/controller/manager.go index 2e46b21400837..1e7e910210616 100644 --- a/internal/controller/manager.go +++ b/internal/controller/manager.go @@ -11,6 +11,7 @@ import ( "github.com/hashicorp/go-hclog" + "github.com/hashicorp/consul/internal/resource" "github.com/hashicorp/consul/proto-public/pbresource" ) @@ -67,7 +68,7 @@ func (m *Manager) Run(ctx context.Context) { for _, desc := range m.controllers { logger := desc.logger if logger == nil { - logger = m.logger.With("managed_type", desc.managedType.Kind) + logger = m.logger.With("managed_type", resource.ToGVK(desc.managedType)) } runner := &controllerRunner{ diff --git a/internal/controller/testdata/dependencies.golden b/internal/controller/testdata/dependencies.golden deleted file mode 100644 index f0ff372a1634f..0000000000000 --- a/internal/controller/testdata/dependencies.golden +++ /dev/null @@ -1,5 +0,0 @@ -flowchart TD - t1 --> t2 - t1 --> t3 - t2 --> t4 - t4 --> t1 \ No newline at end of file diff --git a/internal/go-sso/oidcauth/config.go b/internal/go-sso/oidcauth/config.go index a5e0e8bcb681d..84bbac9e0cbe5 100644 --- a/internal/go-sso/oidcauth/config.go +++ b/internal/go-sso/oidcauth/config.go @@ -45,6 +45,7 @@ type Config struct { // Comma-separated list of 'aud' claims that are valid for login; any match // is sufficient + // TODO(sso): actually just send these down as string claims? BoundAudiences []string // Mappings of claims (key) that will be copied to a metadata field diff --git a/internal/go-sso/oidcauth/oidc.go b/internal/go-sso/oidcauth/oidc.go index cd78762510952..df00dfcc25f60 100644 --- a/internal/go-sso/oidcauth/oidc.go +++ b/internal/go-sso/oidcauth/oidc.go @@ -235,8 +235,7 @@ func (a *Authenticator) verifyOIDCToken(ctx context.Context, rawToken string) (m if err := idToken.Claims(&allClaims); err != nil { return nil, fmt.Errorf("unable to successfully parse all claims from token: %v", err) } - // Follows behavior of hashicorp/vault-plugin-auth-jwt (non-strict validation). - // See https://developer.hashicorp.com/consul/docs/security/acl/auth-methods/oidc#oidc-configuration-troubleshooting. + // TODO(sso): why isn't this strict for OIDC? if err := validateAudience(a.config.BoundAudiences, idToken.Audience, false); err != nil { return nil, fmt.Errorf("error validating claims: %v", err) } diff --git a/internal/go-sso/oidcauth/oidc_test.go b/internal/go-sso/oidcauth/oidc_test.go index 48de99b641812..b2ed31ff5cd38 100644 --- a/internal/go-sso/oidcauth/oidc_test.go +++ b/internal/go-sso/oidcauth/oidc_test.go @@ -390,7 +390,7 @@ func TestOIDC_ClaimsFromAuthCode(t *testing.T) { context.Background(), state, "wrong_code", ) - requireErrorContains(t, err, "cannot fetch token") + requireErrorContains(t, err, "Error exchanging oidc code") requireProviderError(t, err) }) diff --git a/internal/mesh/internal/controllers/explicitdestinations/controller_test.go b/internal/mesh/internal/controllers/explicitdestinations/controller_test.go index 95d9bd108b190..72004eecbadb8 100644 --- a/internal/mesh/internal/controllers/explicitdestinations/controller_test.go +++ b/internal/mesh/internal/controllers/explicitdestinations/controller_test.go @@ -5,7 +5,6 @@ package explicitdestinations import ( "context" - "fmt" "testing" "github.com/stretchr/testify/require" @@ -58,147 +57,135 @@ type controllerTestSuite struct { destService3Routes *pbmesh.ComputedRoutes expComputedDest *pbmesh.ComputedExplicitDestinations - tenancies []*pbresource.Tenancy } func TestFindDuplicates(t *testing.T) { // Create some conflicting destinations. - resourcetest.RunWithTenancies(func(tenancy *pbresource.Tenancy) { - dest1 := &pbmesh.Destinations{ - Workloads: &pbcatalog.WorkloadSelector{ - Names: []string{"foo"}, - }, - Destinations: []*pbmesh.Destination{ - { - ListenAddr: &pbmesh.Destination_IpPort{ - IpPort: &pbmesh.IPPortAddress{ - Ip: "127.0.0.1", - Port: 1000, - }, + dest1 := &pbmesh.Destinations{ + Workloads: &pbcatalog.WorkloadSelector{ + Names: []string{"foo"}, + }, + Destinations: []*pbmesh.Destination{ + { + ListenAddr: &pbmesh.Destination_IpPort{ + IpPort: &pbmesh.IPPortAddress{ + Ip: "127.0.0.1", + Port: 1000, }, }, - { - ListenAddr: &pbmesh.Destination_IpPort{ - IpPort: &pbmesh.IPPortAddress{ - Ip: "127.0.0.1", - Port: 2000, - }, + }, + { + ListenAddr: &pbmesh.Destination_IpPort{ + IpPort: &pbmesh.IPPortAddress{ + Ip: "127.0.0.1", + Port: 2000, }, }, }, - } - dest2 := &pbmesh.Destinations{ - Workloads: &pbcatalog.WorkloadSelector{ - Names: []string{"foo"}, - }, - Destinations: []*pbmesh.Destination{ - { - ListenAddr: &pbmesh.Destination_IpPort{ - IpPort: &pbmesh.IPPortAddress{ - Ip: "127.0.0.1", - Port: 1000, - }, + }, + } + dest2 := &pbmesh.Destinations{ + Workloads: &pbcatalog.WorkloadSelector{ + Names: []string{"foo"}, + }, + Destinations: []*pbmesh.Destination{ + { + ListenAddr: &pbmesh.Destination_IpPort{ + IpPort: &pbmesh.IPPortAddress{ + Ip: "127.0.0.1", + Port: 1000, }, }, }, - } - dest3 := &pbmesh.Destinations{ - Workloads: &pbcatalog.WorkloadSelector{ - Names: []string{"foo"}, - }, - Destinations: []*pbmesh.Destination{ - { - ListenAddr: &pbmesh.Destination_Unix{ - Unix: &pbmesh.UnixSocketAddress{ - Path: "/foo/bar", - }, + }, + } + dest3 := &pbmesh.Destinations{ + Workloads: &pbcatalog.WorkloadSelector{ + Names: []string{"foo"}, + }, + Destinations: []*pbmesh.Destination{ + { + ListenAddr: &pbmesh.Destination_Unix{ + Unix: &pbmesh.UnixSocketAddress{ + Path: "/foo/bar", }, }, }, - } - dest4 := &pbmesh.Destinations{ - Workloads: &pbcatalog.WorkloadSelector{ - Names: []string{"foo"}, - }, - Destinations: []*pbmesh.Destination{ - { - ListenAddr: &pbmesh.Destination_Unix{ - Unix: &pbmesh.UnixSocketAddress{ - Path: "/foo/bar", - }, + }, + } + dest4 := &pbmesh.Destinations{ + Workloads: &pbcatalog.WorkloadSelector{ + Names: []string{"foo"}, + }, + Destinations: []*pbmesh.Destination{ + { + ListenAddr: &pbmesh.Destination_Unix{ + Unix: &pbmesh.UnixSocketAddress{ + Path: "/foo/bar", }, }, }, - } - destNonConflicting := &pbmesh.Destinations{ - Workloads: &pbcatalog.WorkloadSelector{ - Names: []string{"foo"}, - }, - Destinations: []*pbmesh.Destination{ - { - ListenAddr: &pbmesh.Destination_IpPort{ - IpPort: &pbmesh.IPPortAddress{ - Ip: "127.0.0.1", - Port: 3000, - }, + }, + } + destNonConflicting := &pbmesh.Destinations{ + Workloads: &pbcatalog.WorkloadSelector{ + Names: []string{"foo"}, + }, + Destinations: []*pbmesh.Destination{ + { + ListenAddr: &pbmesh.Destination_IpPort{ + IpPort: &pbmesh.IPPortAddress{ + Ip: "127.0.0.1", + Port: 3000, }, }, - { - ListenAddr: &pbmesh.Destination_Unix{ - Unix: &pbmesh.UnixSocketAddress{ - Path: "/baz/bar", - }, + }, + { + ListenAddr: &pbmesh.Destination_Unix{ + Unix: &pbmesh.UnixSocketAddress{ + Path: "/baz/bar", }, }, }, - } + }, + } - var destinations []*types.DecodedDestinations - dest1Res := resourcetest.Resource(pbmesh.DestinationsType, "dest1"). - WithData(t, dest1). - WithTenancy(tenancy). - Build() - destinations = append(destinations, resourcetest.MustDecode[*pbmesh.Destinations](t, dest1Res)) - dest2Res := resourcetest.Resource(pbmesh.DestinationsType, "dest2"). - WithData(t, dest2). - WithTenancy(tenancy). - Build() - destinations = append(destinations, resourcetest.MustDecode[*pbmesh.Destinations](t, dest2Res)) - dest3Res := resourcetest.Resource(pbmesh.DestinationsType, "dest3"). - WithData(t, dest3). - WithTenancy(tenancy). - Build() - destinations = append(destinations, resourcetest.MustDecode[*pbmesh.Destinations](t, dest3Res)) - dest4Res := resourcetest.Resource(pbmesh.DestinationsType, "dest4"). - WithData(t, dest4). - WithTenancy(tenancy). - Build() - destinations = append(destinations, resourcetest.MustDecode[*pbmesh.Destinations](t, dest4Res)) - nonConflictingDestRes := resourcetest.Resource(pbmesh.DestinationsType, "nonConflictingDest"). - WithData(t, destNonConflicting). - WithTenancy(tenancy). - Build() - destinations = append(destinations, resourcetest.MustDecode[*pbmesh.Destinations](t, nonConflictingDestRes)) - - duplicates := findConflicts(destinations) - - require.Contains(t, duplicates, resource.NewReferenceKey(dest1Res.Id)) - require.Contains(t, duplicates, resource.NewReferenceKey(dest2Res.Id)) - require.Contains(t, duplicates, resource.NewReferenceKey(dest3Res.Id)) - require.Contains(t, duplicates, resource.NewReferenceKey(dest4Res.Id)) - require.NotContains(t, duplicates, resource.NewReferenceKey(nonConflictingDestRes.Id)) - }, t) + var destinations []*types.DecodedDestinations + dest1Res := resourcetest.Resource(pbmesh.DestinationsType, "dest1"). + WithData(t, dest1). + Build() + destinations = append(destinations, resourcetest.MustDecode[*pbmesh.Destinations](t, dest1Res)) + dest2Res := resourcetest.Resource(pbmesh.DestinationsType, "dest2"). + WithData(t, dest2). + Build() + destinations = append(destinations, resourcetest.MustDecode[*pbmesh.Destinations](t, dest2Res)) + dest3Res := resourcetest.Resource(pbmesh.DestinationsType, "dest3"). + WithData(t, dest3). + Build() + destinations = append(destinations, resourcetest.MustDecode[*pbmesh.Destinations](t, dest3Res)) + dest4Res := resourcetest.Resource(pbmesh.DestinationsType, "dest4"). + WithData(t, dest4). + Build() + destinations = append(destinations, resourcetest.MustDecode[*pbmesh.Destinations](t, dest4Res)) + nonConflictingDestRes := resourcetest.Resource(pbmesh.DestinationsType, "nonConflictingDest"). + WithData(t, destNonConflicting). + Build() + destinations = append(destinations, resourcetest.MustDecode[*pbmesh.Destinations](t, nonConflictingDestRes)) + + duplicates := findConflicts(destinations) + + require.Contains(t, duplicates, resource.NewReferenceKey(dest1Res.Id)) + require.Contains(t, duplicates, resource.NewReferenceKey(dest2Res.Id)) + require.Contains(t, duplicates, resource.NewReferenceKey(dest3Res.Id)) + require.Contains(t, duplicates, resource.NewReferenceKey(dest4Res.Id)) + require.NotContains(t, duplicates, resource.NewReferenceKey(nonConflictingDestRes.Id)) } func (suite *controllerTestSuite) SetupTest() { - suite.tenancies = resourcetest.TestTenancies() - resourceClient := svctest.RunResourceServiceWithTenancies(suite.T(), types.Register, catalog.RegisterTypes) + resourceClient := svctest.RunResourceService(suite.T(), types.Register, catalog.RegisterTypes) + suite.client = resourcetest.NewClient(resourceClient) suite.runtime = controller.Runtime{Client: resourceClient, Logger: testutil.Logger(suite.T())} suite.ctx = testutil.TestContext(suite.T()) - suite.client = resourcetest.NewClient(resourceClient) -} - -func (suite *controllerTestSuite) setupWithTenancy(tenancy *pbresource.Tenancy) { suite.ctl = &reconciler{ mapper: mapper.New(), @@ -215,13 +202,8 @@ func (suite *controllerTestSuite) setupWithTenancy(tenancy *pbresource.Tenancy) suite.workloadRes = resourcetest.Resource(pbcatalog.WorkloadType, "test-workload"). WithData(suite.T(), suite.workload). - WithTenancy(tenancy). Write(suite.T(), suite.client) - suite.T().Cleanup(func() { - suite.client.MustDelete(suite.T(), suite.workloadRes.Id) - }) - suite.serviceData = &pbcatalog.Service{ Workloads: &pbcatalog.WorkloadSelector{Names: []string{"service-1-workloads"}}, Ports: []*pbcatalog.ServicePort{ @@ -240,31 +222,18 @@ func (suite *controllerTestSuite) setupWithTenancy(tenancy *pbresource.Tenancy) }, } suite.destService1 = resourcetest.Resource(pbcatalog.ServiceType, "dest-service-1"). - WithTenancy(tenancy). + WithTenancy(resource.DefaultNamespacedTenancy()). WithData(suite.T(), suite.serviceData). Build() - - suite.T().Cleanup(func() { - suite.client.MustDelete(suite.T(), suite.destService1.Id) - }) - suite.destService2 = resourcetest.Resource(pbcatalog.ServiceType, "dest-service-2"). - WithTenancy(tenancy). + WithTenancy(resource.DefaultNamespacedTenancy()). WithData(suite.T(), suite.serviceData). Build() - suite.T().Cleanup(func() { - suite.client.MustDelete(suite.T(), suite.destService2.Id) - }) - suite.destService3 = resourcetest.Resource(pbcatalog.ServiceType, "dest-service-3"). - WithTenancy(tenancy). + WithTenancy(resource.DefaultNamespacedTenancy()). WithData(suite.T(), suite.serviceData). Build() - suite.T().Cleanup(func() { - suite.client.MustDelete(suite.T(), suite.destService3.Id) - }) - suite.destService1Ref = resource.Reference(suite.destService1.Id, "") suite.destService2Ref = resource.Reference(suite.destService2.Id, "") suite.destService3Ref = resource.Reference(suite.destService3.Id, "") @@ -384,430 +353,373 @@ func (suite *controllerTestSuite) setupWithTenancy(tenancy *pbresource.Tenancy) } func (suite *controllerTestSuite) TestReconcile_NoWorkload() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - id := resourcetest.Resource(pbmesh.ComputedExplicitDestinationsType, "not-found").WithTenancy(tenancy).ID() - dest := resourcetest.Resource(pbmesh.DestinationsType, "dest1"). - WithTenancy(tenancy). - WithData(suite.T(), suite.dest1). - Build() - decDest := resourcetest.MustDecode[*pbmesh.Destinations](suite.T(), dest) - suite.ctl.mapper.TrackDestinations(id, []*types.DecodedDestinations{decDest}) - - err := suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ - ID: id, - }) - require.NoError(suite.T(), err) + id := resourcetest.Resource(pbmesh.ComputedExplicitDestinationsType, "not-found").ID() + dest := resourcetest.Resource(pbmesh.DestinationsType, "dest1"). + WithData(suite.T(), suite.dest1). + Build() + decDest := resourcetest.MustDecode[*pbmesh.Destinations](suite.T(), dest) + suite.ctl.mapper.TrackDestinations(id, []*types.DecodedDestinations{decDest}) + + err := suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ + ID: id, + }) + require.NoError(suite.T(), err) - suite.client.RequireResourceNotFound(suite.T(), id) + suite.client.RequireResourceNotFound(suite.T(), id) - // Check that we're not tracking services for this workload anymore. - reqs, err := suite.ctl.mapper.MapService(context.TODO(), controller.Runtime{}, suite.destService1) - require.NoError(suite.T(), err) - require.Nil(suite.T(), reqs) + // Check that we're not tracking services for this workload anymore. + reqs, err := suite.ctl.mapper.MapService(context.TODO(), controller.Runtime{}, suite.destService1) + require.NoError(suite.T(), err) + require.Nil(suite.T(), reqs) - reqs, err = suite.ctl.mapper.MapService(context.TODO(), controller.Runtime{}, suite.destService2) - require.NoError(suite.T(), err) - require.Nil(suite.T(), reqs) - }) + reqs, err = suite.ctl.mapper.MapService(context.TODO(), controller.Runtime{}, suite.destService2) + require.NoError(suite.T(), err) + require.Nil(suite.T(), reqs) } func (suite *controllerTestSuite) TestReconcile_NonMeshWorkload() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - resourcetest.Resource(pbcatalog.WorkloadType, "non-mesh"). - WithTenancy(tenancy). - WithData(suite.T(), &pbcatalog.Workload{ - Addresses: []*pbcatalog.WorkloadAddress{{Host: "1.1.1.1"}}, - Ports: map[string]*pbcatalog.WorkloadPort{ - "tcp": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, - }, - }). - Write(suite.T(), suite.client) + resourcetest.Resource(pbcatalog.WorkloadType, "non-mesh"). + WithData(suite.T(), &pbcatalog.Workload{ + Addresses: []*pbcatalog.WorkloadAddress{{Host: "1.1.1.1"}}, + Ports: map[string]*pbcatalog.WorkloadPort{ + "tcp": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, + }, + }). + Write(suite.T(), suite.client) - cdID := resourcetest.Resource(pbmesh.ComputedExplicitDestinationsType, "non-mesh"). - WithTenancy(tenancy). - Write(suite.T(), suite.client).Id + cdID := resourcetest.Resource(pbmesh.ComputedExplicitDestinationsType, "non-mesh"). + Write(suite.T(), suite.client).Id - dest := resourcetest.Resource(pbmesh.DestinationsType, "dest1"). - WithTenancy(tenancy). - WithData(suite.T(), suite.dest1). - Build() - decDest := resourcetest.MustDecode[*pbmesh.Destinations](suite.T(), dest) - suite.ctl.mapper.TrackDestinations(cdID, []*types.DecodedDestinations{decDest}) + dest := resourcetest.Resource(pbmesh.DestinationsType, "dest1"). + WithData(suite.T(), suite.dest1). + Build() + decDest := resourcetest.MustDecode[*pbmesh.Destinations](suite.T(), dest) + suite.ctl.mapper.TrackDestinations(cdID, []*types.DecodedDestinations{decDest}) - err := suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ - ID: cdID, - }) - require.NoError(suite.T(), err) + err := suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ + ID: cdID, + }) + require.NoError(suite.T(), err) - suite.client.RequireResourceNotFound(suite.T(), cdID) + suite.client.RequireResourceNotFound(suite.T(), cdID) - // Check that we're not tracking services for this workload anymore. - reqs, err := suite.ctl.mapper.MapService(context.TODO(), controller.Runtime{}, suite.destService1) - require.NoError(suite.T(), err) - require.Nil(suite.T(), reqs) + // Check that we're not tracking services for this workload anymore. + reqs, err := suite.ctl.mapper.MapService(context.TODO(), controller.Runtime{}, suite.destService1) + require.NoError(suite.T(), err) + require.Nil(suite.T(), reqs) - reqs, err = suite.ctl.mapper.MapService(context.TODO(), controller.Runtime{}, suite.destService2) - require.NoError(suite.T(), err) - require.Nil(suite.T(), reqs) - }) + reqs, err = suite.ctl.mapper.MapService(context.TODO(), controller.Runtime{}, suite.destService2) + require.NoError(suite.T(), err) + require.Nil(suite.T(), reqs) } -func (suite *controllerTestSuite) writeServices(t *testing.T, tenancy *pbresource.Tenancy) { +func (suite *controllerTestSuite) writeServices(t *testing.T) { // Write all services. resourcetest.Resource(pbcatalog.ServiceType, suite.destService1Ref.Name). - WithTenancy(tenancy). WithData(t, suite.serviceData). Write(t, suite.client) resourcetest.Resource(pbcatalog.ServiceType, suite.destService2Ref.Name). - WithTenancy(tenancy). WithData(t, suite.serviceData). Write(t, suite.client) resourcetest.Resource(pbcatalog.ServiceType, suite.destService3Ref.Name). - WithTenancy(tenancy). WithData(t, suite.serviceData). Write(t, suite.client) } -func (suite *controllerTestSuite) writeComputedRoutes(t *testing.T, tenancy *pbresource.Tenancy) { +func (suite *controllerTestSuite) writeComputedRoutes(t *testing.T) { // Write computed routes resourcetest.Resource(pbmesh.ComputedRoutesType, suite.destService1Ref.Name). - WithTenancy(tenancy). WithData(t, suite.destService1Routes). Write(t, suite.client) resourcetest.Resource(pbmesh.ComputedRoutesType, suite.destService2Ref.Name). - WithTenancy(tenancy). WithData(t, suite.destService2Routes). Write(t, suite.client) resourcetest.Resource(pbmesh.ComputedRoutesType, suite.destService3Ref.Name). - WithTenancy(tenancy). WithData(t, suite.destService3Routes). Write(t, suite.client) } func (suite *controllerTestSuite) TestReconcile_HappyPath() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - // Add configs in reverse alphabetical order. - d2 := resourcetest.Resource(pbmesh.DestinationsType, "dest2"). - WithTenancy(tenancy). - WithData(suite.T(), suite.dest2). - Write(suite.T(), suite.client) - _, err := suite.ctl.mapper.MapDestinations(suite.ctx, suite.runtime, d2) - require.NoError(suite.T(), err) + // Add configs in reverse alphabetical order. + d2 := resourcetest.Resource(pbmesh.DestinationsType, "dest2"). + WithData(suite.T(), suite.dest2). + Write(suite.T(), suite.client) + _, err := suite.ctl.mapper.MapDestinations(suite.ctx, suite.runtime, d2) + require.NoError(suite.T(), err) - d1 := resourcetest.Resource(pbmesh.DestinationsType, "dest1"). - WithTenancy(tenancy). - WithData(suite.T(), suite.dest1). - Write(suite.T(), suite.client) - _, err = suite.ctl.mapper.MapDestinations(suite.ctx, suite.runtime, d1) - require.NoError(suite.T(), err) + d1 := resourcetest.Resource(pbmesh.DestinationsType, "dest1"). + WithData(suite.T(), suite.dest1). + Write(suite.T(), suite.client) + _, err = suite.ctl.mapper.MapDestinations(suite.ctx, suite.runtime, d1) + require.NoError(suite.T(), err) - suite.writeServices(suite.T(), tenancy) - suite.writeComputedRoutes(suite.T(), tenancy) + suite.writeServices(suite.T()) + suite.writeComputedRoutes(suite.T()) - cdID := resource.ReplaceType(pbmesh.ComputedExplicitDestinationsType, suite.workloadRes.Id) - err = suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ - ID: cdID, - }) + cdID := resource.ReplaceType(pbmesh.ComputedExplicitDestinationsType, suite.workloadRes.Id) + err = suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ + ID: cdID, + }) - require.NoError(suite.T(), err) + require.NoError(suite.T(), err) - suite.requireComputedDestinations(suite.T(), cdID) - suite.client.RequireStatusCondition(suite.T(), d1.Id, ControllerName, ConditionDestinationsAccepted()) - }) + suite.requireComputedDestinations(suite.T(), cdID) + suite.client.RequireStatusCondition(suite.T(), d1.Id, ControllerName, ConditionDestinationsAccepted()) } func (suite *controllerTestSuite) TestReconcile_NoDestinations() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - dest := resourcetest.Resource(pbmesh.DestinationsType, "dest"). - WithTenancy(tenancy). - WithData(suite.T(), suite.dest1). - Build() - _, err := suite.ctl.mapper.MapDestinations(suite.ctx, suite.runtime, dest) - require.NoError(suite.T(), err) - - cdID := resourcetest.Resource(pbmesh.ComputedExplicitDestinationsType, suite.workloadRes.Id.Name). - WithTenancy(tenancy). - Write(suite.T(), suite.client).Id - err = suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ - ID: cdID, - }) - - require.NoError(suite.T(), err) + dest := resourcetest.Resource(pbmesh.DestinationsType, "dest"). + WithData(suite.T(), suite.dest1). + Build() + _, err := suite.ctl.mapper.MapDestinations(suite.ctx, suite.runtime, dest) + require.NoError(suite.T(), err) - suite.client.RequireResourceNotFound(suite.T(), cdID) + cdID := resourcetest.Resource(pbmesh.ComputedExplicitDestinationsType, suite.workloadRes.Id.Name). + Write(suite.T(), suite.client).Id + err = suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ + ID: cdID, }) + + require.NoError(suite.T(), err) + + suite.client.RequireResourceNotFound(suite.T(), cdID) } func (suite *controllerTestSuite) TestReconcile_AllDestinationsInvalid() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - // We add a destination with services refs that don't exist which should result - // in computed mapper being deleted because all mapper are invalid. - dest := resourcetest.Resource(pbmesh.DestinationsType, "dest"). - WithTenancy(tenancy). - WithData(suite.T(), suite.dest1). - Write(suite.T(), suite.client) - _, err := suite.ctl.mapper.MapDestinations(suite.ctx, suite.runtime, dest) - require.NoError(suite.T(), err) - - cdID := resourcetest.Resource(pbmesh.ComputedExplicitDestinationsType, suite.workloadRes.Id.Name). - WithTenancy(tenancy). - Write(suite.T(), suite.client).Id - err = suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ - ID: cdID, - }) - - require.NoError(suite.T(), err) + // We add a destination with services refs that don't exist which should result + // in computed mapper being deleted because all mapper are invalid. + dest := resourcetest.Resource(pbmesh.DestinationsType, "dest"). + WithData(suite.T(), suite.dest1). + Write(suite.T(), suite.client) + _, err := suite.ctl.mapper.MapDestinations(suite.ctx, suite.runtime, dest) + require.NoError(suite.T(), err) - suite.client.RequireResourceNotFound(suite.T(), cdID) + cdID := resourcetest.Resource(pbmesh.ComputedExplicitDestinationsType, suite.workloadRes.Id.Name). + Write(suite.T(), suite.client).Id + err = suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ + ID: cdID, }) + + require.NoError(suite.T(), err) + + suite.client.RequireResourceNotFound(suite.T(), cdID) } func (suite *controllerTestSuite) TestReconcile_StatusUpdate_ConflictingDestination() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - dest1 := resourcetest.Resource(pbmesh.DestinationsType, "dest1"). - WithTenancy(tenancy). - WithData(suite.T(), suite.dest1). - Write(suite.T(), suite.client) - _, err := suite.ctl.mapper.MapDestinations(suite.ctx, suite.runtime, dest1) - require.NoError(suite.T(), err) + dest1 := resourcetest.Resource(pbmesh.DestinationsType, "dest1"). + WithData(suite.T(), suite.dest1). + Write(suite.T(), suite.client) + _, err := suite.ctl.mapper.MapDestinations(suite.ctx, suite.runtime, dest1) + require.NoError(suite.T(), err) - // Write a conflicting destinations resource. - destData := proto.Clone(suite.dest2).(*pbmesh.Destinations) - destData.Destinations[0] = suite.dest1.Destinations[0] + // Write a conflicting destinations resource. + destData := proto.Clone(suite.dest2).(*pbmesh.Destinations) + destData.Destinations[0] = suite.dest1.Destinations[0] - dest2 := resourcetest.Resource(pbmesh.DestinationsType, "dest2"). - WithTenancy(tenancy). - WithData(suite.T(), destData). - Write(suite.T(), suite.client) - _, err = suite.ctl.mapper.MapDestinations(suite.ctx, suite.runtime, dest2) - require.NoError(suite.T(), err) - - cdID := resourcetest.Resource(pbmesh.ComputedExplicitDestinationsType, suite.workloadRes.Id.Name). - WithTenancy(tenancy). - Write(suite.T(), suite.client).Id - err = suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ - ID: cdID, - }) - require.NoError(suite.T(), err) - suite.client.RequireResourceNotFound(suite.T(), cdID) - - // Expect that the status on both resource is updated showing conflict. - suite.client.RequireStatusCondition(suite.T(), dest1.Id, ControllerName, - ConditionConflictFound(suite.workloadRes.Id)) - suite.client.RequireStatusCondition(suite.T(), dest2.Id, ControllerName, - ConditionConflictFound(suite.workloadRes.Id)) - - // Update dest2 back to have non-conflicting data. - dest2 = resourcetest.Resource(pbmesh.DestinationsType, "dest2"). - WithTenancy(tenancy). - WithData(suite.T(), suite.dest2). - Write(suite.T(), suite.client) - _, err = suite.ctl.mapper.MapDestinations(suite.ctx, suite.runtime, dest2) - require.NoError(suite.T(), err) + dest2 := resourcetest.Resource(pbmesh.DestinationsType, "dest2"). + WithData(suite.T(), destData). + Write(suite.T(), suite.client) + _, err = suite.ctl.mapper.MapDestinations(suite.ctx, suite.runtime, dest2) + require.NoError(suite.T(), err) - err = suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ - ID: cdID, - }) - require.NoError(suite.T(), err) + cdID := resourcetest.Resource(pbmesh.ComputedExplicitDestinationsType, suite.workloadRes.Id.Name). + Write(suite.T(), suite.client).Id + err = suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ + ID: cdID, + }) + require.NoError(suite.T(), err) + suite.client.RequireResourceNotFound(suite.T(), cdID) + + // Expect that the status on both resource is updated showing conflict. + suite.client.RequireStatusCondition(suite.T(), dest1.Id, ControllerName, + ConditionConflictFound(suite.workloadRes.Id)) + suite.client.RequireStatusCondition(suite.T(), dest2.Id, ControllerName, + ConditionConflictFound(suite.workloadRes.Id)) + + // Update dest2 back to have non-conflicting data. + dest2 = resourcetest.Resource(pbmesh.DestinationsType, "dest2"). + WithData(suite.T(), suite.dest2). + Write(suite.T(), suite.client) + _, err = suite.ctl.mapper.MapDestinations(suite.ctx, suite.runtime, dest2) + require.NoError(suite.T(), err) - // Expect status on both to be updated to say that there's no conflict. - suite.client.RequireStatusCondition(suite.T(), dest1.Id, ControllerName, - ConditionConflictNotFound) - suite.client.RequireStatusCondition(suite.T(), dest2.Id, ControllerName, - ConditionConflictNotFound) + err = suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ + ID: cdID, }) + require.NoError(suite.T(), err) + + // Expect status on both to be updated to say that there's no conflict. + suite.client.RequireStatusCondition(suite.T(), dest1.Id, ControllerName, + ConditionConflictNotFound) + suite.client.RequireStatusCondition(suite.T(), dest2.Id, ControllerName, + ConditionConflictNotFound) } func (suite *controllerTestSuite) TestReconcile_StatusUpdate_NoService() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - dest := resourcetest.Resource(pbmesh.DestinationsType, "dest"). - WithTenancy(tenancy). - WithData(suite.T(), suite.dest2). - Write(suite.T(), suite.client) - _, err := suite.ctl.mapper.MapDestinations(suite.ctx, suite.runtime, dest) - require.NoError(suite.T(), err) - cdID := resourcetest.Resource(pbmesh.ComputedExplicitDestinationsType, suite.workloadRes.Id.Name). - WithTenancy(tenancy). - Write(suite.T(), suite.client).Id - err = suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ - ID: cdID, - }) - require.NoError(suite.T(), err) - suite.client.RequireResourceNotFound(suite.T(), cdID) - - suite.client.RequireStatusCondition(suite.T(), dest.Id, ControllerName, - ConditionDestinationServiceNotFound(resource.ReferenceToString(suite.destService3Ref))) + dest := resourcetest.Resource(pbmesh.DestinationsType, "dest"). + WithData(suite.T(), suite.dest2). + Write(suite.T(), suite.client) + _, err := suite.ctl.mapper.MapDestinations(suite.ctx, suite.runtime, dest) + require.NoError(suite.T(), err) + cdID := resourcetest.Resource(pbmesh.ComputedExplicitDestinationsType, suite.workloadRes.Id.Name). + Write(suite.T(), suite.client).Id + err = suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ + ID: cdID, }) + require.NoError(suite.T(), err) + suite.client.RequireResourceNotFound(suite.T(), cdID) + + suite.client.RequireStatusCondition(suite.T(), dest.Id, ControllerName, + ConditionDestinationServiceNotFound(resource.ReferenceToString(suite.destService3Ref))) } func (suite *controllerTestSuite) TestReconcile_StatusUpdate_ServiceNotOnMesh() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - dest := resourcetest.Resource(pbmesh.DestinationsType, "dest"). - WithTenancy(tenancy). - WithData(suite.T(), suite.dest2). - Write(suite.T(), suite.client) - _, err := suite.ctl.mapper.MapDestinations(suite.ctx, suite.runtime, dest) - require.NoError(suite.T(), err) - - resourcetest.Resource(pbcatalog.ServiceType, suite.destService3Ref.Name). - WithTenancy(tenancy). - WithData(suite.T(), &pbcatalog.Service{ - Workloads: &pbcatalog.WorkloadSelector{Names: []string{suite.workloadRes.Id.Name}}, - Ports: []*pbcatalog.ServicePort{ - { - TargetPort: "tcp", - Protocol: pbcatalog.Protocol_PROTOCOL_TCP, - }, - }, - }). - Write(suite.T(), suite.client) + dest := resourcetest.Resource(pbmesh.DestinationsType, "dest"). + WithData(suite.T(), suite.dest2). + Write(suite.T(), suite.client) + _, err := suite.ctl.mapper.MapDestinations(suite.ctx, suite.runtime, dest) + require.NoError(suite.T(), err) - cdID := resourcetest.Resource(pbmesh.ComputedExplicitDestinationsType, suite.workloadRes.Id.Name). - WithTenancy(tenancy). - Write(suite.T(), suite.client).Id + resourcetest.Resource(pbcatalog.ServiceType, suite.destService3Ref.Name). + WithData(suite.T(), &pbcatalog.Service{ + Workloads: &pbcatalog.WorkloadSelector{Names: []string{suite.workloadRes.Id.Name}}, + Ports: []*pbcatalog.ServicePort{ + { + TargetPort: "tcp", + Protocol: pbcatalog.Protocol_PROTOCOL_TCP, + }, + }, + }). + Write(suite.T(), suite.client) - err = suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ - ID: cdID, - }) - require.NoError(suite.T(), err) - suite.client.RequireResourceNotFound(suite.T(), cdID) + cdID := resourcetest.Resource(pbmesh.ComputedExplicitDestinationsType, suite.workloadRes.Id.Name). + Write(suite.T(), suite.client).Id - suite.client.RequireStatusCondition(suite.T(), dest.Id, ControllerName, - ConditionMeshProtocolNotFound(resource.ReferenceToString(suite.destService3Ref))) + err = suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ + ID: cdID, }) + require.NoError(suite.T(), err) + suite.client.RequireResourceNotFound(suite.T(), cdID) + + suite.client.RequireStatusCondition(suite.T(), dest.Id, ControllerName, + ConditionMeshProtocolNotFound(resource.ReferenceToString(suite.destService3Ref))) } func (suite *controllerTestSuite) TestReconcile_StatusUpdate_DestinationPortIsMesh() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - dest := resourcetest.Resource(pbmesh.DestinationsType, "dest"). - WithTenancy(tenancy). - WithData(suite.T(), suite.dest2). - Write(suite.T(), suite.client) - _, err := suite.ctl.mapper.MapDestinations(suite.ctx, suite.runtime, dest) - require.NoError(suite.T(), err) - - resourcetest.Resource(pbcatalog.ServiceType, suite.destService3Ref.Name). - WithTenancy(tenancy). - WithData(suite.T(), &pbcatalog.Service{ - Workloads: &pbcatalog.WorkloadSelector{Names: []string{suite.workloadRes.Id.Name}}, - Ports: []*pbcatalog.ServicePort{ - { - TargetPort: "tcp", - Protocol: pbcatalog.Protocol_PROTOCOL_MESH, - }, - }, - }). - Write(suite.T(), suite.client) + dest := resourcetest.Resource(pbmesh.DestinationsType, "dest"). + WithData(suite.T(), suite.dest2). + Write(suite.T(), suite.client) + _, err := suite.ctl.mapper.MapDestinations(suite.ctx, suite.runtime, dest) + require.NoError(suite.T(), err) - cdID := resourcetest.Resource(pbmesh.ComputedExplicitDestinationsType, suite.workloadRes.Id.Name). - WithTenancy(tenancy). - Write(suite.T(), suite.client).Id + resourcetest.Resource(pbcatalog.ServiceType, suite.destService3Ref.Name). + WithData(suite.T(), &pbcatalog.Service{ + Workloads: &pbcatalog.WorkloadSelector{Names: []string{suite.workloadRes.Id.Name}}, + Ports: []*pbcatalog.ServicePort{ + { + TargetPort: "tcp", + Protocol: pbcatalog.Protocol_PROTOCOL_MESH, + }, + }, + }). + Write(suite.T(), suite.client) - err = suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ - ID: cdID, - }) - require.NoError(suite.T(), err) - suite.client.RequireResourceNotFound(suite.T(), cdID) + cdID := resourcetest.Resource(pbmesh.ComputedExplicitDestinationsType, suite.workloadRes.Id.Name). + Write(suite.T(), suite.client).Id - suite.client.RequireStatusCondition(suite.T(), dest.Id, ControllerName, - ConditionMeshProtocolDestinationPort(resource.ReferenceToString(suite.destService3Ref), "tcp")) + err = suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ + ID: cdID, }) + require.NoError(suite.T(), err) + suite.client.RequireResourceNotFound(suite.T(), cdID) + + suite.client.RequireStatusCondition(suite.T(), dest.Id, ControllerName, + ConditionMeshProtocolDestinationPort(resource.ReferenceToString(suite.destService3Ref), "tcp")) } func (suite *controllerTestSuite) TestReconcile_StatusUpdate_ComputedRoutesNotFound() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - dest := resourcetest.Resource(pbmesh.DestinationsType, "dest"). - WithTenancy(tenancy). - WithData(suite.T(), suite.dest2). - Write(suite.T(), suite.client) - _, err := suite.ctl.mapper.MapDestinations(suite.ctx, suite.runtime, dest) - require.NoError(suite.T(), err) - - resourcetest.Resource(pbcatalog.ServiceType, suite.destService3Ref.Name). - WithTenancy(tenancy). - WithData(suite.T(), &pbcatalog.Service{ - Workloads: &pbcatalog.WorkloadSelector{Names: []string{suite.workloadRes.Id.Name}}, - Ports: []*pbcatalog.ServicePort{ - { - TargetPort: "tcp", - Protocol: pbcatalog.Protocol_PROTOCOL_TCP, - }, - { - TargetPort: "mesh", - Protocol: pbcatalog.Protocol_PROTOCOL_MESH, - }, - }, - }). - Write(suite.T(), suite.client) + dest := resourcetest.Resource(pbmesh.DestinationsType, "dest"). + WithData(suite.T(), suite.dest2). + Write(suite.T(), suite.client) + _, err := suite.ctl.mapper.MapDestinations(suite.ctx, suite.runtime, dest) + require.NoError(suite.T(), err) - cdID := resourcetest.Resource(pbmesh.ComputedExplicitDestinationsType, suite.workloadRes.Id.Name). - WithTenancy(tenancy). - Write(suite.T(), suite.client).Id + resourcetest.Resource(pbcatalog.ServiceType, suite.destService3Ref.Name). + WithData(suite.T(), &pbcatalog.Service{ + Workloads: &pbcatalog.WorkloadSelector{Names: []string{suite.workloadRes.Id.Name}}, + Ports: []*pbcatalog.ServicePort{ + { + TargetPort: "tcp", + Protocol: pbcatalog.Protocol_PROTOCOL_TCP, + }, + { + TargetPort: "mesh", + Protocol: pbcatalog.Protocol_PROTOCOL_MESH, + }, + }, + }). + Write(suite.T(), suite.client) - err = suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ - ID: cdID, - }) - require.NoError(suite.T(), err) - suite.client.RequireResourceNotFound(suite.T(), cdID) + cdID := resourcetest.Resource(pbmesh.ComputedExplicitDestinationsType, suite.workloadRes.Id.Name). + Write(suite.T(), suite.client).Id - suite.client.RequireStatusCondition(suite.T(), dest.Id, ControllerName, - ConditionDestinationComputedRoutesNotFound(resource.ReferenceToString(suite.destService3Ref))) + err = suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ + ID: cdID, }) + require.NoError(suite.T(), err) + suite.client.RequireResourceNotFound(suite.T(), cdID) + + suite.client.RequireStatusCondition(suite.T(), dest.Id, ControllerName, + ConditionDestinationComputedRoutesNotFound(resource.ReferenceToString(suite.destService3Ref))) } func (suite *controllerTestSuite) TestReconcile_StatusUpdate_ComputedRoutesPortNotFound() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - dest := resourcetest.Resource(pbmesh.DestinationsType, "dest"). - WithTenancy(tenancy). - WithData(suite.T(), suite.dest2). - Write(suite.T(), suite.client) - _, err := suite.ctl.mapper.MapDestinations(suite.ctx, suite.runtime, dest) - require.NoError(suite.T(), err) - - destService := resourcetest.Resource(pbcatalog.ServiceType, suite.destService3Ref.Name). - WithTenancy(tenancy). - WithData(suite.T(), &pbcatalog.Service{ - Workloads: &pbcatalog.WorkloadSelector{Names: []string{suite.workloadRes.Id.Name}}, - Ports: []*pbcatalog.ServicePort{ - { - TargetPort: "tcp", - Protocol: pbcatalog.Protocol_PROTOCOL_TCP, - }, - { - TargetPort: "mesh", - Protocol: pbcatalog.Protocol_PROTOCOL_MESH, - }, + dest := resourcetest.Resource(pbmesh.DestinationsType, "dest"). + WithData(suite.T(), suite.dest2). + Write(suite.T(), suite.client) + _, err := suite.ctl.mapper.MapDestinations(suite.ctx, suite.runtime, dest) + require.NoError(suite.T(), err) + + destService := resourcetest.Resource(pbcatalog.ServiceType, suite.destService3Ref.Name). + WithData(suite.T(), &pbcatalog.Service{ + Workloads: &pbcatalog.WorkloadSelector{Names: []string{suite.workloadRes.Id.Name}}, + Ports: []*pbcatalog.ServicePort{ + { + TargetPort: "tcp", + Protocol: pbcatalog.Protocol_PROTOCOL_TCP, }, - }). - Write(suite.T(), suite.client) + { + TargetPort: "mesh", + Protocol: pbcatalog.Protocol_PROTOCOL_MESH, + }, + }, + }). + Write(suite.T(), suite.client) - resourcetest.Resource(pbmesh.ComputedRoutesType, destService.Id.Name). - WithTenancy(tenancy). - WithData(suite.T(), &pbmesh.ComputedRoutes{ - PortedConfigs: map[string]*pbmesh.ComputedPortRoutes{ - "some-other-port": { - Protocol: pbcatalog.Protocol_PROTOCOL_HTTP, - Config: &pbmesh.ComputedPortRoutes_Http{ - Http: &pbmesh.ComputedHTTPRoute{}, - }, + resourcetest.Resource(pbmesh.ComputedRoutesType, destService.Id.Name). + WithData(suite.T(), &pbmesh.ComputedRoutes{ + PortedConfigs: map[string]*pbmesh.ComputedPortRoutes{ + "some-other-port": { + Protocol: pbcatalog.Protocol_PROTOCOL_HTTP, + Config: &pbmesh.ComputedPortRoutes_Http{ + Http: &pbmesh.ComputedHTTPRoute{}, }, }, - }). - Write(suite.T(), suite.client) - - cdID := resourcetest.Resource(pbmesh.ComputedExplicitDestinationsType, suite.workloadRes.Id.Name). - WithTenancy(tenancy). - Write(suite.T(), suite.client).Id + }, + }). + Write(suite.T(), suite.client) - err = suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ - ID: cdID, - }) - require.NoError(suite.T(), err) - suite.client.RequireResourceNotFound(suite.T(), cdID) + cdID := resourcetest.Resource(pbmesh.ComputedExplicitDestinationsType, suite.workloadRes.Id.Name). + Write(suite.T(), suite.client).Id - suite.client.RequireStatusCondition(suite.T(), dest.Id, ControllerName, - ConditionDestinationComputedRoutesPortNotFound(resource.ReferenceToString(suite.destService3Ref), "tcp")) + err = suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ + ID: cdID, }) + require.NoError(suite.T(), err) + suite.client.RequireResourceNotFound(suite.T(), cdID) + + suite.client.RequireStatusCondition(suite.T(), dest.Id, ControllerName, + ConditionDestinationComputedRoutesPortNotFound(resource.ReferenceToString(suite.destService3Ref), "tcp")) } func (suite *controllerTestSuite) TestController() { @@ -818,113 +730,106 @@ func (suite *controllerTestSuite) TestController() { mgr.SetRaftLeader(true) go mgr.Run(suite.ctx) - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - cdID := resource.ReplaceType(pbmesh.ComputedExplicitDestinationsType, suite.workloadRes.Id) + cdID := resource.ReplaceType(pbmesh.ComputedExplicitDestinationsType, suite.workloadRes.Id) - dest1 := resourcetest.Resource(pbmesh.DestinationsType, "dest1"). - WithTenancy(tenancy). - WithData(suite.T(), suite.dest1). - Write(suite.T(), suite.client) + dest1 := resourcetest.Resource(pbmesh.DestinationsType, "dest1"). + WithData(suite.T(), suite.dest1). + Write(suite.T(), suite.client) - // At this point, none of the services or routes yet exist and so we should see the status of the destinations - // resource to reflect that. The CED resource should not be created in this case. - testutil.RunStep(suite.T(), "check that destinations status is updated", func(t *testing.T) { - retry.Run(t, func(r *retry.R) { - serviceRef := resource.IDToString(suite.destService1.Id) - suite.client.WaitForStatusCondition(r, dest1.Id, ControllerName, ConditionDestinationServiceNotFound(serviceRef)) + // At this point, none of the services or routes yet exist and so we should see the status of the destinations + // resource to reflect that. The CED resource should not be created in this case. + testutil.RunStep(suite.T(), "check that destinations status is updated", func(t *testing.T) { + retry.Run(t, func(r *retry.R) { + serviceRef := resource.IDToString(suite.destService1.Id) + suite.client.WaitForStatusCondition(r, dest1.Id, ControllerName, ConditionDestinationServiceNotFound(serviceRef)) - suite.client.RequireResourceNotFound(r, cdID) - }) + suite.client.RequireResourceNotFound(r, cdID) }) + }) - dest2 := resourcetest.Resource(pbmesh.DestinationsType, "dest2"). - WithTenancy(tenancy). - WithData(suite.T(), suite.dest2). - Write(suite.T(), suite.client) + dest2 := resourcetest.Resource(pbmesh.DestinationsType, "dest2"). + WithData(suite.T(), suite.dest2). + Write(suite.T(), suite.client) - suite.writeServices(suite.T(), tenancy) + suite.writeServices(suite.T()) - // After we write services, we expect another reconciliation to be kicked off to validate and find that there are no computed routes. - testutil.RunStep(suite.T(), "check that destinations status says that there are no computed routes", func(t *testing.T) { - retry.Run(t, func(r *retry.R) { - suite.client.WaitForStatusCondition(r, dest1.Id, ControllerName, - ConditionDestinationComputedRoutesNotFound(resource.IDToString(suite.destService1.Id))) - suite.client.WaitForStatusCondition(r, dest2.Id, ControllerName, - ConditionDestinationComputedRoutesNotFound(resource.IDToString(suite.destService3.Id))) + // After we write services, we expect another reconciliation to be kicked off to validate and find that there are no computed routes. + testutil.RunStep(suite.T(), "check that destinations status says that there are no computed routes", func(t *testing.T) { + retry.Run(t, func(r *retry.R) { + suite.client.WaitForStatusCondition(r, dest1.Id, ControllerName, + ConditionDestinationComputedRoutesNotFound(resource.IDToString(suite.destService1.Id))) + suite.client.WaitForStatusCondition(r, dest2.Id, ControllerName, + ConditionDestinationComputedRoutesNotFound(resource.IDToString(suite.destService3.Id))) - suite.client.RequireResourceNotFound(r, cdID) - }) + suite.client.RequireResourceNotFound(r, cdID) }) + }) - // Now write computed routes to get a computed resource. - suite.writeComputedRoutes(suite.T(), tenancy) + // Now write computed routes to get a computed resource. + suite.writeComputedRoutes(suite.T()) - testutil.RunStep(suite.T(), "computed destinations generation", func(t *testing.T) { - retry.Run(t, func(r *retry.R) { - suite.client.RequireResourceExists(r, cdID) - suite.requireComputedDestinations(r, cdID) - }) + testutil.RunStep(suite.T(), "computed destinations generation", func(t *testing.T) { + retry.Run(t, func(r *retry.R) { + suite.client.RequireResourceExists(r, cdID) + suite.requireComputedDestinations(r, cdID) }) + }) + + testutil.RunStep(suite.T(), "add another workload", func(t *testing.T) { + // Create another workload that will match only dest2. + matchingWorkload := resourcetest.Resource(pbcatalog.WorkloadType, "test-extra-workload"). + WithData(t, suite.workload). + Write(t, suite.client) + matchingWorkloadCDID := resource.ReplaceType(pbmesh.ComputedExplicitDestinationsType, matchingWorkload.Id) + + retry.Run(t, func(r *retry.R) { + suite.client.RequireResourceExists(r, cdID) + suite.requireComputedDestinations(r, cdID) - testutil.RunStep(suite.T(), "add another workload", func(t *testing.T) { - // Create another workload that will match only dest2. - matchingWorkload := resourcetest.Resource(pbcatalog.WorkloadType, "test-extra-workload"). - WithTenancy(tenancy). - WithData(t, suite.workload). - Write(t, suite.client) - matchingWorkloadCDID := resource.ReplaceType(pbmesh.ComputedExplicitDestinationsType, matchingWorkload.Id) - - retry.Run(t, func(r *retry.R) { - suite.client.RequireResourceExists(r, cdID) - suite.requireComputedDestinations(r, cdID) - - matchingWorkloadCD := suite.client.RequireResourceExists(r, matchingWorkloadCDID) - dec := resourcetest.MustDecode[*pbmesh.ComputedExplicitDestinations](r, matchingWorkloadCD) - prototest.AssertDeepEqual(r, suite.dest2.GetDestinations(), dec.GetData().GetDestinations()) - }) + matchingWorkloadCD := suite.client.RequireResourceExists(r, matchingWorkloadCDID) + dec := resourcetest.MustDecode[*pbmesh.ComputedExplicitDestinations](r, matchingWorkloadCD) + prototest.AssertDeepEqual(r, suite.dest2.GetDestinations(), dec.GetData().GetDestinations()) }) + }) + + testutil.RunStep(suite.T(), "update workload selector", func(t *testing.T) { + // Update workload selector to no point to some non-existing workload + updatedDestinations := proto.Clone(suite.dest2).(*pbmesh.Destinations) + updatedDestinations.Workloads = &pbcatalog.WorkloadSelector{ + Names: []string{"other-workload"}, + } - testutil.RunStep(suite.T(), "update workload selector", func(t *testing.T) { - // Update workload selector to no point to some non-existing workload - updatedDestinations := proto.Clone(suite.dest2).(*pbmesh.Destinations) - updatedDestinations.Workloads = &pbcatalog.WorkloadSelector{ - Names: []string{"other-workload"}, + matchingWorkload := resourcetest.Resource(pbcatalog.WorkloadType, "other-workload"). + WithData(t, suite.workload). + Write(t, suite.client) + matchingWorkloadCDID := resource.ReplaceType(pbmesh.ComputedExplicitDestinationsType, matchingWorkload.Id) + resourcetest.Resource(pbmesh.DestinationsType, "dest2"). + WithData(suite.T(), updatedDestinations). + Write(suite.T(), suite.client) + + retry.Run(t, func(r *retry.R) { + res := suite.client.RequireResourceExists(r, cdID) + + // The "test-workload" computed destinations should now be updated to use only proxy dest1. + expDest := &pbmesh.ComputedExplicitDestinations{ + Destinations: suite.dest1.Destinations, } + dec := resourcetest.MustDecode[*pbmesh.ComputedExplicitDestinations](t, res) + prototest.AssertDeepEqual(r, expDest.GetDestinations(), dec.GetData().GetDestinations()) - matchingWorkload := resourcetest.Resource(pbcatalog.WorkloadType, "other-workload"). - WithData(t, suite.workload). - WithTenancy(tenancy). - Write(t, suite.client) - matchingWorkloadCDID := resource.ReplaceType(pbmesh.ComputedExplicitDestinationsType, matchingWorkload.Id) - resourcetest.Resource(pbmesh.DestinationsType, "dest2"). - WithTenancy(tenancy). - WithData(suite.T(), updatedDestinations). - Write(suite.T(), suite.client) - - retry.Run(t, func(r *retry.R) { - res := suite.client.RequireResourceExists(r, cdID) - - // The "test-workload" computed destinations should now be updated to use only proxy dest1. - expDest := &pbmesh.ComputedExplicitDestinations{ - Destinations: suite.dest1.Destinations, - } - dec := resourcetest.MustDecode[*pbmesh.ComputedExplicitDestinations](t, res) - prototest.AssertDeepEqual(r, expDest.GetDestinations(), dec.GetData().GetDestinations()) - - matchingWorkloadCD := suite.client.RequireResourceExists(r, matchingWorkloadCDID) - dec = resourcetest.MustDecode[*pbmesh.ComputedExplicitDestinations](r, matchingWorkloadCD) - prototest.AssertDeepEqual(r, suite.dest2.GetDestinations(), dec.GetData().GetDestinations()) - }) + matchingWorkloadCD := suite.client.RequireResourceExists(r, matchingWorkloadCDID) + dec = resourcetest.MustDecode[*pbmesh.ComputedExplicitDestinations](r, matchingWorkloadCD) + prototest.AssertDeepEqual(r, suite.dest2.GetDestinations(), dec.GetData().GetDestinations()) }) + }) - // Delete all destinations. - suite.client.MustDelete(suite.T(), dest1.Id) - suite.client.MustDelete(suite.T(), dest2.Id) + // Delete all destinations. + suite.client.MustDelete(suite.T(), dest1.Id) + suite.client.MustDelete(suite.T(), dest2.Id) - testutil.RunStep(suite.T(), "all destinations are deleted", func(t *testing.T) { - retry.Run(t, func(r *retry.R) { - suite.client.RequireResourceNotFound(r, cdID) - }) + testutil.RunStep(suite.T(), "all destinations are deleted", func(t *testing.T) { + retry.Run(t, func(r *retry.R) { + suite.client.RequireResourceNotFound(r, cdID) }) }) } @@ -939,16 +844,3 @@ func (suite *controllerTestSuite) requireComputedDestinations(t resourcetest.T, prototest.AssertElementsMatch(t, suite.expComputedDest.GetDestinations(), decCD.Data.GetDestinations()) resourcetest.RequireOwner(t, cdRes, resource.ReplaceType(pbcatalog.WorkloadType, id), true) } - -func (suite *controllerTestSuite) appendTenancyInfo(tenancy *pbresource.Tenancy) string { - return fmt.Sprintf("%s_Namespace_%s_Partition", tenancy.Namespace, tenancy.Partition) -} - -func (suite *controllerTestSuite) runTestCaseWithTenancies(t func(*pbresource.Tenancy)) { - for _, tenancy := range suite.tenancies { - suite.Run(suite.appendTenancyInfo(tenancy), func() { - suite.setupWithTenancy(tenancy) - t(tenancy) - }) - } -} diff --git a/internal/mesh/internal/controllers/meshgateways/controller.go b/internal/mesh/internal/controllers/meshgateways/controller.go deleted file mode 100644 index 76cd44748cfec..0000000000000 --- a/internal/mesh/internal/controllers/meshgateways/controller.go +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: BUSL-1.1 - -package meshgateways - -import ( - "context" - "errors" - - "github.com/hashicorp/consul/internal/controller" - pbmesh "github.com/hashicorp/consul/proto-public/pbmesh/v2beta1" -) - -func Controller() controller.Controller { - r := &reconciler{} - - return controller.ForType(pbmesh.MeshGatewayType). - WithReconciler(r) -} - -type reconciler struct{} - -func (r *reconciler) Reconcile(ctx context.Context, rt controller.Runtime, req controller.Request) error { - // TODO NET-6426, NET-6427, NET-6428, NET-6429, NET-6430, NET-6431, NET-6432 - return errors.New("not implemented") -} diff --git a/internal/mesh/internal/controllers/proxyconfiguration/controller_test.go b/internal/mesh/internal/controllers/proxyconfiguration/controller_test.go index c8a6f585f49a1..554f57ab5a068 100644 --- a/internal/mesh/internal/controllers/proxyconfiguration/controller_test.go +++ b/internal/mesh/internal/controllers/proxyconfiguration/controller_test.go @@ -5,7 +5,6 @@ package proxyconfiguration import ( "context" - "fmt" "testing" "time" @@ -47,13 +46,10 @@ type controllerTestSuite struct { proxyCfg3 *pbmesh.ProxyConfiguration expComputedProxyCfg *pbmesh.ComputedProxyConfiguration - - tenancies []*pbresource.Tenancy } func (suite *controllerTestSuite) SetupTest() { - suite.tenancies = resourcetest.TestTenancies() - resourceClient := svctest.RunResourceServiceWithTenancies(suite.T(), types.Register, catalog.RegisterTypes) + resourceClient := svctest.RunResourceService(suite.T(), types.Register, catalog.RegisterTypes) suite.client = resourcetest.NewClient(resourceClient) suite.runtime = controller.Runtime{Client: resourceClient, Logger: testutil.Logger(suite.T())} suite.ctx = testutil.TestContext(suite.T()) @@ -61,223 +57,7 @@ func (suite *controllerTestSuite) SetupTest() { suite.ctl = &reconciler{ proxyConfigMapper: workloadselectionmapper.New[*pbmesh.ProxyConfiguration](pbmesh.ComputedProxyConfigurationType), } -} - -func (suite *controllerTestSuite) TestReconcile_NoWorkload() { - // This test ensures that removed workloads are ignored and don't result - // in the creation of the proxy state template. - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - id := resourcetest.Resource(pbmesh.ComputedProxyConfigurationType, "not-found").WithTenancy(tenancy).ID() - err := suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ - ID: id, - }) - require.NoError(suite.T(), err) - - suite.client.RequireResourceNotFound(suite.T(), id) - }) -} - -func (suite *controllerTestSuite) TestReconcile_NonMeshWorkload() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - resourcetest.Resource(pbcatalog.WorkloadType, "non-mesh"). - WithTenancy(tenancy). - WithData(suite.T(), &pbcatalog.Workload{ - Addresses: []*pbcatalog.WorkloadAddress{{Host: "1.1.1.1"}}, - Ports: map[string]*pbcatalog.WorkloadPort{ - "tcp": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, - }, - }). - Write(suite.T(), suite.client) - - cpcID := resourcetest.Resource(pbmesh.ComputedProxyConfigurationType, "non-mesh"). - WithTenancy(tenancy). - Write(suite.T(), suite.client).Id - - err := suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ - ID: cpcID, - }) - require.NoError(suite.T(), err) - - suite.client.RequireResourceNotFound(suite.T(), cpcID) - }) -} -func (suite *controllerTestSuite) TestReconcile_HappyPath() { - // Write all three proxy cfgs. - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - pCfg1 := resourcetest.Resource(pbmesh.ProxyConfigurationType, "cfg1"). - WithTenancy(tenancy). - WithData(suite.T(), suite.proxyCfg1). - Write(suite.T(), suite.client) - _, err := suite.ctl.proxyConfigMapper.MapToComputedType(suite.ctx, suite.runtime, pCfg1) - require.NoError(suite.T(), err) - - pCfg2 := resourcetest.Resource(pbmesh.ProxyConfigurationType, "cfg2"). - WithTenancy(tenancy). - WithData(suite.T(), suite.proxyCfg2). - Write(suite.T(), suite.client) - _, err = suite.ctl.proxyConfigMapper.MapToComputedType(suite.ctx, suite.runtime, pCfg2) - require.NoError(suite.T(), err) - - pCfg3 := resourcetest.Resource(pbmesh.ProxyConfigurationType, "cfg3"). - WithTenancy(tenancy). - WithData(suite.T(), suite.proxyCfg3). - Write(suite.T(), suite.client) - _, err = suite.ctl.proxyConfigMapper.MapToComputedType(suite.ctx, suite.runtime, pCfg3) - require.NoError(suite.T(), err) - - cpcID := resource.ReplaceType(pbmesh.ComputedProxyConfigurationType, suite.workloadRes.Id) - err = suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ - ID: cpcID, - }) - - require.NoError(suite.T(), err) - - suite.requireComputedProxyConfiguration(suite.T(), cpcID) - }) -} - -func (suite *controllerTestSuite) TestReconcile_NoProxyConfigs() { - // Create a proxy cfg and map it so that it gets saved to cache. - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - pCfg1 := resourcetest.Resource(pbmesh.ProxyConfigurationType, "cfg1"). - WithTenancy(tenancy). - WithData(suite.T(), suite.proxyCfg1). - Build() - _, err := suite.ctl.proxyConfigMapper.MapToComputedType(suite.ctx, suite.runtime, pCfg1) - require.NoError(suite.T(), err) - - cpcID := resourcetest.Resource(pbmesh.ComputedProxyConfigurationType, suite.workloadRes.Id.Name). - WithTenancy(tenancy). - Write(suite.T(), suite.client).Id - err = suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ - ID: cpcID, - }) - - require.NoError(suite.T(), err) - - suite.client.RequireResourceNotFound(suite.T(), cpcID) - }) -} - -func (suite *controllerTestSuite) TestController() { - // Run the controller manager - mgr := controller.NewManager(suite.client, suite.runtime.Logger) - - m := workloadselectionmapper.New[*pbmesh.ProxyConfiguration](pbmesh.ComputedProxyConfigurationType) - mgr.Register(Controller(m)) - mgr.SetRaftLeader(true) - go mgr.Run(suite.ctx) - - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - // Write proxy configs. - pCfg1 := resourcetest.Resource(pbmesh.ProxyConfigurationType, "cfg1"). - WithTenancy(tenancy). - WithData(suite.T(), suite.proxyCfg1). - Write(suite.T(), suite.client) - - pCfg2 := resourcetest.Resource(pbmesh.ProxyConfigurationType, "cfg2"). - WithTenancy(tenancy). - WithData(suite.T(), suite.proxyCfg2). - Write(suite.T(), suite.client) - - pCfg3 := resourcetest.Resource(pbmesh.ProxyConfigurationType, "cfg3"). - WithTenancy(tenancy). - WithData(suite.T(), suite.proxyCfg3). - Write(suite.T(), suite.client) - - cpcID := resource.ReplaceType(pbmesh.ComputedProxyConfigurationType, suite.workloadRes.Id) - testutil.RunStep(suite.T(), "computed proxy config generation", func(t *testing.T) { - retry.Run(t, func(r *retry.R) { - suite.client.RequireResourceExists(r, cpcID) - suite.requireComputedProxyConfiguration(r, cpcID) - }) - }) - - testutil.RunStep(suite.T(), "add another workload", func(t *testing.T) { - // Create another workload that will match only proxyCfg2. - matchingWorkload := resourcetest.Resource(pbcatalog.WorkloadType, "test-extra-workload").WithTenancy(tenancy). - WithData(t, suite.workload). - Write(t, suite.client) - matchingWorkloadCPCID := resource.ReplaceType(pbmesh.ComputedProxyConfigurationType, matchingWorkload.Id) - - retry.Run(t, func(r *retry.R) { - suite.client.RequireResourceExists(r, cpcID) - suite.requireComputedProxyConfiguration(r, cpcID) - - matchingWorkloadCPC := suite.client.RequireResourceExists(r, matchingWorkloadCPCID) - dec := resourcetest.MustDecode[*pbmesh.ComputedProxyConfiguration](r, matchingWorkloadCPC) - prototest.AssertDeepEqual(r, suite.proxyCfg2.GetDynamicConfig(), dec.GetData().GetDynamicConfig()) - prototest.AssertDeepEqual(r, suite.proxyCfg2.GetBootstrapConfig(), dec.GetData().GetBootstrapConfig()) - }) - }) - - testutil.RunStep(suite.T(), "update proxy config selector", func(t *testing.T) { - // Update proxy config selector to no longer select "test-workload" - updatedProxyCfg := proto.Clone(suite.proxyCfg2).(*pbmesh.ProxyConfiguration) - updatedProxyCfg.Workloads = &pbcatalog.WorkloadSelector{ - Names: []string{"test-extra-workload"}, - } - - matchingWorkload := resourcetest.Resource(pbcatalog.WorkloadType, "test-extra-workload"). - WithTenancy(tenancy). - WithData(t, suite.workload). - Write(t, suite.client) - matchingWorkloadCPCID := resource.ReplaceType(pbmesh.ComputedProxyConfigurationType, matchingWorkload.Id) - resourcetest.Resource(pbmesh.ProxyConfigurationType, "cfg2"). - WithTenancy(tenancy). - WithData(suite.T(), updatedProxyCfg). - Write(suite.T(), suite.client) - - retry.Run(t, func(r *retry.R) { - res := suite.client.RequireResourceExists(r, cpcID) - - // The "test-workload" computed proxy configurations should now be updated to use only proxy cfg 1 and 3. - expProxyCfg := &pbmesh.ComputedProxyConfiguration{ - DynamicConfig: &pbmesh.DynamicConfig{ - Mode: pbmesh.ProxyMode_PROXY_MODE_TRANSPARENT, - TransparentProxy: &pbmesh.TransparentProxy{OutboundListenerPort: iptables.DefaultTProxyOutboundPort}, - }, - BootstrapConfig: &pbmesh.BootstrapConfig{ - PrometheusBindAddr: "0.0.0.0:9000", - }, - } - dec := resourcetest.MustDecode[*pbmesh.ComputedProxyConfiguration](t, res) - prototest.AssertDeepEqual(r, expProxyCfg.GetDynamicConfig(), dec.GetData().GetDynamicConfig()) - prototest.AssertDeepEqual(r, expProxyCfg.GetBootstrapConfig(), dec.GetData().GetBootstrapConfig()) - - matchingWorkloadCPC := suite.client.RequireResourceExists(r, matchingWorkloadCPCID) - dec = resourcetest.MustDecode[*pbmesh.ComputedProxyConfiguration](r, matchingWorkloadCPC) - prototest.AssertDeepEqual(r, suite.proxyCfg2.GetDynamicConfig(), dec.GetData().GetDynamicConfig()) - prototest.AssertDeepEqual(r, suite.proxyCfg2.GetBootstrapConfig(), dec.GetData().GetBootstrapConfig()) - }) - }) - - // Delete all proxy cfgs. - suite.client.MustDelete(suite.T(), pCfg1.Id) - suite.client.MustDelete(suite.T(), pCfg2.Id) - suite.client.MustDelete(suite.T(), pCfg3.Id) - - testutil.RunStep(suite.T(), "all proxy configs are deleted", func(t *testing.T) { - retry.Run(t, func(r *retry.R) { - suite.client.RequireResourceNotFound(r, cpcID) - }) - }) - }) -} - -func TestControllerSuite(t *testing.T) { - suite.Run(t, new(controllerTestSuite)) -} - -func (suite *controllerTestSuite) requireComputedProxyConfiguration(t resourcetest.T, id *pbresource.ID) { - cpcRes := suite.client.RequireResourceExists(t, id) - decCPC := resourcetest.MustDecode[*pbmesh.ComputedProxyConfiguration](t, cpcRes) - prototest.AssertDeepEqual(t, suite.expComputedProxyCfg, decCPC.Data) - resourcetest.RequireOwner(t, cpcRes, resource.ReplaceType(pbcatalog.WorkloadType, id), true) -} - -func (suite *controllerTestSuite) setupResourcesWithTenancy(tenancy *pbresource.Tenancy) { suite.workload = &pbcatalog.Workload{ Addresses: []*pbcatalog.WorkloadAddress{{Host: "1.1.1.1"}}, Ports: map[string]*pbcatalog.WorkloadPort{ @@ -289,7 +69,6 @@ func (suite *controllerTestSuite) setupResourcesWithTenancy(tenancy *pbresource. suite.workloadRes = resourcetest.Resource(pbcatalog.WorkloadType, "test-workload"). WithData(suite.T(), suite.workload). - WithTenancy(tenancy). Write(suite.T(), suite.client) suite.proxyCfg1 = &pbmesh.ProxyConfiguration{ @@ -336,20 +115,194 @@ func (suite *controllerTestSuite) setupResourcesWithTenancy(tenancy *pbresource. } } -func (suite *controllerTestSuite) cleanupResources() { - suite.client.MustDelete(suite.T(), suite.workloadRes.Id) +func (suite *controllerTestSuite) TestReconcile_NoWorkload() { + // This test ensures that removed workloads are ignored and don't result + // in the creation of the proxy state template. + id := resourcetest.Resource(pbmesh.ComputedProxyConfigurationType, "not-found").ID() + err := suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ + ID: id, + }) + require.NoError(suite.T(), err) + + suite.client.RequireResourceNotFound(suite.T(), id) +} + +func (suite *controllerTestSuite) TestReconcile_NonMeshWorkload() { + resourcetest.Resource(pbcatalog.WorkloadType, "non-mesh"). + WithData(suite.T(), &pbcatalog.Workload{ + Addresses: []*pbcatalog.WorkloadAddress{{Host: "1.1.1.1"}}, + Ports: map[string]*pbcatalog.WorkloadPort{ + "tcp": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, + }, + }). + Write(suite.T(), suite.client) + + cpcID := resourcetest.Resource(pbmesh.ComputedProxyConfigurationType, "non-mesh"). + Write(suite.T(), suite.client).Id + + err := suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ + ID: cpcID, + }) + require.NoError(suite.T(), err) + + suite.client.RequireResourceNotFound(suite.T(), cpcID) } -func (suite *controllerTestSuite) runTestCaseWithTenancies(testFunc func(*pbresource.Tenancy)) { - for _, tenancy := range suite.tenancies { - suite.Run(suite.appendTenancyInfo(tenancy), func() { - suite.setupResourcesWithTenancy(tenancy) - testFunc(tenancy) - suite.T().Cleanup(suite.cleanupResources) +func (suite *controllerTestSuite) TestReconcile_HappyPath() { + // Write all three proxy cfgs. + pCfg1 := resourcetest.Resource(pbmesh.ProxyConfigurationType, "cfg1"). + WithData(suite.T(), suite.proxyCfg1). + Write(suite.T(), suite.client) + _, err := suite.ctl.proxyConfigMapper.MapToComputedType(suite.ctx, suite.runtime, pCfg1) + require.NoError(suite.T(), err) + + pCfg2 := resourcetest.Resource(pbmesh.ProxyConfigurationType, "cfg2"). + WithData(suite.T(), suite.proxyCfg2). + Write(suite.T(), suite.client) + _, err = suite.ctl.proxyConfigMapper.MapToComputedType(suite.ctx, suite.runtime, pCfg2) + require.NoError(suite.T(), err) + + pCfg3 := resourcetest.Resource(pbmesh.ProxyConfigurationType, "cfg3"). + WithData(suite.T(), suite.proxyCfg3). + Write(suite.T(), suite.client) + _, err = suite.ctl.proxyConfigMapper.MapToComputedType(suite.ctx, suite.runtime, pCfg3) + require.NoError(suite.T(), err) + + cpcID := resource.ReplaceType(pbmesh.ComputedProxyConfigurationType, suite.workloadRes.Id) + err = suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ + ID: cpcID, + }) + + require.NoError(suite.T(), err) + + suite.requireComputedProxyConfiguration(suite.T(), cpcID) +} + +func (suite *controllerTestSuite) TestReconcile_NoProxyConfigs() { + // Create a proxy cfg and map it so that it gets saved to cache. + pCfg1 := resourcetest.Resource(pbmesh.ProxyConfigurationType, "cfg1"). + WithData(suite.T(), suite.proxyCfg1). + Build() + _, err := suite.ctl.proxyConfigMapper.MapToComputedType(suite.ctx, suite.runtime, pCfg1) + require.NoError(suite.T(), err) + + cpcID := resourcetest.Resource(pbmesh.ComputedProxyConfigurationType, suite.workloadRes.Id.Name). + Write(suite.T(), suite.client).Id + err = suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ + ID: cpcID, + }) + + require.NoError(suite.T(), err) + + suite.client.RequireResourceNotFound(suite.T(), cpcID) +} + +func (suite *controllerTestSuite) TestController() { + // Run the controller manager + mgr := controller.NewManager(suite.client, suite.runtime.Logger) + + m := workloadselectionmapper.New[*pbmesh.ProxyConfiguration](pbmesh.ComputedProxyConfigurationType) + mgr.Register(Controller(m)) + mgr.SetRaftLeader(true) + go mgr.Run(suite.ctx) + + // Write proxy configs. + pCfg1 := resourcetest.Resource(pbmesh.ProxyConfigurationType, "cfg1"). + WithData(suite.T(), suite.proxyCfg1). + Write(suite.T(), suite.client) + + pCfg2 := resourcetest.Resource(pbmesh.ProxyConfigurationType, "cfg2"). + WithData(suite.T(), suite.proxyCfg2). + Write(suite.T(), suite.client) + + pCfg3 := resourcetest.Resource(pbmesh.ProxyConfigurationType, "cfg3"). + WithData(suite.T(), suite.proxyCfg3). + Write(suite.T(), suite.client) + + cpcID := resource.ReplaceType(pbmesh.ComputedProxyConfigurationType, suite.workloadRes.Id) + testutil.RunStep(suite.T(), "computed proxy config generation", func(t *testing.T) { + retry.Run(t, func(r *retry.R) { + suite.client.RequireResourceExists(r, cpcID) + suite.requireComputedProxyConfiguration(r, cpcID) }) - } + }) + + testutil.RunStep(suite.T(), "add another workload", func(t *testing.T) { + // Create another workload that will match only proxyCfg2. + matchingWorkload := resourcetest.Resource(pbcatalog.WorkloadType, "test-extra-workload"). + WithData(t, suite.workload). + Write(t, suite.client) + matchingWorkloadCPCID := resource.ReplaceType(pbmesh.ComputedProxyConfigurationType, matchingWorkload.Id) + + retry.Run(t, func(r *retry.R) { + suite.client.RequireResourceExists(r, cpcID) + suite.requireComputedProxyConfiguration(r, cpcID) + + matchingWorkloadCPC := suite.client.RequireResourceExists(r, matchingWorkloadCPCID) + dec := resourcetest.MustDecode[*pbmesh.ComputedProxyConfiguration](r, matchingWorkloadCPC) + prototest.AssertDeepEqual(r, suite.proxyCfg2.GetDynamicConfig(), dec.GetData().GetDynamicConfig()) + prototest.AssertDeepEqual(r, suite.proxyCfg2.GetBootstrapConfig(), dec.GetData().GetBootstrapConfig()) + }) + }) + + testutil.RunStep(suite.T(), "update proxy config selector", func(t *testing.T) { + // Update proxy config selector to no longer select "test-workload" + updatedProxyCfg := proto.Clone(suite.proxyCfg2).(*pbmesh.ProxyConfiguration) + updatedProxyCfg.Workloads = &pbcatalog.WorkloadSelector{ + Names: []string{"test-extra-workload"}, + } + + matchingWorkload := resourcetest.Resource(pbcatalog.WorkloadType, "test-extra-workload"). + WithData(t, suite.workload). + Write(t, suite.client) + matchingWorkloadCPCID := resource.ReplaceType(pbmesh.ComputedProxyConfigurationType, matchingWorkload.Id) + resourcetest.Resource(pbmesh.ProxyConfigurationType, "cfg2"). + WithData(suite.T(), updatedProxyCfg). + Write(suite.T(), suite.client) + + retry.Run(t, func(r *retry.R) { + res := suite.client.RequireResourceExists(r, cpcID) + + // The "test-workload" computed proxy configurations should now be updated to use only proxy cfg 1 and 3. + expProxyCfg := &pbmesh.ComputedProxyConfiguration{ + DynamicConfig: &pbmesh.DynamicConfig{ + Mode: pbmesh.ProxyMode_PROXY_MODE_TRANSPARENT, + TransparentProxy: &pbmesh.TransparentProxy{OutboundListenerPort: iptables.DefaultTProxyOutboundPort}, + }, + BootstrapConfig: &pbmesh.BootstrapConfig{ + PrometheusBindAddr: "0.0.0.0:9000", + }, + } + dec := resourcetest.MustDecode[*pbmesh.ComputedProxyConfiguration](t, res) + prototest.AssertDeepEqual(r, expProxyCfg.GetDynamicConfig(), dec.GetData().GetDynamicConfig()) + prototest.AssertDeepEqual(r, expProxyCfg.GetBootstrapConfig(), dec.GetData().GetBootstrapConfig()) + + matchingWorkloadCPC := suite.client.RequireResourceExists(r, matchingWorkloadCPCID) + dec = resourcetest.MustDecode[*pbmesh.ComputedProxyConfiguration](r, matchingWorkloadCPC) + prototest.AssertDeepEqual(r, suite.proxyCfg2.GetDynamicConfig(), dec.GetData().GetDynamicConfig()) + prototest.AssertDeepEqual(r, suite.proxyCfg2.GetBootstrapConfig(), dec.GetData().GetBootstrapConfig()) + }) + }) + + // Delete all proxy cfgs. + suite.client.MustDelete(suite.T(), pCfg1.Id) + suite.client.MustDelete(suite.T(), pCfg2.Id) + suite.client.MustDelete(suite.T(), pCfg3.Id) + + testutil.RunStep(suite.T(), "all proxy configs are deleted", func(t *testing.T) { + retry.Run(t, func(r *retry.R) { + suite.client.RequireResourceNotFound(r, cpcID) + }) + }) } -func (suite *controllerTestSuite) appendTenancyInfo(tenancy *pbresource.Tenancy) string { - return fmt.Sprintf("%s_Namespace_%s_Partition", tenancy.Namespace, tenancy.Partition) +func TestControllerSuite(t *testing.T) { + suite.Run(t, new(controllerTestSuite)) +} + +func (suite *controllerTestSuite) requireComputedProxyConfiguration(t resourcetest.T, id *pbresource.ID) { + cpcRes := suite.client.RequireResourceExists(t, id) + decCPC := resourcetest.MustDecode[*pbmesh.ComputedProxyConfiguration](t, cpcRes) + prototest.AssertDeepEqual(t, suite.expComputedProxyCfg, decCPC.Data) + resourcetest.RequireOwner(t, cpcRes, resource.ReplaceType(pbcatalog.WorkloadType, id), true) } diff --git a/internal/mesh/internal/controllers/register.go b/internal/mesh/internal/controllers/register.go index 99209d5ea4d53..fec92dba1b304 100644 --- a/internal/mesh/internal/controllers/register.go +++ b/internal/mesh/internal/controllers/register.go @@ -10,7 +10,6 @@ import ( "github.com/hashicorp/consul/internal/controller" "github.com/hashicorp/consul/internal/mesh/internal/controllers/explicitdestinations" "github.com/hashicorp/consul/internal/mesh/internal/controllers/explicitdestinations/mapper" - "github.com/hashicorp/consul/internal/mesh/internal/controllers/meshgateways" "github.com/hashicorp/consul/internal/mesh/internal/controllers/proxyconfiguration" "github.com/hashicorp/consul/internal/mesh/internal/controllers/routes" "github.com/hashicorp/consul/internal/mesh/internal/controllers/sidecarproxy" @@ -49,6 +48,4 @@ func Register(mgr *controller.Manager, deps Dependencies) { mgr.Register(proxyconfiguration.Controller(workloadselectionmapper.New[*pbmesh.ProxyConfiguration](pbmesh.ComputedProxyConfigurationType))) mgr.Register(explicitdestinations.Controller(mapper.New())) - - mgr.Register(meshgateways.Controller()) } diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/destination_multiport_test.go b/internal/mesh/internal/controllers/sidecarproxy/builder/destination_multiport_test.go index 5c9098d28ffd0..289c8c76548e1 100644 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/destination_multiport_test.go +++ b/internal/mesh/internal/controllers/sidecarproxy/builder/destination_multiport_test.go @@ -10,6 +10,8 @@ import ( "github.com/stretchr/testify/require" + pbmesh "github.com/hashicorp/consul/proto-public/pbmesh/v2beta1" + "github.com/hashicorp/consul/internal/mesh/internal/controllers/routes/routestest" "github.com/hashicorp/consul/internal/mesh/internal/types" "github.com/hashicorp/consul/internal/mesh/internal/types/intermediate" @@ -17,247 +19,243 @@ import ( "github.com/hashicorp/consul/internal/resource/resourcetest" "github.com/hashicorp/consul/internal/testing/golden" pbcatalog "github.com/hashicorp/consul/proto-public/pbcatalog/v2beta1" - pbmesh "github.com/hashicorp/consul/proto-public/pbmesh/v2beta1" "github.com/hashicorp/consul/proto-public/pbresource" ) func TestBuildMultiportImplicitDestinations(t *testing.T) { + // TODO(rb/v2): add a fetchertest package to construct implicit upstreams + // correctly from inputs. the following is far too manual and error prone + // to be an accurate representation of what implicit upstreams look like. const ( apiApp = "api-app" apiApp2 = "api-app2" trustDomain = "foo.consul" datacenter = "dc1" ) - - resourcetest.RunWithTenancies(func(tenancy *pbresource.Tenancy) { - // TODO(rb/v2): add a fetchertest package to construct implicit upstreams - // correctly from inputs. the following is far too manual and error prone - // to be an accurate representation of what implicit upstreams look like. - proxyCfg := &pbmesh.ComputedProxyConfiguration{ - DynamicConfig: &pbmesh.DynamicConfig{ - Mode: pbmesh.ProxyMode_PROXY_MODE_TRANSPARENT, - TransparentProxy: &pbmesh.TransparentProxy{ - OutboundListenerPort: 15001, - }, + proxyCfg := &pbmesh.ComputedProxyConfiguration{ + DynamicConfig: &pbmesh.DynamicConfig{ + Mode: pbmesh.ProxyMode_PROXY_MODE_TRANSPARENT, + TransparentProxy: &pbmesh.TransparentProxy{ + OutboundListenerPort: 15001, }, - } + }, + } - multiportServiceData := &pbcatalog.Service{ - Ports: []*pbcatalog.ServicePort{ - { - TargetPort: "tcp", - VirtualPort: 7070, - Protocol: pbcatalog.Protocol_PROTOCOL_TCP, - }, - { - TargetPort: "tcp2", - VirtualPort: 8081, - Protocol: pbcatalog.Protocol_PROTOCOL_TCP, - }, - { - TargetPort: "http", - VirtualPort: 8080, - Protocol: pbcatalog.Protocol_PROTOCOL_HTTP, - }, - { - TargetPort: "mesh", - VirtualPort: 20000, - Protocol: pbcatalog.Protocol_PROTOCOL_MESH, - }, + multiportServiceData := &pbcatalog.Service{ + Ports: []*pbcatalog.ServicePort{ + { + TargetPort: "tcp", + VirtualPort: 7070, + Protocol: pbcatalog.Protocol_PROTOCOL_TCP, }, - } + { + TargetPort: "tcp2", + VirtualPort: 8081, + Protocol: pbcatalog.Protocol_PROTOCOL_TCP, + }, + { + TargetPort: "http", + VirtualPort: 8080, + Protocol: pbcatalog.Protocol_PROTOCOL_HTTP, + }, + { + TargetPort: "mesh", + VirtualPort: 20000, + Protocol: pbcatalog.Protocol_PROTOCOL_MESH, + }, + }, + } - multiportEndpointsData := &pbcatalog.ServiceEndpoints{ - Endpoints: []*pbcatalog.Endpoint{ - { - Addresses: []*pbcatalog.WorkloadAddress{ - {Host: "10.0.0.1"}, - }, - Ports: map[string]*pbcatalog.WorkloadPort{ - "admin-port": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, - "api-port": {Port: 9090, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, - "mesh": {Port: 20000, Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, - }, + multiportEndpointsData := &pbcatalog.ServiceEndpoints{ + Endpoints: []*pbcatalog.Endpoint{ + { + Addresses: []*pbcatalog.WorkloadAddress{ + {Host: "10.0.0.1"}, + }, + Ports: map[string]*pbcatalog.WorkloadPort{ + "admin-port": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, + "api-port": {Port: 9090, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, + "mesh": {Port: 20000, Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, }, }, - } - apiAppService := resourcetest.Resource(pbcatalog.ServiceType, apiApp). - WithTenancy(tenancy). - WithData(t, multiportServiceData). - Build() + }, + } + apiAppService := resourcetest.Resource(pbcatalog.ServiceType, apiApp). + WithTenancy(resource.DefaultNamespacedTenancy()). + WithData(t, multiportServiceData). + Build() - apiApp2Service := resourcetest.Resource(pbcatalog.ServiceType, apiApp2). - WithTenancy(tenancy). - WithData(t, multiportServiceData). - Build() + apiApp2Service := resourcetest.Resource(pbcatalog.ServiceType, apiApp2). + WithTenancy(resource.DefaultNamespacedTenancy()). + WithData(t, multiportServiceData). + Build() - apiAppEndpoints := resourcetest.Resource(pbcatalog.ServiceEndpointsType, apiApp). - WithOwner(apiAppService.Id). - WithData(t, multiportEndpointsData). - WithTenancy(tenancy).Build() + apiAppEndpoints := resourcetest.Resource(pbcatalog.ServiceEndpointsType, apiApp). + WithOwner(apiAppService.Id). + WithData(t, multiportEndpointsData). + WithTenancy(resource.DefaultNamespacedTenancy()).Build() - apiApp2Endpoints := resourcetest.Resource(pbcatalog.ServiceEndpointsType, apiApp2). - WithOwner(apiApp2Service.Id). - WithData(t, multiportEndpointsData). - WithTenancy(tenancy).Build() + apiApp2Endpoints := resourcetest.Resource(pbcatalog.ServiceEndpointsType, apiApp2). + WithOwner(apiApp2Service.Id). + WithData(t, multiportEndpointsData). + WithTenancy(resource.DefaultNamespacedTenancy()).Build() - mwEndpointsData := &pbcatalog.ServiceEndpoints{ // variant on apiAppEndpoints - Endpoints: []*pbcatalog.Endpoint{ - { - Addresses: []*pbcatalog.WorkloadAddress{ - {Host: "10.0.0.1"}, - }, - Ports: map[string]*pbcatalog.WorkloadPort{ - "admin-port": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, - "api-port": {Port: 9090, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, - "mesh": {Port: 20000, Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, - }, + mwEndpointsData := &pbcatalog.ServiceEndpoints{ // variant on apiAppEndpoints + Endpoints: []*pbcatalog.Endpoint{ + { + Addresses: []*pbcatalog.WorkloadAddress{ + {Host: "10.0.0.1"}, }, - { - Addresses: []*pbcatalog.WorkloadAddress{ - {Host: "10.0.0.2"}, - }, - Ports: map[string]*pbcatalog.WorkloadPort{ - "admin-port": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, - "api-port": {Port: 9090, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, - "mesh": {Port: 20000, Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, - }, + Ports: map[string]*pbcatalog.WorkloadPort{ + "admin-port": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, + "api-port": {Port: 9090, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, + "mesh": {Port: 20000, Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, }, }, - } - mwEndpoints := resourcetest.Resource(pbcatalog.ServiceEndpointsType, apiApp). - WithOwner(apiAppService.Id). - WithData(t, mwEndpointsData). - WithTenancy(tenancy).Build() + { + Addresses: []*pbcatalog.WorkloadAddress{ + {Host: "10.0.0.2"}, + }, + Ports: map[string]*pbcatalog.WorkloadPort{ + "admin-port": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, + "api-port": {Port: 9090, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, + "mesh": {Port: 20000, Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, + }, + }, + }, + } + mwEndpoints := resourcetest.Resource(pbcatalog.ServiceEndpointsType, apiApp). + WithOwner(apiAppService.Id). + WithData(t, mwEndpointsData). + WithTenancy(resource.DefaultNamespacedTenancy()).Build() - apiAppIdentity := &pbresource.Reference{ - Name: fmt.Sprintf("%s-identity", apiApp), - Tenancy: apiAppEndpoints.Id.Tenancy, - } + apiAppIdentity := &pbresource.Reference{ + Name: fmt.Sprintf("%s-identity", apiApp), + Tenancy: apiAppEndpoints.Id.Tenancy, + } - apiApp2Identity := &pbresource.Reference{ - Name: fmt.Sprintf("%s-identity", apiApp2), - Tenancy: apiApp2Endpoints.Id.Tenancy, - } + apiApp2Identity := &pbresource.Reference{ + Name: fmt.Sprintf("%s-identity", apiApp2), + Tenancy: apiApp2Endpoints.Id.Tenancy, + } - apiAppComputedRoutesID := resource.ReplaceType(pbmesh.ComputedRoutesType, apiAppService.Id) - apiAppComputedRoutes := routestest.BuildComputedRoutes(t, apiAppComputedRoutesID, - resourcetest.MustDecode[*pbcatalog.Service](t, apiAppService), - ) - require.NotNil(t, apiAppComputedRoutes) + apiAppComputedRoutesID := resource.ReplaceType(pbmesh.ComputedRoutesType, apiAppService.Id) + apiAppComputedRoutes := routestest.BuildComputedRoutes(t, apiAppComputedRoutesID, + resourcetest.MustDecode[*pbcatalog.Service](t, apiAppService), + ) + require.NotNil(t, apiAppComputedRoutes) - apiApp2ComputedRoutesID := resource.ReplaceType(pbmesh.ComputedRoutesType, apiApp2Service.Id) - apiApp2ComputedRoutes := routestest.BuildComputedRoutes(t, apiApp2ComputedRoutesID, - resourcetest.MustDecode[*pbcatalog.Service](t, apiApp2Service), - ) - require.NotNil(t, apiApp2ComputedRoutes) + apiApp2ComputedRoutesID := resource.ReplaceType(pbmesh.ComputedRoutesType, apiApp2Service.Id) + apiApp2ComputedRoutes := routestest.BuildComputedRoutes(t, apiApp2ComputedRoutesID, + resourcetest.MustDecode[*pbcatalog.Service](t, apiApp2Service), + ) + require.NotNil(t, apiApp2ComputedRoutes) - newImplicitDestination := func( - svc *pbresource.Resource, - endpoints *pbresource.Resource, - computedRoutes *types.DecodedComputedRoutes, - identities []*pbresource.Reference, - virtualIPs []string, - ) []*intermediate.Destination { - svcDec := resourcetest.MustDecode[*pbcatalog.Service](t, svc) - seDec := resourcetest.MustDecode[*pbcatalog.ServiceEndpoints](t, endpoints) + newImplicitDestination := func( + svc *pbresource.Resource, + endpoints *pbresource.Resource, + computedRoutes *types.DecodedComputedRoutes, + identities []*pbresource.Reference, + virtualIPs []string, + ) []*intermediate.Destination { + svcDec := resourcetest.MustDecode[*pbcatalog.Service](t, svc) + seDec := resourcetest.MustDecode[*pbcatalog.ServiceEndpoints](t, endpoints) - var out []*intermediate.Destination - for _, port := range svcDec.Data.Ports { - portName := port.TargetPort - if port.Protocol == pbcatalog.Protocol_PROTOCOL_MESH { - continue - } + var out []*intermediate.Destination + for _, port := range svcDec.Data.Ports { + portName := port.TargetPort + if port.Protocol == pbcatalog.Protocol_PROTOCOL_MESH { + continue + } - dest := &intermediate.Destination{ - Service: svcDec, - ComputedPortRoutes: routestest.MutateTargets(t, computedRoutes.Data, portName, func(t *testing.T, details *pbmesh.BackendTargetDetails) { - switch { - case resource.ReferenceOrIDMatch(svc.Id, details.BackendRef.Ref) && details.BackendRef.Port == portName: - details.ServiceEndpointsId = endpoints.Id - details.ServiceEndpoints = seDec.Data - details.IdentityRefs = identities - } - }), - VirtualIPs: virtualIPs, - } - out = append(out, dest) + dest := &intermediate.Destination{ + Service: svcDec, + ComputedPortRoutes: routestest.MutateTargets(t, computedRoutes.Data, portName, func(t *testing.T, details *pbmesh.BackendTargetDetails) { + switch { + case resource.ReferenceOrIDMatch(svc.Id, details.BackendRef.Ref) && details.BackendRef.Port == portName: + details.ServiceEndpointsId = endpoints.Id + details.ServiceEndpoints = seDec.Data + details.IdentityRefs = identities + } + }), + VirtualIPs: virtualIPs, } - return out + out = append(out, dest) } + return out + } - apiAppDestinations := newImplicitDestination( - apiAppService, - apiAppEndpoints, - apiAppComputedRoutes, - []*pbresource.Reference{apiAppIdentity}, - []string{"1.1.1.1"}, - ) - - apiApp2Destinations := newImplicitDestination( - apiApp2Service, - apiApp2Endpoints, - apiApp2ComputedRoutes, - []*pbresource.Reference{apiApp2Identity}, - []string{"2.2.2.2", "3.3.3.3"}, - ) + apiAppDestinations := newImplicitDestination( + apiAppService, + apiAppEndpoints, + apiAppComputedRoutes, + []*pbresource.Reference{apiAppIdentity}, + []string{"1.1.1.1"}, + ) - mwDestinations := newImplicitDestination( - apiAppService, - mwEndpoints, - apiAppComputedRoutes, - []*pbresource.Reference{apiAppIdentity}, - []string{"1.1.1.1"}, - ) + apiApp2Destinations := newImplicitDestination( + apiApp2Service, + apiApp2Endpoints, + apiApp2ComputedRoutes, + []*pbresource.Reference{apiApp2Identity}, + []string{"2.2.2.2", "3.3.3.3"}, + ) - twoImplicitDestinations := append( - append([]*intermediate.Destination{}, apiAppDestinations...), - apiApp2Destinations..., - ) + mwDestinations := newImplicitDestination( + apiAppService, + mwEndpoints, + apiAppComputedRoutes, + []*pbresource.Reference{apiAppIdentity}, + []string{"1.1.1.1"}, + ) - cases := map[string]struct { - getDestinations func() []*intermediate.Destination - }{ - // Most basic test that multiport configuration works - "destination/multiport-l4-and-l7-single-implicit-destination-tproxy": { - getDestinations: func() []*intermediate.Destination { return apiAppDestinations }, - }, - // Test shows that with multiple workloads for a service exposing the same ports, the routers - // and clusters do not get duplicated. - "destination/multiport-l4-and-l7-single-implicit-destination-with-multiple-workloads-tproxy": { - getDestinations: func() []*intermediate.Destination { return mwDestinations }, - }, - // Test shows that with multiple workloads for a service exposing the same ports, the routers - // and clusters do not get duplicated. - "destination/multiport-l4-and-l7-multiple-implicit-destinations-tproxy": { - getDestinations: func() []*intermediate.Destination { return twoImplicitDestinations }, - }, - } + twoImplicitDestinations := append( + append([]*intermediate.Destination{}, apiAppDestinations...), + apiApp2Destinations..., + ) - for name, c := range cases { - t.Run(resourcetest.AppendTenancyInfoSubtest(t.Name(), name, tenancy), func(t *testing.T) { - proxyTmpl := New(testProxyStateTemplateID(tenancy), testIdentityRef(tenancy), trustDomain, datacenter, false, proxyCfg). - BuildDestinations(c.getDestinations()). - Build() + cases := map[string]struct { + getDestinations func() []*intermediate.Destination + }{ + // Most basic test that multiport configuration works + "destination/multiport-l4-and-l7-single-implicit-destination-tproxy": { + getDestinations: func() []*intermediate.Destination { return apiAppDestinations }, + }, + // Test shows that with multiple workloads for a service exposing the same ports, the routers + // and clusters do not get duplicated. + "destination/multiport-l4-and-l7-single-implicit-destination-with-multiple-workloads-tproxy": { + getDestinations: func() []*intermediate.Destination { return mwDestinations }, + }, + // Test shows that with multiple workloads for a service exposing the same ports, the routers + // and clusters do not get duplicated. + "destination/multiport-l4-and-l7-multiple-implicit-destinations-tproxy": { + getDestinations: func() []*intermediate.Destination { return twoImplicitDestinations }, + }, + } - // sort routers because of test flakes where order was flip flopping. - actualRouters := proxyTmpl.ProxyState.Listeners[0].Routers - sort.Slice(actualRouters, func(i, j int) bool { - return actualRouters[i].String() < actualRouters[j].String() - }) + for name, c := range cases { + t.Run(name, func(t *testing.T) { + proxyTmpl := New(testProxyStateTemplateID(), testIdentityRef(), trustDomain, datacenter, false, proxyCfg). + BuildDestinations(c.getDestinations()). + Build() - actual := protoToJSON(t, proxyTmpl) - expected := JSONToProxyTemplate(t, golden.GetBytes(t, actual, name+"-"+tenancy.Partition+"-"+tenancy.Namespace+".golden")) + // sort routers because of test flakes where order was flip flopping. + actualRouters := proxyTmpl.ProxyState.Listeners[0].Routers + sort.Slice(actualRouters, func(i, j int) bool { + return actualRouters[i].String() < actualRouters[j].String() + }) - // sort routers on listener from golden file - expectedRouters := expected.ProxyState.Listeners[0].Routers - sort.Slice(expectedRouters, func(i, j int) bool { - return expectedRouters[i].String() < expectedRouters[j].String() - }) + actual := protoToJSON(t, proxyTmpl) + expected := JSONToProxyTemplate(t, golden.GetBytes(t, actual, name+".golden")) - // convert back to json after sorting so that test output does not contain extraneous fields. - require.Equal(t, protoToJSON(t, expected), protoToJSON(t, proxyTmpl)) + // sort routers on listener from golden file + expectedRouters := expected.ProxyState.Listeners[0].Routers + sort.Slice(expectedRouters, func(i, j int) bool { + return expectedRouters[i].String() < expectedRouters[j].String() }) - } - }, t) + + // convert back to json after sorting so that test output does not contain extraneous fields. + require.Equal(t, protoToJSON(t, expected), protoToJSON(t, proxyTmpl)) + }) + } } diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/destinations.go b/internal/mesh/internal/controllers/sidecarproxy/builder/destinations.go index c078c3273e439..aea4360b83108 100644 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/destinations.go +++ b/internal/mesh/internal/controllers/sidecarproxy/builder/destinations.go @@ -248,7 +248,7 @@ func (b *Builder) buildDestination( panic(fmt.Sprintf("it should not be possible to have a tcp protocol here: %v", effectiveProtocol)) } - rb := lb.addL7Router(routeName, statPrefix, effectiveProtocol) + rb := lb.addL7Router(routeName, "", effectiveProtocol) if destination.Explicit == nil { rb.addIPAndPortMatch(destination.VirtualIPs, virtualPortNumber) } @@ -290,6 +290,7 @@ func (b *Builder) buildDestination( clusterName := fmt.Sprintf("%s.%s", portName, sni) egName := "" + if details.FailoverConfig != nil { egName = fmt.Sprintf("%s%d~%s", xdscommon.FailoverClusterNamePrefix, 0, clusterName) } @@ -372,7 +373,7 @@ func (b *ListenerBuilder) addL4RouterForDirect(clusterName, statPrefix string) * router := &pbproxystate.Router{} if statPrefix == "" { - statPrefix = fmt.Sprintf("upstream.%s", clusterName) + statPrefix = "upstream." } router.Destination = &pbproxystate.Router_L4{ diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/destinations_test.go b/internal/mesh/internal/controllers/sidecarproxy/builder/destinations_test.go index a6bfe7e305dca..c6b5a76592549 100644 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/destinations_test.go +++ b/internal/mesh/internal/controllers/sidecarproxy/builder/destinations_test.go @@ -71,167 +71,97 @@ func TestBuildExplicitDestinations(t *testing.T) { types.Register(registry) catalog.RegisterTypes(registry) - resourcetest.RunWithTenancies(func(tenancy *pbresource.Tenancy) { - api1Service := resourcetest.Resource(pbcatalog.ServiceType, "api-1"). - WithTenancy(tenancy). - WithData(t, serviceData). - Build() - - api2Service := resourcetest.Resource(pbcatalog.ServiceType, "api-2"). - WithTenancy(tenancy). - WithData(t, serviceData). - Build() - - api3Service := resourcetest.Resource(pbcatalog.ServiceType, "api-3"). - WithTenancy(tenancy). - WithData(t, serviceData). - Build() - - backup1Service := resourcetest.Resource(pbcatalog.ServiceType, "backup-1"). - WithTenancy(tenancy). - WithData(t, serviceData). - Build() - - for _, res := range []*pbresource.Resource{ - api1Service, api2Service, api3Service, backup1Service, - } { - resourcetest.ValidateAndNormalize(t, registry, res) - } - - api1Endpoints := resourcetest.Resource(pbcatalog.ServiceEndpointsType, "api-1"). - WithTenancy(tenancy). - WithData(t, endpointsData). - Build() - - api2Endpoints := resourcetest.Resource(pbcatalog.ServiceEndpointsType, "api-2"). - WithTenancy(tenancy). - WithData(t, endpointsData). - Build() - - backup1Endpoints := resourcetest.Resource(pbcatalog.ServiceEndpointsType, "backup-1"). - WithTenancy(tenancy). - WithData(t, endpointsData). - Build() - - for _, res := range []*pbresource.Resource{ - api1Endpoints, api2Endpoints, backup1Endpoints, - } { - resourcetest.ValidateAndNormalize(t, registry, res) - } - - api1Identity := &pbresource.Reference{ - Name: "api1-identity", - Tenancy: api1Endpoints.Id.Tenancy, - } - - api2Identity := &pbresource.Reference{ - Name: "api2-identity", - Tenancy: api2Endpoints.Id.Tenancy, - } - - backup1Identity := &pbresource.Reference{ - Name: "backup1-identity", - Tenancy: backup1Endpoints.Id.Tenancy, - } - - api1DestPolicy := resourcetest.Resource(pbmesh.DestinationPolicyType, api1Service.Id.Name). - WithTenancy(api1Service.Id.GetTenancy()). - WithData(t, &pbmesh.DestinationPolicy{ - PortConfigs: map[string]*pbmesh.DestinationConfig{ - "http": { - ConnectTimeout: durationpb.New(55 * time.Second), - RequestTimeout: durationpb.New(77 * time.Second), - // LoadBalancer *LoadBalancer `protobuf:"bytes,3,opt,name=load_balancer,json=loadBalancer,proto3" json:"load_balancer,omitempty"` - }, + api1Service := resourcetest.Resource(pbcatalog.ServiceType, "api-1"). + WithTenancy(resource.DefaultNamespacedTenancy()). + WithData(t, serviceData). + Build() + + api2Service := resourcetest.Resource(pbcatalog.ServiceType, "api-2"). + WithTenancy(resource.DefaultNamespacedTenancy()). + WithData(t, serviceData). + Build() + + api3Service := resourcetest.Resource(pbcatalog.ServiceType, "api-3"). + WithTenancy(resource.DefaultNamespacedTenancy()). + WithData(t, serviceData). + Build() + + backup1Service := resourcetest.Resource(pbcatalog.ServiceType, "backup-1"). + WithTenancy(resource.DefaultNamespacedTenancy()). + WithData(t, serviceData). + Build() + + for _, res := range []*pbresource.Resource{ + api1Service, api2Service, api3Service, backup1Service, + } { + resourcetest.ValidateAndNormalize(t, registry, res) + } + + api1Endpoints := resourcetest.Resource(pbcatalog.ServiceEndpointsType, "api-1"). + WithTenancy(resource.DefaultNamespacedTenancy()). + WithData(t, endpointsData). + Build() + + api2Endpoints := resourcetest.Resource(pbcatalog.ServiceEndpointsType, "api-2"). + WithTenancy(resource.DefaultNamespacedTenancy()). + WithData(t, endpointsData). + Build() + + backup1Endpoints := resourcetest.Resource(pbcatalog.ServiceEndpointsType, "backup-1"). + WithTenancy(resource.DefaultNamespacedTenancy()). + WithData(t, endpointsData). + Build() + + for _, res := range []*pbresource.Resource{ + api1Endpoints, api2Endpoints, backup1Endpoints, + } { + resourcetest.ValidateAndNormalize(t, registry, res) + } + + api1Identity := &pbresource.Reference{ + Name: "api1-identity", + Tenancy: api1Endpoints.Id.Tenancy, + } + + api2Identity := &pbresource.Reference{ + Name: "api2-identity", + Tenancy: api2Endpoints.Id.Tenancy, + } + + backup1Identity := &pbresource.Reference{ + Name: "backup1-identity", + Tenancy: backup1Endpoints.Id.Tenancy, + } + + api1DestPolicy := resourcetest.Resource(pbmesh.DestinationPolicyType, api1Service.Id.Name). + WithTenancy(api1Service.Id.GetTenancy()). + WithData(t, &pbmesh.DestinationPolicy{ + PortConfigs: map[string]*pbmesh.DestinationConfig{ + "http": { + ConnectTimeout: durationpb.New(55 * time.Second), + RequestTimeout: durationpb.New(77 * time.Second), + // LoadBalancer *LoadBalancer `protobuf:"bytes,3,opt,name=load_balancer,json=loadBalancer,proto3" json:"load_balancer,omitempty"` }, - }). - Build() - - api1HTTPRoute := resourcetest.Resource(pbmesh.HTTPRouteType, "api-1-http-route"). - WithTenancy(tenancy). - WithData(t, &pbmesh.HTTPRoute{ - ParentRefs: []*pbmesh.ParentReference{{ - Ref: resource.Reference(api1Service.Id, ""), - Port: "http", - }}, - Rules: []*pbmesh.HTTPRouteRule{ - { - Matches: []*pbmesh.HTTPRouteMatch{{ - Path: &pbmesh.HTTPPathMatch{ - Type: pbmesh.PathMatchType_PATH_MATCH_TYPE_PREFIX, - Value: "/split", - }, - }}, - BackendRefs: []*pbmesh.HTTPBackendRef{ - { - BackendRef: &pbmesh.BackendReference{ - Ref: resource.Reference(api2Service.Id, ""), - }, - Weight: 60, - }, - { - BackendRef: &pbmesh.BackendReference{ - Ref: resource.Reference(api1Service.Id, ""), - }, - Weight: 40, - }, - { - BackendRef: &pbmesh.BackendReference{ - Ref: resource.Reference(api3Service.Id, ""), - }, - Weight: 10, - }, - }, - }, - { - Matches: []*pbmesh.HTTPRouteMatch{{ - Path: &pbmesh.HTTPPathMatch{ - Type: pbmesh.PathMatchType_PATH_MATCH_TYPE_PREFIX, - Value: "/", - }, - }}, - BackendRefs: []*pbmesh.HTTPBackendRef{{ - BackendRef: &pbmesh.BackendReference{ - Ref: resource.Reference(api1Service.Id, ""), - }, - }}, - Timeouts: &pbmesh.HTTPRouteTimeouts{ - Request: durationpb.New(606 * time.Second), // differnet than the 77s - }, - Retries: &pbmesh.HTTPRouteRetries{ - Number: wrapperspb.UInt32(4), - OnConnectFailure: true, + }, + }). + Build() + + api1HTTPRoute := resourcetest.Resource(pbmesh.HTTPRouteType, "api-1-http-route"). + WithTenancy(resource.DefaultNamespacedTenancy()). + WithData(t, &pbmesh.HTTPRoute{ + ParentRefs: []*pbmesh.ParentReference{{ + Ref: resource.Reference(api1Service.Id, ""), + Port: "http", + }}, + Rules: []*pbmesh.HTTPRouteRule{ + { + Matches: []*pbmesh.HTTPRouteMatch{{ + Path: &pbmesh.HTTPPathMatch{ + Type: pbmesh.PathMatchType_PATH_MATCH_TYPE_PREFIX, + Value: "/split", }, - }, - }, - }). - Build() - resourcetest.ValidateAndNormalize(t, registry, api1HTTPRoute) - - api1FailoverPolicy := resourcetest.Resource(pbcatalog.FailoverPolicyType, "api-1"). - WithTenancy(tenancy). - WithData(t, &pbcatalog.FailoverPolicy{ - PortConfigs: map[string]*pbcatalog.FailoverConfig{ - "http": { - Destinations: []*pbcatalog.FailoverDestination{{ - Ref: resource.Reference(backup1Service.Id, ""), - Port: "http", - }}, - }, - }, - }). - Build() - resourcetest.ValidateAndNormalize(t, registry, api1FailoverPolicy) - - api1TCPRoute := resourcetest.Resource(pbmesh.TCPRouteType, "api-1-tcp-route"). - WithTenancy(tenancy). - WithData(t, &pbmesh.TCPRoute{ - ParentRefs: []*pbmesh.ParentReference{{ - Ref: resource.Reference(api1Service.Id, ""), - Port: "tcp", - }}, - Rules: []*pbmesh.TCPRouteRule{{ - BackendRefs: []*pbmesh.TCPBackendRef{ + }}, + BackendRefs: []*pbmesh.HTTPBackendRef{ { BackendRef: &pbmesh.BackendReference{ Ref: resource.Reference(api2Service.Id, ""), @@ -251,336 +181,401 @@ func TestBuildExplicitDestinations(t *testing.T) { Weight: 10, }, }, - }}, - }). - Build() - resourcetest.ValidateAndNormalize(t, registry, api1TCPRoute) - - api1TCP2Route := resourcetest.Resource(pbmesh.TCPRouteType, "api-1-tcp2-route"). - WithTenancy(tenancy). - WithData(t, &pbmesh.TCPRoute{ - ParentRefs: []*pbmesh.ParentReference{{ - Ref: resource.Reference(api1Service.Id, ""), - Port: "tcp2", - }}, - Rules: []*pbmesh.TCPRouteRule{{ - BackendRefs: []*pbmesh.TCPBackendRef{ - { - BackendRef: &pbmesh.BackendReference{ - Ref: resource.Reference(api2Service.Id, ""), - }, - Weight: 60, - }, - { - BackendRef: &pbmesh.BackendReference{ - Ref: resource.Reference(api1Service.Id, ""), - }, - Weight: 40, + }, + { + Matches: []*pbmesh.HTTPRouteMatch{{ + Path: &pbmesh.HTTPPathMatch{ + Type: pbmesh.PathMatchType_PATH_MATCH_TYPE_PREFIX, + Value: "/", }, - { - BackendRef: &pbmesh.BackendReference{ - Ref: resource.Reference(api3Service.Id, ""), - }, - Weight: 10, + }}, + BackendRefs: []*pbmesh.HTTPBackendRef{{ + BackendRef: &pbmesh.BackendReference{ + Ref: resource.Reference(api1Service.Id, ""), }, + }}, + Timeouts: &pbmesh.HTTPRouteTimeouts{ + Request: durationpb.New(606 * time.Second), // differnet than the 77s + }, + Retries: &pbmesh.HTTPRouteRetries{ + Number: wrapperspb.UInt32(4), + OnConnectFailure: true, }, - }}, - }). - Build() - - api1ComputedRoutesID := resource.ReplaceType(pbmesh.ComputedRoutesType, api1Service.Id) - api1ComputedRoutes := routestest.BuildComputedRoutes(t, api1ComputedRoutesID, - resourcetest.MustDecode[*pbcatalog.Service](t, api1Service), - resourcetest.MustDecode[*pbcatalog.Service](t, api2Service), - resourcetest.MustDecode[*pbcatalog.Service](t, backup1Service), - // notably we do NOT include api3Service here so we trigger a null route to be generated - resourcetest.MustDecode[*pbmesh.DestinationPolicy](t, api1DestPolicy), - resourcetest.MustDecode[*pbmesh.HTTPRoute](t, api1HTTPRoute), - resourcetest.MustDecode[*pbmesh.TCPRoute](t, api1TCPRoute), - resourcetest.MustDecode[*pbcatalog.FailoverPolicy](t, api1FailoverPolicy), - resourcetest.MustDecode[*pbmesh.TCPRoute](t, api1TCP2Route), - ) - require.NotNil(t, api1ComputedRoutes) - - api2ComputedRoutesID := resource.ReplaceType(pbmesh.ComputedRoutesType, api2Service.Id) - api2ComputedRoutes := routestest.BuildComputedRoutes(t, api2ComputedRoutesID, - resourcetest.MustDecode[*pbcatalog.Service](t, api2Service), - ) - require.NotNil(t, api2ComputedRoutes) - - destinationIpPort := &intermediate.Destination{ - Explicit: &pbmesh.Destination{ - DestinationRef: resource.Reference(api1Endpoints.Id, ""), - DestinationPort: "tcp", - Datacenter: "dc1", - ListenAddr: &pbmesh.Destination_IpPort{ - IpPort: &pbmesh.IPPortAddress{Ip: "1.1.1.1", Port: 1234}, - }, - }, - Service: resourcetest.MustDecode[*pbcatalog.Service](t, api1Service), - ComputedPortRoutes: routestest.MutateTargets(t, api1ComputedRoutes.Data, "tcp", func(t *testing.T, details *pbmesh.BackendTargetDetails) { - switch { - case resource.ReferenceOrIDMatch(api1Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "tcp": - details.ServiceEndpointsId = api1Endpoints.Id - details.ServiceEndpoints = endpointsData - details.IdentityRefs = []*pbresource.Reference{api1Identity} - case resource.ReferenceOrIDMatch(api2Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "tcp": - details.ServiceEndpointsId = api2Endpoints.Id - details.ServiceEndpoints = endpointsData - details.IdentityRefs = []*pbresource.Reference{api2Identity} - } - }), - } - - destinationIpPort2 := &intermediate.Destination{ - Explicit: &pbmesh.Destination{ - DestinationRef: resource.Reference(api1Endpoints.Id, ""), - DestinationPort: "tcp2", - Datacenter: "dc1", - ListenAddr: &pbmesh.Destination_IpPort{ - IpPort: &pbmesh.IPPortAddress{Ip: "1.1.1.1", Port: 2345}, }, }, - Service: resourcetest.MustDecode[*pbcatalog.Service](t, api1Service), - ComputedPortRoutes: routestest.MutateTargets(t, api1ComputedRoutes.Data, "tcp2", func(t *testing.T, details *pbmesh.BackendTargetDetails) { - switch { - case resource.ReferenceOrIDMatch(api1Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "tcp2": - details.ServiceEndpointsId = api1Endpoints.Id - details.ServiceEndpoints = endpointsData - details.IdentityRefs = []*pbresource.Reference{api1Identity} - case resource.ReferenceOrIDMatch(api2Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "tcp2": - details.ServiceEndpointsId = api2Endpoints.Id - details.ServiceEndpoints = endpointsData - details.IdentityRefs = []*pbresource.Reference{api2Identity} - } - }), - } - - destinationUnix := &intermediate.Destination{ - Explicit: &pbmesh.Destination{ - DestinationRef: resource.Reference(api2Endpoints.Id, ""), - DestinationPort: "tcp", - Datacenter: "dc1", - ListenAddr: &pbmesh.Destination_Unix{ - Unix: &pbmesh.UnixSocketAddress{Path: "/path/to/socket", Mode: "0666"}, + }). + Build() + resourcetest.ValidateAndNormalize(t, registry, api1HTTPRoute) + + api1FailoverPolicy := resourcetest.Resource(pbcatalog.FailoverPolicyType, "api-1"). + WithTenancy(resource.DefaultNamespacedTenancy()). + WithData(t, &pbcatalog.FailoverPolicy{ + PortConfigs: map[string]*pbcatalog.FailoverConfig{ + "http": { + Destinations: []*pbcatalog.FailoverDestination{{ + Ref: resource.Reference(backup1Service.Id, ""), + Port: "http", + }}, }, }, - Service: resourcetest.MustDecode[*pbcatalog.Service](t, api2Service), - ComputedPortRoutes: routestest.MutateTargets(t, api2ComputedRoutes.Data, "tcp", func(t *testing.T, details *pbmesh.BackendTargetDetails) { - switch { - case resource.ReferenceOrIDMatch(api2Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "tcp": - details.ServiceEndpointsId = api2Endpoints.Id - details.ServiceEndpoints = endpointsData - details.IdentityRefs = []*pbresource.Reference{api2Identity} - } - }), - } - - destinationUnix2 := &intermediate.Destination{ - Explicit: &pbmesh.Destination{ - DestinationRef: resource.Reference(api2Endpoints.Id, ""), - DestinationPort: "tcp2", - Datacenter: "dc1", - ListenAddr: &pbmesh.Destination_Unix{ - Unix: &pbmesh.UnixSocketAddress{Path: "/path/to/socket", Mode: "0666"}, + }). + Build() + resourcetest.ValidateAndNormalize(t, registry, api1FailoverPolicy) + + api1TCPRoute := resourcetest.Resource(pbmesh.TCPRouteType, "api-1-tcp-route"). + WithTenancy(resource.DefaultNamespacedTenancy()). + WithData(t, &pbmesh.TCPRoute{ + ParentRefs: []*pbmesh.ParentReference{{ + Ref: resource.Reference(api1Service.Id, ""), + Port: "tcp", + }}, + Rules: []*pbmesh.TCPRouteRule{{ + BackendRefs: []*pbmesh.TCPBackendRef{ + { + BackendRef: &pbmesh.BackendReference{ + Ref: resource.Reference(api2Service.Id, ""), + }, + Weight: 60, + }, + { + BackendRef: &pbmesh.BackendReference{ + Ref: resource.Reference(api1Service.Id, ""), + }, + Weight: 40, + }, + { + BackendRef: &pbmesh.BackendReference{ + Ref: resource.Reference(api3Service.Id, ""), + }, + Weight: 10, + }, }, - }, - Service: resourcetest.MustDecode[*pbcatalog.Service](t, api2Service), - ComputedPortRoutes: routestest.MutateTargets(t, api2ComputedRoutes.Data, "tcp2", func(t *testing.T, details *pbmesh.BackendTargetDetails) { - switch { - case resource.ReferenceOrIDMatch(api2Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "tcp2": - details.ServiceEndpointsId = api2Endpoints.Id - details.ServiceEndpoints = endpointsData - details.IdentityRefs = []*pbresource.Reference{api2Identity} - } - }), - } - destinationIpPortHTTP := &intermediate.Destination{ - Explicit: &pbmesh.Destination{ - DestinationRef: resource.Reference(api1Endpoints.Id, ""), - DestinationPort: "http", - Datacenter: "dc1", - ListenAddr: &pbmesh.Destination_IpPort{ - IpPort: &pbmesh.IPPortAddress{Ip: "1.1.1.1", Port: 1234}, + }}, + }). + Build() + resourcetest.ValidateAndNormalize(t, registry, api1TCPRoute) + + api1TCP2Route := resourcetest.Resource(pbmesh.TCPRouteType, "api-1-tcp2-route"). + WithTenancy(resource.DefaultNamespacedTenancy()). + WithData(t, &pbmesh.TCPRoute{ + ParentRefs: []*pbmesh.ParentReference{{ + Ref: resource.Reference(api1Service.Id, ""), + Port: "tcp2", + }}, + Rules: []*pbmesh.TCPRouteRule{{ + BackendRefs: []*pbmesh.TCPBackendRef{ + { + BackendRef: &pbmesh.BackendReference{ + Ref: resource.Reference(api2Service.Id, ""), + }, + Weight: 60, + }, + { + BackendRef: &pbmesh.BackendReference{ + Ref: resource.Reference(api1Service.Id, ""), + }, + Weight: 40, + }, + { + BackendRef: &pbmesh.BackendReference{ + Ref: resource.Reference(api3Service.Id, ""), + }, + Weight: 10, + }, }, + }}, + }). + Build() + + api1ComputedRoutesID := resource.ReplaceType(pbmesh.ComputedRoutesType, api1Service.Id) + api1ComputedRoutes := routestest.BuildComputedRoutes(t, api1ComputedRoutesID, + resourcetest.MustDecode[*pbcatalog.Service](t, api1Service), + resourcetest.MustDecode[*pbcatalog.Service](t, api2Service), + resourcetest.MustDecode[*pbcatalog.Service](t, backup1Service), + // notably we do NOT include api3Service here so we trigger a null route to be generated + resourcetest.MustDecode[*pbmesh.DestinationPolicy](t, api1DestPolicy), + resourcetest.MustDecode[*pbmesh.HTTPRoute](t, api1HTTPRoute), + resourcetest.MustDecode[*pbmesh.TCPRoute](t, api1TCPRoute), + resourcetest.MustDecode[*pbcatalog.FailoverPolicy](t, api1FailoverPolicy), + resourcetest.MustDecode[*pbmesh.TCPRoute](t, api1TCP2Route), + ) + require.NotNil(t, api1ComputedRoutes) + + api2ComputedRoutesID := resource.ReplaceType(pbmesh.ComputedRoutesType, api2Service.Id) + api2ComputedRoutes := routestest.BuildComputedRoutes(t, api2ComputedRoutesID, + resourcetest.MustDecode[*pbcatalog.Service](t, api2Service), + ) + require.NotNil(t, api2ComputedRoutes) + + destinationIpPort := &intermediate.Destination{ + Explicit: &pbmesh.Destination{ + DestinationRef: resource.Reference(api1Endpoints.Id, ""), + DestinationPort: "tcp", + Datacenter: "dc1", + ListenAddr: &pbmesh.Destination_IpPort{ + IpPort: &pbmesh.IPPortAddress{Ip: "1.1.1.1", Port: 1234}, }, - Service: resourcetest.MustDecode[*pbcatalog.Service](t, api1Service), - ComputedPortRoutes: routestest.MutateTargets(t, api1ComputedRoutes.Data, "http", func(t *testing.T, details *pbmesh.BackendTargetDetails) { - switch { - case resource.ReferenceOrIDMatch(api1Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "http": - details.ServiceEndpointsId = api1Endpoints.Id - details.ServiceEndpoints = endpointsData - details.IdentityRefs = []*pbresource.Reference{api1Identity} - case resource.ReferenceOrIDMatch(api2Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "http": - details.ServiceEndpointsId = api2Endpoints.Id - details.ServiceEndpoints = endpointsData - details.IdentityRefs = []*pbresource.Reference{api2Identity} - case resource.ReferenceOrIDMatch(backup1Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "http": - details.ServiceEndpointsId = backup1Endpoints.Id - details.ServiceEndpoints = endpointsData - details.IdentityRefs = []*pbresource.Reference{backup1Identity} - } - }), - } - _ = backup1Identity - - cases := map[string]struct { - destinations []*intermediate.Destination - }{ - "destination/l4-single-destination-ip-port-bind-address": { - destinations: []*intermediate.Destination{destinationIpPort}, + }, + Service: resourcetest.MustDecode[*pbcatalog.Service](t, api1Service), + ComputedPortRoutes: routestest.MutateTargets(t, api1ComputedRoutes.Data, "tcp", func(t *testing.T, details *pbmesh.BackendTargetDetails) { + switch { + case resource.ReferenceOrIDMatch(api1Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "tcp": + details.ServiceEndpointsId = api1Endpoints.Id + details.ServiceEndpoints = endpointsData + details.IdentityRefs = []*pbresource.Reference{api1Identity} + case resource.ReferenceOrIDMatch(api2Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "tcp": + details.ServiceEndpointsId = api2Endpoints.Id + details.ServiceEndpoints = endpointsData + details.IdentityRefs = []*pbresource.Reference{api2Identity} + } + }), + } + + destinationIpPort2 := &intermediate.Destination{ + Explicit: &pbmesh.Destination{ + DestinationRef: resource.Reference(api1Endpoints.Id, ""), + DestinationPort: "tcp2", + Datacenter: "dc1", + ListenAddr: &pbmesh.Destination_IpPort{ + IpPort: &pbmesh.IPPortAddress{Ip: "1.1.1.1", Port: 2345}, }, - "destination/l4-single-destination-unix-socket-bind-address": { - destinations: []*intermediate.Destination{destinationUnix}, + }, + Service: resourcetest.MustDecode[*pbcatalog.Service](t, api1Service), + ComputedPortRoutes: routestest.MutateTargets(t, api1ComputedRoutes.Data, "tcp2", func(t *testing.T, details *pbmesh.BackendTargetDetails) { + switch { + case resource.ReferenceOrIDMatch(api1Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "tcp2": + details.ServiceEndpointsId = api1Endpoints.Id + details.ServiceEndpoints = endpointsData + details.IdentityRefs = []*pbresource.Reference{api1Identity} + case resource.ReferenceOrIDMatch(api2Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "tcp2": + details.ServiceEndpointsId = api2Endpoints.Id + details.ServiceEndpoints = endpointsData + details.IdentityRefs = []*pbresource.Reference{api2Identity} + } + }), + } + + destinationUnix := &intermediate.Destination{ + Explicit: &pbmesh.Destination{ + DestinationRef: resource.Reference(api2Endpoints.Id, ""), + DestinationPort: "tcp", + Datacenter: "dc1", + ListenAddr: &pbmesh.Destination_Unix{ + Unix: &pbmesh.UnixSocketAddress{Path: "/path/to/socket", Mode: "0666"}, }, - "destination/l4-multi-destination": { - destinations: []*intermediate.Destination{destinationIpPort, destinationUnix, destinationIpPort2, destinationUnix2}, + }, + Service: resourcetest.MustDecode[*pbcatalog.Service](t, api2Service), + ComputedPortRoutes: routestest.MutateTargets(t, api2ComputedRoutes.Data, "tcp", func(t *testing.T, details *pbmesh.BackendTargetDetails) { + switch { + case resource.ReferenceOrIDMatch(api2Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "tcp": + details.ServiceEndpointsId = api2Endpoints.Id + details.ServiceEndpoints = endpointsData + details.IdentityRefs = []*pbresource.Reference{api2Identity} + } + }), + } + + destinationUnix2 := &intermediate.Destination{ + Explicit: &pbmesh.Destination{ + DestinationRef: resource.Reference(api2Endpoints.Id, ""), + DestinationPort: "tcp2", + Datacenter: "dc1", + ListenAddr: &pbmesh.Destination_Unix{ + Unix: &pbmesh.UnixSocketAddress{Path: "/path/to/socket", Mode: "0666"}, }, - "destination/mixed-multi-destination": { - destinations: []*intermediate.Destination{destinationIpPort, destinationUnix, destinationIpPortHTTP}, + }, + Service: resourcetest.MustDecode[*pbcatalog.Service](t, api2Service), + ComputedPortRoutes: routestest.MutateTargets(t, api2ComputedRoutes.Data, "tcp2", func(t *testing.T, details *pbmesh.BackendTargetDetails) { + switch { + case resource.ReferenceOrIDMatch(api2Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "tcp2": + details.ServiceEndpointsId = api2Endpoints.Id + details.ServiceEndpoints = endpointsData + details.IdentityRefs = []*pbresource.Reference{api2Identity} + } + }), + } + destinationIpPortHTTP := &intermediate.Destination{ + Explicit: &pbmesh.Destination{ + DestinationRef: resource.Reference(api1Endpoints.Id, ""), + DestinationPort: "http", + Datacenter: "dc1", + ListenAddr: &pbmesh.Destination_IpPort{ + IpPort: &pbmesh.IPPortAddress{Ip: "1.1.1.1", Port: 1234}, }, - } + }, + Service: resourcetest.MustDecode[*pbcatalog.Service](t, api1Service), + ComputedPortRoutes: routestest.MutateTargets(t, api1ComputedRoutes.Data, "http", func(t *testing.T, details *pbmesh.BackendTargetDetails) { + switch { + case resource.ReferenceOrIDMatch(api1Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "http": + details.ServiceEndpointsId = api1Endpoints.Id + details.ServiceEndpoints = endpointsData + details.IdentityRefs = []*pbresource.Reference{api1Identity} + case resource.ReferenceOrIDMatch(api2Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "http": + details.ServiceEndpointsId = api2Endpoints.Id + details.ServiceEndpoints = endpointsData + details.IdentityRefs = []*pbresource.Reference{api2Identity} + case resource.ReferenceOrIDMatch(backup1Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "http": + details.ServiceEndpointsId = backup1Endpoints.Id + details.ServiceEndpoints = endpointsData + details.IdentityRefs = []*pbresource.Reference{backup1Identity} + } + }), + } + _ = backup1Identity - for name, c := range cases { - t.Run(resourcetest.AppendTenancyInfoSubtest(t.Name(), name, tenancy), func(t *testing.T) { - proxyTmpl := New(testProxyStateTemplateID(tenancy), testIdentityRef(tenancy), "foo.consul", "dc1", false, nil). - BuildDestinations(c.destinations). - Build() + cases := map[string]struct { + destinations []*intermediate.Destination + }{ + "destination/l4-single-destination-ip-port-bind-address": { + destinations: []*intermediate.Destination{destinationIpPort}, + }, + "destination/l4-single-destination-unix-socket-bind-address": { + destinations: []*intermediate.Destination{destinationUnix}, + }, + "destination/l4-multi-destination": { + destinations: []*intermediate.Destination{destinationIpPort, destinationUnix, destinationIpPort2, destinationUnix2}, + }, + "destination/mixed-multi-destination": { + destinations: []*intermediate.Destination{destinationIpPort, destinationUnix, destinationIpPortHTTP}, + }, + } - actual := protoToJSON(t, proxyTmpl) - expected := golden.Get(t, actual, name+"-"+tenancy.Partition+"-"+tenancy.Namespace+".golden") + for name, c := range cases { + t.Run(name, func(t *testing.T) { + proxyTmpl := New(testProxyStateTemplateID(), testIdentityRef(), "foo.consul", "dc1", false, nil). + BuildDestinations(c.destinations). + Build() - require.JSONEq(t, expected, actual) - }) - } - }, t) + actual := protoToJSON(t, proxyTmpl) + expected := golden.Get(t, actual, name+".golden") + require.JSONEq(t, expected, actual) + }) + } } func TestBuildImplicitDestinations(t *testing.T) { - resourcetest.RunWithTenancies(func(tenancy *pbresource.Tenancy) { - api1Service := resourcetest.Resource(pbcatalog.ServiceType, "api-1"). - WithTenancy(tenancy). - WithData(t, serviceData). - Build() - - api2Service := resourcetest.Resource(pbcatalog.ServiceType, "api-2"). - WithTenancy(tenancy). - WithData(t, serviceData). - Build() - - api1Endpoints := resourcetest.Resource(pbcatalog.ServiceEndpointsType, "api-1"). - WithOwner(api1Service.Id). - WithTenancy(tenancy). - WithData(t, endpointsData).Build() - - api2Endpoints := resourcetest.Resource(pbcatalog.ServiceEndpointsType, "api-2"). - WithOwner(api2Service.Id). - WithTenancy(tenancy). - WithData(t, endpointsData).Build() - - api1Identity := &pbresource.Reference{ - Name: "api1-identity", - Tenancy: api1Endpoints.Id.Tenancy, - } - - api2Identity := &pbresource.Reference{ - Name: "api2-identity", - Tenancy: api2Endpoints.Id.Tenancy, - } - - api1ComputedRoutesID := resource.ReplaceType(pbmesh.ComputedRoutesType, api1Service.Id) - api1ComputedRoutes := routestest.BuildComputedRoutes(t, api1ComputedRoutesID, - resourcetest.MustDecode[*pbcatalog.Service](t, api1Service), - ) - require.NotNil(t, api1ComputedRoutes) - - api2ComputedRoutesID := resource.ReplaceType(pbmesh.ComputedRoutesType, api2Service.Id) - api2ComputedRoutes := routestest.BuildComputedRoutes(t, api2ComputedRoutesID, - resourcetest.MustDecode[*pbcatalog.Service](t, api2Service), - ) - require.NotNil(t, api2ComputedRoutes) - - proxyCfg := &pbmesh.ComputedProxyConfiguration{ - DynamicConfig: &pbmesh.DynamicConfig{ - Mode: pbmesh.ProxyMode_PROXY_MODE_TRANSPARENT, - TransparentProxy: &pbmesh.TransparentProxy{ - OutboundListenerPort: 15001, - }, - }, - } - - destination1 := &intermediate.Destination{ - Service: resourcetest.MustDecode[*pbcatalog.Service](t, api1Service), - ComputedPortRoutes: routestest.MutateTargets(t, api1ComputedRoutes.Data, "tcp", func(t *testing.T, details *pbmesh.BackendTargetDetails) { - switch { - case resource.ReferenceOrIDMatch(api1Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "tcp": - details.ServiceEndpointsId = api1Endpoints.Id - details.ServiceEndpoints = endpointsData - details.IdentityRefs = []*pbresource.Reference{api1Identity} - } - }), - VirtualIPs: []string{"1.1.1.1"}, - } - - destination2 := &intermediate.Destination{ - Service: resourcetest.MustDecode[*pbcatalog.Service](t, api2Service), - ComputedPortRoutes: routestest.MutateTargets(t, api2ComputedRoutes.Data, "tcp", func(t *testing.T, details *pbmesh.BackendTargetDetails) { - switch { - case resource.ReferenceOrIDMatch(api2Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "tcp": - details.ServiceEndpointsId = api2Endpoints.Id - details.ServiceEndpoints = endpointsData - details.IdentityRefs = []*pbresource.Reference{api2Identity} - } - }), - VirtualIPs: []string{"2.2.2.2", "3.3.3.3"}, - } - - destination3 := &intermediate.Destination{ - Explicit: &pbmesh.Destination{ - DestinationRef: resource.Reference(api1Endpoints.Id, ""), - DestinationPort: "tcp", - Datacenter: "dc1", - ListenAddr: &pbmesh.Destination_IpPort{ - IpPort: &pbmesh.IPPortAddress{Ip: "1.1.1.1", Port: 1234}, - }, - }, - Service: resourcetest.MustDecode[*pbcatalog.Service](t, api1Service), - ComputedPortRoutes: routestest.MutateTargets(t, api1ComputedRoutes.Data, "tcp", func(t *testing.T, details *pbmesh.BackendTargetDetails) { - switch { - case resource.ReferenceOrIDMatch(api1Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "tcp": - details.ServiceEndpointsId = api1Endpoints.Id - details.ServiceEndpoints = endpointsData - details.IdentityRefs = []*pbresource.Reference{api1Identity} - } - }), - } - - cases := map[string]struct { - destinations []*intermediate.Destination - }{ - "destination/l4-single-implicit-destination-tproxy": { - destinations: []*intermediate.Destination{destination1}, - }, - "destination/l4-multiple-implicit-destinations-tproxy": { - destinations: []*intermediate.Destination{destination1, destination2}, + api1Service := resourcetest.Resource(pbcatalog.ServiceType, "api-1"). + WithTenancy(resource.DefaultNamespacedTenancy()). + WithData(t, serviceData). + Build() + + api2Service := resourcetest.Resource(pbcatalog.ServiceType, "api-2"). + WithTenancy(resource.DefaultNamespacedTenancy()). + WithData(t, serviceData). + Build() + + api1Endpoints := resourcetest.Resource(pbcatalog.ServiceEndpointsType, "api-1"). + WithOwner(api1Service.Id). + WithTenancy(resource.DefaultNamespacedTenancy()). + WithData(t, endpointsData).Build() + + api2Endpoints := resourcetest.Resource(pbcatalog.ServiceEndpointsType, "api-2"). + WithOwner(api2Service.Id). + WithTenancy(resource.DefaultNamespacedTenancy()). + WithData(t, endpointsData).Build() + + api1Identity := &pbresource.Reference{ + Name: "api1-identity", + Tenancy: api1Endpoints.Id.Tenancy, + } + + api2Identity := &pbresource.Reference{ + Name: "api2-identity", + Tenancy: api2Endpoints.Id.Tenancy, + } + + api1ComputedRoutesID := resource.ReplaceType(pbmesh.ComputedRoutesType, api1Service.Id) + api1ComputedRoutes := routestest.BuildComputedRoutes(t, api1ComputedRoutesID, + resourcetest.MustDecode[*pbcatalog.Service](t, api1Service), + ) + require.NotNil(t, api1ComputedRoutes) + + api2ComputedRoutesID := resource.ReplaceType(pbmesh.ComputedRoutesType, api2Service.Id) + api2ComputedRoutes := routestest.BuildComputedRoutes(t, api2ComputedRoutesID, + resourcetest.MustDecode[*pbcatalog.Service](t, api2Service), + ) + require.NotNil(t, api2ComputedRoutes) + + proxyCfg := &pbmesh.ComputedProxyConfiguration{ + DynamicConfig: &pbmesh.DynamicConfig{ + Mode: pbmesh.ProxyMode_PROXY_MODE_TRANSPARENT, + TransparentProxy: &pbmesh.TransparentProxy{ + OutboundListenerPort: 15001, }, - "destination/l4-implicit-and-explicit-destinations-tproxy": { - destinations: []*intermediate.Destination{destination2, destination3}, + }, + } + + destination1 := &intermediate.Destination{ + Service: resourcetest.MustDecode[*pbcatalog.Service](t, api1Service), + ComputedPortRoutes: routestest.MutateTargets(t, api1ComputedRoutes.Data, "tcp", func(t *testing.T, details *pbmesh.BackendTargetDetails) { + switch { + case resource.ReferenceOrIDMatch(api1Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "tcp": + details.ServiceEndpointsId = api1Endpoints.Id + details.ServiceEndpoints = endpointsData + details.IdentityRefs = []*pbresource.Reference{api1Identity} + } + }), + VirtualIPs: []string{"1.1.1.1"}, + } + + destination2 := &intermediate.Destination{ + Service: resourcetest.MustDecode[*pbcatalog.Service](t, api2Service), + ComputedPortRoutes: routestest.MutateTargets(t, api2ComputedRoutes.Data, "tcp", func(t *testing.T, details *pbmesh.BackendTargetDetails) { + switch { + case resource.ReferenceOrIDMatch(api2Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "tcp": + details.ServiceEndpointsId = api2Endpoints.Id + details.ServiceEndpoints = endpointsData + details.IdentityRefs = []*pbresource.Reference{api2Identity} + } + }), + VirtualIPs: []string{"2.2.2.2", "3.3.3.3"}, + } + + destination3 := &intermediate.Destination{ + Explicit: &pbmesh.Destination{ + DestinationRef: resource.Reference(api1Endpoints.Id, ""), + DestinationPort: "tcp", + Datacenter: "dc1", + ListenAddr: &pbmesh.Destination_IpPort{ + IpPort: &pbmesh.IPPortAddress{Ip: "1.1.1.1", Port: 1234}, }, - } + }, + Service: resourcetest.MustDecode[*pbcatalog.Service](t, api1Service), + ComputedPortRoutes: routestest.MutateTargets(t, api1ComputedRoutes.Data, "tcp", func(t *testing.T, details *pbmesh.BackendTargetDetails) { + switch { + case resource.ReferenceOrIDMatch(api1Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "tcp": + details.ServiceEndpointsId = api1Endpoints.Id + details.ServiceEndpoints = endpointsData + details.IdentityRefs = []*pbresource.Reference{api1Identity} + } + }), + } - for name, c := range cases { - t.Run(resourcetest.AppendTenancyInfoSubtest(t.Name(), name, tenancy), func(t *testing.T) { - proxyTmpl := New(testProxyStateTemplateID(tenancy), testIdentityRef(tenancy), "foo.consul", "dc1", false, proxyCfg). - BuildDestinations(c.destinations). - Build() + cases := map[string]struct { + destinations []*intermediate.Destination + }{ + "destination/l4-single-implicit-destination-tproxy": { + destinations: []*intermediate.Destination{destination1}, + }, + "destination/l4-multiple-implicit-destinations-tproxy": { + destinations: []*intermediate.Destination{destination1, destination2}, + }, + "destination/l4-implicit-and-explicit-destinations-tproxy": { + destinations: []*intermediate.Destination{destination2, destination3}, + }, + } + + for name, c := range cases { + t.Run(name, func(t *testing.T) { + proxyTmpl := New(testProxyStateTemplateID(), testIdentityRef(), "foo.consul", "dc1", false, proxyCfg). + BuildDestinations(c.destinations). + Build() - actual := protoToJSON(t, proxyTmpl) - expected := golden.Get(t, actual, name+"-"+tenancy.Partition+"-"+tenancy.Namespace+".golden") + actual := protoToJSON(t, proxyTmpl) + expected := golden.Get(t, actual, name+".golden") - require.JSONEq(t, expected, actual) - }) - } - }, t) + require.JSONEq(t, expected, actual) + }) + } } diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/expose_paths_test.go b/internal/mesh/internal/controllers/sidecarproxy/builder/expose_paths_test.go index 8bfcc5fbe7f17..c2c9217f40932 100644 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/expose_paths_test.go +++ b/internal/mesh/internal/controllers/sidecarproxy/builder/expose_paths_test.go @@ -4,8 +4,6 @@ package builder import ( - "github.com/hashicorp/consul/internal/resource/resourcetest" - "github.com/hashicorp/consul/proto-public/pbresource" "testing" "github.com/stretchr/testify/require" @@ -18,94 +16,88 @@ import ( // This file contains tests only for error and edge cases cases. The happy case is tested in local_app_test.go func TestBuildExposePaths_NilChecks(t *testing.T) { - resourcetest.RunWithTenancies(func(tenancy *pbresource.Tenancy) { - testutil.RunStep(t, "proxy cfg is nil", func(t *testing.T) { - b := New(testProxyStateTemplateID(tenancy), testIdentityRef(tenancy), "foo.consul", "dc1", true, nil) - require.NotPanics(t, func() { - b.buildExposePaths(nil) - }) + testutil.RunStep(t, "proxy cfg is nil", func(t *testing.T) { + b := New(testProxyStateTemplateID(), testIdentityRef(), "foo.consul", "dc1", true, nil) + require.NotPanics(t, func() { + b.buildExposePaths(nil) }) + }) - testutil.RunStep(t, "dynamic cfg is nil", func(t *testing.T) { - b := New(testProxyStateTemplateID(tenancy), testIdentityRef(tenancy), "foo.consul", "dc1", true, &pbmesh.ComputedProxyConfiguration{}) - require.NotPanics(t, func() { - b.buildExposePaths(nil) - }) + testutil.RunStep(t, "dynamic cfg is nil", func(t *testing.T) { + b := New(testProxyStateTemplateID(), testIdentityRef(), "foo.consul", "dc1", true, &pbmesh.ComputedProxyConfiguration{}) + require.NotPanics(t, func() { + b.buildExposePaths(nil) }) + }) - testutil.RunStep(t, "expose cfg is nil", func(t *testing.T) { - b := New(testProxyStateTemplateID(tenancy), testIdentityRef(tenancy), "foo.consul", "dc1", true, &pbmesh.ComputedProxyConfiguration{ - DynamicConfig: &pbmesh.DynamicConfig{}, - }) - require.NotPanics(t, func() { - b.buildExposePaths(nil) - }) + testutil.RunStep(t, "expose cfg is nil", func(t *testing.T) { + b := New(testProxyStateTemplateID(), testIdentityRef(), "foo.consul", "dc1", true, &pbmesh.ComputedProxyConfiguration{ + DynamicConfig: &pbmesh.DynamicConfig{}, }) - }, t) + require.NotPanics(t, func() { + b.buildExposePaths(nil) + }) + }) } func TestBuildExposePaths_NoExternalMeshWorkloadAddress(t *testing.T) { - resourcetest.RunWithTenancies(func(tenancy *pbresource.Tenancy) { - workload := &pbcatalog.Workload{ - Addresses: []*pbcatalog.WorkloadAddress{ - {Host: "1.1.1.1", External: true}, - }, - Ports: map[string]*pbcatalog.WorkloadPort{ - "tcp": {Port: 8080}, - "mesh": {Port: 20000}, - }, - } + workload := &pbcatalog.Workload{ + Addresses: []*pbcatalog.WorkloadAddress{ + {Host: "1.1.1.1", External: true}, + }, + Ports: map[string]*pbcatalog.WorkloadPort{ + "tcp": {Port: 8080}, + "mesh": {Port: 20000}, + }, + } - proxycfg := &pbmesh.ComputedProxyConfiguration{ - DynamicConfig: &pbmesh.DynamicConfig{ - ExposeConfig: &pbmesh.ExposeConfig{ - ExposePaths: []*pbmesh.ExposePath{ - { - ListenerPort: 1234, - LocalPathPort: 9090, - Path: "/health", - }, + proxycfg := &pbmesh.ComputedProxyConfiguration{ + DynamicConfig: &pbmesh.DynamicConfig{ + ExposeConfig: &pbmesh.ExposeConfig{ + ExposePaths: []*pbmesh.ExposePath{ + { + ListenerPort: 1234, + LocalPathPort: 9090, + Path: "/health", }, }, }, - } + }, + } - b := New(testProxyStateTemplateID(tenancy), testIdentityRef(tenancy), "foo.consul", "dc1", true, proxycfg) - b.buildExposePaths(workload) - require.Empty(t, b.proxyStateTemplate.ProxyState.Listeners) - }, t) + b := New(testProxyStateTemplateID(), testIdentityRef(), "foo.consul", "dc1", true, proxycfg) + b.buildExposePaths(workload) + require.Empty(t, b.proxyStateTemplate.ProxyState.Listeners) } func TestBuildExposePaths_InvalidProtocol(t *testing.T) { - resourcetest.RunWithTenancies(func(tenancy *pbresource.Tenancy) { - workload := &pbcatalog.Workload{ - Addresses: []*pbcatalog.WorkloadAddress{ - {Host: "1.1.1.1"}, - }, - Ports: map[string]*pbcatalog.WorkloadPort{ - "tcp": {Port: 8080}, - "mesh": {Port: 20000, Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, - }, - } + workload := &pbcatalog.Workload{ + Addresses: []*pbcatalog.WorkloadAddress{ + {Host: "1.1.1.1"}, + }, + Ports: map[string]*pbcatalog.WorkloadPort{ + "tcp": {Port: 8080}, + "mesh": {Port: 20000, Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, + }, + } - proxycfg := &pbmesh.ComputedProxyConfiguration{ - DynamicConfig: &pbmesh.DynamicConfig{ - ExposeConfig: &pbmesh.ExposeConfig{ - ExposePaths: []*pbmesh.ExposePath{ - { - ListenerPort: 1234, - LocalPathPort: 9090, - Path: "/health", - Protocol: 3, - }, + proxycfg := &pbmesh.ComputedProxyConfiguration{ + DynamicConfig: &pbmesh.DynamicConfig{ + ExposeConfig: &pbmesh.ExposeConfig{ + ExposePaths: []*pbmesh.ExposePath{ + { + ListenerPort: 1234, + LocalPathPort: 9090, + Path: "/health", + Protocol: 3, }, }, }, - } + }, + } - b := New(testProxyStateTemplateID(tenancy), testIdentityRef(tenancy), "foo.consul", "dc1", true, proxycfg) - require.PanicsWithValue(t, "unsupported expose paths protocol", func() { - b.buildExposePaths(workload) - }) - }, t) + b := New(testProxyStateTemplateID(), testIdentityRef(), "foo.consul", "dc1", true, proxycfg) + require.PanicsWithValue(t, "unsupported expose paths protocol", func() { + b.buildExposePaths(workload) + }) } diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/local_app_multiport_test.go b/internal/mesh/internal/controllers/sidecarproxy/builder/local_app_multiport_test.go index 4a60d0f8b37e9..12cbb387af3a0 100644 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/local_app_multiport_test.go +++ b/internal/mesh/internal/controllers/sidecarproxy/builder/local_app_multiport_test.go @@ -7,167 +7,164 @@ import ( "sort" "testing" + "github.com/hashicorp/consul/internal/testing/golden" + "github.com/stretchr/testify/require" - "github.com/hashicorp/consul/internal/resource/resourcetest" - "github.com/hashicorp/consul/internal/testing/golden" pbcatalog "github.com/hashicorp/consul/proto-public/pbcatalog/v2beta1" - "github.com/hashicorp/consul/proto-public/pbresource" ) func TestBuildLocalApp_Multiport(t *testing.T) { - resourcetest.RunWithTenancies(func(tenancy *pbresource.Tenancy) { - cases := map[string]struct { - workload *pbcatalog.Workload - }{ - "source/multiport-l7-single-workload-address-without-ports": { - workload: &pbcatalog.Workload{ - Addresses: []*pbcatalog.WorkloadAddress{ - { - Host: "10.0.0.1", - }, - }, - Ports: map[string]*pbcatalog.WorkloadPort{ - "admin-port": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, - "api-port": {Port: 9090, Protocol: pbcatalog.Protocol_PROTOCOL_HTTP2}, - "grpc-port": {Port: 9091, Protocol: pbcatalog.Protocol_PROTOCOL_GRPC}, - "mesh": {Port: 20000, Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, + cases := map[string]struct { + workload *pbcatalog.Workload + }{ + "source/multiport-l7-single-workload-address-without-ports": { + workload: &pbcatalog.Workload{ + Addresses: []*pbcatalog.WorkloadAddress{ + { + Host: "10.0.0.1", }, }, + Ports: map[string]*pbcatalog.WorkloadPort{ + "admin-port": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, + "api-port": {Port: 9090, Protocol: pbcatalog.Protocol_PROTOCOL_HTTP2}, + "grpc-port": {Port: 9091, Protocol: pbcatalog.Protocol_PROTOCOL_GRPC}, + "mesh": {Port: 20000, Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, + }, }, - "source/multiport-l7-multiple-workload-addresses-without-ports": { - workload: &pbcatalog.Workload{ - Addresses: []*pbcatalog.WorkloadAddress{ - { - Host: "10.0.0.1", - }, - { - Host: "10.0.0.2", - }, + }, + "source/multiport-l7-multiple-workload-addresses-without-ports": { + workload: &pbcatalog.Workload{ + Addresses: []*pbcatalog.WorkloadAddress{ + { + Host: "10.0.0.1", }, - Ports: map[string]*pbcatalog.WorkloadPort{ - "admin-port": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, - "api-port": {Port: 9090, Protocol: pbcatalog.Protocol_PROTOCOL_HTTP2}, - "grpc-port": {Port: 9091, Protocol: pbcatalog.Protocol_PROTOCOL_GRPC}, - "mesh": {Port: 20000, Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, + { + Host: "10.0.0.2", }, }, + Ports: map[string]*pbcatalog.WorkloadPort{ + "admin-port": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, + "api-port": {Port: 9090, Protocol: pbcatalog.Protocol_PROTOCOL_HTTP2}, + "grpc-port": {Port: 9091, Protocol: pbcatalog.Protocol_PROTOCOL_GRPC}, + "mesh": {Port: 20000, Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, + }, }, - "source/multiport-l7-multiple-workload-addresses-with-specific-ports": { - workload: &pbcatalog.Workload{ - Addresses: []*pbcatalog.WorkloadAddress{ - { - Host: "10.0.0.1", - Ports: []string{"admin-port"}, - }, - { - Host: "10.0.0.2", - Ports: []string{"api-port"}, - }, - { - Host: "10.0.0.3", - Ports: []string{"mesh"}, - }, + }, + "source/multiport-l7-multiple-workload-addresses-with-specific-ports": { + workload: &pbcatalog.Workload{ + Addresses: []*pbcatalog.WorkloadAddress{ + { + Host: "10.0.0.1", + Ports: []string{"admin-port"}, + }, + { + Host: "10.0.0.2", + Ports: []string{"api-port"}, }, - Ports: map[string]*pbcatalog.WorkloadPort{ - "admin-port": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, - "api-port": {Port: 9090, Protocol: pbcatalog.Protocol_PROTOCOL_HTTP2}, - "mesh": {Port: 20000, Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, + { + Host: "10.0.0.3", + Ports: []string{"mesh"}, }, }, + Ports: map[string]*pbcatalog.WorkloadPort{ + "admin-port": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, + "api-port": {Port: 9090, Protocol: pbcatalog.Protocol_PROTOCOL_HTTP2}, + "mesh": {Port: 20000, Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, + }, }, - "source/multiport-l4-single-workload-address-without-ports": { - workload: &pbcatalog.Workload{ - Addresses: []*pbcatalog.WorkloadAddress{ - { - Host: "10.0.0.1", - }, - }, - Ports: map[string]*pbcatalog.WorkloadPort{ - "admin-port": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, - "api-port": {Port: 9090, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, - "mesh": {Port: 20000, Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, + }, + "source/multiport-l4-single-workload-address-without-ports": { + workload: &pbcatalog.Workload{ + Addresses: []*pbcatalog.WorkloadAddress{ + { + Host: "10.0.0.1", }, }, + Ports: map[string]*pbcatalog.WorkloadPort{ + "admin-port": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, + "api-port": {Port: 9090, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, + "mesh": {Port: 20000, Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, + }, }, - "source/multiport-l4-multiple-workload-addresses-without-ports": { - workload: &pbcatalog.Workload{ - Addresses: []*pbcatalog.WorkloadAddress{ - { - Host: "10.0.0.1", - }, - { - Host: "10.0.0.2", - }, + }, + "source/multiport-l4-multiple-workload-addresses-without-ports": { + workload: &pbcatalog.Workload{ + Addresses: []*pbcatalog.WorkloadAddress{ + { + Host: "10.0.0.1", }, - Ports: map[string]*pbcatalog.WorkloadPort{ - "admin-port": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, - "api-port": {Port: 9090, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, - "mesh": {Port: 20000, Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, + { + Host: "10.0.0.2", }, }, + Ports: map[string]*pbcatalog.WorkloadPort{ + "admin-port": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, + "api-port": {Port: 9090, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, + "mesh": {Port: 20000, Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, + }, }, - "source/multiport-l4-multiple-workload-addresses-with-specific-ports": { - workload: &pbcatalog.Workload{ - Addresses: []*pbcatalog.WorkloadAddress{ - { - Host: "10.0.0.1", - Ports: []string{"admin-port"}, - }, - { - Host: "10.0.0.2", - Ports: []string{"api-port"}, - }, - { - Host: "10.0.0.3", - Ports: []string{"mesh"}, - }, + }, + "source/multiport-l4-multiple-workload-addresses-with-specific-ports": { + workload: &pbcatalog.Workload{ + Addresses: []*pbcatalog.WorkloadAddress{ + { + Host: "10.0.0.1", + Ports: []string{"admin-port"}, + }, + { + Host: "10.0.0.2", + Ports: []string{"api-port"}, }, - Ports: map[string]*pbcatalog.WorkloadPort{ - "admin-port": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, - "api-port": {Port: 9090, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, - "mesh": {Port: 20000, Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, + { + Host: "10.0.0.3", + Ports: []string{"mesh"}, }, }, + Ports: map[string]*pbcatalog.WorkloadPort{ + "admin-port": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, + "api-port": {Port: 9090, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, + "mesh": {Port: 20000, Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, + }, }, - "source/multiport-l4-workload-with-only-mesh-port": { - workload: &pbcatalog.Workload{ - Addresses: []*pbcatalog.WorkloadAddress{ - { - Host: "10.0.0.1", - }, - }, - Ports: map[string]*pbcatalog.WorkloadPort{ - "mesh": {Port: 20000, Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, + }, + "source/multiport-l4-workload-with-only-mesh-port": { + workload: &pbcatalog.Workload{ + Addresses: []*pbcatalog.WorkloadAddress{ + { + Host: "10.0.0.1", }, }, + Ports: map[string]*pbcatalog.WorkloadPort{ + "mesh": {Port: 20000, Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, + }, }, - } - - for name, c := range cases { - t.Run(resourcetest.AppendTenancyInfoSubtest(t.Name(), name, tenancy), func(t *testing.T) { - proxyTmpl := New(testProxyStateTemplateID(tenancy), testIdentityRef(tenancy), "foo.consul", "dc1", false, nil). - BuildLocalApp(c.workload, nil). - Build() + }, + } - // sort routers because of test flakes where order was flip flopping. - actualRouters := proxyTmpl.ProxyState.Listeners[0].Routers - sort.Slice(actualRouters, func(i, j int) bool { - return actualRouters[i].String() < actualRouters[j].String() - }) + for name, c := range cases { + t.Run(name, func(t *testing.T) { + proxyTmpl := New(testProxyStateTemplateID(), testIdentityRef(), "foo.consul", "dc1", false, nil). + BuildLocalApp(c.workload, nil). + Build() - actual := protoToJSON(t, proxyTmpl) - expected := JSONToProxyTemplate(t, golden.GetBytes(t, actual, name+"-"+tenancy.Partition+"-"+tenancy.Namespace+".golden")) + // sort routers because of test flakes where order was flip flopping. + actualRouters := proxyTmpl.ProxyState.Listeners[0].Routers + sort.Slice(actualRouters, func(i, j int) bool { + return actualRouters[i].String() < actualRouters[j].String() + }) - // sort routers on listener from golden file - expectedRouters := expected.ProxyState.Listeners[0].Routers - sort.Slice(expectedRouters, func(i, j int) bool { - return expectedRouters[i].String() < expectedRouters[j].String() - }) + actual := protoToJSON(t, proxyTmpl) + expected := JSONToProxyTemplate(t, golden.GetBytes(t, actual, name+".golden")) - // convert back to json after sorting so that test output does not contain extraneous fields. - require.Equal(t, protoToJSON(t, expected), protoToJSON(t, proxyTmpl)) + // sort routers on listener from golden file + expectedRouters := expected.ProxyState.Listeners[0].Routers + sort.Slice(expectedRouters, func(i, j int) bool { + return expectedRouters[i].String() < expectedRouters[j].String() }) - } - }, t) + + // convert back to json after sorting so that test output does not contain extraneous fields. + require.Equal(t, protoToJSON(t, expected), protoToJSON(t, proxyTmpl)) + }) + } } diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/local_app_test.go b/internal/mesh/internal/controllers/sidecarproxy/builder/local_app_test.go index 20e99d911566c..33dcab7155228 100644 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/local_app_test.go +++ b/internal/mesh/internal/controllers/sidecarproxy/builder/local_app_test.go @@ -4,13 +4,14 @@ package builder import ( + "google.golang.org/protobuf/types/known/durationpb" "sort" "testing" "time" "github.com/stretchr/testify/require" - "google.golang.org/protobuf/types/known/durationpb" + "github.com/hashicorp/consul/internal/resource" "github.com/hashicorp/consul/internal/resource/resourcetest" "github.com/hashicorp/consul/internal/testing/golden" pbauth "github.com/hashicorp/consul/proto-public/pbauth/v2beta1" @@ -22,228 +23,201 @@ import ( ) func TestBuildLocalApp(t *testing.T) { - resourcetest.RunWithTenancies(func(tenancy *pbresource.Tenancy) { - cases := map[string]struct { - workload *pbcatalog.Workload - ctp *pbauth.ComputedTrafficPermissions - defaultAllow bool - }{ - "source/single-workload-address-without-ports": { - workload: &pbcatalog.Workload{ - Addresses: []*pbcatalog.WorkloadAddress{ - { - Host: "10.0.0.1", - }, - }, - Ports: map[string]*pbcatalog.WorkloadPort{ - "tcp": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, - "http": {Port: 8081, Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, - "http2": {Port: 8082, Protocol: pbcatalog.Protocol_PROTOCOL_HTTP2}, - "grpc": {Port: 8083, Protocol: pbcatalog.Protocol_PROTOCOL_GRPC}, - "mesh": {Port: 20000, Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, + cases := map[string]struct { + workload *pbcatalog.Workload + ctp *pbauth.ComputedTrafficPermissions + defaultAllow bool + }{ + "source/l4-single-workload-address-without-ports": { + workload: &pbcatalog.Workload{ + Addresses: []*pbcatalog.WorkloadAddress{ + { + Host: "10.0.0.1", }, }, + Ports: map[string]*pbcatalog.WorkloadPort{ + "port1": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, + "port2": {Port: 20000, Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, + }, }, - "source/multiple-workload-addresses-without-ports": { - workload: &pbcatalog.Workload{ - Addresses: []*pbcatalog.WorkloadAddress{ - { - Host: "10.0.0.1", - }, - { - Host: "10.0.0.2", - }, + }, + "source/l4-multiple-workload-addresses-without-ports": { + workload: &pbcatalog.Workload{ + Addresses: []*pbcatalog.WorkloadAddress{ + { + Host: "10.0.0.1", }, - Ports: map[string]*pbcatalog.WorkloadPort{ - "tcp": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, - "http": {Port: 8081, Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, - "http2": {Port: 8082, Protocol: pbcatalog.Protocol_PROTOCOL_HTTP2}, - "grpc": {Port: 8083, Protocol: pbcatalog.Protocol_PROTOCOL_GRPC}, - "mesh": {Port: 20000, Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, + { + Host: "10.0.0.2", }, }, + Ports: map[string]*pbcatalog.WorkloadPort{ + "port1": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, + "port2": {Port: 20000, Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, + }, }, - "source/multiple-workload-addresses-with-specific-ports": { - workload: &pbcatalog.Workload{ - Addresses: []*pbcatalog.WorkloadAddress{ - { - Host: "127.0.0.1", - Ports: []string{"tcp", "grpc", "mesh"}, - }, - { - Host: "10.0.0.2", - Ports: []string{"http", "http2", "mesh"}, - }, + }, + "source/l4-multiple-workload-addresses-with-specific-ports": { + workload: &pbcatalog.Workload{ + Addresses: []*pbcatalog.WorkloadAddress{ + { + Host: "127.0.0.1", + Ports: []string{"port1"}, }, - Ports: map[string]*pbcatalog.WorkloadPort{ - "tcp": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, - "http": {Port: 8081, Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, - "http2": {Port: 8082, Protocol: pbcatalog.Protocol_PROTOCOL_HTTP2}, - "grpc": {Port: 8083, Protocol: pbcatalog.Protocol_PROTOCOL_GRPC}, - "mesh": {Port: 20000, Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, + { + Host: "10.0.0.2", + Ports: []string{"port2"}, }, }, - ctp: &pbauth.ComputedTrafficPermissions{ - AllowPermissions: []*pbauth.Permission{ - { - Sources: []*pbauth.Source{ - { - IdentityName: "foo", - Namespace: "default", - Partition: "default", - }, + Ports: map[string]*pbcatalog.WorkloadPort{ + "port1": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, + "port2": {Port: 20000, Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, + }, + }, + ctp: &pbauth.ComputedTrafficPermissions{ + AllowPermissions: []*pbauth.Permission{ + { + Sources: []*pbauth.Source{ + { + IdentityName: "foo", + Namespace: "default", + Partition: "default", }, }, }, }, - defaultAllow: true, }, - } - - for name, c := range cases { - t.Run(resourcetest.AppendTenancyInfoSubtest(t.Name(), name, tenancy), func(t *testing.T) { - proxyTmpl := New(testProxyStateTemplateID(tenancy), testIdentityRef(tenancy), "foo.consul", "dc1", true, nil). - BuildLocalApp(c.workload, nil). - Build() - - // sort routers because of test flakes where order was flip flopping. - actualRouters := proxyTmpl.ProxyState.Listeners[0].Routers - sort.Slice(actualRouters, func(i, j int) bool { - return actualRouters[i].String() < actualRouters[j].String() - }) - - actual := protoToJSON(t, proxyTmpl) - expected := JSONToProxyTemplate(t, golden.GetBytes(t, actual, name+"-"+tenancy.Partition+"-"+tenancy.Namespace+".golden")) + defaultAllow: true, + }, + } - // sort routers on listener from golden file - expectedRouters := expected.ProxyState.Listeners[0].Routers - sort.Slice(expectedRouters, func(i, j int) bool { - return expectedRouters[i].String() < expectedRouters[j].String() - }) + for name, c := range cases { + t.Run(name, func(t *testing.T) { + proxyTmpl := New(testProxyStateTemplateID(), testIdentityRef(), "foo.consul", "dc1", c.defaultAllow, nil). + BuildLocalApp(c.workload, c.ctp). + Build() + actual := protoToJSON(t, proxyTmpl) + expected := golden.Get(t, actual, name+".golden") - // convert back to json after sorting so that test output does not contain extraneous fields. - require.Equal(t, protoToJSON(t, expected), protoToJSON(t, proxyTmpl)) - }) - } - }, t) + require.JSONEq(t, expected, actual) + }) + } } func TestBuildLocalApp_WithProxyConfiguration(t *testing.T) { - resourcetest.RunWithTenancies(func(tenancy *pbresource.Tenancy) { - cases := map[string]struct { - workload *pbcatalog.Workload - proxyCfg *pbmesh.ComputedProxyConfiguration - }{ - "source/l7-expose-paths": { - workload: &pbcatalog.Workload{ - Addresses: []*pbcatalog.WorkloadAddress{ - { - Host: "10.0.0.1", - }, - }, - Ports: map[string]*pbcatalog.WorkloadPort{ - "port1": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, - "port2": {Port: 20000, Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, + cases := map[string]struct { + workload *pbcatalog.Workload + proxyCfg *pbmesh.ComputedProxyConfiguration + }{ + "source/l7-expose-paths": { + workload: &pbcatalog.Workload{ + Addresses: []*pbcatalog.WorkloadAddress{ + { + Host: "10.0.0.1", }, }, - proxyCfg: &pbmesh.ComputedProxyConfiguration{ - DynamicConfig: &pbmesh.DynamicConfig{ - ExposeConfig: &pbmesh.ExposeConfig{ - ExposePaths: []*pbmesh.ExposePath{ - { - ListenerPort: 1234, - Path: "/health", - LocalPathPort: 9090, - Protocol: pbmesh.ExposePathProtocol_EXPOSE_PATH_PROTOCOL_HTTP, - }, - { - ListenerPort: 1235, - Path: "GetHealth", - LocalPathPort: 9091, - Protocol: pbmesh.ExposePathProtocol_EXPOSE_PATH_PROTOCOL_HTTP2, - }, + Ports: map[string]*pbcatalog.WorkloadPort{ + "port1": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, + "port2": {Port: 20000, Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, + }, + }, + proxyCfg: &pbmesh.ComputedProxyConfiguration{ + DynamicConfig: &pbmesh.DynamicConfig{ + ExposeConfig: &pbmesh.ExposeConfig{ + ExposePaths: []*pbmesh.ExposePath{ + { + ListenerPort: 1234, + Path: "/health", + LocalPathPort: 9090, + Protocol: pbmesh.ExposePathProtocol_EXPOSE_PATH_PROTOCOL_HTTP, + }, + { + ListenerPort: 1235, + Path: "GetHealth", + LocalPathPort: 9091, + Protocol: pbmesh.ExposePathProtocol_EXPOSE_PATH_PROTOCOL_HTTP2, }, }, }, }, }, - // source/local-and-inbound-connections shows that configuring LocalCOnnection - // and InboundConnections in DynamicConfig will set fields on standard clusters and routes, - // but will not set fields on exposed path clusters and routes. - "source/local-and-inbound-connections": { - workload: &pbcatalog.Workload{ - Addresses: []*pbcatalog.WorkloadAddress{ - { - Host: "10.0.0.1", - }, - }, - Ports: map[string]*pbcatalog.WorkloadPort{ - "port1": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, - "port2": {Port: 20000, Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, - "port3": {Port: 8081, Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, + }, + // source/local-and-inbound-connections shows that configuring LocalCOnnection + // and InboundConnections in DynamicConfig will set fields on standard clusters and routes, + // but will not set fields on exposed path clusters and routes. + "source/local-and-inbound-connections": { + workload: &pbcatalog.Workload{ + Addresses: []*pbcatalog.WorkloadAddress{ + { + Host: "10.0.0.1", }, }, - proxyCfg: &pbmesh.ComputedProxyConfiguration{ - DynamicConfig: &pbmesh.DynamicConfig{ - LocalConnection: map[string]*pbmesh.ConnectionConfig{ - "port1": { - ConnectTimeout: durationpb.New(6 * time.Second), - RequestTimeout: durationpb.New(7 * time.Second)}, - "port3": { - ConnectTimeout: durationpb.New(8 * time.Second), - RequestTimeout: durationpb.New(9 * time.Second)}, - }, - InboundConnections: &pbmesh.InboundConnectionsConfig{ - MaxInboundConnections: 123, - BalanceInboundConnections: pbmesh.BalanceConnections(pbproxystate.BalanceConnections_BALANCE_CONNECTIONS_EXACT), - }, - ExposeConfig: &pbmesh.ExposeConfig{ - ExposePaths: []*pbmesh.ExposePath{ - { - ListenerPort: 1234, - Path: "/health", - LocalPathPort: 9090, - Protocol: pbmesh.ExposePathProtocol_EXPOSE_PATH_PROTOCOL_HTTP, - }, - { - ListenerPort: 1235, - Path: "GetHealth", - LocalPathPort: 9091, - Protocol: pbmesh.ExposePathProtocol_EXPOSE_PATH_PROTOCOL_HTTP2, - }, + Ports: map[string]*pbcatalog.WorkloadPort{ + "port1": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, + "port2": {Port: 20000, Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, + "port3": {Port: 8081, Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, + }, + }, + proxyCfg: &pbmesh.ComputedProxyConfiguration{ + DynamicConfig: &pbmesh.DynamicConfig{ + LocalConnection: map[string]*pbmesh.ConnectionConfig{ + "port1": { + ConnectTimeout: durationpb.New(6 * time.Second), + RequestTimeout: durationpb.New(7 * time.Second)}, + "port3": { + ConnectTimeout: durationpb.New(8 * time.Second), + RequestTimeout: durationpb.New(9 * time.Second)}, + }, + InboundConnections: &pbmesh.InboundConnectionsConfig{ + MaxInboundConnections: 123, + BalanceInboundConnections: pbmesh.BalanceConnections(pbproxystate.BalanceConnections_BALANCE_CONNECTIONS_EXACT), + }, + ExposeConfig: &pbmesh.ExposeConfig{ + ExposePaths: []*pbmesh.ExposePath{ + { + ListenerPort: 1234, + Path: "/health", + LocalPathPort: 9090, + Protocol: pbmesh.ExposePathProtocol_EXPOSE_PATH_PROTOCOL_HTTP, + }, + { + ListenerPort: 1235, + Path: "GetHealth", + LocalPathPort: 9091, + Protocol: pbmesh.ExposePathProtocol_EXPOSE_PATH_PROTOCOL_HTTP2, }, }, }, }, }, - } - - for name, c := range cases { - t.Run(resourcetest.AppendTenancyInfoSubtest(t.Name(), name, tenancy), func(t *testing.T) { - proxyTmpl := New(testProxyStateTemplateID(tenancy), testIdentityRef(tenancy), "foo.consul", "dc1", true, c.proxyCfg). - BuildLocalApp(c.workload, nil). - Build() + }, + } - // sort routers because of test flakes where order was flip flopping. - actualRouters := proxyTmpl.ProxyState.Listeners[0].Routers - sort.Slice(actualRouters, func(i, j int) bool { - return actualRouters[i].String() < actualRouters[j].String() - }) + for name, c := range cases { + t.Run(name, func(t *testing.T) { + proxyTmpl := New(testProxyStateTemplateID(), testIdentityRef(), "foo.consul", "dc1", true, c.proxyCfg). + BuildLocalApp(c.workload, nil). + Build() - actual := protoToJSON(t, proxyTmpl) - expected := JSONToProxyTemplate(t, golden.GetBytes(t, actual, name+"-"+tenancy.Partition+"-"+tenancy.Namespace+".golden")) + // sort routers because of test flakes where order was flip flopping. + actualRouters := proxyTmpl.ProxyState.Listeners[0].Routers + sort.Slice(actualRouters, func(i, j int) bool { + return actualRouters[i].String() < actualRouters[j].String() + }) - // sort routers on listener from golden file - expectedRouters := expected.ProxyState.Listeners[0].Routers - sort.Slice(expectedRouters, func(i, j int) bool { - return expectedRouters[i].String() < expectedRouters[j].String() - }) + actual := protoToJSON(t, proxyTmpl) + expected := JSONToProxyTemplate(t, golden.GetBytes(t, actual, name+".golden")) - // convert back to json after sorting so that test output does not contain extraneous fields. - require.Equal(t, protoToJSON(t, expected), protoToJSON(t, proxyTmpl)) + // sort routers on listener from golden file + expectedRouters := expected.ProxyState.Listeners[0].Routers + sort.Slice(expectedRouters, func(i, j int) bool { + return expectedRouters[i].String() < expectedRouters[j].String() }) - } - }, t) + + // convert back to json after sorting so that test output does not contain extraneous fields. + require.Equal(t, protoToJSON(t, expected), protoToJSON(t, proxyTmpl)) + }) + } } func TestBuildL4TrafficPermissions(t *testing.T) { @@ -566,16 +540,20 @@ func TestBuildL4TrafficPermissions(t *testing.T) { } } -func testProxyStateTemplateID(tenancy *pbresource.Tenancy) *pbresource.ID { +func testProxyStateTemplateID() *pbresource.ID { return resourcetest.Resource(pbmesh.ProxyStateTemplateType, "test"). - WithTenancy(tenancy). + WithTenancy(resource.DefaultNamespacedTenancy()). ID() } -func testIdentityRef(tenancy *pbresource.Tenancy) *pbresource.Reference { +func testIdentityRef() *pbresource.Reference { return &pbresource.Reference{ - Name: "test-identity", - Tenancy: tenancy, - Type: pbauth.WorkloadIdentityType, + Name: "test-identity", + Tenancy: &pbresource.Tenancy{ + Namespace: "default", + Partition: "default", + PeerName: "local", + }, + Type: pbauth.WorkloadIdentityType, } } diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-implicit-and-explicit-destinations-tproxy-default-bar.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-implicit-and-explicit-destinations-tproxy-default-bar.golden deleted file mode 100644 index 63166314d217b..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-implicit-and-explicit-destinations-tproxy-default-bar.golden +++ /dev/null @@ -1,194 +0,0 @@ -{ - "proxyState": { - "clusters": { - "original-destination": { - "endpointGroup": { - "passthrough": { - "config": { - "connectTimeout": "5s" - } - } - }, - "name": "original-destination", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-1.bar.dc1.internal.foo.consul": { - "altStatName": "tcp.api-1.bar.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-1.bar.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/bar/identity/api1-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-1.bar.dc1.internal.foo.consul", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-2.bar.dc1.internal.foo.consul": { - "altStatName": "tcp.api-2.bar.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-2.bar.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/bar/identity/api2-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-2.bar.dc1.internal.foo.consul", - "protocol": "PROTOCOL_TCP" - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "direction": "DIRECTION_OUTBOUND", - "hostPort": { - "host": "1.1.1.1", - "port": 1234 - }, - "name": "default/local/bar/api-1:tcp:1.1.1.1:1234", - "routers": [ - { - "l4": { - "cluster": { - "name": "tcp.api-1.bar.dc1.internal.foo.consul" - }, - "statPrefix": "upstream.tcp.api-1.bar.default.dc1" - } - } - ] - }, - { - "capabilities": [ - "CAPABILITY_TRANSPARENT" - ], - "defaultRouter": { - "l4": { - "cluster": { - "name": "original-destination" - }, - "statPrefix": "upstream.original-destination" - } - }, - "direction": "DIRECTION_OUTBOUND", - "hostPort": { - "host": "127.0.0.1", - "port": 15001 - }, - "name": "outbound_listener", - "routers": [ - { - "l4": { - "cluster": { - "name": "tcp.api-2.bar.dc1.internal.foo.consul" - }, - "statPrefix": "upstream.tcp.api-2.bar.default.dc1" - }, - "match": { - "destinationPort": 7070, - "prefixRanges": [ - { - "addressPrefix": "2.2.2.2", - "prefixLen": 32 - }, - { - "addressPrefix": "3.3.3.3", - "prefixLen": 32 - } - ] - } - } - ] - } - ] - }, - "requiredEndpoints": { - "tcp.api-1.bar.dc1.internal.foo.consul": { - "id": { - "name": "api-1", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp.api-2.bar.dc1.internal.foo.consul": { - "id": { - "name": "api-2", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "bar", - "partition": "default" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-implicit-and-explicit-destinations-tproxy-default-default.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-implicit-and-explicit-destinations-tproxy-default-default.golden deleted file mode 100644 index 098beac1af9bb..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-implicit-and-explicit-destinations-tproxy-default-default.golden +++ /dev/null @@ -1,194 +0,0 @@ -{ - "proxyState": { - "clusters": { - "original-destination": { - "endpointGroup": { - "passthrough": { - "config": { - "connectTimeout": "5s" - } - } - }, - "name": "original-destination", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-1.default.dc1.internal.foo.consul": { - "altStatName": "tcp.api-1.default.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-1.default.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/default/identity/api1-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-1.default.dc1.internal.foo.consul", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-2.default.dc1.internal.foo.consul": { - "altStatName": "tcp.api-2.default.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-2.default.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/default/identity/api2-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-2.default.dc1.internal.foo.consul", - "protocol": "PROTOCOL_TCP" - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "direction": "DIRECTION_OUTBOUND", - "hostPort": { - "host": "1.1.1.1", - "port": 1234 - }, - "name": "default/local/default/api-1:tcp:1.1.1.1:1234", - "routers": [ - { - "l4": { - "cluster": { - "name": "tcp.api-1.default.dc1.internal.foo.consul" - }, - "statPrefix": "upstream.tcp.api-1.default.default.dc1" - } - } - ] - }, - { - "capabilities": [ - "CAPABILITY_TRANSPARENT" - ], - "defaultRouter": { - "l4": { - "cluster": { - "name": "original-destination" - }, - "statPrefix": "upstream.original-destination" - } - }, - "direction": "DIRECTION_OUTBOUND", - "hostPort": { - "host": "127.0.0.1", - "port": 15001 - }, - "name": "outbound_listener", - "routers": [ - { - "l4": { - "cluster": { - "name": "tcp.api-2.default.dc1.internal.foo.consul" - }, - "statPrefix": "upstream.tcp.api-2.default.default.dc1" - }, - "match": { - "destinationPort": 7070, - "prefixRanges": [ - { - "addressPrefix": "2.2.2.2", - "prefixLen": 32 - }, - { - "addressPrefix": "3.3.3.3", - "prefixLen": 32 - } - ] - } - } - ] - } - ] - }, - "requiredEndpoints": { - "tcp.api-1.default.dc1.internal.foo.consul": { - "id": { - "name": "api-1", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp.api-2.default.dc1.internal.foo.consul": { - "id": { - "name": "api-2", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "default", - "partition": "default" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-implicit-and-explicit-destinations-tproxy-foo-bar.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-implicit-and-explicit-destinations-tproxy-foo-bar.golden deleted file mode 100644 index 42829063e0862..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-implicit-and-explicit-destinations-tproxy-foo-bar.golden +++ /dev/null @@ -1,194 +0,0 @@ -{ - "proxyState": { - "clusters": { - "original-destination": { - "endpointGroup": { - "passthrough": { - "config": { - "connectTimeout": "5s" - } - } - }, - "name": "original-destination", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-1.bar.foo.dc1.internal-v1.foo.consul": { - "altStatName": "tcp.api-1.bar.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-1.bar.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/bar/identity/api1-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-1.bar.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-2.bar.foo.dc1.internal-v1.foo.consul": { - "altStatName": "tcp.api-2.bar.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-2.bar.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/bar/identity/api2-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-2.bar.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_TCP" - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "direction": "DIRECTION_OUTBOUND", - "hostPort": { - "host": "1.1.1.1", - "port": 1234 - }, - "name": "foo/local/bar/api-1:tcp:1.1.1.1:1234", - "routers": [ - { - "l4": { - "cluster": { - "name": "tcp.api-1.bar.foo.dc1.internal-v1.foo.consul" - }, - "statPrefix": "upstream.tcp.api-1.bar.foo.dc1" - } - } - ] - }, - { - "capabilities": [ - "CAPABILITY_TRANSPARENT" - ], - "defaultRouter": { - "l4": { - "cluster": { - "name": "original-destination" - }, - "statPrefix": "upstream.original-destination" - } - }, - "direction": "DIRECTION_OUTBOUND", - "hostPort": { - "host": "127.0.0.1", - "port": 15001 - }, - "name": "outbound_listener", - "routers": [ - { - "l4": { - "cluster": { - "name": "tcp.api-2.bar.foo.dc1.internal-v1.foo.consul" - }, - "statPrefix": "upstream.tcp.api-2.bar.foo.dc1" - }, - "match": { - "destinationPort": 7070, - "prefixRanges": [ - { - "addressPrefix": "2.2.2.2", - "prefixLen": 32 - }, - { - "addressPrefix": "3.3.3.3", - "prefixLen": 32 - } - ] - } - } - ] - } - ] - }, - "requiredEndpoints": { - "tcp.api-1.bar.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-1", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp.api-2.bar.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-2", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "bar", - "partition": "foo" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-implicit-and-explicit-destinations-tproxy-foo-default.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-implicit-and-explicit-destinations-tproxy-foo-default.golden deleted file mode 100644 index 45a3e5cb9ce45..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-implicit-and-explicit-destinations-tproxy-foo-default.golden +++ /dev/null @@ -1,194 +0,0 @@ -{ - "proxyState": { - "clusters": { - "original-destination": { - "endpointGroup": { - "passthrough": { - "config": { - "connectTimeout": "5s" - } - } - }, - "name": "original-destination", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-1.default.foo.dc1.internal-v1.foo.consul": { - "altStatName": "tcp.api-1.default.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-1.default.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/default/identity/api1-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-1.default.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-2.default.foo.dc1.internal-v1.foo.consul": { - "altStatName": "tcp.api-2.default.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-2.default.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/default/identity/api2-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-2.default.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_TCP" - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "direction": "DIRECTION_OUTBOUND", - "hostPort": { - "host": "1.1.1.1", - "port": 1234 - }, - "name": "foo/local/default/api-1:tcp:1.1.1.1:1234", - "routers": [ - { - "l4": { - "cluster": { - "name": "tcp.api-1.default.foo.dc1.internal-v1.foo.consul" - }, - "statPrefix": "upstream.tcp.api-1.default.foo.dc1" - } - } - ] - }, - { - "capabilities": [ - "CAPABILITY_TRANSPARENT" - ], - "defaultRouter": { - "l4": { - "cluster": { - "name": "original-destination" - }, - "statPrefix": "upstream.original-destination" - } - }, - "direction": "DIRECTION_OUTBOUND", - "hostPort": { - "host": "127.0.0.1", - "port": 15001 - }, - "name": "outbound_listener", - "routers": [ - { - "l4": { - "cluster": { - "name": "tcp.api-2.default.foo.dc1.internal-v1.foo.consul" - }, - "statPrefix": "upstream.tcp.api-2.default.foo.dc1" - }, - "match": { - "destinationPort": 7070, - "prefixRanges": [ - { - "addressPrefix": "2.2.2.2", - "prefixLen": 32 - }, - { - "addressPrefix": "3.3.3.3", - "prefixLen": 32 - } - ] - } - } - ] - } - ] - }, - "requiredEndpoints": { - "tcp.api-1.default.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-1", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp.api-2.default.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-2", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "default", - "partition": "foo" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-multi-destination-default-bar.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-multi-destination-default-bar.golden deleted file mode 100644 index 1e2570b51c7b2..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-multi-destination-default-bar.golden +++ /dev/null @@ -1,320 +0,0 @@ -{ - "proxyState": { - "clusters": { - "null_route_cluster": { - "endpointGroup": { - "static": { - "config": { - "connectTimeout": "10s" - } - } - }, - "name": "null_route_cluster", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-1.bar.dc1.internal.foo.consul": { - "altStatName": "tcp.api-1.bar.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-1.bar.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/bar/identity/api1-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-1.bar.dc1.internal.foo.consul", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-2.bar.dc1.internal.foo.consul": { - "altStatName": "tcp.api-2.bar.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-2.bar.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/bar/identity/api2-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-2.bar.dc1.internal.foo.consul", - "protocol": "PROTOCOL_TCP" - }, - "tcp2.api-1.bar.dc1.internal.foo.consul": { - "altStatName": "tcp2.api-1.bar.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp2" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-1.bar.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/bar/identity/api1-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp2.api-1.bar.dc1.internal.foo.consul", - "protocol": "PROTOCOL_TCP" - }, - "tcp2.api-2.bar.dc1.internal.foo.consul": { - "altStatName": "tcp2.api-2.bar.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp2" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-2.bar.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/bar/identity/api2-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp2.api-2.bar.dc1.internal.foo.consul", - "protocol": "PROTOCOL_TCP" - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "direction": "DIRECTION_OUTBOUND", - "hostPort": { - "host": "1.1.1.1", - "port": 1234 - }, - "name": "default/local/bar/api-1:tcp:1.1.1.1:1234", - "routers": [ - { - "l4": { - "statPrefix": "upstream.tcp.api-1.bar.default.dc1", - "weightedClusters": { - "clusters": [ - { - "name": "tcp.api-2.bar.dc1.internal.foo.consul", - "weight": 60 - }, - { - "name": "tcp.api-1.bar.dc1.internal.foo.consul", - "weight": 40 - }, - { - "name": "null_route_cluster", - "weight": 10 - } - ] - } - } - } - ] - }, - { - "direction": "DIRECTION_OUTBOUND", - "name": "default/local/bar/api-2:tcp:/path/to/socket", - "routers": [ - { - "l4": { - "cluster": { - "name": "tcp.api-2.bar.dc1.internal.foo.consul" - }, - "statPrefix": "upstream.tcp.api-2.bar.default.dc1" - } - } - ], - "unixSocket": { - "mode": "0666", - "path": "/path/to/socket" - } - }, - { - "direction": "DIRECTION_OUTBOUND", - "hostPort": { - "host": "1.1.1.1", - "port": 2345 - }, - "name": "default/local/bar/api-1:tcp2:1.1.1.1:2345", - "routers": [ - { - "l4": { - "statPrefix": "upstream.tcp2.api-1.bar.default.dc1", - "weightedClusters": { - "clusters": [ - { - "name": "tcp2.api-2.bar.dc1.internal.foo.consul", - "weight": 60 - }, - { - "name": "tcp2.api-1.bar.dc1.internal.foo.consul", - "weight": 40 - }, - { - "name": "null_route_cluster", - "weight": 10 - } - ] - } - } - } - ] - }, - { - "direction": "DIRECTION_OUTBOUND", - "name": "default/local/bar/api-2:tcp2:/path/to/socket", - "routers": [ - { - "l4": { - "cluster": { - "name": "tcp2.api-2.bar.dc1.internal.foo.consul" - }, - "statPrefix": "upstream.tcp2.api-2.bar.default.dc1" - } - } - ], - "unixSocket": { - "mode": "0666", - "path": "/path/to/socket" - } - } - ] - }, - "requiredEndpoints": { - "tcp.api-1.bar.dc1.internal.foo.consul": { - "id": { - "name": "api-1", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp.api-2.bar.dc1.internal.foo.consul": { - "id": { - "name": "api-2", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp2.api-1.bar.dc1.internal.foo.consul": { - "id": { - "name": "api-1", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp2.api-2.bar.dc1.internal.foo.consul": { - "id": { - "name": "api-2", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "bar", - "partition": "default" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-multi-destination-default-default.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-multi-destination-default-default.golden deleted file mode 100644 index 1f925e4b5a2b7..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-multi-destination-default-default.golden +++ /dev/null @@ -1,320 +0,0 @@ -{ - "proxyState": { - "clusters": { - "null_route_cluster": { - "endpointGroup": { - "static": { - "config": { - "connectTimeout": "10s" - } - } - }, - "name": "null_route_cluster", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-1.default.dc1.internal.foo.consul": { - "altStatName": "tcp.api-1.default.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-1.default.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/default/identity/api1-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-1.default.dc1.internal.foo.consul", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-2.default.dc1.internal.foo.consul": { - "altStatName": "tcp.api-2.default.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-2.default.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/default/identity/api2-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-2.default.dc1.internal.foo.consul", - "protocol": "PROTOCOL_TCP" - }, - "tcp2.api-1.default.dc1.internal.foo.consul": { - "altStatName": "tcp2.api-1.default.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp2" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-1.default.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/default/identity/api1-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp2.api-1.default.dc1.internal.foo.consul", - "protocol": "PROTOCOL_TCP" - }, - "tcp2.api-2.default.dc1.internal.foo.consul": { - "altStatName": "tcp2.api-2.default.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp2" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-2.default.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/default/identity/api2-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp2.api-2.default.dc1.internal.foo.consul", - "protocol": "PROTOCOL_TCP" - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "direction": "DIRECTION_OUTBOUND", - "hostPort": { - "host": "1.1.1.1", - "port": 1234 - }, - "name": "default/local/default/api-1:tcp:1.1.1.1:1234", - "routers": [ - { - "l4": { - "statPrefix": "upstream.tcp.api-1.default.default.dc1", - "weightedClusters": { - "clusters": [ - { - "name": "tcp.api-2.default.dc1.internal.foo.consul", - "weight": 60 - }, - { - "name": "tcp.api-1.default.dc1.internal.foo.consul", - "weight": 40 - }, - { - "name": "null_route_cluster", - "weight": 10 - } - ] - } - } - } - ] - }, - { - "direction": "DIRECTION_OUTBOUND", - "name": "default/local/default/api-2:tcp:/path/to/socket", - "routers": [ - { - "l4": { - "cluster": { - "name": "tcp.api-2.default.dc1.internal.foo.consul" - }, - "statPrefix": "upstream.tcp.api-2.default.default.dc1" - } - } - ], - "unixSocket": { - "mode": "0666", - "path": "/path/to/socket" - } - }, - { - "direction": "DIRECTION_OUTBOUND", - "hostPort": { - "host": "1.1.1.1", - "port": 2345 - }, - "name": "default/local/default/api-1:tcp2:1.1.1.1:2345", - "routers": [ - { - "l4": { - "statPrefix": "upstream.tcp2.api-1.default.default.dc1", - "weightedClusters": { - "clusters": [ - { - "name": "tcp2.api-2.default.dc1.internal.foo.consul", - "weight": 60 - }, - { - "name": "tcp2.api-1.default.dc1.internal.foo.consul", - "weight": 40 - }, - { - "name": "null_route_cluster", - "weight": 10 - } - ] - } - } - } - ] - }, - { - "direction": "DIRECTION_OUTBOUND", - "name": "default/local/default/api-2:tcp2:/path/to/socket", - "routers": [ - { - "l4": { - "cluster": { - "name": "tcp2.api-2.default.dc1.internal.foo.consul" - }, - "statPrefix": "upstream.tcp2.api-2.default.default.dc1" - } - } - ], - "unixSocket": { - "mode": "0666", - "path": "/path/to/socket" - } - } - ] - }, - "requiredEndpoints": { - "tcp.api-1.default.dc1.internal.foo.consul": { - "id": { - "name": "api-1", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp.api-2.default.dc1.internal.foo.consul": { - "id": { - "name": "api-2", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp2.api-1.default.dc1.internal.foo.consul": { - "id": { - "name": "api-1", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp2.api-2.default.dc1.internal.foo.consul": { - "id": { - "name": "api-2", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "default", - "partition": "default" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-multi-destination-foo-bar.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-multi-destination-foo-bar.golden deleted file mode 100644 index 362d0d150f8af..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-multi-destination-foo-bar.golden +++ /dev/null @@ -1,320 +0,0 @@ -{ - "proxyState": { - "clusters": { - "null_route_cluster": { - "endpointGroup": { - "static": { - "config": { - "connectTimeout": "10s" - } - } - }, - "name": "null_route_cluster", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-1.bar.foo.dc1.internal-v1.foo.consul": { - "altStatName": "tcp.api-1.bar.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-1.bar.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/bar/identity/api1-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-1.bar.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-2.bar.foo.dc1.internal-v1.foo.consul": { - "altStatName": "tcp.api-2.bar.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-2.bar.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/bar/identity/api2-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-2.bar.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_TCP" - }, - "tcp2.api-1.bar.foo.dc1.internal-v1.foo.consul": { - "altStatName": "tcp2.api-1.bar.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp2" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-1.bar.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/bar/identity/api1-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp2.api-1.bar.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_TCP" - }, - "tcp2.api-2.bar.foo.dc1.internal-v1.foo.consul": { - "altStatName": "tcp2.api-2.bar.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp2" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-2.bar.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/bar/identity/api2-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp2.api-2.bar.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_TCP" - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "direction": "DIRECTION_OUTBOUND", - "hostPort": { - "host": "1.1.1.1", - "port": 1234 - }, - "name": "foo/local/bar/api-1:tcp:1.1.1.1:1234", - "routers": [ - { - "l4": { - "statPrefix": "upstream.tcp.api-1.bar.foo.dc1", - "weightedClusters": { - "clusters": [ - { - "name": "tcp.api-2.bar.foo.dc1.internal-v1.foo.consul", - "weight": 60 - }, - { - "name": "tcp.api-1.bar.foo.dc1.internal-v1.foo.consul", - "weight": 40 - }, - { - "name": "null_route_cluster", - "weight": 10 - } - ] - } - } - } - ] - }, - { - "direction": "DIRECTION_OUTBOUND", - "name": "foo/local/bar/api-2:tcp:/path/to/socket", - "routers": [ - { - "l4": { - "cluster": { - "name": "tcp.api-2.bar.foo.dc1.internal-v1.foo.consul" - }, - "statPrefix": "upstream.tcp.api-2.bar.foo.dc1" - } - } - ], - "unixSocket": { - "mode": "0666", - "path": "/path/to/socket" - } - }, - { - "direction": "DIRECTION_OUTBOUND", - "hostPort": { - "host": "1.1.1.1", - "port": 2345 - }, - "name": "foo/local/bar/api-1:tcp2:1.1.1.1:2345", - "routers": [ - { - "l4": { - "statPrefix": "upstream.tcp2.api-1.bar.foo.dc1", - "weightedClusters": { - "clusters": [ - { - "name": "tcp2.api-2.bar.foo.dc1.internal-v1.foo.consul", - "weight": 60 - }, - { - "name": "tcp2.api-1.bar.foo.dc1.internal-v1.foo.consul", - "weight": 40 - }, - { - "name": "null_route_cluster", - "weight": 10 - } - ] - } - } - } - ] - }, - { - "direction": "DIRECTION_OUTBOUND", - "name": "foo/local/bar/api-2:tcp2:/path/to/socket", - "routers": [ - { - "l4": { - "cluster": { - "name": "tcp2.api-2.bar.foo.dc1.internal-v1.foo.consul" - }, - "statPrefix": "upstream.tcp2.api-2.bar.foo.dc1" - } - } - ], - "unixSocket": { - "mode": "0666", - "path": "/path/to/socket" - } - } - ] - }, - "requiredEndpoints": { - "tcp.api-1.bar.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-1", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp.api-2.bar.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-2", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp2.api-1.bar.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-1", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp2.api-2.bar.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-2", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "bar", - "partition": "foo" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-multi-destination-foo-default.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-multi-destination-foo-default.golden deleted file mode 100644 index 08abcc6b4d45a..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-multi-destination-foo-default.golden +++ /dev/null @@ -1,320 +0,0 @@ -{ - "proxyState": { - "clusters": { - "null_route_cluster": { - "endpointGroup": { - "static": { - "config": { - "connectTimeout": "10s" - } - } - }, - "name": "null_route_cluster", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-1.default.foo.dc1.internal-v1.foo.consul": { - "altStatName": "tcp.api-1.default.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-1.default.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/default/identity/api1-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-1.default.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-2.default.foo.dc1.internal-v1.foo.consul": { - "altStatName": "tcp.api-2.default.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-2.default.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/default/identity/api2-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-2.default.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_TCP" - }, - "tcp2.api-1.default.foo.dc1.internal-v1.foo.consul": { - "altStatName": "tcp2.api-1.default.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp2" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-1.default.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/default/identity/api1-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp2.api-1.default.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_TCP" - }, - "tcp2.api-2.default.foo.dc1.internal-v1.foo.consul": { - "altStatName": "tcp2.api-2.default.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp2" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-2.default.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/default/identity/api2-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp2.api-2.default.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_TCP" - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "direction": "DIRECTION_OUTBOUND", - "hostPort": { - "host": "1.1.1.1", - "port": 1234 - }, - "name": "foo/local/default/api-1:tcp:1.1.1.1:1234", - "routers": [ - { - "l4": { - "statPrefix": "upstream.tcp.api-1.default.foo.dc1", - "weightedClusters": { - "clusters": [ - { - "name": "tcp.api-2.default.foo.dc1.internal-v1.foo.consul", - "weight": 60 - }, - { - "name": "tcp.api-1.default.foo.dc1.internal-v1.foo.consul", - "weight": 40 - }, - { - "name": "null_route_cluster", - "weight": 10 - } - ] - } - } - } - ] - }, - { - "direction": "DIRECTION_OUTBOUND", - "name": "foo/local/default/api-2:tcp:/path/to/socket", - "routers": [ - { - "l4": { - "cluster": { - "name": "tcp.api-2.default.foo.dc1.internal-v1.foo.consul" - }, - "statPrefix": "upstream.tcp.api-2.default.foo.dc1" - } - } - ], - "unixSocket": { - "mode": "0666", - "path": "/path/to/socket" - } - }, - { - "direction": "DIRECTION_OUTBOUND", - "hostPort": { - "host": "1.1.1.1", - "port": 2345 - }, - "name": "foo/local/default/api-1:tcp2:1.1.1.1:2345", - "routers": [ - { - "l4": { - "statPrefix": "upstream.tcp2.api-1.default.foo.dc1", - "weightedClusters": { - "clusters": [ - { - "name": "tcp2.api-2.default.foo.dc1.internal-v1.foo.consul", - "weight": 60 - }, - { - "name": "tcp2.api-1.default.foo.dc1.internal-v1.foo.consul", - "weight": 40 - }, - { - "name": "null_route_cluster", - "weight": 10 - } - ] - } - } - } - ] - }, - { - "direction": "DIRECTION_OUTBOUND", - "name": "foo/local/default/api-2:tcp2:/path/to/socket", - "routers": [ - { - "l4": { - "cluster": { - "name": "tcp2.api-2.default.foo.dc1.internal-v1.foo.consul" - }, - "statPrefix": "upstream.tcp2.api-2.default.foo.dc1" - } - } - ], - "unixSocket": { - "mode": "0666", - "path": "/path/to/socket" - } - } - ] - }, - "requiredEndpoints": { - "tcp.api-1.default.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-1", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp.api-2.default.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-2", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp2.api-1.default.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-1", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp2.api-2.default.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-2", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "default", - "partition": "foo" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-multiple-implicit-destinations-tproxy-default-bar.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-multiple-implicit-destinations-tproxy-default-bar.golden deleted file mode 100644 index 2229cda1a8dc2..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-multiple-implicit-destinations-tproxy-default-bar.golden +++ /dev/null @@ -1,193 +0,0 @@ -{ - "proxyState": { - "clusters": { - "original-destination": { - "endpointGroup": { - "passthrough": { - "config": { - "connectTimeout": "5s" - } - } - }, - "name": "original-destination", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-1.bar.dc1.internal.foo.consul": { - "altStatName": "tcp.api-1.bar.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-1.bar.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/bar/identity/api1-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-1.bar.dc1.internal.foo.consul", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-2.bar.dc1.internal.foo.consul": { - "altStatName": "tcp.api-2.bar.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-2.bar.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/bar/identity/api2-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-2.bar.dc1.internal.foo.consul", - "protocol": "PROTOCOL_TCP" - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_TRANSPARENT" - ], - "defaultRouter": { - "l4": { - "cluster": { - "name": "original-destination" - }, - "statPrefix": "upstream.original-destination" - } - }, - "direction": "DIRECTION_OUTBOUND", - "hostPort": { - "host": "127.0.0.1", - "port": 15001 - }, - "name": "outbound_listener", - "routers": [ - { - "l4": { - "cluster": { - "name": "tcp.api-1.bar.dc1.internal.foo.consul" - }, - "statPrefix": "upstream.tcp.api-1.bar.default.dc1" - }, - "match": { - "destinationPort": 7070, - "prefixRanges": [ - { - "addressPrefix": "1.1.1.1", - "prefixLen": 32 - } - ] - } - }, - { - "l4": { - "cluster": { - "name": "tcp.api-2.bar.dc1.internal.foo.consul" - }, - "statPrefix": "upstream.tcp.api-2.bar.default.dc1" - }, - "match": { - "destinationPort": 7070, - "prefixRanges": [ - { - "addressPrefix": "2.2.2.2", - "prefixLen": 32 - }, - { - "addressPrefix": "3.3.3.3", - "prefixLen": 32 - } - ] - } - } - ] - } - ] - }, - "requiredEndpoints": { - "tcp.api-1.bar.dc1.internal.foo.consul": { - "id": { - "name": "api-1", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp.api-2.bar.dc1.internal.foo.consul": { - "id": { - "name": "api-2", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "bar", - "partition": "default" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-multiple-implicit-destinations-tproxy-default-default.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-multiple-implicit-destinations-tproxy-default-default.golden deleted file mode 100644 index e00c9d08e0105..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-multiple-implicit-destinations-tproxy-default-default.golden +++ /dev/null @@ -1,193 +0,0 @@ -{ - "proxyState": { - "clusters": { - "original-destination": { - "endpointGroup": { - "passthrough": { - "config": { - "connectTimeout": "5s" - } - } - }, - "name": "original-destination", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-1.default.dc1.internal.foo.consul": { - "altStatName": "tcp.api-1.default.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-1.default.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/default/identity/api1-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-1.default.dc1.internal.foo.consul", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-2.default.dc1.internal.foo.consul": { - "altStatName": "tcp.api-2.default.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-2.default.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/default/identity/api2-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-2.default.dc1.internal.foo.consul", - "protocol": "PROTOCOL_TCP" - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_TRANSPARENT" - ], - "defaultRouter": { - "l4": { - "cluster": { - "name": "original-destination" - }, - "statPrefix": "upstream.original-destination" - } - }, - "direction": "DIRECTION_OUTBOUND", - "hostPort": { - "host": "127.0.0.1", - "port": 15001 - }, - "name": "outbound_listener", - "routers": [ - { - "l4": { - "cluster": { - "name": "tcp.api-1.default.dc1.internal.foo.consul" - }, - "statPrefix": "upstream.tcp.api-1.default.default.dc1" - }, - "match": { - "destinationPort": 7070, - "prefixRanges": [ - { - "addressPrefix": "1.1.1.1", - "prefixLen": 32 - } - ] - } - }, - { - "l4": { - "cluster": { - "name": "tcp.api-2.default.dc1.internal.foo.consul" - }, - "statPrefix": "upstream.tcp.api-2.default.default.dc1" - }, - "match": { - "destinationPort": 7070, - "prefixRanges": [ - { - "addressPrefix": "2.2.2.2", - "prefixLen": 32 - }, - { - "addressPrefix": "3.3.3.3", - "prefixLen": 32 - } - ] - } - } - ] - } - ] - }, - "requiredEndpoints": { - "tcp.api-1.default.dc1.internal.foo.consul": { - "id": { - "name": "api-1", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp.api-2.default.dc1.internal.foo.consul": { - "id": { - "name": "api-2", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "default", - "partition": "default" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-multiple-implicit-destinations-tproxy-foo-bar.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-multiple-implicit-destinations-tproxy-foo-bar.golden deleted file mode 100644 index 36e2a40ace404..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-multiple-implicit-destinations-tproxy-foo-bar.golden +++ /dev/null @@ -1,193 +0,0 @@ -{ - "proxyState": { - "clusters": { - "original-destination": { - "endpointGroup": { - "passthrough": { - "config": { - "connectTimeout": "5s" - } - } - }, - "name": "original-destination", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-1.bar.foo.dc1.internal-v1.foo.consul": { - "altStatName": "tcp.api-1.bar.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-1.bar.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/bar/identity/api1-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-1.bar.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-2.bar.foo.dc1.internal-v1.foo.consul": { - "altStatName": "tcp.api-2.bar.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-2.bar.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/bar/identity/api2-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-2.bar.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_TCP" - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_TRANSPARENT" - ], - "defaultRouter": { - "l4": { - "cluster": { - "name": "original-destination" - }, - "statPrefix": "upstream.original-destination" - } - }, - "direction": "DIRECTION_OUTBOUND", - "hostPort": { - "host": "127.0.0.1", - "port": 15001 - }, - "name": "outbound_listener", - "routers": [ - { - "l4": { - "cluster": { - "name": "tcp.api-1.bar.foo.dc1.internal-v1.foo.consul" - }, - "statPrefix": "upstream.tcp.api-1.bar.foo.dc1" - }, - "match": { - "destinationPort": 7070, - "prefixRanges": [ - { - "addressPrefix": "1.1.1.1", - "prefixLen": 32 - } - ] - } - }, - { - "l4": { - "cluster": { - "name": "tcp.api-2.bar.foo.dc1.internal-v1.foo.consul" - }, - "statPrefix": "upstream.tcp.api-2.bar.foo.dc1" - }, - "match": { - "destinationPort": 7070, - "prefixRanges": [ - { - "addressPrefix": "2.2.2.2", - "prefixLen": 32 - }, - { - "addressPrefix": "3.3.3.3", - "prefixLen": 32 - } - ] - } - } - ] - } - ] - }, - "requiredEndpoints": { - "tcp.api-1.bar.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-1", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp.api-2.bar.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-2", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "bar", - "partition": "foo" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-multiple-implicit-destinations-tproxy-foo-default.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-multiple-implicit-destinations-tproxy-foo-default.golden deleted file mode 100644 index a00eb8d334c57..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-multiple-implicit-destinations-tproxy-foo-default.golden +++ /dev/null @@ -1,193 +0,0 @@ -{ - "proxyState": { - "clusters": { - "original-destination": { - "endpointGroup": { - "passthrough": { - "config": { - "connectTimeout": "5s" - } - } - }, - "name": "original-destination", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-1.default.foo.dc1.internal-v1.foo.consul": { - "altStatName": "tcp.api-1.default.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-1.default.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/default/identity/api1-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-1.default.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-2.default.foo.dc1.internal-v1.foo.consul": { - "altStatName": "tcp.api-2.default.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-2.default.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/default/identity/api2-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-2.default.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_TCP" - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_TRANSPARENT" - ], - "defaultRouter": { - "l4": { - "cluster": { - "name": "original-destination" - }, - "statPrefix": "upstream.original-destination" - } - }, - "direction": "DIRECTION_OUTBOUND", - "hostPort": { - "host": "127.0.0.1", - "port": 15001 - }, - "name": "outbound_listener", - "routers": [ - { - "l4": { - "cluster": { - "name": "tcp.api-1.default.foo.dc1.internal-v1.foo.consul" - }, - "statPrefix": "upstream.tcp.api-1.default.foo.dc1" - }, - "match": { - "destinationPort": 7070, - "prefixRanges": [ - { - "addressPrefix": "1.1.1.1", - "prefixLen": 32 - } - ] - } - }, - { - "l4": { - "cluster": { - "name": "tcp.api-2.default.foo.dc1.internal-v1.foo.consul" - }, - "statPrefix": "upstream.tcp.api-2.default.foo.dc1" - }, - "match": { - "destinationPort": 7070, - "prefixRanges": [ - { - "addressPrefix": "2.2.2.2", - "prefixLen": 32 - }, - { - "addressPrefix": "3.3.3.3", - "prefixLen": 32 - } - ] - } - } - ] - } - ] - }, - "requiredEndpoints": { - "tcp.api-1.default.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-1", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp.api-2.default.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-2", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "default", - "partition": "foo" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-single-destination-ip-port-bind-address-default-bar.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-single-destination-ip-port-bind-address-default-bar.golden deleted file mode 100644 index f3ab005e066dc..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-single-destination-ip-port-bind-address-default-bar.golden +++ /dev/null @@ -1,165 +0,0 @@ -{ - "proxyState": { - "clusters": { - "null_route_cluster": { - "endpointGroup": { - "static": { - "config": { - "connectTimeout": "10s" - } - } - }, - "name": "null_route_cluster", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-1.bar.dc1.internal.foo.consul": { - "altStatName": "tcp.api-1.bar.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-1.bar.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/bar/identity/api1-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-1.bar.dc1.internal.foo.consul", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-2.bar.dc1.internal.foo.consul": { - "altStatName": "tcp.api-2.bar.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-2.bar.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/bar/identity/api2-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-2.bar.dc1.internal.foo.consul", - "protocol": "PROTOCOL_TCP" - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "direction": "DIRECTION_OUTBOUND", - "hostPort": { - "host": "1.1.1.1", - "port": 1234 - }, - "name": "default/local/bar/api-1:tcp:1.1.1.1:1234", - "routers": [ - { - "l4": { - "statPrefix": "upstream.tcp.api-1.bar.default.dc1", - "weightedClusters": { - "clusters": [ - { - "name": "tcp.api-2.bar.dc1.internal.foo.consul", - "weight": 60 - }, - { - "name": "tcp.api-1.bar.dc1.internal.foo.consul", - "weight": 40 - }, - { - "name": "null_route_cluster", - "weight": 10 - } - ] - } - } - } - ] - } - ] - }, - "requiredEndpoints": { - "tcp.api-1.bar.dc1.internal.foo.consul": { - "id": { - "name": "api-1", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp.api-2.bar.dc1.internal.foo.consul": { - "id": { - "name": "api-2", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "bar", - "partition": "default" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-single-destination-ip-port-bind-address-default-default.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-single-destination-ip-port-bind-address-default-default.golden deleted file mode 100644 index ae2d99c942619..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-single-destination-ip-port-bind-address-default-default.golden +++ /dev/null @@ -1,165 +0,0 @@ -{ - "proxyState": { - "clusters": { - "null_route_cluster": { - "endpointGroup": { - "static": { - "config": { - "connectTimeout": "10s" - } - } - }, - "name": "null_route_cluster", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-1.default.dc1.internal.foo.consul": { - "altStatName": "tcp.api-1.default.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-1.default.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/default/identity/api1-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-1.default.dc1.internal.foo.consul", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-2.default.dc1.internal.foo.consul": { - "altStatName": "tcp.api-2.default.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-2.default.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/default/identity/api2-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-2.default.dc1.internal.foo.consul", - "protocol": "PROTOCOL_TCP" - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "direction": "DIRECTION_OUTBOUND", - "hostPort": { - "host": "1.1.1.1", - "port": 1234 - }, - "name": "default/local/default/api-1:tcp:1.1.1.1:1234", - "routers": [ - { - "l4": { - "statPrefix": "upstream.tcp.api-1.default.default.dc1", - "weightedClusters": { - "clusters": [ - { - "name": "tcp.api-2.default.dc1.internal.foo.consul", - "weight": 60 - }, - { - "name": "tcp.api-1.default.dc1.internal.foo.consul", - "weight": 40 - }, - { - "name": "null_route_cluster", - "weight": 10 - } - ] - } - } - } - ] - } - ] - }, - "requiredEndpoints": { - "tcp.api-1.default.dc1.internal.foo.consul": { - "id": { - "name": "api-1", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp.api-2.default.dc1.internal.foo.consul": { - "id": { - "name": "api-2", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "default", - "partition": "default" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-single-destination-ip-port-bind-address-foo-bar.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-single-destination-ip-port-bind-address-foo-bar.golden deleted file mode 100644 index 69b47e5e3a8e9..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-single-destination-ip-port-bind-address-foo-bar.golden +++ /dev/null @@ -1,165 +0,0 @@ -{ - "proxyState": { - "clusters": { - "null_route_cluster": { - "endpointGroup": { - "static": { - "config": { - "connectTimeout": "10s" - } - } - }, - "name": "null_route_cluster", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-1.bar.foo.dc1.internal-v1.foo.consul": { - "altStatName": "tcp.api-1.bar.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-1.bar.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/bar/identity/api1-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-1.bar.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-2.bar.foo.dc1.internal-v1.foo.consul": { - "altStatName": "tcp.api-2.bar.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-2.bar.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/bar/identity/api2-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-2.bar.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_TCP" - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "direction": "DIRECTION_OUTBOUND", - "hostPort": { - "host": "1.1.1.1", - "port": 1234 - }, - "name": "foo/local/bar/api-1:tcp:1.1.1.1:1234", - "routers": [ - { - "l4": { - "statPrefix": "upstream.tcp.api-1.bar.foo.dc1", - "weightedClusters": { - "clusters": [ - { - "name": "tcp.api-2.bar.foo.dc1.internal-v1.foo.consul", - "weight": 60 - }, - { - "name": "tcp.api-1.bar.foo.dc1.internal-v1.foo.consul", - "weight": 40 - }, - { - "name": "null_route_cluster", - "weight": 10 - } - ] - } - } - } - ] - } - ] - }, - "requiredEndpoints": { - "tcp.api-1.bar.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-1", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp.api-2.bar.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-2", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "bar", - "partition": "foo" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-single-destination-ip-port-bind-address-foo-default.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-single-destination-ip-port-bind-address-foo-default.golden deleted file mode 100644 index 35788a96d9b7e..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-single-destination-ip-port-bind-address-foo-default.golden +++ /dev/null @@ -1,165 +0,0 @@ -{ - "proxyState": { - "clusters": { - "null_route_cluster": { - "endpointGroup": { - "static": { - "config": { - "connectTimeout": "10s" - } - } - }, - "name": "null_route_cluster", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-1.default.foo.dc1.internal-v1.foo.consul": { - "altStatName": "tcp.api-1.default.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-1.default.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/default/identity/api1-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-1.default.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-2.default.foo.dc1.internal-v1.foo.consul": { - "altStatName": "tcp.api-2.default.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-2.default.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/default/identity/api2-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-2.default.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_TCP" - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "direction": "DIRECTION_OUTBOUND", - "hostPort": { - "host": "1.1.1.1", - "port": 1234 - }, - "name": "foo/local/default/api-1:tcp:1.1.1.1:1234", - "routers": [ - { - "l4": { - "statPrefix": "upstream.tcp.api-1.default.foo.dc1", - "weightedClusters": { - "clusters": [ - { - "name": "tcp.api-2.default.foo.dc1.internal-v1.foo.consul", - "weight": 60 - }, - { - "name": "tcp.api-1.default.foo.dc1.internal-v1.foo.consul", - "weight": 40 - }, - { - "name": "null_route_cluster", - "weight": 10 - } - ] - } - } - } - ] - } - ] - }, - "requiredEndpoints": { - "tcp.api-1.default.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-1", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp.api-2.default.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-2", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "default", - "partition": "foo" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-single-destination-unix-socket-bind-address-default-bar.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-single-destination-unix-socket-bind-address-default-bar.golden deleted file mode 100644 index a39efdd4b58c4..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-single-destination-unix-socket-bind-address-default-bar.golden +++ /dev/null @@ -1,97 +0,0 @@ -{ - "proxyState": { - "clusters": { - "tcp.api-2.bar.dc1.internal.foo.consul": { - "altStatName": "tcp.api-2.bar.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-2.bar.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/bar/identity/api2-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-2.bar.dc1.internal.foo.consul", - "protocol": "PROTOCOL_TCP" - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "direction": "DIRECTION_OUTBOUND", - "name": "default/local/bar/api-2:tcp:/path/to/socket", - "routers": [ - { - "l4": { - "cluster": { - "name": "tcp.api-2.bar.dc1.internal.foo.consul" - }, - "statPrefix": "upstream.tcp.api-2.bar.default.dc1" - } - } - ], - "unixSocket": { - "mode": "0666", - "path": "/path/to/socket" - } - } - ] - }, - "requiredEndpoints": { - "tcp.api-2.bar.dc1.internal.foo.consul": { - "id": { - "name": "api-2", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "bar", - "partition": "default" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-single-destination-unix-socket-bind-address-default-default.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-single-destination-unix-socket-bind-address-default-default.golden deleted file mode 100644 index 2af48e9f29e31..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-single-destination-unix-socket-bind-address-default-default.golden +++ /dev/null @@ -1,97 +0,0 @@ -{ - "proxyState": { - "clusters": { - "tcp.api-2.default.dc1.internal.foo.consul": { - "altStatName": "tcp.api-2.default.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-2.default.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/default/identity/api2-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-2.default.dc1.internal.foo.consul", - "protocol": "PROTOCOL_TCP" - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "direction": "DIRECTION_OUTBOUND", - "name": "default/local/default/api-2:tcp:/path/to/socket", - "routers": [ - { - "l4": { - "cluster": { - "name": "tcp.api-2.default.dc1.internal.foo.consul" - }, - "statPrefix": "upstream.tcp.api-2.default.default.dc1" - } - } - ], - "unixSocket": { - "mode": "0666", - "path": "/path/to/socket" - } - } - ] - }, - "requiredEndpoints": { - "tcp.api-2.default.dc1.internal.foo.consul": { - "id": { - "name": "api-2", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "default", - "partition": "default" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-single-destination-unix-socket-bind-address-foo-bar.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-single-destination-unix-socket-bind-address-foo-bar.golden deleted file mode 100644 index d56ced93a8b9b..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-single-destination-unix-socket-bind-address-foo-bar.golden +++ /dev/null @@ -1,97 +0,0 @@ -{ - "proxyState": { - "clusters": { - "tcp.api-2.bar.foo.dc1.internal-v1.foo.consul": { - "altStatName": "tcp.api-2.bar.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-2.bar.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/bar/identity/api2-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-2.bar.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_TCP" - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "direction": "DIRECTION_OUTBOUND", - "name": "foo/local/bar/api-2:tcp:/path/to/socket", - "routers": [ - { - "l4": { - "cluster": { - "name": "tcp.api-2.bar.foo.dc1.internal-v1.foo.consul" - }, - "statPrefix": "upstream.tcp.api-2.bar.foo.dc1" - } - } - ], - "unixSocket": { - "mode": "0666", - "path": "/path/to/socket" - } - } - ] - }, - "requiredEndpoints": { - "tcp.api-2.bar.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-2", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "bar", - "partition": "foo" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-single-destination-unix-socket-bind-address-foo-default.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-single-destination-unix-socket-bind-address-foo-default.golden deleted file mode 100644 index b0768db9b0496..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-single-destination-unix-socket-bind-address-foo-default.golden +++ /dev/null @@ -1,97 +0,0 @@ -{ - "proxyState": { - "clusters": { - "tcp.api-2.default.foo.dc1.internal-v1.foo.consul": { - "altStatName": "tcp.api-2.default.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-2.default.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/default/identity/api2-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-2.default.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_TCP" - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "direction": "DIRECTION_OUTBOUND", - "name": "foo/local/default/api-2:tcp:/path/to/socket", - "routers": [ - { - "l4": { - "cluster": { - "name": "tcp.api-2.default.foo.dc1.internal-v1.foo.consul" - }, - "statPrefix": "upstream.tcp.api-2.default.foo.dc1" - } - } - ], - "unixSocket": { - "mode": "0666", - "path": "/path/to/socket" - } - } - ] - }, - "requiredEndpoints": { - "tcp.api-2.default.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-2", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "default", - "partition": "foo" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-single-implicit-destination-tproxy-default-bar.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-single-implicit-destination-tproxy-default-bar.golden deleted file mode 100644 index c3017193ca8de..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-single-implicit-destination-tproxy-default-bar.golden +++ /dev/null @@ -1,128 +0,0 @@ -{ - "proxyState": { - "clusters": { - "original-destination": { - "endpointGroup": { - "passthrough": { - "config": { - "connectTimeout": "5s" - } - } - }, - "name": "original-destination", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-1.bar.dc1.internal.foo.consul": { - "altStatName": "tcp.api-1.bar.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-1.bar.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/bar/identity/api1-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-1.bar.dc1.internal.foo.consul", - "protocol": "PROTOCOL_TCP" - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_TRANSPARENT" - ], - "defaultRouter": { - "l4": { - "cluster": { - "name": "original-destination" - }, - "statPrefix": "upstream.original-destination" - } - }, - "direction": "DIRECTION_OUTBOUND", - "hostPort": { - "host": "127.0.0.1", - "port": 15001 - }, - "name": "outbound_listener", - "routers": [ - { - "l4": { - "cluster": { - "name": "tcp.api-1.bar.dc1.internal.foo.consul" - }, - "statPrefix": "upstream.tcp.api-1.bar.default.dc1" - }, - "match": { - "destinationPort": 7070, - "prefixRanges": [ - { - "addressPrefix": "1.1.1.1", - "prefixLen": 32 - } - ] - } - } - ] - } - ] - }, - "requiredEndpoints": { - "tcp.api-1.bar.dc1.internal.foo.consul": { - "id": { - "name": "api-1", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "bar", - "partition": "default" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-single-implicit-destination-tproxy-default-default.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-single-implicit-destination-tproxy-default-default.golden deleted file mode 100644 index 50e871481174c..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-single-implicit-destination-tproxy-default-default.golden +++ /dev/null @@ -1,128 +0,0 @@ -{ - "proxyState": { - "clusters": { - "original-destination": { - "endpointGroup": { - "passthrough": { - "config": { - "connectTimeout": "5s" - } - } - }, - "name": "original-destination", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-1.default.dc1.internal.foo.consul": { - "altStatName": "tcp.api-1.default.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-1.default.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/default/identity/api1-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-1.default.dc1.internal.foo.consul", - "protocol": "PROTOCOL_TCP" - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_TRANSPARENT" - ], - "defaultRouter": { - "l4": { - "cluster": { - "name": "original-destination" - }, - "statPrefix": "upstream.original-destination" - } - }, - "direction": "DIRECTION_OUTBOUND", - "hostPort": { - "host": "127.0.0.1", - "port": 15001 - }, - "name": "outbound_listener", - "routers": [ - { - "l4": { - "cluster": { - "name": "tcp.api-1.default.dc1.internal.foo.consul" - }, - "statPrefix": "upstream.tcp.api-1.default.default.dc1" - }, - "match": { - "destinationPort": 7070, - "prefixRanges": [ - { - "addressPrefix": "1.1.1.1", - "prefixLen": 32 - } - ] - } - } - ] - } - ] - }, - "requiredEndpoints": { - "tcp.api-1.default.dc1.internal.foo.consul": { - "id": { - "name": "api-1", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "default", - "partition": "default" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-single-implicit-destination-tproxy-foo-bar.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-single-implicit-destination-tproxy-foo-bar.golden deleted file mode 100644 index 75d3698d91b75..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-single-implicit-destination-tproxy-foo-bar.golden +++ /dev/null @@ -1,128 +0,0 @@ -{ - "proxyState": { - "clusters": { - "original-destination": { - "endpointGroup": { - "passthrough": { - "config": { - "connectTimeout": "5s" - } - } - }, - "name": "original-destination", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-1.bar.foo.dc1.internal-v1.foo.consul": { - "altStatName": "tcp.api-1.bar.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-1.bar.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/bar/identity/api1-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-1.bar.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_TCP" - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_TRANSPARENT" - ], - "defaultRouter": { - "l4": { - "cluster": { - "name": "original-destination" - }, - "statPrefix": "upstream.original-destination" - } - }, - "direction": "DIRECTION_OUTBOUND", - "hostPort": { - "host": "127.0.0.1", - "port": 15001 - }, - "name": "outbound_listener", - "routers": [ - { - "l4": { - "cluster": { - "name": "tcp.api-1.bar.foo.dc1.internal-v1.foo.consul" - }, - "statPrefix": "upstream.tcp.api-1.bar.foo.dc1" - }, - "match": { - "destinationPort": 7070, - "prefixRanges": [ - { - "addressPrefix": "1.1.1.1", - "prefixLen": 32 - } - ] - } - } - ] - } - ] - }, - "requiredEndpoints": { - "tcp.api-1.bar.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-1", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "bar", - "partition": "foo" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-single-implicit-destination-tproxy-foo-default.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-single-implicit-destination-tproxy-foo-default.golden deleted file mode 100644 index df5c92a34668e..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/l4-single-implicit-destination-tproxy-foo-default.golden +++ /dev/null @@ -1,128 +0,0 @@ -{ - "proxyState": { - "clusters": { - "original-destination": { - "endpointGroup": { - "passthrough": { - "config": { - "connectTimeout": "5s" - } - } - }, - "name": "original-destination", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-1.default.foo.dc1.internal-v1.foo.consul": { - "altStatName": "tcp.api-1.default.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-1.default.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/default/identity/api1-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-1.default.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_TCP" - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_TRANSPARENT" - ], - "defaultRouter": { - "l4": { - "cluster": { - "name": "original-destination" - }, - "statPrefix": "upstream.original-destination" - } - }, - "direction": "DIRECTION_OUTBOUND", - "hostPort": { - "host": "127.0.0.1", - "port": 15001 - }, - "name": "outbound_listener", - "routers": [ - { - "l4": { - "cluster": { - "name": "tcp.api-1.default.foo.dc1.internal-v1.foo.consul" - }, - "statPrefix": "upstream.tcp.api-1.default.foo.dc1" - }, - "match": { - "destinationPort": 7070, - "prefixRanges": [ - { - "addressPrefix": "1.1.1.1", - "prefixLen": 32 - } - ] - } - } - ] - } - ] - }, - "requiredEndpoints": { - "tcp.api-1.default.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-1", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "default", - "partition": "foo" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/mixed-multi-destination-default-bar.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/mixed-multi-destination-default-bar.golden deleted file mode 100644 index f4c131189c919..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/mixed-multi-destination-default-bar.golden +++ /dev/null @@ -1,415 +0,0 @@ -{ - "proxyState": { - "clusters": { - "http.api-1.bar.dc1.internal.foo.consul": { - "altStatName": "http.api-1.bar.dc1.internal.foo.consul", - "failoverGroup": { - "config": { - "connectTimeout": "55s", - "useAltStatName": true - }, - "endpointGroups": [ - { - "dynamic": { - "config": { - "connectTimeout": "55s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~http" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-1.bar.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/bar/identity/api1-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - }, - "name": "failover-target~0~http.api-1.bar.dc1.internal.foo.consul" - }, - { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~http" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "backup-1.bar.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/bar/identity/backup1-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - }, - "name": "failover-target~1~http.api-1.bar.dc1.internal.foo.consul" - } - ] - }, - "name": "http.api-1.bar.dc1.internal.foo.consul", - "protocol": "PROTOCOL_HTTP" - }, - "http.api-2.bar.dc1.internal.foo.consul": { - "altStatName": "http.api-2.bar.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~http" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-2.bar.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/bar/identity/api2-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "http.api-2.bar.dc1.internal.foo.consul", - "protocol": "PROTOCOL_HTTP" - }, - "null_route_cluster": { - "endpointGroup": { - "static": { - "config": { - "connectTimeout": "10s" - } - } - }, - "name": "null_route_cluster", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-1.bar.dc1.internal.foo.consul": { - "altStatName": "tcp.api-1.bar.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-1.bar.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/bar/identity/api1-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-1.bar.dc1.internal.foo.consul", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-2.bar.dc1.internal.foo.consul": { - "altStatName": "tcp.api-2.bar.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-2.bar.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/bar/identity/api2-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-2.bar.dc1.internal.foo.consul", - "protocol": "PROTOCOL_TCP" - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "direction": "DIRECTION_OUTBOUND", - "hostPort": { - "host": "1.1.1.1", - "port": 1234 - }, - "name": "default/local/bar/api-1:tcp:1.1.1.1:1234", - "routers": [ - { - "l4": { - "statPrefix": "upstream.tcp.api-1.bar.default.dc1", - "weightedClusters": { - "clusters": [ - { - "name": "tcp.api-2.bar.dc1.internal.foo.consul", - "weight": 60 - }, - { - "name": "tcp.api-1.bar.dc1.internal.foo.consul", - "weight": 40 - }, - { - "name": "null_route_cluster", - "weight": 10 - } - ] - } - } - } - ] - }, - { - "direction": "DIRECTION_OUTBOUND", - "name": "default/local/bar/api-2:tcp:/path/to/socket", - "routers": [ - { - "l4": { - "cluster": { - "name": "tcp.api-2.bar.dc1.internal.foo.consul" - }, - "statPrefix": "upstream.tcp.api-2.bar.default.dc1" - } - } - ], - "unixSocket": { - "mode": "0666", - "path": "/path/to/socket" - } - }, - { - "direction": "DIRECTION_OUTBOUND", - "hostPort": { - "host": "1.1.1.1", - "port": 1234 - }, - "name": "default/local/bar/api-1:http:1.1.1.1:1234", - "routers": [ - { - "l7": { - "route": { - "name": "default/local/bar/api-1:http:1.1.1.1:1234" - }, - "statPrefix": "upstream.http.api-1.bar.default.dc1" - } - } - ] - } - ], - "routes": { - "default/local/bar/api-1:http:1.1.1.1:1234": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "default/local/bar/api-1:http:1.1.1.1:1234", - "routeRules": [ - { - "destination": { - "destinationConfiguration": { - "timeoutConfig": { - "timeout": "77s" - } - }, - "weightedClusters": { - "clusters": [ - { - "name": "http.api-2.bar.dc1.internal.foo.consul", - "weight": 60 - }, - { - "name": "http.api-1.bar.dc1.internal.foo.consul", - "weight": 40 - }, - { - "name": "null_route_cluster", - "weight": 10 - } - ] - } - }, - "match": { - "pathMatch": { - "prefix": "/split" - } - } - }, - { - "destination": { - "cluster": { - "name": "http.api-1.bar.dc1.internal.foo.consul" - }, - "destinationConfiguration": { - "retryPolicy": { - "numRetries": 4, - "retryOn": "connect-failure" - }, - "timeoutConfig": { - "timeout": "606s" - } - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - }, - { - "destination": { - "cluster": { - "name": "null_route_cluster" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - } - }, - "requiredEndpoints": { - "failover-target~1~http.api-1.bar.dc1.internal.foo.consul": { - "id": { - "name": "backup-1", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "http.api-1.bar.dc1.internal.foo.consul": { - "id": { - "name": "api-1", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "http.api-2.bar.dc1.internal.foo.consul": { - "id": { - "name": "api-2", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp.api-1.bar.dc1.internal.foo.consul": { - "id": { - "name": "api-1", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp.api-2.bar.dc1.internal.foo.consul": { - "id": { - "name": "api-2", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "bar", - "partition": "default" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/mixed-multi-destination-default-default.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/mixed-multi-destination-default-default.golden deleted file mode 100644 index cbd28e7a70a44..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/mixed-multi-destination-default-default.golden +++ /dev/null @@ -1,415 +0,0 @@ -{ - "proxyState": { - "clusters": { - "http.api-1.default.dc1.internal.foo.consul": { - "altStatName": "http.api-1.default.dc1.internal.foo.consul", - "failoverGroup": { - "config": { - "connectTimeout": "55s", - "useAltStatName": true - }, - "endpointGroups": [ - { - "dynamic": { - "config": { - "connectTimeout": "55s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~http" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-1.default.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/default/identity/api1-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - }, - "name": "failover-target~0~http.api-1.default.dc1.internal.foo.consul" - }, - { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~http" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "backup-1.default.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/default/identity/backup1-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - }, - "name": "failover-target~1~http.api-1.default.dc1.internal.foo.consul" - } - ] - }, - "name": "http.api-1.default.dc1.internal.foo.consul", - "protocol": "PROTOCOL_HTTP" - }, - "http.api-2.default.dc1.internal.foo.consul": { - "altStatName": "http.api-2.default.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~http" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-2.default.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/default/identity/api2-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "http.api-2.default.dc1.internal.foo.consul", - "protocol": "PROTOCOL_HTTP" - }, - "null_route_cluster": { - "endpointGroup": { - "static": { - "config": { - "connectTimeout": "10s" - } - } - }, - "name": "null_route_cluster", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-1.default.dc1.internal.foo.consul": { - "altStatName": "tcp.api-1.default.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-1.default.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/default/identity/api1-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-1.default.dc1.internal.foo.consul", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-2.default.dc1.internal.foo.consul": { - "altStatName": "tcp.api-2.default.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-2.default.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/default/identity/api2-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-2.default.dc1.internal.foo.consul", - "protocol": "PROTOCOL_TCP" - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "direction": "DIRECTION_OUTBOUND", - "hostPort": { - "host": "1.1.1.1", - "port": 1234 - }, - "name": "default/local/default/api-1:tcp:1.1.1.1:1234", - "routers": [ - { - "l4": { - "statPrefix": "upstream.tcp.api-1.default.default.dc1", - "weightedClusters": { - "clusters": [ - { - "name": "tcp.api-2.default.dc1.internal.foo.consul", - "weight": 60 - }, - { - "name": "tcp.api-1.default.dc1.internal.foo.consul", - "weight": 40 - }, - { - "name": "null_route_cluster", - "weight": 10 - } - ] - } - } - } - ] - }, - { - "direction": "DIRECTION_OUTBOUND", - "name": "default/local/default/api-2:tcp:/path/to/socket", - "routers": [ - { - "l4": { - "cluster": { - "name": "tcp.api-2.default.dc1.internal.foo.consul" - }, - "statPrefix": "upstream.tcp.api-2.default.default.dc1" - } - } - ], - "unixSocket": { - "mode": "0666", - "path": "/path/to/socket" - } - }, - { - "direction": "DIRECTION_OUTBOUND", - "hostPort": { - "host": "1.1.1.1", - "port": 1234 - }, - "name": "default/local/default/api-1:http:1.1.1.1:1234", - "routers": [ - { - "l7": { - "route": { - "name": "default/local/default/api-1:http:1.1.1.1:1234" - }, - "statPrefix": "upstream.http.api-1.default.default.dc1" - } - } - ] - } - ], - "routes": { - "default/local/default/api-1:http:1.1.1.1:1234": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "default/local/default/api-1:http:1.1.1.1:1234", - "routeRules": [ - { - "destination": { - "destinationConfiguration": { - "timeoutConfig": { - "timeout": "77s" - } - }, - "weightedClusters": { - "clusters": [ - { - "name": "http.api-2.default.dc1.internal.foo.consul", - "weight": 60 - }, - { - "name": "http.api-1.default.dc1.internal.foo.consul", - "weight": 40 - }, - { - "name": "null_route_cluster", - "weight": 10 - } - ] - } - }, - "match": { - "pathMatch": { - "prefix": "/split" - } - } - }, - { - "destination": { - "cluster": { - "name": "http.api-1.default.dc1.internal.foo.consul" - }, - "destinationConfiguration": { - "retryPolicy": { - "numRetries": 4, - "retryOn": "connect-failure" - }, - "timeoutConfig": { - "timeout": "606s" - } - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - }, - { - "destination": { - "cluster": { - "name": "null_route_cluster" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - } - }, - "requiredEndpoints": { - "failover-target~1~http.api-1.default.dc1.internal.foo.consul": { - "id": { - "name": "backup-1", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "http.api-1.default.dc1.internal.foo.consul": { - "id": { - "name": "api-1", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "http.api-2.default.dc1.internal.foo.consul": { - "id": { - "name": "api-2", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp.api-1.default.dc1.internal.foo.consul": { - "id": { - "name": "api-1", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp.api-2.default.dc1.internal.foo.consul": { - "id": { - "name": "api-2", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "default", - "partition": "default" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/mixed-multi-destination-foo-bar.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/mixed-multi-destination-foo-bar.golden deleted file mode 100644 index 8e69b843d76f5..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/mixed-multi-destination-foo-bar.golden +++ /dev/null @@ -1,415 +0,0 @@ -{ - "proxyState": { - "clusters": { - "http.api-1.bar.foo.dc1.internal-v1.foo.consul": { - "altStatName": "http.api-1.bar.foo.dc1.internal-v1.foo.consul", - "failoverGroup": { - "config": { - "connectTimeout": "55s", - "useAltStatName": true - }, - "endpointGroups": [ - { - "dynamic": { - "config": { - "connectTimeout": "55s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~http" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-1.bar.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/bar/identity/api1-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - }, - "name": "failover-target~0~http.api-1.bar.foo.dc1.internal-v1.foo.consul" - }, - { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~http" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "backup-1.bar.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/bar/identity/backup1-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - }, - "name": "failover-target~1~http.api-1.bar.foo.dc1.internal-v1.foo.consul" - } - ] - }, - "name": "http.api-1.bar.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_HTTP" - }, - "http.api-2.bar.foo.dc1.internal-v1.foo.consul": { - "altStatName": "http.api-2.bar.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~http" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-2.bar.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/bar/identity/api2-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "http.api-2.bar.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_HTTP" - }, - "null_route_cluster": { - "endpointGroup": { - "static": { - "config": { - "connectTimeout": "10s" - } - } - }, - "name": "null_route_cluster", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-1.bar.foo.dc1.internal-v1.foo.consul": { - "altStatName": "tcp.api-1.bar.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-1.bar.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/bar/identity/api1-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-1.bar.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-2.bar.foo.dc1.internal-v1.foo.consul": { - "altStatName": "tcp.api-2.bar.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-2.bar.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/bar/identity/api2-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-2.bar.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_TCP" - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "direction": "DIRECTION_OUTBOUND", - "hostPort": { - "host": "1.1.1.1", - "port": 1234 - }, - "name": "foo/local/bar/api-1:tcp:1.1.1.1:1234", - "routers": [ - { - "l4": { - "statPrefix": "upstream.tcp.api-1.bar.foo.dc1", - "weightedClusters": { - "clusters": [ - { - "name": "tcp.api-2.bar.foo.dc1.internal-v1.foo.consul", - "weight": 60 - }, - { - "name": "tcp.api-1.bar.foo.dc1.internal-v1.foo.consul", - "weight": 40 - }, - { - "name": "null_route_cluster", - "weight": 10 - } - ] - } - } - } - ] - }, - { - "direction": "DIRECTION_OUTBOUND", - "name": "foo/local/bar/api-2:tcp:/path/to/socket", - "routers": [ - { - "l4": { - "cluster": { - "name": "tcp.api-2.bar.foo.dc1.internal-v1.foo.consul" - }, - "statPrefix": "upstream.tcp.api-2.bar.foo.dc1" - } - } - ], - "unixSocket": { - "mode": "0666", - "path": "/path/to/socket" - } - }, - { - "direction": "DIRECTION_OUTBOUND", - "hostPort": { - "host": "1.1.1.1", - "port": 1234 - }, - "name": "foo/local/bar/api-1:http:1.1.1.1:1234", - "routers": [ - { - "l7": { - "route": { - "name": "foo/local/bar/api-1:http:1.1.1.1:1234" - }, - "statPrefix": "upstream.http.api-1.bar.foo.dc1" - } - } - ] - } - ], - "routes": { - "foo/local/bar/api-1:http:1.1.1.1:1234": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "foo/local/bar/api-1:http:1.1.1.1:1234", - "routeRules": [ - { - "destination": { - "destinationConfiguration": { - "timeoutConfig": { - "timeout": "77s" - } - }, - "weightedClusters": { - "clusters": [ - { - "name": "http.api-2.bar.foo.dc1.internal-v1.foo.consul", - "weight": 60 - }, - { - "name": "http.api-1.bar.foo.dc1.internal-v1.foo.consul", - "weight": 40 - }, - { - "name": "null_route_cluster", - "weight": 10 - } - ] - } - }, - "match": { - "pathMatch": { - "prefix": "/split" - } - } - }, - { - "destination": { - "cluster": { - "name": "http.api-1.bar.foo.dc1.internal-v1.foo.consul" - }, - "destinationConfiguration": { - "retryPolicy": { - "numRetries": 4, - "retryOn": "connect-failure" - }, - "timeoutConfig": { - "timeout": "606s" - } - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - }, - { - "destination": { - "cluster": { - "name": "null_route_cluster" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - } - }, - "requiredEndpoints": { - "failover-target~1~http.api-1.bar.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "backup-1", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "http.api-1.bar.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-1", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "http.api-2.bar.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-2", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp.api-1.bar.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-1", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp.api-2.bar.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-2", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "bar", - "partition": "foo" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/mixed-multi-destination-foo-default.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/mixed-multi-destination-foo-default.golden deleted file mode 100644 index 8dd309c84d145..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/mixed-multi-destination-foo-default.golden +++ /dev/null @@ -1,415 +0,0 @@ -{ - "proxyState": { - "clusters": { - "http.api-1.default.foo.dc1.internal-v1.foo.consul": { - "altStatName": "http.api-1.default.foo.dc1.internal-v1.foo.consul", - "failoverGroup": { - "config": { - "connectTimeout": "55s", - "useAltStatName": true - }, - "endpointGroups": [ - { - "dynamic": { - "config": { - "connectTimeout": "55s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~http" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-1.default.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/default/identity/api1-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - }, - "name": "failover-target~0~http.api-1.default.foo.dc1.internal-v1.foo.consul" - }, - { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~http" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "backup-1.default.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/default/identity/backup1-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - }, - "name": "failover-target~1~http.api-1.default.foo.dc1.internal-v1.foo.consul" - } - ] - }, - "name": "http.api-1.default.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_HTTP" - }, - "http.api-2.default.foo.dc1.internal-v1.foo.consul": { - "altStatName": "http.api-2.default.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~http" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-2.default.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/default/identity/api2-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "http.api-2.default.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_HTTP" - }, - "null_route_cluster": { - "endpointGroup": { - "static": { - "config": { - "connectTimeout": "10s" - } - } - }, - "name": "null_route_cluster", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-1.default.foo.dc1.internal-v1.foo.consul": { - "altStatName": "tcp.api-1.default.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-1.default.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/default/identity/api1-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-1.default.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-2.default.foo.dc1.internal-v1.foo.consul": { - "altStatName": "tcp.api-2.default.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-2.default.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/default/identity/api2-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-2.default.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_TCP" - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "direction": "DIRECTION_OUTBOUND", - "hostPort": { - "host": "1.1.1.1", - "port": 1234 - }, - "name": "foo/local/default/api-1:tcp:1.1.1.1:1234", - "routers": [ - { - "l4": { - "statPrefix": "upstream.tcp.api-1.default.foo.dc1", - "weightedClusters": { - "clusters": [ - { - "name": "tcp.api-2.default.foo.dc1.internal-v1.foo.consul", - "weight": 60 - }, - { - "name": "tcp.api-1.default.foo.dc1.internal-v1.foo.consul", - "weight": 40 - }, - { - "name": "null_route_cluster", - "weight": 10 - } - ] - } - } - } - ] - }, - { - "direction": "DIRECTION_OUTBOUND", - "name": "foo/local/default/api-2:tcp:/path/to/socket", - "routers": [ - { - "l4": { - "cluster": { - "name": "tcp.api-2.default.foo.dc1.internal-v1.foo.consul" - }, - "statPrefix": "upstream.tcp.api-2.default.foo.dc1" - } - } - ], - "unixSocket": { - "mode": "0666", - "path": "/path/to/socket" - } - }, - { - "direction": "DIRECTION_OUTBOUND", - "hostPort": { - "host": "1.1.1.1", - "port": 1234 - }, - "name": "foo/local/default/api-1:http:1.1.1.1:1234", - "routers": [ - { - "l7": { - "route": { - "name": "foo/local/default/api-1:http:1.1.1.1:1234" - }, - "statPrefix": "upstream.http.api-1.default.foo.dc1" - } - } - ] - } - ], - "routes": { - "foo/local/default/api-1:http:1.1.1.1:1234": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "foo/local/default/api-1:http:1.1.1.1:1234", - "routeRules": [ - { - "destination": { - "destinationConfiguration": { - "timeoutConfig": { - "timeout": "77s" - } - }, - "weightedClusters": { - "clusters": [ - { - "name": "http.api-2.default.foo.dc1.internal-v1.foo.consul", - "weight": 60 - }, - { - "name": "http.api-1.default.foo.dc1.internal-v1.foo.consul", - "weight": 40 - }, - { - "name": "null_route_cluster", - "weight": 10 - } - ] - } - }, - "match": { - "pathMatch": { - "prefix": "/split" - } - } - }, - { - "destination": { - "cluster": { - "name": "http.api-1.default.foo.dc1.internal-v1.foo.consul" - }, - "destinationConfiguration": { - "retryPolicy": { - "numRetries": 4, - "retryOn": "connect-failure" - }, - "timeoutConfig": { - "timeout": "606s" - } - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - }, - { - "destination": { - "cluster": { - "name": "null_route_cluster" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - } - }, - "requiredEndpoints": { - "failover-target~1~http.api-1.default.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "backup-1", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "http.api-1.default.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-1", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "http.api-2.default.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-2", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp.api-1.default.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-1", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp.api-2.default.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-2", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "default", - "partition": "foo" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/mixed-multi-destination.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/mixed-multi-destination.golden index cbd28e7a70a44..ca69db7dfcb0d 100644 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/mixed-multi-destination.golden +++ b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/mixed-multi-destination.golden @@ -234,7 +234,7 @@ "route": { "name": "default/local/default/api-1:http:1.1.1.1:1234" }, - "statPrefix": "upstream.http.api-1.default.default.dc1" + "statPrefix": "upstream." } } ] diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/multiport-l4-and-l7-multiple-implicit-destinations-tproxy-default-bar.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/multiport-l4-and-l7-multiple-implicit-destinations-tproxy-default-bar.golden deleted file mode 100644 index 332d7a1485aaf..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/multiport-l4-and-l7-multiple-implicit-destinations-tproxy-default-bar.golden +++ /dev/null @@ -1,495 +0,0 @@ -{ - "proxyState": { - "clusters": { - "http.api-app.bar.dc1.internal.foo.consul": { - "altStatName": "http.api-app.bar.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~http" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-app.bar.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/bar/identity/api-app-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "http.api-app.bar.dc1.internal.foo.consul", - "protocol": "PROTOCOL_HTTP" - }, - "http.api-app2.bar.dc1.internal.foo.consul": { - "altStatName": "http.api-app2.bar.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~http" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-app2.bar.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/bar/identity/api-app2-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "http.api-app2.bar.dc1.internal.foo.consul", - "protocol": "PROTOCOL_HTTP" - }, - "original-destination": { - "endpointGroup": { - "passthrough": { - "config": { - "connectTimeout": "5s" - } - } - }, - "name": "original-destination", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-app.bar.dc1.internal.foo.consul": { - "altStatName": "tcp.api-app.bar.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-app.bar.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/bar/identity/api-app-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-app.bar.dc1.internal.foo.consul", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-app2.bar.dc1.internal.foo.consul": { - "altStatName": "tcp.api-app2.bar.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-app2.bar.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/bar/identity/api-app2-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-app2.bar.dc1.internal.foo.consul", - "protocol": "PROTOCOL_TCP" - }, - "tcp2.api-app.bar.dc1.internal.foo.consul": { - "altStatName": "tcp2.api-app.bar.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp2" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-app.bar.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/bar/identity/api-app-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp2.api-app.bar.dc1.internal.foo.consul", - "protocol": "PROTOCOL_TCP" - }, - "tcp2.api-app2.bar.dc1.internal.foo.consul": { - "altStatName": "tcp2.api-app2.bar.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp2" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-app2.bar.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/bar/identity/api-app2-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp2.api-app2.bar.dc1.internal.foo.consul", - "protocol": "PROTOCOL_TCP" - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_TRANSPARENT" - ], - "defaultRouter": { - "l4": { - "cluster": { - "name": "original-destination" - }, - "statPrefix": "upstream.original-destination" - } - }, - "direction": "DIRECTION_OUTBOUND", - "hostPort": { - "host": "127.0.0.1", - "port": 15001 - }, - "name": "outbound_listener", - "routers": [ - { - "l4": { - "cluster": { - "name": "tcp.api-app.bar.dc1.internal.foo.consul" - }, - "statPrefix": "upstream.tcp.api-app.bar.default.dc1" - }, - "match": { - "destinationPort": 7070, - "prefixRanges": [ - { - "addressPrefix": "1.1.1.1", - "prefixLen": 32 - } - ] - } - }, - { - "l4": { - "cluster": { - "name": "tcp.api-app2.bar.dc1.internal.foo.consul" - }, - "statPrefix": "upstream.tcp.api-app2.bar.default.dc1" - }, - "match": { - "destinationPort": 7070, - "prefixRanges": [ - { - "addressPrefix": "2.2.2.2", - "prefixLen": 32 - }, - { - "addressPrefix": "3.3.3.3", - "prefixLen": 32 - } - ] - } - }, - { - "l7": { - "route": { - "name": "default/local/bar/api-app:http" - }, - "statPrefix": "upstream.http.api-app.bar.default.dc1" - }, - "match": { - "destinationPort": 8080, - "prefixRanges": [ - { - "addressPrefix": "1.1.1.1", - "prefixLen": 32 - } - ] - } - }, - { - "l7": { - "route": { - "name": "default/local/bar/api-app2:http" - }, - "statPrefix": "upstream.http.api-app2.bar.default.dc1" - }, - "match": { - "destinationPort": 8080, - "prefixRanges": [ - { - "addressPrefix": "2.2.2.2", - "prefixLen": 32 - }, - { - "addressPrefix": "3.3.3.3", - "prefixLen": 32 - } - ] - } - }, - { - "l4": { - "cluster": { - "name": "tcp2.api-app.bar.dc1.internal.foo.consul" - }, - "statPrefix": "upstream.tcp2.api-app.bar.default.dc1" - }, - "match": { - "destinationPort": 8081, - "prefixRanges": [ - { - "addressPrefix": "1.1.1.1", - "prefixLen": 32 - } - ] - } - }, - { - "l4": { - "cluster": { - "name": "tcp2.api-app2.bar.dc1.internal.foo.consul" - }, - "statPrefix": "upstream.tcp2.api-app2.bar.default.dc1" - }, - "match": { - "destinationPort": 8081, - "prefixRanges": [ - { - "addressPrefix": "2.2.2.2", - "prefixLen": 32 - }, - { - "addressPrefix": "3.3.3.3", - "prefixLen": 32 - } - ] - } - } - ] - } - ], - "routes": { - "default/local/bar/api-app2:http": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "default/local/bar/api-app2:http", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "http.api-app2.bar.dc1.internal.foo.consul" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "default/local/bar/api-app:http": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "default/local/bar/api-app:http", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "http.api-app.bar.dc1.internal.foo.consul" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - } - }, - "requiredEndpoints": { - "http.api-app.bar.dc1.internal.foo.consul": { - "id": { - "name": "api-app", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "http.api-app2.bar.dc1.internal.foo.consul": { - "id": { - "name": "api-app2", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp.api-app.bar.dc1.internal.foo.consul": { - "id": { - "name": "api-app", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp.api-app2.bar.dc1.internal.foo.consul": { - "id": { - "name": "api-app2", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp2.api-app.bar.dc1.internal.foo.consul": { - "id": { - "name": "api-app", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp2.api-app2.bar.dc1.internal.foo.consul": { - "id": { - "name": "api-app2", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "bar", - "partition": "default" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/multiport-l4-and-l7-multiple-implicit-destinations-tproxy-default-default.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/multiport-l4-and-l7-multiple-implicit-destinations-tproxy-default-default.golden deleted file mode 100644 index 94e8e1c21577d..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/multiport-l4-and-l7-multiple-implicit-destinations-tproxy-default-default.golden +++ /dev/null @@ -1,495 +0,0 @@ -{ - "proxyState": { - "clusters": { - "http.api-app.default.dc1.internal.foo.consul": { - "altStatName": "http.api-app.default.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~http" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-app.default.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/default/identity/api-app-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "http.api-app.default.dc1.internal.foo.consul", - "protocol": "PROTOCOL_HTTP" - }, - "http.api-app2.default.dc1.internal.foo.consul": { - "altStatName": "http.api-app2.default.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~http" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-app2.default.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/default/identity/api-app2-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "http.api-app2.default.dc1.internal.foo.consul", - "protocol": "PROTOCOL_HTTP" - }, - "original-destination": { - "endpointGroup": { - "passthrough": { - "config": { - "connectTimeout": "5s" - } - } - }, - "name": "original-destination", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-app.default.dc1.internal.foo.consul": { - "altStatName": "tcp.api-app.default.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-app.default.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/default/identity/api-app-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-app.default.dc1.internal.foo.consul", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-app2.default.dc1.internal.foo.consul": { - "altStatName": "tcp.api-app2.default.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-app2.default.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/default/identity/api-app2-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-app2.default.dc1.internal.foo.consul", - "protocol": "PROTOCOL_TCP" - }, - "tcp2.api-app.default.dc1.internal.foo.consul": { - "altStatName": "tcp2.api-app.default.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp2" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-app.default.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/default/identity/api-app-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp2.api-app.default.dc1.internal.foo.consul", - "protocol": "PROTOCOL_TCP" - }, - "tcp2.api-app2.default.dc1.internal.foo.consul": { - "altStatName": "tcp2.api-app2.default.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp2" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-app2.default.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/default/identity/api-app2-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp2.api-app2.default.dc1.internal.foo.consul", - "protocol": "PROTOCOL_TCP" - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_TRANSPARENT" - ], - "defaultRouter": { - "l4": { - "cluster": { - "name": "original-destination" - }, - "statPrefix": "upstream.original-destination" - } - }, - "direction": "DIRECTION_OUTBOUND", - "hostPort": { - "host": "127.0.0.1", - "port": 15001 - }, - "name": "outbound_listener", - "routers": [ - { - "l4": { - "cluster": { - "name": "tcp.api-app.default.dc1.internal.foo.consul" - }, - "statPrefix": "upstream.tcp.api-app.default.default.dc1" - }, - "match": { - "destinationPort": 7070, - "prefixRanges": [ - { - "addressPrefix": "1.1.1.1", - "prefixLen": 32 - } - ] - } - }, - { - "l4": { - "cluster": { - "name": "tcp.api-app2.default.dc1.internal.foo.consul" - }, - "statPrefix": "upstream.tcp.api-app2.default.default.dc1" - }, - "match": { - "destinationPort": 7070, - "prefixRanges": [ - { - "addressPrefix": "2.2.2.2", - "prefixLen": 32 - }, - { - "addressPrefix": "3.3.3.3", - "prefixLen": 32 - } - ] - } - }, - { - "l7": { - "route": { - "name": "default/local/default/api-app:http" - }, - "statPrefix": "upstream.http.api-app.default.default.dc1" - }, - "match": { - "destinationPort": 8080, - "prefixRanges": [ - { - "addressPrefix": "1.1.1.1", - "prefixLen": 32 - } - ] - } - }, - { - "l7": { - "route": { - "name": "default/local/default/api-app2:http" - }, - "statPrefix": "upstream.http.api-app2.default.default.dc1" - }, - "match": { - "destinationPort": 8080, - "prefixRanges": [ - { - "addressPrefix": "2.2.2.2", - "prefixLen": 32 - }, - { - "addressPrefix": "3.3.3.3", - "prefixLen": 32 - } - ] - } - }, - { - "l4": { - "cluster": { - "name": "tcp2.api-app.default.dc1.internal.foo.consul" - }, - "statPrefix": "upstream.tcp2.api-app.default.default.dc1" - }, - "match": { - "destinationPort": 8081, - "prefixRanges": [ - { - "addressPrefix": "1.1.1.1", - "prefixLen": 32 - } - ] - } - }, - { - "l4": { - "cluster": { - "name": "tcp2.api-app2.default.dc1.internal.foo.consul" - }, - "statPrefix": "upstream.tcp2.api-app2.default.default.dc1" - }, - "match": { - "destinationPort": 8081, - "prefixRanges": [ - { - "addressPrefix": "2.2.2.2", - "prefixLen": 32 - }, - { - "addressPrefix": "3.3.3.3", - "prefixLen": 32 - } - ] - } - } - ] - } - ], - "routes": { - "default/local/default/api-app2:http": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "default/local/default/api-app2:http", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "http.api-app2.default.dc1.internal.foo.consul" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "default/local/default/api-app:http": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "default/local/default/api-app:http", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "http.api-app.default.dc1.internal.foo.consul" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - } - }, - "requiredEndpoints": { - "http.api-app.default.dc1.internal.foo.consul": { - "id": { - "name": "api-app", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "http.api-app2.default.dc1.internal.foo.consul": { - "id": { - "name": "api-app2", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp.api-app.default.dc1.internal.foo.consul": { - "id": { - "name": "api-app", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp.api-app2.default.dc1.internal.foo.consul": { - "id": { - "name": "api-app2", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp2.api-app.default.dc1.internal.foo.consul": { - "id": { - "name": "api-app", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp2.api-app2.default.dc1.internal.foo.consul": { - "id": { - "name": "api-app2", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "default", - "partition": "default" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/multiport-l4-and-l7-multiple-implicit-destinations-tproxy-foo-bar.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/multiport-l4-and-l7-multiple-implicit-destinations-tproxy-foo-bar.golden deleted file mode 100644 index 9cd2ab07228a2..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/multiport-l4-and-l7-multiple-implicit-destinations-tproxy-foo-bar.golden +++ /dev/null @@ -1,495 +0,0 @@ -{ - "proxyState": { - "clusters": { - "http.api-app.bar.foo.dc1.internal-v1.foo.consul": { - "altStatName": "http.api-app.bar.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~http" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-app.bar.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/bar/identity/api-app-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "http.api-app.bar.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_HTTP" - }, - "http.api-app2.bar.foo.dc1.internal-v1.foo.consul": { - "altStatName": "http.api-app2.bar.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~http" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-app2.bar.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/bar/identity/api-app2-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "http.api-app2.bar.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_HTTP" - }, - "original-destination": { - "endpointGroup": { - "passthrough": { - "config": { - "connectTimeout": "5s" - } - } - }, - "name": "original-destination", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-app.bar.foo.dc1.internal-v1.foo.consul": { - "altStatName": "tcp.api-app.bar.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-app.bar.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/bar/identity/api-app-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-app.bar.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-app2.bar.foo.dc1.internal-v1.foo.consul": { - "altStatName": "tcp.api-app2.bar.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-app2.bar.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/bar/identity/api-app2-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-app2.bar.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_TCP" - }, - "tcp2.api-app.bar.foo.dc1.internal-v1.foo.consul": { - "altStatName": "tcp2.api-app.bar.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp2" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-app.bar.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/bar/identity/api-app-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp2.api-app.bar.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_TCP" - }, - "tcp2.api-app2.bar.foo.dc1.internal-v1.foo.consul": { - "altStatName": "tcp2.api-app2.bar.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp2" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-app2.bar.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/bar/identity/api-app2-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp2.api-app2.bar.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_TCP" - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_TRANSPARENT" - ], - "defaultRouter": { - "l4": { - "cluster": { - "name": "original-destination" - }, - "statPrefix": "upstream.original-destination" - } - }, - "direction": "DIRECTION_OUTBOUND", - "hostPort": { - "host": "127.0.0.1", - "port": 15001 - }, - "name": "outbound_listener", - "routers": [ - { - "l4": { - "cluster": { - "name": "tcp.api-app.bar.foo.dc1.internal-v1.foo.consul" - }, - "statPrefix": "upstream.tcp.api-app.bar.foo.dc1" - }, - "match": { - "destinationPort": 7070, - "prefixRanges": [ - { - "addressPrefix": "1.1.1.1", - "prefixLen": 32 - } - ] - } - }, - { - "l4": { - "cluster": { - "name": "tcp.api-app2.bar.foo.dc1.internal-v1.foo.consul" - }, - "statPrefix": "upstream.tcp.api-app2.bar.foo.dc1" - }, - "match": { - "destinationPort": 7070, - "prefixRanges": [ - { - "addressPrefix": "2.2.2.2", - "prefixLen": 32 - }, - { - "addressPrefix": "3.3.3.3", - "prefixLen": 32 - } - ] - } - }, - { - "l7": { - "route": { - "name": "foo/local/bar/api-app:http" - }, - "statPrefix": "upstream.http.api-app.bar.foo.dc1" - }, - "match": { - "destinationPort": 8080, - "prefixRanges": [ - { - "addressPrefix": "1.1.1.1", - "prefixLen": 32 - } - ] - } - }, - { - "l7": { - "route": { - "name": "foo/local/bar/api-app2:http" - }, - "statPrefix": "upstream.http.api-app2.bar.foo.dc1" - }, - "match": { - "destinationPort": 8080, - "prefixRanges": [ - { - "addressPrefix": "2.2.2.2", - "prefixLen": 32 - }, - { - "addressPrefix": "3.3.3.3", - "prefixLen": 32 - } - ] - } - }, - { - "l4": { - "cluster": { - "name": "tcp2.api-app.bar.foo.dc1.internal-v1.foo.consul" - }, - "statPrefix": "upstream.tcp2.api-app.bar.foo.dc1" - }, - "match": { - "destinationPort": 8081, - "prefixRanges": [ - { - "addressPrefix": "1.1.1.1", - "prefixLen": 32 - } - ] - } - }, - { - "l4": { - "cluster": { - "name": "tcp2.api-app2.bar.foo.dc1.internal-v1.foo.consul" - }, - "statPrefix": "upstream.tcp2.api-app2.bar.foo.dc1" - }, - "match": { - "destinationPort": 8081, - "prefixRanges": [ - { - "addressPrefix": "2.2.2.2", - "prefixLen": 32 - }, - { - "addressPrefix": "3.3.3.3", - "prefixLen": 32 - } - ] - } - } - ] - } - ], - "routes": { - "foo/local/bar/api-app2:http": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "foo/local/bar/api-app2:http", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "http.api-app2.bar.foo.dc1.internal-v1.foo.consul" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "foo/local/bar/api-app:http": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "foo/local/bar/api-app:http", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "http.api-app.bar.foo.dc1.internal-v1.foo.consul" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - } - }, - "requiredEndpoints": { - "http.api-app.bar.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-app", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "http.api-app2.bar.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-app2", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp.api-app.bar.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-app", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp.api-app2.bar.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-app2", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp2.api-app.bar.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-app", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp2.api-app2.bar.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-app2", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "bar", - "partition": "foo" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/multiport-l4-and-l7-multiple-implicit-destinations-tproxy-foo-default.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/multiport-l4-and-l7-multiple-implicit-destinations-tproxy-foo-default.golden deleted file mode 100644 index 6345d04a701b1..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/multiport-l4-and-l7-multiple-implicit-destinations-tproxy-foo-default.golden +++ /dev/null @@ -1,495 +0,0 @@ -{ - "proxyState": { - "clusters": { - "http.api-app.default.foo.dc1.internal-v1.foo.consul": { - "altStatName": "http.api-app.default.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~http" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-app.default.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/default/identity/api-app-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "http.api-app.default.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_HTTP" - }, - "http.api-app2.default.foo.dc1.internal-v1.foo.consul": { - "altStatName": "http.api-app2.default.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~http" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-app2.default.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/default/identity/api-app2-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "http.api-app2.default.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_HTTP" - }, - "original-destination": { - "endpointGroup": { - "passthrough": { - "config": { - "connectTimeout": "5s" - } - } - }, - "name": "original-destination", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-app.default.foo.dc1.internal-v1.foo.consul": { - "altStatName": "tcp.api-app.default.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-app.default.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/default/identity/api-app-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-app.default.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-app2.default.foo.dc1.internal-v1.foo.consul": { - "altStatName": "tcp.api-app2.default.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-app2.default.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/default/identity/api-app2-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-app2.default.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_TCP" - }, - "tcp2.api-app.default.foo.dc1.internal-v1.foo.consul": { - "altStatName": "tcp2.api-app.default.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp2" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-app.default.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/default/identity/api-app-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp2.api-app.default.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_TCP" - }, - "tcp2.api-app2.default.foo.dc1.internal-v1.foo.consul": { - "altStatName": "tcp2.api-app2.default.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp2" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-app2.default.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/default/identity/api-app2-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp2.api-app2.default.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_TCP" - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_TRANSPARENT" - ], - "defaultRouter": { - "l4": { - "cluster": { - "name": "original-destination" - }, - "statPrefix": "upstream.original-destination" - } - }, - "direction": "DIRECTION_OUTBOUND", - "hostPort": { - "host": "127.0.0.1", - "port": 15001 - }, - "name": "outbound_listener", - "routers": [ - { - "l4": { - "cluster": { - "name": "tcp.api-app.default.foo.dc1.internal-v1.foo.consul" - }, - "statPrefix": "upstream.tcp.api-app.default.foo.dc1" - }, - "match": { - "destinationPort": 7070, - "prefixRanges": [ - { - "addressPrefix": "1.1.1.1", - "prefixLen": 32 - } - ] - } - }, - { - "l4": { - "cluster": { - "name": "tcp.api-app2.default.foo.dc1.internal-v1.foo.consul" - }, - "statPrefix": "upstream.tcp.api-app2.default.foo.dc1" - }, - "match": { - "destinationPort": 7070, - "prefixRanges": [ - { - "addressPrefix": "2.2.2.2", - "prefixLen": 32 - }, - { - "addressPrefix": "3.3.3.3", - "prefixLen": 32 - } - ] - } - }, - { - "l7": { - "route": { - "name": "foo/local/default/api-app:http" - }, - "statPrefix": "upstream.http.api-app.default.foo.dc1" - }, - "match": { - "destinationPort": 8080, - "prefixRanges": [ - { - "addressPrefix": "1.1.1.1", - "prefixLen": 32 - } - ] - } - }, - { - "l7": { - "route": { - "name": "foo/local/default/api-app2:http" - }, - "statPrefix": "upstream.http.api-app2.default.foo.dc1" - }, - "match": { - "destinationPort": 8080, - "prefixRanges": [ - { - "addressPrefix": "2.2.2.2", - "prefixLen": 32 - }, - { - "addressPrefix": "3.3.3.3", - "prefixLen": 32 - } - ] - } - }, - { - "l4": { - "cluster": { - "name": "tcp2.api-app.default.foo.dc1.internal-v1.foo.consul" - }, - "statPrefix": "upstream.tcp2.api-app.default.foo.dc1" - }, - "match": { - "destinationPort": 8081, - "prefixRanges": [ - { - "addressPrefix": "1.1.1.1", - "prefixLen": 32 - } - ] - } - }, - { - "l4": { - "cluster": { - "name": "tcp2.api-app2.default.foo.dc1.internal-v1.foo.consul" - }, - "statPrefix": "upstream.tcp2.api-app2.default.foo.dc1" - }, - "match": { - "destinationPort": 8081, - "prefixRanges": [ - { - "addressPrefix": "2.2.2.2", - "prefixLen": 32 - }, - { - "addressPrefix": "3.3.3.3", - "prefixLen": 32 - } - ] - } - } - ] - } - ], - "routes": { - "foo/local/default/api-app2:http": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "foo/local/default/api-app2:http", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "http.api-app2.default.foo.dc1.internal-v1.foo.consul" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "foo/local/default/api-app:http": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "foo/local/default/api-app:http", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "http.api-app.default.foo.dc1.internal-v1.foo.consul" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - } - }, - "requiredEndpoints": { - "http.api-app.default.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-app", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "http.api-app2.default.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-app2", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp.api-app.default.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-app", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp.api-app2.default.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-app2", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp2.api-app.default.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-app", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp2.api-app2.default.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-app2", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "default", - "partition": "foo" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/multiport-l4-and-l7-multiple-implicit-destinations-tproxy.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/multiport-l4-and-l7-multiple-implicit-destinations-tproxy.golden index 94e8e1c21577d..3192629710d92 100644 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/multiport-l4-and-l7-multiple-implicit-destinations-tproxy.golden +++ b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/multiport-l4-and-l7-multiple-implicit-destinations-tproxy.golden @@ -1,8 +1,8 @@ { "proxyState": { "clusters": { - "http.api-app.default.dc1.internal.foo.consul": { - "altStatName": "http.api-app.default.dc1.internal.foo.consul", + "tcp2.api-app.default.dc1.internal.foo.consul": { + "altStatName": "tcp2.api-app.default.dc1.internal.foo.consul", "endpointGroup": { "dynamic": { "config": { @@ -11,7 +11,7 @@ }, "outboundTls": { "alpnProtocols": [ - "consul~http" + "consul~tcp2" ], "outboundMesh": { "identityKey": "test-identity", @@ -26,11 +26,11 @@ } } }, - "name": "http.api-app.default.dc1.internal.foo.consul", - "protocol": "PROTOCOL_HTTP" + "name": "tcp2.api-app.default.dc1.internal.foo.consul", + "protocol": "PROTOCOL_TCP" }, - "http.api-app2.default.dc1.internal.foo.consul": { - "altStatName": "http.api-app2.default.dc1.internal.foo.consul", + "tcp2.api-app2.default.dc1.internal.foo.consul": { + "altStatName": "tcp2.api-app2.default.dc1.internal.foo.consul", "endpointGroup": { "dynamic": { "config": { @@ -39,7 +39,7 @@ }, "outboundTls": { "alpnProtocols": [ - "consul~http" + "consul~tcp2" ], "outboundMesh": { "identityKey": "test-identity", @@ -54,22 +54,11 @@ } } }, - "name": "http.api-app2.default.dc1.internal.foo.consul", - "protocol": "PROTOCOL_HTTP" - }, - "original-destination": { - "endpointGroup": { - "passthrough": { - "config": { - "connectTimeout": "5s" - } - } - }, - "name": "original-destination", + "name": "tcp2.api-app2.default.dc1.internal.foo.consul", "protocol": "PROTOCOL_TCP" }, - "tcp.api-app.default.dc1.internal.foo.consul": { - "altStatName": "tcp.api-app.default.dc1.internal.foo.consul", + "http.api-app.default.dc1.internal.foo.consul": { + "altStatName": "http.api-app.default.dc1.internal.foo.consul", "endpointGroup": { "dynamic": { "config": { @@ -78,7 +67,7 @@ }, "outboundTls": { "alpnProtocols": [ - "consul~tcp" + "consul~http" ], "outboundMesh": { "identityKey": "test-identity", @@ -93,11 +82,11 @@ } } }, - "name": "tcp.api-app.default.dc1.internal.foo.consul", - "protocol": "PROTOCOL_TCP" + "name": "http.api-app.default.dc1.internal.foo.consul", + "protocol": "PROTOCOL_HTTP" }, - "tcp.api-app2.default.dc1.internal.foo.consul": { - "altStatName": "tcp.api-app2.default.dc1.internal.foo.consul", + "http.api-app2.default.dc1.internal.foo.consul": { + "altStatName": "http.api-app2.default.dc1.internal.foo.consul", "endpointGroup": { "dynamic": { "config": { @@ -106,7 +95,7 @@ }, "outboundTls": { "alpnProtocols": [ - "consul~tcp" + "consul~http" ], "outboundMesh": { "identityKey": "test-identity", @@ -121,11 +110,22 @@ } } }, - "name": "tcp.api-app2.default.dc1.internal.foo.consul", + "name": "http.api-app2.default.dc1.internal.foo.consul", + "protocol": "PROTOCOL_HTTP" + }, + "original-destination": { + "endpointGroup": { + "passthrough": { + "config": { + "connectTimeout": "5s" + } + } + }, + "name": "original-destination", "protocol": "PROTOCOL_TCP" }, - "tcp2.api-app.default.dc1.internal.foo.consul": { - "altStatName": "tcp2.api-app.default.dc1.internal.foo.consul", + "tcp.api-app.default.dc1.internal.foo.consul": { + "altStatName": "tcp.api-app.default.dc1.internal.foo.consul", "endpointGroup": { "dynamic": { "config": { @@ -134,7 +134,7 @@ }, "outboundTls": { "alpnProtocols": [ - "consul~tcp2" + "consul~tcp" ], "outboundMesh": { "identityKey": "test-identity", @@ -149,11 +149,11 @@ } } }, - "name": "tcp2.api-app.default.dc1.internal.foo.consul", + "name": "tcp.api-app.default.dc1.internal.foo.consul", "protocol": "PROTOCOL_TCP" }, - "tcp2.api-app2.default.dc1.internal.foo.consul": { - "altStatName": "tcp2.api-app2.default.dc1.internal.foo.consul", + "tcp.api-app2.default.dc1.internal.foo.consul": { + "altStatName": "tcp.api-app2.default.dc1.internal.foo.consul", "endpointGroup": { "dynamic": { "config": { @@ -162,7 +162,7 @@ }, "outboundTls": { "alpnProtocols": [ - "consul~tcp2" + "consul~tcp" ], "outboundMesh": { "identityKey": "test-identity", @@ -177,7 +177,7 @@ } } }, - "name": "tcp2.api-app2.default.dc1.internal.foo.consul", + "name": "tcp.api-app2.default.dc1.internal.foo.consul", "protocol": "PROTOCOL_TCP" } }, @@ -257,7 +257,7 @@ "route": { "name": "default/local/default/api-app:http" }, - "statPrefix": "upstream.http.api-app.default.default.dc1" + "statPrefix": "upstream." }, "match": { "destinationPort": 8080, @@ -274,7 +274,7 @@ "route": { "name": "default/local/default/api-app2:http" }, - "statPrefix": "upstream.http.api-app2.default.default.dc1" + "statPrefix": "upstream." }, "match": { "destinationPort": 8080, @@ -383,7 +383,7 @@ } }, "requiredEndpoints": { - "http.api-app.default.dc1.internal.foo.consul": { + "tcp2.api-app.default.dc1.internal.foo.consul": { "id": { "name": "api-app", "tenancy": { @@ -399,7 +399,7 @@ }, "port": "mesh" }, - "http.api-app2.default.dc1.internal.foo.consul": { + "tcp2.api-app2.default.dc1.internal.foo.consul": { "id": { "name": "api-app2", "tenancy": { @@ -415,7 +415,7 @@ }, "port": "mesh" }, - "tcp.api-app.default.dc1.internal.foo.consul": { + "http.api-app.default.dc1.internal.foo.consul": { "id": { "name": "api-app", "tenancy": { @@ -431,7 +431,7 @@ }, "port": "mesh" }, - "tcp.api-app2.default.dc1.internal.foo.consul": { + "http.api-app2.default.dc1.internal.foo.consul": { "id": { "name": "api-app2", "tenancy": { @@ -447,7 +447,7 @@ }, "port": "mesh" }, - "tcp2.api-app.default.dc1.internal.foo.consul": { + "tcp.api-app.default.dc1.internal.foo.consul": { "id": { "name": "api-app", "tenancy": { @@ -463,7 +463,7 @@ }, "port": "mesh" }, - "tcp2.api-app2.default.dc1.internal.foo.consul": { + "tcp.api-app2.default.dc1.internal.foo.consul": { "id": { "name": "api-app2", "tenancy": { diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/multiport-l4-and-l7-single-implicit-destination-tproxy-default-bar.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/multiport-l4-and-l7-single-implicit-destination-tproxy-default-bar.golden deleted file mode 100644 index 137a378492c02..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/multiport-l4-and-l7-single-implicit-destination-tproxy-default-bar.golden +++ /dev/null @@ -1,276 +0,0 @@ -{ - "proxyState": { - "clusters": { - "http.api-app.bar.dc1.internal.foo.consul": { - "altStatName": "http.api-app.bar.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~http" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-app.bar.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/bar/identity/api-app-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "http.api-app.bar.dc1.internal.foo.consul", - "protocol": "PROTOCOL_HTTP" - }, - "original-destination": { - "endpointGroup": { - "passthrough": { - "config": { - "connectTimeout": "5s" - } - } - }, - "name": "original-destination", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-app.bar.dc1.internal.foo.consul": { - "altStatName": "tcp.api-app.bar.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-app.bar.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/bar/identity/api-app-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-app.bar.dc1.internal.foo.consul", - "protocol": "PROTOCOL_TCP" - }, - "tcp2.api-app.bar.dc1.internal.foo.consul": { - "altStatName": "tcp2.api-app.bar.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp2" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-app.bar.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/bar/identity/api-app-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp2.api-app.bar.dc1.internal.foo.consul", - "protocol": "PROTOCOL_TCP" - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_TRANSPARENT" - ], - "defaultRouter": { - "l4": { - "cluster": { - "name": "original-destination" - }, - "statPrefix": "upstream.original-destination" - } - }, - "direction": "DIRECTION_OUTBOUND", - "hostPort": { - "host": "127.0.0.1", - "port": 15001 - }, - "name": "outbound_listener", - "routers": [ - { - "l4": { - "cluster": { - "name": "tcp.api-app.bar.dc1.internal.foo.consul" - }, - "statPrefix": "upstream.tcp.api-app.bar.default.dc1" - }, - "match": { - "destinationPort": 7070, - "prefixRanges": [ - { - "addressPrefix": "1.1.1.1", - "prefixLen": 32 - } - ] - } - }, - { - "l7": { - "route": { - "name": "default/local/bar/api-app:http" - }, - "statPrefix": "upstream.http.api-app.bar.default.dc1" - }, - "match": { - "destinationPort": 8080, - "prefixRanges": [ - { - "addressPrefix": "1.1.1.1", - "prefixLen": 32 - } - ] - } - }, - { - "l4": { - "cluster": { - "name": "tcp2.api-app.bar.dc1.internal.foo.consul" - }, - "statPrefix": "upstream.tcp2.api-app.bar.default.dc1" - }, - "match": { - "destinationPort": 8081, - "prefixRanges": [ - { - "addressPrefix": "1.1.1.1", - "prefixLen": 32 - } - ] - } - } - ] - } - ], - "routes": { - "default/local/bar/api-app:http": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "default/local/bar/api-app:http", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "http.api-app.bar.dc1.internal.foo.consul" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - } - }, - "requiredEndpoints": { - "http.api-app.bar.dc1.internal.foo.consul": { - "id": { - "name": "api-app", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp.api-app.bar.dc1.internal.foo.consul": { - "id": { - "name": "api-app", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp2.api-app.bar.dc1.internal.foo.consul": { - "id": { - "name": "api-app", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "bar", - "partition": "default" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/multiport-l4-and-l7-single-implicit-destination-tproxy-default-default.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/multiport-l4-and-l7-single-implicit-destination-tproxy-default-default.golden deleted file mode 100644 index 479a4e7aefd2f..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/multiport-l4-and-l7-single-implicit-destination-tproxy-default-default.golden +++ /dev/null @@ -1,276 +0,0 @@ -{ - "proxyState": { - "clusters": { - "http.api-app.default.dc1.internal.foo.consul": { - "altStatName": "http.api-app.default.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~http" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-app.default.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/default/identity/api-app-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "http.api-app.default.dc1.internal.foo.consul", - "protocol": "PROTOCOL_HTTP" - }, - "original-destination": { - "endpointGroup": { - "passthrough": { - "config": { - "connectTimeout": "5s" - } - } - }, - "name": "original-destination", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-app.default.dc1.internal.foo.consul": { - "altStatName": "tcp.api-app.default.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-app.default.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/default/identity/api-app-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-app.default.dc1.internal.foo.consul", - "protocol": "PROTOCOL_TCP" - }, - "tcp2.api-app.default.dc1.internal.foo.consul": { - "altStatName": "tcp2.api-app.default.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp2" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-app.default.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/default/identity/api-app-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp2.api-app.default.dc1.internal.foo.consul", - "protocol": "PROTOCOL_TCP" - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_TRANSPARENT" - ], - "defaultRouter": { - "l4": { - "cluster": { - "name": "original-destination" - }, - "statPrefix": "upstream.original-destination" - } - }, - "direction": "DIRECTION_OUTBOUND", - "hostPort": { - "host": "127.0.0.1", - "port": 15001 - }, - "name": "outbound_listener", - "routers": [ - { - "l4": { - "cluster": { - "name": "tcp.api-app.default.dc1.internal.foo.consul" - }, - "statPrefix": "upstream.tcp.api-app.default.default.dc1" - }, - "match": { - "destinationPort": 7070, - "prefixRanges": [ - { - "addressPrefix": "1.1.1.1", - "prefixLen": 32 - } - ] - } - }, - { - "l7": { - "route": { - "name": "default/local/default/api-app:http" - }, - "statPrefix": "upstream.http.api-app.default.default.dc1" - }, - "match": { - "destinationPort": 8080, - "prefixRanges": [ - { - "addressPrefix": "1.1.1.1", - "prefixLen": 32 - } - ] - } - }, - { - "l4": { - "cluster": { - "name": "tcp2.api-app.default.dc1.internal.foo.consul" - }, - "statPrefix": "upstream.tcp2.api-app.default.default.dc1" - }, - "match": { - "destinationPort": 8081, - "prefixRanges": [ - { - "addressPrefix": "1.1.1.1", - "prefixLen": 32 - } - ] - } - } - ] - } - ], - "routes": { - "default/local/default/api-app:http": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "default/local/default/api-app:http", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "http.api-app.default.dc1.internal.foo.consul" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - } - }, - "requiredEndpoints": { - "http.api-app.default.dc1.internal.foo.consul": { - "id": { - "name": "api-app", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp.api-app.default.dc1.internal.foo.consul": { - "id": { - "name": "api-app", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp2.api-app.default.dc1.internal.foo.consul": { - "id": { - "name": "api-app", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "default", - "partition": "default" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/multiport-l4-and-l7-single-implicit-destination-tproxy-foo-bar.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/multiport-l4-and-l7-single-implicit-destination-tproxy-foo-bar.golden deleted file mode 100644 index c0e83c41893ba..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/multiport-l4-and-l7-single-implicit-destination-tproxy-foo-bar.golden +++ /dev/null @@ -1,276 +0,0 @@ -{ - "proxyState": { - "clusters": { - "http.api-app.bar.foo.dc1.internal-v1.foo.consul": { - "altStatName": "http.api-app.bar.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~http" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-app.bar.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/bar/identity/api-app-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "http.api-app.bar.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_HTTP" - }, - "original-destination": { - "endpointGroup": { - "passthrough": { - "config": { - "connectTimeout": "5s" - } - } - }, - "name": "original-destination", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-app.bar.foo.dc1.internal-v1.foo.consul": { - "altStatName": "tcp.api-app.bar.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-app.bar.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/bar/identity/api-app-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-app.bar.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_TCP" - }, - "tcp2.api-app.bar.foo.dc1.internal-v1.foo.consul": { - "altStatName": "tcp2.api-app.bar.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp2" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-app.bar.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/bar/identity/api-app-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp2.api-app.bar.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_TCP" - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_TRANSPARENT" - ], - "defaultRouter": { - "l4": { - "cluster": { - "name": "original-destination" - }, - "statPrefix": "upstream.original-destination" - } - }, - "direction": "DIRECTION_OUTBOUND", - "hostPort": { - "host": "127.0.0.1", - "port": 15001 - }, - "name": "outbound_listener", - "routers": [ - { - "l4": { - "cluster": { - "name": "tcp.api-app.bar.foo.dc1.internal-v1.foo.consul" - }, - "statPrefix": "upstream.tcp.api-app.bar.foo.dc1" - }, - "match": { - "destinationPort": 7070, - "prefixRanges": [ - { - "addressPrefix": "1.1.1.1", - "prefixLen": 32 - } - ] - } - }, - { - "l7": { - "route": { - "name": "foo/local/bar/api-app:http" - }, - "statPrefix": "upstream.http.api-app.bar.foo.dc1" - }, - "match": { - "destinationPort": 8080, - "prefixRanges": [ - { - "addressPrefix": "1.1.1.1", - "prefixLen": 32 - } - ] - } - }, - { - "l4": { - "cluster": { - "name": "tcp2.api-app.bar.foo.dc1.internal-v1.foo.consul" - }, - "statPrefix": "upstream.tcp2.api-app.bar.foo.dc1" - }, - "match": { - "destinationPort": 8081, - "prefixRanges": [ - { - "addressPrefix": "1.1.1.1", - "prefixLen": 32 - } - ] - } - } - ] - } - ], - "routes": { - "foo/local/bar/api-app:http": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "foo/local/bar/api-app:http", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "http.api-app.bar.foo.dc1.internal-v1.foo.consul" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - } - }, - "requiredEndpoints": { - "http.api-app.bar.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-app", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp.api-app.bar.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-app", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp2.api-app.bar.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-app", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "bar", - "partition": "foo" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/multiport-l4-and-l7-single-implicit-destination-tproxy-foo-default.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/multiport-l4-and-l7-single-implicit-destination-tproxy-foo-default.golden deleted file mode 100644 index c6d0c28a34458..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/multiport-l4-and-l7-single-implicit-destination-tproxy-foo-default.golden +++ /dev/null @@ -1,276 +0,0 @@ -{ - "proxyState": { - "clusters": { - "http.api-app.default.foo.dc1.internal-v1.foo.consul": { - "altStatName": "http.api-app.default.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~http" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-app.default.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/default/identity/api-app-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "http.api-app.default.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_HTTP" - }, - "original-destination": { - "endpointGroup": { - "passthrough": { - "config": { - "connectTimeout": "5s" - } - } - }, - "name": "original-destination", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-app.default.foo.dc1.internal-v1.foo.consul": { - "altStatName": "tcp.api-app.default.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-app.default.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/default/identity/api-app-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-app.default.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_TCP" - }, - "tcp2.api-app.default.foo.dc1.internal-v1.foo.consul": { - "altStatName": "tcp2.api-app.default.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp2" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-app.default.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/default/identity/api-app-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp2.api-app.default.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_TCP" - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_TRANSPARENT" - ], - "defaultRouter": { - "l4": { - "cluster": { - "name": "original-destination" - }, - "statPrefix": "upstream.original-destination" - } - }, - "direction": "DIRECTION_OUTBOUND", - "hostPort": { - "host": "127.0.0.1", - "port": 15001 - }, - "name": "outbound_listener", - "routers": [ - { - "l4": { - "cluster": { - "name": "tcp.api-app.default.foo.dc1.internal-v1.foo.consul" - }, - "statPrefix": "upstream.tcp.api-app.default.foo.dc1" - }, - "match": { - "destinationPort": 7070, - "prefixRanges": [ - { - "addressPrefix": "1.1.1.1", - "prefixLen": 32 - } - ] - } - }, - { - "l7": { - "route": { - "name": "foo/local/default/api-app:http" - }, - "statPrefix": "upstream.http.api-app.default.foo.dc1" - }, - "match": { - "destinationPort": 8080, - "prefixRanges": [ - { - "addressPrefix": "1.1.1.1", - "prefixLen": 32 - } - ] - } - }, - { - "l4": { - "cluster": { - "name": "tcp2.api-app.default.foo.dc1.internal-v1.foo.consul" - }, - "statPrefix": "upstream.tcp2.api-app.default.foo.dc1" - }, - "match": { - "destinationPort": 8081, - "prefixRanges": [ - { - "addressPrefix": "1.1.1.1", - "prefixLen": 32 - } - ] - } - } - ] - } - ], - "routes": { - "foo/local/default/api-app:http": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "foo/local/default/api-app:http", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "http.api-app.default.foo.dc1.internal-v1.foo.consul" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - } - }, - "requiredEndpoints": { - "http.api-app.default.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-app", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp.api-app.default.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-app", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp2.api-app.default.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-app", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "default", - "partition": "foo" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/multiport-l4-and-l7-single-implicit-destination-tproxy.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/multiport-l4-and-l7-single-implicit-destination-tproxy.golden index 479a4e7aefd2f..2ab840e3da9bd 100644 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/multiport-l4-and-l7-single-implicit-destination-tproxy.golden +++ b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/multiport-l4-and-l7-single-implicit-destination-tproxy.golden @@ -1,8 +1,8 @@ { "proxyState": { "clusters": { - "http.api-app.default.dc1.internal.foo.consul": { - "altStatName": "http.api-app.default.dc1.internal.foo.consul", + "tcp2.api-app.default.dc1.internal.foo.consul": { + "altStatName": "tcp2.api-app.default.dc1.internal.foo.consul", "endpointGroup": { "dynamic": { "config": { @@ -11,7 +11,7 @@ }, "outboundTls": { "alpnProtocols": [ - "consul~http" + "consul~tcp2" ], "outboundMesh": { "identityKey": "test-identity", @@ -26,22 +26,11 @@ } } }, - "name": "http.api-app.default.dc1.internal.foo.consul", - "protocol": "PROTOCOL_HTTP" - }, - "original-destination": { - "endpointGroup": { - "passthrough": { - "config": { - "connectTimeout": "5s" - } - } - }, - "name": "original-destination", + "name": "tcp2.api-app.default.dc1.internal.foo.consul", "protocol": "PROTOCOL_TCP" }, - "tcp.api-app.default.dc1.internal.foo.consul": { - "altStatName": "tcp.api-app.default.dc1.internal.foo.consul", + "http.api-app.default.dc1.internal.foo.consul": { + "altStatName": "http.api-app.default.dc1.internal.foo.consul", "endpointGroup": { "dynamic": { "config": { @@ -50,7 +39,7 @@ }, "outboundTls": { "alpnProtocols": [ - "consul~tcp" + "consul~http" ], "outboundMesh": { "identityKey": "test-identity", @@ -65,11 +54,22 @@ } } }, - "name": "tcp.api-app.default.dc1.internal.foo.consul", + "name": "http.api-app.default.dc1.internal.foo.consul", + "protocol": "PROTOCOL_HTTP" + }, + "original-destination": { + "endpointGroup": { + "passthrough": { + "config": { + "connectTimeout": "5s" + } + } + }, + "name": "original-destination", "protocol": "PROTOCOL_TCP" }, - "tcp2.api-app.default.dc1.internal.foo.consul": { - "altStatName": "tcp2.api-app.default.dc1.internal.foo.consul", + "tcp.api-app.default.dc1.internal.foo.consul": { + "altStatName": "tcp.api-app.default.dc1.internal.foo.consul", "endpointGroup": { "dynamic": { "config": { @@ -78,7 +78,7 @@ }, "outboundTls": { "alpnProtocols": [ - "consul~tcp2" + "consul~tcp" ], "outboundMesh": { "identityKey": "test-identity", @@ -93,7 +93,7 @@ } } }, - "name": "tcp2.api-app.default.dc1.internal.foo.consul", + "name": "tcp.api-app.default.dc1.internal.foo.consul", "protocol": "PROTOCOL_TCP" } }, @@ -152,7 +152,7 @@ "route": { "name": "default/local/default/api-app:http" }, - "statPrefix": "upstream.http.api-app.default.default.dc1" + "statPrefix": "upstream." }, "match": { "destinationPort": 8080, @@ -212,7 +212,7 @@ } }, "requiredEndpoints": { - "http.api-app.default.dc1.internal.foo.consul": { + "tcp2.api-app.default.dc1.internal.foo.consul": { "id": { "name": "api-app", "tenancy": { @@ -228,7 +228,7 @@ }, "port": "mesh" }, - "tcp.api-app.default.dc1.internal.foo.consul": { + "http.api-app.default.dc1.internal.foo.consul": { "id": { "name": "api-app", "tenancy": { @@ -244,7 +244,7 @@ }, "port": "mesh" }, - "tcp2.api-app.default.dc1.internal.foo.consul": { + "tcp.api-app.default.dc1.internal.foo.consul": { "id": { "name": "api-app", "tenancy": { diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/multiport-l4-and-l7-single-implicit-destination-with-multiple-workloads-tproxy-default-bar.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/multiport-l4-and-l7-single-implicit-destination-with-multiple-workloads-tproxy-default-bar.golden deleted file mode 100644 index 137a378492c02..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/multiport-l4-and-l7-single-implicit-destination-with-multiple-workloads-tproxy-default-bar.golden +++ /dev/null @@ -1,276 +0,0 @@ -{ - "proxyState": { - "clusters": { - "http.api-app.bar.dc1.internal.foo.consul": { - "altStatName": "http.api-app.bar.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~http" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-app.bar.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/bar/identity/api-app-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "http.api-app.bar.dc1.internal.foo.consul", - "protocol": "PROTOCOL_HTTP" - }, - "original-destination": { - "endpointGroup": { - "passthrough": { - "config": { - "connectTimeout": "5s" - } - } - }, - "name": "original-destination", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-app.bar.dc1.internal.foo.consul": { - "altStatName": "tcp.api-app.bar.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-app.bar.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/bar/identity/api-app-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-app.bar.dc1.internal.foo.consul", - "protocol": "PROTOCOL_TCP" - }, - "tcp2.api-app.bar.dc1.internal.foo.consul": { - "altStatName": "tcp2.api-app.bar.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp2" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-app.bar.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/bar/identity/api-app-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp2.api-app.bar.dc1.internal.foo.consul", - "protocol": "PROTOCOL_TCP" - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_TRANSPARENT" - ], - "defaultRouter": { - "l4": { - "cluster": { - "name": "original-destination" - }, - "statPrefix": "upstream.original-destination" - } - }, - "direction": "DIRECTION_OUTBOUND", - "hostPort": { - "host": "127.0.0.1", - "port": 15001 - }, - "name": "outbound_listener", - "routers": [ - { - "l4": { - "cluster": { - "name": "tcp.api-app.bar.dc1.internal.foo.consul" - }, - "statPrefix": "upstream.tcp.api-app.bar.default.dc1" - }, - "match": { - "destinationPort": 7070, - "prefixRanges": [ - { - "addressPrefix": "1.1.1.1", - "prefixLen": 32 - } - ] - } - }, - { - "l7": { - "route": { - "name": "default/local/bar/api-app:http" - }, - "statPrefix": "upstream.http.api-app.bar.default.dc1" - }, - "match": { - "destinationPort": 8080, - "prefixRanges": [ - { - "addressPrefix": "1.1.1.1", - "prefixLen": 32 - } - ] - } - }, - { - "l4": { - "cluster": { - "name": "tcp2.api-app.bar.dc1.internal.foo.consul" - }, - "statPrefix": "upstream.tcp2.api-app.bar.default.dc1" - }, - "match": { - "destinationPort": 8081, - "prefixRanges": [ - { - "addressPrefix": "1.1.1.1", - "prefixLen": 32 - } - ] - } - } - ] - } - ], - "routes": { - "default/local/bar/api-app:http": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "default/local/bar/api-app:http", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "http.api-app.bar.dc1.internal.foo.consul" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - } - }, - "requiredEndpoints": { - "http.api-app.bar.dc1.internal.foo.consul": { - "id": { - "name": "api-app", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp.api-app.bar.dc1.internal.foo.consul": { - "id": { - "name": "api-app", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp2.api-app.bar.dc1.internal.foo.consul": { - "id": { - "name": "api-app", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "bar", - "partition": "default" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/multiport-l4-and-l7-single-implicit-destination-with-multiple-workloads-tproxy-default-default.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/multiport-l4-and-l7-single-implicit-destination-with-multiple-workloads-tproxy-default-default.golden deleted file mode 100644 index 479a4e7aefd2f..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/multiport-l4-and-l7-single-implicit-destination-with-multiple-workloads-tproxy-default-default.golden +++ /dev/null @@ -1,276 +0,0 @@ -{ - "proxyState": { - "clusters": { - "http.api-app.default.dc1.internal.foo.consul": { - "altStatName": "http.api-app.default.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~http" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-app.default.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/default/identity/api-app-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "http.api-app.default.dc1.internal.foo.consul", - "protocol": "PROTOCOL_HTTP" - }, - "original-destination": { - "endpointGroup": { - "passthrough": { - "config": { - "connectTimeout": "5s" - } - } - }, - "name": "original-destination", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-app.default.dc1.internal.foo.consul": { - "altStatName": "tcp.api-app.default.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-app.default.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/default/identity/api-app-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-app.default.dc1.internal.foo.consul", - "protocol": "PROTOCOL_TCP" - }, - "tcp2.api-app.default.dc1.internal.foo.consul": { - "altStatName": "tcp2.api-app.default.dc1.internal.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp2" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-app.default.dc1.internal.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/default/ns/default/identity/api-app-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp2.api-app.default.dc1.internal.foo.consul", - "protocol": "PROTOCOL_TCP" - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_TRANSPARENT" - ], - "defaultRouter": { - "l4": { - "cluster": { - "name": "original-destination" - }, - "statPrefix": "upstream.original-destination" - } - }, - "direction": "DIRECTION_OUTBOUND", - "hostPort": { - "host": "127.0.0.1", - "port": 15001 - }, - "name": "outbound_listener", - "routers": [ - { - "l4": { - "cluster": { - "name": "tcp.api-app.default.dc1.internal.foo.consul" - }, - "statPrefix": "upstream.tcp.api-app.default.default.dc1" - }, - "match": { - "destinationPort": 7070, - "prefixRanges": [ - { - "addressPrefix": "1.1.1.1", - "prefixLen": 32 - } - ] - } - }, - { - "l7": { - "route": { - "name": "default/local/default/api-app:http" - }, - "statPrefix": "upstream.http.api-app.default.default.dc1" - }, - "match": { - "destinationPort": 8080, - "prefixRanges": [ - { - "addressPrefix": "1.1.1.1", - "prefixLen": 32 - } - ] - } - }, - { - "l4": { - "cluster": { - "name": "tcp2.api-app.default.dc1.internal.foo.consul" - }, - "statPrefix": "upstream.tcp2.api-app.default.default.dc1" - }, - "match": { - "destinationPort": 8081, - "prefixRanges": [ - { - "addressPrefix": "1.1.1.1", - "prefixLen": 32 - } - ] - } - } - ] - } - ], - "routes": { - "default/local/default/api-app:http": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "default/local/default/api-app:http", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "http.api-app.default.dc1.internal.foo.consul" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - } - }, - "requiredEndpoints": { - "http.api-app.default.dc1.internal.foo.consul": { - "id": { - "name": "api-app", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp.api-app.default.dc1.internal.foo.consul": { - "id": { - "name": "api-app", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp2.api-app.default.dc1.internal.foo.consul": { - "id": { - "name": "api-app", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "default", - "partition": "default" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/multiport-l4-and-l7-single-implicit-destination-with-multiple-workloads-tproxy-foo-bar.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/multiport-l4-and-l7-single-implicit-destination-with-multiple-workloads-tproxy-foo-bar.golden deleted file mode 100644 index c0e83c41893ba..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/multiport-l4-and-l7-single-implicit-destination-with-multiple-workloads-tproxy-foo-bar.golden +++ /dev/null @@ -1,276 +0,0 @@ -{ - "proxyState": { - "clusters": { - "http.api-app.bar.foo.dc1.internal-v1.foo.consul": { - "altStatName": "http.api-app.bar.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~http" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-app.bar.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/bar/identity/api-app-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "http.api-app.bar.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_HTTP" - }, - "original-destination": { - "endpointGroup": { - "passthrough": { - "config": { - "connectTimeout": "5s" - } - } - }, - "name": "original-destination", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-app.bar.foo.dc1.internal-v1.foo.consul": { - "altStatName": "tcp.api-app.bar.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-app.bar.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/bar/identity/api-app-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-app.bar.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_TCP" - }, - "tcp2.api-app.bar.foo.dc1.internal-v1.foo.consul": { - "altStatName": "tcp2.api-app.bar.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp2" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-app.bar.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/bar/identity/api-app-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp2.api-app.bar.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_TCP" - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_TRANSPARENT" - ], - "defaultRouter": { - "l4": { - "cluster": { - "name": "original-destination" - }, - "statPrefix": "upstream.original-destination" - } - }, - "direction": "DIRECTION_OUTBOUND", - "hostPort": { - "host": "127.0.0.1", - "port": 15001 - }, - "name": "outbound_listener", - "routers": [ - { - "l4": { - "cluster": { - "name": "tcp.api-app.bar.foo.dc1.internal-v1.foo.consul" - }, - "statPrefix": "upstream.tcp.api-app.bar.foo.dc1" - }, - "match": { - "destinationPort": 7070, - "prefixRanges": [ - { - "addressPrefix": "1.1.1.1", - "prefixLen": 32 - } - ] - } - }, - { - "l7": { - "route": { - "name": "foo/local/bar/api-app:http" - }, - "statPrefix": "upstream.http.api-app.bar.foo.dc1" - }, - "match": { - "destinationPort": 8080, - "prefixRanges": [ - { - "addressPrefix": "1.1.1.1", - "prefixLen": 32 - } - ] - } - }, - { - "l4": { - "cluster": { - "name": "tcp2.api-app.bar.foo.dc1.internal-v1.foo.consul" - }, - "statPrefix": "upstream.tcp2.api-app.bar.foo.dc1" - }, - "match": { - "destinationPort": 8081, - "prefixRanges": [ - { - "addressPrefix": "1.1.1.1", - "prefixLen": 32 - } - ] - } - } - ] - } - ], - "routes": { - "foo/local/bar/api-app:http": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "foo/local/bar/api-app:http", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "http.api-app.bar.foo.dc1.internal-v1.foo.consul" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - } - }, - "requiredEndpoints": { - "http.api-app.bar.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-app", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp.api-app.bar.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-app", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp2.api-app.bar.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-app", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "bar", - "partition": "foo" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/multiport-l4-and-l7-single-implicit-destination-with-multiple-workloads-tproxy-foo-default.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/multiport-l4-and-l7-single-implicit-destination-with-multiple-workloads-tproxy-foo-default.golden deleted file mode 100644 index c6d0c28a34458..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/multiport-l4-and-l7-single-implicit-destination-with-multiple-workloads-tproxy-foo-default.golden +++ /dev/null @@ -1,276 +0,0 @@ -{ - "proxyState": { - "clusters": { - "http.api-app.default.foo.dc1.internal-v1.foo.consul": { - "altStatName": "http.api-app.default.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~http" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-app.default.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/default/identity/api-app-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "http.api-app.default.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_HTTP" - }, - "original-destination": { - "endpointGroup": { - "passthrough": { - "config": { - "connectTimeout": "5s" - } - } - }, - "name": "original-destination", - "protocol": "PROTOCOL_TCP" - }, - "tcp.api-app.default.foo.dc1.internal-v1.foo.consul": { - "altStatName": "tcp.api-app.default.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-app.default.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/default/identity/api-app-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp.api-app.default.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_TCP" - }, - "tcp2.api-app.default.foo.dc1.internal-v1.foo.consul": { - "altStatName": "tcp2.api-app.default.foo.dc1.internal-v1.foo.consul", - "endpointGroup": { - "dynamic": { - "config": { - "connectTimeout": "5s", - "disablePanicThreshold": true - }, - "outboundTls": { - "alpnProtocols": [ - "consul~tcp2" - ], - "outboundMesh": { - "identityKey": "test-identity", - "sni": "api-app.default.foo.dc1.internal-v1.foo.consul", - "validationContext": { - "spiffeIds": [ - "spiffe://foo.consul/ap/foo/ns/default/identity/api-app-identity" - ], - "trustBundlePeerNameKey": "local" - } - } - } - } - }, - "name": "tcp2.api-app.default.foo.dc1.internal-v1.foo.consul", - "protocol": "PROTOCOL_TCP" - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_TRANSPARENT" - ], - "defaultRouter": { - "l4": { - "cluster": { - "name": "original-destination" - }, - "statPrefix": "upstream.original-destination" - } - }, - "direction": "DIRECTION_OUTBOUND", - "hostPort": { - "host": "127.0.0.1", - "port": 15001 - }, - "name": "outbound_listener", - "routers": [ - { - "l4": { - "cluster": { - "name": "tcp.api-app.default.foo.dc1.internal-v1.foo.consul" - }, - "statPrefix": "upstream.tcp.api-app.default.foo.dc1" - }, - "match": { - "destinationPort": 7070, - "prefixRanges": [ - { - "addressPrefix": "1.1.1.1", - "prefixLen": 32 - } - ] - } - }, - { - "l7": { - "route": { - "name": "foo/local/default/api-app:http" - }, - "statPrefix": "upstream.http.api-app.default.foo.dc1" - }, - "match": { - "destinationPort": 8080, - "prefixRanges": [ - { - "addressPrefix": "1.1.1.1", - "prefixLen": 32 - } - ] - } - }, - { - "l4": { - "cluster": { - "name": "tcp2.api-app.default.foo.dc1.internal-v1.foo.consul" - }, - "statPrefix": "upstream.tcp2.api-app.default.foo.dc1" - }, - "match": { - "destinationPort": 8081, - "prefixRanges": [ - { - "addressPrefix": "1.1.1.1", - "prefixLen": 32 - } - ] - } - } - ] - } - ], - "routes": { - "foo/local/default/api-app:http": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "foo/local/default/api-app:http", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "http.api-app.default.foo.dc1.internal-v1.foo.consul" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - } - }, - "requiredEndpoints": { - "http.api-app.default.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-app", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp.api-app.default.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-app", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - }, - "tcp2.api-app.default.foo.dc1.internal-v1.foo.consul": { - "id": { - "name": "api-app", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "catalog", - "groupVersion": "v2beta1", - "kind": "ServiceEndpoints" - } - }, - "port": "mesh" - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "default", - "partition": "foo" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/multiport-l4-and-l7-single-implicit-destination-with-multiple-workloads-tproxy.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/multiport-l4-and-l7-single-implicit-destination-with-multiple-workloads-tproxy.golden index 479a4e7aefd2f..2ab840e3da9bd 100644 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/multiport-l4-and-l7-single-implicit-destination-with-multiple-workloads-tproxy.golden +++ b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/destination/multiport-l4-and-l7-single-implicit-destination-with-multiple-workloads-tproxy.golden @@ -1,8 +1,8 @@ { "proxyState": { "clusters": { - "http.api-app.default.dc1.internal.foo.consul": { - "altStatName": "http.api-app.default.dc1.internal.foo.consul", + "tcp2.api-app.default.dc1.internal.foo.consul": { + "altStatName": "tcp2.api-app.default.dc1.internal.foo.consul", "endpointGroup": { "dynamic": { "config": { @@ -11,7 +11,7 @@ }, "outboundTls": { "alpnProtocols": [ - "consul~http" + "consul~tcp2" ], "outboundMesh": { "identityKey": "test-identity", @@ -26,22 +26,11 @@ } } }, - "name": "http.api-app.default.dc1.internal.foo.consul", - "protocol": "PROTOCOL_HTTP" - }, - "original-destination": { - "endpointGroup": { - "passthrough": { - "config": { - "connectTimeout": "5s" - } - } - }, - "name": "original-destination", + "name": "tcp2.api-app.default.dc1.internal.foo.consul", "protocol": "PROTOCOL_TCP" }, - "tcp.api-app.default.dc1.internal.foo.consul": { - "altStatName": "tcp.api-app.default.dc1.internal.foo.consul", + "http.api-app.default.dc1.internal.foo.consul": { + "altStatName": "http.api-app.default.dc1.internal.foo.consul", "endpointGroup": { "dynamic": { "config": { @@ -50,7 +39,7 @@ }, "outboundTls": { "alpnProtocols": [ - "consul~tcp" + "consul~http" ], "outboundMesh": { "identityKey": "test-identity", @@ -65,11 +54,22 @@ } } }, - "name": "tcp.api-app.default.dc1.internal.foo.consul", + "name": "http.api-app.default.dc1.internal.foo.consul", + "protocol": "PROTOCOL_HTTP" + }, + "original-destination": { + "endpointGroup": { + "passthrough": { + "config": { + "connectTimeout": "5s" + } + } + }, + "name": "original-destination", "protocol": "PROTOCOL_TCP" }, - "tcp2.api-app.default.dc1.internal.foo.consul": { - "altStatName": "tcp2.api-app.default.dc1.internal.foo.consul", + "tcp.api-app.default.dc1.internal.foo.consul": { + "altStatName": "tcp.api-app.default.dc1.internal.foo.consul", "endpointGroup": { "dynamic": { "config": { @@ -78,7 +78,7 @@ }, "outboundTls": { "alpnProtocols": [ - "consul~tcp2" + "consul~tcp" ], "outboundMesh": { "identityKey": "test-identity", @@ -93,7 +93,7 @@ } } }, - "name": "tcp2.api-app.default.dc1.internal.foo.consul", + "name": "tcp.api-app.default.dc1.internal.foo.consul", "protocol": "PROTOCOL_TCP" } }, @@ -152,7 +152,7 @@ "route": { "name": "default/local/default/api-app:http" }, - "statPrefix": "upstream.http.api-app.default.default.dc1" + "statPrefix": "upstream." }, "match": { "destinationPort": 8080, @@ -212,7 +212,7 @@ } }, "requiredEndpoints": { - "http.api-app.default.dc1.internal.foo.consul": { + "tcp2.api-app.default.dc1.internal.foo.consul": { "id": { "name": "api-app", "tenancy": { @@ -228,7 +228,7 @@ }, "port": "mesh" }, - "tcp.api-app.default.dc1.internal.foo.consul": { + "http.api-app.default.dc1.internal.foo.consul": { "id": { "name": "api-app", "tenancy": { @@ -244,7 +244,7 @@ }, "port": "mesh" }, - "tcp2.api-app.default.dc1.internal.foo.consul": { + "tcp.api-app.default.dc1.internal.foo.consul": { "id": { "name": "api-app", "tenancy": { diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l4-multiple-workload-addresses-with-specific-ports-default-default.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/l4-multiple-workload-addresses-with-specific-ports.golden similarity index 57% rename from internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l4-multiple-workload-addresses-with-specific-ports-default-default.golden rename to internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/l4-multiple-workload-addresses-with-specific-ports.golden index 93a69b2bb033a..95ee222f3d26d 100644 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l4-multiple-workload-addresses-with-specific-ports-default-default.golden +++ b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/l4-multiple-workload-addresses-with-specific-ports.golden @@ -1,23 +1,16 @@ { "proxyState": { "clusters": { - "local_app:admin-port": { + "local_app:port1": { "endpointGroup": { "static": {} }, - "name": "local_app:admin-port", - "protocol": "PROTOCOL_TCP" - }, - "local_app:api-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:api-port", + "name": "local_app:port1", "protocol": "PROTOCOL_TCP" } }, "endpoints": { - "local_app:admin-port": { + "local_app:port1": { "endpoints": [ { "hostPort": { @@ -26,16 +19,6 @@ } } ] - }, - "local_app:api-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 9090 - } - } - ] } }, "identity": { @@ -58,7 +41,7 @@ ], "direction": "DIRECTION_INBOUND", "hostPort": { - "host": "10.0.0.3", + "host": "10.0.0.2", "port": 20000 }, "name": "public_listener", @@ -76,38 +59,26 @@ }, "l4": { "cluster": { - "name": "local_app:admin-port" + "name": "local_app:port1" }, "statPrefix": "public_listener", - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~admin-port" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } + "trafficPermissions": { + "allowPermissions": [ + { + "principals": [ + { + "spiffe": { + "regex": "^spiffe://foo.consul/ap/default/ns/default/identity/foo$" + } + } + ] + } + ] } }, - "l4": { - "cluster": { - "name": "local_app:api-port" - }, - "statPrefix": "public_listener", - "trafficPermissions": {} - }, "match": { "alpnProtocols": [ - "consul~api-port" + "consul~port1" ] } } diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l4-single-workload-address-without-ports-default-default.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/l4-multiple-workload-addresses-without-ports.golden similarity index 59% rename from internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l4-single-workload-address-without-ports-default-default.golden rename to internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/l4-multiple-workload-addresses-without-ports.golden index 3831349ccdbd5..0cb52d9921557 100644 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l4-single-workload-address-without-ports-default-default.golden +++ b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/l4-multiple-workload-addresses-without-ports.golden @@ -1,23 +1,16 @@ { "proxyState": { "clusters": { - "local_app:admin-port": { + "local_app:port1": { "endpointGroup": { "static": {} }, - "name": "local_app:admin-port", - "protocol": "PROTOCOL_TCP" - }, - "local_app:api-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:api-port", + "name": "local_app:port1", "protocol": "PROTOCOL_TCP" } }, "endpoints": { - "local_app:admin-port": { + "local_app:port1": { "endpoints": [ { "hostPort": { @@ -26,16 +19,6 @@ } } ] - }, - "local_app:api-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 9090 - } - } - ] } }, "identity": { @@ -76,38 +59,14 @@ }, "l4": { "cluster": { - "name": "local_app:admin-port" - }, - "statPrefix": "public_listener", - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~admin-port" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l4": { - "cluster": { - "name": "local_app:api-port" + "name": "local_app:port1" }, "statPrefix": "public_listener", "trafficPermissions": {} }, "match": { "alpnProtocols": [ - "consul~api-port" + "consul~port1" ] } } diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l4-multiple-workload-addresses-without-ports-default-default.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/l4-single-workload-address-without-ports.golden similarity index 59% rename from internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l4-multiple-workload-addresses-without-ports-default-default.golden rename to internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/l4-single-workload-address-without-ports.golden index 3831349ccdbd5..0cb52d9921557 100644 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l4-multiple-workload-addresses-without-ports-default-default.golden +++ b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/l4-single-workload-address-without-ports.golden @@ -1,23 +1,16 @@ { "proxyState": { "clusters": { - "local_app:admin-port": { + "local_app:port1": { "endpointGroup": { "static": {} }, - "name": "local_app:admin-port", - "protocol": "PROTOCOL_TCP" - }, - "local_app:api-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:api-port", + "name": "local_app:port1", "protocol": "PROTOCOL_TCP" } }, "endpoints": { - "local_app:admin-port": { + "local_app:port1": { "endpoints": [ { "hostPort": { @@ -26,16 +19,6 @@ } } ] - }, - "local_app:api-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 9090 - } - } - ] } }, "identity": { @@ -76,38 +59,14 @@ }, "l4": { "cluster": { - "name": "local_app:admin-port" - }, - "statPrefix": "public_listener", - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~admin-port" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l4": { - "cluster": { - "name": "local_app:api-port" + "name": "local_app:port1" }, "statPrefix": "public_listener", "trafficPermissions": {} }, "match": { "alpnProtocols": [ - "consul~api-port" + "consul~port1" ] } } diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/l7-expose-paths-default-bar.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/l7-expose-paths-default-bar.golden deleted file mode 100644 index 69a9d49fd30f6..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/l7-expose-paths-default-bar.golden +++ /dev/null @@ -1,212 +0,0 @@ -{ - "proxyState": { - "clusters": { - "exposed_cluster_9090": { - "endpointGroup": { - "static": {} - }, - "name": "exposed_cluster_9090", - "protocol": "PROTOCOL_HTTP" - }, - "exposed_cluster_9091": { - "endpointGroup": { - "static": {} - }, - "name": "exposed_cluster_9091", - "protocol": "PROTOCOL_HTTP2" - }, - "local_app:port1": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:port1", - "protocol": "PROTOCOL_TCP" - } - }, - "endpoints": { - "exposed_cluster_9090": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 9090 - } - } - ] - }, - "exposed_cluster_9091": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 9091 - } - } - ] - }, - "local_app:port1": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8080 - } - } - ] - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l4": { - "cluster": { - "name": "local_app:port1" - }, - "statPrefix": "public_listener", - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~port1" - ] - } - } - ] - }, - { - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 1234 - }, - "name": "exposed_path_health1234", - "routers": [ - { - "l7": { - "route": { - "name": "exposed_path_route_health1234" - }, - "statPrefix": "exposed_path_route_health1234", - "staticRoute": true - } - } - ] - }, - { - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 1235 - }, - "name": "exposed_path_GetHealth1235", - "routers": [ - { - "l7": { - "protocol": "L7_PROTOCOL_HTTP2", - "route": { - "name": "exposed_path_route_GetHealth1235" - }, - "statPrefix": "exposed_path_route_GetHealth1235", - "staticRoute": true - } - } - ] - } - ], - "routes": { - "exposed_path_route_GetHealth1235": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "exposed_path_route_GetHealth1235", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "exposed_cluster_9091" - } - }, - "match": { - "pathMatch": { - "exact": "GetHealth" - } - } - } - ] - } - ] - }, - "exposed_path_route_health1234": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "exposed_path_route_health1234", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "exposed_cluster_9090" - } - }, - "match": { - "pathMatch": { - "exact": "/health" - } - } - } - ] - } - ] - } - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "bar", - "partition": "default" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/l7-expose-paths-default-default.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/l7-expose-paths-default-default.golden deleted file mode 100644 index 2af5ce9c06d43..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/l7-expose-paths-default-default.golden +++ /dev/null @@ -1,212 +0,0 @@ -{ - "proxyState": { - "clusters": { - "exposed_cluster_9090": { - "endpointGroup": { - "static": {} - }, - "name": "exposed_cluster_9090", - "protocol": "PROTOCOL_HTTP" - }, - "exposed_cluster_9091": { - "endpointGroup": { - "static": {} - }, - "name": "exposed_cluster_9091", - "protocol": "PROTOCOL_HTTP2" - }, - "local_app:port1": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:port1", - "protocol": "PROTOCOL_TCP" - } - }, - "endpoints": { - "exposed_cluster_9090": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 9090 - } - } - ] - }, - "exposed_cluster_9091": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 9091 - } - } - ] - }, - "local_app:port1": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8080 - } - } - ] - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l4": { - "cluster": { - "name": "local_app:port1" - }, - "statPrefix": "public_listener", - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~port1" - ] - } - } - ] - }, - { - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 1234 - }, - "name": "exposed_path_health1234", - "routers": [ - { - "l7": { - "route": { - "name": "exposed_path_route_health1234" - }, - "statPrefix": "exposed_path_route_health1234", - "staticRoute": true - } - } - ] - }, - { - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 1235 - }, - "name": "exposed_path_GetHealth1235", - "routers": [ - { - "l7": { - "protocol": "L7_PROTOCOL_HTTP2", - "route": { - "name": "exposed_path_route_GetHealth1235" - }, - "statPrefix": "exposed_path_route_GetHealth1235", - "staticRoute": true - } - } - ] - } - ], - "routes": { - "exposed_path_route_GetHealth1235": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "exposed_path_route_GetHealth1235", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "exposed_cluster_9091" - } - }, - "match": { - "pathMatch": { - "exact": "GetHealth" - } - } - } - ] - } - ] - }, - "exposed_path_route_health1234": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "exposed_path_route_health1234", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "exposed_cluster_9090" - } - }, - "match": { - "pathMatch": { - "exact": "/health" - } - } - } - ] - } - ] - } - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "default", - "partition": "default" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/l7-expose-paths-foo-bar.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/l7-expose-paths-foo-bar.golden deleted file mode 100644 index 4236759182389..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/l7-expose-paths-foo-bar.golden +++ /dev/null @@ -1,212 +0,0 @@ -{ - "proxyState": { - "clusters": { - "exposed_cluster_9090": { - "endpointGroup": { - "static": {} - }, - "name": "exposed_cluster_9090", - "protocol": "PROTOCOL_HTTP" - }, - "exposed_cluster_9091": { - "endpointGroup": { - "static": {} - }, - "name": "exposed_cluster_9091", - "protocol": "PROTOCOL_HTTP2" - }, - "local_app:port1": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:port1", - "protocol": "PROTOCOL_TCP" - } - }, - "endpoints": { - "exposed_cluster_9090": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 9090 - } - } - ] - }, - "exposed_cluster_9091": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 9091 - } - } - ] - }, - "local_app:port1": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8080 - } - } - ] - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l4": { - "cluster": { - "name": "local_app:port1" - }, - "statPrefix": "public_listener", - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~port1" - ] - } - } - ] - }, - { - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 1234 - }, - "name": "exposed_path_health1234", - "routers": [ - { - "l7": { - "route": { - "name": "exposed_path_route_health1234" - }, - "statPrefix": "exposed_path_route_health1234", - "staticRoute": true - } - } - ] - }, - { - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 1235 - }, - "name": "exposed_path_GetHealth1235", - "routers": [ - { - "l7": { - "protocol": "L7_PROTOCOL_HTTP2", - "route": { - "name": "exposed_path_route_GetHealth1235" - }, - "statPrefix": "exposed_path_route_GetHealth1235", - "staticRoute": true - } - } - ] - } - ], - "routes": { - "exposed_path_route_GetHealth1235": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "exposed_path_route_GetHealth1235", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "exposed_cluster_9091" - } - }, - "match": { - "pathMatch": { - "exact": "GetHealth" - } - } - } - ] - } - ] - }, - "exposed_path_route_health1234": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "exposed_path_route_health1234", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "exposed_cluster_9090" - } - }, - "match": { - "pathMatch": { - "exact": "/health" - } - } - } - ] - } - ] - } - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "bar", - "partition": "foo" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/l7-expose-paths-foo-default.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/l7-expose-paths-foo-default.golden deleted file mode 100644 index 769e098e2cf3f..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/l7-expose-paths-foo-default.golden +++ /dev/null @@ -1,212 +0,0 @@ -{ - "proxyState": { - "clusters": { - "exposed_cluster_9090": { - "endpointGroup": { - "static": {} - }, - "name": "exposed_cluster_9090", - "protocol": "PROTOCOL_HTTP" - }, - "exposed_cluster_9091": { - "endpointGroup": { - "static": {} - }, - "name": "exposed_cluster_9091", - "protocol": "PROTOCOL_HTTP2" - }, - "local_app:port1": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:port1", - "protocol": "PROTOCOL_TCP" - } - }, - "endpoints": { - "exposed_cluster_9090": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 9090 - } - } - ] - }, - "exposed_cluster_9091": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 9091 - } - } - ] - }, - "local_app:port1": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8080 - } - } - ] - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l4": { - "cluster": { - "name": "local_app:port1" - }, - "statPrefix": "public_listener", - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~port1" - ] - } - } - ] - }, - { - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 1234 - }, - "name": "exposed_path_health1234", - "routers": [ - { - "l7": { - "route": { - "name": "exposed_path_route_health1234" - }, - "statPrefix": "exposed_path_route_health1234", - "staticRoute": true - } - } - ] - }, - { - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 1235 - }, - "name": "exposed_path_GetHealth1235", - "routers": [ - { - "l7": { - "protocol": "L7_PROTOCOL_HTTP2", - "route": { - "name": "exposed_path_route_GetHealth1235" - }, - "statPrefix": "exposed_path_route_GetHealth1235", - "staticRoute": true - } - } - ] - } - ], - "routes": { - "exposed_path_route_GetHealth1235": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "exposed_path_route_GetHealth1235", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "exposed_cluster_9091" - } - }, - "match": { - "pathMatch": { - "exact": "GetHealth" - } - } - } - ] - } - ] - }, - "exposed_path_route_health1234": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "exposed_path_route_health1234", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "exposed_cluster_9090" - } - }, - "match": { - "pathMatch": { - "exact": "/health" - } - } - } - ] - } - ] - } - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "default", - "partition": "foo" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/local-and-inbound-connections-default-bar.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/local-and-inbound-connections-default-bar.golden deleted file mode 100644 index cd42af38430d7..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/local-and-inbound-connections-default-bar.golden +++ /dev/null @@ -1,304 +0,0 @@ -{ - "proxyState": { - "clusters": { - "exposed_cluster_9090": { - "endpointGroup": { - "static": {} - }, - "name": "exposed_cluster_9090", - "protocol": "PROTOCOL_HTTP" - }, - "exposed_cluster_9091": { - "endpointGroup": { - "static": {} - }, - "name": "exposed_cluster_9091", - "protocol": "PROTOCOL_HTTP2" - }, - "local_app:port1": { - "endpointGroup": { - "static": { - "config": { - "circuitBreakers": { - "upstreamLimits": { - "maxConnections": 123 - } - }, - "connectTimeout": "6s" - } - } - }, - "name": "local_app:port1", - "protocol": "PROTOCOL_TCP" - }, - "local_app:port3": { - "endpointGroup": { - "static": { - "config": { - "circuitBreakers": { - "upstreamLimits": { - "maxConnections": 123 - } - }, - "connectTimeout": "8s" - } - } - }, - "name": "local_app:port3", - "protocol": "PROTOCOL_HTTP" - } - }, - "endpoints": { - "exposed_cluster_9090": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 9090 - } - } - ] - }, - "exposed_cluster_9091": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 9091 - } - } - ] - }, - "local_app:port1": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8080 - } - } - ] - }, - "local_app:port3": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8081 - } - } - ] - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "balanceConnections": "BALANCE_CONNECTIONS_EXACT", - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l4": { - "cluster": { - "name": "local_app:port1" - }, - "maxInboundConnections": "123", - "statPrefix": "public_listener", - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~port1" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "maxInboundConnections": "123", - "route": { - "name": "public_listener:port3" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~port3" - ] - } - } - ] - }, - { - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 1234 - }, - "name": "exposed_path_health1234", - "routers": [ - { - "l7": { - "route": { - "name": "exposed_path_route_health1234" - }, - "statPrefix": "exposed_path_route_health1234", - "staticRoute": true - } - } - ] - }, - { - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 1235 - }, - "name": "exposed_path_GetHealth1235", - "routers": [ - { - "l7": { - "protocol": "L7_PROTOCOL_HTTP2", - "route": { - "name": "exposed_path_route_GetHealth1235" - }, - "statPrefix": "exposed_path_route_GetHealth1235", - "staticRoute": true - } - } - ] - } - ], - "routes": { - "exposed_path_route_GetHealth1235": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "exposed_path_route_GetHealth1235", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "exposed_cluster_9091" - } - }, - "match": { - "pathMatch": { - "exact": "GetHealth" - } - } - } - ] - } - ] - }, - "exposed_path_route_health1234": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "exposed_path_route_health1234", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "exposed_cluster_9090" - } - }, - "match": { - "pathMatch": { - "exact": "/health" - } - } - } - ] - } - ] - }, - "public_listener:port3": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:port3", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:port3" - }, - "destinationConfiguration": { - "timeoutConfig": { - "timeout": "9s" - } - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "bar", - "partition": "default" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/local-and-inbound-connections-default-default.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/local-and-inbound-connections-default-default.golden deleted file mode 100644 index 299b051ef69d4..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/local-and-inbound-connections-default-default.golden +++ /dev/null @@ -1,304 +0,0 @@ -{ - "proxyState": { - "clusters": { - "exposed_cluster_9090": { - "endpointGroup": { - "static": {} - }, - "name": "exposed_cluster_9090", - "protocol": "PROTOCOL_HTTP" - }, - "exposed_cluster_9091": { - "endpointGroup": { - "static": {} - }, - "name": "exposed_cluster_9091", - "protocol": "PROTOCOL_HTTP2" - }, - "local_app:port1": { - "endpointGroup": { - "static": { - "config": { - "circuitBreakers": { - "upstreamLimits": { - "maxConnections": 123 - } - }, - "connectTimeout": "6s" - } - } - }, - "name": "local_app:port1", - "protocol": "PROTOCOL_TCP" - }, - "local_app:port3": { - "endpointGroup": { - "static": { - "config": { - "circuitBreakers": { - "upstreamLimits": { - "maxConnections": 123 - } - }, - "connectTimeout": "8s" - } - } - }, - "name": "local_app:port3", - "protocol": "PROTOCOL_HTTP" - } - }, - "endpoints": { - "exposed_cluster_9090": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 9090 - } - } - ] - }, - "exposed_cluster_9091": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 9091 - } - } - ] - }, - "local_app:port1": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8080 - } - } - ] - }, - "local_app:port3": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8081 - } - } - ] - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "balanceConnections": "BALANCE_CONNECTIONS_EXACT", - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l4": { - "cluster": { - "name": "local_app:port1" - }, - "maxInboundConnections": "123", - "statPrefix": "public_listener", - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~port1" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "maxInboundConnections": "123", - "route": { - "name": "public_listener:port3" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~port3" - ] - } - } - ] - }, - { - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 1234 - }, - "name": "exposed_path_health1234", - "routers": [ - { - "l7": { - "route": { - "name": "exposed_path_route_health1234" - }, - "statPrefix": "exposed_path_route_health1234", - "staticRoute": true - } - } - ] - }, - { - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 1235 - }, - "name": "exposed_path_GetHealth1235", - "routers": [ - { - "l7": { - "protocol": "L7_PROTOCOL_HTTP2", - "route": { - "name": "exposed_path_route_GetHealth1235" - }, - "statPrefix": "exposed_path_route_GetHealth1235", - "staticRoute": true - } - } - ] - } - ], - "routes": { - "exposed_path_route_GetHealth1235": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "exposed_path_route_GetHealth1235", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "exposed_cluster_9091" - } - }, - "match": { - "pathMatch": { - "exact": "GetHealth" - } - } - } - ] - } - ] - }, - "exposed_path_route_health1234": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "exposed_path_route_health1234", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "exposed_cluster_9090" - } - }, - "match": { - "pathMatch": { - "exact": "/health" - } - } - } - ] - } - ] - }, - "public_listener:port3": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:port3", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:port3" - }, - "destinationConfiguration": { - "timeoutConfig": { - "timeout": "9s" - } - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "default", - "partition": "default" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/local-and-inbound-connections-foo-bar.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/local-and-inbound-connections-foo-bar.golden deleted file mode 100644 index 401f78db4421e..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/local-and-inbound-connections-foo-bar.golden +++ /dev/null @@ -1,304 +0,0 @@ -{ - "proxyState": { - "clusters": { - "exposed_cluster_9090": { - "endpointGroup": { - "static": {} - }, - "name": "exposed_cluster_9090", - "protocol": "PROTOCOL_HTTP" - }, - "exposed_cluster_9091": { - "endpointGroup": { - "static": {} - }, - "name": "exposed_cluster_9091", - "protocol": "PROTOCOL_HTTP2" - }, - "local_app:port1": { - "endpointGroup": { - "static": { - "config": { - "circuitBreakers": { - "upstreamLimits": { - "maxConnections": 123 - } - }, - "connectTimeout": "6s" - } - } - }, - "name": "local_app:port1", - "protocol": "PROTOCOL_TCP" - }, - "local_app:port3": { - "endpointGroup": { - "static": { - "config": { - "circuitBreakers": { - "upstreamLimits": { - "maxConnections": 123 - } - }, - "connectTimeout": "8s" - } - } - }, - "name": "local_app:port3", - "protocol": "PROTOCOL_HTTP" - } - }, - "endpoints": { - "exposed_cluster_9090": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 9090 - } - } - ] - }, - "exposed_cluster_9091": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 9091 - } - } - ] - }, - "local_app:port1": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8080 - } - } - ] - }, - "local_app:port3": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8081 - } - } - ] - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "balanceConnections": "BALANCE_CONNECTIONS_EXACT", - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l4": { - "cluster": { - "name": "local_app:port1" - }, - "maxInboundConnections": "123", - "statPrefix": "public_listener", - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~port1" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "maxInboundConnections": "123", - "route": { - "name": "public_listener:port3" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~port3" - ] - } - } - ] - }, - { - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 1234 - }, - "name": "exposed_path_health1234", - "routers": [ - { - "l7": { - "route": { - "name": "exposed_path_route_health1234" - }, - "statPrefix": "exposed_path_route_health1234", - "staticRoute": true - } - } - ] - }, - { - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 1235 - }, - "name": "exposed_path_GetHealth1235", - "routers": [ - { - "l7": { - "protocol": "L7_PROTOCOL_HTTP2", - "route": { - "name": "exposed_path_route_GetHealth1235" - }, - "statPrefix": "exposed_path_route_GetHealth1235", - "staticRoute": true - } - } - ] - } - ], - "routes": { - "exposed_path_route_GetHealth1235": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "exposed_path_route_GetHealth1235", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "exposed_cluster_9091" - } - }, - "match": { - "pathMatch": { - "exact": "GetHealth" - } - } - } - ] - } - ] - }, - "exposed_path_route_health1234": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "exposed_path_route_health1234", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "exposed_cluster_9090" - } - }, - "match": { - "pathMatch": { - "exact": "/health" - } - } - } - ] - } - ] - }, - "public_listener:port3": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:port3", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:port3" - }, - "destinationConfiguration": { - "timeoutConfig": { - "timeout": "9s" - } - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "bar", - "partition": "foo" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/local-and-inbound-connections-foo-default.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/local-and-inbound-connections-foo-default.golden deleted file mode 100644 index 208ae29f3f428..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/local-and-inbound-connections-foo-default.golden +++ /dev/null @@ -1,304 +0,0 @@ -{ - "proxyState": { - "clusters": { - "exposed_cluster_9090": { - "endpointGroup": { - "static": {} - }, - "name": "exposed_cluster_9090", - "protocol": "PROTOCOL_HTTP" - }, - "exposed_cluster_9091": { - "endpointGroup": { - "static": {} - }, - "name": "exposed_cluster_9091", - "protocol": "PROTOCOL_HTTP2" - }, - "local_app:port1": { - "endpointGroup": { - "static": { - "config": { - "circuitBreakers": { - "upstreamLimits": { - "maxConnections": 123 - } - }, - "connectTimeout": "6s" - } - } - }, - "name": "local_app:port1", - "protocol": "PROTOCOL_TCP" - }, - "local_app:port3": { - "endpointGroup": { - "static": { - "config": { - "circuitBreakers": { - "upstreamLimits": { - "maxConnections": 123 - } - }, - "connectTimeout": "8s" - } - } - }, - "name": "local_app:port3", - "protocol": "PROTOCOL_HTTP" - } - }, - "endpoints": { - "exposed_cluster_9090": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 9090 - } - } - ] - }, - "exposed_cluster_9091": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 9091 - } - } - ] - }, - "local_app:port1": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8080 - } - } - ] - }, - "local_app:port3": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8081 - } - } - ] - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "balanceConnections": "BALANCE_CONNECTIONS_EXACT", - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l4": { - "cluster": { - "name": "local_app:port1" - }, - "maxInboundConnections": "123", - "statPrefix": "public_listener", - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~port1" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "maxInboundConnections": "123", - "route": { - "name": "public_listener:port3" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~port3" - ] - } - } - ] - }, - { - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 1234 - }, - "name": "exposed_path_health1234", - "routers": [ - { - "l7": { - "route": { - "name": "exposed_path_route_health1234" - }, - "statPrefix": "exposed_path_route_health1234", - "staticRoute": true - } - } - ] - }, - { - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 1235 - }, - "name": "exposed_path_GetHealth1235", - "routers": [ - { - "l7": { - "protocol": "L7_PROTOCOL_HTTP2", - "route": { - "name": "exposed_path_route_GetHealth1235" - }, - "statPrefix": "exposed_path_route_GetHealth1235", - "staticRoute": true - } - } - ] - } - ], - "routes": { - "exposed_path_route_GetHealth1235": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "exposed_path_route_GetHealth1235", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "exposed_cluster_9091" - } - }, - "match": { - "pathMatch": { - "exact": "GetHealth" - } - } - } - ] - } - ] - }, - "exposed_path_route_health1234": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "exposed_path_route_health1234", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "exposed_cluster_9090" - } - }, - "match": { - "pathMatch": { - "exact": "/health" - } - } - } - ] - } - ] - }, - "public_listener:port3": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:port3", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:port3" - }, - "destinationConfiguration": { - "timeoutConfig": { - "timeout": "9s" - } - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "default", - "partition": "foo" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiple-workload-addresses-with-specific-ports-default-bar.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiple-workload-addresses-with-specific-ports-default-bar.golden deleted file mode 100644 index 9fb74bcac23a6..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiple-workload-addresses-with-specific-ports-default-bar.golden +++ /dev/null @@ -1,291 +0,0 @@ -{ - "proxyState": { - "clusters": { - "local_app:grpc": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:grpc", - "protocol": "PROTOCOL_GRPC" - }, - "local_app:http": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:http", - "protocol": "PROTOCOL_HTTP" - }, - "local_app:http2": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:http2", - "protocol": "PROTOCOL_HTTP2" - }, - "local_app:tcp": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:tcp", - "protocol": "PROTOCOL_TCP" - } - }, - "endpoints": { - "local_app:grpc": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8083 - } - } - ] - }, - "local_app:http": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8081 - } - } - ] - }, - "local_app:http2": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8082 - } - } - ] - }, - "local_app:tcp": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8080 - } - } - ] - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "127.0.0.1", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_GRPC", - "route": { - "name": "public_listener:grpc" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~grpc" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "route": { - "name": "public_listener:http" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~http" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_HTTP2", - "route": { - "name": "public_listener:http2" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~http2" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l4": { - "cluster": { - "name": "local_app:tcp" - }, - "statPrefix": "public_listener", - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~tcp" - ] - } - } - ] - } - ], - "routes": { - "public_listener:grpc": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:grpc", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:grpc" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:http": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:http", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:http" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:http2": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:http2", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:http2" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "bar", - "partition": "default" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiple-workload-addresses-with-specific-ports-default-default.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiple-workload-addresses-with-specific-ports-default-default.golden deleted file mode 100644 index 70d0232467f1f..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiple-workload-addresses-with-specific-ports-default-default.golden +++ /dev/null @@ -1,291 +0,0 @@ -{ - "proxyState": { - "clusters": { - "local_app:grpc": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:grpc", - "protocol": "PROTOCOL_GRPC" - }, - "local_app:http": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:http", - "protocol": "PROTOCOL_HTTP" - }, - "local_app:http2": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:http2", - "protocol": "PROTOCOL_HTTP2" - }, - "local_app:tcp": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:tcp", - "protocol": "PROTOCOL_TCP" - } - }, - "endpoints": { - "local_app:grpc": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8083 - } - } - ] - }, - "local_app:http": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8081 - } - } - ] - }, - "local_app:http2": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8082 - } - } - ] - }, - "local_app:tcp": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8080 - } - } - ] - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "127.0.0.1", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_GRPC", - "route": { - "name": "public_listener:grpc" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~grpc" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "route": { - "name": "public_listener:http" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~http" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_HTTP2", - "route": { - "name": "public_listener:http2" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~http2" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l4": { - "cluster": { - "name": "local_app:tcp" - }, - "statPrefix": "public_listener", - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~tcp" - ] - } - } - ] - } - ], - "routes": { - "public_listener:grpc": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:grpc", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:grpc" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:http": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:http", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:http" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:http2": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:http2", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:http2" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "default", - "partition": "default" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiple-workload-addresses-with-specific-ports-foo-bar.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiple-workload-addresses-with-specific-ports-foo-bar.golden deleted file mode 100644 index 053dab78e252c..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiple-workload-addresses-with-specific-ports-foo-bar.golden +++ /dev/null @@ -1,291 +0,0 @@ -{ - "proxyState": { - "clusters": { - "local_app:grpc": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:grpc", - "protocol": "PROTOCOL_GRPC" - }, - "local_app:http": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:http", - "protocol": "PROTOCOL_HTTP" - }, - "local_app:http2": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:http2", - "protocol": "PROTOCOL_HTTP2" - }, - "local_app:tcp": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:tcp", - "protocol": "PROTOCOL_TCP" - } - }, - "endpoints": { - "local_app:grpc": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8083 - } - } - ] - }, - "local_app:http": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8081 - } - } - ] - }, - "local_app:http2": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8082 - } - } - ] - }, - "local_app:tcp": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8080 - } - } - ] - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "127.0.0.1", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_GRPC", - "route": { - "name": "public_listener:grpc" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~grpc" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "route": { - "name": "public_listener:http" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~http" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_HTTP2", - "route": { - "name": "public_listener:http2" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~http2" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l4": { - "cluster": { - "name": "local_app:tcp" - }, - "statPrefix": "public_listener", - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~tcp" - ] - } - } - ] - } - ], - "routes": { - "public_listener:grpc": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:grpc", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:grpc" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:http": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:http", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:http" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:http2": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:http2", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:http2" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "bar", - "partition": "foo" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiple-workload-addresses-with-specific-ports-foo-default.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiple-workload-addresses-with-specific-ports-foo-default.golden deleted file mode 100644 index cce0e467791b6..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiple-workload-addresses-with-specific-ports-foo-default.golden +++ /dev/null @@ -1,291 +0,0 @@ -{ - "proxyState": { - "clusters": { - "local_app:grpc": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:grpc", - "protocol": "PROTOCOL_GRPC" - }, - "local_app:http": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:http", - "protocol": "PROTOCOL_HTTP" - }, - "local_app:http2": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:http2", - "protocol": "PROTOCOL_HTTP2" - }, - "local_app:tcp": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:tcp", - "protocol": "PROTOCOL_TCP" - } - }, - "endpoints": { - "local_app:grpc": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8083 - } - } - ] - }, - "local_app:http": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8081 - } - } - ] - }, - "local_app:http2": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8082 - } - } - ] - }, - "local_app:tcp": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8080 - } - } - ] - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "127.0.0.1", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_GRPC", - "route": { - "name": "public_listener:grpc" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~grpc" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "route": { - "name": "public_listener:http" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~http" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_HTTP2", - "route": { - "name": "public_listener:http2" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~http2" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l4": { - "cluster": { - "name": "local_app:tcp" - }, - "statPrefix": "public_listener", - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~tcp" - ] - } - } - ] - } - ], - "routes": { - "public_listener:grpc": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:grpc", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:grpc" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:http": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:http", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:http" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:http2": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:http2", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:http2" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "default", - "partition": "foo" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiple-workload-addresses-with-specific-ports.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiple-workload-addresses-with-specific-ports.golden deleted file mode 100644 index 70d0232467f1f..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiple-workload-addresses-with-specific-ports.golden +++ /dev/null @@ -1,291 +0,0 @@ -{ - "proxyState": { - "clusters": { - "local_app:grpc": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:grpc", - "protocol": "PROTOCOL_GRPC" - }, - "local_app:http": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:http", - "protocol": "PROTOCOL_HTTP" - }, - "local_app:http2": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:http2", - "protocol": "PROTOCOL_HTTP2" - }, - "local_app:tcp": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:tcp", - "protocol": "PROTOCOL_TCP" - } - }, - "endpoints": { - "local_app:grpc": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8083 - } - } - ] - }, - "local_app:http": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8081 - } - } - ] - }, - "local_app:http2": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8082 - } - } - ] - }, - "local_app:tcp": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8080 - } - } - ] - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "127.0.0.1", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_GRPC", - "route": { - "name": "public_listener:grpc" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~grpc" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "route": { - "name": "public_listener:http" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~http" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_HTTP2", - "route": { - "name": "public_listener:http2" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~http2" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l4": { - "cluster": { - "name": "local_app:tcp" - }, - "statPrefix": "public_listener", - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~tcp" - ] - } - } - ] - } - ], - "routes": { - "public_listener:grpc": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:grpc", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:grpc" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:http": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:http", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:http" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:http2": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:http2", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:http2" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "default", - "partition": "default" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiple-workload-addresses-without-ports-default-bar.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiple-workload-addresses-without-ports-default-bar.golden deleted file mode 100644 index 71727030fd3a5..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiple-workload-addresses-without-ports-default-bar.golden +++ /dev/null @@ -1,291 +0,0 @@ -{ - "proxyState": { - "clusters": { - "local_app:grpc": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:grpc", - "protocol": "PROTOCOL_GRPC" - }, - "local_app:http": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:http", - "protocol": "PROTOCOL_HTTP" - }, - "local_app:http2": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:http2", - "protocol": "PROTOCOL_HTTP2" - }, - "local_app:tcp": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:tcp", - "protocol": "PROTOCOL_TCP" - } - }, - "endpoints": { - "local_app:grpc": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8083 - } - } - ] - }, - "local_app:http": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8081 - } - } - ] - }, - "local_app:http2": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8082 - } - } - ] - }, - "local_app:tcp": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8080 - } - } - ] - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_GRPC", - "route": { - "name": "public_listener:grpc" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~grpc" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "route": { - "name": "public_listener:http" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~http" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_HTTP2", - "route": { - "name": "public_listener:http2" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~http2" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l4": { - "cluster": { - "name": "local_app:tcp" - }, - "statPrefix": "public_listener", - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~tcp" - ] - } - } - ] - } - ], - "routes": { - "public_listener:grpc": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:grpc", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:grpc" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:http": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:http", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:http" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:http2": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:http2", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:http2" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "bar", - "partition": "default" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiple-workload-addresses-without-ports-default-default.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiple-workload-addresses-without-ports-default-default.golden deleted file mode 100644 index b86daa2817148..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiple-workload-addresses-without-ports-default-default.golden +++ /dev/null @@ -1,291 +0,0 @@ -{ - "proxyState": { - "clusters": { - "local_app:grpc": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:grpc", - "protocol": "PROTOCOL_GRPC" - }, - "local_app:http": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:http", - "protocol": "PROTOCOL_HTTP" - }, - "local_app:http2": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:http2", - "protocol": "PROTOCOL_HTTP2" - }, - "local_app:tcp": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:tcp", - "protocol": "PROTOCOL_TCP" - } - }, - "endpoints": { - "local_app:grpc": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8083 - } - } - ] - }, - "local_app:http": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8081 - } - } - ] - }, - "local_app:http2": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8082 - } - } - ] - }, - "local_app:tcp": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8080 - } - } - ] - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_GRPC", - "route": { - "name": "public_listener:grpc" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~grpc" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "route": { - "name": "public_listener:http" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~http" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_HTTP2", - "route": { - "name": "public_listener:http2" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~http2" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l4": { - "cluster": { - "name": "local_app:tcp" - }, - "statPrefix": "public_listener", - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~tcp" - ] - } - } - ] - } - ], - "routes": { - "public_listener:grpc": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:grpc", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:grpc" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:http": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:http", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:http" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:http2": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:http2", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:http2" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "default", - "partition": "default" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiple-workload-addresses-without-ports-foo-bar.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiple-workload-addresses-without-ports-foo-bar.golden deleted file mode 100644 index 091b51a8086bd..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiple-workload-addresses-without-ports-foo-bar.golden +++ /dev/null @@ -1,291 +0,0 @@ -{ - "proxyState": { - "clusters": { - "local_app:grpc": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:grpc", - "protocol": "PROTOCOL_GRPC" - }, - "local_app:http": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:http", - "protocol": "PROTOCOL_HTTP" - }, - "local_app:http2": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:http2", - "protocol": "PROTOCOL_HTTP2" - }, - "local_app:tcp": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:tcp", - "protocol": "PROTOCOL_TCP" - } - }, - "endpoints": { - "local_app:grpc": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8083 - } - } - ] - }, - "local_app:http": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8081 - } - } - ] - }, - "local_app:http2": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8082 - } - } - ] - }, - "local_app:tcp": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8080 - } - } - ] - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_GRPC", - "route": { - "name": "public_listener:grpc" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~grpc" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "route": { - "name": "public_listener:http" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~http" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_HTTP2", - "route": { - "name": "public_listener:http2" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~http2" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l4": { - "cluster": { - "name": "local_app:tcp" - }, - "statPrefix": "public_listener", - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~tcp" - ] - } - } - ] - } - ], - "routes": { - "public_listener:grpc": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:grpc", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:grpc" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:http": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:http", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:http" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:http2": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:http2", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:http2" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "bar", - "partition": "foo" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiple-workload-addresses-without-ports-foo-default.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiple-workload-addresses-without-ports-foo-default.golden deleted file mode 100644 index ef874be52ac62..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiple-workload-addresses-without-ports-foo-default.golden +++ /dev/null @@ -1,291 +0,0 @@ -{ - "proxyState": { - "clusters": { - "local_app:grpc": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:grpc", - "protocol": "PROTOCOL_GRPC" - }, - "local_app:http": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:http", - "protocol": "PROTOCOL_HTTP" - }, - "local_app:http2": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:http2", - "protocol": "PROTOCOL_HTTP2" - }, - "local_app:tcp": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:tcp", - "protocol": "PROTOCOL_TCP" - } - }, - "endpoints": { - "local_app:grpc": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8083 - } - } - ] - }, - "local_app:http": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8081 - } - } - ] - }, - "local_app:http2": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8082 - } - } - ] - }, - "local_app:tcp": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8080 - } - } - ] - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_GRPC", - "route": { - "name": "public_listener:grpc" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~grpc" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "route": { - "name": "public_listener:http" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~http" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_HTTP2", - "route": { - "name": "public_listener:http2" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~http2" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l4": { - "cluster": { - "name": "local_app:tcp" - }, - "statPrefix": "public_listener", - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~tcp" - ] - } - } - ] - } - ], - "routes": { - "public_listener:grpc": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:grpc", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:grpc" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:http": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:http", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:http" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:http2": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:http2", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:http2" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "default", - "partition": "foo" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiple-workload-addresses-without-ports.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiple-workload-addresses-without-ports.golden deleted file mode 100644 index b86daa2817148..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiple-workload-addresses-without-ports.golden +++ /dev/null @@ -1,291 +0,0 @@ -{ - "proxyState": { - "clusters": { - "local_app:grpc": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:grpc", - "protocol": "PROTOCOL_GRPC" - }, - "local_app:http": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:http", - "protocol": "PROTOCOL_HTTP" - }, - "local_app:http2": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:http2", - "protocol": "PROTOCOL_HTTP2" - }, - "local_app:tcp": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:tcp", - "protocol": "PROTOCOL_TCP" - } - }, - "endpoints": { - "local_app:grpc": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8083 - } - } - ] - }, - "local_app:http": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8081 - } - } - ] - }, - "local_app:http2": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8082 - } - } - ] - }, - "local_app:tcp": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8080 - } - } - ] - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_GRPC", - "route": { - "name": "public_listener:grpc" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~grpc" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "route": { - "name": "public_listener:http" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~http" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_HTTP2", - "route": { - "name": "public_listener:http2" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~http2" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l4": { - "cluster": { - "name": "local_app:tcp" - }, - "statPrefix": "public_listener", - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~tcp" - ] - } - } - ] - } - ], - "routes": { - "public_listener:grpc": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:grpc", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:grpc" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:http": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:http", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:http" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:http2": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:http2", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:http2" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "default", - "partition": "default" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l4-multiple-workload-addresses-with-specific-ports-default-bar.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l4-multiple-workload-addresses-with-specific-ports-default-bar.golden deleted file mode 100644 index 94089a6f0a59a..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l4-multiple-workload-addresses-with-specific-ports-default-bar.golden +++ /dev/null @@ -1,130 +0,0 @@ -{ - "proxyState": { - "clusters": { - "local_app:admin-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:admin-port", - "protocol": "PROTOCOL_TCP" - }, - "local_app:api-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:api-port", - "protocol": "PROTOCOL_TCP" - } - }, - "endpoints": { - "local_app:admin-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8080 - } - } - ] - }, - "local_app:api-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 9090 - } - } - ] - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.3", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l4": { - "cluster": { - "name": "local_app:admin-port" - }, - "statPrefix": "public_listener", - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~admin-port" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l4": { - "cluster": { - "name": "local_app:api-port" - }, - "statPrefix": "public_listener", - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~api-port" - ] - } - } - ] - } - ] - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "bar", - "partition": "default" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l4-multiple-workload-addresses-with-specific-ports-foo-bar.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l4-multiple-workload-addresses-with-specific-ports-foo-bar.golden deleted file mode 100644 index c1b2664d2e2d2..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l4-multiple-workload-addresses-with-specific-ports-foo-bar.golden +++ /dev/null @@ -1,130 +0,0 @@ -{ - "proxyState": { - "clusters": { - "local_app:admin-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:admin-port", - "protocol": "PROTOCOL_TCP" - }, - "local_app:api-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:api-port", - "protocol": "PROTOCOL_TCP" - } - }, - "endpoints": { - "local_app:admin-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8080 - } - } - ] - }, - "local_app:api-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 9090 - } - } - ] - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.3", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l4": { - "cluster": { - "name": "local_app:admin-port" - }, - "statPrefix": "public_listener", - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~admin-port" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l4": { - "cluster": { - "name": "local_app:api-port" - }, - "statPrefix": "public_listener", - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~api-port" - ] - } - } - ] - } - ] - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "bar", - "partition": "foo" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l4-multiple-workload-addresses-with-specific-ports-foo-default.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l4-multiple-workload-addresses-with-specific-ports-foo-default.golden deleted file mode 100644 index af5c54fa0e3ac..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l4-multiple-workload-addresses-with-specific-ports-foo-default.golden +++ /dev/null @@ -1,130 +0,0 @@ -{ - "proxyState": { - "clusters": { - "local_app:admin-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:admin-port", - "protocol": "PROTOCOL_TCP" - }, - "local_app:api-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:api-port", - "protocol": "PROTOCOL_TCP" - } - }, - "endpoints": { - "local_app:admin-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8080 - } - } - ] - }, - "local_app:api-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 9090 - } - } - ] - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.3", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l4": { - "cluster": { - "name": "local_app:admin-port" - }, - "statPrefix": "public_listener", - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~admin-port" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l4": { - "cluster": { - "name": "local_app:api-port" - }, - "statPrefix": "public_listener", - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~api-port" - ] - } - } - ] - } - ] - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "default", - "partition": "foo" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l4-multiple-workload-addresses-without-ports-default-bar.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l4-multiple-workload-addresses-without-ports-default-bar.golden deleted file mode 100644 index 52a3257ee7524..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l4-multiple-workload-addresses-without-ports-default-bar.golden +++ /dev/null @@ -1,130 +0,0 @@ -{ - "proxyState": { - "clusters": { - "local_app:admin-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:admin-port", - "protocol": "PROTOCOL_TCP" - }, - "local_app:api-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:api-port", - "protocol": "PROTOCOL_TCP" - } - }, - "endpoints": { - "local_app:admin-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8080 - } - } - ] - }, - "local_app:api-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 9090 - } - } - ] - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l4": { - "cluster": { - "name": "local_app:admin-port" - }, - "statPrefix": "public_listener", - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~admin-port" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l4": { - "cluster": { - "name": "local_app:api-port" - }, - "statPrefix": "public_listener", - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~api-port" - ] - } - } - ] - } - ] - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "bar", - "partition": "default" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l4-multiple-workload-addresses-without-ports-foo-bar.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l4-multiple-workload-addresses-without-ports-foo-bar.golden deleted file mode 100644 index 19fe7d3a1663a..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l4-multiple-workload-addresses-without-ports-foo-bar.golden +++ /dev/null @@ -1,130 +0,0 @@ -{ - "proxyState": { - "clusters": { - "local_app:admin-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:admin-port", - "protocol": "PROTOCOL_TCP" - }, - "local_app:api-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:api-port", - "protocol": "PROTOCOL_TCP" - } - }, - "endpoints": { - "local_app:admin-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8080 - } - } - ] - }, - "local_app:api-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 9090 - } - } - ] - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l4": { - "cluster": { - "name": "local_app:admin-port" - }, - "statPrefix": "public_listener", - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~admin-port" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l4": { - "cluster": { - "name": "local_app:api-port" - }, - "statPrefix": "public_listener", - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~api-port" - ] - } - } - ] - } - ] - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "bar", - "partition": "foo" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l4-multiple-workload-addresses-without-ports-foo-default.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l4-multiple-workload-addresses-without-ports-foo-default.golden deleted file mode 100644 index 8279e5ee7b195..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l4-multiple-workload-addresses-without-ports-foo-default.golden +++ /dev/null @@ -1,130 +0,0 @@ -{ - "proxyState": { - "clusters": { - "local_app:admin-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:admin-port", - "protocol": "PROTOCOL_TCP" - }, - "local_app:api-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:api-port", - "protocol": "PROTOCOL_TCP" - } - }, - "endpoints": { - "local_app:admin-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8080 - } - } - ] - }, - "local_app:api-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 9090 - } - } - ] - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l4": { - "cluster": { - "name": "local_app:admin-port" - }, - "statPrefix": "public_listener", - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~admin-port" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l4": { - "cluster": { - "name": "local_app:api-port" - }, - "statPrefix": "public_listener", - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~api-port" - ] - } - } - ] - } - ] - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "default", - "partition": "foo" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l4-single-workload-address-without-ports-default-bar.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l4-single-workload-address-without-ports-default-bar.golden deleted file mode 100644 index 52a3257ee7524..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l4-single-workload-address-without-ports-default-bar.golden +++ /dev/null @@ -1,130 +0,0 @@ -{ - "proxyState": { - "clusters": { - "local_app:admin-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:admin-port", - "protocol": "PROTOCOL_TCP" - }, - "local_app:api-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:api-port", - "protocol": "PROTOCOL_TCP" - } - }, - "endpoints": { - "local_app:admin-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8080 - } - } - ] - }, - "local_app:api-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 9090 - } - } - ] - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l4": { - "cluster": { - "name": "local_app:admin-port" - }, - "statPrefix": "public_listener", - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~admin-port" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l4": { - "cluster": { - "name": "local_app:api-port" - }, - "statPrefix": "public_listener", - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~api-port" - ] - } - } - ] - } - ] - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "bar", - "partition": "default" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l4-single-workload-address-without-ports-foo-bar.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l4-single-workload-address-without-ports-foo-bar.golden deleted file mode 100644 index 19fe7d3a1663a..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l4-single-workload-address-without-ports-foo-bar.golden +++ /dev/null @@ -1,130 +0,0 @@ -{ - "proxyState": { - "clusters": { - "local_app:admin-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:admin-port", - "protocol": "PROTOCOL_TCP" - }, - "local_app:api-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:api-port", - "protocol": "PROTOCOL_TCP" - } - }, - "endpoints": { - "local_app:admin-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8080 - } - } - ] - }, - "local_app:api-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 9090 - } - } - ] - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l4": { - "cluster": { - "name": "local_app:admin-port" - }, - "statPrefix": "public_listener", - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~admin-port" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l4": { - "cluster": { - "name": "local_app:api-port" - }, - "statPrefix": "public_listener", - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~api-port" - ] - } - } - ] - } - ] - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "bar", - "partition": "foo" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l4-single-workload-address-without-ports-foo-default.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l4-single-workload-address-without-ports-foo-default.golden deleted file mode 100644 index 8279e5ee7b195..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l4-single-workload-address-without-ports-foo-default.golden +++ /dev/null @@ -1,130 +0,0 @@ -{ - "proxyState": { - "clusters": { - "local_app:admin-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:admin-port", - "protocol": "PROTOCOL_TCP" - }, - "local_app:api-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:api-port", - "protocol": "PROTOCOL_TCP" - } - }, - "endpoints": { - "local_app:admin-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8080 - } - } - ] - }, - "local_app:api-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 9090 - } - } - ] - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l4": { - "cluster": { - "name": "local_app:admin-port" - }, - "statPrefix": "public_listener", - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~admin-port" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l4": { - "cluster": { - "name": "local_app:api-port" - }, - "statPrefix": "public_listener", - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~api-port" - ] - } - } - ] - } - ] - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "default", - "partition": "foo" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l4-workload-with-only-mesh-port-default-bar.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l4-workload-with-only-mesh-port-default-bar.golden deleted file mode 100644 index 913b1b8e98c88..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l4-workload-with-only-mesh-port-default-bar.golden +++ /dev/null @@ -1,61 +0,0 @@ -{ - "proxyState": { - "clusters": { - "black-hole-cluster": { - "endpointGroup": { - "static": {} - }, - "name": "black-hole-cluster", - "protocol": "PROTOCOL_TCP" - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "l4": { - "cluster": { - "name": "black-hole-cluster" - }, - "statPrefix": "public_listener" - } - } - ] - } - ] - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "bar", - "partition": "default" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l4-workload-with-only-mesh-port-default-default.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l4-workload-with-only-mesh-port-default-default.golden deleted file mode 100644 index dc9afc44fa43d..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l4-workload-with-only-mesh-port-default-default.golden +++ /dev/null @@ -1,61 +0,0 @@ -{ - "proxyState": { - "clusters": { - "black-hole-cluster": { - "endpointGroup": { - "static": {} - }, - "name": "black-hole-cluster", - "protocol": "PROTOCOL_TCP" - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "l4": { - "cluster": { - "name": "black-hole-cluster" - }, - "statPrefix": "public_listener" - } - } - ] - } - ] - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "default", - "partition": "default" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l4-workload-with-only-mesh-port-foo-bar.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l4-workload-with-only-mesh-port-foo-bar.golden deleted file mode 100644 index 9400538fc5c6d..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l4-workload-with-only-mesh-port-foo-bar.golden +++ /dev/null @@ -1,61 +0,0 @@ -{ - "proxyState": { - "clusters": { - "black-hole-cluster": { - "endpointGroup": { - "static": {} - }, - "name": "black-hole-cluster", - "protocol": "PROTOCOL_TCP" - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "l4": { - "cluster": { - "name": "black-hole-cluster" - }, - "statPrefix": "public_listener" - } - } - ] - } - ] - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "bar", - "partition": "foo" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l4-workload-with-only-mesh-port-foo-default.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l4-workload-with-only-mesh-port-foo-default.golden deleted file mode 100644 index 7e9283df7ad6c..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l4-workload-with-only-mesh-port-foo-default.golden +++ /dev/null @@ -1,61 +0,0 @@ -{ - "proxyState": { - "clusters": { - "black-hole-cluster": { - "endpointGroup": { - "static": {} - }, - "name": "black-hole-cluster", - "protocol": "PROTOCOL_TCP" - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "l4": { - "cluster": { - "name": "black-hole-cluster" - }, - "statPrefix": "public_listener" - } - } - ] - } - ] - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "default", - "partition": "foo" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l7-multiple-workload-addresses-with-specific-ports-default-bar.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l7-multiple-workload-addresses-with-specific-ports-default-bar.golden deleted file mode 100644 index 97f406874f620..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l7-multiple-workload-addresses-with-specific-ports-default-bar.golden +++ /dev/null @@ -1,183 +0,0 @@ -{ - "proxyState": { - "clusters": { - "local_app:admin-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:admin-port", - "protocol": "PROTOCOL_HTTP" - }, - "local_app:api-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:api-port", - "protocol": "PROTOCOL_HTTP2" - } - }, - "endpoints": { - "local_app:admin-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8080 - } - } - ] - }, - "local_app:api-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 9090 - } - } - ] - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.3", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "route": { - "name": "public_listener:admin-port" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~admin-port" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_HTTP2", - "route": { - "name": "public_listener:api-port" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~api-port" - ] - } - } - ] - } - ], - "routes": { - "public_listener:admin-port": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:admin-port", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:admin-port" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:api-port": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:api-port", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:api-port" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "bar", - "partition": "default" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l7-multiple-workload-addresses-with-specific-ports-default-default.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l7-multiple-workload-addresses-with-specific-ports-default-default.golden deleted file mode 100644 index dcba1dc58150a..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l7-multiple-workload-addresses-with-specific-ports-default-default.golden +++ /dev/null @@ -1,183 +0,0 @@ -{ - "proxyState": { - "clusters": { - "local_app:admin-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:admin-port", - "protocol": "PROTOCOL_HTTP" - }, - "local_app:api-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:api-port", - "protocol": "PROTOCOL_HTTP2" - } - }, - "endpoints": { - "local_app:admin-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8080 - } - } - ] - }, - "local_app:api-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 9090 - } - } - ] - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.3", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "route": { - "name": "public_listener:admin-port" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~admin-port" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_HTTP2", - "route": { - "name": "public_listener:api-port" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~api-port" - ] - } - } - ] - } - ], - "routes": { - "public_listener:admin-port": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:admin-port", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:admin-port" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:api-port": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:api-port", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:api-port" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "default", - "partition": "default" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l7-multiple-workload-addresses-with-specific-ports-foo-bar.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l7-multiple-workload-addresses-with-specific-ports-foo-bar.golden deleted file mode 100644 index 60bf38e8ecb8b..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l7-multiple-workload-addresses-with-specific-ports-foo-bar.golden +++ /dev/null @@ -1,183 +0,0 @@ -{ - "proxyState": { - "clusters": { - "local_app:admin-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:admin-port", - "protocol": "PROTOCOL_HTTP" - }, - "local_app:api-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:api-port", - "protocol": "PROTOCOL_HTTP2" - } - }, - "endpoints": { - "local_app:admin-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8080 - } - } - ] - }, - "local_app:api-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 9090 - } - } - ] - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.3", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "route": { - "name": "public_listener:admin-port" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~admin-port" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_HTTP2", - "route": { - "name": "public_listener:api-port" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~api-port" - ] - } - } - ] - } - ], - "routes": { - "public_listener:admin-port": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:admin-port", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:admin-port" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:api-port": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:api-port", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:api-port" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "bar", - "partition": "foo" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l7-multiple-workload-addresses-with-specific-ports-foo-default.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l7-multiple-workload-addresses-with-specific-ports-foo-default.golden deleted file mode 100644 index 4ddca8f31b2b3..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l7-multiple-workload-addresses-with-specific-ports-foo-default.golden +++ /dev/null @@ -1,183 +0,0 @@ -{ - "proxyState": { - "clusters": { - "local_app:admin-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:admin-port", - "protocol": "PROTOCOL_HTTP" - }, - "local_app:api-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:api-port", - "protocol": "PROTOCOL_HTTP2" - } - }, - "endpoints": { - "local_app:admin-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8080 - } - } - ] - }, - "local_app:api-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 9090 - } - } - ] - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.3", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "route": { - "name": "public_listener:admin-port" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~admin-port" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_HTTP2", - "route": { - "name": "public_listener:api-port" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~api-port" - ] - } - } - ] - } - ], - "routes": { - "public_listener:admin-port": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:admin-port", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:admin-port" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:api-port": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:api-port", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:api-port" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "default", - "partition": "foo" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l7-multiple-workload-addresses-without-ports-default-bar.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l7-multiple-workload-addresses-without-ports-default-bar.golden deleted file mode 100644 index c8849428f06e4..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l7-multiple-workload-addresses-without-ports-default-bar.golden +++ /dev/null @@ -1,250 +0,0 @@ -{ - "proxyState": { - "clusters": { - "local_app:admin-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:admin-port", - "protocol": "PROTOCOL_HTTP" - }, - "local_app:api-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:api-port", - "protocol": "PROTOCOL_HTTP2" - }, - "local_app:grpc-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:grpc-port", - "protocol": "PROTOCOL_GRPC" - } - }, - "endpoints": { - "local_app:admin-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8080 - } - } - ] - }, - "local_app:api-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 9090 - } - } - ] - }, - "local_app:grpc-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 9091 - } - } - ] - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "route": { - "name": "public_listener:admin-port" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~admin-port" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_HTTP2", - "route": { - "name": "public_listener:api-port" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~api-port" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_GRPC", - "route": { - "name": "public_listener:grpc-port" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~grpc-port" - ] - } - } - ] - } - ], - "routes": { - "public_listener:admin-port": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:admin-port", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:admin-port" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:api-port": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:api-port", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:api-port" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:grpc-port": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:grpc-port", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:grpc-port" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "bar", - "partition": "default" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l7-multiple-workload-addresses-without-ports-default-default.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l7-multiple-workload-addresses-without-ports-default-default.golden deleted file mode 100644 index 08d9faa234ea6..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l7-multiple-workload-addresses-without-ports-default-default.golden +++ /dev/null @@ -1,250 +0,0 @@ -{ - "proxyState": { - "clusters": { - "local_app:admin-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:admin-port", - "protocol": "PROTOCOL_HTTP" - }, - "local_app:api-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:api-port", - "protocol": "PROTOCOL_HTTP2" - }, - "local_app:grpc-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:grpc-port", - "protocol": "PROTOCOL_GRPC" - } - }, - "endpoints": { - "local_app:admin-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8080 - } - } - ] - }, - "local_app:api-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 9090 - } - } - ] - }, - "local_app:grpc-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 9091 - } - } - ] - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "route": { - "name": "public_listener:admin-port" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~admin-port" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_HTTP2", - "route": { - "name": "public_listener:api-port" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~api-port" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_GRPC", - "route": { - "name": "public_listener:grpc-port" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~grpc-port" - ] - } - } - ] - } - ], - "routes": { - "public_listener:admin-port": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:admin-port", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:admin-port" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:api-port": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:api-port", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:api-port" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:grpc-port": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:grpc-port", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:grpc-port" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "default", - "partition": "default" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l7-multiple-workload-addresses-without-ports-foo-bar.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l7-multiple-workload-addresses-without-ports-foo-bar.golden deleted file mode 100644 index d5d96889b4380..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l7-multiple-workload-addresses-without-ports-foo-bar.golden +++ /dev/null @@ -1,250 +0,0 @@ -{ - "proxyState": { - "clusters": { - "local_app:admin-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:admin-port", - "protocol": "PROTOCOL_HTTP" - }, - "local_app:api-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:api-port", - "protocol": "PROTOCOL_HTTP2" - }, - "local_app:grpc-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:grpc-port", - "protocol": "PROTOCOL_GRPC" - } - }, - "endpoints": { - "local_app:admin-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8080 - } - } - ] - }, - "local_app:api-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 9090 - } - } - ] - }, - "local_app:grpc-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 9091 - } - } - ] - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "route": { - "name": "public_listener:admin-port" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~admin-port" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_HTTP2", - "route": { - "name": "public_listener:api-port" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~api-port" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_GRPC", - "route": { - "name": "public_listener:grpc-port" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~grpc-port" - ] - } - } - ] - } - ], - "routes": { - "public_listener:admin-port": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:admin-port", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:admin-port" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:api-port": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:api-port", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:api-port" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:grpc-port": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:grpc-port", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:grpc-port" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "bar", - "partition": "foo" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l7-multiple-workload-addresses-without-ports-foo-default.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l7-multiple-workload-addresses-without-ports-foo-default.golden deleted file mode 100644 index 89503e533e16e..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l7-multiple-workload-addresses-without-ports-foo-default.golden +++ /dev/null @@ -1,250 +0,0 @@ -{ - "proxyState": { - "clusters": { - "local_app:admin-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:admin-port", - "protocol": "PROTOCOL_HTTP" - }, - "local_app:api-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:api-port", - "protocol": "PROTOCOL_HTTP2" - }, - "local_app:grpc-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:grpc-port", - "protocol": "PROTOCOL_GRPC" - } - }, - "endpoints": { - "local_app:admin-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8080 - } - } - ] - }, - "local_app:api-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 9090 - } - } - ] - }, - "local_app:grpc-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 9091 - } - } - ] - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "route": { - "name": "public_listener:admin-port" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~admin-port" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_HTTP2", - "route": { - "name": "public_listener:api-port" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~api-port" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_GRPC", - "route": { - "name": "public_listener:grpc-port" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~grpc-port" - ] - } - } - ] - } - ], - "routes": { - "public_listener:admin-port": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:admin-port", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:admin-port" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:api-port": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:api-port", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:api-port" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:grpc-port": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:grpc-port", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:grpc-port" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "default", - "partition": "foo" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l7-single-workload-address-without-ports-default-bar.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l7-single-workload-address-without-ports-default-bar.golden deleted file mode 100644 index c8849428f06e4..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l7-single-workload-address-without-ports-default-bar.golden +++ /dev/null @@ -1,250 +0,0 @@ -{ - "proxyState": { - "clusters": { - "local_app:admin-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:admin-port", - "protocol": "PROTOCOL_HTTP" - }, - "local_app:api-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:api-port", - "protocol": "PROTOCOL_HTTP2" - }, - "local_app:grpc-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:grpc-port", - "protocol": "PROTOCOL_GRPC" - } - }, - "endpoints": { - "local_app:admin-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8080 - } - } - ] - }, - "local_app:api-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 9090 - } - } - ] - }, - "local_app:grpc-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 9091 - } - } - ] - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "route": { - "name": "public_listener:admin-port" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~admin-port" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_HTTP2", - "route": { - "name": "public_listener:api-port" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~api-port" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_GRPC", - "route": { - "name": "public_listener:grpc-port" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~grpc-port" - ] - } - } - ] - } - ], - "routes": { - "public_listener:admin-port": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:admin-port", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:admin-port" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:api-port": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:api-port", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:api-port" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:grpc-port": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:grpc-port", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:grpc-port" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "bar", - "partition": "default" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l7-single-workload-address-without-ports-default-default.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l7-single-workload-address-without-ports-default-default.golden deleted file mode 100644 index 08d9faa234ea6..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l7-single-workload-address-without-ports-default-default.golden +++ /dev/null @@ -1,250 +0,0 @@ -{ - "proxyState": { - "clusters": { - "local_app:admin-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:admin-port", - "protocol": "PROTOCOL_HTTP" - }, - "local_app:api-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:api-port", - "protocol": "PROTOCOL_HTTP2" - }, - "local_app:grpc-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:grpc-port", - "protocol": "PROTOCOL_GRPC" - } - }, - "endpoints": { - "local_app:admin-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8080 - } - } - ] - }, - "local_app:api-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 9090 - } - } - ] - }, - "local_app:grpc-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 9091 - } - } - ] - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "route": { - "name": "public_listener:admin-port" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~admin-port" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_HTTP2", - "route": { - "name": "public_listener:api-port" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~api-port" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_GRPC", - "route": { - "name": "public_listener:grpc-port" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~grpc-port" - ] - } - } - ] - } - ], - "routes": { - "public_listener:admin-port": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:admin-port", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:admin-port" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:api-port": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:api-port", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:api-port" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:grpc-port": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:grpc-port", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:grpc-port" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "default", - "partition": "default" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l7-single-workload-address-without-ports-foo-bar.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l7-single-workload-address-without-ports-foo-bar.golden deleted file mode 100644 index d5d96889b4380..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l7-single-workload-address-without-ports-foo-bar.golden +++ /dev/null @@ -1,250 +0,0 @@ -{ - "proxyState": { - "clusters": { - "local_app:admin-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:admin-port", - "protocol": "PROTOCOL_HTTP" - }, - "local_app:api-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:api-port", - "protocol": "PROTOCOL_HTTP2" - }, - "local_app:grpc-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:grpc-port", - "protocol": "PROTOCOL_GRPC" - } - }, - "endpoints": { - "local_app:admin-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8080 - } - } - ] - }, - "local_app:api-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 9090 - } - } - ] - }, - "local_app:grpc-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 9091 - } - } - ] - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "route": { - "name": "public_listener:admin-port" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~admin-port" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_HTTP2", - "route": { - "name": "public_listener:api-port" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~api-port" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_GRPC", - "route": { - "name": "public_listener:grpc-port" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~grpc-port" - ] - } - } - ] - } - ], - "routes": { - "public_listener:admin-port": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:admin-port", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:admin-port" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:api-port": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:api-port", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:api-port" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:grpc-port": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:grpc-port", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:grpc-port" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "bar", - "partition": "foo" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l7-single-workload-address-without-ports-foo-default.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l7-single-workload-address-without-ports-foo-default.golden deleted file mode 100644 index 89503e533e16e..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/multiport-l7-single-workload-address-without-ports-foo-default.golden +++ /dev/null @@ -1,250 +0,0 @@ -{ - "proxyState": { - "clusters": { - "local_app:admin-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:admin-port", - "protocol": "PROTOCOL_HTTP" - }, - "local_app:api-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:api-port", - "protocol": "PROTOCOL_HTTP2" - }, - "local_app:grpc-port": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:grpc-port", - "protocol": "PROTOCOL_GRPC" - } - }, - "endpoints": { - "local_app:admin-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8080 - } - } - ] - }, - "local_app:api-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 9090 - } - } - ] - }, - "local_app:grpc-port": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 9091 - } - } - ] - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "route": { - "name": "public_listener:admin-port" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~admin-port" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_HTTP2", - "route": { - "name": "public_listener:api-port" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~api-port" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_GRPC", - "route": { - "name": "public_listener:grpc-port" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~grpc-port" - ] - } - } - ] - } - ], - "routes": { - "public_listener:admin-port": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:admin-port", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:admin-port" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:api-port": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:api-port", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:api-port" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:grpc-port": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:grpc-port", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:grpc-port" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "default", - "partition": "foo" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/single-workload-address-without-ports-default-bar.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/single-workload-address-without-ports-default-bar.golden deleted file mode 100644 index 71727030fd3a5..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/single-workload-address-without-ports-default-bar.golden +++ /dev/null @@ -1,291 +0,0 @@ -{ - "proxyState": { - "clusters": { - "local_app:grpc": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:grpc", - "protocol": "PROTOCOL_GRPC" - }, - "local_app:http": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:http", - "protocol": "PROTOCOL_HTTP" - }, - "local_app:http2": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:http2", - "protocol": "PROTOCOL_HTTP2" - }, - "local_app:tcp": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:tcp", - "protocol": "PROTOCOL_TCP" - } - }, - "endpoints": { - "local_app:grpc": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8083 - } - } - ] - }, - "local_app:http": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8081 - } - } - ] - }, - "local_app:http2": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8082 - } - } - ] - }, - "local_app:tcp": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8080 - } - } - ] - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "bar", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_GRPC", - "route": { - "name": "public_listener:grpc" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~grpc" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "route": { - "name": "public_listener:http" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~http" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_HTTP2", - "route": { - "name": "public_listener:http2" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~http2" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l4": { - "cluster": { - "name": "local_app:tcp" - }, - "statPrefix": "public_listener", - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~tcp" - ] - } - } - ] - } - ], - "routes": { - "public_listener:grpc": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:grpc", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:grpc" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:http": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:http", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:http" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:http2": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:http2", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:http2" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "bar", - "partition": "default" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/single-workload-address-without-ports-default-default.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/single-workload-address-without-ports-default-default.golden deleted file mode 100644 index b86daa2817148..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/single-workload-address-without-ports-default-default.golden +++ /dev/null @@ -1,291 +0,0 @@ -{ - "proxyState": { - "clusters": { - "local_app:grpc": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:grpc", - "protocol": "PROTOCOL_GRPC" - }, - "local_app:http": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:http", - "protocol": "PROTOCOL_HTTP" - }, - "local_app:http2": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:http2", - "protocol": "PROTOCOL_HTTP2" - }, - "local_app:tcp": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:tcp", - "protocol": "PROTOCOL_TCP" - } - }, - "endpoints": { - "local_app:grpc": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8083 - } - } - ] - }, - "local_app:http": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8081 - } - } - ] - }, - "local_app:http2": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8082 - } - } - ] - }, - "local_app:tcp": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8080 - } - } - ] - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_GRPC", - "route": { - "name": "public_listener:grpc" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~grpc" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "route": { - "name": "public_listener:http" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~http" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_HTTP2", - "route": { - "name": "public_listener:http2" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~http2" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l4": { - "cluster": { - "name": "local_app:tcp" - }, - "statPrefix": "public_listener", - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~tcp" - ] - } - } - ] - } - ], - "routes": { - "public_listener:grpc": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:grpc", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:grpc" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:http": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:http", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:http" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:http2": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:http2", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:http2" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "default", - "partition": "default" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/single-workload-address-without-ports-foo-bar.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/single-workload-address-without-ports-foo-bar.golden deleted file mode 100644 index 091b51a8086bd..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/single-workload-address-without-ports-foo-bar.golden +++ /dev/null @@ -1,291 +0,0 @@ -{ - "proxyState": { - "clusters": { - "local_app:grpc": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:grpc", - "protocol": "PROTOCOL_GRPC" - }, - "local_app:http": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:http", - "protocol": "PROTOCOL_HTTP" - }, - "local_app:http2": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:http2", - "protocol": "PROTOCOL_HTTP2" - }, - "local_app:tcp": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:tcp", - "protocol": "PROTOCOL_TCP" - } - }, - "endpoints": { - "local_app:grpc": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8083 - } - } - ] - }, - "local_app:http": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8081 - } - } - ] - }, - "local_app:http2": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8082 - } - } - ] - }, - "local_app:tcp": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8080 - } - } - ] - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "bar", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_GRPC", - "route": { - "name": "public_listener:grpc" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~grpc" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "route": { - "name": "public_listener:http" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~http" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_HTTP2", - "route": { - "name": "public_listener:http2" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~http2" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l4": { - "cluster": { - "name": "local_app:tcp" - }, - "statPrefix": "public_listener", - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~tcp" - ] - } - } - ] - } - ], - "routes": { - "public_listener:grpc": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:grpc", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:grpc" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:http": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:http", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:http" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:http2": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:http2", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:http2" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "bar", - "partition": "foo" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/single-workload-address-without-ports-foo-default.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/single-workload-address-without-ports-foo-default.golden deleted file mode 100644 index ef874be52ac62..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/single-workload-address-without-ports-foo-default.golden +++ /dev/null @@ -1,291 +0,0 @@ -{ - "proxyState": { - "clusters": { - "local_app:grpc": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:grpc", - "protocol": "PROTOCOL_GRPC" - }, - "local_app:http": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:http", - "protocol": "PROTOCOL_HTTP" - }, - "local_app:http2": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:http2", - "protocol": "PROTOCOL_HTTP2" - }, - "local_app:tcp": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:tcp", - "protocol": "PROTOCOL_TCP" - } - }, - "endpoints": { - "local_app:grpc": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8083 - } - } - ] - }, - "local_app:http": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8081 - } - } - ] - }, - "local_app:http2": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8082 - } - } - ] - }, - "local_app:tcp": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8080 - } - } - ] - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "default", - "partition": "foo", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_GRPC", - "route": { - "name": "public_listener:grpc" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~grpc" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "route": { - "name": "public_listener:http" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~http" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_HTTP2", - "route": { - "name": "public_listener:http2" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~http2" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l4": { - "cluster": { - "name": "local_app:tcp" - }, - "statPrefix": "public_listener", - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~tcp" - ] - } - } - ] - } - ], - "routes": { - "public_listener:grpc": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:grpc", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:grpc" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:http": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:http", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:http" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:http2": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:http2", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:http2" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "default", - "partition": "foo" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/single-workload-address-without-ports.golden b/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/single-workload-address-without-ports.golden deleted file mode 100644 index b86daa2817148..0000000000000 --- a/internal/mesh/internal/controllers/sidecarproxy/builder/testdata/source/single-workload-address-without-ports.golden +++ /dev/null @@ -1,291 +0,0 @@ -{ - "proxyState": { - "clusters": { - "local_app:grpc": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:grpc", - "protocol": "PROTOCOL_GRPC" - }, - "local_app:http": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:http", - "protocol": "PROTOCOL_HTTP" - }, - "local_app:http2": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:http2", - "protocol": "PROTOCOL_HTTP2" - }, - "local_app:tcp": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:tcp", - "protocol": "PROTOCOL_TCP" - } - }, - "endpoints": { - "local_app:grpc": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8083 - } - } - ] - }, - "local_app:http": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8081 - } - } - ] - }, - "local_app:http2": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8082 - } - } - ] - }, - "local_app:tcp": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8080 - } - } - ] - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_GRPC", - "route": { - "name": "public_listener:grpc" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~grpc" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "route": { - "name": "public_listener:http" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~http" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_HTTP2", - "route": { - "name": "public_listener:http2" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~http2" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l4": { - "cluster": { - "name": "local_app:tcp" - }, - "statPrefix": "public_listener", - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~tcp" - ] - } - } - ] - } - ], - "routes": { - "public_listener:grpc": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:grpc", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:grpc" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:http": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:http", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:http" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:http2": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:http2", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:http2" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - } - }, - "requiredLeafCertificates": { - "test-identity": { - "name": "test-identity", - "namespace": "default", - "partition": "default" - } - }, - "requiredTrustBundles": { - "local": { - "peer": "local" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/sidecarproxy/cache/cache_test.go b/internal/mesh/internal/controllers/sidecarproxy/cache/cache_test.go index f49feccb1843c..2aa5484db498e 100644 --- a/internal/mesh/internal/controllers/sidecarproxy/cache/cache_test.go +++ b/internal/mesh/internal/controllers/sidecarproxy/cache/cache_test.go @@ -5,7 +5,6 @@ package cache import ( "context" - "github.com/hashicorp/consul/internal/mesh/internal/controllers/routes/routestest" "testing" "github.com/stretchr/testify/require" @@ -13,6 +12,7 @@ import ( svctest "github.com/hashicorp/consul/agent/grpc-external/services/resource/testing" "github.com/hashicorp/consul/internal/catalog" "github.com/hashicorp/consul/internal/controller" + "github.com/hashicorp/consul/internal/mesh/internal/controllers/routes/routestest" "github.com/hashicorp/consul/internal/mesh/internal/types" "github.com/hashicorp/consul/internal/resource" "github.com/hashicorp/consul/internal/resource/resourcetest" @@ -24,403 +24,397 @@ import ( ) func TestIdentities(t *testing.T) { - resourcetest.RunWithTenancies(func(tenancy *pbresource.Tenancy) { - cache := New() - - identityID1 := resourcetest.Resource(pbauth.WorkloadIdentityType, "workload-identity-1"). - WithTenancy(tenancy).ID() - identityID2 := resourcetest.Resource(pbauth.WorkloadIdentityType, "workload-identity-2"). - WithTenancy(tenancy).ID() - - w1 := resourcetest.Resource(pbcatalog.WorkloadType, "service-workload-1"). - WithData(t, &pbcatalog.Workload{ - Identity: identityID1.Name, - }). - WithTenancy(tenancy). - Build() - decW1 := resourcetest.MustDecode[*pbcatalog.Workload](t, w1) - w2 := resourcetest.Resource(pbcatalog.WorkloadType, "service-workload-2"). - WithData(t, &pbcatalog.Workload{ - Identity: identityID2.Name, - }). - WithTenancy(tenancy). - Build() - decW2 := resourcetest.MustDecode[*pbcatalog.Workload](t, w2) - - // Empty cache - require.Nil(t, cache.WorkloadsByWorkloadIdentity(identityID1)) - require.Nil(t, cache.WorkloadsByWorkloadIdentity(identityID2)) - - // Insert value and fetch it. - cache.TrackWorkload(decW1) - require.Equal(t, []*pbresource.ID{w1.Id}, cache.WorkloadsByWorkloadIdentity(identityID1)) - require.Nil(t, cache.WorkloadsByWorkloadIdentity(identityID2)) - - // Insert another value referencing the same identity. - decW2.GetData().Identity = identityID1.Name - cache.TrackWorkload(decW2) - require.ElementsMatch(t, []*pbresource.ID{w1.Id, w2.Id}, cache.WorkloadsByWorkloadIdentity(identityID1)) - require.Nil(t, cache.WorkloadsByWorkloadIdentity(identityID2)) - - // Now workload 1 uses identity 2 - decW1.GetData().Identity = identityID2.Name - cache.TrackWorkload(decW1) - require.Equal(t, []*pbresource.ID{w1.Id}, cache.WorkloadsByWorkloadIdentity(identityID2)) - require.Equal(t, []*pbresource.ID{w2.Id}, cache.WorkloadsByWorkloadIdentity(identityID1)) - - // Untrack workload 2 - cache.UntrackWorkload(w2.Id) - require.Equal(t, []*pbresource.ID{w1.Id}, cache.WorkloadsByWorkloadIdentity(identityID2)) - require.Nil(t, cache.WorkloadsByWorkloadIdentity(identityID1)) - - // Untrack workload 1 - cache.UntrackWorkload(w1.Id) - require.Nil(t, cache.WorkloadsByWorkloadIdentity(identityID2)) - require.Nil(t, cache.WorkloadsByWorkloadIdentity(identityID1)) - }, t) + cache := New() + + identityID1 := resourcetest.Resource(pbauth.WorkloadIdentityType, "workload-identity-1"). + WithTenancy(resource.DefaultNamespacedTenancy()).ID() + identityID2 := resourcetest.Resource(pbauth.WorkloadIdentityType, "workload-identity-2"). + WithTenancy(resource.DefaultNamespacedTenancy()).ID() + + w1 := resourcetest.Resource(pbcatalog.WorkloadType, "service-workload-1"). + WithData(t, &pbcatalog.Workload{ + Identity: identityID1.Name, + }). + WithTenancy(resource.DefaultNamespacedTenancy()). + Build() + decW1 := resourcetest.MustDecode[*pbcatalog.Workload](t, w1) + w2 := resourcetest.Resource(pbcatalog.WorkloadType, "service-workload-2"). + WithData(t, &pbcatalog.Workload{ + Identity: identityID2.Name, + }). + WithTenancy(resource.DefaultNamespacedTenancy()). + Build() + decW2 := resourcetest.MustDecode[*pbcatalog.Workload](t, w2) + + // Empty cache + require.Nil(t, cache.WorkloadsByWorkloadIdentity(identityID1)) + require.Nil(t, cache.WorkloadsByWorkloadIdentity(identityID2)) + + // Insert value and fetch it. + cache.TrackWorkload(decW1) + require.Equal(t, []*pbresource.ID{w1.Id}, cache.WorkloadsByWorkloadIdentity(identityID1)) + require.Nil(t, cache.WorkloadsByWorkloadIdentity(identityID2)) + + // Insert another value referencing the same identity. + decW2.GetData().Identity = identityID1.Name + cache.TrackWorkload(decW2) + require.ElementsMatch(t, []*pbresource.ID{w1.Id, w2.Id}, cache.WorkloadsByWorkloadIdentity(identityID1)) + require.Nil(t, cache.WorkloadsByWorkloadIdentity(identityID2)) + + // Now workload 1 uses identity 2 + decW1.GetData().Identity = identityID2.Name + cache.TrackWorkload(decW1) + require.Equal(t, []*pbresource.ID{w1.Id}, cache.WorkloadsByWorkloadIdentity(identityID2)) + require.Equal(t, []*pbresource.ID{w2.Id}, cache.WorkloadsByWorkloadIdentity(identityID1)) + + // Untrack workload 2 + cache.UntrackWorkload(w2.Id) + require.Equal(t, []*pbresource.ID{w1.Id}, cache.WorkloadsByWorkloadIdentity(identityID2)) + require.Nil(t, cache.WorkloadsByWorkloadIdentity(identityID1)) + + // Untrack workload 1 + cache.UntrackWorkload(w1.Id) + require.Nil(t, cache.WorkloadsByWorkloadIdentity(identityID2)) + require.Nil(t, cache.WorkloadsByWorkloadIdentity(identityID1)) } func TestMapComputedTrafficPermissions(t *testing.T) { - resourcetest.RunWithTenancies(func(tenancy *pbresource.Tenancy) { - client := svctest.RunResourceService(t, types.Register, catalog.RegisterTypes) - ctp := resourcetest.Resource(pbauth.ComputedTrafficPermissionsType, "workload-identity-1"). - WithTenancy(tenancy). - WithData(t, &pbauth.ComputedTrafficPermissions{}). - Build() - - c := New() - - // Empty results when the cache isn't populated. - requests, err := c.MapComputedTrafficPermissions(context.Background(), controller.Runtime{Client: client}, ctp) - require.NoError(t, err) - require.Len(t, requests, 0) - - identityID1 := resourcetest.Resource(pbauth.WorkloadIdentityType, "workload-identity-1"). - WithTenancy(tenancy).ID() - - w1 := resourcetest.Resource(pbcatalog.WorkloadType, "service-workload-1"). - WithData(t, &pbcatalog.Workload{ - Identity: identityID1.Name, - }). - WithTenancy(tenancy). - Build() - decW1 := resourcetest.MustDecode[*pbcatalog.Workload](t, w1) - w2 := resourcetest.Resource(pbcatalog.WorkloadType, "service-workload-2"). - WithData(t, &pbcatalog.Workload{ - Identity: identityID1.Name, - }). - WithTenancy(tenancy). - Build() - decW2 := resourcetest.MustDecode[*pbcatalog.Workload](t, w2) - - c.TrackWorkload(decW1) - - // Empty results when the cache isn't populated. - requests, err = c.MapComputedTrafficPermissions(context.Background(), controller.Runtime{Client: client}, ctp) - require.NoError(t, err) - prototest.AssertElementsMatch(t, - []controller.Request{{ID: resource.ReplaceType(pbmesh.ProxyStateTemplateType, w1.Id)}}, requests) - - c.TrackWorkload(decW2) - - // Empty results when the cache isn't populated. - requests, err = c.MapComputedTrafficPermissions(context.Background(), controller.Runtime{Client: client}, ctp) - require.NoError(t, err) - prototest.AssertElementsMatch(t, []controller.Request{ - {ID: resource.ReplaceType(pbmesh.ProxyStateTemplateType, w1.Id)}, - {ID: resource.ReplaceType(pbmesh.ProxyStateTemplateType, w2.Id)}, - }, requests) - }, t) + client := svctest.RunResourceService(t, types.Register, catalog.RegisterTypes) + ctp := resourcetest.Resource(pbauth.ComputedTrafficPermissionsType, "workload-identity-1"). + WithTenancy(resource.DefaultNamespacedTenancy()). + WithData(t, &pbauth.ComputedTrafficPermissions{}). + Build() + + c := New() + + // Empty results when the cache isn't populated. + requests, err := c.MapComputedTrafficPermissions(context.Background(), controller.Runtime{Client: client}, ctp) + require.NoError(t, err) + require.Len(t, requests, 0) + + identityID1 := resourcetest.Resource(pbauth.WorkloadIdentityType, "workload-identity-1"). + WithTenancy(resource.DefaultNamespacedTenancy()).ID() + + w1 := resourcetest.Resource(pbcatalog.WorkloadType, "service-workload-1"). + WithData(t, &pbcatalog.Workload{ + Identity: identityID1.Name, + }). + WithTenancy(resource.DefaultNamespacedTenancy()). + Build() + decW1 := resourcetest.MustDecode[*pbcatalog.Workload](t, w1) + w2 := resourcetest.Resource(pbcatalog.WorkloadType, "service-workload-2"). + WithData(t, &pbcatalog.Workload{ + Identity: identityID1.Name, + }). + WithTenancy(resource.DefaultNamespacedTenancy()). + Build() + decW2 := resourcetest.MustDecode[*pbcatalog.Workload](t, w2) + + c.TrackWorkload(decW1) + + // Empty results when the cache isn't populated. + requests, err = c.MapComputedTrafficPermissions(context.Background(), controller.Runtime{Client: client}, ctp) + require.NoError(t, err) + prototest.AssertElementsMatch(t, + []controller.Request{{ID: resource.ReplaceType(pbmesh.ProxyStateTemplateType, w1.Id)}}, requests) + + c.TrackWorkload(decW2) + + // Empty results when the cache isn't populated. + requests, err = c.MapComputedTrafficPermissions(context.Background(), controller.Runtime{Client: client}, ctp) + require.NoError(t, err) + prototest.AssertElementsMatch(t, []controller.Request{ + {ID: resource.ReplaceType(pbmesh.ProxyStateTemplateType, w1.Id)}, + {ID: resource.ReplaceType(pbmesh.ProxyStateTemplateType, w2.Id)}, + }, requests) } func TestUnified_AllMappingsToProxyStateTemplate(t *testing.T) { - resourcetest.RunWithTenancies(func(tenancy *pbresource.Tenancy) { - var ( - cache = New() - client = svctest.RunResourceService(t, types.Register, catalog.RegisterTypes) - ) - - anyServiceData := &pbcatalog.Service{ - Workloads: &pbcatalog.WorkloadSelector{ - Prefixes: []string{"src-workload"}, + var ( + cache = New() + client = svctest.RunResourceService(t, types.Register, catalog.RegisterTypes) + ) + + anyServiceData := &pbcatalog.Service{ + Workloads: &pbcatalog.WorkloadSelector{ + Prefixes: []string{"src-workload"}, + }, + Ports: []*pbcatalog.ServicePort{ + { + TargetPort: "tcp1", + Protocol: pbcatalog.Protocol_PROTOCOL_TCP, + }, + { + TargetPort: "tcp2", + Protocol: pbcatalog.Protocol_PROTOCOL_TCP, + }, + { + TargetPort: "mesh", + Protocol: pbcatalog.Protocol_PROTOCOL_MESH, + }, + }, + } + + // The thing we link through Destinations. + destService := resourcetest.Resource(pbcatalog.ServiceType, "web"). + WithTenancy(resource.DefaultNamespacedTenancy()). + WithData(t, anyServiceData). + Build() + destServiceRef := resource.Reference(destService.Id, "") + + // The thing we reach through the mesh config. + targetService := resourcetest.Resource(pbcatalog.ServiceType, "db"). + WithTenancy(resource.DefaultNamespacedTenancy()). + WithData(t, anyServiceData). + Build() + targetServiceRef := resource.Reference(targetService.Id, "") + + backupTargetService := resourcetest.Resource(pbcatalog.ServiceType, "db-backup"). + WithTenancy(resource.DefaultNamespacedTenancy()). + WithData(t, anyServiceData). + Build() + backupTargetServiceRef := resource.Reference(backupTargetService.Id, "") + + // The way we make 'web' actually route traffic to 'db'. + tcpRoute := resourcetest.Resource(pbmesh.TCPRouteType, "tcp-route"). + WithTenancy(resource.DefaultNamespacedTenancy()). + WithData(t, &pbmesh.TCPRoute{ + ParentRefs: []*pbmesh.ParentReference{{ + Ref: destServiceRef, + }}, + Rules: []*pbmesh.TCPRouteRule{{ + BackendRefs: []*pbmesh.TCPBackendRef{{ + BackendRef: &pbmesh.BackendReference{ + Ref: targetServiceRef, + }, + }}, + }}, + }). + Build() + failoverPolicy := resourcetest.ResourceID(resource.ReplaceType(pbcatalog.FailoverPolicyType, targetService.Id)). + WithTenancy(resource.DefaultNamespacedTenancy()). + WithData(t, &pbcatalog.FailoverPolicy{ + Config: &pbcatalog.FailoverConfig{ + Destinations: []*pbcatalog.FailoverDestination{{ + Ref: backupTargetServiceRef, + }}, }, - Ports: []*pbcatalog.ServicePort{ + }). + Build() + webRoutes := routestest.BuildComputedRoutes(t, resource.ReplaceType(pbmesh.ComputedRoutesType, destService.Id), + resourcetest.MustDecode[*pbcatalog.Service](t, destService), + resourcetest.MustDecode[*pbcatalog.Service](t, targetService), + resourcetest.MustDecode[*pbcatalog.Service](t, backupTargetService), + resourcetest.MustDecode[*pbmesh.TCPRoute](t, tcpRoute), + resourcetest.MustDecode[*pbcatalog.FailoverPolicy](t, failoverPolicy), + ) + + var ( + sourceProxy1 = newID(pbmesh.ProxyStateTemplateType, "src-workload-1") + sourceProxy2 = newID(pbmesh.ProxyStateTemplateType, "src-workload-2") + sourceProxy3 = newID(pbmesh.ProxyStateTemplateType, "src-workload-3") + sourceProxy4 = newID(pbmesh.ProxyStateTemplateType, "src-workload-4") + sourceProxy5 = newID(pbmesh.ProxyStateTemplateType, "src-workload-5") + sourceProxy6 = newID(pbmesh.ProxyStateTemplateType, "src-workload-6") + ) + + compDestProxy1 := resourcetest.Resource(pbmesh.ComputedExplicitDestinationsType, sourceProxy1.Name). + WithData(t, &pbmesh.ComputedExplicitDestinations{ + Destinations: []*pbmesh.Destination{ { - TargetPort: "tcp1", - Protocol: pbcatalog.Protocol_PROTOCOL_TCP, + DestinationRef: destServiceRef, + DestinationPort: "tcp1", }, + }, + }). + WithTenancy(resource.DefaultNamespacedTenancy()). + Build() + + compDestProxy2 := resourcetest.Resource(pbmesh.ComputedExplicitDestinationsType, sourceProxy2.Name). + WithData(t, &pbmesh.ComputedExplicitDestinations{ + Destinations: []*pbmesh.Destination{ { - TargetPort: "tcp2", - Protocol: pbcatalog.Protocol_PROTOCOL_TCP, + DestinationRef: destServiceRef, + DestinationPort: "tcp1", }, + }, + }). + WithTenancy(resource.DefaultNamespacedTenancy()). + Build() + + compDestProxy3 := resourcetest.Resource(pbmesh.ComputedExplicitDestinationsType, sourceProxy3.Name). + WithData(t, &pbmesh.ComputedExplicitDestinations{ + Destinations: []*pbmesh.Destination{ { - TargetPort: "mesh", - Protocol: pbcatalog.Protocol_PROTOCOL_MESH, + DestinationRef: destServiceRef, + DestinationPort: "tcp2", }, }, - } + }). + WithTenancy(resource.DefaultNamespacedTenancy()). + Build() - // The thing we link through Destinations. - destService := resourcetest.Resource(pbcatalog.ServiceType, "web"). - WithTenancy(tenancy). - WithData(t, anyServiceData). - Build() - destServiceRef := resource.Reference(destService.Id, "") - - // The thing we reach through the mesh config. - targetService := resourcetest.Resource(pbcatalog.ServiceType, "db"). - WithTenancy(tenancy). - WithData(t, anyServiceData). - Build() - targetServiceRef := resource.Reference(targetService.Id, "") - - backupTargetService := resourcetest.Resource(pbcatalog.ServiceType, "db-backup"). - WithTenancy(tenancy). - WithData(t, anyServiceData). - Build() - backupTargetServiceRef := resource.Reference(backupTargetService.Id, "") - - // The way we make 'web' actually route traffic to 'db'. - tcpRoute := resourcetest.Resource(pbmesh.TCPRouteType, "tcp-route"). - WithTenancy(tenancy). - WithData(t, &pbmesh.TCPRoute{ - ParentRefs: []*pbmesh.ParentReference{{ - Ref: destServiceRef, - }}, - Rules: []*pbmesh.TCPRouteRule{{ - BackendRefs: []*pbmesh.TCPBackendRef{{ - BackendRef: &pbmesh.BackendReference{ - Ref: targetServiceRef, - }, - }}, - }}, - }). - Build() - failoverPolicy := resourcetest.ResourceID(resource.ReplaceType(pbcatalog.FailoverPolicyType, targetService.Id)). - WithTenancy(tenancy). - WithData(t, &pbcatalog.FailoverPolicy{ - Config: &pbcatalog.FailoverConfig{ - Destinations: []*pbcatalog.FailoverDestination{{ - Ref: backupTargetServiceRef, - }}, - }, - }). - Build() - webRoutes := routestest.BuildComputedRoutes(t, resource.ReplaceType(pbmesh.ComputedRoutesType, destService.Id), - resourcetest.MustDecode[*pbcatalog.Service](t, destService), - resourcetest.MustDecode[*pbcatalog.Service](t, targetService), - resourcetest.MustDecode[*pbcatalog.Service](t, backupTargetService), - resourcetest.MustDecode[*pbmesh.TCPRoute](t, tcpRoute), - resourcetest.MustDecode[*pbcatalog.FailoverPolicy](t, failoverPolicy), - ) - - var ( - sourceProxy1 = newID(pbmesh.ProxyStateTemplateType, "src-workload-1", tenancy) - sourceProxy2 = newID(pbmesh.ProxyStateTemplateType, "src-workload-2", tenancy) - sourceProxy3 = newID(pbmesh.ProxyStateTemplateType, "src-workload-3", tenancy) - sourceProxy4 = newID(pbmesh.ProxyStateTemplateType, "src-workload-4", tenancy) - sourceProxy5 = newID(pbmesh.ProxyStateTemplateType, "src-workload-5", tenancy) - sourceProxy6 = newID(pbmesh.ProxyStateTemplateType, "src-workload-6", tenancy) - ) - - compDestProxy1 := resourcetest.Resource(pbmesh.ComputedExplicitDestinationsType, sourceProxy1.Name). - WithData(t, &pbmesh.ComputedExplicitDestinations{ - Destinations: []*pbmesh.Destination{ - { - DestinationRef: destServiceRef, - DestinationPort: "tcp1", - }, - }, - }). - WithTenancy(tenancy). - Build() - - compDestProxy2 := resourcetest.Resource(pbmesh.ComputedExplicitDestinationsType, sourceProxy2.Name). - WithData(t, &pbmesh.ComputedExplicitDestinations{ - Destinations: []*pbmesh.Destination{ - { - DestinationRef: destServiceRef, - DestinationPort: "tcp1", - }, - }, - }). - WithTenancy(tenancy). - Build() - - compDestProxy3 := resourcetest.Resource(pbmesh.ComputedExplicitDestinationsType, sourceProxy3.Name). - WithData(t, &pbmesh.ComputedExplicitDestinations{ - Destinations: []*pbmesh.Destination{ - { - DestinationRef: destServiceRef, - DestinationPort: "tcp2", - }, - }, - }). - WithTenancy(tenancy). - Build() - - compDestProxy4 := resourcetest.Resource(pbmesh.ComputedExplicitDestinationsType, sourceProxy4.Name). - WithData(t, &pbmesh.ComputedExplicitDestinations{ - Destinations: []*pbmesh.Destination{ - { - DestinationRef: destServiceRef, - DestinationPort: "tcp2", - }, + compDestProxy4 := resourcetest.Resource(pbmesh.ComputedExplicitDestinationsType, sourceProxy4.Name). + WithData(t, &pbmesh.ComputedExplicitDestinations{ + Destinations: []*pbmesh.Destination{ + { + DestinationRef: destServiceRef, + DestinationPort: "tcp2", }, - }). - WithTenancy(tenancy). - Build() - - compDestProxy5 := resourcetest.Resource(pbmesh.ComputedExplicitDestinationsType, sourceProxy5.Name). - WithData(t, &pbmesh.ComputedExplicitDestinations{ - Destinations: []*pbmesh.Destination{ - { - DestinationRef: destServiceRef, - DestinationPort: "mesh", - }, + }, + }). + WithTenancy(resource.DefaultNamespacedTenancy()). + Build() + + compDestProxy5 := resourcetest.Resource(pbmesh.ComputedExplicitDestinationsType, sourceProxy5.Name). + WithData(t, &pbmesh.ComputedExplicitDestinations{ + Destinations: []*pbmesh.Destination{ + { + DestinationRef: destServiceRef, + DestinationPort: "mesh", }, - }). - WithTenancy(tenancy). - Build() - - compDestProxy6 := resourcetest.Resource(pbmesh.ComputedExplicitDestinationsType, sourceProxy6.Name). - WithData(t, &pbmesh.ComputedExplicitDestinations{ - Destinations: []*pbmesh.Destination{ - { - DestinationRef: destServiceRef, - DestinationPort: "mesh", - }, + }, + }). + WithTenancy(resource.DefaultNamespacedTenancy()). + Build() + + compDestProxy6 := resourcetest.Resource(pbmesh.ComputedExplicitDestinationsType, sourceProxy6.Name). + WithData(t, &pbmesh.ComputedExplicitDestinations{ + Destinations: []*pbmesh.Destination{ + { + DestinationRef: destServiceRef, + DestinationPort: "mesh", }, - }). - WithTenancy(tenancy). - Build() - - cache.trackComputedRoutes(webRoutes) - cache.TrackComputedDestinations(resourcetest.MustDecode[*pbmesh.ComputedExplicitDestinations](t, compDestProxy1)) - cache.TrackComputedDestinations(resourcetest.MustDecode[*pbmesh.ComputedExplicitDestinations](t, compDestProxy2)) - cache.TrackComputedDestinations(resourcetest.MustDecode[*pbmesh.ComputedExplicitDestinations](t, compDestProxy3)) - cache.TrackComputedDestinations(resourcetest.MustDecode[*pbmesh.ComputedExplicitDestinations](t, compDestProxy4)) - cache.TrackComputedDestinations(resourcetest.MustDecode[*pbmesh.ComputedExplicitDestinations](t, compDestProxy5)) - cache.TrackComputedDestinations(resourcetest.MustDecode[*pbmesh.ComputedExplicitDestinations](t, compDestProxy6)) - - t.Run(resourcetest.AppendTenancyInfoSubtest(t.Name(), "Service", tenancy), func(t *testing.T) { - t.Run("map dest service", func(t *testing.T) { - requests, err := cache.MapService( - context.Background(), - controller.Runtime{Client: client}, - destService, - ) - require.NoError(t, err) - - // Only wake up things with dest as an upstream. - expRequests := []controller.Request{ - {ID: sourceProxy1}, - {ID: sourceProxy2}, - {ID: sourceProxy3}, - {ID: sourceProxy4}, - {ID: sourceProxy5}, - {ID: sourceProxy6}, - } - - prototest.AssertElementsMatch(t, expRequests, requests) - - // Check that service's workload selector is tracked. - prototest.AssertElementsMatch(t, - []*pbresource.ID{destService.Id}, - cache.serviceSelectorTracker.GetIDsForWorkload(resource.ReplaceType(pbcatalog.WorkloadType, sourceProxy1))) - prototest.AssertElementsMatch(t, - []*pbresource.ID{destService.Id}, - cache.serviceSelectorTracker.GetIDsForWorkload(resource.ReplaceType(pbcatalog.WorkloadType, sourceProxy2))) - prototest.AssertElementsMatch(t, - []*pbresource.ID{destService.Id}, - cache.serviceSelectorTracker.GetIDsForWorkload(resource.ReplaceType(pbcatalog.WorkloadType, sourceProxy3))) - prototest.AssertElementsMatch(t, - []*pbresource.ID{destService.Id}, - cache.serviceSelectorTracker.GetIDsForWorkload(resource.ReplaceType(pbcatalog.WorkloadType, sourceProxy4))) - prototest.AssertElementsMatch(t, - []*pbresource.ID{destService.Id}, - cache.serviceSelectorTracker.GetIDsForWorkload(resource.ReplaceType(pbcatalog.WorkloadType, sourceProxy5))) - prototest.AssertElementsMatch(t, - []*pbresource.ID{destService.Id}, - cache.serviceSelectorTracker.GetIDsForWorkload(resource.ReplaceType(pbcatalog.WorkloadType, sourceProxy6))) - }) - - t.Run("map target endpoints (TCPRoute)", func(t *testing.T) { - requests, err := cache.MapService( - context.Background(), - controller.Runtime{Client: client}, - targetService, - ) - require.NoError(t, err) - - requests = testDeduplicateRequests(requests) - - expRequests := []controller.Request{ - // Wakeup things that have destService as a destination b/c of the TCPRoute reference. - {ID: sourceProxy1}, - {ID: sourceProxy2}, - {ID: sourceProxy3}, - {ID: sourceProxy4}, - {ID: sourceProxy5}, - {ID: sourceProxy6}, - } - - prototest.AssertElementsMatch(t, expRequests, requests) - }) - - t.Run("map backup target endpoints (FailoverPolicy)", func(t *testing.T) { - requests, err := cache.MapService( - context.Background(), - controller.Runtime{Client: client}, - backupTargetService, - ) - require.NoError(t, err) - - requests = testDeduplicateRequests(requests) - - expRequests := []controller.Request{ - // Wakeup things that have destService as a destination b/c of the FailoverPolicy reference. - {ID: sourceProxy1}, - {ID: sourceProxy2}, - {ID: sourceProxy3}, - {ID: sourceProxy4}, - {ID: sourceProxy5}, - {ID: sourceProxy6}, - } - - prototest.AssertElementsMatch(t, expRequests, requests) - }) + }, + }). + WithTenancy(resource.DefaultNamespacedTenancy()). + Build() + + cache.trackComputedRoutes(webRoutes) + cache.TrackComputedDestinations(resourcetest.MustDecode[*pbmesh.ComputedExplicitDestinations](t, compDestProxy1)) + cache.TrackComputedDestinations(resourcetest.MustDecode[*pbmesh.ComputedExplicitDestinations](t, compDestProxy2)) + cache.TrackComputedDestinations(resourcetest.MustDecode[*pbmesh.ComputedExplicitDestinations](t, compDestProxy3)) + cache.TrackComputedDestinations(resourcetest.MustDecode[*pbmesh.ComputedExplicitDestinations](t, compDestProxy4)) + cache.TrackComputedDestinations(resourcetest.MustDecode[*pbmesh.ComputedExplicitDestinations](t, compDestProxy5)) + cache.TrackComputedDestinations(resourcetest.MustDecode[*pbmesh.ComputedExplicitDestinations](t, compDestProxy6)) + + t.Run("Service", func(t *testing.T) { + t.Run("map dest service", func(t *testing.T) { + requests, err := cache.MapService( + context.Background(), + controller.Runtime{Client: client}, + destService, + ) + require.NoError(t, err) + + // Only wake up things with dest as an upstream. + expRequests := []controller.Request{ + {ID: sourceProxy1}, + {ID: sourceProxy2}, + {ID: sourceProxy3}, + {ID: sourceProxy4}, + {ID: sourceProxy5}, + {ID: sourceProxy6}, + } + + prototest.AssertElementsMatch(t, expRequests, requests) + + // Check that service's workload selector is tracked. + prototest.AssertElementsMatch(t, + []*pbresource.ID{destService.Id}, + cache.serviceSelectorTracker.GetIDsForWorkload(resource.ReplaceType(pbcatalog.WorkloadType, sourceProxy1))) + prototest.AssertElementsMatch(t, + []*pbresource.ID{destService.Id}, + cache.serviceSelectorTracker.GetIDsForWorkload(resource.ReplaceType(pbcatalog.WorkloadType, sourceProxy2))) + prototest.AssertElementsMatch(t, + []*pbresource.ID{destService.Id}, + cache.serviceSelectorTracker.GetIDsForWorkload(resource.ReplaceType(pbcatalog.WorkloadType, sourceProxy3))) + prototest.AssertElementsMatch(t, + []*pbresource.ID{destService.Id}, + cache.serviceSelectorTracker.GetIDsForWorkload(resource.ReplaceType(pbcatalog.WorkloadType, sourceProxy4))) + prototest.AssertElementsMatch(t, + []*pbresource.ID{destService.Id}, + cache.serviceSelectorTracker.GetIDsForWorkload(resource.ReplaceType(pbcatalog.WorkloadType, sourceProxy5))) + prototest.AssertElementsMatch(t, + []*pbresource.ID{destService.Id}, + cache.serviceSelectorTracker.GetIDsForWorkload(resource.ReplaceType(pbcatalog.WorkloadType, sourceProxy6))) + }) + + t.Run("map target endpoints (TCPRoute)", func(t *testing.T) { + requests, err := cache.MapService( + context.Background(), + controller.Runtime{Client: client}, + targetService, + ) + require.NoError(t, err) + + requests = testDeduplicateRequests(requests) + + expRequests := []controller.Request{ + // Wakeup things that have destService as a destination b/c of the TCPRoute reference. + {ID: sourceProxy1}, + {ID: sourceProxy2}, + {ID: sourceProxy3}, + {ID: sourceProxy4}, + {ID: sourceProxy5}, + {ID: sourceProxy6}, + } + + prototest.AssertElementsMatch(t, expRequests, requests) }) - t.Run(resourcetest.AppendTenancyInfoSubtest(t.Name(), "ComputedRoutes", tenancy), func(t *testing.T) { - t.Run("map web routes", func(t *testing.T) { - requests, err := cache.MapComputedRoutes( - context.Background(), - controller.Runtime{Client: client}, - webRoutes.Resource, - ) - require.NoError(t, err) - - // Only wake up things with dest as an upstream. - expRequests := []controller.Request{ - {ID: sourceProxy1}, - {ID: sourceProxy2}, - {ID: sourceProxy3}, - {ID: sourceProxy4}, - {ID: sourceProxy5}, - {ID: sourceProxy6}, - } - - prototest.AssertElementsMatch(t, expRequests, requests) - }) + t.Run("map backup target endpoints (FailoverPolicy)", func(t *testing.T) { + requests, err := cache.MapService( + context.Background(), + controller.Runtime{Client: client}, + backupTargetService, + ) + require.NoError(t, err) + + requests = testDeduplicateRequests(requests) + + expRequests := []controller.Request{ + // Wakeup things that have destService as a destination b/c of the FailoverPolicy reference. + {ID: sourceProxy1}, + {ID: sourceProxy2}, + {ID: sourceProxy3}, + {ID: sourceProxy4}, + {ID: sourceProxy5}, + {ID: sourceProxy6}, + } + + prototest.AssertElementsMatch(t, expRequests, requests) + }) + }) + + t.Run("ComputedRoutes", func(t *testing.T) { + t.Run("map web routes", func(t *testing.T) { + requests, err := cache.MapComputedRoutes( + context.Background(), + controller.Runtime{Client: client}, + webRoutes.Resource, + ) + require.NoError(t, err) + + // Only wake up things with dest as an upstream. + expRequests := []controller.Request{ + {ID: sourceProxy1}, + {ID: sourceProxy2}, + {ID: sourceProxy3}, + {ID: sourceProxy4}, + {ID: sourceProxy5}, + {ID: sourceProxy6}, + } + + prototest.AssertElementsMatch(t, expRequests, requests) }) - }, t) + }) } -func newID(typ *pbresource.Type, name string, tenancy *pbresource.Tenancy) *pbresource.ID { +func newID(typ *pbresource.Type, name string) *pbresource.ID { return &pbresource.ID{ Type: typ, - Tenancy: tenancy, + Tenancy: resource.DefaultNamespacedTenancy(), Name: name, } } diff --git a/internal/mesh/internal/controllers/sidecarproxy/controller_test.go b/internal/mesh/internal/controllers/sidecarproxy/controller_test.go index 384f14e6bf384..adeffe1cdf7e0 100644 --- a/internal/mesh/internal/controllers/sidecarproxy/controller_test.go +++ b/internal/mesh/internal/controllers/sidecarproxy/controller_test.go @@ -5,9 +5,6 @@ package sidecarproxy import ( "context" - "fmt" - mockres "github.com/hashicorp/consul/agent/grpc-external/services/resource" - "github.com/hashicorp/consul/internal/mesh/internal/controllers/routes/routestest" "strings" "testing" @@ -19,6 +16,7 @@ import ( "github.com/hashicorp/consul/internal/auth" "github.com/hashicorp/consul/internal/catalog" "github.com/hashicorp/consul/internal/controller" + "github.com/hashicorp/consul/internal/mesh/internal/controllers/routes/routestest" "github.com/hashicorp/consul/internal/mesh/internal/controllers/sidecarproxy/builder" "github.com/hashicorp/consul/internal/mesh/internal/controllers/sidecarproxy/cache" "github.com/hashicorp/consul/internal/mesh/internal/controllers/sidecarproxy/fetcher" @@ -61,22 +59,10 @@ type controllerTestSuite struct { dbEndpointsData *pbcatalog.ServiceEndpoints proxyStateTemplate *pbmesh.ProxyStateTemplate - tenancies []*pbresource.Tenancy } func (suite *controllerTestSuite) SetupTest() { - suite.tenancies = resourcetest.TestTenancies() - mockTenancyBridge := &mockres.MockTenancyBridge{} - for _, tenancy := range suite.tenancies { - mockTenancyBridge.On("PartitionExists", tenancy.Partition).Return(true, nil) - mockTenancyBridge.On("NamespaceExists", tenancy.Partition, tenancy.Namespace).Return(true, nil) - mockTenancyBridge.On("IsPartitionMarkedForDeletion", tenancy.Partition).Return(false, nil) - mockTenancyBridge.On("IsNamespaceMarkedForDeletion", tenancy.Partition, tenancy.Namespace).Return(false, nil) - } - cfg := mockres.Config{ - TenancyBridge: mockTenancyBridge, - } - resourceClient := svctest.RunResourceServiceWithConfig(suite.T(), cfg, types.Register, catalog.RegisterTypes, auth.RegisterTypes) + resourceClient := svctest.RunResourceService(suite.T(), types.Register, catalog.RegisterTypes, auth.RegisterTypes) suite.client = resourcetest.NewClient(resourceClient) suite.runtime = controller.Runtime{Client: resourceClient, Logger: testutil.Logger(suite.T())} suite.ctx = testutil.TestContext(suite.T()) @@ -88,17 +74,67 @@ func (suite *controllerTestSuite) SetupTest() { }, } - suite.dbWorkload = &pbcatalog.Workload{ - Identity: "db-identity", + { + // DB will be a service with a single workload, IN the mesh that will + // be a destination of web. + + suite.dbWorkload = &pbcatalog.Workload{ + Identity: "db-identity", + Addresses: []*pbcatalog.WorkloadAddress{ + {Host: "10.0.4.1"}, + }, + Ports: map[string]*pbcatalog.WorkloadPort{ + "http": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, + "mesh": {Port: 20000, Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, + }, + } + suite.dbWorkloadID = resourcetest.Resource(pbcatalog.WorkloadType, "db-abc"). + WithData(suite.T(), suite.dbWorkload). + Write(suite.T(), resourceClient).Id + + suite.dbService = resourcetest.Resource(pbcatalog.ServiceType, "db-service"). + WithData(suite.T(), &pbcatalog.Service{ + Workloads: &pbcatalog.WorkloadSelector{Names: []string{"db-abc"}}, + VirtualIps: []string{"1.1.1.1"}, + Ports: []*pbcatalog.ServicePort{ + {TargetPort: "http", Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, + {TargetPort: "mesh", Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, + }}). + Write(suite.T(), suite.client) + + suite.dbEndpointsData = &pbcatalog.ServiceEndpoints{ + Endpoints: []*pbcatalog.Endpoint{ + { + TargetRef: suite.dbWorkloadID, + Addresses: suite.dbWorkload.Addresses, + Ports: suite.dbWorkload.Ports, + Identity: "db-identity", + }, + }, + } + suite.dbEndpoints = resourcetest.Resource(pbcatalog.ServiceEndpointsType, "db-service"). + WithData(suite.T(), suite.dbEndpointsData). + Write(suite.T(), suite.client) + + } + + suite.apiWorkload = &pbcatalog.Workload{ + Identity: "api-identity", Addresses: []*pbcatalog.WorkloadAddress{ - {Host: "10.0.4.1"}, + { + Host: "10.0.0.1", + }, }, Ports: map[string]*pbcatalog.WorkloadPort{ - "http": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, + "tcp": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, "mesh": {Port: 20000, Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, }, } + suite.apiWorkloadID = resourcetest.Resource(pbcatalog.WorkloadType, "api-abc"). + WithData(suite.T(), suite.apiWorkload). + Write(suite.T(), resourceClient).Id + suite.apiServiceData = &pbcatalog.Service{ Workloads: &pbcatalog.WorkloadSelector{Names: []string{"api-abc"}}, VirtualIps: []string{"1.1.1.1"}, @@ -123,83 +159,13 @@ func (suite *controllerTestSuite) SetupTest() { }, }, } -} - -func (suite *controllerTestSuite) setupSuiteWithTenancy(tenancy *pbresource.Tenancy) { - - suite.apiWorkload = &pbcatalog.Workload{ - Identity: "api-identity", - Addresses: []*pbcatalog.WorkloadAddress{ - { - Host: "10.0.0.1", - }, - }, - Ports: map[string]*pbcatalog.WorkloadPort{ - "tcp": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, - "mesh": {Port: 20000, Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, - }, - } - - webWorkloadData := &pbcatalog.Workload{ - Identity: "web-identity", - Addresses: []*pbcatalog.WorkloadAddress{ - { - Host: "10.0.0.2", - }, - }, - Ports: map[string]*pbcatalog.WorkloadPort{ - "tcp": {Port: 8081, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, - "mesh": {Port: 20000, Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, - }, - } - // DB will be a service with a single workload, IN the mesh that will - // be a destination of web. - - suite.dbWorkloadID = resourcetest.Resource(pbcatalog.WorkloadType, "db-abc"). - WithData(suite.T(), suite.dbWorkload). - WithTenancy(tenancy). - Write(suite.T(), suite.client.ResourceServiceClient).Id - - suite.dbService = resourcetest.Resource(pbcatalog.ServiceType, "db-service"). - WithData(suite.T(), &pbcatalog.Service{ - Workloads: &pbcatalog.WorkloadSelector{Names: []string{"db-abc"}}, - VirtualIps: []string{"1.1.1.1"}, - Ports: []*pbcatalog.ServicePort{ - {TargetPort: "http", Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, - {TargetPort: "mesh", Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, - }}). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - - suite.dbEndpointsData = &pbcatalog.ServiceEndpoints{ - Endpoints: []*pbcatalog.Endpoint{ - { - TargetRef: suite.dbWorkloadID, - Addresses: suite.dbWorkload.Addresses, - Ports: suite.dbWorkload.Ports, - Identity: "db-identity", - }, - }, - } - - suite.dbEndpoints = resourcetest.Resource(pbcatalog.ServiceEndpointsType, "db-service"). - WithData(suite.T(), suite.dbEndpointsData). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - - suite.apiWorkloadID = resourcetest.Resource(pbcatalog.WorkloadType, "api-abc"). - WithTenancy(tenancy). - WithData(suite.T(), suite.apiWorkload). - Write(suite.T(), suite.client.ResourceServiceClient).Id suite.apiComputedTrafficPermissions = resourcetest.Resource(pbauth.ComputedTrafficPermissionsType, suite.apiWorkload.Identity). WithData(suite.T(), suite.apiComputedTrafficPermissionsData). - WithTenancy(tenancy). - Write(suite.T(), suite.client.ResourceServiceClient) + Write(suite.T(), resourceClient) suite.apiService = resourcetest.Resource(pbcatalog.ServiceType, "api-service"). WithData(suite.T(), suite.apiServiceData). - WithTenancy(tenancy). Write(suite.T(), suite.client.ResourceServiceClient) suite.apiEndpointsData = &pbcatalog.ServiceEndpoints{ @@ -212,24 +178,31 @@ func (suite *controllerTestSuite) setupSuiteWithTenancy(tenancy *pbresource.Tena }, }, } - suite.apiEndpoints = resourcetest.Resource(pbcatalog.ServiceEndpointsType, "api-service"). WithData(suite.T(), suite.apiEndpointsData). - WithTenancy(tenancy). Write(suite.T(), suite.client.ResourceServiceClient) + webWorkloadData := &pbcatalog.Workload{ + Identity: "web-identity", + Addresses: []*pbcatalog.WorkloadAddress{ + { + Host: "10.0.0.2", + }, + }, + Ports: map[string]*pbcatalog.WorkloadPort{ + "tcp": {Port: 8081, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, + "mesh": {Port: 20000, Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, + }, + } suite.webWorkload = resourcetest.Resource(pbcatalog.WorkloadType, "web-def"). WithData(suite.T(), webWorkloadData). - WithTenancy(tenancy). Write(suite.T(), suite.client) resourcetest.Resource(pbauth.ComputedTrafficPermissionsType, webWorkloadData.Identity). WithData(suite.T(), &pbauth.ComputedTrafficPermissions{IsDefault: true}). - WithTenancy(tenancy). - Write(suite.T(), suite.client.ResourceServiceClient) + Write(suite.T(), resourceClient) resourcetest.Resource(pbcatalog.ServiceType, "web"). - WithTenancy(tenancy). WithData(suite.T(), &pbcatalog.Service{ Workloads: &pbcatalog.WorkloadSelector{Names: []string{"web-def"}}, Ports: []*pbcatalog.ServicePort{ @@ -239,7 +212,6 @@ func (suite *controllerTestSuite) setupSuiteWithTenancy(tenancy *pbresource.Tena Write(suite.T(), suite.client) resourcetest.Resource(pbcatalog.ServiceEndpointsType, "web"). - WithTenancy(tenancy). WithData(suite.T(), &pbcatalog.ServiceEndpoints{ Endpoints: []*pbcatalog.Endpoint{ { @@ -264,290 +236,268 @@ func (suite *controllerTestSuite) setupSuiteWithTenancy(tenancy *pbresource.Tena } func (suite *controllerTestSuite) TestWorkloadPortProtocolsFromService_NoServicesInCache() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - dataFetcher := fetcher.New(suite.client, suite.ctl.cache) + dataFetcher := fetcher.New(suite.client, suite.ctl.cache) - workload := resourcetest.Resource(pbcatalog.WorkloadType, "api-workload"). - WithTenancy(tenancy). - WithData(suite.T(), &pbcatalog.Workload{ - Ports: map[string]*pbcatalog.WorkloadPort{ - "tcp": {Port: 8080}, - }, - }). - Build() + workload := resourcetest.Resource(pbcatalog.WorkloadType, "api-workload"). + WithData(suite.T(), &pbcatalog.Workload{ + Ports: map[string]*pbcatalog.WorkloadPort{ + "tcp": {Port: 8080}, + }, + }). + Build() - decWorkload := resourcetest.MustDecode[*pbcatalog.Workload](suite.T(), workload) - workloadPorts, err := suite.ctl.workloadPortProtocolsFromService(suite.ctx, dataFetcher, decWorkload, suite.runtime.Logger) - require.NoError(suite.T(), err) - prototest.AssertDeepEqual(suite.T(), pbcatalog.Protocol_PROTOCOL_TCP, workloadPorts["tcp"].GetProtocol()) - }) + decWorkload := resourcetest.MustDecode[*pbcatalog.Workload](suite.T(), workload) + workloadPorts, err := suite.ctl.workloadPortProtocolsFromService(suite.ctx, dataFetcher, decWorkload, suite.runtime.Logger) + require.NoError(suite.T(), err) + prototest.AssertDeepEqual(suite.T(), pbcatalog.Protocol_PROTOCOL_TCP, workloadPorts["tcp"].GetProtocol()) } func (suite *controllerTestSuite) TestWorkloadPortProtocolsFromService_ServiceNotFound() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - c := cache.New() - dataFetcher := fetcher.New(suite.client, c) - ctrl := &reconciler{ - cache: c, - getTrustDomain: func() (string, error) { - return "test.consul", nil + c := cache.New() + dataFetcher := fetcher.New(suite.client, c) + ctrl := &reconciler{ + cache: c, + getTrustDomain: func() (string, error) { + return "test.consul", nil + }, + } + svc := resourcetest.Resource(pbcatalog.ServiceType, "not-found"). + WithData(suite.T(), &pbcatalog.Service{ + Workloads: &pbcatalog.WorkloadSelector{ + Names: []string{"api-workload"}, }, - } - svc := resourcetest.Resource(pbcatalog.ServiceType, "not-found"). - WithData(suite.T(), &pbcatalog.Service{ - Workloads: &pbcatalog.WorkloadSelector{ - Names: []string{"api-workload"}, - }, - }). - WithTenancy(tenancy). - Build() + }). + Build() - decSvc := resourcetest.MustDecode[*pbcatalog.Service](suite.T(), svc) - c.TrackService(decSvc) + decSvc := resourcetest.MustDecode[*pbcatalog.Service](suite.T(), svc) + c.TrackService(decSvc) - workload := resourcetest.Resource(pbcatalog.WorkloadType, "api-workload"). - WithData(suite.T(), &pbcatalog.Workload{ - Ports: map[string]*pbcatalog.WorkloadPort{ - "tcp": {Port: 8080}, - }, - }). - WithTenancy(tenancy). - Build() + workload := resourcetest.Resource(pbcatalog.WorkloadType, "api-workload"). + WithData(suite.T(), &pbcatalog.Workload{ + Ports: map[string]*pbcatalog.WorkloadPort{ + "tcp": {Port: 8080}, + }, + }). + Build() - decWorkload := resourcetest.MustDecode[*pbcatalog.Workload](suite.T(), workload) + decWorkload := resourcetest.MustDecode[*pbcatalog.Workload](suite.T(), workload) - workloadPorts, err := ctrl.workloadPortProtocolsFromService(suite.ctx, dataFetcher, decWorkload, suite.runtime.Logger) - require.NoError(suite.T(), err) - prototest.AssertDeepEqual(suite.T(), pbcatalog.Protocol_PROTOCOL_TCP, workloadPorts["tcp"].GetProtocol()) - // Check that the service is no longer in cache. - require.Nil(suite.T(), c.ServicesForWorkload(workload.Id)) - }) + workloadPorts, err := ctrl.workloadPortProtocolsFromService(suite.ctx, dataFetcher, decWorkload, suite.runtime.Logger) + require.NoError(suite.T(), err) + prototest.AssertDeepEqual(suite.T(), pbcatalog.Protocol_PROTOCOL_TCP, workloadPorts["tcp"].GetProtocol()) + // Check that the service is no longer in cache. + require.Nil(suite.T(), c.ServicesForWorkload(workload.Id)) } func (suite *controllerTestSuite) TestWorkloadPortProtocolsFromService() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - c := cache.New() - dataFetcher := fetcher.New(suite.client, c) - ctrl := &reconciler{ - cache: c, - getTrustDomain: func() (string, error) { - return "test.consul", nil + c := cache.New() + dataFetcher := fetcher.New(suite.client, c) + ctrl := &reconciler{ + cache: c, + getTrustDomain: func() (string, error) { + return "test.consul", nil + }, + } + svc1 := resourcetest.Resource(pbcatalog.ServiceType, "api-1"). + WithData(suite.T(), &pbcatalog.Service{ + Workloads: &pbcatalog.WorkloadSelector{ + Names: []string{"api-workload"}, }, - } - svc1 := resourcetest.Resource(pbcatalog.ServiceType, "api-1"). - WithData(suite.T(), &pbcatalog.Service{ - Workloads: &pbcatalog.WorkloadSelector{ - Names: []string{"api-workload"}, + Ports: []*pbcatalog.ServicePort{ + { + TargetPort: "http1", + Protocol: pbcatalog.Protocol_PROTOCOL_HTTP, }, - Ports: []*pbcatalog.ServicePort{ - { - TargetPort: "http1", - Protocol: pbcatalog.Protocol_PROTOCOL_HTTP, - }, - { - TargetPort: "conflict", - Protocol: pbcatalog.Protocol_PROTOCOL_HTTP, - }, + { + TargetPort: "conflict", + Protocol: pbcatalog.Protocol_PROTOCOL_HTTP, }, - }). - WithTenancy(tenancy). - Write(suite.T(), suite.client) + }, + }). + Write(suite.T(), suite.client) - decSvc := resourcetest.MustDecode[*pbcatalog.Service](suite.T(), svc1) - c.TrackService(decSvc) + decSvc := resourcetest.MustDecode[*pbcatalog.Service](suite.T(), svc1) + c.TrackService(decSvc) - svc2 := resourcetest.Resource(pbcatalog.ServiceType, "api-2"). - WithTenancy(tenancy). - WithData(suite.T(), &pbcatalog.Service{ - Workloads: &pbcatalog.WorkloadSelector{ - Names: []string{"api-workload"}, + svc2 := resourcetest.Resource(pbcatalog.ServiceType, "api-2"). + WithData(suite.T(), &pbcatalog.Service{ + Workloads: &pbcatalog.WorkloadSelector{ + Names: []string{"api-workload"}, + }, + Ports: []*pbcatalog.ServicePort{ + { + TargetPort: "http2", + Protocol: pbcatalog.Protocol_PROTOCOL_HTTP2, }, - Ports: []*pbcatalog.ServicePort{ - { - TargetPort: "http2", - Protocol: pbcatalog.Protocol_PROTOCOL_HTTP2, - }, - { - TargetPort: "conflict", - Protocol: pbcatalog.Protocol_PROTOCOL_GRPC, - }, + { + TargetPort: "conflict", + Protocol: pbcatalog.Protocol_PROTOCOL_GRPC, }, - }). - Write(suite.T(), suite.client) + }, + }). + Write(suite.T(), suite.client) - decSvc = resourcetest.MustDecode[*pbcatalog.Service](suite.T(), svc2) - c.TrackService(decSvc) + decSvc = resourcetest.MustDecode[*pbcatalog.Service](suite.T(), svc2) + c.TrackService(decSvc) - workload := resourcetest.Resource(pbcatalog.WorkloadType, "api-workload"). - WithTenancy(tenancy). - WithData(suite.T(), &pbcatalog.Workload{ - Ports: map[string]*pbcatalog.WorkloadPort{ - "http1": {Port: 8080}, - "http2": {Port: 9090}, - "conflict": {Port: 9091}, - "not-selected": {Port: 8081}, - "specified-protocol": {Port: 8082, Protocol: pbcatalog.Protocol_PROTOCOL_GRPC}, - "mesh": {Port: 20000, Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, - }, - }). - WithTenancy(tenancy). - Build() + workload := resourcetest.Resource(pbcatalog.WorkloadType, "api-workload"). + WithData(suite.T(), &pbcatalog.Workload{ + Ports: map[string]*pbcatalog.WorkloadPort{ + "http1": {Port: 8080}, + "http2": {Port: 9090}, + "conflict": {Port: 9091}, + "not-selected": {Port: 8081}, + "specified-protocol": {Port: 8082, Protocol: pbcatalog.Protocol_PROTOCOL_GRPC}, + "mesh": {Port: 20000, Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, + }, + }). + WithTenancy(resource.DefaultNamespacedTenancy()). + Build() - decWorkload := resourcetest.MustDecode[*pbcatalog.Workload](suite.T(), workload) + decWorkload := resourcetest.MustDecode[*pbcatalog.Workload](suite.T(), workload) - expWorkloadPorts := map[string]*pbcatalog.WorkloadPort{ - // This protocol should be inherited from service 1. - "http1": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, + expWorkloadPorts := map[string]*pbcatalog.WorkloadPort{ + // This protocol should be inherited from service 1. + "http1": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, - // this protocol should be inherited from service 2. - "http2": {Port: 9090, Protocol: pbcatalog.Protocol_PROTOCOL_HTTP2}, + // this protocol should be inherited from service 2. + "http2": {Port: 9090, Protocol: pbcatalog.Protocol_PROTOCOL_HTTP2}, - // This port is not selected by the service and should default to tcp. - "not-selected": {Port: 8081, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, + // This port is not selected by the service and should default to tcp. + "not-selected": {Port: 8081, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, - // This port has conflicting protocols in each service and so it should default to tcp. - "conflict": {Port: 9091, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, + // This port has conflicting protocols in each service and so it should default to tcp. + "conflict": {Port: 9091, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, - // These port should keep its existing protocol. - "specified-protocol": {Port: 8082, Protocol: pbcatalog.Protocol_PROTOCOL_GRPC}, - "mesh": {Port: 20000, Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, - } + // These port should keep its existing protocol. + "specified-protocol": {Port: 8082, Protocol: pbcatalog.Protocol_PROTOCOL_GRPC}, + "mesh": {Port: 20000, Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, + } - workloadPorts, err := ctrl.workloadPortProtocolsFromService(suite.ctx, dataFetcher, decWorkload, suite.runtime.Logger) - require.NoError(suite.T(), err) + workloadPorts, err := ctrl.workloadPortProtocolsFromService(suite.ctx, dataFetcher, decWorkload, suite.runtime.Logger) + require.NoError(suite.T(), err) - prototest.AssertDeepEqual(suite.T(), expWorkloadPorts, workloadPorts) - }) + prototest.AssertDeepEqual(suite.T(), expWorkloadPorts, workloadPorts) } func (suite *controllerTestSuite) TestReconcile_NoWorkload() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - // This test ensures that removed workloads are ignored and don't result - // in the creation of the proxy state template. - err := suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ - ID: resourceID(pbmesh.ProxyStateTemplateType, "not-found", tenancy), - }) - require.NoError(suite.T(), err) - - suite.client.RequireResourceNotFound(suite.T(), resourceID(pbmesh.ProxyStateTemplateType, "not-found", tenancy)) + // This test ensures that removed workloads are ignored and don't result + // in the creation of the proxy state template. + err := suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ + ID: resourceID(pbmesh.ProxyStateTemplateType, "not-found"), }) + require.NoError(suite.T(), err) + + suite.client.RequireResourceNotFound(suite.T(), resourceID(pbmesh.ProxyStateTemplateType, "not-found")) } func (suite *controllerTestSuite) TestReconcile_NonMeshWorkload() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - // This test ensures that non-mesh workloads are ignored by the controller. + // This test ensures that non-mesh workloads are ignored by the controller. - nonMeshWorkload := &pbcatalog.Workload{ - Addresses: []*pbcatalog.WorkloadAddress{ - { - Host: "10.0.0.1", - }, - }, - Ports: map[string]*pbcatalog.WorkloadPort{ - "tcp": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, + nonMeshWorkload := &pbcatalog.Workload{ + Addresses: []*pbcatalog.WorkloadAddress{ + { + Host: "10.0.0.1", }, - } - - resourcetest.Resource(pbcatalog.WorkloadType, "test-non-mesh-api-workload"). - WithData(suite.T(), nonMeshWorkload). - WithTenancy(tenancy). - Write(suite.T(), suite.client.ResourceServiceClient) + }, + Ports: map[string]*pbcatalog.WorkloadPort{ + "tcp": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, + }, + } - err := suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ - ID: resourceID(pbmesh.ProxyStateTemplateType, "test-non-mesh-api-workload", tenancy), - }) + resourcetest.Resource(pbcatalog.WorkloadType, "test-non-mesh-api-workload"). + WithData(suite.T(), nonMeshWorkload). + Write(suite.T(), suite.client.ResourceServiceClient) - require.NoError(suite.T(), err) - suite.client.RequireResourceNotFound(suite.T(), resourceID(pbmesh.ProxyStateTemplateType, "test-non-mesh-api-workload", tenancy)) + err := suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ + ID: resourceID(pbmesh.ProxyStateTemplateType, "test-non-mesh-api-workload"), }) + + require.NoError(suite.T(), err) + suite.client.RequireResourceNotFound(suite.T(), resourceID(pbmesh.ProxyStateTemplateType, "test-non-mesh-api-workload")) } func (suite *controllerTestSuite) TestReconcile_NoExistingProxyStateTemplate() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - - err := suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ - ID: resourceID(pbmesh.ProxyStateTemplateType, suite.apiWorkloadID.Name, tenancy), - }) - require.NoError(suite.T(), err) - - res := suite.client.RequireResourceExists(suite.T(), resourceID(pbmesh.ProxyStateTemplateType, suite.apiWorkloadID.Name, tenancy)) - require.NoError(suite.T(), err) - require.NotNil(suite.T(), res.Data) - prototest.AssertDeepEqual(suite.T(), suite.apiWorkloadID, res.Owner) + err := suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ + ID: resourceID(pbmesh.ProxyStateTemplateType, suite.apiWorkloadID.Name), }) + require.NoError(suite.T(), err) + + res := suite.client.RequireResourceExists(suite.T(), resourceID(pbmesh.ProxyStateTemplateType, suite.apiWorkloadID.Name)) + require.NoError(suite.T(), err) + require.NotNil(suite.T(), res.Data) + prototest.AssertDeepEqual(suite.T(), suite.apiWorkloadID, res.Owner) } func (suite *controllerTestSuite) TestReconcile_ExistingProxyStateTemplate_WithUpdates() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - // This test ensures that we write a new proxy state template when there are changes. - - // Write the original. - resourcetest.Resource(pbmesh.ProxyStateTemplateType, "api-abc"). - WithData(suite.T(), suite.proxyStateTemplate). - WithOwner(suite.apiWorkloadID). - WithTenancy(tenancy). - Write(suite.T(), suite.client.ResourceServiceClient) + // This test ensures that we write a new proxy state template when there are changes. - // Update the apiWorkload and check that we default the port to tcp if it's unspecified. - suite.apiWorkload.Ports["tcp"].Protocol = pbcatalog.Protocol_PROTOCOL_UNSPECIFIED + // Write the original. + resourcetest.Resource(pbmesh.ProxyStateTemplateType, "api-abc"). + WithData(suite.T(), suite.proxyStateTemplate). + WithOwner(suite.apiWorkloadID). + Write(suite.T(), suite.client.ResourceServiceClient) - updatedWorkloadID := resourcetest.Resource(pbcatalog.WorkloadType, "api-abc"). - WithTenancy(tenancy). - WithData(suite.T(), suite.apiWorkload). - Write(suite.T(), suite.client.ResourceServiceClient).Id + // Update the apiWorkload and check that we default the port to tcp if it's unspecified. + suite.apiWorkload.Ports["tcp"].Protocol = pbcatalog.Protocol_PROTOCOL_UNSPECIFIED - err := suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ - ID: resourceID(pbmesh.ProxyStateTemplateType, updatedWorkloadID.Name, tenancy), - }) - require.NoError(suite.T(), err) + updatedWorkloadID := resourcetest.Resource(pbcatalog.WorkloadType, "api-abc"). + WithData(suite.T(), suite.apiWorkload). + Write(suite.T(), suite.client.ResourceServiceClient).Id - res := suite.client.RequireResourceExists(suite.T(), resourceID(pbmesh.ProxyStateTemplateType, updatedWorkloadID.Name, tenancy)) - require.NoError(suite.T(), err) - require.NotNil(suite.T(), res.Data) - prototest.AssertDeepEqual(suite.T(), updatedWorkloadID, res.Owner) + err := suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ + ID: resourceID(pbmesh.ProxyStateTemplateType, updatedWorkloadID.Name), + }) + require.NoError(suite.T(), err) - var updatedProxyStateTemplate pbmesh.ProxyStateTemplate - err = res.Data.UnmarshalTo(&updatedProxyStateTemplate) - require.NoError(suite.T(), err) + res := suite.client.RequireResourceExists(suite.T(), resourceID(pbmesh.ProxyStateTemplateType, updatedWorkloadID.Name)) + require.NoError(suite.T(), err) + require.NotNil(suite.T(), res.Data) + prototest.AssertDeepEqual(suite.T(), updatedWorkloadID, res.Owner) - // Check that our value is updated in the proxy state template. - require.Len(suite.T(), updatedProxyStateTemplate.ProxyState.Listeners, 1) - require.Len(suite.T(), updatedProxyStateTemplate.ProxyState.Listeners[0].Routers, 1) + var updatedProxyStateTemplate pbmesh.ProxyStateTemplate + err = res.Data.UnmarshalTo(&updatedProxyStateTemplate) + require.NoError(suite.T(), err) - l4InboundRouter := updatedProxyStateTemplate.ProxyState.Listeners[0]. - Routers[0].GetL4() - require.NotNil(suite.T(), l4InboundRouter) - }) + // Check that our value is updated in the proxy state template. + require.Len(suite.T(), updatedProxyStateTemplate.ProxyState.Listeners, 1) + require.Len(suite.T(), updatedProxyStateTemplate.ProxyState.Listeners[0].Routers, 1) + + l4InboundRouter := updatedProxyStateTemplate.ProxyState.Listeners[0]. + Routers[0].GetL4() + require.NotNil(suite.T(), l4InboundRouter) } func (suite *controllerTestSuite) TestReconcile_ExistingProxyStateTemplate_NoUpdates() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - // This test ensures that we skip writing of the proxy state template when there are no changes to it. - - // Write the original. - originalProxyState := resourcetest.Resource(pbmesh.ProxyStateTemplateType, "api-abc"). - WithData(suite.T(), suite.proxyStateTemplate). - WithOwner(suite.apiWorkloadID). - WithTenancy(tenancy). - Write(suite.T(), suite.client.ResourceServiceClient) + // This test ensures that we skip writing of the proxy state template when there are no changes to it. - // Update the metadata on the apiWorkload which should result in no changes. - updatedWorkloadID := resourcetest.Resource(pbcatalog.WorkloadType, "api-abc"). - WithData(suite.T(), suite.apiWorkload). - WithMeta("some", "meta"). - Write(suite.T(), suite.client.ResourceServiceClient).Id + // Write the original. + originalProxyState := resourcetest.Resource(pbmesh.ProxyStateTemplateType, "api-abc"). + WithData(suite.T(), suite.proxyStateTemplate). + WithOwner(suite.apiWorkloadID). + Write(suite.T(), suite.client.ResourceServiceClient) - err := suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ - ID: resourceID(pbmesh.ProxyStateTemplateType, updatedWorkloadID.Name, tenancy), - }) - require.NoError(suite.T(), err) + // Update the metadata on the apiWorkload which should result in no changes. + updatedWorkloadID := resourcetest.Resource(pbcatalog.WorkloadType, "api-abc"). + WithData(suite.T(), suite.apiWorkload). + WithMeta("some", "meta"). + Write(suite.T(), suite.client.ResourceServiceClient).Id - updatedProxyState := suite.client.RequireResourceExists(suite.T(), resourceID(pbmesh.ProxyStateTemplateType, suite.apiWorkloadID.Name, tenancy)) - resourcetest.RequireVersionUnchanged(suite.T(), updatedProxyState, originalProxyState.Version) + err := suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ + ID: resourceID(pbmesh.ProxyStateTemplateType, updatedWorkloadID.Name), }) + require.NoError(suite.T(), err) + + updatedProxyState := suite.client.RequireResourceExists(suite.T(), resourceID(pbmesh.ProxyStateTemplateType, suite.apiWorkloadID.Name)) + resourcetest.RequireVersionUnchanged(suite.T(), updatedProxyState, originalProxyState.Version) } func (suite *controllerTestSuite) TestController() { + // This is a comprehensive test that checks the overall controller behavior as various resources change state. + // This should test interactions between the reconciler, the mappers, and the destinationsCache to ensure they work + // together and produce expected result. + + // Run the controller manager mgr := controller.NewManager(suite.client, suite.runtime.Logger) // Initialize controller dependencies. @@ -558,302 +508,295 @@ func (suite *controllerTestSuite) TestController() { mgr.SetRaftLeader(true) go mgr.Run(suite.ctx) - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - // This is a comprehensive test that checks the overall controller behavior as various resources change state. - // This should test interactions between the reconciler, the mappers, and the destinationsCache to ensure they work - // together and produce expected result. + var ( + // Create proxy state template IDs to check against in this test. + apiProxyStateTemplateID = resourcetest.Resource(pbmesh.ProxyStateTemplateType, "api-abc").ID() + webProxyStateTemplateID = resourcetest.Resource(pbmesh.ProxyStateTemplateType, "web-def").ID() - // Run the controller manager - var ( - // Create proxy state template IDs to check against in this test. - apiProxyStateTemplateID = resourcetest.Resource(pbmesh.ProxyStateTemplateType, "api-abc").WithTenancy(tenancy).ID() - webProxyStateTemplateID = resourcetest.Resource(pbmesh.ProxyStateTemplateType, "web-def").WithTenancy(tenancy).ID() + apiComputedRoutesID = resource.ReplaceType(pbmesh.ComputedRoutesType, suite.apiService.Id) + dbComputedRoutesID = resource.ReplaceType(pbmesh.ComputedRoutesType, suite.dbService.Id) - apiComputedRoutesID = resource.ReplaceType(pbmesh.ComputedRoutesType, suite.apiService.Id) - dbComputedRoutesID = resource.ReplaceType(pbmesh.ComputedRoutesType, suite.dbService.Id) + apiProxyStateTemplate *pbresource.Resource + webProxyStateTemplate *pbresource.Resource + webComputedDestinations *pbresource.Resource + ) - apiProxyStateTemplate *pbresource.Resource - webProxyStateTemplate *pbresource.Resource - webComputedDestinations *pbresource.Resource - ) + // Check that proxy state template resource is generated for both the api and web workloads. + retry.Run(suite.T(), func(r *retry.R) { + suite.client.RequireResourceExists(r, apiProxyStateTemplateID) + webProxyStateTemplate = suite.client.RequireResourceExists(r, webProxyStateTemplateID) + apiProxyStateTemplate = suite.client.RequireResourceExists(r, apiProxyStateTemplateID) + }) - testutil.RunStep(suite.T(), "proxy state template generation", func(t *testing.T) { - // Check that proxy state template resource is generated for both the api and web workloads. - retry.Run(t, func(r *retry.R) { - suite.client.RequireResourceExists(r, apiProxyStateTemplateID) - webProxyStateTemplate = suite.client.RequireResourceExists(r, webProxyStateTemplateID) - apiProxyStateTemplate = suite.client.RequireResourceExists(r, apiProxyStateTemplateID) - }) - }) + // Write a default ComputedRoutes for api. + routestest.ReconcileComputedRoutes(suite.T(), suite.client, apiComputedRoutesID, + resourcetest.MustDecode[*pbcatalog.Service](suite.T(), suite.apiService), + ) - // Write a default ComputedRoutes for api. - routestest.ReconcileComputedRoutes(suite.T(), suite.client, apiComputedRoutesID, - resourcetest.MustDecode[*pbcatalog.Service](suite.T(), suite.apiService), - ) - - // Add a source service and check that a new proxy state is generated. - webComputedDestinations = resourcetest.Resource(pbmesh.ComputedExplicitDestinationsType, suite.webWorkload.Id.Name). - WithTenancy(tenancy). - WithData(suite.T(), &pbmesh.ComputedExplicitDestinations{ - Destinations: []*pbmesh.Destination{ - { - DestinationRef: resource.Reference(suite.apiService.Id, ""), - DestinationPort: "tcp", - ListenAddr: &pbmesh.Destination_IpPort{ - IpPort: &pbmesh.IPPortAddress{ - Ip: "127.0.0.1", - Port: 1234, - }, + // Add a source service and check that a new proxy state is generated. + webComputedDestinations = resourcetest.Resource(pbmesh.ComputedExplicitDestinationsType, suite.webWorkload.Id.Name). + WithData(suite.T(), &pbmesh.ComputedExplicitDestinations{ + Destinations: []*pbmesh.Destination{ + { + DestinationRef: resource.Reference(suite.apiService.Id, ""), + DestinationPort: "tcp", + ListenAddr: &pbmesh.Destination_IpPort{ + IpPort: &pbmesh.IPPortAddress{ + Ip: "127.0.0.1", + Port: 1234, }, }, }, - }).Write(suite.T(), suite.client) + }, + }).Write(suite.T(), suite.client) - testutil.RunStep(suite.T(), "add explicit destinations and check that new proxy state is generated", func(t *testing.T) { - webProxyStateTemplate = suite.client.WaitForNewVersion(suite.T(), webProxyStateTemplateID, webProxyStateTemplate.Version) + testutil.RunStep(suite.T(), "add explicit destinations and check that new proxy state is generated", func(t *testing.T) { + webProxyStateTemplate = suite.client.WaitForNewVersion(suite.T(), webProxyStateTemplateID, webProxyStateTemplate.Version) - requireExplicitDestinationsFound(t, "api", webProxyStateTemplate) + suite.waitForProxyStateTemplateState(t, webProxyStateTemplateID, func(rt resourcetest.T, tmpl *pbmesh.ProxyStateTemplate) { + requireExplicitDestinationsFound(rt, "api", tmpl) }) + }) - testutil.RunStep(suite.T(), "update api's ports to be non-mesh", func(t *testing.T) { - // Update destination's service endpoints and workload to be non-mesh - // and check that: - // * api's proxy state template is deleted - // * we get a new web proxy resource re-generated - // * the status on Upstreams resource is updated with a validation error - nonMeshPorts := map[string]*pbcatalog.WorkloadPort{ - "tcp": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, - } + testutil.RunStep(suite.T(), "update api's ports to be non-mesh", func(t *testing.T) { + // Update destination's service endpoints and workload to be non-mesh + // and check that: + // * api's proxy state template is deleted + // * we get a new web proxy resource re-generated + // * the status on Upstreams resource is updated with a validation error + nonMeshPorts := map[string]*pbcatalog.WorkloadPort{ + "tcp": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, + } - // Note: the order matters here because in reality service endpoints will only - // be reconciled after the workload has been updated, and so we need to write the - // workload and service before we write service endpoints. - resourcetest.Resource(pbcatalog.WorkloadType, "api-abc"). - WithTenancy(tenancy). - WithData(suite.T(), &pbcatalog.Workload{ - Identity: "api-identity", - Addresses: suite.apiWorkload.Addresses, - Ports: nonMeshPorts}). - Write(suite.T(), suite.client) - - suite.apiService = resourcetest.ResourceID(suite.apiService.Id). - WithTenancy(tenancy). - WithData(t, &pbcatalog.Service{ - Workloads: &pbcatalog.WorkloadSelector{Names: []string{"api-abc"}}, - VirtualIps: []string{"1.1.1.1"}, - Ports: []*pbcatalog.ServicePort{ - {TargetPort: "tcp", Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, - // {TargetPort: "mesh", Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, - }, - }). - Write(suite.T(), suite.client) - - resourcetest.Resource(pbcatalog.ServiceEndpointsType, "api-service"). - WithTenancy(tenancy). - WithData(suite.T(), &pbcatalog.ServiceEndpoints{ - Endpoints: []*pbcatalog.Endpoint{ - { - TargetRef: suite.apiWorkloadID, - Addresses: suite.apiWorkload.Addresses, - Ports: nonMeshPorts, - Identity: "api-identity", - }, + // Note: the order matters here because in reality service endpoints will only + // be reconciled after the workload has been updated, and so we need to write the + // workload and service before we write service endpoints. + resourcetest.Resource(pbcatalog.WorkloadType, "api-abc"). + WithData(suite.T(), &pbcatalog.Workload{ + Identity: "api-identity", + Addresses: suite.apiWorkload.Addresses, + Ports: nonMeshPorts}). + Write(suite.T(), suite.client) + + suite.apiService = resourcetest.ResourceID(suite.apiService.Id). + WithData(t, &pbcatalog.Service{ + Workloads: &pbcatalog.WorkloadSelector{Names: []string{"api-abc"}}, + VirtualIps: []string{"1.1.1.1"}, + Ports: []*pbcatalog.ServicePort{ + {TargetPort: "tcp", Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, + // {TargetPort: "mesh", Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, + }, + }). + Write(suite.T(), suite.client) + + resourcetest.Resource(pbcatalog.ServiceEndpointsType, "api-service"). + WithData(suite.T(), &pbcatalog.ServiceEndpoints{ + Endpoints: []*pbcatalog.Endpoint{ + { + TargetRef: suite.apiWorkloadID, + Addresses: suite.apiWorkload.Addresses, + Ports: nonMeshPorts, + Identity: "api-identity", }, - }). - Write(suite.T(), suite.client.ResourceServiceClient) + }, + }). + Write(suite.T(), suite.client.ResourceServiceClient) - // Refresh the computed routes in light of api losing a mesh port. - routestest.ReconcileComputedRoutes(suite.T(), suite.client, apiComputedRoutesID, - resourcetest.MustDecode[*pbcatalog.Service](t, suite.apiService), - ) + // Refresh the computed routes in light of api losing a mesh port. + routestest.ReconcileComputedRoutes(suite.T(), suite.client, apiComputedRoutesID, + resourcetest.MustDecode[*pbcatalog.Service](t, suite.apiService), + ) - // Check that api proxy template is gone. - retry.Run(t, func(r *retry.R) { - suite.client.RequireResourceNotFound(r, apiProxyStateTemplateID) - }) + // Check that api proxy template is gone. + retry.Run(t, func(r *retry.R) { + suite.client.RequireResourceNotFound(r, apiProxyStateTemplateID) + }) - // We should get a new web proxy template resource because this destination should be removed. - webProxyStateTemplate = suite.client.WaitForNewVersion(suite.T(), webProxyStateTemplateID, webProxyStateTemplate.Version) + // We should get a new web proxy template resource because this destination should be removed. + webProxyStateTemplate = suite.client.WaitForNewVersion(suite.T(), webProxyStateTemplateID, webProxyStateTemplate.Version) - requireExplicitDestinationsNotFound(t, "api", webProxyStateTemplate) + suite.waitForProxyStateTemplateState(t, webProxyStateTemplateID, func(rt resourcetest.T, tmpl *pbmesh.ProxyStateTemplate) { + requireExplicitDestinationsNotFound(rt, "api", tmpl) }) + }) - testutil.RunStep(suite.T(), "update ports to be mesh again", func(t *testing.T) { - // Update destination's service endpoints back to mesh and check that we get a new web proxy resource re-generated - // and that the status on Upstreams resource is updated to be empty. - suite.runtime.Logger.Trace("updating ports to mesh") + testutil.RunStep(suite.T(), "update ports to be mesh again", func(t *testing.T) { + // Update destination's service endpoints back to mesh and check that we get a new web proxy resource re-generated + // and that the status on Upstreams resource is updated to be empty. + suite.runtime.Logger.Trace("updating ports to mesh") - resourcetest.Resource(pbcatalog.WorkloadType, "api-abc"). - WithTenancy(tenancy). - WithData(suite.T(), suite.apiWorkload). - Write(suite.T(), suite.client) + resourcetest.Resource(pbcatalog.WorkloadType, "api-abc"). + WithData(suite.T(), suite.apiWorkload). + Write(suite.T(), suite.client) - suite.apiService = resourcetest.Resource(pbcatalog.ServiceType, "api-service"). - WithData(suite.T(), suite.apiServiceData). - WithTenancy(tenancy). - Write(suite.T(), suite.client.ResourceServiceClient) + suite.apiService = resourcetest.Resource(pbcatalog.ServiceType, "api-service"). + WithData(suite.T(), suite.apiServiceData). + Write(suite.T(), suite.client.ResourceServiceClient) - resourcetest.Resource(pbcatalog.ServiceEndpointsType, "api-service"). - WithTenancy(tenancy). - WithData(suite.T(), suite.apiEndpointsData). - Write(suite.T(), suite.client.ResourceServiceClient) + resourcetest.Resource(pbcatalog.ServiceEndpointsType, "api-service"). + WithData(suite.T(), suite.apiEndpointsData). + Write(suite.T(), suite.client.ResourceServiceClient) - // Refresh the computed routes in light of api losing a mesh port. - routestest.ReconcileComputedRoutes(suite.T(), suite.client, apiComputedRoutesID, - resourcetest.MustDecode[*pbcatalog.Service](t, suite.apiService), - ) + // Refresh the computed routes in light of api losing a mesh port. + routestest.ReconcileComputedRoutes(suite.T(), suite.client, apiComputedRoutesID, + resourcetest.MustDecode[*pbcatalog.Service](t, suite.apiService), + ) - // We should also get a new web proxy template resource as this destination should be added again. - webProxyStateTemplate = suite.client.WaitForNewVersion(suite.T(), webProxyStateTemplateID, webProxyStateTemplate.Version) + // We should also get a new web proxy template resource as this destination should be added again. + webProxyStateTemplate = suite.client.WaitForNewVersion(suite.T(), webProxyStateTemplateID, webProxyStateTemplate.Version) - requireExplicitDestinationsFound(t, "api", webProxyStateTemplate) + suite.waitForProxyStateTemplateState(t, webProxyStateTemplateID, func(rt resourcetest.T, tmpl *pbmesh.ProxyStateTemplate) { + requireExplicitDestinationsFound(rt, "api", tmpl) }) + }) - testutil.RunStep(suite.T(), "delete the proxy state template and check re-generation", func(t *testing.T) { - // Delete the proxy state template resource and check that it gets regenerated. - suite.runtime.Logger.Trace("deleting web proxy") - _, err := suite.client.Delete(suite.ctx, &pbresource.DeleteRequest{Id: webProxyStateTemplateID}) - require.NoError(suite.T(), err) + testutil.RunStep(suite.T(), "delete the proxy state template and check re-generation", func(t *testing.T) { + // Delete the proxy state template resource and check that it gets regenerated. + suite.runtime.Logger.Trace("deleting web proxy") + _, err := suite.client.Delete(suite.ctx, &pbresource.DeleteRequest{Id: webProxyStateTemplateID}) + require.NoError(suite.T(), err) - webProxyStateTemplate = suite.client.WaitForNewVersion(suite.T(), webProxyStateTemplateID, webProxyStateTemplate.Version) - requireExplicitDestinationsFound(t, "api", webProxyStateTemplate) + webProxyStateTemplate = suite.client.WaitForNewVersion(suite.T(), webProxyStateTemplateID, webProxyStateTemplate.Version) + + suite.waitForProxyStateTemplateState(t, webProxyStateTemplateID, func(rt resourcetest.T, tmpl *pbmesh.ProxyStateTemplate) { + requireExplicitDestinationsFound(rt, "api", tmpl) }) + }) - testutil.RunStep(suite.T(), "add implicit upstream and enable tproxy", func(t *testing.T) { - // Delete explicit destinations resource. - suite.runtime.Logger.Trace("deleting web destinations") - _, err := suite.client.Delete(suite.ctx, &pbresource.DeleteRequest{Id: webComputedDestinations.Id}) - require.NoError(t, err) - - webProxyStateTemplate = suite.client.WaitForNewVersion(suite.T(), webProxyStateTemplateID, webProxyStateTemplate.Version) - - // Write a default ComputedRoutes for db, so it's eligible. - dbCR := routestest.ReconcileComputedRoutes(suite.T(), suite.client, dbComputedRoutesID, - resourcetest.MustDecode[*pbcatalog.Service](t, suite.dbService), - ) - require.NotNil(t, dbCR) - - // Enable transparent proxy for the web proxy. - resourcetest.Resource(pbmesh.ComputedProxyConfigurationType, suite.webWorkload.Id.Name). - WithTenancy(tenancy). - WithData(t, &pbmesh.ComputedProxyConfiguration{ - DynamicConfig: &pbmesh.DynamicConfig{ - Mode: pbmesh.ProxyMode_PROXY_MODE_TRANSPARENT, - TransparentProxy: &pbmesh.TransparentProxy{ - OutboundListenerPort: 15001, - }, + testutil.RunStep(suite.T(), "add implicit upstream and enable tproxy", func(t *testing.T) { + // Delete explicit destinations resource. + suite.runtime.Logger.Trace("deleting web destinations") + _, err := suite.client.Delete(suite.ctx, &pbresource.DeleteRequest{Id: webComputedDestinations.Id}) + require.NoError(t, err) + + webProxyStateTemplate = suite.client.WaitForNewVersion(suite.T(), webProxyStateTemplateID, webProxyStateTemplate.Version) + + // Write a default ComputedRoutes for db, so it's eligible. + dbCR := routestest.ReconcileComputedRoutes(suite.T(), suite.client, dbComputedRoutesID, + resourcetest.MustDecode[*pbcatalog.Service](t, suite.dbService), + ) + require.NotNil(t, dbCR) + + // Enable transparent proxy for the web proxy. + resourcetest.Resource(pbmesh.ComputedProxyConfigurationType, suite.webWorkload.Id.Name). + WithData(t, &pbmesh.ComputedProxyConfiguration{ + DynamicConfig: &pbmesh.DynamicConfig{ + Mode: pbmesh.ProxyMode_PROXY_MODE_TRANSPARENT, + TransparentProxy: &pbmesh.TransparentProxy{ + OutboundListenerPort: 15001, }, - }).Write(suite.T(), suite.client) + }, + }).Write(suite.T(), suite.client) - webProxyStateTemplate = suite.client.WaitForNewVersion(suite.T(), webProxyStateTemplateID, webProxyStateTemplate.Version) - apiProxyStateTemplate = suite.client.WaitForNewVersion(suite.T(), apiProxyStateTemplateID, apiProxyStateTemplate.Version) + webProxyStateTemplate = suite.client.WaitForNewVersion(suite.T(), webProxyStateTemplateID, webProxyStateTemplate.Version) + apiProxyStateTemplate = suite.client.WaitForNewVersion(suite.T(), apiProxyStateTemplateID, apiProxyStateTemplate.Version) - requireImplicitDestinationsFound(t, "api", webProxyStateTemplate) - requireImplicitDestinationsFound(t, "db", webProxyStateTemplate) + suite.waitForProxyStateTemplateState(t, webProxyStateTemplateID, func(rt resourcetest.T, tmpl *pbmesh.ProxyStateTemplate) { + requireImplicitDestinationsFound(rt, "api", tmpl) + requireImplicitDestinationsFound(rt, "db", tmpl) }) + }) - testutil.RunStep(suite.T(), "traffic permissions", func(t *testing.T) { - // Global default deny applies to all identities. - assertTrafficPermissionDefaultPolicy(t, false, apiProxyStateTemplate) - assertTrafficPermissionDefaultPolicy(t, false, webProxyStateTemplate) + testutil.RunStep(suite.T(), "traffic permissions", func(t *testing.T) { + // Global default deny applies to all identities. + assertTrafficPermissionDefaultPolicy(t, false, apiProxyStateTemplate) + assertTrafficPermissionDefaultPolicy(t, false, webProxyStateTemplate) - suite.runtime.Logger.Trace("deleting computed traffic permissions") - _, err := suite.client.Delete(suite.ctx, &pbresource.DeleteRequest{Id: suite.apiComputedTrafficPermissions.Id}) - require.NoError(t, err) - suite.client.WaitForDeletion(t, suite.apiComputedTrafficPermissions.Id) + suite.runtime.Logger.Trace("deleting computed traffic permissions") + _, err := suite.client.Delete(suite.ctx, &pbresource.DeleteRequest{Id: suite.apiComputedTrafficPermissions.Id}) + require.NoError(t, err) + suite.client.WaitForDeletion(t, suite.apiComputedTrafficPermissions.Id) - apiProxyStateTemplate = suite.client.WaitForNewVersion(suite.T(), apiProxyStateTemplateID, apiProxyStateTemplate.Version) + apiProxyStateTemplate = suite.client.WaitForNewVersion(suite.T(), apiProxyStateTemplateID, apiProxyStateTemplate.Version) - suite.runtime.Logger.Trace("creating computed traffic permissions") - resourcetest.Resource(pbauth.ComputedTrafficPermissionsType, suite.apiWorkload.Identity). - WithTenancy(tenancy). - WithData(t, suite.apiComputedTrafficPermissionsData). - Write(t, suite.client) + suite.runtime.Logger.Trace("creating computed traffic permissions") + resourcetest.Resource(pbauth.ComputedTrafficPermissionsType, suite.apiWorkload.Identity). + WithData(t, suite.apiComputedTrafficPermissionsData). + Write(t, suite.client) - suite.client.WaitForNewVersion(t, apiProxyStateTemplateID, apiProxyStateTemplate.Version) - }) + suite.client.WaitForNewVersion(t, apiProxyStateTemplateID, apiProxyStateTemplate.Version) + }) - testutil.RunStep(suite.T(), "add an HTTPRoute with a simple split on the tcp port", func(t *testing.T) { - // NOTE: because at this point we have tproxy in all-to-all mode, we will get an - // implicit upstream on 'db' - - // Create a route NOT in the state store, only to more easily feed - // into the generator. - routeData := &pbmesh.HTTPRoute{ - ParentRefs: []*pbmesh.ParentReference{{ - Ref: resource.Reference(suite.dbService.Id, ""), - Port: "", // implicitly applies to 'http' - }}, - Rules: []*pbmesh.HTTPRouteRule{{ - BackendRefs: []*pbmesh.HTTPBackendRef{ - { - BackendRef: &pbmesh.BackendReference{ - Ref: resource.Reference(suite.apiService.Id, ""), - Port: "tcp", - }, - Weight: 60, + testutil.RunStep(suite.T(), "add an HTTPRoute with a simple split on the tcp port", func(t *testing.T) { + // NOTE: because at this point we have tproxy in all-to-all mode, we will get an + // implicit upstream on 'db' + + // Create a route NOT in the state store, only to more easily feed + // into the generator. + routeData := &pbmesh.HTTPRoute{ + ParentRefs: []*pbmesh.ParentReference{{ + Ref: resource.Reference(suite.dbService.Id, ""), + Port: "", // implicitly applies to 'http' + }}, + Rules: []*pbmesh.HTTPRouteRule{{ + BackendRefs: []*pbmesh.HTTPBackendRef{ + { + BackendRef: &pbmesh.BackendReference{ + Ref: resource.Reference(suite.apiService.Id, ""), + Port: "tcp", }, - { - BackendRef: &pbmesh.BackendReference{ - Ref: resource.Reference(suite.dbService.Id, ""), - Port: "", // assumed to be 'http' - }, - Weight: 40, + Weight: 60, + }, + { + BackendRef: &pbmesh.BackendReference{ + Ref: resource.Reference(suite.dbService.Id, ""), + Port: "", // assumed to be 'http' }, + Weight: 40, }, - }}, - } - route := resourcetest.Resource(pbmesh.HTTPRouteType, "db-http-route"). - WithTenancy(tenancy). - WithData(t, routeData). - Build() - require.NoError(t, types.MutateHTTPRoute(route)) - require.NoError(t, types.ValidateHTTPRoute(route)) - - dbCRID := resource.ReplaceType(pbmesh.ComputedRoutesType, suite.dbService.Id) - - dbCR := routestest.ReconcileComputedRoutes(suite.T(), suite.client, dbCRID, - resourcetest.MustDecode[*pbmesh.HTTPRoute](t, route), - resourcetest.MustDecode[*pbcatalog.Service](t, suite.dbService), - resourcetest.MustDecode[*pbcatalog.Service](t, suite.apiService), - ) - require.NotNil(t, dbCR, "computed routes for db was deleted instead of created") - - webProxyStateTemplate = suite.client.WaitForNewVersion(suite.T(), webProxyStateTemplateID, webProxyStateTemplate.Version) - - requireImplicitDestinationsFound(t, "api", webProxyStateTemplate) - requireImplicitDestinationsFound(t, "db", webProxyStateTemplate) + }, + }}, + } + route := resourcetest.Resource(pbmesh.HTTPRouteType, "db-http-route"). + WithTenancy(resource.DefaultNamespacedTenancy()). + WithData(t, routeData). + Build() + require.NoError(t, types.MutateHTTPRoute(route)) + require.NoError(t, types.ValidateHTTPRoute(route)) + + dbCRID := resource.ReplaceType(pbmesh.ComputedRoutesType, suite.dbService.Id) + + dbCR := routestest.ReconcileComputedRoutes(suite.T(), suite.client, dbCRID, + resourcetest.MustDecode[*pbmesh.HTTPRoute](t, route), + resourcetest.MustDecode[*pbcatalog.Service](t, suite.dbService), + resourcetest.MustDecode[*pbcatalog.Service](t, suite.apiService), + ) + require.NotNil(t, dbCR, "computed routes for db was deleted instead of created") + + webProxyStateTemplate = suite.client.WaitForNewVersion(suite.T(), webProxyStateTemplateID, webProxyStateTemplate.Version) + + suite.waitForProxyStateTemplateState(t, webProxyStateTemplateID, func(rt resourcetest.T, tmpl *pbmesh.ProxyStateTemplate) { + requireImplicitDestinationsFound(rt, "api", tmpl) + requireImplicitDestinationsFound(rt, "db", tmpl) }) }) } func (suite *controllerTestSuite) TestControllerDefaultAllow() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - // Run the controller manager - mgr := controller.NewManager(suite.client, suite.runtime.Logger) - - // Initialize controller dependencies. - c := cache.New() - trustDomainFetcher := func() (string, error) { return "test.consul", nil } - - mgr.Register(Controller(c, trustDomainFetcher, "dc1", true)) - mgr.SetRaftLeader(true) - go mgr.Run(suite.ctx) - - var ( - // Create proxy state template IDs to check against in this test. - apiProxyStateTemplateID = resourcetest.Resource(pbmesh.ProxyStateTemplateType, "api-abc").WithTenancy(tenancy).ID() - webProxyStateTemplateID = resourcetest.Resource(pbmesh.ProxyStateTemplateType, "web-def").WithTenancy(tenancy).ID() - ) + // Run the controller manager + mgr := controller.NewManager(suite.client, suite.runtime.Logger) - retry.Run(suite.T(), func(r *retry.R) { - webProxyStateTemplate := suite.client.RequireResourceExists(r, webProxyStateTemplateID) - apiProxyStateTemplate := suite.client.RequireResourceExists(r, apiProxyStateTemplateID) + // Initialize controller dependencies. + c := cache.New() + trustDomainFetcher := func() (string, error) { return "test.consul", nil } - // Default deny because api has non-empty computed traffic permissions. - assertTrafficPermissionDefaultPolicy(r, false, apiProxyStateTemplate) - assertTrafficPermissionDefaultPolicy(r, true, webProxyStateTemplate) - }) + mgr.Register(Controller(c, trustDomainFetcher, "dc1", true)) + mgr.SetRaftLeader(true) + go mgr.Run(suite.ctx) + + var ( + // Create proxy state template IDs to check against in this test. + apiProxyStateTemplateID = resourcetest.Resource(pbmesh.ProxyStateTemplateType, "api-abc").ID() + webProxyStateTemplateID = resourcetest.Resource(pbmesh.ProxyStateTemplateType, "web-def").ID() + ) + + retry.Run(suite.T(), func(r *retry.R) { + webProxyStateTemplate := suite.client.RequireResourceExists(r, webProxyStateTemplateID) + apiProxyStateTemplate := suite.client.RequireResourceExists(r, apiProxyStateTemplateID) + + // Default deny because api has non-empty computed traffic permissions. + assertTrafficPermissionDefaultPolicy(r, false, apiProxyStateTemplate) + assertTrafficPermissionDefaultPolicy(r, true, webProxyStateTemplate) }) } @@ -861,21 +804,17 @@ func TestMeshController(t *testing.T) { suite.Run(t, new(controllerTestSuite)) } -func requireExplicitDestinationsFound(t *testing.T, name string, tmplResource *pbresource.Resource) { - requireExplicitDestinations(t, name, tmplResource, true) +func requireExplicitDestinationsFound(t resourcetest.T, name string, tmpl *pbmesh.ProxyStateTemplate) { + requireExplicitDestinations(t, name, tmpl, true) } -func requireExplicitDestinationsNotFound(t *testing.T, name string, tmplResource *pbresource.Resource) { - requireExplicitDestinations(t, name, tmplResource, false) +func requireExplicitDestinationsNotFound(t resourcetest.T, name string, tmpl *pbmesh.ProxyStateTemplate) { + requireExplicitDestinations(t, name, tmpl, false) } -func requireExplicitDestinations(t *testing.T, name string, tmplResource *pbresource.Resource, found bool) { +func requireExplicitDestinations(t resourcetest.T, name string, tmpl *pbmesh.ProxyStateTemplate, found bool) { t.Helper() - var tmpl pbmesh.ProxyStateTemplate - err := tmplResource.Data.UnmarshalTo(&tmpl) - require.NoError(t, err) - // Check outbound listener. var foundListener bool for _, l := range tmpl.ProxyState.Listeners { @@ -887,16 +826,12 @@ func requireExplicitDestinations(t *testing.T, name string, tmplResource *pbreso require.Equal(t, found, foundListener) - requireClustersAndEndpoints(t, name, &tmpl, found) + requireClustersAndEndpoints(t, name, tmpl, found) } -func requireImplicitDestinationsFound(t *testing.T, name string, tmplResource *pbresource.Resource) { +func requireImplicitDestinationsFound(t resourcetest.T, name string, tmpl *pbmesh.ProxyStateTemplate) { t.Helper() - var tmpl pbmesh.ProxyStateTemplate - err := tmplResource.Data.UnmarshalTo(&tmpl) - require.NoError(t, err) - // Check outbound listener. var foundListener bool for _, l := range tmpl.ProxyState.Listeners { @@ -934,10 +869,10 @@ func requireImplicitDestinationsFound(t *testing.T, name string, tmplResource *p } require.True(t, foundListener) - requireClustersAndEndpoints(t, name, &tmpl, true) + requireClustersAndEndpoints(t, name, tmpl, true) } -func requireClustersAndEndpoints(t *testing.T, name string, tmpl *pbmesh.ProxyStateTemplate, found bool) { +func requireClustersAndEndpoints(t resourcetest.T, name string, tmpl *pbmesh.ProxyStateTemplate, found bool) { t.Helper() var foundCluster bool @@ -961,11 +896,25 @@ func requireClustersAndEndpoints(t *testing.T, name string, tmpl *pbmesh.ProxySt require.Equal(t, found, foundEndpoints) } -func resourceID(rtype *pbresource.Type, name string, tenancy *pbresource.Tenancy) *pbresource.ID { +func (suite *controllerTestSuite) waitForProxyStateTemplateState(t *testing.T, id *pbresource.ID, verify func(resourcetest.T, *pbmesh.ProxyStateTemplate)) { + suite.client.WaitForResourceState(t, id, func(rt resourcetest.T, res *pbresource.Resource) { + var tmpl pbmesh.ProxyStateTemplate + err := res.Data.UnmarshalTo(&tmpl) + require.NoError(rt, err) + + verify(rt, &tmpl) + }) +} + +func resourceID(rtype *pbresource.Type, name string) *pbresource.ID { return &pbresource.ID{ - Type: rtype, - Tenancy: tenancy, - Name: name, + Type: rtype, + Tenancy: &pbresource.Tenancy{ + Partition: "default", + Namespace: "default", + PeerName: "local", + }, + Name: name, } } @@ -983,31 +932,3 @@ func assertTrafficPermissionDefaultPolicy(t resourcetest.T, defaultAllow bool, r require.NotNil(t, l4) require.Equal(t, defaultAllow, l4.TrafficPermissions.DefaultAllow) } - -func (suite *controllerTestSuite) appendTenancyInfo(tenancy *pbresource.Tenancy) string { - return fmt.Sprintf("%s_Namespace_%s_Partition", tenancy.Namespace, tenancy.Partition) -} - -func (suite *controllerTestSuite) cleanupResources() { - - suite.client.MustDelete(suite.T(), suite.apiWorkloadID) - suite.client.MustDelete(suite.T(), suite.apiComputedTrafficPermissions.Id) - suite.client.MustDelete(suite.T(), suite.apiService.Id) - suite.client.MustDelete(suite.T(), suite.apiEndpoints.Id) - suite.client.MustDelete(suite.T(), suite.webWorkload.Id) - suite.client.MustDelete(suite.T(), suite.dbWorkloadID) - suite.client.MustDelete(suite.T(), suite.dbService.Id) - suite.client.MustDelete(suite.T(), suite.dbEndpoints.Id) -} - -func (suite *controllerTestSuite) runTestCaseWithTenancies(t func(*pbresource.Tenancy)) { - for _, tenancy := range suite.tenancies { - suite.Run(suite.appendTenancyInfo(tenancy), func() { - suite.setupSuiteWithTenancy(tenancy) - suite.T().Cleanup(func() { - suite.cleanupResources() - }) - t(tenancy) - }) - } -} diff --git a/internal/mesh/internal/controllers/sidecarproxy/fetcher/data_fetcher_test.go b/internal/mesh/internal/controllers/sidecarproxy/fetcher/data_fetcher_test.go index 401518e077bc1..457fa393b43f1 100644 --- a/internal/mesh/internal/controllers/sidecarproxy/fetcher/data_fetcher_test.go +++ b/internal/mesh/internal/controllers/sidecarproxy/fetcher/data_fetcher_test.go @@ -5,7 +5,6 @@ package fetcher import ( "context" - "fmt" "testing" "github.com/stretchr/testify/require" @@ -31,10 +30,9 @@ import ( type dataFetcherSuite struct { suite.Suite - ctx context.Context - client pbresource.ResourceServiceClient - resourceClient *resourcetest.Client - rt controller.Runtime + ctx context.Context + client pbresource.ResourceServiceClient + rt controller.Runtime api1Service *pbresource.Resource api1ServiceData *pbcatalog.Service @@ -47,22 +45,16 @@ type dataFetcherSuite struct { webComputedDestinationsData *pbmesh.ComputedExplicitDestinations webProxy *pbresource.Resource webWorkload *pbresource.Resource - tenancies []*pbresource.Tenancy } func (suite *dataFetcherSuite) SetupTest() { suite.ctx = testutil.TestContext(suite.T()) - suite.tenancies = resourcetest.TestTenancies() - suite.tenancies = resourcetest.TestTenancies() - suite.client = svctest.RunResourceServiceWithTenancies(suite.T(), types.Register, catalog.RegisterTypes) - suite.resourceClient = resourcetest.NewClient(suite.client) + suite.client = svctest.RunResourceService(suite.T(), types.Register, catalog.RegisterTypes) suite.rt = controller.Runtime{ Client: suite.client, Logger: testutil.Logger(suite.T()), } -} -func (suite *dataFetcherSuite) setupWithTenancy(tenancy *pbresource.Tenancy) { suite.api1ServiceData = &pbcatalog.Service{ Ports: []*pbcatalog.ServicePort{ {TargetPort: "tcp", VirtualPort: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, @@ -70,7 +62,6 @@ func (suite *dataFetcherSuite) setupWithTenancy(tenancy *pbresource.Tenancy) { }, } suite.api1Service = resourcetest.Resource(pbcatalog.ServiceType, "api-1"). - WithTenancy(tenancy). WithData(suite.T(), suite.api1ServiceData). Write(suite.T(), suite.client) @@ -87,7 +78,6 @@ func (suite *dataFetcherSuite) setupWithTenancy(tenancy *pbresource.Tenancy) { }, } suite.api1ServiceEndpoints = resourcetest.Resource(pbcatalog.ServiceEndpointsType, "api-1"). - WithTenancy(tenancy). WithData(suite.T(), suite.api1ServiceEndpointsData). Write(suite.T(), suite.client) @@ -99,7 +89,6 @@ func (suite *dataFetcherSuite) setupWithTenancy(tenancy *pbresource.Tenancy) { }, } suite.api2Service = resourcetest.Resource(pbcatalog.ServiceType, "api-2"). - WithTenancy(tenancy). WithData(suite.T(), suite.api2ServiceData). Write(suite.T(), suite.client) @@ -117,7 +106,6 @@ func (suite *dataFetcherSuite) setupWithTenancy(tenancy *pbresource.Tenancy) { }, } suite.api2ServiceEndpoints = resourcetest.Resource(pbcatalog.ServiceEndpointsType, "api-2"). - WithTenancy(tenancy). WithData(suite.T(), suite.api2ServiceEndpointsData). Write(suite.T(), suite.client) @@ -139,12 +127,10 @@ func (suite *dataFetcherSuite) setupWithTenancy(tenancy *pbresource.Tenancy) { } suite.webProxy = resourcetest.Resource(pbmesh.ProxyStateTemplateType, "web-abc"). - WithTenancy(tenancy). WithData(suite.T(), &pbmesh.ProxyStateTemplate{}). Write(suite.T(), suite.client) suite.webWorkload = resourcetest.Resource(pbcatalog.WorkloadType, "web-abc"). - WithTenancy(tenancy). WithData(suite.T(), &pbcatalog.Workload{ Addresses: []*pbcatalog.WorkloadAddress{{Host: "10.0.0.2"}}, Ports: map[string]*pbcatalog.WorkloadPort{"tcp": {Port: 8081, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}}, @@ -153,384 +139,259 @@ func (suite *dataFetcherSuite) setupWithTenancy(tenancy *pbresource.Tenancy) { } func (suite *dataFetcherSuite) TestFetcher_FetchWorkload_WorkloadNotFound() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - identityID := resourcetest.Resource(pbauth.WorkloadIdentityType, "workload-identity-abc"). - WithTenancy(tenancy).ID() + identityID := resourcetest.Resource(pbauth.WorkloadIdentityType, "workload-identity-abc").ID() - // Create cache and pre-populate it. - c := cache.New() + // Create cache and pre-populate it. + c := cache.New() - f := Fetcher{ - cache: c, - client: suite.client, - } + f := Fetcher{ + cache: c, + client: suite.client, + } - workloadID := resourcetest.Resource(pbcatalog.WorkloadType, "not-found").WithTenancy(tenancy).ID() + workloadID := resourcetest.Resource(pbcatalog.WorkloadType, "not-found").ID() - // Track workload with its identity. - workload := resourcetest.Resource(pbcatalog.WorkloadType, workloadID.GetName()). - WithTenancy(tenancy). - WithData(suite.T(), &pbcatalog.Workload{ - Identity: identityID.Name, - }).Build() + // Track workload with its identity. + workload := resourcetest.Resource(pbcatalog.WorkloadType, workloadID.GetName()). + WithTenancy(resource.DefaultNamespacedTenancy()). + WithData(suite.T(), &pbcatalog.Workload{ + Identity: identityID.Name, + }).Build() - c.TrackWorkload(resourcetest.MustDecode[*pbcatalog.Workload](suite.T(), workload)) + c.TrackWorkload(resourcetest.MustDecode[*pbcatalog.Workload](suite.T(), workload)) - // Now fetch the workload so that we can check that it's been removed from cache. - _, err := f.FetchWorkload(context.Background(), workloadID) - require.NoError(suite.T(), err) - require.Nil(suite.T(), c.WorkloadsByWorkloadIdentity(identityID)) - }) + // Now fetch the workload so that we can check that it's been removed from cache. + _, err := f.FetchWorkload(context.Background(), workloadID) + require.NoError(suite.T(), err) + require.Nil(suite.T(), c.WorkloadsByWorkloadIdentity(identityID)) } func (suite *dataFetcherSuite) TestFetcher_FetchWorkload_WorkloadFound() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - identityID := resourcetest.Resource(pbauth.WorkloadIdentityType, "workload-identity-abc"). - WithTenancy(tenancy).ID() + identityID := resourcetest.Resource(pbauth.WorkloadIdentityType, "workload-identity-abc").ID() - // Create cache and pre-populate it. - c := cache.New() + // Create cache and pre-populate it. + c := cache.New() - f := Fetcher{ - cache: c, - client: suite.client, - } + f := Fetcher{ + cache: c, + client: suite.client, + } - workload := resourcetest.Resource(pbcatalog.WorkloadType, "service-workload-abc"). - WithTenancy(tenancy). - WithData(suite.T(), &pbcatalog.Workload{ - Identity: identityID.Name, - Ports: map[string]*pbcatalog.WorkloadPort{ - "foo": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, - }, - Addresses: []*pbcatalog.WorkloadAddress{ - { - Host: "10.0.0.1", - Ports: []string{"foo"}, - }, + workload := resourcetest.Resource(pbcatalog.WorkloadType, "service-workload-abc"). + WithTenancy(resource.DefaultNamespacedTenancy()). + WithData(suite.T(), &pbcatalog.Workload{ + Identity: identityID.Name, + Ports: map[string]*pbcatalog.WorkloadPort{ + "foo": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, + }, + Addresses: []*pbcatalog.WorkloadAddress{ + { + Host: "10.0.0.1", + Ports: []string{"foo"}, }, - }).Write(suite.T(), suite.client) + }, + }).Write(suite.T(), suite.client) - // This call should track the workload's identity - _, err := f.FetchWorkload(context.Background(), workload.Id) - require.NoError(suite.T(), err) + // This call should track the workload's identity + _, err := f.FetchWorkload(context.Background(), workload.Id) + require.NoError(suite.T(), err) - // Check that the workload is tracked - workload.Id.Uid = "" - prototest.AssertElementsMatch(suite.T(), []*pbresource.ID{workload.Id}, c.WorkloadsByWorkloadIdentity(identityID)) - }) + // Check that the workload is tracked + workload.Id.Uid = "" + prototest.AssertElementsMatch(suite.T(), []*pbresource.ID{workload.Id}, c.WorkloadsByWorkloadIdentity(identityID)) } func (suite *dataFetcherSuite) TestFetcher_FetchExplicitDestinationsData() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - c := cache.New() + c := cache.New() - var ( - api1ServiceRef = resource.Reference(suite.api1Service.Id, "") - ) + var ( + api1ServiceRef = resource.Reference(suite.api1Service.Id, "") + ) - f := Fetcher{ - cache: c, - client: suite.client, - } + f := Fetcher{ + cache: c, + client: suite.client, + } - testutil.RunStep(suite.T(), "computed destinations not found", func(t *testing.T) { - // First add computed destination to cache so we can check if it's untracked later. - compDest := resourcetest.Resource(pbmesh.ComputedExplicitDestinationsType, suite.webProxy.Id.Name). - WithData(t, &pbmesh.ComputedExplicitDestinations{ - Destinations: []*pbmesh.Destination{ - { - DestinationRef: api1ServiceRef, - DestinationPort: "tcp1", - }, - }, - }). - WithTenancy(tenancy). - Build() - c.TrackComputedDestinations(resourcetest.MustDecode[*pbmesh.ComputedExplicitDestinations](t, compDest)) - - // We will try to fetch explicit destinations for a proxy that doesn't have one. - destinations, err := f.FetchExplicitDestinationsData(suite.ctx, suite.webProxy.Id) - require.NoError(t, err) - require.Nil(t, destinations) - - // Check that cache no longer has this destination. - require.Nil(t, c.ComputedDestinationsByService(resource.IDFromReference(api1ServiceRef))) - }) - - testutil.RunStep(suite.T(), "invalid destinations: service not found", func(t *testing.T) { - notFoundServiceRef := resourcetest.Resource(pbcatalog.ServiceType, "not-found"). - WithTenancy(tenancy). - ReferenceNoSection() - - compDest := resourcetest.Resource(pbmesh.ComputedExplicitDestinationsType, suite.webProxy.Id.Name). - WithData(t, &pbmesh.ComputedExplicitDestinations{ - Destinations: []*pbmesh.Destination{ - { - DestinationRef: notFoundServiceRef, - DestinationPort: "tcp", - }, + testutil.RunStep(suite.T(), "computed destinations not found", func(t *testing.T) { + // First add computed destination to cache so we can check if it's untracked later. + compDest := resourcetest.Resource(pbmesh.ComputedExplicitDestinationsType, suite.webProxy.Id.Name). + WithData(t, &pbmesh.ComputedExplicitDestinations{ + Destinations: []*pbmesh.Destination{ + { + DestinationRef: api1ServiceRef, + DestinationPort: "tcp1", }, - }). - WithTenancy(tenancy). - Write(t, suite.client) - - destinations, err := f.FetchExplicitDestinationsData(suite.ctx, suite.webProxy.Id) - require.NoError(t, err) - require.Nil(t, destinations) - cachedCompDestIDs := c.ComputedDestinationsByService(resource.IDFromReference(notFoundServiceRef)) - compDest.Id.Uid = "" - prototest.AssertElementsMatch(t, []*pbresource.ID{compDest.Id}, cachedCompDestIDs) - }) - - testutil.RunStep(suite.T(), "invalid destinations: service not on mesh", func(t *testing.T) { - apiNonMeshServiceData := &pbcatalog.Service{ - Ports: []*pbcatalog.ServicePort{ - {TargetPort: "tcp", Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, }, - } - resourcetest.ResourceID(suite.api1Service.Id). - WithTenancy(tenancy). - WithData(t, apiNonMeshServiceData). - Write(t, suite.client) - compDest := resourcetest.Resource(pbmesh.ComputedExplicitDestinationsType, suite.webProxy.Id.Name). - WithData(t, &pbmesh.ComputedExplicitDestinations{ - Destinations: []*pbmesh.Destination{ - { - DestinationRef: api1ServiceRef, - DestinationPort: "tcp", - }, - }, - }). - WithTenancy(tenancy). - Write(t, suite.client) - - destinations, err := f.FetchExplicitDestinationsData(suite.ctx, suite.webProxy.Id) - require.NoError(t, err) - require.Nil(t, destinations) - cachedCompDestIDs := c.ComputedDestinationsByService(resource.IDFromReference(api1ServiceRef)) - compDest.Id.Uid = "" - prototest.AssertElementsMatch(t, []*pbresource.ID{compDest.Id}, cachedCompDestIDs) - }) - - testutil.RunStep(suite.T(), "invalid destinations: destination port not found", func(t *testing.T) { - resourcetest.ResourceID(suite.api1Service.Id). - WithData(t, &pbcatalog.Service{ - Ports: []*pbcatalog.ServicePort{ - {TargetPort: "some-other-port", Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, - {TargetPort: "mesh", Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, - }, - }). - WithTenancy(tenancy). - Write(t, suite.client) - compDest := resourcetest.Resource(pbmesh.ComputedExplicitDestinationsType, suite.webProxy.Id.Name). - WithData(t, &pbmesh.ComputedExplicitDestinations{ - Destinations: []*pbmesh.Destination{ - { - DestinationRef: api1ServiceRef, - DestinationPort: "tcp", - }, - }, - }). - WithTenancy(tenancy). - Write(t, suite.client) - - destinations, err := f.FetchExplicitDestinationsData(suite.ctx, suite.webProxy.Id) - require.NoError(t, err) - require.Nil(t, destinations) - cachedCompDestIDs := c.ComputedDestinationsByService(resource.IDFromReference(api1ServiceRef)) - compDest.Id.Uid = "" - prototest.AssertElementsMatch(t, []*pbresource.ID{compDest.Id}, cachedCompDestIDs) - }) - - suite.api1Service = resourcetest.ResourceID(suite.api1Service.Id). - WithTenancy(tenancy). - WithData(suite.T(), suite.api1ServiceData). - Write(suite.T(), suite.client) - - suite.api2Service = resourcetest.ResourceID(suite.api2Service.Id). - WithTenancy(tenancy). - WithData(suite.T(), suite.api2ServiceData). - Write(suite.T(), suite.client) - - testutil.RunStep(suite.T(), "invalid destinations: destination is pointing to a mesh port", func(t *testing.T) { - // Create a computed destinations resource pointing to the mesh port. - compDest := resourcetest.Resource(pbmesh.ComputedExplicitDestinationsType, suite.webProxy.Id.Name). - WithData(t, &pbmesh.ComputedExplicitDestinations{ - Destinations: []*pbmesh.Destination{ - { - DestinationRef: api1ServiceRef, - DestinationPort: "mesh", - }, - }, - }). - WithTenancy(tenancy). - Write(t, suite.client) + }). + WithTenancy(resource.DefaultNamespacedTenancy()). + Build() + c.TrackComputedDestinations(resourcetest.MustDecode[*pbmesh.ComputedExplicitDestinations](t, compDest)) - destinations, err := f.FetchExplicitDestinationsData(suite.ctx, suite.webProxy.Id) - require.NoError(t, err) - require.Empty(t, destinations) + // We will try to fetch explicit destinations for a proxy that doesn't have one. + destinations, err := f.FetchExplicitDestinationsData(suite.ctx, suite.webProxy.Id) + require.NoError(t, err) + require.Nil(t, destinations) - cachedCompDestIDs := c.ComputedDestinationsByService(resource.IDFromReference(api1ServiceRef)) - compDest.Id.Uid = "" - prototest.AssertElementsMatch(t, []*pbresource.ID{compDest.Id}, cachedCompDestIDs) - }) + // Check that cache no longer has this destination. + require.Nil(t, c.ComputedDestinationsByService(resource.IDFromReference(api1ServiceRef))) + }) + + testutil.RunStep(suite.T(), "invalid destinations: service not found", func(t *testing.T) { + notFoundServiceRef := resourcetest.Resource(pbcatalog.ServiceType, "not-found"). + WithTenancy(resource.DefaultNamespacedTenancy()). + ReferenceNoSection() + + compDest := resourcetest.Resource(pbmesh.ComputedExplicitDestinationsType, suite.webProxy.Id.Name). + WithData(t, &pbmesh.ComputedExplicitDestinations{ + Destinations: []*pbmesh.Destination{ + { + DestinationRef: notFoundServiceRef, + DestinationPort: "tcp", + }, + }, + }). + WithTenancy(resource.DefaultNamespacedTenancy()). + Write(t, suite.client) + + destinations, err := f.FetchExplicitDestinationsData(suite.ctx, suite.webProxy.Id) + require.NoError(t, err) + require.Nil(t, destinations) + cachedCompDestIDs := c.ComputedDestinationsByService(resource.IDFromReference(notFoundServiceRef)) + compDest.Id.Uid = "" + prototest.AssertElementsMatch(t, []*pbresource.ID{compDest.Id}, cachedCompDestIDs) + }) + testutil.RunStep(suite.T(), "invalid destinations: service not on mesh", func(t *testing.T) { + apiNonMeshServiceData := &pbcatalog.Service{ + Ports: []*pbcatalog.ServicePort{ + {TargetPort: "tcp", Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, + }, + } + resourcetest.ResourceID(suite.api1Service.Id). + WithData(t, apiNonMeshServiceData). + Write(t, suite.client) compDest := resourcetest.Resource(pbmesh.ComputedExplicitDestinationsType, suite.webProxy.Id.Name). - WithData(suite.T(), suite.webComputedDestinationsData). - WithTenancy(tenancy). - Write(suite.T(), suite.client) + WithData(t, &pbmesh.ComputedExplicitDestinations{ + Destinations: []*pbmesh.Destination{ + { + DestinationRef: api1ServiceRef, + DestinationPort: "tcp", + }, + }, + }). + WithTenancy(resource.DefaultNamespacedTenancy()). + Write(t, suite.client) + + destinations, err := f.FetchExplicitDestinationsData(suite.ctx, suite.webProxy.Id) + require.NoError(t, err) + require.Nil(t, destinations) + cachedCompDestIDs := c.ComputedDestinationsByService(resource.IDFromReference(api1ServiceRef)) + compDest.Id.Uid = "" + prototest.AssertElementsMatch(t, []*pbresource.ID{compDest.Id}, cachedCompDestIDs) + }) - testutil.RunStep(suite.T(), "invalid destinations: destination is pointing to a port but computed routes is not aware of it yet", func(t *testing.T) { - apiNonTCPServiceData := &pbcatalog.Service{ + testutil.RunStep(suite.T(), "invalid destinations: destination port not found", func(t *testing.T) { + resourcetest.ResourceID(suite.api1Service.Id). + WithData(t, &pbcatalog.Service{ Ports: []*pbcatalog.ServicePort{ - {TargetPort: "http", Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, + {TargetPort: "some-other-port", Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, {TargetPort: "mesh", Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, }, - } - apiNonTCPService := resourcetest.ResourceID(suite.api1Service.Id). - WithData(t, apiNonTCPServiceData). - WithTenancy(tenancy). - Build() - - api1ComputedRoutesID := resource.ReplaceType(pbmesh.ComputedRoutesType, suite.api1Service.Id) - api1ComputedRoutes := routestest.ReconcileComputedRoutes(suite.T(), suite.client, api1ComputedRoutesID, - resourcetest.MustDecode[*pbcatalog.Service](suite.T(), apiNonTCPService), - ) - require.NotNil(suite.T(), api1ComputedRoutes) - - // This destination points to TCP, but the computed routes is stale and only knows about HTTP. - destinations, err := f.FetchExplicitDestinationsData(suite.ctx, suite.webProxy.Id) - require.NoError(t, err) - - // Check that we didn't return any destinations. - require.Nil(t, destinations) - - // Check that destination service is still in cache because it's still referenced from the pbmesh.Destinations - // resource. - cachedCompDestIDs := c.ComputedDestinationsByService(resource.IDFromReference(api1ServiceRef)) - compDest.Id.Uid = "" - prototest.AssertElementsMatch(t, []*pbresource.ID{compDest.Id}, cachedCompDestIDs) - }) - - testutil.RunStep(suite.T(), "happy path", func(t *testing.T) { - // Write a default ComputedRoutes for api1 and api2. - var ( - api1ComputedRoutesID = resource.ReplaceType(pbmesh.ComputedRoutesType, suite.api1Service.Id) - api2ComputedRoutesID = resource.ReplaceType(pbmesh.ComputedRoutesType, suite.api2Service.Id) - ) - api1ComputedRoutes := routestest.ReconcileComputedRoutes(suite.T(), suite.client, api1ComputedRoutesID, - resourcetest.MustDecode[*pbcatalog.Service](suite.T(), suite.api1Service), - ) - require.NotNil(suite.T(), api1ComputedRoutes) - api2ComputedRoutes := routestest.ReconcileComputedRoutes(suite.T(), suite.client, api2ComputedRoutesID, - resourcetest.MustDecode[*pbcatalog.Service](suite.T(), suite.api2Service), - ) - require.NotNil(suite.T(), api2ComputedRoutes) - - resourcetest.ResourceID(suite.api1Service.Id) - - expectedDestinations := []*intermediate.Destination{ - { - Explicit: suite.webComputedDestinationsData.Destinations[0], - Service: resourcetest.MustDecode[*pbcatalog.Service](suite.T(), suite.api1Service), - ComputedPortRoutes: routestest.MutateTargets(suite.T(), api1ComputedRoutes.Data, "tcp", func(t *testing.T, details *pbmesh.BackendTargetDetails) { - switch { - case resource.ReferenceOrIDMatch(suite.api1Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "tcp": - se := resourcetest.MustDecode[*pbcatalog.ServiceEndpoints](suite.T(), suite.api1ServiceEndpoints) - details.ServiceEndpointsId = se.Resource.Id - details.ServiceEndpoints = se.Data - details.IdentityRefs = []*pbresource.Reference{{ - Name: "api-1-identity", - Tenancy: suite.api1Service.Id.Tenancy, - }} - } - }), - }, - { - Explicit: suite.webComputedDestinationsData.Destinations[1], - Service: resourcetest.MustDecode[*pbcatalog.Service](suite.T(), suite.api2Service), - ComputedPortRoutes: routestest.MutateTargets(suite.T(), api2ComputedRoutes.Data, "tcp1", func(t *testing.T, details *pbmesh.BackendTargetDetails) { - switch { - case resource.ReferenceOrIDMatch(suite.api2Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "tcp1": - se := resourcetest.MustDecode[*pbcatalog.ServiceEndpoints](suite.T(), suite.api2ServiceEndpoints) - details.ServiceEndpointsId = se.Resource.Id - details.ServiceEndpoints = se.Data - details.IdentityRefs = []*pbresource.Reference{{ - Name: "api-2-identity", - Tenancy: suite.api2Service.Id.Tenancy, - }} - } - }), - }, - { - Explicit: suite.webComputedDestinationsData.Destinations[2], - Service: resourcetest.MustDecode[*pbcatalog.Service](suite.T(), suite.api2Service), - ComputedPortRoutes: routestest.MutateTargets(suite.T(), api2ComputedRoutes.Data, "tcp2", func(t *testing.T, details *pbmesh.BackendTargetDetails) { - switch { - case resource.ReferenceOrIDMatch(suite.api2Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "tcp2": - se := resourcetest.MustDecode[*pbcatalog.ServiceEndpoints](suite.T(), suite.api2ServiceEndpoints) - details.ServiceEndpointsId = se.Resource.Id - details.ServiceEndpoints = se.Data - details.IdentityRefs = []*pbresource.Reference{{ - Name: "api-2-identity", - Tenancy: suite.api2Service.Id.Tenancy, - }} - } - }), + }). + Write(t, suite.client) + compDest := resourcetest.Resource(pbmesh.ComputedExplicitDestinationsType, suite.webProxy.Id.Name). + WithData(t, &pbmesh.ComputedExplicitDestinations{ + Destinations: []*pbmesh.Destination{ + { + DestinationRef: api1ServiceRef, + DestinationPort: "tcp", + }, }, - } + }). + WithTenancy(resource.DefaultNamespacedTenancy()). + Write(t, suite.client) + + destinations, err := f.FetchExplicitDestinationsData(suite.ctx, suite.webProxy.Id) + require.NoError(t, err) + require.Nil(t, destinations) + cachedCompDestIDs := c.ComputedDestinationsByService(resource.IDFromReference(api1ServiceRef)) + compDest.Id.Uid = "" + prototest.AssertElementsMatch(t, []*pbresource.ID{compDest.Id}, cachedCompDestIDs) + }) - actualDestinations, err := f.FetchExplicitDestinationsData(suite.ctx, suite.webProxy.Id) - require.NoError(t, err) + suite.api1Service = resourcetest.ResourceID(suite.api1Service.Id). + WithData(suite.T(), suite.api1ServiceData). + Write(suite.T(), suite.client) - // Check that we've computed expanded destinations correctly. - prototest.AssertElementsMatch(t, expectedDestinations, actualDestinations) - }) - }) -} + suite.api2Service = resourcetest.ResourceID(suite.api2Service.Id). + WithData(suite.T(), suite.api2ServiceData). + Write(suite.T(), suite.client) -func (suite *dataFetcherSuite) TestFetcher_FetchImplicitDestinationsData() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - // Create a few other services to be implicit upstreams. - api3Service := resourcetest.Resource(pbcatalog.ServiceType, "api-3"). - WithData(suite.T(), &pbcatalog.Service{ - VirtualIps: []string{"192.1.1.1"}, - Ports: []*pbcatalog.ServicePort{ - {TargetPort: "tcp", VirtualPort: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, - {TargetPort: "mesh", VirtualPort: 20000, Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, + testutil.RunStep(suite.T(), "invalid destinations: destination is pointing to a mesh port", func(t *testing.T) { + // Create a computed destinations resource pointing to the mesh port. + compDest := resourcetest.Resource(pbmesh.ComputedExplicitDestinationsType, suite.webProxy.Id.Name). + WithData(t, &pbmesh.ComputedExplicitDestinations{ + Destinations: []*pbmesh.Destination{ + { + DestinationRef: api1ServiceRef, + DestinationPort: "mesh", + }, }, }). - WithTenancy(tenancy). - Write(suite.T(), suite.client) + WithTenancy(resource.DefaultNamespacedTenancy()). + Write(t, suite.client) - api3ServiceEndpointsData := &pbcatalog.ServiceEndpoints{ - Endpoints: []*pbcatalog.Endpoint{ - { - TargetRef: &pbresource.ID{ - Name: "api-3-abc", - Tenancy: api3Service.Id.Tenancy, - Type: pbcatalog.WorkloadType, - }, - Addresses: []*pbcatalog.WorkloadAddress{{Host: "10.0.0.1"}}, - Ports: map[string]*pbcatalog.WorkloadPort{ - "tcp": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, - "mesh": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, - }, - Identity: "api-3-identity", - }, + destinations, err := f.FetchExplicitDestinationsData(suite.ctx, suite.webProxy.Id) + require.NoError(t, err) + require.Empty(t, destinations) + + cachedCompDestIDs := c.ComputedDestinationsByService(resource.IDFromReference(api1ServiceRef)) + compDest.Id.Uid = "" + prototest.AssertElementsMatch(t, []*pbresource.ID{compDest.Id}, cachedCompDestIDs) + }) + + compDest := resourcetest.Resource(pbmesh.ComputedExplicitDestinationsType, suite.webProxy.Id.Name). + WithData(suite.T(), suite.webComputedDestinationsData). + WithTenancy(resource.DefaultNamespacedTenancy()). + Write(suite.T(), suite.client) + + testutil.RunStep(suite.T(), "invalid destinations: destination is pointing to a port but computed routes is not aware of it yet", func(t *testing.T) { + apiNonTCPServiceData := &pbcatalog.Service{ + Ports: []*pbcatalog.ServicePort{ + {TargetPort: "http", Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, + {TargetPort: "mesh", Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, }, } - api3ServiceEndpoints := resourcetest.Resource(pbcatalog.ServiceEndpointsType, "api-3"). - WithTenancy(tenancy). - WithData(suite.T(), api3ServiceEndpointsData). - Write(suite.T(), suite.client) + apiNonTCPService := resourcetest.ResourceID(suite.api1Service.Id). + WithData(t, apiNonTCPServiceData). + Build() + + api1ComputedRoutesID := resource.ReplaceType(pbmesh.ComputedRoutesType, suite.api1Service.Id) + api1ComputedRoutes := routestest.ReconcileComputedRoutes(suite.T(), suite.client, api1ComputedRoutesID, + resourcetest.MustDecode[*pbcatalog.Service](suite.T(), apiNonTCPService), + ) + require.NotNil(suite.T(), api1ComputedRoutes) + + // This destination points to TCP, but the computed routes is stale and only knows about HTTP. + destinations, err := f.FetchExplicitDestinationsData(suite.ctx, suite.webProxy.Id) + require.NoError(t, err) - // Write a default ComputedRoutes for api1, api2, and api3. + // Check that we didn't return any destinations. + require.Nil(t, destinations) + + // Check that destination service is still in cache because it's still referenced from the pbmesh.Destinations + // resource. + cachedCompDestIDs := c.ComputedDestinationsByService(resource.IDFromReference(api1ServiceRef)) + compDest.Id.Uid = "" + prototest.AssertElementsMatch(t, []*pbresource.ID{compDest.Id}, cachedCompDestIDs) + }) + + testutil.RunStep(suite.T(), "happy path", func(t *testing.T) { + // Write a default ComputedRoutes for api1 and api2. var ( api1ComputedRoutesID = resource.ReplaceType(pbmesh.ComputedRoutesType, suite.api1Service.Id) api2ComputedRoutesID = resource.ReplaceType(pbmesh.ComputedRoutesType, suite.api2Service.Id) - api3ComputedRoutesID = resource.ReplaceType(pbmesh.ComputedRoutesType, api3Service.Id) ) api1ComputedRoutes := routestest.ReconcileComputedRoutes(suite.T(), suite.client, api1ComputedRoutesID, resourcetest.MustDecode[*pbcatalog.Service](suite.T(), suite.api1Service), @@ -540,12 +401,10 @@ func (suite *dataFetcherSuite) TestFetcher_FetchImplicitDestinationsData() { resourcetest.MustDecode[*pbcatalog.Service](suite.T(), suite.api2Service), ) require.NotNil(suite.T(), api2ComputedRoutes) - api3ComputedRoutes := routestest.ReconcileComputedRoutes(suite.T(), suite.client, api3ComputedRoutesID, - resourcetest.MustDecode[*pbcatalog.Service](suite.T(), api3Service), - ) - require.NotNil(suite.T(), api3ComputedRoutes) - existingDestinations := []*intermediate.Destination{ + resourcetest.ResourceID(suite.api1Service.Id) + + expectedDestinations := []*intermediate.Destination{ { Explicit: suite.webComputedDestinationsData.Destinations[0], Service: resourcetest.MustDecode[*pbcatalog.Service](suite.T(), suite.api1Service), @@ -573,7 +432,7 @@ func (suite *dataFetcherSuite) TestFetcher_FetchImplicitDestinationsData() { details.ServiceEndpoints = se.Data details.IdentityRefs = []*pbresource.Reference{{ Name: "api-2-identity", - Tenancy: suite.api1Service.Id.Tenancy, + Tenancy: suite.api2Service.Id.Tenancy, }} } }), @@ -589,66 +448,151 @@ func (suite *dataFetcherSuite) TestFetcher_FetchImplicitDestinationsData() { details.ServiceEndpoints = se.Data details.IdentityRefs = []*pbresource.Reference{{ Name: "api-2-identity", - Tenancy: suite.api1Service.Id.Tenancy, - }} - } - }), - }, - { - // implicit - Service: resourcetest.MustDecode[*pbcatalog.Service](suite.T(), api3Service), - ComputedPortRoutes: routestest.MutateTargets(suite.T(), api3ComputedRoutes.Data, "tcp", func(t *testing.T, details *pbmesh.BackendTargetDetails) { - switch { - case resource.ReferenceOrIDMatch(api3Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "tcp": - se := resourcetest.MustDecode[*pbcatalog.ServiceEndpoints](suite.T(), api3ServiceEndpoints) - details.ServiceEndpointsId = se.Resource.Id - details.ServiceEndpoints = se.Data - details.IdentityRefs = []*pbresource.Reference{{ - Name: "api-3-identity", - Tenancy: suite.api1Service.Id.Tenancy, + Tenancy: suite.api2Service.Id.Tenancy, }} } }), - VirtualIPs: []string{"192.1.1.1"}, }, } - f := Fetcher{ - client: suite.client, - } + actualDestinations, err := f.FetchExplicitDestinationsData(suite.ctx, suite.webProxy.Id) + require.NoError(t, err) - actualDestinations, err := f.FetchImplicitDestinationsData(context.Background(), suite.webProxy.Id, existingDestinations) - require.NoError(suite.T(), err) - - prototest.AssertElementsMatch(suite.T(), existingDestinations, actualDestinations) + // Check that we've computed expanded destinations correctly. + prototest.AssertElementsMatch(t, expectedDestinations, actualDestinations) }) } -func TestDataFetcher(t *testing.T) { - suite.Run(t, new(dataFetcherSuite)) -} +func (suite *dataFetcherSuite) TestFetcher_FetchImplicitDestinationsData() { + // Create a few other services to be implicit upstreams. + api3Service := resourcetest.Resource(pbcatalog.ServiceType, "api-3"). + WithData(suite.T(), &pbcatalog.Service{ + VirtualIps: []string{"192.1.1.1"}, + Ports: []*pbcatalog.ServicePort{ + {TargetPort: "tcp", VirtualPort: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, + {TargetPort: "mesh", VirtualPort: 20000, Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, + }, + }). + Write(suite.T(), suite.client) -func (suite *dataFetcherSuite) appendTenancyInfo(tenancy *pbresource.Tenancy) string { - return fmt.Sprintf("%s_Namespace_%s_Partition", tenancy.Namespace, tenancy.Partition) -} + api3ServiceEndpointsData := &pbcatalog.ServiceEndpoints{ + Endpoints: []*pbcatalog.Endpoint{ + { + TargetRef: &pbresource.ID{ + Name: "api-3-abc", + Tenancy: api3Service.Id.Tenancy, + Type: pbcatalog.WorkloadType, + }, + Addresses: []*pbcatalog.WorkloadAddress{{Host: "10.0.0.1"}}, + Ports: map[string]*pbcatalog.WorkloadPort{ + "tcp": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_TCP}, + "mesh": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_MESH}, + }, + Identity: "api-3-identity", + }, + }, + } + api3ServiceEndpoints := resourcetest.Resource(pbcatalog.ServiceEndpointsType, "api-3"). + WithData(suite.T(), api3ServiceEndpointsData). + Write(suite.T(), suite.client) -func (suite *dataFetcherSuite) cleanUpNodes() { - suite.resourceClient.MustDelete(suite.T(), suite.api1Service.Id) - suite.resourceClient.MustDelete(suite.T(), suite.api1ServiceEndpoints.Id) - suite.resourceClient.MustDelete(suite.T(), suite.api2Service.Id) - suite.resourceClient.MustDelete(suite.T(), suite.api2ServiceEndpoints.Id) - suite.resourceClient.MustDelete(suite.T(), suite.webProxy.Id) - suite.resourceClient.MustDelete(suite.T(), suite.webWorkload.Id) -} + // Write a default ComputedRoutes for api1, api2, and api3. + var ( + api1ComputedRoutesID = resource.ReplaceType(pbmesh.ComputedRoutesType, suite.api1Service.Id) + api2ComputedRoutesID = resource.ReplaceType(pbmesh.ComputedRoutesType, suite.api2Service.Id) + api3ComputedRoutesID = resource.ReplaceType(pbmesh.ComputedRoutesType, api3Service.Id) + ) + api1ComputedRoutes := routestest.ReconcileComputedRoutes(suite.T(), suite.client, api1ComputedRoutesID, + resourcetest.MustDecode[*pbcatalog.Service](suite.T(), suite.api1Service), + ) + require.NotNil(suite.T(), api1ComputedRoutes) + api2ComputedRoutes := routestest.ReconcileComputedRoutes(suite.T(), suite.client, api2ComputedRoutesID, + resourcetest.MustDecode[*pbcatalog.Service](suite.T(), suite.api2Service), + ) + require.NotNil(suite.T(), api2ComputedRoutes) + api3ComputedRoutes := routestest.ReconcileComputedRoutes(suite.T(), suite.client, api3ComputedRoutesID, + resourcetest.MustDecode[*pbcatalog.Service](suite.T(), api3Service), + ) + require.NotNil(suite.T(), api3ComputedRoutes) + + existingDestinations := []*intermediate.Destination{ + { + Explicit: suite.webComputedDestinationsData.Destinations[0], + Service: resourcetest.MustDecode[*pbcatalog.Service](suite.T(), suite.api1Service), + ComputedPortRoutes: routestest.MutateTargets(suite.T(), api1ComputedRoutes.Data, "tcp", func(t *testing.T, details *pbmesh.BackendTargetDetails) { + switch { + case resource.ReferenceOrIDMatch(suite.api1Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "tcp": + se := resourcetest.MustDecode[*pbcatalog.ServiceEndpoints](suite.T(), suite.api1ServiceEndpoints) + details.ServiceEndpointsId = se.Resource.Id + details.ServiceEndpoints = se.Data + details.IdentityRefs = []*pbresource.Reference{{ + Name: "api-1-identity", + Tenancy: suite.api1Service.Id.Tenancy, + }} + } + }), + }, + { + Explicit: suite.webComputedDestinationsData.Destinations[1], + Service: resourcetest.MustDecode[*pbcatalog.Service](suite.T(), suite.api2Service), + ComputedPortRoutes: routestest.MutateTargets(suite.T(), api2ComputedRoutes.Data, "tcp1", func(t *testing.T, details *pbmesh.BackendTargetDetails) { + switch { + case resource.ReferenceOrIDMatch(suite.api2Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "tcp1": + se := resourcetest.MustDecode[*pbcatalog.ServiceEndpoints](suite.T(), suite.api2ServiceEndpoints) + details.ServiceEndpointsId = se.Resource.Id + details.ServiceEndpoints = se.Data + details.IdentityRefs = []*pbresource.Reference{{ + Name: "api-2-identity", + Tenancy: suite.api1Service.Id.Tenancy, + }} + } + }), + }, + { + Explicit: suite.webComputedDestinationsData.Destinations[2], + Service: resourcetest.MustDecode[*pbcatalog.Service](suite.T(), suite.api2Service), + ComputedPortRoutes: routestest.MutateTargets(suite.T(), api2ComputedRoutes.Data, "tcp2", func(t *testing.T, details *pbmesh.BackendTargetDetails) { + switch { + case resource.ReferenceOrIDMatch(suite.api2Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "tcp2": + se := resourcetest.MustDecode[*pbcatalog.ServiceEndpoints](suite.T(), suite.api2ServiceEndpoints) + details.ServiceEndpointsId = se.Resource.Id + details.ServiceEndpoints = se.Data + details.IdentityRefs = []*pbresource.Reference{{ + Name: "api-2-identity", + Tenancy: suite.api1Service.Id.Tenancy, + }} + } + }), + }, + { + // implicit + Service: resourcetest.MustDecode[*pbcatalog.Service](suite.T(), api3Service), + ComputedPortRoutes: routestest.MutateTargets(suite.T(), api3ComputedRoutes.Data, "tcp", func(t *testing.T, details *pbmesh.BackendTargetDetails) { + switch { + case resource.ReferenceOrIDMatch(api3Service.Id, details.BackendRef.Ref) && details.BackendRef.Port == "tcp": + se := resourcetest.MustDecode[*pbcatalog.ServiceEndpoints](suite.T(), api3ServiceEndpoints) + details.ServiceEndpointsId = se.Resource.Id + details.ServiceEndpoints = se.Data + details.IdentityRefs = []*pbresource.Reference{{ + Name: "api-3-identity", + Tenancy: suite.api1Service.Id.Tenancy, + }} + } + }), + VirtualIPs: []string{"192.1.1.1"}, + }, + } -func (suite *dataFetcherSuite) runTestCaseWithTenancies(t func(*pbresource.Tenancy)) { - for _, tenancy := range suite.tenancies { - suite.Run(suite.appendTenancyInfo(tenancy), func() { - suite.setupWithTenancy(tenancy) - suite.T().Cleanup(func() { - suite.cleanUpNodes() - }) - t(tenancy) - }) + f := Fetcher{ + client: suite.client, } + + actualDestinations, err := f.FetchImplicitDestinationsData(context.Background(), suite.webProxy.Id, existingDestinations) + require.NoError(suite.T(), err) + + prototest.AssertElementsMatch(suite.T(), existingDestinations, actualDestinations) +} + +func TestDataFetcher(t *testing.T) { + suite.Run(t, new(dataFetcherSuite)) } diff --git a/internal/mesh/internal/controllers/xds/controller_test.go b/internal/mesh/internal/controllers/xds/controller_test.go index f0aca598f023a..e1dd0ebb61719 100644 --- a/internal/mesh/internal/controllers/xds/controller_test.go +++ b/internal/mesh/internal/controllers/xds/controller_test.go @@ -11,6 +11,7 @@ import ( "strings" "testing" + "github.com/hashicorp/consul/internal/testing/golden" "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" "google.golang.org/protobuf/encoding/protojson" @@ -25,7 +26,6 @@ import ( "github.com/hashicorp/consul/internal/resource" "github.com/hashicorp/consul/internal/resource/mappers/bimapper" "github.com/hashicorp/consul/internal/resource/resourcetest" - "github.com/hashicorp/consul/internal/testing/golden" pbcatalog "github.com/hashicorp/consul/proto-public/pbcatalog/v2beta1" pbmesh "github.com/hashicorp/consul/proto-public/pbmesh/v2beta1" "github.com/hashicorp/consul/proto-public/pbmesh/v2beta1/pbproxystate" @@ -51,7 +51,6 @@ type xdsControllerTestSuite struct { leafCancels *LeafCancels leafCertEvents chan controller.Event signer *leafcert.TestSigner - tenancies []*pbresource.Tenancy fooProxyStateTemplate *pbresource.Resource barProxyStateTemplate *pbresource.Resource @@ -70,7 +69,7 @@ type xdsControllerTestSuite struct { func (suite *xdsControllerTestSuite) SetupTest() { suite.ctx = testutil.TestContext(suite.T()) - resourceClient := svctest.RunResourceServiceWithTenancies(suite.T(), types.Register, catalog.RegisterTypes) + resourceClient := svctest.RunResourceService(suite.T(), types.Register, catalog.RegisterTypes) suite.runtime = controller.Runtime{Client: resourceClient, Logger: testutil.Logger(suite.T())} suite.client = resourcetest.NewClient(resourceClient) suite.fetcher = mockFetcher @@ -100,8 +99,6 @@ func (suite *xdsControllerTestSuite) SetupTest() { leafCertEvents: suite.leafCertEvents, datacenter: "dc1", } - - suite.tenancies = resourcetest.TestTenancies() } func mockFetcher() (*pbproxystate.TrustBundle, error) { @@ -115,233 +112,202 @@ func mockFetcher() (*pbproxystate.TrustBundle, error) { // This test ensures when a ProxyState is deleted, it is no longer tracked in the mappers. func (suite *xdsControllerTestSuite) TestReconcile_NoProxyStateTemplate() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - // Track the id of a non-existent ProxyStateTemplate. - proxyStateTemplateId := resourcetest.Resource(pbmesh.ProxyStateTemplateType, "not-found").WithTenancy(tenancy).ID() - - suite.T().Cleanup(suite.deleteResourceFunc(proxyStateTemplateId)) - - suite.mapper.TrackItem(proxyStateTemplateId, []resource.ReferenceOrID{}) - suite.leafMapper.TrackItem(proxyStateTemplateId, []resource.ReferenceOrID{}) - require.False(suite.T(), suite.mapper.IsEmpty()) - require.False(suite.T(), suite.leafMapper.IsEmpty()) - - // Run the reconcile, and since no ProxyStateTemplate is stored, this simulates a deletion. - err := suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ - ID: proxyStateTemplateId, - }) - require.NoError(suite.T(), err) - - // Assert that nothing is tracked in the endpoints mapper. - require.True(suite.T(), suite.mapper.IsEmpty()) - require.True(suite.T(), suite.leafMapper.IsEmpty()) + // Track the id of a non-existent ProxyStateTemplate. + proxyStateTemplateId := resourcetest.Resource(pbmesh.ProxyStateTemplateType, "not-found").ID() + suite.mapper.TrackItem(proxyStateTemplateId, []resource.ReferenceOrID{}) + suite.leafMapper.TrackItem(proxyStateTemplateId, []resource.ReferenceOrID{}) + require.False(suite.T(), suite.mapper.IsEmpty()) + require.False(suite.T(), suite.leafMapper.IsEmpty()) + + // Run the reconcile, and since no ProxyStateTemplate is stored, this simulates a deletion. + err := suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ + ID: proxyStateTemplateId, }) + require.NoError(suite.T(), err) + + // Assert that nothing is tracked in the endpoints mapper. + require.True(suite.T(), suite.mapper.IsEmpty()) + require.True(suite.T(), suite.leafMapper.IsEmpty()) } // This test ensures if the controller was previously tracking a ProxyStateTemplate, and now that proxy has // disconnected from this server, it's ignored and removed from the mapper. func (suite *xdsControllerTestSuite) TestReconcile_RemoveTrackingProxiesNotConnectedToServer() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - // Store the initial ProxyStateTemplate and track it in the mapper. - proxyStateTemplate := resourcetest.Resource(pbmesh.ProxyStateTemplateType, "test"). - WithData(suite.T(), &pbmesh.ProxyStateTemplate{}). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - - suite.T().Cleanup(suite.deleteResourceFunc(proxyStateTemplate.Id)) - - suite.mapper.TrackItem(proxyStateTemplate.Id, []resource.ReferenceOrID{}) + // Store the initial ProxyStateTemplate and track it in the mapper. + proxyStateTemplate := resourcetest.Resource(pbmesh.ProxyStateTemplateType, "test"). + WithData(suite.T(), &pbmesh.ProxyStateTemplate{}). + Write(suite.T(), suite.client) - // Simulate the proxy disconnecting from this server. The resource still exists, but this proxy might be connected - // to a different server now, so we no longer need to track it. - suite.updater.notConnected = true + suite.mapper.TrackItem(proxyStateTemplate.Id, []resource.ReferenceOrID{}) - // Run the reconcile. - err := suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ - ID: proxyStateTemplate.Id, - }) - require.NoError(suite.T(), err) + // Simulate the proxy disconnecting from this server. The resource still exists, but this proxy might be connected + // to a different server now, so we no longer need to track it. + suite.updater.notConnected = true - // Assert that nothing is tracked in the mapper. - require.True(suite.T(), suite.mapper.IsEmpty()) + // Run the reconcile. + err := suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ + ID: proxyStateTemplate.Id, }) + require.NoError(suite.T(), err) + + // Assert that nothing is tracked in the mapper. + require.True(suite.T(), suite.mapper.IsEmpty()) } // This test sets up the updater to return an error when calling PushChange, and ensures the status is set // correctly. func (suite *xdsControllerTestSuite) TestReconcile_PushChangeError() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - // Have the mock simulate an error from the PushChange call. - suite.updater.pushChangeError = true + // Have the mock simulate an error from the PushChange call. + suite.updater.pushChangeError = true - // Setup a happy path scenario. - suite.setupFooProxyStateTemplateWithReferences(tenancy) + // Setup a happy path scenario. + suite.setupFooProxyStateTemplateWithReferences() - // Run the reconcile. - err := suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ - ID: suite.fooProxyStateTemplate.Id, - }) - require.Error(suite.T(), err) - - // Assert on the status reflecting endpoint not found. - suite.client.RequireStatusCondition(suite.T(), suite.fooProxyStateTemplate.Id, ControllerName, status.ConditionRejectedPushChangeFailed(status.KeyFromID(suite.fooProxyStateTemplate.Id))) + // Run the reconcile. + err := suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ + ID: suite.fooProxyStateTemplate.Id, }) + require.Error(suite.T(), err) + + // Assert on the status reflecting endpoint not found. + suite.client.RequireStatusCondition(suite.T(), suite.fooProxyStateTemplate.Id, ControllerName, status.ConditionRejectedPushChangeFailed(status.KeyFromID(suite.fooProxyStateTemplate.Id))) } // This test sets up a ProxyStateTemplate that references a ServiceEndpoints that doesn't exist, and ensures the // status is correct. func (suite *xdsControllerTestSuite) TestReconcile_MissingEndpoint() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - // Set fooProxyStateTemplate with a reference to fooEndpoints, without storing fooEndpoints so the controller should - // notice it's missing. - fooEndpointsId := resourcetest.Resource(pbcatalog.ServiceEndpointsType, "foo-service").WithTenancy(tenancy).ID() - fooRequiredEndpoints := make(map[string]*pbproxystate.EndpointRef) - fooRequiredEndpoints["test-cluster-1"] = &pbproxystate.EndpointRef{ - Id: fooEndpointsId, - Port: "mesh", - } - - fooProxyStateTemplate := resourcetest.Resource(pbmesh.ProxyStateTemplateType, "foo-pst"). - WithData(suite.T(), &pbmesh.ProxyStateTemplate{ - RequiredEndpoints: fooRequiredEndpoints, - ProxyState: &pbmesh.ProxyState{}, - }). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - - suite.T().Cleanup(suite.deleteResourceFunc(fooProxyStateTemplate.Id)) + // Set fooProxyStateTemplate with a reference to fooEndpoints, without storing fooEndpoints so the controller should + // notice it's missing. + fooEndpointsId := resourcetest.Resource(pbcatalog.ServiceEndpointsType, "foo-service").WithTenancy(resource.DefaultNamespacedTenancy()).ID() + fooRequiredEndpoints := make(map[string]*pbproxystate.EndpointRef) + fooRequiredEndpoints["test-cluster-1"] = &pbproxystate.EndpointRef{ + Id: fooEndpointsId, + Port: "mesh", + } - retry.Run(suite.T(), func(r *retry.R) { - suite.client.RequireResourceExists(r, fooProxyStateTemplate.Id) - }) + fooProxyStateTemplate := resourcetest.Resource(pbmesh.ProxyStateTemplateType, "foo-pst"). + WithData(suite.T(), &pbmesh.ProxyStateTemplate{ + RequiredEndpoints: fooRequiredEndpoints, + ProxyState: &pbmesh.ProxyState{}, + }). + Write(suite.T(), suite.client) - // Run the reconcile. - err := suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ - ID: fooProxyStateTemplate.Id, - }) - require.Error(suite.T(), err) + retry.Run(suite.T(), func(r *retry.R) { + suite.client.RequireResourceExists(r, fooProxyStateTemplate.Id) + }) - // Assert on the status reflecting endpoint not found. - suite.client.RequireStatusCondition(suite.T(), fooProxyStateTemplate.Id, ControllerName, status.ConditionRejectedErrorReadingEndpoints(status.KeyFromID(fooEndpointsId), "rpc error: code = NotFound desc = resource not found")) + // Run the reconcile. + err := suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ + ID: fooProxyStateTemplate.Id, }) + require.Error(suite.T(), err) + + // Assert on the status reflecting endpoint not found. + suite.client.RequireStatusCondition(suite.T(), fooProxyStateTemplate.Id, ControllerName, status.ConditionRejectedErrorReadingEndpoints(status.KeyFromID(fooEndpointsId), "rpc error: code = NotFound desc = resource not found")) } // This test sets up a ProxyStateTemplate that references a ServiceEndpoints that can't be read correctly, and // checks the status is correct. func (suite *xdsControllerTestSuite) TestReconcile_ReadEndpointError() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - badID := &pbresource.ID{ - Type: &pbresource.Type{ - Group: "not", - Kind: "found", - GroupVersion: "vfake", - }, - Tenancy: tenancy, - } - fooRequiredEndpoints := make(map[string]*pbproxystate.EndpointRef) - fooRequiredEndpoints["test-cluster-1"] = &pbproxystate.EndpointRef{ - Id: badID, - Port: "mesh", - } - - fooProxyStateTemplate := resourcetest.Resource(pbmesh.ProxyStateTemplateType, "foo-pst"). - WithData(suite.T(), &pbmesh.ProxyStateTemplate{ - RequiredEndpoints: fooRequiredEndpoints, - ProxyState: &pbmesh.ProxyState{}, - }). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - - suite.T().Cleanup(suite.deleteResourceFunc(fooProxyStateTemplate.Id)) + badID := &pbresource.ID{ + Type: &pbresource.Type{ + Group: "not", + Kind: "found", + GroupVersion: "vfake", + }, + Tenancy: &pbresource.Tenancy{Namespace: "default", Partition: "default", PeerName: "local"}, + } + fooRequiredEndpoints := make(map[string]*pbproxystate.EndpointRef) + fooRequiredEndpoints["test-cluster-1"] = &pbproxystate.EndpointRef{ + Id: badID, + Port: "mesh", + } - retry.Run(suite.T(), func(r *retry.R) { - suite.client.RequireResourceExists(r, fooProxyStateTemplate.Id) - }) + fooProxyStateTemplate := resourcetest.Resource(pbmesh.ProxyStateTemplateType, "foo-pst"). + WithData(suite.T(), &pbmesh.ProxyStateTemplate{ + RequiredEndpoints: fooRequiredEndpoints, + ProxyState: &pbmesh.ProxyState{}, + }). + Write(suite.T(), suite.client) - // Run the reconcile. - err := suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ - ID: fooProxyStateTemplate.Id, - }) - require.Error(suite.T(), err) + retry.Run(suite.T(), func(r *retry.R) { + suite.client.RequireResourceExists(r, fooProxyStateTemplate.Id) + }) - // Assert on the status reflecting endpoint couldn't be read. - suite.client.RequireStatusCondition(suite.T(), fooProxyStateTemplate.Id, ControllerName, status.ConditionRejectedErrorReadingEndpoints( - status.KeyFromID(badID), - "rpc error: code = InvalidArgument desc = id.name invalid: a resource name must consist of lower case alphanumeric characters or '-', must start and end with an alphanumeric character and be less than 64 characters, got: \"\"", - )) + // Run the reconcile. + err := suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ + ID: fooProxyStateTemplate.Id, }) + require.Error(suite.T(), err) + + // Assert on the status reflecting endpoint couldn't be read. + suite.client.RequireStatusCondition(suite.T(), fooProxyStateTemplate.Id, ControllerName, status.ConditionRejectedErrorReadingEndpoints(status.KeyFromID(badID), "rpc error: code = InvalidArgument desc = id.name is required")) } // This test is a happy path creation test to make sure pbproxystate.Endpoints are created in the computed // pbmesh.ProxyState from the RequiredEndpoints references. More specific translations between endpoint references // and pbproxystate.Endpoints are unit tested in endpoint_builder.go. func (suite *xdsControllerTestSuite) TestReconcile_ProxyStateTemplateComputesEndpoints() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - // Set up fooEndpoints and fooProxyStateTemplate with a reference to fooEndpoints and store them in the state store. - // This setup saves expected values in the suite so it can be asserted against later. - suite.setupFooProxyStateTemplateWithReferences(tenancy) - - // Run the reconcile. - err := suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ - ID: suite.fooProxyStateTemplate.Id, - }) - require.NoError(suite.T(), err) - - // Assert on the status. - suite.client.RequireStatusCondition(suite.T(), suite.fooProxyStateTemplate.Id, ControllerName, status.ConditionAccepted()) + // Set up fooEndpoints and fooProxyStateTemplate with a reference to fooEndpoints and store them in the state store. + // This setup saves expected values in the suite so it can be asserted against later. + suite.setupFooProxyStateTemplateWithReferences() - // Assert that the endpoints computed in the controller matches the expected endpoints. - actualEndpoints := suite.updater.GetEndpoints(suite.fooProxyStateTemplate.Id.Name) - prototest.AssertDeepEqual(suite.T(), suite.expectedFooProxyStateEndpoints, actualEndpoints) + // Run the reconcile. + err := suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ + ID: suite.fooProxyStateTemplate.Id, }) + require.NoError(suite.T(), err) + + // Assert on the status. + suite.client.RequireStatusCondition(suite.T(), suite.fooProxyStateTemplate.Id, ControllerName, status.ConditionAccepted()) + + // Assert that the endpoints computed in the controller matches the expected endpoints. + actualEndpoints := suite.updater.GetEndpoints(suite.fooProxyStateTemplate.Id.Name) + prototest.AssertDeepEqual(suite.T(), suite.expectedFooProxyStateEndpoints, actualEndpoints) } func (suite *xdsControllerTestSuite) TestReconcile_ProxyStateTemplateComputesLeafCerts() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - // Set up fooEndpoints and fooProxyStateTemplate with a reference to fooEndpoints and store them in the state store. - // This setup saves expected values in the suite so it can be asserted against later. - suite.setupFooProxyStateTemplateWithReferences(tenancy) - - // Run the reconcile. - err := suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ - ID: suite.fooProxyStateTemplate.Id, - }) - require.NoError(suite.T(), err) + // Set up fooEndpoints and fooProxyStateTemplate with a reference to fooEndpoints and store them in the state store. + // This setup saves expected values in the suite so it can be asserted against later. + suite.setupFooProxyStateTemplateWithReferences() - // Assert on the status. - suite.client.RequireStatusCondition(suite.T(), suite.fooProxyStateTemplate.Id, ControllerName, status.ConditionAccepted()) + // Run the reconcile. + err := suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ + ID: suite.fooProxyStateTemplate.Id, + }) + require.NoError(suite.T(), err) - // Assert that the actual leaf certs computed are match the expected leaf cert spiffes. - actualLeafs := suite.updater.GetLeafs(suite.fooProxyStateTemplate.Id.Name) + // Assert on the status. + suite.client.RequireStatusCondition(suite.T(), suite.fooProxyStateTemplate.Id, ControllerName, status.ConditionAccepted()) - for k, l := range actualLeafs { - pemDecode, _ := pem.Decode([]byte(l.Cert)) - cert, err := x509.ParseCertificate(pemDecode.Bytes) - require.NoError(suite.T(), err) - require.Equal(suite.T(), cert.URIs[0].String(), suite.expectedFooProxyStateSpiffes[k]) - } - }) + // Assert that the actual leaf certs computed are match the expected leaf cert spiffes. + actualLeafs := suite.updater.GetLeafs(suite.fooProxyStateTemplate.Id.Name) + + for k, l := range actualLeafs { + pem, _ := pem.Decode([]byte(l.Cert)) + cert, err := x509.ParseCertificate(pem.Bytes) + require.NoError(suite.T(), err) + require.Equal(suite.T(), cert.URIs[0].String(), suite.expectedFooProxyStateSpiffes[k]) + } } // This test is a happy path creation test to make sure pbproxystate.Template.TrustBundles are created in the computed // pbmesh.ProxyState from the TrustBundleFetcher. func (suite *xdsControllerTestSuite) TestReconcile_ProxyStateTemplateSetsTrustBundles() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - suite.setupFooProxyStateTemplateWithReferences(tenancy) + suite.setupFooProxyStateTemplateWithReferences() - // Run the reconcile. - err := suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ - ID: suite.fooProxyStateTemplate.Id, - }) - require.NoError(suite.T(), err) + // Run the reconcile. + err := suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ + ID: suite.fooProxyStateTemplate.Id, + }) + require.NoError(suite.T(), err) - // Assert on the status. - suite.client.RequireStatusCondition(suite.T(), suite.fooProxyStateTemplate.Id, ControllerName, status.ConditionAccepted()) + // Assert on the status. + suite.client.RequireStatusCondition(suite.T(), suite.fooProxyStateTemplate.Id, ControllerName, status.ConditionAccepted()) - // Assert that the endpoints computed in the controller matches the expected endpoints. - actualTrustBundle := suite.updater.GetTrustBundle(suite.fooProxyStateTemplate.Id.Name) - prototest.AssertDeepEqual(suite.T(), suite.expectedTrustBundle, actualTrustBundle) - }) + // Assert that the endpoints computed in the controller matches the expected endpoints. + actualTrustBundle := suite.updater.GetTrustBundle(suite.fooProxyStateTemplate.Id.Name) + prototest.AssertDeepEqual(suite.T(), suite.expectedTrustBundle, actualTrustBundle) } // This test is a happy path creation test that calls reconcile multiple times with a more complex setup. This @@ -349,368 +315,342 @@ func (suite *xdsControllerTestSuite) TestReconcile_ProxyStateTemplateSetsTrustBu // stored in the state store. So this test ensures that between multiple reconciles the correct ProxyStates are // computed for each ProxyStateTemplate. func (suite *xdsControllerTestSuite) TestReconcile_MultipleProxyStateTemplatesComputesMultipleEndpoints() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - // Set up fooProxyStateTemplate and barProxyStateTemplate and their associated resources and store them. Resources - // and expected results are stored in the suite to assert against. - suite.setupFooBarProxyStateTemplateAndEndpoints(tenancy) - - // Reconcile the fooProxyStateTemplate. - err := suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ - ID: suite.fooProxyStateTemplate.Id, - }) - require.NoError(suite.T(), err) + // Set up fooProxyStateTemplate and barProxyStateTemplate and their associated resources and store them. Resources + // and expected results are stored in the suite to assert against. + suite.setupFooBarProxyStateTemplateAndEndpoints() - // Assert on the status. - suite.client.RequireStatusCondition(suite.T(), suite.fooProxyStateTemplate.Id, ControllerName, status.ConditionAccepted()) + // Reconcile the fooProxyStateTemplate. + err := suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ + ID: suite.fooProxyStateTemplate.Id, + }) + require.NoError(suite.T(), err) - // Assert that the endpoints computed in the controller matches the expected endpoints. - actualEndpoints := suite.updater.GetEndpoints(suite.fooProxyStateTemplate.Id.Name) - prototest.AssertDeepEqual(suite.T(), suite.expectedFooProxyStateEndpoints, actualEndpoints) + // Assert on the status. + suite.client.RequireStatusCondition(suite.T(), suite.fooProxyStateTemplate.Id, ControllerName, status.ConditionAccepted()) - // Reconcile the barProxyStateTemplate. - err = suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ - ID: suite.barProxyStateTemplate.Id, - }) - require.NoError(suite.T(), err) + // Assert that the endpoints computed in the controller matches the expected endpoints. + actualEndpoints := suite.updater.GetEndpoints(suite.fooProxyStateTemplate.Id.Name) + prototest.AssertDeepEqual(suite.T(), suite.expectedFooProxyStateEndpoints, actualEndpoints) - // Assert on the status. - suite.client.RequireStatusCondition(suite.T(), suite.barProxyStateTemplate.Id, ControllerName, status.ConditionAccepted()) - - // Assert that the endpoints computed in the controller matches the expected endpoints. - actualBarEndpoints := suite.updater.GetEndpoints(suite.barProxyStateTemplate.Id.Name) - prototest.AssertDeepEqual(suite.T(), suite.expectedBarProxyStateEndpoints, actualBarEndpoints) + // Reconcile the barProxyStateTemplate. + err = suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ + ID: suite.barProxyStateTemplate.Id, }) + require.NoError(suite.T(), err) + + // Assert on the status. + suite.client.RequireStatusCondition(suite.T(), suite.barProxyStateTemplate.Id, ControllerName, status.ConditionAccepted()) + + // Assert that the endpoints computed in the controller matches the expected endpoints. + actualBarEndpoints := suite.updater.GetEndpoints(suite.barProxyStateTemplate.Id.Name) + prototest.AssertDeepEqual(suite.T(), suite.expectedBarProxyStateEndpoints, actualBarEndpoints) } // Sets up a full controller, and tests that reconciles are getting triggered for the events it should. func (suite *xdsControllerTestSuite) TestController_ComputeAddUpdateEndpointReferences() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - // Run the controller manager. - mgr := controller.NewManager(suite.client, suite.runtime.Logger) - mgr.Register(Controller(suite.mapper, suite.updater, suite.fetcher, suite.leafCertManager, suite.leafMapper, suite.leafCancels, "dc1")) - mgr.SetRaftLeader(true) - go mgr.Run(suite.ctx) - - suite.setupFooProxyStateTemplateWithReferences(tenancy) - - // Assert that the expected ProxyState matches the actual ProxyState that PushChange was called with. This needs to - // be in a retry block unlike the Reconcile tests because the controller triggers asynchronously. - retry.Run(suite.T(), func(r *retry.R) { - actualEndpoints := suite.updater.GetEndpoints(suite.fooProxyStateTemplate.Id.Name) - // Assert on the status. - suite.client.RequireStatusCondition(r, suite.fooProxyStateTemplate.Id, ControllerName, status.ConditionAccepted()) - // Assert that the endpoints computed in the controller matches the expected endpoints. - prototest.AssertDeepEqual(r, suite.expectedFooProxyStateEndpoints, actualEndpoints) - }) + // Run the controller manager. + mgr := controller.NewManager(suite.client, suite.runtime.Logger) + mgr.Register(Controller(suite.mapper, suite.updater, suite.fetcher, suite.leafCertManager, suite.leafMapper, suite.leafCancels, "dc1")) + mgr.SetRaftLeader(true) + go mgr.Run(suite.ctx) - // Now, update the endpoint to be unhealthy. This will ensure the controller is getting triggered on changes to this - // endpoint that it should be tracking, even when the ProxyStateTemplate does not change. - svc := resourcetest.Resource(pbcatalog.ServiceEndpointsType, "foo-service"). - WithData(suite.T(), &pbcatalog.ServiceEndpoints{Endpoints: []*pbcatalog.Endpoint{ - { - Ports: map[string]*pbcatalog.WorkloadPort{ - "mesh": { - Port: 20000, - Protocol: pbcatalog.Protocol_PROTOCOL_MESH, - }, + suite.setupFooProxyStateTemplateWithReferences() + + // Assert that the expected ProxyState matches the actual ProxyState that PushChange was called with. This needs to + // be in a retry block unlike the Reconcile tests because the controller triggers asynchronously. + retry.Run(suite.T(), func(r *retry.R) { + actualEndpoints := suite.updater.GetEndpoints(suite.fooProxyStateTemplate.Id.Name) + // Assert on the status. + suite.client.RequireStatusCondition(r, suite.fooProxyStateTemplate.Id, ControllerName, status.ConditionAccepted()) + // Assert that the endpoints computed in the controller matches the expected endpoints. + prototest.AssertDeepEqual(r, suite.expectedFooProxyStateEndpoints, actualEndpoints) + }) + + // Now, update the endpoint to be unhealthy. This will ensure the controller is getting triggered on changes to this + // endpoint that it should be tracking, even when the ProxyStateTemplate does not change. + resourcetest.Resource(pbcatalog.ServiceEndpointsType, "foo-service"). + WithData(suite.T(), &pbcatalog.ServiceEndpoints{Endpoints: []*pbcatalog.Endpoint{ + { + Ports: map[string]*pbcatalog.WorkloadPort{ + "mesh": { + Port: 20000, + Protocol: pbcatalog.Protocol_PROTOCOL_MESH, }, - Addresses: []*pbcatalog.WorkloadAddress{ - { - Host: "10.1.1.1", - Ports: []string{"mesh"}, - }, - { - Host: "10.2.2.2", - Ports: []string{"mesh"}, - }, + }, + Addresses: []*pbcatalog.WorkloadAddress{ + { + Host: "10.1.1.1", + Ports: []string{"mesh"}, + }, + { + Host: "10.2.2.2", + Ports: []string{"mesh"}, }, - HealthStatus: pbcatalog.Health_HEALTH_CRITICAL, }, - }}). - WithOwner(suite.fooService.Id). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - - suite.T().Cleanup(suite.deleteResourceFunc(svc.Id)) - - // Wait for the endpoint to be written. - retry.Run(suite.T(), func(r *retry.R) { - suite.client.RequireVersionChanged(suite.T(), suite.fooEndpoints.Id, suite.fooEndpoints.Version) - }) + HealthStatus: pbcatalog.Health_HEALTH_CRITICAL, + }, + }}). + WithOwner(suite.fooService.Id). + Write(suite.T(), suite.client) - // Update the expected endpoints to also have unhealthy status. - suite.expectedFooProxyStateEndpoints["test-cluster-1"].Endpoints[0].HealthStatus = pbproxystate.HealthStatus_HEALTH_STATUS_UNHEALTHY - suite.expectedFooProxyStateEndpoints["test-cluster-1"].Endpoints[1].HealthStatus = pbproxystate.HealthStatus_HEALTH_STATUS_UNHEALTHY + // Wait for the endpoint to be written. + retry.Run(suite.T(), func(r *retry.R) { + suite.client.RequireVersionChanged(suite.T(), suite.fooEndpoints.Id, suite.fooEndpoints.Version) + }) - retry.Run(suite.T(), func(r *retry.R) { - actualEndpoints := suite.updater.GetEndpoints(suite.fooProxyStateTemplate.Id.Name) - // Assert on the status. - suite.client.RequireStatusCondition(suite.T(), suite.fooProxyStateTemplate.Id, ControllerName, status.ConditionAccepted()) - // Assert that the endpoints computed in the controller matches the expected endpoints. - prototest.AssertDeepEqual(r, suite.expectedFooProxyStateEndpoints, actualEndpoints) - }) + // Update the expected endpoints to also have unhealthy status. + suite.expectedFooProxyStateEndpoints["test-cluster-1"].Endpoints[0].HealthStatus = pbproxystate.HealthStatus_HEALTH_STATUS_UNHEALTHY + suite.expectedFooProxyStateEndpoints["test-cluster-1"].Endpoints[1].HealthStatus = pbproxystate.HealthStatus_HEALTH_STATUS_UNHEALTHY - // Now add a new endpoint reference and endpoint to the fooProxyStateTemplate. This will ensure that the controller - // now tracks the newly added endpoint. - secondService := resourcetest.Resource(pbcatalog.ServiceType, "second-service"). - WithData(suite.T(), &pbcatalog.Service{}). - WithTenancy(tenancy). - Write(suite.T(), suite.client) + retry.Run(suite.T(), func(r *retry.R) { + actualEndpoints := suite.updater.GetEndpoints(suite.fooProxyStateTemplate.Id.Name) + // Assert on the status. + suite.client.RequireStatusCondition(suite.T(), suite.fooProxyStateTemplate.Id, ControllerName, status.ConditionAccepted()) + // Assert that the endpoints computed in the controller matches the expected endpoints. + prototest.AssertDeepEqual(r, suite.expectedFooProxyStateEndpoints, actualEndpoints) + }) - suite.T().Cleanup(suite.deleteResourceFunc(secondService.Id)) + // Now add a new endpoint reference and endpoint to the fooProxyStateTemplate. This will ensure that the controller + // now tracks the newly added endpoint. + secondService := resourcetest.Resource(pbcatalog.ServiceType, "second-service"). + WithData(suite.T(), &pbcatalog.Service{}). + Write(suite.T(), suite.client) - secondEndpoints := resourcetest.Resource(pbcatalog.ServiceEndpointsType, "second-service"). - WithData(suite.T(), &pbcatalog.ServiceEndpoints{Endpoints: []*pbcatalog.Endpoint{ - { - Ports: map[string]*pbcatalog.WorkloadPort{ - "mesh": { - Port: 20000, - Protocol: pbcatalog.Protocol_PROTOCOL_MESH, - }, + secondEndpoints := resourcetest.Resource(pbcatalog.ServiceEndpointsType, "second-service"). + WithData(suite.T(), &pbcatalog.ServiceEndpoints{Endpoints: []*pbcatalog.Endpoint{ + { + Ports: map[string]*pbcatalog.WorkloadPort{ + "mesh": { + Port: 20000, + Protocol: pbcatalog.Protocol_PROTOCOL_MESH, }, - Addresses: []*pbcatalog.WorkloadAddress{ - { - Host: "10.5.5.5", - Ports: []string{"mesh"}, - }, - { - Host: "10.6.6.6", - Ports: []string{"mesh"}, - }, + }, + Addresses: []*pbcatalog.WorkloadAddress{ + { + Host: "10.5.5.5", + Ports: []string{"mesh"}, + }, + { + Host: "10.6.6.6", + Ports: []string{"mesh"}, }, }, - }}). - WithOwner(secondService.Id). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - - suite.T().Cleanup(suite.deleteResourceFunc(secondEndpoints.Id)) - - // Update the endpoint references on the fooProxyStateTemplate. - suite.fooEndpointRefs["test-cluster-2"] = &pbproxystate.EndpointRef{ - Id: secondEndpoints.Id, - Port: "mesh", - } + }, + }}). + WithOwner(secondService.Id). + Write(suite.T(), suite.client) - oldVersion := suite.fooProxyStateTemplate.Version - fooProxyStateTemplate := resourcetest.Resource(pbmesh.ProxyStateTemplateType, "foo-pst"). - WithData(suite.T(), &pbmesh.ProxyStateTemplate{ - RequiredEndpoints: suite.fooEndpointRefs, - ProxyState: &pbmesh.ProxyState{}, - RequiredLeafCertificates: suite.fooLeafRefs, - }). - WithTenancy(tenancy). - Write(suite.T(), suite.client) + // Update the endpoint references on the fooProxyStateTemplate. + suite.fooEndpointRefs["test-cluster-2"] = &pbproxystate.EndpointRef{ + Id: secondEndpoints.Id, + Port: "mesh", + } - suite.T().Cleanup(suite.deleteResourceFunc(fooProxyStateTemplate.Id)) + oldVersion := suite.fooProxyStateTemplate.Version + fooProxyStateTemplate := resourcetest.Resource(pbmesh.ProxyStateTemplateType, "foo-pst"). + WithData(suite.T(), &pbmesh.ProxyStateTemplate{ + RequiredEndpoints: suite.fooEndpointRefs, + ProxyState: &pbmesh.ProxyState{}, + RequiredLeafCertificates: suite.fooLeafRefs, + }). + Write(suite.T(), suite.client) - retry.Run(suite.T(), func(r *retry.R) { - suite.client.RequireVersionChanged(r, fooProxyStateTemplate.Id, oldVersion) - }) + retry.Run(suite.T(), func(r *retry.R) { + suite.client.RequireVersionChanged(r, fooProxyStateTemplate.Id, oldVersion) + }) - // Update the expected endpoints with this new endpoints. - suite.expectedFooProxyStateEndpoints["test-cluster-2"] = &pbproxystate.Endpoints{ - Endpoints: []*pbproxystate.Endpoint{ - { - Address: &pbproxystate.Endpoint_HostPort{ - HostPort: &pbproxystate.HostPortAddress{ - Host: "10.5.5.5", - Port: 20000, - }, + // Update the expected endpoints with this new endpoints. + suite.expectedFooProxyStateEndpoints["test-cluster-2"] = &pbproxystate.Endpoints{ + Endpoints: []*pbproxystate.Endpoint{ + { + Address: &pbproxystate.Endpoint_HostPort{ + HostPort: &pbproxystate.HostPortAddress{ + Host: "10.5.5.5", + Port: 20000, }, - HealthStatus: pbproxystate.HealthStatus_HEALTH_STATUS_HEALTHY, }, - { - Address: &pbproxystate.Endpoint_HostPort{ - HostPort: &pbproxystate.HostPortAddress{ - Host: "10.6.6.6", - Port: 20000, - }, + HealthStatus: pbproxystate.HealthStatus_HEALTH_STATUS_HEALTHY, + }, + { + Address: &pbproxystate.Endpoint_HostPort{ + HostPort: &pbproxystate.HostPortAddress{ + Host: "10.6.6.6", + Port: 20000, }, - HealthStatus: pbproxystate.HealthStatus_HEALTH_STATUS_HEALTHY, }, + HealthStatus: pbproxystate.HealthStatus_HEALTH_STATUS_HEALTHY, }, - } - - retry.Run(suite.T(), func(r *retry.R) { - actualEndpoints := suite.updater.GetEndpoints(suite.fooProxyStateTemplate.Id.Name) - // Assert on the status. - suite.client.RequireStatusCondition(suite.T(), suite.fooProxyStateTemplate.Id, ControllerName, status.ConditionAccepted()) - // Assert that the endpoints computed in the controller matches the expected endpoints. - prototest.AssertDeepEqual(r, suite.expectedFooProxyStateEndpoints, actualEndpoints) - }) + }, + } + retry.Run(suite.T(), func(r *retry.R) { + actualEndpoints := suite.updater.GetEndpoints(suite.fooProxyStateTemplate.Id.Name) + // Assert on the status. + suite.client.RequireStatusCondition(suite.T(), suite.fooProxyStateTemplate.Id, ControllerName, status.ConditionAccepted()) + // Assert that the endpoints computed in the controller matches the expected endpoints. + prototest.AssertDeepEqual(r, suite.expectedFooProxyStateEndpoints, actualEndpoints) }) + } // Sets up a full controller, and tests that reconciles are getting triggered for the leaf cert events it should. // This test ensures when a CA is updated, the controller is triggered to update the leaf cert when it changes. func (suite *xdsControllerTestSuite) TestController_ComputeAddUpdateDeleteLeafReferences() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - // Run the controller manager. - mgr := controller.NewManager(suite.client, suite.runtime.Logger) - mgr.Register(Controller(suite.mapper, suite.updater, suite.fetcher, suite.leafCertManager, suite.leafMapper, suite.leafCancels, "dc1")) - mgr.SetRaftLeader(true) - go mgr.Run(suite.ctx) - - suite.setupFooProxyStateTemplateWithReferences(tenancy) - leafCertRef := suite.fooLeafRefs["foo-workload-identity"] - fooLeafResRef := leafResourceRef(leafCertRef.Name, leafCertRef.Namespace, leafCertRef.Partition) - - // oldLeaf will store the original leaf from before we trigger a CA update. - var oldLeaf *x509.Certificate - - // Assert that the expected ProxyState matches the actual ProxyState that PushChange was called with. This needs to - // be in a retry block unlike the Reconcile tests because the controller triggers asynchronously. - retry.Run(suite.T(), func(r *retry.R) { - actualEndpoints := suite.updater.GetEndpoints(suite.fooProxyStateTemplate.Id.Name) - actualLeafs := suite.updater.GetLeafs(suite.fooProxyStateTemplate.Id.Name) - // Assert on the status. - suite.client.RequireStatusCondition(r, suite.fooProxyStateTemplate.Id, ControllerName, status.ConditionAccepted()) - // Assert that the endpoints computed in the controller matches the expected endpoints. - prototest.AssertDeepEqual(r, suite.expectedFooProxyStateEndpoints, actualEndpoints) - // Assert that the leafs computed in the controller matches the expected leafs. - require.Len(r, actualLeafs, 1) - for k, l := range actualLeafs { - pemDecode, _ := pem.Decode([]byte(l.Cert)) - cert, err := x509.ParseCertificate(pemDecode.Bytes) - oldLeaf = cert - require.NoError(r, err) - require.Equal(r, cert.URIs[0].String(), suite.expectedFooProxyStateSpiffes[k]) - // Check the state of the cancel functions map. - _, ok := suite.leafCancels.Get(keyFromReference(fooLeafResRef)) - require.True(r, ok) - } - }) - - // Update the CA, and ensure the leaf cert is different from the leaf certificate from the step above. - suite.signer.UpdateCA(suite.T(), nil) - retry.Run(suite.T(), func(r *retry.R) { - actualLeafs := suite.updater.GetLeafs(suite.fooProxyStateTemplate.Id.Name) - require.Len(r, actualLeafs, 1) - for k, l := range actualLeafs { - pemDecode, _ := pem.Decode([]byte(l.Cert)) - cert, err := x509.ParseCertificate(pemDecode.Bytes) - // Ensure the leaf was actually updated by checking that the leaf we just got is different from the old leaf. - require.NotEqual(r, oldLeaf.Raw, cert.Raw) - require.NoError(r, err) - require.Equal(r, suite.expectedFooProxyStateSpiffes[k], cert.URIs[0].String()) - // Check the state of the cancel functions map. Even though we've updated the leaf cert, we should still - // have a watch going for it. - _, ok := suite.leafCancels.Get(keyFromReference(fooLeafResRef)) - require.True(r, ok) - } - }) + // Run the controller manager. + mgr := controller.NewManager(suite.client, suite.runtime.Logger) + mgr.Register(Controller(suite.mapper, suite.updater, suite.fetcher, suite.leafCertManager, suite.leafMapper, suite.leafCancels, "dc1")) + mgr.SetRaftLeader(true) + go mgr.Run(suite.ctx) - // Delete the leaf references on the fooProxyStateTemplate - delete(suite.fooLeafRefs, "foo-workload-identity") - oldVersion := suite.fooProxyStateTemplate.Version - fooProxyStateTemplate := resourcetest.Resource(pbmesh.ProxyStateTemplateType, "foo-pst"). - WithData(suite.T(), &pbmesh.ProxyStateTemplate{ - RequiredEndpoints: suite.fooEndpointRefs, - ProxyState: &pbmesh.ProxyState{}, - RequiredLeafCertificates: suite.fooLeafRefs, - }). - WithTenancy(tenancy). - Write(suite.T(), suite.client) + suite.setupFooProxyStateTemplateWithReferences() + leafCertRef := suite.fooLeafRefs["foo-workload-identity"] + fooLeafResRef := leafResourceRef(leafCertRef.Name, leafCertRef.Namespace, leafCertRef.Partition) - suite.T().Cleanup(suite.deleteResourceFunc(fooProxyStateTemplate.Id)) + // oldLeaf will store the original leaf from before we trigger a CA update. + var oldLeaf *x509.Certificate - retry.Run(suite.T(), func(r *retry.R) { - suite.client.RequireVersionChanged(r, fooProxyStateTemplate.Id, oldVersion) - }) + // Assert that the expected ProxyState matches the actual ProxyState that PushChange was called with. This needs to + // be in a retry block unlike the Reconcile tests because the controller triggers asynchronously. + retry.Run(suite.T(), func(r *retry.R) { + actualEndpoints := suite.updater.GetEndpoints(suite.fooProxyStateTemplate.Id.Name) + actualLeafs := suite.updater.GetLeafs(suite.fooProxyStateTemplate.Id.Name) + // Assert on the status. + suite.client.RequireStatusCondition(r, suite.fooProxyStateTemplate.Id, ControllerName, status.ConditionAccepted()) + // Assert that the endpoints computed in the controller matches the expected endpoints. + prototest.AssertDeepEqual(r, suite.expectedFooProxyStateEndpoints, actualEndpoints) + // Assert that the leafs computed in the controller matches the expected leafs. + require.Len(r, actualLeafs, 1) + for k, l := range actualLeafs { + pem, _ := pem.Decode([]byte(l.Cert)) + cert, err := x509.ParseCertificate(pem.Bytes) + oldLeaf = cert + require.NoError(r, err) + require.Equal(r, cert.URIs[0].String(), suite.expectedFooProxyStateSpiffes[k]) + // Check the state of the cancel functions map. + _, ok := suite.leafCancels.Get(keyFromReference(fooLeafResRef)) + require.True(r, ok) + } + }) - // Ensure the leaf certificate watches were cancelled since we deleted the leaf reference. - retry.Run(suite.T(), func(r *retry.R) { + // Update the CA, and ensure the leaf cert is different from the leaf certificate from the step above. + suite.signer.UpdateCA(suite.T(), nil) + retry.Run(suite.T(), func(r *retry.R) { + actualLeafs := suite.updater.GetLeafs(suite.fooProxyStateTemplate.Id.Name) + require.Len(r, actualLeafs, 1) + for k, l := range actualLeafs { + pem, _ := pem.Decode([]byte(l.Cert)) + cert, err := x509.ParseCertificate(pem.Bytes) + // Ensure the leaf was actually updated by checking that the leaf we just got is different from the old leaf. + require.NotEqual(r, oldLeaf.Raw, cert.Raw) + require.NoError(r, err) + require.Equal(r, suite.expectedFooProxyStateSpiffes[k], cert.URIs[0].String()) + // Check the state of the cancel functions map. Even though we've updated the leaf cert, we should still + // have a watch going for it. _, ok := suite.leafCancels.Get(keyFromReference(fooLeafResRef)) - require.False(r, ok) - }) + require.True(r, ok) + } + }) + + // Delete the leaf references on the fooProxyStateTemplate + delete(suite.fooLeafRefs, "foo-workload-identity") + oldVersion := suite.fooProxyStateTemplate.Version + fooProxyStateTemplate := resourcetest.Resource(pbmesh.ProxyStateTemplateType, "foo-pst"). + WithData(suite.T(), &pbmesh.ProxyStateTemplate{ + RequiredEndpoints: suite.fooEndpointRefs, + ProxyState: &pbmesh.ProxyState{}, + RequiredLeafCertificates: suite.fooLeafRefs, + }). + Write(suite.T(), suite.client) + + retry.Run(suite.T(), func(r *retry.R) { + suite.client.RequireVersionChanged(r, fooProxyStateTemplate.Id, oldVersion) + }) + + // Ensure the leaf certificate watches were cancelled since we deleted the leaf reference. + retry.Run(suite.T(), func(r *retry.R) { + _, ok := suite.leafCancels.Get(keyFromReference(fooLeafResRef)) + require.False(r, ok) }) } // Sets up a full controller, and tests that reconciles are getting triggered for the leaf cert events it should. // This test ensures that when a ProxyStateTemplate is deleted, the leaf watches are cancelled. func (suite *xdsControllerTestSuite) TestController_ComputeLeafReferencesDeletePST() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - // Run the controller manager. - mgr := controller.NewManager(suite.client, suite.runtime.Logger) - mgr.Register(Controller(suite.mapper, suite.updater, suite.fetcher, suite.leafCertManager, suite.leafMapper, suite.leafCancels, "dc1")) - mgr.SetRaftLeader(true) - go mgr.Run(suite.ctx) - - suite.setupFooProxyStateTemplateWithReferences(tenancy) - leafCertRef := suite.fooLeafRefs["foo-workload-identity"] - fooLeafResRef := leafResourceRef(leafCertRef.Name, leafCertRef.Namespace, leafCertRef.Partition) - - // Assert that the expected ProxyState matches the actual ProxyState that PushChange was called with. This needs to - // be in a retry block unlike the Reconcile tests because the controller triggers asynchronously. - retry.Run(suite.T(), func(r *retry.R) { - actualEndpoints := suite.updater.GetEndpoints(suite.fooProxyStateTemplate.Id.Name) - actualLeafs := suite.updater.GetLeafs(suite.fooProxyStateTemplate.Id.Name) - // Assert on the status. - suite.client.RequireStatusCondition(r, suite.fooProxyStateTemplate.Id, ControllerName, status.ConditionAccepted()) - // Assert that the endpoints computed in the controller matches the expected endpoints. - prototest.AssertDeepEqual(r, suite.expectedFooProxyStateEndpoints, actualEndpoints) - // Assert that the leafs computed in the controller matches the expected leafs. - require.Len(r, actualLeafs, 1) - for k, l := range actualLeafs { - pemDecode, _ := pem.Decode([]byte(l.Cert)) - cert, err := x509.ParseCertificate(pemDecode.Bytes) - require.NoError(r, err) - require.Equal(r, cert.URIs[0].String(), suite.expectedFooProxyStateSpiffes[k]) - // Check the state of the cancel functions map. - _, ok := suite.leafCancels.Get(keyFromReference(fooLeafResRef)) - require.True(r, ok) - } - }) + // Run the controller manager. + mgr := controller.NewManager(suite.client, suite.runtime.Logger) + mgr.Register(Controller(suite.mapper, suite.updater, suite.fetcher, suite.leafCertManager, suite.leafMapper, suite.leafCancels, "dc1")) + mgr.SetRaftLeader(true) + go mgr.Run(suite.ctx) + + suite.setupFooProxyStateTemplateWithReferences() + leafCertRef := suite.fooLeafRefs["foo-workload-identity"] + fooLeafResRef := leafResourceRef(leafCertRef.Name, leafCertRef.Namespace, leafCertRef.Partition) + + // Assert that the expected ProxyState matches the actual ProxyState that PushChange was called with. This needs to + // be in a retry block unlike the Reconcile tests because the controller triggers asynchronously. + retry.Run(suite.T(), func(r *retry.R) { + actualEndpoints := suite.updater.GetEndpoints(suite.fooProxyStateTemplate.Id.Name) + actualLeafs := suite.updater.GetLeafs(suite.fooProxyStateTemplate.Id.Name) + // Assert on the status. + suite.client.RequireStatusCondition(r, suite.fooProxyStateTemplate.Id, ControllerName, status.ConditionAccepted()) + // Assert that the endpoints computed in the controller matches the expected endpoints. + prototest.AssertDeepEqual(r, suite.expectedFooProxyStateEndpoints, actualEndpoints) + // Assert that the leafs computed in the controller matches the expected leafs. + require.Len(r, actualLeafs, 1) + for k, l := range actualLeafs { + pem, _ := pem.Decode([]byte(l.Cert)) + cert, err := x509.ParseCertificate(pem.Bytes) + require.NoError(r, err) + require.Equal(r, cert.URIs[0].String(), suite.expectedFooProxyStateSpiffes[k]) + // Check the state of the cancel functions map. + _, ok := suite.leafCancels.Get(keyFromReference(fooLeafResRef)) + require.True(r, ok) + } + }) - // Delete the fooProxyStateTemplate + // Delete the fooProxyStateTemplate - req := &pbresource.DeleteRequest{ - Id: suite.fooProxyStateTemplate.Id, - } - _, err := suite.client.Delete(suite.ctx, req) - require.NoError(suite.T(), err) + req := &pbresource.DeleteRequest{ + Id: suite.fooProxyStateTemplate.Id, + } + suite.client.Delete(suite.ctx, req) - // Ensure the leaf certificate watches were cancelled since we deleted the leaf reference. - retry.Run(suite.T(), func(r *retry.R) { - _, ok := suite.leafCancels.Get(keyFromReference(fooLeafResRef)) - require.False(r, ok) - }) + // Ensure the leaf certificate watches were cancelled since we deleted the leaf reference. + retry.Run(suite.T(), func(r *retry.R) { + _, ok := suite.leafCancels.Get(keyFromReference(fooLeafResRef)) + require.False(r, ok) }) } // Sets up a full controller, and tests that reconciles are getting triggered for the events it should. func (suite *xdsControllerTestSuite) TestController_ComputeEndpointForProxyConnections() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - // Run the controller manager. - mgr := controller.NewManager(suite.client, suite.runtime.Logger) - - mgr.Register(Controller(suite.mapper, suite.updater, suite.fetcher, suite.leafCertManager, suite.leafMapper, suite.leafCancels, "dc1")) - mgr.SetRaftLeader(true) - go mgr.Run(suite.ctx) - - // Set up fooEndpoints and fooProxyStateTemplate with a reference to fooEndpoints. These need to be stored - // because the controller reconcile looks them up. - suite.setupFooProxyStateTemplateWithReferences(tenancy) - - // Assert that the expected ProxyState matches the actual ProxyState that PushChange was called with. This needs to - // be in a retry block unlike the Reconcile tests because the controller triggers asynchronously. - retry.Run(suite.T(), func(r *retry.R) { - actualEndpoints := suite.updater.GetEndpoints(suite.fooProxyStateTemplate.Id.Name) - // Assert on the status. - suite.client.RequireStatusCondition(r, suite.fooProxyStateTemplate.Id, ControllerName, status.ConditionAccepted()) - // Assert that the endpoints computed in the controller matches the expected endpoints. - prototest.AssertDeepEqual(r, suite.expectedFooProxyStateEndpoints, actualEndpoints) - }) + // Run the controller manager. + mgr := controller.NewManager(suite.client, suite.runtime.Logger) - eventChannel := suite.updater.EventChannel() - eventChannel <- controller.Event{Obj: &proxytracker.ProxyConnection{ProxyID: suite.fooProxyStateTemplate.Id}} + mgr.Register(Controller(suite.mapper, suite.updater, suite.fetcher, suite.leafCertManager, suite.leafMapper, suite.leafCancels, "dc1")) + mgr.SetRaftLeader(true) + go mgr.Run(suite.ctx) - // Wait for the proxy state template to be re-evaluated. - proxyStateTemp := suite.client.WaitForNewVersion(suite.T(), suite.fooProxyStateTemplate.Id, suite.fooProxyStateTemplate.Version) - require.NotNil(suite.T(), proxyStateTemp) + // Set up fooEndpoints and fooProxyStateTemplate with a reference to fooEndpoints. These need to be stored + // because the controller reconcile looks them up. + suite.setupFooProxyStateTemplateWithReferences() + + // Assert that the expected ProxyState matches the actual ProxyState that PushChange was called with. This needs to + // be in a retry block unlike the Reconcile tests because the controller triggers asynchronously. + retry.Run(suite.T(), func(r *retry.R) { + actualEndpoints := suite.updater.GetEndpoints(suite.fooProxyStateTemplate.Id.Name) + // Assert on the status. + suite.client.RequireStatusCondition(r, suite.fooProxyStateTemplate.Id, ControllerName, status.ConditionAccepted()) + // Assert that the endpoints computed in the controller matches the expected endpoints. + prototest.AssertDeepEqual(r, suite.expectedFooProxyStateEndpoints, actualEndpoints) }) + + eventChannel := suite.updater.EventChannel() + eventChannel <- controller.Event{Obj: &proxytracker.ProxyConnection{ProxyID: suite.fooProxyStateTemplate.Id}} + + // Wait for the proxy state template to be re-evaluated. + proxyStateTemp := suite.client.WaitForNewVersion(suite.T(), suite.fooProxyStateTemplate.Id, suite.fooProxyStateTemplate.Version) + require.NotNil(suite.T(), proxyStateTemp) } // Setup: fooProxyStateTemplate with: @@ -718,14 +658,11 @@ func (suite *xdsControllerTestSuite) TestController_ComputeEndpointForProxyConne // - a LeafCertificateRef to "foo-workload-identity" // // Saves all related resources to the suite so they can be looked up by the controller or modified if needed. -func (suite *xdsControllerTestSuite) setupFooProxyStateTemplateWithReferences(tenancy *pbresource.Tenancy) { +func (suite *xdsControllerTestSuite) setupFooProxyStateTemplateWithReferences() { fooService := resourcetest.Resource(pbcatalog.ServiceType, "foo-service"). WithData(suite.T(), &pbcatalog.Service{}). - WithTenancy(tenancy). Write(suite.T(), suite.client) - suite.T().Cleanup(suite.deleteResourceFunc(fooService.Id)) - fooEndpoints := resourcetest.Resource(pbcatalog.ServiceEndpointsType, "foo-service"). WithData(suite.T(), &pbcatalog.ServiceEndpoints{Endpoints: []*pbcatalog.Endpoint{ { @@ -747,12 +684,9 @@ func (suite *xdsControllerTestSuite) setupFooProxyStateTemplateWithReferences(te }, }, }}). - WithTenancy(tenancy). WithOwner(fooService.Id). Write(suite.T(), suite.client) - suite.T().Cleanup(suite.deleteResourceFunc(fooEndpoints.Id)) - fooRequiredEndpoints := make(map[string]*pbproxystate.EndpointRef) fooRequiredEndpoints["test-cluster-1"] = &pbproxystate.EndpointRef{ Id: fooEndpoints.Id, @@ -770,11 +704,8 @@ func (suite *xdsControllerTestSuite) setupFooProxyStateTemplateWithReferences(te RequiredLeafCertificates: fooRequiredLeafs, ProxyState: &pbmesh.ProxyState{}, }). - WithTenancy(tenancy). Write(suite.T(), suite.client) - suite.T().Cleanup(suite.deleteResourceFunc(fooProxyStateTemplate.Id)) - retry.Run(suite.T(), func(r *retry.R) { suite.client.RequireResourceExists(r, fooProxyStateTemplate.Id) }) @@ -820,14 +751,6 @@ func (suite *xdsControllerTestSuite) setupFooProxyStateTemplateWithReferences(te suite.expectedFooProxyStateEndpoints = expectedFooProxyStateEndpoints suite.expectedTrustBundle = expectedTrustBundle suite.expectedFooProxyStateSpiffes = expectedFooLeafSpiffes - - suite.T().Cleanup(func() { - suite.fooEndpointRefs = make(map[string]*pbproxystate.EndpointRef) - suite.fooLeafRefs = make(map[string]*pbproxystate.LeafCertificateRef) - suite.expectedFooProxyStateEndpoints = make(map[string]*pbproxystate.Endpoints) - suite.expectedTrustBundle = make(map[string]*pbproxystate.TrustBundle) - suite.expectedFooProxyStateSpiffes = make(map[string]string) - }) } // Setup: @@ -835,14 +758,11 @@ func (suite *xdsControllerTestSuite) setupFooProxyStateTemplateWithReferences(te // - barProxyStateTemplate with an EndpointsRef to fooBarEndpoints. // // Saves all related resources to the suite so they can be modified if needed. -func (suite *xdsControllerTestSuite) setupFooBarProxyStateTemplateAndEndpoints(tenancy *pbresource.Tenancy) { +func (suite *xdsControllerTestSuite) setupFooBarProxyStateTemplateAndEndpoints() { fooService := resourcetest.Resource(pbcatalog.ServiceType, "foo-service"). WithData(suite.T(), &pbcatalog.Service{}). - WithTenancy(tenancy). Write(suite.T(), suite.client) - suite.T().Cleanup(suite.deleteResourceFunc(fooService.Id)) - fooEndpoints := resourcetest.Resource(pbcatalog.ServiceEndpointsType, "foo-service"). WithData(suite.T(), &pbcatalog.ServiceEndpoints{Endpoints: []*pbcatalog.Endpoint{ { @@ -865,18 +785,12 @@ func (suite *xdsControllerTestSuite) setupFooBarProxyStateTemplateAndEndpoints(t }, }}). WithOwner(fooService.Id). - WithTenancy(tenancy). Write(suite.T(), suite.client) - suite.T().Cleanup(suite.deleteResourceFunc(fooEndpoints.Id)) - fooBarService := resourcetest.Resource(pbcatalog.ServiceType, "foo-bar-service"). WithData(suite.T(), &pbcatalog.Service{}). - WithTenancy(tenancy). Write(suite.T(), suite.client) - suite.T().Cleanup(suite.deleteResourceFunc(fooBarService.Id)) - fooBarEndpoints := resourcetest.Resource(pbcatalog.ServiceEndpointsType, "foo-bar-service"). WithData(suite.T(), &pbcatalog.ServiceEndpoints{Endpoints: []*pbcatalog.Endpoint{ { @@ -899,11 +813,8 @@ func (suite *xdsControllerTestSuite) setupFooBarProxyStateTemplateAndEndpoints(t }, }}). WithOwner(fooBarService.Id). - WithTenancy(tenancy). Write(suite.T(), suite.client) - suite.T().Cleanup(suite.deleteResourceFunc(fooBarEndpoints.Id)) - fooRequiredEndpoints := make(map[string]*pbproxystate.EndpointRef) fooRequiredEndpoints["test-cluster-1"] = &pbproxystate.EndpointRef{ Id: fooEndpoints.Id, @@ -927,11 +838,8 @@ func (suite *xdsControllerTestSuite) setupFooBarProxyStateTemplateAndEndpoints(t RequiredEndpoints: fooRequiredEndpoints, ProxyState: &pbmesh.ProxyState{}, }). - WithTenancy(tenancy). Write(suite.T(), suite.client) - suite.T().Cleanup(suite.deleteResourceFunc(fooProxyStateTemplate.Id)) - retry.Run(suite.T(), func(r *retry.R) { suite.client.RequireResourceExists(r, fooProxyStateTemplate.Id) }) @@ -942,11 +850,8 @@ func (suite *xdsControllerTestSuite) setupFooBarProxyStateTemplateAndEndpoints(t RequiredEndpoints: barRequiredEndpoints, ProxyState: &pbmesh.ProxyState{}, }). - WithTenancy(tenancy). Write(suite.T(), suite.client) - suite.T().Cleanup(suite.deleteResourceFunc(barProxyStateTemplate.Id)) - retry.Run(suite.T(), func(r *retry.R) { suite.client.RequireResourceExists(r, barProxyStateTemplate.Id) }) @@ -1027,77 +932,68 @@ func (suite *xdsControllerTestSuite) setupFooBarProxyStateTemplateAndEndpoints(t suite.fooBarService = fooBarService suite.expectedFooProxyStateEndpoints = expectedFooProxyStateEndpoints suite.expectedBarProxyStateEndpoints = expectedBarProxyStateEndpoints - - suite.T().Cleanup(func() { - suite.barEndpointRefs = make(map[string]*pbproxystate.EndpointRef) - suite.fooEndpointRefs = make(map[string]*pbproxystate.EndpointRef) - suite.expectedFooProxyStateEndpoints = make(map[string]*pbproxystate.Endpoints) - suite.expectedBarProxyStateEndpoints = make(map[string]*pbproxystate.Endpoints) - }) } func (suite *xdsControllerTestSuite) TestReconcile_prevWatchesToCancel() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - makeRef := func(names ...string) []*pbresource.Reference { - out := make([]*pbresource.Reference, len(names)) - for i, name := range names { - out[i] = &pbresource.Reference{ - Name: name, - Type: &pbresource.Type{ - Group: "g", - GroupVersion: "v", - Kind: "k", - }, - Tenancy: tenancy, - } + makeRef := func(names ...string) []*pbresource.Reference { + out := make([]*pbresource.Reference, len(names)) + for i, name := range names { + out[i] = &pbresource.Reference{ + Name: name, + Type: &pbresource.Type{ + Group: "g", + GroupVersion: "v", + Kind: "k", + }, + Tenancy: &pbresource.Tenancy{}, } - return out } - convert := func(input []*pbresource.Reference) []resource.ReferenceOrID { - asInterface := make([]resource.ReferenceOrID, len(input)) - for i := range input { - asInterface[i] = input[i] - } - return asInterface + return out + } + convert := func(input []*pbresource.Reference) []resource.ReferenceOrID { + asInterface := make([]resource.ReferenceOrID, len(input)) + for i := range input { + asInterface[i] = input[i] } + return asInterface + } - cases := []struct { - old []*pbresource.Reference - new []*pbresource.Reference - expect []*pbresource.Reference - }{ - { - old: makeRef("a", "b", "c"), - new: makeRef("a", "c"), - expect: makeRef("b"), - }, - { - old: makeRef("a", "b", "c"), - new: makeRef("a", "b", "c"), - expect: makeRef(), - }, - { - old: makeRef(), - new: makeRef("a", "b"), - expect: makeRef(), - }, - { - old: makeRef("a", "b"), - new: makeRef(), - expect: makeRef("a", "b"), - }, - { - old: makeRef(), - new: makeRef(), - expect: makeRef(), - }, - } + cases := []struct { + old []*pbresource.Reference + new []*pbresource.Reference + expect []*pbresource.Reference + }{ + { + old: makeRef("a", "b", "c"), + new: makeRef("a", "c"), + expect: makeRef("b"), + }, + { + old: makeRef("a", "b", "c"), + new: makeRef("a", "b", "c"), + expect: makeRef(), + }, + { + old: makeRef(), + new: makeRef("a", "b"), + expect: makeRef(), + }, + { + old: makeRef("a", "b"), + new: makeRef(), + expect: makeRef("a", "b"), + }, + { + old: makeRef(), + new: makeRef(), + expect: makeRef(), + }, + } - for _, tc := range cases { - toCancel := prevWatchesToCancel(tc.old, convert(tc.new)) - require.ElementsMatch(suite.T(), toCancel, tc.expect) - } - }) + for _, tc := range cases { + toCancel := prevWatchesToCancel(tc.old, convert(tc.new)) + require.ElementsMatch(suite.T(), toCancel, tc.expect) + } } func TestXdsController(t *testing.T) { @@ -1118,92 +1014,86 @@ func TestXdsController(t *testing.T) { // rather than just endpoints, leaf certs, and trust bundles, the test also ensures // side effects or change in scope to XDS controller are not introduce mistakenly. func (suite *xdsControllerTestSuite) TestReconcile_SidecarProxyGoldenFileInputs() { - suite.runTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - path := "../sidecarproxy/builder/testdata" - cases := []string{ - // destinations - please add in alphabetical order - "destination/l4-single-destination-ip-port-bind-address", - "destination/l4-single-destination-unix-socket-bind-address", - "destination/l4-single-implicit-destination-tproxy", - "destination/l4-multi-destination", - "destination/l4-multiple-implicit-destinations-tproxy", - "destination/l4-implicit-and-explicit-destinations-tproxy", - "destination/mixed-multi-destination", - "destination/multiport-l4-and-l7-multiple-implicit-destinations-tproxy", - "destination/multiport-l4-and-l7-single-implicit-destination-tproxy", - "destination/multiport-l4-and-l7-single-implicit-destination-with-multiple-workloads-tproxy", - - //sources - please add in alphabetical order - "source/l7-expose-paths", - "source/local-and-inbound-connections", - "source/multiple-workload-addresses-with-specific-ports", - "source/multiple-workload-addresses-without-ports", - "source/multiport-l4-multiple-workload-addresses-with-specific-ports", - "source/multiport-l4-multiple-workload-addresses-without-ports", - "source/multiport-l4-workload-with-only-mesh-port", - "source/multiport-l7-multiple-workload-addresses-with-specific-ports", - "source/multiport-l7-multiple-workload-addresses-without-ports", - "source/multiport-l7-multiple-workload-addresses-without-ports", - "source/single-workload-address-without-ports", - } + path := "../sidecarproxy/builder/testdata" + cases := []string{ + // destinations - please add in alphabetical order + "destination/l4-single-destination-ip-port-bind-address", + "destination/l4-single-destination-unix-socket-bind-address", + "destination/l4-single-implicit-destination-tproxy", + "destination/l4-multi-destination", + "destination/l4-multiple-implicit-destinations-tproxy", + "destination/l4-implicit-and-explicit-destinations-tproxy", + "destination/mixed-multi-destination", + "destination/multiport-l4-and-l7-multiple-implicit-destinations-tproxy", + "destination/multiport-l4-and-l7-single-implicit-destination-tproxy", + "destination/multiport-l4-and-l7-single-implicit-destination-with-multiple-workloads-tproxy", + + //sources - please add in alphabetical order + "source/l4-multiple-workload-addresses-with-specific-ports", + "source/l4-multiple-workload-addresses-without-ports", + "source/l4-single-workload-address-without-ports", + "source/l7-expose-paths", + "source/local-and-inbound-connections", + "source/multiport-l4-multiple-workload-addresses-with-specific-ports", + "source/multiport-l4-multiple-workload-addresses-without-ports", + "source/multiport-l4-workload-with-only-mesh-port", + "source/multiport-l7-multiple-workload-addresses-with-specific-ports", + "source/multiport-l7-multiple-workload-addresses-without-ports", + } - for _, name := range cases { - suite.Run(name, func() { - // Create ProxyStateTemplate from the golden file. - pst := JSONToProxyTemplate(suite.T(), - golden.GetBytesAtFilePath(suite.T(), fmt.Sprintf("%s/%s.golden", path, name))) - - // Destinations will need endpoint refs set up. - if strings.Split(name, "/")[0] == "destination" && len(pst.ProxyState.Endpoints) == 0 { - suite.addRequiredEndpointsAndRefs(pst, tenancy) - } - - // Store the initial ProxyStateTemplate. - proxyStateTemplate := resourcetest.Resource(pbmesh.ProxyStateTemplateType, "test"). - WithData(suite.T(), pst). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - - suite.T().Cleanup(suite.deleteResourceFunc(proxyStateTemplate.Id)) - - // Check with resource service that it exists. - retry.Run(suite.T(), func(r *retry.R) { - suite.client.RequireResourceExists(r, proxyStateTemplate.Id) - }) - - // Track it in the mapper. - suite.mapper.TrackItem(proxyStateTemplate.Id, []resource.ReferenceOrID{}) - - // Run the reconcile, and since no ProxyStateTemplate is stored, this simulates a deletion. - err := suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ - ID: proxyStateTemplate.Id, - }) - require.NoError(suite.T(), err) - require.NotNil(suite.T(), proxyStateTemplate) - - // Get the reconciled proxyStateTemplate to check the reconcile results. - reconciledPS := suite.updater.Get(proxyStateTemplate.Id.Name) - - // Verify leaf cert contents then hard code them for comparison - // and downstream tests since they change from test run to test run. - require.NotEmpty(suite.T(), reconciledPS.LeafCertificates) - reconciledPS.LeafCertificates = map[string]*pbproxystate.LeafCertificate{ - "test-identity": { - Cert: "-----BEGIN CERTIFICATE-----\nMIICDjCCAbWgAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDEwlUZXN0IENB\nIDEwHhcNMjMxMDE2MTYxMzI5WhcNMjMxMDE2MTYyMzI5WjAAMFkwEwYHKoZIzj0C\nAQYIKoZIzj0DAQcDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9\nta/bGT+5orZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJaOCAQowggEGMA4GA1UdDwEB\n/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDAYDVR0TAQH/\nBAIwADApBgNVHQ4EIgQg3ogXVz9cqaK2B6xdiJYMa5NtT0KkYv7BA2dR7h9EcwUw\nKwYDVR0jBCQwIoAgq+C1mPlPoGa4lt7sSft1goN5qPGyBIB/3mUHJZKSFY8wbwYD\nVR0RAQH/BGUwY4Zhc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9hcC9kZWZhdWx0L25zL2RlZmF1bHQvaWRlbnRpdHkv\ndGVzdC1pZGVudGl0eTAKBggqhkjOPQQDAgNHADBEAiB6L+t5bzRrBPhiQYNeA7fF\nUCuLWrdjW4Xbv3SLg0IKMgIgfRC5hEx+DqzQxTCP4sexX3hVWMjKoWmHdwiUcg+K\n/IE=\n-----END CERTIFICATE-----\n", - Key: "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIFIFkTIL1iUV4O/RpveVHzHs7ZzhSkvYIzbdXDttz9EooAoGCCqGSM49\nAwEHoUQDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9ta/bGT+5\norZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJQ==\n-----END EC PRIVATE KEY-----\n", - }, - } + for _, name := range cases { + suite.Run(name, func() { + // Create ProxyStateTemplate from the golden file. + pst := JSONToProxyTemplate(suite.T(), + golden.GetBytesAtFilePath(suite.T(), fmt.Sprintf("%s/%s.golden", path, name))) + + // Destinations will need endpoint refs set up. + if strings.Split(name, "/")[0] == "destination" && len(pst.ProxyState.Endpoints) == 0 { + suite.addRequiredEndpointsAndRefs(pst) + } + + // Store the initial ProxyStateTemplate. + proxyStateTemplate := resourcetest.Resource(pbmesh.ProxyStateTemplateType, "test"). + WithData(suite.T(), pst). + Write(suite.T(), suite.client) - // Compare actual vs expected. - actual := prototest.ProtoToJSON(suite.T(), reconciledPS) - expected := golden.Get(suite.T(), actual, name+".golden") - require.JSONEq(suite.T(), expected, actual) + // Check with resource service that it exists. + retry.Run(suite.T(), func(r *retry.R) { + suite.client.RequireResourceExists(r, proxyStateTemplate.Id) }) - } - }) + + // Track it in the mapper. + suite.mapper.TrackItem(proxyStateTemplate.Id, []resource.ReferenceOrID{}) + + // Run the reconcile, and since no ProxyStateTemplate is stored, this simulates a deletion. + err := suite.ctl.Reconcile(context.Background(), suite.runtime, controller.Request{ + ID: proxyStateTemplate.Id, + }) + require.NoError(suite.T(), err) + require.NotNil(suite.T(), proxyStateTemplate) + + // Get the reconciled proxyStateTemplate to check the reconcile results. + reconciledPS := suite.updater.Get(proxyStateTemplate.Id.Name) + + // Verify leaf cert contents then hard code them for comparison + // and downstream tests since they change from test run to test run. + require.NotEmpty(suite.T(), reconciledPS.LeafCertificates) + reconciledPS.LeafCertificates = map[string]*pbproxystate.LeafCertificate{ + "test-identity": { + Cert: "-----BEGIN CERTIFICATE-----\nMIICDjCCAbWgAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDEwlUZXN0IENB\nIDEwHhcNMjMxMDE2MTYxMzI5WhcNMjMxMDE2MTYyMzI5WjAAMFkwEwYHKoZIzj0C\nAQYIKoZIzj0DAQcDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9\nta/bGT+5orZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJaOCAQowggEGMA4GA1UdDwEB\n/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDAYDVR0TAQH/\nBAIwADApBgNVHQ4EIgQg3ogXVz9cqaK2B6xdiJYMa5NtT0KkYv7BA2dR7h9EcwUw\nKwYDVR0jBCQwIoAgq+C1mPlPoGa4lt7sSft1goN5qPGyBIB/3mUHJZKSFY8wbwYD\nVR0RAQH/BGUwY4Zhc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9hcC9kZWZhdWx0L25zL2RlZmF1bHQvaWRlbnRpdHkv\ndGVzdC1pZGVudGl0eTAKBggqhkjOPQQDAgNHADBEAiB6L+t5bzRrBPhiQYNeA7fF\nUCuLWrdjW4Xbv3SLg0IKMgIgfRC5hEx+DqzQxTCP4sexX3hVWMjKoWmHdwiUcg+K\n/IE=\n-----END CERTIFICATE-----\n", + Key: "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIFIFkTIL1iUV4O/RpveVHzHs7ZzhSkvYIzbdXDttz9EooAoGCCqGSM49\nAwEHoUQDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9ta/bGT+5\norZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJQ==\n-----END EC PRIVATE KEY-----\n", + }, + } + + // Compare actual vs expected. + actual := prototest.ProtoToJSON(suite.T(), reconciledPS) + expected := golden.Get(suite.T(), actual, name+".golden") + require.JSONEq(suite.T(), expected, actual) + }) + } } -func (suite *xdsControllerTestSuite) addRequiredEndpointsAndRefs(pst *pbmesh.ProxyStateTemplate, tenancy *pbresource.Tenancy) { +func (suite *xdsControllerTestSuite) addRequiredEndpointsAndRefs(pst *pbmesh.ProxyStateTemplate) { //get service data serviceData := &pbcatalog.Service{} var vp uint32 = 7000 @@ -1231,11 +1121,8 @@ func (suite *xdsControllerTestSuite) addRequiredEndpointsAndRefs(pst *pbmesh.Pro // create service. svc := resourcetest.Resource(pbcatalog.ServiceType, svcName). WithData(suite.T(), &pbcatalog.Service{}). - WithTenancy(tenancy). Write(suite.T(), suite.client) - suite.T().Cleanup(suite.deleteResourceFunc(svc.Id)) - // create endpoints with svc as owner. eps := resourcetest.Resource(pbcatalog.ServiceEndpointsType, svcName). WithData(suite.T(), &pbcatalog.ServiceEndpoints{Endpoints: []*pbcatalog.Endpoint{ @@ -1255,11 +1142,8 @@ func (suite *xdsControllerTestSuite) addRequiredEndpointsAndRefs(pst *pbmesh.Pro }, }}). WithOwner(svc.Id). - WithTenancy(tenancy). Write(suite.T(), suite.client) - suite.T().Cleanup(suite.deleteResourceFunc(eps.Id)) - // add to working list of required endpoints. requiredEps[clusterName] = &pbproxystate.EndpointRef{ Id: eps.Id, @@ -1279,21 +1163,3 @@ func JSONToProxyTemplate(t *testing.T, json []byte) *pbmesh.ProxyStateTemplate { require.NoError(t, err) return proxyTemplate } - -func (suite *xdsControllerTestSuite) runTestCaseWithTenancies(testCase func(tenancy *pbresource.Tenancy)) { - for _, tenancy := range suite.tenancies { - suite.Run(suite.appendTenancyInfo(tenancy), func() { - testCase(tenancy) - }) - } -} - -func (suite *xdsControllerTestSuite) appendTenancyInfo(tenancy *pbresource.Tenancy) string { - return fmt.Sprintf("%s_Namespace_%s_Partition", tenancy.Namespace, tenancy.Partition) -} - -func (suite *xdsControllerTestSuite) deleteResourceFunc(id *pbresource.ID) func() { - return func() { - suite.client.MustDelete(suite.T(), id) - } -} diff --git a/internal/mesh/internal/controllers/xds/testdata/destination/mixed-multi-destination.golden b/internal/mesh/internal/controllers/xds/testdata/destination/mixed-multi-destination.golden index 3acd9869e51dc..16b1841296ed8 100644 --- a/internal/mesh/internal/controllers/xds/testdata/destination/mixed-multi-destination.golden +++ b/internal/mesh/internal/controllers/xds/testdata/destination/mixed-multi-destination.golden @@ -285,7 +285,7 @@ "route": { "name": "default/local/default/api-1:http:1.1.1.1:1234" }, - "statPrefix": "upstream.http.api-1.default.default.dc1" + "statPrefix": "upstream." } } ] @@ -377,4 +377,4 @@ "trustDomain": "some-trust-domain" } } -} \ No newline at end of file +} diff --git a/internal/mesh/internal/controllers/xds/testdata/destination/multiport-l4-and-l7-multiple-implicit-destinations-tproxy.golden b/internal/mesh/internal/controllers/xds/testdata/destination/multiport-l4-and-l7-multiple-implicit-destinations-tproxy.golden index 0158f07aa2c58..7ac1ec80710b5 100644 --- a/internal/mesh/internal/controllers/xds/testdata/destination/multiport-l4-and-l7-multiple-implicit-destinations-tproxy.golden +++ b/internal/mesh/internal/controllers/xds/testdata/destination/multiport-l4-and-l7-multiple-implicit-destinations-tproxy.golden @@ -330,7 +330,7 @@ "route": { "name": "default/local/default/api-app:http" }, - "statPrefix": "upstream.http.api-app.default.default.dc1" + "statPrefix": "upstream." }, "match": { "destinationPort": 8080, @@ -347,7 +347,7 @@ "route": { "name": "default/local/default/api-app2:http" }, - "statPrefix": "upstream.http.api-app2.default.default.dc1" + "statPrefix": "upstream." }, "match": { "destinationPort": 8080, @@ -463,4 +463,4 @@ "trustDomain": "some-trust-domain" } } -} \ No newline at end of file +} diff --git a/internal/mesh/internal/controllers/xds/testdata/destination/multiport-l4-and-l7-single-implicit-destination-tproxy.golden b/internal/mesh/internal/controllers/xds/testdata/destination/multiport-l4-and-l7-single-implicit-destination-tproxy.golden index 3c9d62fb4ea17..8f5e73c92ee52 100644 --- a/internal/mesh/internal/controllers/xds/testdata/destination/multiport-l4-and-l7-single-implicit-destination-tproxy.golden +++ b/internal/mesh/internal/controllers/xds/testdata/destination/multiport-l4-and-l7-single-implicit-destination-tproxy.golden @@ -192,7 +192,7 @@ "route": { "name": "default/local/default/api-app:http" }, - "statPrefix": "upstream.http.api-app.default.default.dc1" + "statPrefix": "upstream." }, "match": { "destinationPort": 8080, @@ -259,4 +259,4 @@ "trustDomain": "some-trust-domain" } } -} \ No newline at end of file +} diff --git a/internal/mesh/internal/controllers/xds/testdata/destination/multiport-l4-and-l7-single-implicit-destination-with-multiple-workloads-tproxy.golden b/internal/mesh/internal/controllers/xds/testdata/destination/multiport-l4-and-l7-single-implicit-destination-with-multiple-workloads-tproxy.golden index 3c9d62fb4ea17..8f5e73c92ee52 100644 --- a/internal/mesh/internal/controllers/xds/testdata/destination/multiport-l4-and-l7-single-implicit-destination-with-multiple-workloads-tproxy.golden +++ b/internal/mesh/internal/controllers/xds/testdata/destination/multiport-l4-and-l7-single-implicit-destination-with-multiple-workloads-tproxy.golden @@ -192,7 +192,7 @@ "route": { "name": "default/local/default/api-app:http" }, - "statPrefix": "upstream.http.api-app.default.default.dc1" + "statPrefix": "upstream." }, "match": { "destinationPort": 8080, @@ -259,4 +259,4 @@ "trustDomain": "some-trust-domain" } } -} \ No newline at end of file +} diff --git a/internal/mesh/internal/controllers/xds/testdata/source/l4-multiple-workload-addresses-with-specific-ports.golden b/internal/mesh/internal/controllers/xds/testdata/source/l4-multiple-workload-addresses-with-specific-ports.golden new file mode 100644 index 0000000000000..c88a05495613c --- /dev/null +++ b/internal/mesh/internal/controllers/xds/testdata/source/l4-multiple-workload-addresses-with-specific-ports.golden @@ -0,0 +1,102 @@ +{ + "clusters": { + "local_app:port1": { + "endpointGroup": { + "static": {} + }, + "name": "local_app:port1", + "protocol": "PROTOCOL_TCP" + } + }, + "endpoints": { + "local_app:port1": { + "endpoints": [ + { + "hostPort": { + "host": "127.0.0.1", + "port": 8080 + } + } + ] + } + }, + "identity": { + "name": "test-identity", + "tenancy": { + "namespace": "default", + "partition": "default", + "peerName": "local" + }, + "type": { + "group": "auth", + "groupVersion": "v2beta1", + "kind": "WorkloadIdentity" + } + }, + "leafCertificates": { + "test-identity": { + "cert": "-----BEGIN CERTIFICATE-----\nMIICDjCCAbWgAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDEwlUZXN0IENB\nIDEwHhcNMjMxMDE2MTYxMzI5WhcNMjMxMDE2MTYyMzI5WjAAMFkwEwYHKoZIzj0C\nAQYIKoZIzj0DAQcDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9\nta/bGT+5orZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJaOCAQowggEGMA4GA1UdDwEB\n/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDAYDVR0TAQH/\nBAIwADApBgNVHQ4EIgQg3ogXVz9cqaK2B6xdiJYMa5NtT0KkYv7BA2dR7h9EcwUw\nKwYDVR0jBCQwIoAgq+C1mPlPoGa4lt7sSft1goN5qPGyBIB/3mUHJZKSFY8wbwYD\nVR0RAQH/BGUwY4Zhc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9hcC9kZWZhdWx0L25zL2RlZmF1bHQvaWRlbnRpdHkv\ndGVzdC1pZGVudGl0eTAKBggqhkjOPQQDAgNHADBEAiB6L+t5bzRrBPhiQYNeA7fF\nUCuLWrdjW4Xbv3SLg0IKMgIgfRC5hEx+DqzQxTCP4sexX3hVWMjKoWmHdwiUcg+K\n/IE=\n-----END CERTIFICATE-----\n", + "key": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIFIFkTIL1iUV4O/RpveVHzHs7ZzhSkvYIzbdXDttz9EooAoGCCqGSM49\nAwEHoUQDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9ta/bGT+5\norZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJQ==\n-----END EC PRIVATE KEY-----\n" + } + }, + "listeners": [ + { + "capabilities": [ + "CAPABILITY_L4_TLS_INSPECTION" + ], + "direction": "DIRECTION_INBOUND", + "hostPort": { + "host": "10.0.0.2", + "port": 20000 + }, + "name": "public_listener", + "routers": [ + { + "inboundTls": { + "inboundMesh": { + "identityKey": "test-identity", + "validationContext": { + "trustBundlePeerNameKeys": [ + "local" + ] + } + } + }, + "l4": { + "cluster": { + "name": "local_app:port1" + }, + "statPrefix": "public_listener", + "trafficPermissions": { + "allowPermissions": [ + { + "principals": [ + { + "spiffe": { + "regex": "^spiffe://foo.consul/ap/default/ns/default/identity/foo$" + } + } + ] + } + ] + } + }, + "match": { + "alpnProtocols": [ + "consul~port1" + ] + } + } + ] + } + ], + "trustBundles": { + "local": { + "roots": [ + "some-root", + "some-other-root" + ], + "trustDomain": "some-trust-domain" + } + } +} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/xds/testdata/source/l4-multiple-workload-addresses-without-ports.golden b/internal/mesh/internal/controllers/xds/testdata/source/l4-multiple-workload-addresses-without-ports.golden new file mode 100644 index 0000000000000..439c536fdc3bb --- /dev/null +++ b/internal/mesh/internal/controllers/xds/testdata/source/l4-multiple-workload-addresses-without-ports.golden @@ -0,0 +1,90 @@ +{ + "clusters": { + "local_app:port1": { + "endpointGroup": { + "static": {} + }, + "name": "local_app:port1", + "protocol": "PROTOCOL_TCP" + } + }, + "endpoints": { + "local_app:port1": { + "endpoints": [ + { + "hostPort": { + "host": "127.0.0.1", + "port": 8080 + } + } + ] + } + }, + "identity": { + "name": "test-identity", + "tenancy": { + "namespace": "default", + "partition": "default", + "peerName": "local" + }, + "type": { + "group": "auth", + "groupVersion": "v2beta1", + "kind": "WorkloadIdentity" + } + }, + "leafCertificates": { + "test-identity": { + "cert": "-----BEGIN CERTIFICATE-----\nMIICDjCCAbWgAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDEwlUZXN0IENB\nIDEwHhcNMjMxMDE2MTYxMzI5WhcNMjMxMDE2MTYyMzI5WjAAMFkwEwYHKoZIzj0C\nAQYIKoZIzj0DAQcDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9\nta/bGT+5orZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJaOCAQowggEGMA4GA1UdDwEB\n/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDAYDVR0TAQH/\nBAIwADApBgNVHQ4EIgQg3ogXVz9cqaK2B6xdiJYMa5NtT0KkYv7BA2dR7h9EcwUw\nKwYDVR0jBCQwIoAgq+C1mPlPoGa4lt7sSft1goN5qPGyBIB/3mUHJZKSFY8wbwYD\nVR0RAQH/BGUwY4Zhc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9hcC9kZWZhdWx0L25zL2RlZmF1bHQvaWRlbnRpdHkv\ndGVzdC1pZGVudGl0eTAKBggqhkjOPQQDAgNHADBEAiB6L+t5bzRrBPhiQYNeA7fF\nUCuLWrdjW4Xbv3SLg0IKMgIgfRC5hEx+DqzQxTCP4sexX3hVWMjKoWmHdwiUcg+K\n/IE=\n-----END CERTIFICATE-----\n", + "key": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIFIFkTIL1iUV4O/RpveVHzHs7ZzhSkvYIzbdXDttz9EooAoGCCqGSM49\nAwEHoUQDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9ta/bGT+5\norZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJQ==\n-----END EC PRIVATE KEY-----\n" + } + }, + "listeners": [ + { + "capabilities": [ + "CAPABILITY_L4_TLS_INSPECTION" + ], + "direction": "DIRECTION_INBOUND", + "hostPort": { + "host": "10.0.0.1", + "port": 20000 + }, + "name": "public_listener", + "routers": [ + { + "inboundTls": { + "inboundMesh": { + "identityKey": "test-identity", + "validationContext": { + "trustBundlePeerNameKeys": [ + "local" + ] + } + } + }, + "l4": { + "cluster": { + "name": "local_app:port1" + }, + "statPrefix": "public_listener", + "trafficPermissions": {} + }, + "match": { + "alpnProtocols": [ + "consul~port1" + ] + } + } + ] + } + ], + "trustBundles": { + "local": { + "roots": [ + "some-root", + "some-other-root" + ], + "trustDomain": "some-trust-domain" + } + } +} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/xds/testdata/source/l4-single-workload-address-without-ports.golden b/internal/mesh/internal/controllers/xds/testdata/source/l4-single-workload-address-without-ports.golden new file mode 100644 index 0000000000000..439c536fdc3bb --- /dev/null +++ b/internal/mesh/internal/controllers/xds/testdata/source/l4-single-workload-address-without-ports.golden @@ -0,0 +1,90 @@ +{ + "clusters": { + "local_app:port1": { + "endpointGroup": { + "static": {} + }, + "name": "local_app:port1", + "protocol": "PROTOCOL_TCP" + } + }, + "endpoints": { + "local_app:port1": { + "endpoints": [ + { + "hostPort": { + "host": "127.0.0.1", + "port": 8080 + } + } + ] + } + }, + "identity": { + "name": "test-identity", + "tenancy": { + "namespace": "default", + "partition": "default", + "peerName": "local" + }, + "type": { + "group": "auth", + "groupVersion": "v2beta1", + "kind": "WorkloadIdentity" + } + }, + "leafCertificates": { + "test-identity": { + "cert": "-----BEGIN CERTIFICATE-----\nMIICDjCCAbWgAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDEwlUZXN0IENB\nIDEwHhcNMjMxMDE2MTYxMzI5WhcNMjMxMDE2MTYyMzI5WjAAMFkwEwYHKoZIzj0C\nAQYIKoZIzj0DAQcDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9\nta/bGT+5orZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJaOCAQowggEGMA4GA1UdDwEB\n/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDAYDVR0TAQH/\nBAIwADApBgNVHQ4EIgQg3ogXVz9cqaK2B6xdiJYMa5NtT0KkYv7BA2dR7h9EcwUw\nKwYDVR0jBCQwIoAgq+C1mPlPoGa4lt7sSft1goN5qPGyBIB/3mUHJZKSFY8wbwYD\nVR0RAQH/BGUwY4Zhc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9hcC9kZWZhdWx0L25zL2RlZmF1bHQvaWRlbnRpdHkv\ndGVzdC1pZGVudGl0eTAKBggqhkjOPQQDAgNHADBEAiB6L+t5bzRrBPhiQYNeA7fF\nUCuLWrdjW4Xbv3SLg0IKMgIgfRC5hEx+DqzQxTCP4sexX3hVWMjKoWmHdwiUcg+K\n/IE=\n-----END CERTIFICATE-----\n", + "key": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIFIFkTIL1iUV4O/RpveVHzHs7ZzhSkvYIzbdXDttz9EooAoGCCqGSM49\nAwEHoUQDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9ta/bGT+5\norZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJQ==\n-----END EC PRIVATE KEY-----\n" + } + }, + "listeners": [ + { + "capabilities": [ + "CAPABILITY_L4_TLS_INSPECTION" + ], + "direction": "DIRECTION_INBOUND", + "hostPort": { + "host": "10.0.0.1", + "port": 20000 + }, + "name": "public_listener", + "routers": [ + { + "inboundTls": { + "inboundMesh": { + "identityKey": "test-identity", + "validationContext": { + "trustBundlePeerNameKeys": [ + "local" + ] + } + } + }, + "l4": { + "cluster": { + "name": "local_app:port1" + }, + "statPrefix": "public_listener", + "trafficPermissions": {} + }, + "match": { + "alpnProtocols": [ + "consul~port1" + ] + } + } + ] + } + ], + "trustBundles": { + "local": { + "roots": [ + "some-root", + "some-other-root" + ], + "trustDomain": "some-trust-domain" + } + } +} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/xds/testdata/source/multiple-workload-addresses-with-specific-ports.golden b/internal/mesh/internal/controllers/xds/testdata/source/multiple-workload-addresses-with-specific-ports.golden deleted file mode 100644 index b67d034c7e345..0000000000000 --- a/internal/mesh/internal/controllers/xds/testdata/source/multiple-workload-addresses-with-specific-ports.golden +++ /dev/null @@ -1,292 +0,0 @@ -{ - "clusters": { - "local_app:grpc": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:grpc", - "protocol": "PROTOCOL_GRPC" - }, - "local_app:http": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:http", - "protocol": "PROTOCOL_HTTP" - }, - "local_app:http2": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:http2", - "protocol": "PROTOCOL_HTTP2" - }, - "local_app:tcp": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:tcp", - "protocol": "PROTOCOL_TCP" - } - }, - "endpoints": { - "local_app:grpc": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8083 - } - } - ] - }, - "local_app:http": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8081 - } - } - ] - }, - "local_app:http2": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8082 - } - } - ] - }, - "local_app:tcp": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8080 - } - } - ] - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "leafCertificates": { - "test-identity": { - "cert": "-----BEGIN CERTIFICATE-----\nMIICDjCCAbWgAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDEwlUZXN0IENB\nIDEwHhcNMjMxMDE2MTYxMzI5WhcNMjMxMDE2MTYyMzI5WjAAMFkwEwYHKoZIzj0C\nAQYIKoZIzj0DAQcDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9\nta/bGT+5orZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJaOCAQowggEGMA4GA1UdDwEB\n/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDAYDVR0TAQH/\nBAIwADApBgNVHQ4EIgQg3ogXVz9cqaK2B6xdiJYMa5NtT0KkYv7BA2dR7h9EcwUw\nKwYDVR0jBCQwIoAgq+C1mPlPoGa4lt7sSft1goN5qPGyBIB/3mUHJZKSFY8wbwYD\nVR0RAQH/BGUwY4Zhc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9hcC9kZWZhdWx0L25zL2RlZmF1bHQvaWRlbnRpdHkv\ndGVzdC1pZGVudGl0eTAKBggqhkjOPQQDAgNHADBEAiB6L+t5bzRrBPhiQYNeA7fF\nUCuLWrdjW4Xbv3SLg0IKMgIgfRC5hEx+DqzQxTCP4sexX3hVWMjKoWmHdwiUcg+K\n/IE=\n-----END CERTIFICATE-----\n", - "key": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIFIFkTIL1iUV4O/RpveVHzHs7ZzhSkvYIzbdXDttz9EooAoGCCqGSM49\nAwEHoUQDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9ta/bGT+5\norZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJQ==\n-----END EC PRIVATE KEY-----\n" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "127.0.0.1", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_GRPC", - "route": { - "name": "public_listener:grpc" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~grpc" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "route": { - "name": "public_listener:http" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~http" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_HTTP2", - "route": { - "name": "public_listener:http2" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~http2" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l4": { - "cluster": { - "name": "local_app:tcp" - }, - "statPrefix": "public_listener", - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~tcp" - ] - } - } - ] - } - ], - "routes": { - "public_listener:grpc": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:grpc", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:grpc" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:http": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:http", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:http" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:http2": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:http2", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:http2" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - }, - "trustBundles": { - "local": { - "roots": [ - "some-root", - "some-other-root" - ], - "trustDomain": "some-trust-domain" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/xds/testdata/source/multiple-workload-addresses-without-ports.golden b/internal/mesh/internal/controllers/xds/testdata/source/multiple-workload-addresses-without-ports.golden deleted file mode 100644 index 8b04918948654..0000000000000 --- a/internal/mesh/internal/controllers/xds/testdata/source/multiple-workload-addresses-without-ports.golden +++ /dev/null @@ -1,292 +0,0 @@ -{ - "clusters": { - "local_app:grpc": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:grpc", - "protocol": "PROTOCOL_GRPC" - }, - "local_app:http": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:http", - "protocol": "PROTOCOL_HTTP" - }, - "local_app:http2": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:http2", - "protocol": "PROTOCOL_HTTP2" - }, - "local_app:tcp": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:tcp", - "protocol": "PROTOCOL_TCP" - } - }, - "endpoints": { - "local_app:grpc": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8083 - } - } - ] - }, - "local_app:http": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8081 - } - } - ] - }, - "local_app:http2": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8082 - } - } - ] - }, - "local_app:tcp": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8080 - } - } - ] - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "leafCertificates": { - "test-identity": { - "cert": "-----BEGIN CERTIFICATE-----\nMIICDjCCAbWgAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDEwlUZXN0IENB\nIDEwHhcNMjMxMDE2MTYxMzI5WhcNMjMxMDE2MTYyMzI5WjAAMFkwEwYHKoZIzj0C\nAQYIKoZIzj0DAQcDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9\nta/bGT+5orZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJaOCAQowggEGMA4GA1UdDwEB\n/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDAYDVR0TAQH/\nBAIwADApBgNVHQ4EIgQg3ogXVz9cqaK2B6xdiJYMa5NtT0KkYv7BA2dR7h9EcwUw\nKwYDVR0jBCQwIoAgq+C1mPlPoGa4lt7sSft1goN5qPGyBIB/3mUHJZKSFY8wbwYD\nVR0RAQH/BGUwY4Zhc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9hcC9kZWZhdWx0L25zL2RlZmF1bHQvaWRlbnRpdHkv\ndGVzdC1pZGVudGl0eTAKBggqhkjOPQQDAgNHADBEAiB6L+t5bzRrBPhiQYNeA7fF\nUCuLWrdjW4Xbv3SLg0IKMgIgfRC5hEx+DqzQxTCP4sexX3hVWMjKoWmHdwiUcg+K\n/IE=\n-----END CERTIFICATE-----\n", - "key": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIFIFkTIL1iUV4O/RpveVHzHs7ZzhSkvYIzbdXDttz9EooAoGCCqGSM49\nAwEHoUQDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9ta/bGT+5\norZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJQ==\n-----END EC PRIVATE KEY-----\n" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_GRPC", - "route": { - "name": "public_listener:grpc" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~grpc" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "route": { - "name": "public_listener:http" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~http" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_HTTP2", - "route": { - "name": "public_listener:http2" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~http2" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l4": { - "cluster": { - "name": "local_app:tcp" - }, - "statPrefix": "public_listener", - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~tcp" - ] - } - } - ] - } - ], - "routes": { - "public_listener:grpc": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:grpc", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:grpc" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:http": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:http", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:http" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:http2": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:http2", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:http2" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - }, - "trustBundles": { - "local": { - "roots": [ - "some-root", - "some-other-root" - ], - "trustDomain": "some-trust-domain" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/controllers/xds/testdata/source/single-workload-address-without-ports.golden b/internal/mesh/internal/controllers/xds/testdata/source/single-workload-address-without-ports.golden deleted file mode 100644 index 8b04918948654..0000000000000 --- a/internal/mesh/internal/controllers/xds/testdata/source/single-workload-address-without-ports.golden +++ /dev/null @@ -1,292 +0,0 @@ -{ - "clusters": { - "local_app:grpc": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:grpc", - "protocol": "PROTOCOL_GRPC" - }, - "local_app:http": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:http", - "protocol": "PROTOCOL_HTTP" - }, - "local_app:http2": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:http2", - "protocol": "PROTOCOL_HTTP2" - }, - "local_app:tcp": { - "endpointGroup": { - "static": {} - }, - "name": "local_app:tcp", - "protocol": "PROTOCOL_TCP" - } - }, - "endpoints": { - "local_app:grpc": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8083 - } - } - ] - }, - "local_app:http": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8081 - } - } - ] - }, - "local_app:http2": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8082 - } - } - ] - }, - "local_app:tcp": { - "endpoints": [ - { - "hostPort": { - "host": "127.0.0.1", - "port": 8080 - } - } - ] - } - }, - "identity": { - "name": "test-identity", - "tenancy": { - "namespace": "default", - "partition": "default", - "peerName": "local" - }, - "type": { - "group": "auth", - "groupVersion": "v2beta1", - "kind": "WorkloadIdentity" - } - }, - "leafCertificates": { - "test-identity": { - "cert": "-----BEGIN CERTIFICATE-----\nMIICDjCCAbWgAwIBAgIBAjAKBggqhkjOPQQDAjAUMRIwEAYDVQQDEwlUZXN0IENB\nIDEwHhcNMjMxMDE2MTYxMzI5WhcNMjMxMDE2MTYyMzI5WjAAMFkwEwYHKoZIzj0C\nAQYIKoZIzj0DAQcDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9\nta/bGT+5orZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJaOCAQowggEGMA4GA1UdDwEB\n/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDAYDVR0TAQH/\nBAIwADApBgNVHQ4EIgQg3ogXVz9cqaK2B6xdiJYMa5NtT0KkYv7BA2dR7h9EcwUw\nKwYDVR0jBCQwIoAgq+C1mPlPoGa4lt7sSft1goN5qPGyBIB/3mUHJZKSFY8wbwYD\nVR0RAQH/BGUwY4Zhc3BpZmZlOi8vMTExMTExMTEtMjIyMi0zMzMzLTQ0NDQtNTU1\nNTU1NTU1NTU1LmNvbnN1bC9hcC9kZWZhdWx0L25zL2RlZmF1bHQvaWRlbnRpdHkv\ndGVzdC1pZGVudGl0eTAKBggqhkjOPQQDAgNHADBEAiB6L+t5bzRrBPhiQYNeA7fF\nUCuLWrdjW4Xbv3SLg0IKMgIgfRC5hEx+DqzQxTCP4sexX3hVWMjKoWmHdwiUcg+K\n/IE=\n-----END CERTIFICATE-----\n", - "key": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIFIFkTIL1iUV4O/RpveVHzHs7ZzhSkvYIzbdXDttz9EooAoGCCqGSM49\nAwEHoUQDQgAErErAIosDPheZQGbxFQ4hYC/e9Fi4MG9z/zjfCnCq/oK9ta/bGT+5\norZqTmdN/ICsKQDhykxZ2u/Xr6845zhcJQ==\n-----END EC PRIVATE KEY-----\n" - } - }, - "listeners": [ - { - "capabilities": [ - "CAPABILITY_L4_TLS_INSPECTION" - ], - "direction": "DIRECTION_INBOUND", - "hostPort": { - "host": "10.0.0.1", - "port": 20000 - }, - "name": "public_listener", - "routers": [ - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_GRPC", - "route": { - "name": "public_listener:grpc" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~grpc" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "route": { - "name": "public_listener:http" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~http" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l7": { - "protocol": "L7_PROTOCOL_HTTP2", - "route": { - "name": "public_listener:http2" - }, - "statPrefix": "public_listener", - "staticRoute": true, - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~http2" - ] - } - }, - { - "inboundTls": { - "inboundMesh": { - "identityKey": "test-identity", - "validationContext": { - "trustBundlePeerNameKeys": [ - "local" - ] - } - } - }, - "l4": { - "cluster": { - "name": "local_app:tcp" - }, - "statPrefix": "public_listener", - "trafficPermissions": {} - }, - "match": { - "alpnProtocols": [ - "consul~tcp" - ] - } - } - ] - } - ], - "routes": { - "public_listener:grpc": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:grpc", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:grpc" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:http": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:http", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:http" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - }, - "public_listener:http2": { - "virtualHosts": [ - { - "domains": [ - "*" - ], - "name": "public_listener:http2", - "routeRules": [ - { - "destination": { - "cluster": { - "name": "local_app:http2" - } - }, - "match": { - "pathMatch": { - "prefix": "/" - } - } - } - ] - } - ] - } - }, - "trustBundles": { - "local": { - "roots": [ - "some-root", - "some-other-root" - ], - "trustDomain": "some-trust-domain" - } - } -} \ No newline at end of file diff --git a/internal/mesh/internal/types/computed_routes.go b/internal/mesh/internal/types/computed_routes.go index b572c01fc3764..1f66cc97ac211 100644 --- a/internal/mesh/internal/types/computed_routes.go +++ b/internal/mesh/internal/types/computed_routes.go @@ -11,6 +11,7 @@ import ( "github.com/hashicorp/consul/internal/resource" pbmesh "github.com/hashicorp/consul/proto-public/pbmesh/v2beta1" + "github.com/hashicorp/consul/proto-public/pbresource" ) const ( @@ -29,12 +30,16 @@ func RegisterComputedRoutes(r resource.Registry) { }) } -var ValidateComputedRoutes = resource.DecodeAndValidate(validateComputedRoutes) +func ValidateComputedRoutes(res *pbresource.Resource) error { + var config pbmesh.ComputedRoutes + + if err := res.Data.UnmarshalTo(&config); err != nil { + return resource.NewErrDataParse(&config, err) + } -func validateComputedRoutes(res *DecodedComputedRoutes) error { var merr error - if len(res.Data.PortedConfigs) == 0 { + if len(config.PortedConfigs) == 0 { merr = multierror.Append(merr, resource.ErrInvalidField{ Name: "ported_configs", Wrapped: resource.ErrEmpty, @@ -43,7 +48,7 @@ func validateComputedRoutes(res *DecodedComputedRoutes) error { // TODO(rb): do more elaborate validation - for port, pmc := range res.Data.PortedConfigs { + for port, pmc := range config.PortedConfigs { wrapErr := func(err error) error { return resource.ErrInvalidMapValue{ Map: "ported_configs", diff --git a/internal/mesh/internal/types/decoded.go b/internal/mesh/internal/types/decoded.go index be4836c066ff7..ee1244fdcb1bc 100644 --- a/internal/mesh/internal/types/decoded.go +++ b/internal/mesh/internal/types/decoded.go @@ -15,7 +15,6 @@ type ( DecodedGRPCRoute = resource.DecodedResource[*pbmesh.GRPCRoute] DecodedTCPRoute = resource.DecodedResource[*pbmesh.TCPRoute] DecodedDestinationPolicy = resource.DecodedResource[*pbmesh.DestinationPolicy] - DecodedDestinationsConfiguration = resource.DecodedResource[*pbmesh.DestinationsConfiguration] DecodedComputedRoutes = resource.DecodedResource[*pbmesh.ComputedRoutes] DecodedComputedTrafficPermissions = resource.DecodedResource[*pbauth.ComputedTrafficPermissions] DecodedFailoverPolicy = resource.DecodedResource[*pbcatalog.FailoverPolicy] diff --git a/internal/mesh/internal/types/destination_policy.go b/internal/mesh/internal/types/destination_policy.go index 4fe3062367cf5..68b37345baf3e 100644 --- a/internal/mesh/internal/types/destination_policy.go +++ b/internal/mesh/internal/types/destination_policy.go @@ -29,19 +29,23 @@ func RegisterDestinationPolicy(r resource.Registry) { }) } -var ValidateDestinationPolicy = resource.DecodeAndValidate(validateDestinationPolicy) +func ValidateDestinationPolicy(res *pbresource.Resource) error { + var policy pbmesh.DestinationPolicy + + if err := res.Data.UnmarshalTo(&policy); err != nil { + return resource.NewErrDataParse(&policy, err) + } -func validateDestinationPolicy(res *DecodedDestinationPolicy) error { var merr error - if len(res.Data.PortConfigs) == 0 { + if len(policy.PortConfigs) == 0 { merr = multierror.Append(merr, resource.ErrInvalidField{ Name: "port_configs", Wrapped: resource.ErrEmpty, }) } - for port, pc := range res.Data.PortConfigs { + for port, pc := range policy.PortConfigs { wrapErr := func(err error) error { return resource.ErrInvalidMapValue{ Map: "port_configs", diff --git a/internal/mesh/internal/types/destinations.go b/internal/mesh/internal/types/destinations.go index 7de3011e3ef0a..34287e627ab71 100644 --- a/internal/mesh/internal/types/destinations.go +++ b/internal/mesh/internal/types/destinations.go @@ -26,12 +26,16 @@ func RegisterDestinations(r resource.Registry) { }) } -var MutateDestinations = resource.DecodeAndMutate(mutateDestinations) +func MutateDestinations(res *pbresource.Resource) error { + var destinations pbmesh.Destinations + + if err := res.Data.UnmarshalTo(&destinations); err != nil { + return resource.NewErrDataParse(&destinations, err) + } -func mutateDestinations(res *DecodedDestinations) (bool, error) { changed := false - for _, dest := range res.Data.Destinations { + for _, dest := range destinations.Destinations { if dest.DestinationRef == nil { continue // skip; let the validation hook error out instead } @@ -52,33 +56,41 @@ func mutateDestinations(res *DecodedDestinations) (bool, error) { } } - return changed, nil + if !changed { + return nil + } + + return res.Data.MarshalFrom(&destinations) } func isLocalPeer(p string) bool { return p == "local" || p == "" } -var ValidateDestinations = resource.DecodeAndValidate(validateDestinations) +func ValidateDestinations(res *pbresource.Resource) error { + var destinations pbmesh.Destinations + + if err := res.Data.UnmarshalTo(&destinations); err != nil { + return resource.NewErrDataParse(&destinations, err) + } -func validateDestinations(res *DecodedDestinations) error { var merr error - if selErr := catalog.ValidateSelector(res.Data.Workloads, false); selErr != nil { + if selErr := catalog.ValidateSelector(destinations.Workloads, false); selErr != nil { merr = multierror.Append(merr, resource.ErrInvalidField{ Name: "workloads", Wrapped: selErr, }) } - if res.Data.GetPqDestinations() != nil { + if destinations.GetPqDestinations() != nil { merr = multierror.Append(merr, resource.ErrInvalidField{ Name: "pq_destinations", Wrapped: resource.ErrUnsupported, }) } - for i, dest := range res.Data.Destinations { + for i, dest := range destinations.Destinations { wrapDestErr := func(err error) error { return resource.ErrInvalidListElement{ Name: "destinations", diff --git a/internal/mesh/internal/types/destinations_configuration.go b/internal/mesh/internal/types/destinations_configuration.go index 7d46d93ed9993..fedbe40df48c1 100644 --- a/internal/mesh/internal/types/destinations_configuration.go +++ b/internal/mesh/internal/types/destinations_configuration.go @@ -10,6 +10,7 @@ import ( "github.com/hashicorp/consul/internal/resource" pbmesh "github.com/hashicorp/consul/proto-public/pbmesh/v2beta1" + "github.com/hashicorp/consul/proto-public/pbresource" ) func RegisterDestinationsConfiguration(r resource.Registry) { @@ -22,13 +23,17 @@ func RegisterDestinationsConfiguration(r resource.Registry) { }) } -var ValidateDestinationsConfiguration = resource.DecodeAndValidate(validateDestinationsConfiguration) +func ValidateDestinationsConfiguration(res *pbresource.Resource) error { + var cfg pbmesh.DestinationsConfiguration + + if err := res.Data.UnmarshalTo(&cfg); err != nil { + return resource.NewErrDataParse(&cfg, err) + } -func validateDestinationsConfiguration(res *DecodedDestinationsConfiguration) error { var merr error // Validate the workload selector - if selErr := catalog.ValidateSelector(res.Data.Workloads, false); selErr != nil { + if selErr := catalog.ValidateSelector(cfg.Workloads, false); selErr != nil { merr = multierror.Append(merr, resource.ErrInvalidField{ Name: "workloads", Wrapped: selErr, diff --git a/internal/mesh/internal/types/grpc_route.go b/internal/mesh/internal/types/grpc_route.go index b861abccdc050..630e416e611c4 100644 --- a/internal/mesh/internal/types/grpc_route.go +++ b/internal/mesh/internal/types/grpc_route.go @@ -11,6 +11,7 @@ import ( "github.com/hashicorp/consul/internal/resource" pbmesh "github.com/hashicorp/consul/proto-public/pbmesh/v2beta1" + "github.com/hashicorp/consul/proto-public/pbresource" ) func RegisterGRPCRoute(r resource.Registry) { @@ -24,16 +25,20 @@ func RegisterGRPCRoute(r resource.Registry) { }) } -var MutateGRPCRoute = resource.DecodeAndMutate(mutateGRPCRoute) +func MutateGRPCRoute(res *pbresource.Resource) error { + var route pbmesh.GRPCRoute + + if err := res.Data.UnmarshalTo(&route); err != nil { + return resource.NewErrDataParse(&route, err) + } -func mutateGRPCRoute(res *DecodedGRPCRoute) (bool, error) { changed := false - if mutateParentRefs(res.Id.Tenancy, res.Data.ParentRefs) { + if mutateParentRefs(res.Id.Tenancy, route.ParentRefs) { changed = true } - for _, rule := range res.Data.Rules { + for _, rule := range route.Rules { for _, backend := range rule.BackendRefs { if backend.BackendRef == nil || backend.BackendRef.Ref == nil { continue @@ -44,25 +49,33 @@ func mutateGRPCRoute(res *DecodedGRPCRoute) (bool, error) { } } - return changed, nil + if !changed { + return nil + } + + return res.Data.MarshalFrom(&route) } -var ValidateGRPCRoute = resource.DecodeAndValidate(validateGRPCRoute) +func ValidateGRPCRoute(res *pbresource.Resource) error { + var route pbmesh.GRPCRoute + + if err := res.Data.UnmarshalTo(&route); err != nil { + return resource.NewErrDataParse(&route, err) + } -func validateGRPCRoute(res *DecodedGRPCRoute) error { var merr error - if err := validateParentRefs(res.Id, res.Data.ParentRefs); err != nil { + if err := validateParentRefs(res.Id, route.ParentRefs); err != nil { merr = multierror.Append(merr, err) } - if len(res.Data.Hostnames) > 0 { + if len(route.Hostnames) > 0 { merr = multierror.Append(merr, resource.ErrInvalidField{ Name: "hostnames", Wrapped: errors.New("should not populate hostnames"), }) } - for i, rule := range res.Data.Rules { + for i, rule := range route.Rules { wrapRuleErr := func(err error) error { return resource.ErrInvalidListElement{ Name: "rules", diff --git a/internal/mesh/internal/types/http_route.go b/internal/mesh/internal/types/http_route.go index d32f55dc6cc82..0ac2dcbf5c8b0 100644 --- a/internal/mesh/internal/types/http_route.go +++ b/internal/mesh/internal/types/http_route.go @@ -13,6 +13,7 @@ import ( "github.com/hashicorp/consul/internal/resource" pbmesh "github.com/hashicorp/consul/proto-public/pbmesh/v2beta1" + "github.com/hashicorp/consul/proto-public/pbresource" ) func RegisterHTTPRoute(r resource.Registry) { @@ -26,16 +27,20 @@ func RegisterHTTPRoute(r resource.Registry) { }) } -var MutateHTTPRoute = resource.DecodeAndMutate(mutateHTTPRoute) +func MutateHTTPRoute(res *pbresource.Resource) error { + var route pbmesh.HTTPRoute + + if err := res.Data.UnmarshalTo(&route); err != nil { + return resource.NewErrDataParse(&route, err) + } -func mutateHTTPRoute(res *DecodedHTTPRoute) (bool, error) { changed := false - if mutateParentRefs(res.Id.Tenancy, res.Data.ParentRefs) { + if mutateParentRefs(res.Id.Tenancy, route.ParentRefs) { changed = true } - for _, rule := range res.Data.Rules { + for _, rule := range route.Rules { for _, match := range rule.Matches { if match.Method != "" { norm := strings.ToUpper(match.Method) @@ -55,25 +60,33 @@ func mutateHTTPRoute(res *DecodedHTTPRoute) (bool, error) { } } - return changed, nil + if !changed { + return nil + } + + return res.Data.MarshalFrom(&route) } -var ValidateHTTPRoute = resource.DecodeAndValidate(validateHTTPRoute) +func ValidateHTTPRoute(res *pbresource.Resource) error { + var route pbmesh.HTTPRoute + + if err := res.Data.UnmarshalTo(&route); err != nil { + return resource.NewErrDataParse(&route, err) + } -func validateHTTPRoute(res *DecodedHTTPRoute) error { var merr error - if err := validateParentRefs(res.Id, res.Data.ParentRefs); err != nil { + if err := validateParentRefs(res.Id, route.ParentRefs); err != nil { merr = multierror.Append(merr, err) } - if len(res.Data.Hostnames) > 0 { + if len(route.Hostnames) > 0 { merr = multierror.Append(merr, resource.ErrInvalidField{ Name: "hostnames", Wrapped: errors.New("should not populate hostnames"), }) } - for i, rule := range res.Data.Rules { + for i, rule := range route.Rules { wrapRuleErr := func(err error) error { return resource.ErrInvalidListElement{ Name: "rules", diff --git a/internal/mesh/internal/types/mesh_gateway.go b/internal/mesh/internal/types/mesh_gateway.go deleted file mode 100644 index 3c652bcc790eb..0000000000000 --- a/internal/mesh/internal/types/mesh_gateway.go +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: BUSL-1.1 - -package types - -import ( - "github.com/hashicorp/consul/internal/resource" - pbmesh "github.com/hashicorp/consul/proto-public/pbmesh/v2beta1" -) - -func RegisterMeshGateway(r resource.Registry) { - r.Register(resource.Registration{ - Type: pbmesh.MeshGatewayType, - Proto: &pbmesh.MeshGateway{}, - Scope: resource.ScopePartition, - ACLs: nil, // TODO NET-6423 - Mutate: nil, // TODO NET-6425 - Validate: nil, // TODO NET-6424 - }) -} diff --git a/internal/mesh/internal/types/proxy_configuration.go b/internal/mesh/internal/types/proxy_configuration.go index 9a4388a40f01d..081324d721675 100644 --- a/internal/mesh/internal/types/proxy_configuration.go +++ b/internal/mesh/internal/types/proxy_configuration.go @@ -12,6 +12,7 @@ import ( "github.com/hashicorp/consul/internal/resource" pbmesh "github.com/hashicorp/consul/proto-public/pbmesh/v2beta1" + "github.com/hashicorp/consul/proto-public/pbresource" "github.com/hashicorp/consul/sdk/iptables" ) @@ -26,40 +27,52 @@ func RegisterProxyConfiguration(r resource.Registry) { }) } -var MutateProxyConfiguration = resource.DecodeAndMutate(mutateProxyConfiguration) +func MutateProxyConfiguration(res *pbresource.Resource) error { + var proxyCfg pbmesh.ProxyConfiguration + err := res.Data.UnmarshalTo(&proxyCfg) + if err != nil { + return resource.NewErrDataParse(&proxyCfg, err) + } -func mutateProxyConfiguration(res *DecodedProxyConfiguration) (bool, error) { changed := false // Default the tproxy outbound port. - if res.Data.IsTransparentProxy() { - if res.Data.GetDynamicConfig().GetTransparentProxy() == nil { - res.Data.DynamicConfig.TransparentProxy = &pbmesh.TransparentProxy{ + if proxyCfg.IsTransparentProxy() { + if proxyCfg.GetDynamicConfig().GetTransparentProxy() == nil { + proxyCfg.DynamicConfig.TransparentProxy = &pbmesh.TransparentProxy{ OutboundListenerPort: iptables.DefaultTProxyOutboundPort, } changed = true - } else if res.Data.GetDynamicConfig().GetTransparentProxy().OutboundListenerPort == 0 { - res.Data.DynamicConfig.TransparentProxy.OutboundListenerPort = iptables.DefaultTProxyOutboundPort + } else if proxyCfg.GetDynamicConfig().GetTransparentProxy().OutboundListenerPort == 0 { + proxyCfg.DynamicConfig.TransparentProxy.OutboundListenerPort = iptables.DefaultTProxyOutboundPort changed = true } } - return changed, nil + if !changed { + return nil + } + + return res.Data.MarshalFrom(&proxyCfg) } -var ValidateProxyConfiguration = resource.DecodeAndValidate(validateProxyConfiguration) +func ValidateProxyConfiguration(res *pbresource.Resource) error { + decodedProxyCfg, decodeErr := resource.Decode[*pbmesh.ProxyConfiguration](res) + if decodeErr != nil { + return resource.NewErrDataParse(decodedProxyCfg.GetData(), decodeErr) + } + proxyCfg := decodedProxyCfg.GetData() -func validateProxyConfiguration(res *DecodedProxyConfiguration) error { var err error - if selErr := catalog.ValidateSelector(res.Data.Workloads, false); selErr != nil { + if selErr := catalog.ValidateSelector(proxyCfg.Workloads, false); selErr != nil { err = multierror.Append(err, resource.ErrInvalidField{ Name: "workloads", Wrapped: selErr, }) } - if res.Data.GetDynamicConfig() == nil && res.Data.GetBootstrapConfig() == nil { + if proxyCfg.GetDynamicConfig() == nil && proxyCfg.GetBootstrapConfig() == nil { err = multierror.Append(err, resource.ErrInvalidFields{ Names: []string{"dynamic_config", "bootstrap_config"}, Wrapped: errMissingProxyConfigData, @@ -67,14 +80,14 @@ func validateProxyConfiguration(res *DecodedProxyConfiguration) error { } // nolint:staticcheck - if res.Data.GetOpaqueConfig() != nil { + if proxyCfg.GetOpaqueConfig() != nil { err = multierror.Append(err, resource.ErrInvalidField{ Name: "opaque_config", Wrapped: resource.ErrUnsupported, }) } - if dynamicCfgErr := validateDynamicProxyConfiguration(res.Data.GetDynamicConfig()); dynamicCfgErr != nil { + if dynamicCfgErr := validateDynamicProxyConfiguration(proxyCfg.GetDynamicConfig()); dynamicCfgErr != nil { err = multierror.Append(err, resource.ErrInvalidField{ Name: "dynamic_config", Wrapped: dynamicCfgErr, diff --git a/internal/mesh/internal/types/proxy_state_template.go b/internal/mesh/internal/types/proxy_state_template.go index 43d2148217e03..7db3dbaf55fd9 100644 --- a/internal/mesh/internal/types/proxy_state_template.go +++ b/internal/mesh/internal/types/proxy_state_template.go @@ -50,21 +50,25 @@ func RegisterProxyStateTemplate(r resource.Registry) { }) } -var ValidateProxyStateTemplate = resource.DecodeAndValidate(validateProxyStateTemplate) - -func validateProxyStateTemplate(res *DecodedProxyStateTemplate) error { +func ValidateProxyStateTemplate(res *pbresource.Resource) error { // TODO(v2): validate a lot more of this + var pst pbmesh.ProxyStateTemplate + + if err := res.Data.UnmarshalTo(&pst); err != nil { + return resource.NewErrDataParse(&pst, err) + } + var merr error - if res.Data.ProxyState != nil { + if pst.ProxyState != nil { wrapProxyStateErr := func(err error) error { return resource.ErrInvalidField{ Name: "proxy_state", Wrapped: err, } } - for name, cluster := range res.Data.ProxyState.Clusters { + for name, cluster := range pst.ProxyState.Clusters { if name == "" { merr = multierror.Append(merr, wrapProxyStateErr(resource.ErrInvalidMapKey{ Map: "clusters", diff --git a/internal/mesh/internal/types/tcp_route.go b/internal/mesh/internal/types/tcp_route.go index 02dd5aaa10fdd..c7470b14d55ae 100644 --- a/internal/mesh/internal/types/tcp_route.go +++ b/internal/mesh/internal/types/tcp_route.go @@ -10,6 +10,7 @@ import ( "github.com/hashicorp/consul/internal/resource" pbmesh "github.com/hashicorp/consul/proto-public/pbmesh/v2beta1" + "github.com/hashicorp/consul/proto-public/pbresource" ) func RegisterTCPRoute(r resource.Registry) { @@ -23,16 +24,20 @@ func RegisterTCPRoute(r resource.Registry) { }) } -var MutateTCPRoute = resource.DecodeAndMutate(mutateTCPRoute) +func MutateTCPRoute(res *pbresource.Resource) error { + var route pbmesh.TCPRoute + + if err := res.Data.UnmarshalTo(&route); err != nil { + return resource.NewErrDataParse(&route, err) + } -func mutateTCPRoute(res *DecodedTCPRoute) (bool, error) { changed := false - if mutateParentRefs(res.Id.Tenancy, res.Data.ParentRefs) { + if mutateParentRefs(res.Id.Tenancy, route.ParentRefs) { changed = true } - for _, rule := range res.Data.Rules { + for _, rule := range route.Rules { for _, backend := range rule.BackendRefs { if backend.BackendRef == nil || backend.BackendRef.Ref == nil { continue @@ -43,26 +48,34 @@ func mutateTCPRoute(res *DecodedTCPRoute) (bool, error) { } } - return changed, nil + if !changed { + return nil + } + + return res.Data.MarshalFrom(&route) } -var ValidateTCPRoute = resource.DecodeAndValidate(validateTCPRoute) +func ValidateTCPRoute(res *pbresource.Resource) error { + var route pbmesh.TCPRoute + + if err := res.Data.UnmarshalTo(&route); err != nil { + return resource.NewErrDataParse(&route, err) + } -func validateTCPRoute(res *DecodedTCPRoute) error { var merr error - if err := validateParentRefs(res.Id, res.Data.ParentRefs); err != nil { + if err := validateParentRefs(res.Id, route.ParentRefs); err != nil { merr = multierror.Append(merr, err) } - if len(res.Data.Rules) > 1 { + if len(route.Rules) > 1 { merr = multierror.Append(merr, resource.ErrInvalidField{ Name: "rules", Wrapped: fmt.Errorf("must only specify a single rule for now"), }) } - for i, rule := range res.Data.Rules { + for i, rule := range route.Rules { wrapRuleErr := func(err error) error { return resource.ErrInvalidListElement{ Name: "rules", diff --git a/internal/mesh/internal/types/types.go b/internal/mesh/internal/types/types.go index 69f99c8984ae7..cf1443aabf18d 100644 --- a/internal/mesh/internal/types/types.go +++ b/internal/mesh/internal/types/types.go @@ -18,7 +18,6 @@ func Register(r resource.Registry) { RegisterGRPCRoute(r) RegisterDestinationPolicy(r) RegisterComputedRoutes(r) - RegisterMeshGateway(r) // todo (v2): uncomment once we implement it. //RegisterDestinationsConfiguration(r) } diff --git a/internal/mesh/internal/types/xroute.go b/internal/mesh/internal/types/xroute.go index 92e2136cd1356..619c9cb682435 100644 --- a/internal/mesh/internal/types/xroute.go +++ b/internal/mesh/internal/types/xroute.go @@ -288,17 +288,28 @@ func isValidRetryCondition(retryOn string) bool { func xRouteACLHooks[R XRouteData]() *resource.ACLHooks { hooks := &resource.ACLHooks{ - Read: resource.DecodeAndAuthorizeRead(aclReadHookXRoute[R]), - Write: resource.DecodeAndAuthorizeWrite(aclWriteHookXRoute[R]), + Read: aclReadHookXRoute[R], + Write: aclWriteHookXRoute[R], List: resource.NoOpACLListHook, } return hooks } -func aclReadHookXRoute[R XRouteData](authorizer acl.Authorizer, _ *acl.AuthorizerContext, res *resource.DecodedResource[R]) error { +func aclReadHookXRoute[R XRouteData](authorizer acl.Authorizer, _ *acl.AuthorizerContext, _ *pbresource.ID, res *pbresource.Resource) error { + if res == nil { + return resource.ErrNeedResource + } + + dec, err := resource.Decode[R](res) + if err != nil { + return err + } + + route := dec.Data + // Need service:read on ALL of the services this is controlling traffic for. - for _, parentRef := range res.Data.GetParentRefs() { + for _, parentRef := range route.GetParentRefs() { parentAuthzContext := resource.AuthorizerContext(parentRef.Ref.GetTenancy()) parentServiceName := parentRef.Ref.GetName() @@ -310,9 +321,16 @@ func aclReadHookXRoute[R XRouteData](authorizer acl.Authorizer, _ *acl.Authorize return nil } -func aclWriteHookXRoute[R XRouteData](authorizer acl.Authorizer, _ *acl.AuthorizerContext, res *resource.DecodedResource[R]) error { +func aclWriteHookXRoute[R XRouteData](authorizer acl.Authorizer, _ *acl.AuthorizerContext, res *pbresource.Resource) error { + dec, err := resource.Decode[R](res) + if err != nil { + return err + } + + route := dec.Data + // Need service:write on ALL of the services this is controlling traffic for. - for _, parentRef := range res.Data.GetParentRefs() { + for _, parentRef := range route.GetParentRefs() { parentAuthzContext := resource.AuthorizerContext(parentRef.Ref.GetTenancy()) parentServiceName := parentRef.Ref.GetName() @@ -322,7 +340,7 @@ func aclWriteHookXRoute[R XRouteData](authorizer acl.Authorizer, _ *acl.Authoriz } // Need service:read on ALL of the services this directs traffic at. - for _, backendRef := range res.Data.GetUnderlyingBackendRefs() { + for _, backendRef := range route.GetUnderlyingBackendRefs() { backendAuthzContext := resource.AuthorizerContext(backendRef.Ref.GetTenancy()) backendServiceName := backendRef.Ref.GetName() diff --git a/internal/mesh/proxy-tracker/proxy_tracker.go b/internal/mesh/proxy-tracker/proxy_tracker.go index f60cacb5cd1e4..d9dae03a13cde 100644 --- a/internal/mesh/proxy-tracker/proxy_tracker.go +++ b/internal/mesh/proxy-tracker/proxy_tracker.go @@ -6,7 +6,6 @@ package proxytracker import ( "errors" "fmt" - "github.com/hashicorp/consul/lib/channels" "sync" "github.com/hashicorp/go-hclog" @@ -208,8 +207,32 @@ func (pt *ProxyTracker) PushChange(proxyID *pbresource.ID, proxyState proxysnaps func (pt *ProxyTracker) deliverLatest(proxyID *pbresource.ID, proxyState proxysnapshot.ProxySnapshot, ch chan proxysnapshot.ProxySnapshot) { pt.config.Logger.Trace("delivering latest proxy snapshot to proxy", "proxyID", proxyID) - err := channels.DeliverLatest(proxyState, ch) - if err != nil { + // Send if chan is empty + select { + case ch <- proxyState: + return + default: + } + + // Not empty, drain the chan of older snapshots and redeliver. For now we only + // use 1-buffered chans but this will still work if we change that later. +OUTER: + for { + select { + case <-ch: + continue + default: + break OUTER + } + } + + // Now send again + select { + case ch <- proxyState: + return + default: + // This should not be possible since we should be the only sender, enforced + // by m.mu but error and drop the update rather than panic. pt.config.Logger.Error("failed to deliver proxyState to proxy", "proxy", proxyID.String(), ) diff --git a/internal/multicluster/exports.go b/internal/multicluster/exports.go deleted file mode 100644 index a4fc9a6e5d7a3..0000000000000 --- a/internal/multicluster/exports.go +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: BUSL-1.1 - -package multicluster - -import ( - "github.com/hashicorp/consul/internal/controller" - "github.com/hashicorp/consul/internal/multicluster/internal/controllers" - "github.com/hashicorp/consul/internal/multicluster/internal/types" - "github.com/hashicorp/consul/internal/resource" -) - -var ( - // API Group Information - APIGroup = types.GroupName - VersionV2Beta1 = types.VersionV2Beta1 - CurrentVersion = types.CurrentVersion -) - -// RegisterTypes adds all resource types within the "multicluster" API group -// to the given type registry -func RegisterTypes(r resource.Registry) { - types.Register(r) -} - -// RegisterControllers registers controllers for the multicluster types with -// the given controller Manager. -func RegisterControllers(mgr *controller.Manager) { - controllers.Register(mgr) -} diff --git a/internal/multicluster/internal/controllers/exportedservices/controller.go b/internal/multicluster/internal/controllers/exportedservices/controller.go deleted file mode 100644 index ba7e42f36cce7..0000000000000 --- a/internal/multicluster/internal/controllers/exportedservices/controller.go +++ /dev/null @@ -1,340 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: BUSL-1.1 - -package exportedservices - -import ( - "context" - "fmt" - "sort" - - "google.golang.org/protobuf/proto" - "google.golang.org/protobuf/types/known/anypb" - - "github.com/hashicorp/consul/internal/controller" - "github.com/hashicorp/consul/internal/multicluster/internal/types" - "github.com/hashicorp/consul/internal/resource" - "github.com/hashicorp/consul/internal/storage" - pbcatalog "github.com/hashicorp/consul/proto-public/pbcatalog/v2beta1" - pbmulticluster "github.com/hashicorp/consul/proto-public/pbmulticluster/v2beta1" - "github.com/hashicorp/consul/proto-public/pbresource" -) - -func Controller() controller.Controller { - - return controller.ForType(pbmulticluster.ComputedExportedServicesType). - WithWatch(pbmulticluster.ExportedServicesType, ReplaceTypeForComputedExportedServices()). - WithWatch(pbcatalog.ServiceType, ReplaceTypeForComputedExportedServices()). - WithWatch(pbmulticluster.NamespaceExportedServicesType, ReplaceTypeForComputedExportedServices()). - WithWatch(pbmulticluster.PartitionExportedServicesType, ReplaceTypeForComputedExportedServices()). - WithReconciler(&reconciler{}) -} - -type reconciler struct{} - -type serviceExports struct { - ref *pbresource.Reference - partitions map[string]struct{} - peers map[string]struct{} -} - -func (r *reconciler) Reconcile(ctx context.Context, rt controller.Runtime, req controller.Request) error { - rt.Logger = rt.Logger.With("resource-id", req.ID) - rt.Logger.Trace("reconciling exported services") - exportedServices, err := resource.ListDecodedResource[*pbmulticluster.ExportedServices](ctx, rt.Client, &pbresource.ListRequest{ - Tenancy: &pbresource.Tenancy{ - Namespace: storage.Wildcard, - Partition: req.ID.Tenancy.Partition, - PeerName: resource.DefaultPeerName, - }, - Type: pbmulticluster.ExportedServicesType, - }) - if err != nil { - rt.Logger.Error("error getting exported services", "error", err) - return err - } - namespaceExportedServices, err := resource.ListDecodedResource[*pbmulticluster.NamespaceExportedServices](ctx, rt.Client, &pbresource.ListRequest{ - Tenancy: &pbresource.Tenancy{ - Namespace: storage.Wildcard, - Partition: req.ID.Tenancy.Partition, - PeerName: resource.DefaultPeerName, - }, - Type: pbmulticluster.NamespaceExportedServicesType, - }) - if err != nil { - rt.Logger.Error("error getting namespace exported services", "error", err) - return err - } - partitionedExportedServices, err := resource.ListDecodedResource[*pbmulticluster.PartitionExportedServices](ctx, rt.Client, &pbresource.ListRequest{ - Tenancy: &pbresource.Tenancy{ - Partition: req.ID.Tenancy.Partition, - PeerName: resource.DefaultPeerName, - }, - Type: pbmulticluster.PartitionExportedServicesType, - }) - if err != nil { - rt.Logger.Error("error getting partitioned exported services", "error", err) - return err - } - oldComputedExportedService, err := getOldComputedExportedService(ctx, rt, req) - if err != nil { - return err - } - if len(exportedServices) == 0 && len(namespaceExportedServices) == 0 && len(partitionedExportedServices) == 0 { - if oldComputedExportedService.GetResource() != nil { - rt.Logger.Trace("deleting computed exported services") - if err := deleteResource(ctx, rt, oldComputedExportedService.GetResource()); err != nil { - rt.Logger.Error("error deleting computed exported service", "error", err) - return err - } - } - return nil - } - namespace := getNamespaceForServices(exportedServices, namespaceExportedServices, partitionedExportedServices) - services, err := resource.ListDecodedResource[*pbcatalog.Service](ctx, rt.Client, &pbresource.ListRequest{ - Tenancy: &pbresource.Tenancy{ - Namespace: namespace, - Partition: req.ID.Tenancy.Partition, - PeerName: resource.DefaultPeerName, - }, - Type: pbcatalog.ServiceType, - }) - if err != nil { - rt.Logger.Error("error getting services", "error", err) - return err - } - builder := newExportedServicesBuilder() - - svcs := make(map[resource.ReferenceKey]struct{}, len(services)) - for _, svc := range services { - svcs[resource.NewReferenceKey(svc.Id)] = struct{}{} - } - - for _, es := range exportedServices { - for _, svc := range es.Data.Services { - id := &pbresource.ID{ - Type: pbcatalog.ServiceType, - Tenancy: es.Id.Tenancy, - Name: svc, - } - if _, ok := svcs[resource.NewReferenceKey(id)]; ok { - builder.track(id, es.Data.Consumers) - } - } - } - - for _, nes := range namespaceExportedServices { - for _, svc := range services { - if svc.Id.Tenancy.Namespace != nes.Id.Tenancy.Namespace { - continue - } - builder.track(svc.Id, nes.Data.Consumers) - } - } - - for _, pes := range partitionedExportedServices { - for _, svc := range services { - builder.track(svc.Id, pes.Data.Consumers) - } - } - newComputedExportedService := builder.build() - - if oldComputedExportedService.GetResource() != nil && newComputedExportedService == nil { - rt.Logger.Trace("deleting computed exported services") - if err := deleteResource(ctx, rt, oldComputedExportedService.GetResource()); err != nil { - rt.Logger.Error("error deleting computed exported service", "error", err) - return err - } - return nil - } - if proto.Equal(newComputedExportedService, oldComputedExportedService.GetData()) { - rt.Logger.Trace("skip writing computed exported services") - return nil - } - newComputedExportedServiceData, err := anypb.New(newComputedExportedService) - if err != nil { - rt.Logger.Error("error marshalling latest computed exported service", "error", err) - return err - } - - rt.Logger.Trace("writing computed exported services") - _, err = rt.Client.Write(ctx, &pbresource.WriteRequest{ - Resource: &pbresource.Resource{ - Id: req.ID, - Owner: nil, - Data: newComputedExportedServiceData, - }, - }) - if err != nil { - rt.Logger.Error("error writing computed exported service", "error", err) - return err - } - return nil -} - -func ReplaceTypeForComputedExportedServices() controller.DependencyMapper { - return func(_ context.Context, _ controller.Runtime, res *pbresource.Resource) ([]controller.Request, error) { - return []controller.Request{ - { - ID: &pbresource.ID{ - Type: pbmulticluster.ComputedExportedServicesType, - Tenancy: &pbresource.Tenancy{ - Partition: res.Id.Tenancy.Partition, - }, - Name: "global", - }, - }, - }, nil - } -} - -func getOldComputedExportedService(ctx context.Context, rt controller.Runtime, req controller.Request) (*resource.DecodedResource[*pbmulticluster.ComputedExportedServices], error) { - computedExpSvcID := &pbresource.ID{ - Name: types.ComputedExportedServicesName, - Type: pbmulticluster.ComputedExportedServicesType, - Tenancy: &pbresource.Tenancy{ - Partition: req.ID.Tenancy.Partition, - }, - } - computedExpSvcRes, err := resource.GetDecodedResource[*pbmulticluster.ComputedExportedServices](ctx, rt.Client, computedExpSvcID) - if err != nil { - rt.Logger.Error("error fetching computed exported service", "error", err) - return nil, err - } - return computedExpSvcRes, nil -} - -type exportedServicesBuilder struct { - data map[resource.ReferenceKey]*serviceExports -} - -func newExportedServicesBuilder() *exportedServicesBuilder { - return &exportedServicesBuilder{ - data: make(map[resource.ReferenceKey]*serviceExports), - } -} - -func (b *exportedServicesBuilder) track(id *pbresource.ID, consumers []*pbmulticluster.ExportedServicesConsumer) error { - key := resource.NewReferenceKey(id) - exports, ok := b.data[key] - - if !ok { - exports = &serviceExports{ - ref: resource.Reference(id, ""), - partitions: make(map[string]struct{}), - peers: make(map[string]struct{}), - } - b.data[key] = exports - } - - for _, c := range consumers { - switch v := c.ConsumerTenancy.(type) { - case *pbmulticluster.ExportedServicesConsumer_Peer: - exports.peers[v.Peer] = struct{}{} - case *pbmulticluster.ExportedServicesConsumer_Partition: - exports.partitions[v.Partition] = struct{}{} - case *pbmulticluster.ExportedServicesConsumer_SamenessGroup: - // TODO do we currently validate that sameness groups can't be set? - return fmt.Errorf("unexpected export to sameness group %q", v.SamenessGroup) - } - } - - return nil -} - -func (b *exportedServicesBuilder) build() *pbmulticluster.ComputedExportedServices { - if len(b.data) == 0 { - return nil - } - - ces := &pbmulticluster.ComputedExportedServices{ - Consumers: make([]*pbmulticluster.ComputedExportedService, 0, len(b.data)), - } - - for _, svc := range sortRefValue(b.data) { - consumers := make([]*pbmulticluster.ComputedExportedServicesConsumer, 0, len(svc.peers)+len(svc.partitions)) - - for _, peer := range sortKeys(svc.peers) { - consumers = append(consumers, &pbmulticluster.ComputedExportedServicesConsumer{ - ConsumerTenancy: &pbmulticluster.ComputedExportedServicesConsumer_Peer{ - Peer: peer, - }, - }) - } - - for _, partition := range sortKeys(svc.partitions) { - consumers = append(consumers, &pbmulticluster.ComputedExportedServicesConsumer{ - ConsumerTenancy: &pbmulticluster.ComputedExportedServicesConsumer_Partition{ - Partition: partition, - }, - }) - } - - ces.Consumers = append(ces.Consumers, &pbmulticluster.ComputedExportedService{ - TargetRef: svc.ref, - Consumers: consumers, - }) - } - - return ces -} - -func sortKeys(m map[string]struct{}) []string { - keys := make([]string, 0, len(m)) - for key := range m { - keys = append(keys, key) - } - sort.Strings(keys) - return keys -} - -func sortRefValue(m map[resource.ReferenceKey]*serviceExports) []*serviceExports { - vals := make([]*serviceExports, 0, len(m)) - for _, val := range m { - vals = append(vals, val) - } - sort.Slice(vals, func(i, j int) bool { - return resource.ReferenceToString(vals[i].ref) < resource.ReferenceToString(vals[j].ref) - }) - return vals -} - -func getNamespaceForServices(exportedServices []*types.DecodedExportedServices, namespaceExportedServices []*types.DecodedNamespaceExportedServices, partitionedExportedServices []*types.DecodedPartitionExportedServices) string { - if len(partitionedExportedServices) > 0 { - return storage.Wildcard - } - resources := []*pbresource.Resource{} - for _, exp := range exportedServices { - resources = append(resources, exp.GetResource()) - } - for _, exp := range namespaceExportedServices { - resources = append(resources, exp.GetResource()) - } - return getNamespace(resources) -} - -func getNamespace(resources []*pbresource.Resource) string { - if len(resources) == 0 { - // We shouldn't ever hit this. - panic("resources cannot be empty") - } - - namespace := resources[0].Id.Tenancy.Namespace - for _, res := range resources[1:] { - if res.Id.Tenancy.Namespace != namespace { - return storage.Wildcard - } - } - return namespace -} - -func deleteResource(ctx context.Context, rt controller.Runtime, resource *pbresource.Resource) error { - _, err := rt.Client.Delete(ctx, &pbresource.DeleteRequest{ - Id: resource.GetId(), - Version: resource.GetVersion(), - }) - if err != nil { - return err - } - return nil -} diff --git a/internal/multicluster/internal/controllers/exportedservices/controller_test.go b/internal/multicluster/internal/controllers/exportedservices/controller_test.go deleted file mode 100644 index 1afec40760a07..0000000000000 --- a/internal/multicluster/internal/controllers/exportedservices/controller_test.go +++ /dev/null @@ -1,449 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: BUSL-1.1 - -package exportedservices - -import ( - "context" - "fmt" - "testing" - - "github.com/stretchr/testify/require" - "github.com/stretchr/testify/suite" - - svc "github.com/hashicorp/consul/agent/grpc-external/services/resource" - svctest "github.com/hashicorp/consul/agent/grpc-external/services/resource/testing" - cat "github.com/hashicorp/consul/internal/catalog" - "github.com/hashicorp/consul/internal/controller" - "github.com/hashicorp/consul/internal/multicluster/internal/types" - "github.com/hashicorp/consul/internal/resource" - rtest "github.com/hashicorp/consul/internal/resource/resourcetest" - pbcatalog "github.com/hashicorp/consul/proto-public/pbcatalog/v2beta1" - pbmulticluster "github.com/hashicorp/consul/proto-public/pbmulticluster/v2beta1" - "github.com/hashicorp/consul/proto-public/pbresource" - "github.com/hashicorp/consul/proto/private/prototest" - "github.com/hashicorp/consul/sdk/testutil" - "github.com/hashicorp/consul/version/versiontest" -) - -type controllerSuite struct { - suite.Suite - ctx context.Context - client *rtest.Client - rt controller.Runtime - isEnterprise bool - reconciler *reconciler - tenancies []*pbresource.Tenancy -} - -func (suite *controllerSuite) SetupTest() { - suite.ctx = testutil.TestContext(suite.T()) - suite.tenancies = rtest.TestTenancies() - mockTenancyBridge := &svc.MockTenancyBridge{} - for _, tenancy := range suite.tenancies { - mockTenancyBridge.On("PartitionExists", tenancy.Partition).Return(true, nil) - mockTenancyBridge.On("IsPartitionMarkedForDeletion", tenancy.Partition).Return(false, nil) - mockTenancyBridge.On("NamespaceExists", tenancy.Partition, tenancy.Namespace).Return(true, nil) - mockTenancyBridge.On("IsNamespaceMarkedForDeletion", tenancy.Partition, tenancy.Namespace).Return(false, nil) - mockTenancyBridge.On("NamespaceExists", tenancy.Partition, "app").Return(true, nil) - mockTenancyBridge.On("IsNamespaceMarkedForDeletion", tenancy.Partition, "app").Return(false, nil) - } - - config := svc.Config{ - TenancyBridge: mockTenancyBridge, - } - client := svctest.RunResourceServiceWithConfig(suite.T(), config, types.Register, cat.RegisterTypes) - suite.client = rtest.NewClient(client) - suite.rt = controller.Runtime{ - Client: suite.client, - Logger: testutil.Logger(suite.T()), - } - suite.reconciler = &reconciler{} - suite.isEnterprise = versiontest.IsEnterprise() -} - -func (suite *controllerSuite) TestReconcile() { - suite.runTestCaseWithTenancies(suite.reconcileTest) -} - -func TestController(t *testing.T) { - suite.Run(t, new(controllerSuite)) -} - -func (suite *controllerSuite) runTestCaseWithTenancies(testFunc func(*pbresource.Tenancy)) { - for _, tenancy := range suite.tenancies { - suite.Run(suite.appendTenancyInfo(tenancy), func() { - testFunc(tenancy) - }) - } -} - -func (suite *controllerSuite) appendTenancyInfo(tenancy *pbresource.Tenancy) string { - return fmt.Sprintf("%s_Namespace_%s_Partition", tenancy.Namespace, tenancy.Partition) -} - -func (suite *controllerSuite) getComputedExportedSvc(id *pbresource.ID) *pbmulticluster.ComputedExportedServices { - computedExportedService := suite.client.RequireResourceExists(suite.T(), id) - decodedComputedExportedService := rtest.MustDecode[*pbmulticluster.ComputedExportedServices](suite.T(), computedExportedService) - return decodedComputedExportedService.Data -} - -func (suite *controllerSuite) reconcileTest(tenancy *pbresource.Tenancy) { - id := rtest.Resource(pbmulticluster.ComputedExportedServicesType, "global").WithTenancy(&pbresource.Tenancy{ - Partition: tenancy.Partition, - }).ID() - require.NotNil(suite.T(), id) - - svc1 := rtest.Resource(pbcatalog.ServiceType, "svc1"). - WithData(suite.T(), &pbcatalog.Service{ - Ports: []*pbcatalog.ServicePort{ - {TargetPort: "http", Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, - }, - }). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - - exportedSvcData := &pbmulticluster.ExportedServices{ - Services: []string{"svc1", "svcx"}, - Consumers: []*pbmulticluster.ExportedServicesConsumer{{ConsumerTenancy: &pbmulticluster.ExportedServicesConsumer_Peer{ - Peer: "peer-0", - }}}, - } - - if suite.isEnterprise { - exportedSvcData.Consumers = append(exportedSvcData.Consumers, &pbmulticluster.ExportedServicesConsumer{ConsumerTenancy: &pbmulticluster.ExportedServicesConsumer_Partition{ - Partition: "part-0", - }}) - } - expSvc := rtest.Resource(pbmulticluster.ExportedServicesType, "expsvc").WithData(suite.T(), exportedSvcData).WithTenancy(tenancy).Write(suite.T(), suite.client) - require.NotNil(suite.T(), expSvc) - - err := suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: id}) - require.NoError(suite.T(), err) - actualComputedExportedService := suite.getComputedExportedSvc(id) - expectedComputedExportedService := getExpectation(tenancy, suite.isEnterprise, 0) - prototest.AssertDeepEqual(suite.T(), expectedComputedExportedService, actualComputedExportedService) - - rtest.Resource(pbcatalog.ServiceType, "svc2"). - WithData(suite.T(), &pbcatalog.Service{ - Ports: []*pbcatalog.ServicePort{ - {TargetPort: "http", Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, - }, - }). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - - svc0 := rtest.Resource(pbcatalog.ServiceType, "svc0"). - WithData(suite.T(), &pbcatalog.Service{ - Ports: []*pbcatalog.ServicePort{ - {TargetPort: "http", Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, - }, - }). - WithTenancy(&pbresource.Tenancy{ - Partition: tenancy.Partition, - Namespace: "app", - }). - Write(suite.T(), suite.client) - - exportedNamespaceSvcData := &pbmulticluster.NamespaceExportedServices{ - Consumers: []*pbmulticluster.ExportedServicesConsumer{{ConsumerTenancy: &pbmulticluster.ExportedServicesConsumer_Peer{ - Peer: "peer-1", - }}}, - } - - nameexpSvc := rtest.Resource(pbmulticluster.NamespaceExportedServicesType, "namesvc").WithData(suite.T(), exportedNamespaceSvcData).WithTenancy(tenancy).Write(suite.T(), suite.client) - require.NotNil(suite.T(), nameexpSvc) - err = suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: id}) - require.NoError(suite.T(), err) - actualComputedExportedService = suite.getComputedExportedSvc(id) - expectedComputedExportedService = getExpectation(tenancy, suite.isEnterprise, 1) - prototest.AssertDeepEqual(suite.T(), expectedComputedExportedService, actualComputedExportedService) - - svc3 := rtest.Resource(pbcatalog.ServiceType, "svc3"). - WithData(suite.T(), &pbcatalog.Service{ - Ports: []*pbcatalog.ServicePort{ - {TargetPort: "http", Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, - }, - }). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - - err = suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: id}) - require.NoError(suite.T(), err) - actualComputedExportedService = suite.getComputedExportedSvc(id) - expectedComputedExportedService = getExpectation(tenancy, suite.isEnterprise, 2) - prototest.AssertDeepEqual(suite.T(), expectedComputedExportedService, actualComputedExportedService) - - suite.client.MustDelete(suite.T(), svc3.Id) - err = suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: id}) - require.NoError(suite.T(), err) - - actualComputedExportedService = suite.getComputedExportedSvc(id) - expectedComputedExportedService = getExpectation(tenancy, suite.isEnterprise, 3) - prototest.AssertDeepEqual(suite.T(), expectedComputedExportedService, actualComputedExportedService) - - partitionedExportedSvcData := &pbmulticluster.PartitionExportedServices{ - Consumers: []*pbmulticluster.ExportedServicesConsumer{{ConsumerTenancy: &pbmulticluster.ExportedServicesConsumer_Peer{ - Peer: "peer-1", - }}, {ConsumerTenancy: &pbmulticluster.ExportedServicesConsumer_Peer{ - Peer: "peer-2", - }}}, - } - - partexpSvc := rtest.Resource(pbmulticluster.PartitionExportedServicesType, "partsvc").WithData(suite.T(), partitionedExportedSvcData).WithTenancy(&pbresource.Tenancy{Partition: tenancy.Partition}).Write(suite.T(), suite.client) - require.NotNil(suite.T(), partexpSvc) - - err = suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: id}) - require.NoError(suite.T(), err) - actualComputedExportedService = suite.getComputedExportedSvc(id) - expectedComputedExportedService = getExpectation(tenancy, suite.isEnterprise, 4) - prototest.AssertDeepEqual(suite.T(), expectedComputedExportedService, actualComputedExportedService) - - svc4 := rtest.Resource(pbcatalog.ServiceType, "svc4"). - WithData(suite.T(), &pbcatalog.Service{ - Ports: []*pbcatalog.ServicePort{ - {TargetPort: "http", Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, - }, - }). - WithTenancy(&pbresource.Tenancy{ - Partition: tenancy.Partition, - Namespace: "app", - }). - Write(suite.T(), suite.client) - - err = suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: id}) - require.NoError(suite.T(), err) - actualComputedExportedService = suite.getComputedExportedSvc(id) - expectedComputedExportedService = getExpectation(tenancy, suite.isEnterprise, 5) - prototest.AssertDeepEqual(suite.T(), expectedComputedExportedService, actualComputedExportedService) - - suite.client.MustDelete(suite.T(), svc4.Id) - err = suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: id}) - require.NoError(suite.T(), err) - - actualComputedExportedService = suite.getComputedExportedSvc(id) - expectedComputedExportedService = getExpectation(tenancy, suite.isEnterprise, 6) - prototest.AssertDeepEqual(suite.T(), expectedComputedExportedService, actualComputedExportedService) - - rtest.Resource(pbcatalog.ServiceType, "svc5"). - WithData(suite.T(), &pbcatalog.Service{ - Ports: []*pbcatalog.ServicePort{ - {TargetPort: "http", Protocol: pbcatalog.Protocol_PROTOCOL_HTTP}, - }, - }). - WithTenancy(tenancy). - Write(suite.T(), suite.client) - - err = suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: id}) - require.NoError(suite.T(), err) - - actualComputedExportedService = suite.getComputedExportedSvc(id) - expectedComputedExportedService = getExpectation(tenancy, suite.isEnterprise, 7) - prototest.AssertDeepEqual(suite.T(), expectedComputedExportedService, actualComputedExportedService) - - suite.client.MustDelete(suite.T(), partexpSvc.Id) - err = suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: id}) - require.NoError(suite.T(), err) - - actualComputedExportedService = suite.getComputedExportedSvc(id) - expectedComputedExportedService = getExpectation(tenancy, suite.isEnterprise, 8) - - prototest.AssertDeepEqual(suite.T(), expectedComputedExportedService, actualComputedExportedService) - - suite.client.MustDelete(suite.T(), nameexpSvc.Id) - err = suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: id}) - require.NoError(suite.T(), err) - - actualComputedExportedService = suite.getComputedExportedSvc(id) - - expectedComputedExportedService = getExpectation(tenancy, suite.isEnterprise, 9) - prototest.AssertDeepEqual(suite.T(), expectedComputedExportedService, actualComputedExportedService) - - suite.client.MustDelete(suite.T(), expSvc.Id) - err = suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: id}) - require.NoError(suite.T(), err) - - suite.client.RequireResourceNotFound(suite.T(), id) - - nameexpSvc1 := rtest.Resource(pbmulticluster.NamespaceExportedServicesType, "namesvc1").WithData(suite.T(), exportedNamespaceSvcData).WithTenancy(&pbresource.Tenancy{ - Partition: tenancy.Partition, - Namespace: "app", - }).Write(suite.T(), suite.client) - require.NotNil(suite.T(), nameexpSvc1) - err = suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: id}) - require.NoError(suite.T(), err) - actualComputedExportedService = suite.getComputedExportedSvc(id) - expectedComputedExportedService = getExpectation(&pbresource.Tenancy{ - Partition: tenancy.Partition, - Namespace: "app", - }, suite.isEnterprise, 10) - prototest.AssertDeepEqual(suite.T(), expectedComputedExportedService, actualComputedExportedService) - - expSvc1 := rtest.Resource(pbmulticluster.ExportedServicesType, "expsvc1").WithData(suite.T(), exportedSvcData).WithTenancy(tenancy).Write(suite.T(), suite.client) - require.NotNil(suite.T(), expSvc1) - - err = suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: id}) - require.NoError(suite.T(), err) - actualComputedExportedService = suite.getComputedExportedSvc(id) - expectedComputedExportedService = getExpectation(tenancy, suite.isEnterprise, 11) - prototest.AssertDeepEqual(suite.T(), expectedComputedExportedService, actualComputedExportedService) - - suite.client.MustDelete(suite.T(), svc0.Id) - suite.client.MustDelete(suite.T(), svc1.Id) - - err = suite.reconciler.Reconcile(suite.ctx, suite.rt, controller.Request{ID: id}) - require.NoError(suite.T(), err) - - suite.client.RequireResourceNotFound(suite.T(), id) - -} - -func getExpectation(tenancy *pbresource.Tenancy, isEnterprise bool, testCase int) *pbmulticluster.ComputedExportedServices { - makeCES := func(consumers ...*pbmulticluster.ComputedExportedService) *pbmulticluster.ComputedExportedServices { - return &pbmulticluster.ComputedExportedServices{ - Consumers: consumers, - } - } - makeConsumer := func(ref *pbresource.Reference, consumers ...*pbmulticluster.ComputedExportedServicesConsumer) *pbmulticluster.ComputedExportedService { - var actual []*pbmulticluster.ComputedExportedServicesConsumer - for _, c := range consumers { - _, ok := c.ConsumerTenancy.(*pbmulticluster.ComputedExportedServicesConsumer_Partition) - if (isEnterprise && ok) || !ok { - actual = append(actual, c) - } - } - - return &pbmulticluster.ComputedExportedService{ - TargetRef: ref, - Consumers: actual, - } - } - svc0Ref := &pbresource.Reference{ - Type: pbcatalog.ServiceType, - Tenancy: &pbresource.Tenancy{ - Partition: tenancy.Partition, - Namespace: "app", - PeerName: resource.DefaultPeerName, - }, - Name: "svc0", - } - svc1Ref := &pbresource.Reference{ - Type: pbcatalog.ServiceType, - Tenancy: tenancy, - Name: "svc1", - } - svc2Ref := &pbresource.Reference{ - Type: pbcatalog.ServiceType, - Tenancy: tenancy, - Name: "svc2", - } - svc3Ref := &pbresource.Reference{ - Type: pbcatalog.ServiceType, - Tenancy: tenancy, - Name: "svc3", - } - svc4Ref := &pbresource.Reference{ - Type: pbcatalog.ServiceType, - Tenancy: &pbresource.Tenancy{ - Partition: tenancy.Partition, - Namespace: "app", - PeerName: resource.DefaultPeerName, - }, - Name: "svc4", - } - svc5Ref := &pbresource.Reference{ - Type: pbcatalog.ServiceType, - Tenancy: tenancy, - Name: "svc5", - } - - peer0Consumer := &pbmulticluster.ComputedExportedServicesConsumer{ - ConsumerTenancy: &pbmulticluster.ComputedExportedServicesConsumer_Peer{ - Peer: "peer-0", - }, - } - peer1Consumer := &pbmulticluster.ComputedExportedServicesConsumer{ - ConsumerTenancy: &pbmulticluster.ComputedExportedServicesConsumer_Peer{ - Peer: "peer-1", - }, - } - peer2Consumer := &pbmulticluster.ComputedExportedServicesConsumer{ - ConsumerTenancy: &pbmulticluster.ComputedExportedServicesConsumer_Peer{ - Peer: "peer-2", - }, - } - - part0Consumer := &pbmulticluster.ComputedExportedServicesConsumer{ - ConsumerTenancy: &pbmulticluster.ComputedExportedServicesConsumer_Partition{ - Partition: "part-0", - }, - } - - switch testCase { - case 0: - return makeCES(makeConsumer(svc1Ref, peer0Consumer, part0Consumer)) - case 1: - return makeCES( - makeConsumer(svc1Ref, peer0Consumer, peer1Consumer, part0Consumer), - makeConsumer(svc2Ref, peer1Consumer), - ) - case 2: - return makeCES( - makeConsumer(svc1Ref, peer0Consumer, peer1Consumer, part0Consumer), - makeConsumer(svc2Ref, peer1Consumer), - makeConsumer(svc3Ref, peer1Consumer), - ) - case 3: - return makeCES( - makeConsumer(svc1Ref, peer0Consumer, peer1Consumer, part0Consumer), - makeConsumer(svc2Ref, peer1Consumer), - ) - case 4: - return makeCES( - makeConsumer(svc0Ref, peer1Consumer, peer2Consumer), - makeConsumer(svc1Ref, peer0Consumer, peer1Consumer, peer2Consumer, part0Consumer), - makeConsumer(svc2Ref, peer1Consumer, peer2Consumer), - ) - case 5: - return makeCES( - makeConsumer(svc0Ref, peer1Consumer, peer2Consumer), - makeConsumer(svc4Ref, peer1Consumer, peer2Consumer), - makeConsumer(svc1Ref, peer0Consumer, peer1Consumer, peer2Consumer, part0Consumer), - makeConsumer(svc2Ref, peer1Consumer, peer2Consumer), - ) - case 6: - return makeCES( - makeConsumer(svc0Ref, peer1Consumer, peer2Consumer), - makeConsumer(svc1Ref, peer0Consumer, peer1Consumer, peer2Consumer, part0Consumer), - makeConsumer(svc2Ref, peer1Consumer, peer2Consumer), - ) - case 7: - return makeCES( - makeConsumer(svc0Ref, peer1Consumer, peer2Consumer), - makeConsumer(svc1Ref, peer0Consumer, peer1Consumer, peer2Consumer, part0Consumer), - makeConsumer(svc2Ref, peer1Consumer, peer2Consumer), - makeConsumer(svc5Ref, peer1Consumer, peer2Consumer), - ) - case 8: - return makeCES( - makeConsumer(svc1Ref, peer0Consumer, peer1Consumer, part0Consumer), - makeConsumer(svc2Ref, peer1Consumer), - makeConsumer(svc5Ref, peer1Consumer), - ) - case 9: - return makeCES( - makeConsumer(svc1Ref, peer0Consumer, part0Consumer), - ) - case 10: - return makeCES( - makeConsumer(svc0Ref, peer1Consumer), - ) - case 11: - return makeCES( - makeConsumer(svc0Ref, peer1Consumer), - makeConsumer(svc1Ref, peer0Consumer, part0Consumer), - ) - } - - return nil -} diff --git a/internal/multicluster/internal/controllers/register.go b/internal/multicluster/internal/controllers/register.go deleted file mode 100644 index c3bcedcecc468..0000000000000 --- a/internal/multicluster/internal/controllers/register.go +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: BUSL-1.1 - -package controllers - -import ( - "github.com/hashicorp/consul/internal/controller" - "github.com/hashicorp/consul/internal/multicluster/internal/controllers/exportedservices" -) - -func Register(mgr *controller.Manager) { - mgr.Register(exportedservices.Controller()) -} diff --git a/internal/multicluster/internal/types/computed_exported_services.go b/internal/multicluster/internal/types/computed_exported_services.go deleted file mode 100644 index 70c900c9b86cd..0000000000000 --- a/internal/multicluster/internal/types/computed_exported_services.go +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: BUSL-1.1 - -package types - -import ( - "github.com/hashicorp/consul/acl" - "github.com/hashicorp/consul/internal/resource" - pbmulticluster "github.com/hashicorp/consul/proto-public/pbmulticluster/v2beta1" - "github.com/hashicorp/consul/proto-public/pbresource" -) - -const ( - ComputedExportedServicesName = "global" -) - -func RegisterComputedExportedServices(r resource.Registry) { - r.Register(resource.Registration{ - Type: pbmulticluster.ComputedExportedServicesType, - Proto: &pbmulticluster.ComputedExportedServices{}, - Scope: resource.ScopePartition, - Validate: ValidateComputedExportedServices, - ACLs: &resource.ACLHooks{ - Read: aclReadHookComputedExportedServices, - Write: aclWriteHookComputedExportedServices, - List: resource.NoOpACLListHook, - }, - }) -} - -func aclReadHookComputedExportedServices(authorizer acl.Authorizer, authzContext *acl.AuthorizerContext, _ *pbresource.ID, res *pbresource.Resource) error { - return authorizer.ToAllowAuthorizer().MeshReadAllowed(authzContext) -} - -func aclWriteHookComputedExportedServices(authorizer acl.Authorizer, authzContext *acl.AuthorizerContext, _ *pbresource.Resource) error { - return authorizer.ToAllowAuthorizer().MeshWriteAllowed(authzContext) -} diff --git a/internal/multicluster/internal/types/computed_exported_services_test.go b/internal/multicluster/internal/types/computed_exported_services_test.go deleted file mode 100644 index 0315c5788e4df..0000000000000 --- a/internal/multicluster/internal/types/computed_exported_services_test.go +++ /dev/null @@ -1,180 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: BUSL-1.1 - -package types - -import ( - "errors" - "testing" - - "github.com/stretchr/testify/require" - - "github.com/hashicorp/consul/internal/resource" - "github.com/hashicorp/consul/internal/resource/resourcetest" - pbmulticluster "github.com/hashicorp/consul/proto-public/pbmulticluster/v2beta1" - "github.com/hashicorp/consul/proto-public/pbresource" - "github.com/hashicorp/consul/version/versiontest" -) - -func computedExportedServicesWithPartition(partitionName string) *pbmulticluster.ComputedExportedServices { - consumers := []*pbmulticluster.ComputedExportedService{ - { - Consumers: []*pbmulticluster.ComputedExportedServicesConsumer{ - { - ConsumerTenancy: &pbmulticluster.ComputedExportedServicesConsumer_Partition{ - Partition: partitionName, - }, - }, - }, - }, - } - return &pbmulticluster.ComputedExportedServices{ - Consumers: consumers, - } -} - -func computedExportedServicesWithPeer(peerName string) *pbmulticluster.ComputedExportedServices { - consumers := []*pbmulticluster.ComputedExportedService{ - { - Consumers: []*pbmulticluster.ComputedExportedServicesConsumer{ - { - ConsumerTenancy: &pbmulticluster.ComputedExportedServicesConsumer_Peer{ - Peer: peerName, - }, - }, - }, - }, - } - return &pbmulticluster.ComputedExportedServices{ - Consumers: consumers, - } -} - -func TestComputedExportedServicesValidations_InvalidName(t *testing.T) { - res := resourcetest.Resource(pbmulticluster.ComputedExportedServicesType, "computed-exported-services"). - WithData(t, computedExportedServicesWithPeer("peer")). - Build() - - err := ValidateComputedExportedServices(res) - require.Error(t, err) - expectedError := errors.New("invalid \"name\" field: name can only be \"global\"") - require.ErrorAs(t, err, &expectedError) -} - -func TestComputedExportedServicesACLs(t *testing.T) { - // Wire up a registry to generically invoke hooks - registry := resource.NewRegistry() - Register(registry) - - type testcase struct { - rules string - readOK string - writeOK string - listOK string - } - - const ( - DENY = resourcetest.DENY - ALLOW = resourcetest.ALLOW - DEFAULT = resourcetest.DEFAULT - ) - - exportedServiceData := &pbmulticluster.ComputedExportedServices{} - res := resourcetest.Resource(pbmulticluster.ComputedExportedServicesType, "global"). - WithData(t, exportedServiceData). - Build() - resourcetest.ValidateAndNormalize(t, registry, res) - - cases := map[string]testcase{ - "no rules": { - rules: ``, - readOK: DENY, - writeOK: DENY, - listOK: DEFAULT, - }, - "mesh read policy": { - rules: `mesh = "read"`, - readOK: ALLOW, - writeOK: DENY, - listOK: DEFAULT, - }, - "mesh write policy": { - rules: `mesh = "write"`, - readOK: ALLOW, - writeOK: ALLOW, - listOK: DEFAULT, - }, - } - - for _, tc := range cases { - aclTestCase := resourcetest.ACLTestCase{ - Rules: tc.rules, - Res: res, - ReadOK: tc.readOK, - WriteOK: tc.writeOK, - ListOK: tc.listOK, - } - resourcetest.RunACLTestCase(t, aclTestCase, registry) - } -} - -func TestComputedExportedServicesValidations(t *testing.T) { - type testcase struct { - Resource *pbresource.Resource - expectErrorCE []string - expectErrorENT []string - } - - isEnterprise := versiontest.IsEnterprise() - - run := func(t *testing.T, tc testcase) { - expectError := tc.expectErrorCE - if isEnterprise { - expectError = tc.expectErrorENT - } - err := ValidateComputedExportedServices(tc.Resource) - if len(expectError) == 0 { - require.NoError(t, err) - } else { - require.Error(t, err) - for _, er := range expectError { - require.ErrorContains(t, err, er) - } - } - } - - cases := map[string]testcase{ - "computed exported services with peer": { - Resource: resourcetest.Resource(pbmulticluster.ComputedExportedServicesType, ComputedExportedServicesName). - WithData(t, computedExportedServicesWithPeer("peer")). - Build(), - }, - "computed exported services with partition": { - Resource: resourcetest.Resource(pbmulticluster.ComputedExportedServicesType, ComputedExportedServicesName). - WithData(t, computedExportedServicesWithPartition("partition")). - Build(), - expectErrorCE: []string{`invalid element at index 0 of list "partition": can only be set in Enterprise`}, - }, - "computed exported services with peer empty": { - Resource: resourcetest.Resource(pbmulticluster.ComputedExportedServicesType, ComputedExportedServicesName). - WithData(t, computedExportedServicesWithPeer("")). - Build(), - expectErrorCE: []string{`invalid element at index 0 of list "peer": can not be empty`}, - expectErrorENT: []string{`invalid element at index 0 of list "peer": can not be empty`}, - }, - "computed exported services with partition empty": { - Resource: resourcetest.Resource(pbmulticluster.ComputedExportedServicesType, ComputedExportedServicesName). - WithData(t, computedExportedServicesWithPartition("")). - Build(), - expectErrorCE: []string{`invalid element at index 0 of list "partition": can not be empty`, - `invalid element at index 0 of list "partition": can only be set in Enterprise`}, - expectErrorENT: []string{`invalid element at index 0 of list "partition": can not be empty`}, - }, - } - - for name, tc := range cases { - t.Run(name, func(t *testing.T) { - run(t, tc) - }) - } -} diff --git a/internal/multicluster/internal/types/decoded.go b/internal/multicluster/internal/types/decoded.go deleted file mode 100644 index 6a1b545f0faf0..0000000000000 --- a/internal/multicluster/internal/types/decoded.go +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: BUSL-1.1 - -package types - -import ( - "github.com/hashicorp/consul/internal/resource" - pbmulticluster "github.com/hashicorp/consul/proto-public/pbmulticluster/v2beta1" -) - -type ( - DecodedExportedServices = resource.DecodedResource[*pbmulticluster.ExportedServices] - DecodedNamespaceExportedServices = resource.DecodedResource[*pbmulticluster.NamespaceExportedServices] - DecodedPartitionExportedServices = resource.DecodedResource[*pbmulticluster.PartitionExportedServices] -) diff --git a/internal/multicluster/internal/types/exported_services.go b/internal/multicluster/internal/types/exported_services.go deleted file mode 100644 index 87cebb244ab4e..0000000000000 --- a/internal/multicluster/internal/types/exported_services.go +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: BUSL-1.1 - -package types - -import ( - "github.com/hashicorp/consul/acl" - "github.com/hashicorp/consul/internal/resource" - pbmulticluster "github.com/hashicorp/consul/proto-public/pbmulticluster/v2beta1" - "github.com/hashicorp/consul/proto-public/pbresource" -) - -func RegisterExportedServices(r resource.Registry) { - r.Register(resource.Registration{ - Type: pbmulticluster.ExportedServicesType, - Proto: &pbmulticluster.ExportedServices{}, - Scope: resource.ScopeNamespace, - Validate: ValidateExportedServices, - ACLs: &resource.ACLHooks{ - Read: aclReadHookExportedServices, - Write: aclWriteHookExportedServices, - List: resource.NoOpACLListHook, - }, - }) -} - -func aclReadHookExportedServices(authorizer acl.Authorizer, authzContext *acl.AuthorizerContext, _ *pbresource.ID, res *pbresource.Resource) error { - if res == nil { - return resource.ErrNeedResource - } - - var exportedService pbmulticluster.ExportedServices - - if err := res.Data.UnmarshalTo(&exportedService); err != nil { - return resource.NewErrDataParse(&exportedService, err) - } - - for _, serviceName := range exportedService.Services { - if err := authorizer.ToAllowAuthorizer().ServiceReadAllowed(serviceName, authzContext); err != nil { - return err - } - } - return nil -} - -func aclWriteHookExportedServices(authorizer acl.Authorizer, authzContext *acl.AuthorizerContext, res *pbresource.Resource) error { - var exportedService pbmulticluster.ExportedServices - - if err := res.Data.UnmarshalTo(&exportedService); err != nil { - return resource.NewErrDataParse(&exportedService, err) - } - - for _, serviceName := range exportedService.Services { - if err := authorizer.ToAllowAuthorizer().ServiceWriteAllowed(serviceName, authzContext); err != nil { - return err - } - } - return nil -} diff --git a/internal/multicluster/internal/types/exported_services_test.go b/internal/multicluster/internal/types/exported_services_test.go deleted file mode 100644 index 23d9453264a56..0000000000000 --- a/internal/multicluster/internal/types/exported_services_test.go +++ /dev/null @@ -1,220 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: BUSL-1.1 - -package types - -import ( - "errors" - "testing" - - "github.com/stretchr/testify/require" - - "github.com/hashicorp/consul/internal/resource" - "github.com/hashicorp/consul/internal/resource/resourcetest" - pbmulticluster "github.com/hashicorp/consul/proto-public/pbmulticluster/v2beta1" - "github.com/hashicorp/consul/proto-public/pbresource" - "github.com/hashicorp/consul/version/versiontest" -) - -func inValidExportedServices() *pbmulticluster.ExportedServices { - return &pbmulticluster.ExportedServices{} -} - -func exportedServicesWithPeer(peerName string) *pbmulticluster.ExportedServices { - consumers := []*pbmulticluster.ExportedServicesConsumer{ - { - ConsumerTenancy: &pbmulticluster.ExportedServicesConsumer_Peer{ - Peer: peerName, - }, - }, - } - return &pbmulticluster.ExportedServices{ - Services: []string{"api", "frontend", "backend"}, - Consumers: consumers, - } -} - -func exportedServicesWithPartition(partitionName string) *pbmulticluster.ExportedServices { - consumers := []*pbmulticluster.ExportedServicesConsumer{ - { - ConsumerTenancy: &pbmulticluster.ExportedServicesConsumer_Partition{ - Partition: partitionName, - }, - }, - } - return &pbmulticluster.ExportedServices{ - Services: []string{"api", "frontend", "backend"}, - Consumers: consumers, - } -} - -func exportedServicesWithSamenessGroup(samenessGroupName string) *pbmulticluster.ExportedServices { - consumers := []*pbmulticluster.ExportedServicesConsumer{ - { - ConsumerTenancy: &pbmulticluster.ExportedServicesConsumer_SamenessGroup{ - SamenessGroup: samenessGroupName, - }, - }, - } - return &pbmulticluster.ExportedServices{ - Services: []string{"api", "frontend", "backend"}, - Consumers: consumers, - } -} - -func TestExportedServicesValidation_NoServices(t *testing.T) { - res := resourcetest.Resource(pbmulticluster.ExportedServicesType, "exportedservices1"). - WithData(t, inValidExportedServices()). - Build() - - err := ValidateExportedServices(res) - require.Error(t, err) - expectedError := errors.New("invalid \"services\" field: at least one service must be set") - require.ErrorAs(t, err, &expectedError) -} - -func TestExportedServicesACLs(t *testing.T) { - // Wire up a registry to generically invoke hooks - registry := resource.NewRegistry() - Register(registry) - - type testcase struct { - rules string - readOK string - writeOK string - listOK string - } - - const ( - DENY = resourcetest.DENY - ALLOW = resourcetest.ALLOW - DEFAULT = resourcetest.DEFAULT - ) - - exportedServiceData := &pbmulticluster.ExportedServices{ - Services: []string{"api", "backend"}, - } - res := resourcetest.Resource(pbmulticluster.ExportedServicesType, "exps"). - WithData(t, exportedServiceData). - Build() - resourcetest.ValidateAndNormalize(t, registry, res) - - cases := map[string]testcase{ - "no rules": { - rules: ``, - readOK: DENY, - writeOK: DENY, - listOK: DEFAULT, - }, - "all services has read policy": { - rules: `service "api" { policy = "read" } service "backend" {policy = "read"}`, - readOK: ALLOW, - writeOK: DENY, - listOK: DEFAULT, - }, - "all services has write policy": { - rules: `service "api" { policy = "write" } service "backend" {policy = "write"}`, - readOK: ALLOW, - writeOK: ALLOW, - listOK: DEFAULT, - }, - "only one services has read policy": { - rules: `service "api" { policy = "read" }`, - readOK: DENY, - writeOK: DENY, - listOK: DEFAULT, - }, - "only one services has write policy": { - rules: `service "api" { policy = "write" }`, - readOK: DENY, - writeOK: DENY, - listOK: DEFAULT, - }, - } - - for _, tc := range cases { - aclTestCase := resourcetest.ACLTestCase{ - Rules: tc.rules, - Res: res, - ReadOK: tc.readOK, - WriteOK: tc.writeOK, - ListOK: tc.listOK, - } - resourcetest.RunACLTestCase(t, aclTestCase, registry) - } -} - -func TestExportedServicesValidation(t *testing.T) { - type testcase struct { - Resource *pbresource.Resource - expectErrorCE []string - expectErrorENT []string - } - - isEnterprise := versiontest.IsEnterprise() - - run := func(t *testing.T, tc testcase) { - expectError := tc.expectErrorCE - if isEnterprise { - expectError = tc.expectErrorENT - } - err := ValidateExportedServices(tc.Resource) - if len(expectError) == 0 { - require.NoError(t, err) - } else { - require.Error(t, err) - for _, er := range expectError { - require.ErrorContains(t, err, er) - } - } - } - - cases := map[string]testcase{ - "exported services with peer": { - Resource: resourcetest.Resource(pbmulticluster.ExportedServicesType, "exported-services"). - WithData(t, exportedServicesWithPeer("peer")). - Build(), - }, - "exported services with partition": { - Resource: resourcetest.Resource(pbmulticluster.ExportedServicesType, "exported-services"). - WithData(t, exportedServicesWithPartition("partition")). - Build(), - expectErrorCE: []string{`invalid element at index 0 of list "partition": can only be set in Enterprise`}, - }, - "exported services with sameness_group": { - Resource: resourcetest.Resource(pbmulticluster.ExportedServicesType, "exported-services"). - WithData(t, exportedServicesWithSamenessGroup("sameness_group")). - Build(), - expectErrorCE: []string{`invalid element at index 0 of list "sameness_group": can only be set in Enterprise`}, - }, - "exported services with peer empty": { - Resource: resourcetest.Resource(pbmulticluster.ExportedServicesType, "exported-services"). - WithData(t, exportedServicesWithPeer("")). - Build(), - expectErrorCE: []string{`invalid element at index 0 of list "peer": can not be empty or local`}, - expectErrorENT: []string{`invalid element at index 0 of list "peer": can not be empty or local`}, - }, - "exported services with partition empty": { - Resource: resourcetest.Resource(pbmulticluster.ExportedServicesType, "exported-services"). - WithData(t, exportedServicesWithPartition("")). - Build(), - expectErrorCE: []string{`invalid element at index 0 of list "partition": can not be empty`, - `invalid element at index 0 of list "partition": can only be set in Enterprise`}, - expectErrorENT: []string{`invalid element at index 0 of list "partition": can not be empty`}, - }, - "exported services with sameness_group empty": { - Resource: resourcetest.Resource(pbmulticluster.ExportedServicesType, "exported-services"). - WithData(t, exportedServicesWithSamenessGroup("")). - Build(), - expectErrorCE: []string{`invalid element at index 0 of list "sameness_group": can not be empty`, - `invalid element at index 0 of list "sameness_group": can only be set in Enterprise`}, - expectErrorENT: []string{`invalid element at index 0 of list "sameness_group": can not be empty`}, - }, - } - - for name, tc := range cases { - t.Run(name, func(t *testing.T) { - run(t, tc) - }) - } -} diff --git a/internal/multicluster/internal/types/helpers.go b/internal/multicluster/internal/types/helpers.go deleted file mode 100644 index 5dac17f1e7a97..0000000000000 --- a/internal/multicluster/internal/types/helpers.go +++ /dev/null @@ -1,135 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: BUSL-1.1 - -package types - -import ( - "fmt" - "github.com/hashicorp/consul/internal/resource" - pbmulticluster "github.com/hashicorp/consul/proto-public/pbmulticluster/v2beta1" - "github.com/hashicorp/consul/proto-public/pbresource" - "github.com/hashicorp/go-multierror" -) - -func validateExportedServiceConsumerCommon(consumer *pbmulticluster.ExportedServicesConsumer, indx int) error { - switch consumer.GetConsumerTenancy().(type) { - case *pbmulticluster.ExportedServicesConsumer_Peer: - { - if consumer.GetPeer() == "" || consumer.GetPeer() == "local" { - return resource.ErrInvalidListElement{ - Name: "peer", - Index: indx, - Wrapped: fmt.Errorf("can not be empty or local"), - } - } - } - case *pbmulticluster.ExportedServicesConsumer_Partition: - { - if consumer.GetPartition() == "" { - return resource.ErrInvalidListElement{ - Name: "partition", - Index: indx, - Wrapped: fmt.Errorf("can not be empty"), - } - } - } - case *pbmulticluster.ExportedServicesConsumer_SamenessGroup: - { - if consumer.GetSamenessGroup() == "" { - return resource.ErrInvalidListElement{ - Name: "sameness_group", - Index: indx, - Wrapped: fmt.Errorf("can not be empty"), - } - } - } - } - return nil -} - -func validateExportedServicesConsumersEnterprise(consumers []*pbmulticluster.ExportedServicesConsumer) error { - var merr error - - for indx, consumer := range consumers { - vmerr := validateExportedServiceConsumerCommon(consumer, indx) - if vmerr != nil { - merr = multierror.Append(merr, vmerr) - } - vmerr = validateExportedServicesConsumer(consumer, indx) - if vmerr != nil { - merr = multierror.Append(merr, vmerr) - } - } - - return merr -} - -func ValidateExportedServices(res *pbresource.Resource) error { - var exportedService pbmulticluster.ExportedServices - - if err := res.Data.UnmarshalTo(&exportedService); err != nil { - return resource.NewErrDataParse(&exportedService, err) - } - - var merr error - - if len(exportedService.Services) == 0 { - merr = multierror.Append(merr, resource.ErrInvalidField{ - Name: "services", - Wrapped: fmt.Errorf("at least one service must be set"), - }) - } - - vmerr := validateExportedServicesConsumersEnterprise(exportedService.Consumers) - - if vmerr != nil { - merr = multierror.Append(merr, vmerr) - } - - return merr -} - -func ValidateNamespaceExportedServices(res *pbresource.Resource) error { - var exportedService pbmulticluster.NamespaceExportedServices - - if err := res.Data.UnmarshalTo(&exportedService); err != nil { - return resource.NewErrDataParse(&exportedService, err) - } - - return validateExportedServicesConsumersEnterprise(exportedService.Consumers) -} - -func ValidatePartitionExportedServices(res *pbresource.Resource) error { - var exportedService pbmulticluster.PartitionExportedServices - - if err := res.Data.UnmarshalTo(&exportedService); err != nil { - return resource.NewErrDataParse(&exportedService, err) - } - - return validateExportedServicesConsumersEnterprise(exportedService.Consumers) -} - -func ValidateComputedExportedServices(res *pbresource.Resource) error { - var computedExportedServices pbmulticluster.ComputedExportedServices - - if err := res.Data.UnmarshalTo(&computedExportedServices); err != nil { - return resource.NewErrDataParse(&computedExportedServices, err) - } - - var merr error - - if res.Id.Name != ComputedExportedServicesName { - merr = multierror.Append(merr, resource.ErrInvalidField{ - Name: "name", - Wrapped: fmt.Errorf("name can only be \"global\""), - }) - } - - vmerr := ValidateComputedExportedServicesEnterprise(&computedExportedServices) - - if vmerr != nil { - merr = multierror.Append(merr, vmerr) - } - - return merr -} diff --git a/internal/multicluster/internal/types/helpers_ce.go b/internal/multicluster/internal/types/helpers_ce.go deleted file mode 100644 index b997b8671ad05..0000000000000 --- a/internal/multicluster/internal/types/helpers_ce.go +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: BUSL-1.1 - -//go:build !consulent - -package types - -import ( - "fmt" - "github.com/hashicorp/consul/internal/resource" - pbmulticluster "github.com/hashicorp/consul/proto-public/pbmulticluster/v2beta1" - "github.com/hashicorp/go-multierror" -) - -func validateExportedServicesConsumer(consumer *pbmulticluster.ExportedServicesConsumer, indx int) error { - switch consumer.GetConsumerTenancy().(type) { - case *pbmulticluster.ExportedServicesConsumer_Partition: - return resource.ErrInvalidListElement{ - Name: "partition", - Index: indx, - Wrapped: fmt.Errorf("can only be set in Enterprise"), - } - case *pbmulticluster.ExportedServicesConsumer_SamenessGroup: - return resource.ErrInvalidListElement{ - Name: "sameness_group", - Index: indx, - Wrapped: fmt.Errorf("can only be set in Enterprise"), - } - } - return nil -} - -func ValidateComputedExportedServicesEnterprise(computedExportedServices *pbmulticluster.ComputedExportedServices) error { - - var merr error - - for indx, consumer := range computedExportedServices.GetConsumers() { - for _, computedExportedServiceConsumer := range consumer.GetConsumers() { - switch computedExportedServiceConsumer.GetConsumerTenancy().(type) { - case *pbmulticluster.ComputedExportedServicesConsumer_Partition: - merr = multierror.Append(merr, resource.ErrInvalidListElement{ - Name: "partition", - Index: indx, - Wrapped: fmt.Errorf("can only be set in Enterprise"), - }) - if computedExportedServiceConsumer.GetPartition() == "" { - merr = multierror.Append(merr, resource.ErrInvalidListElement{ - Name: "partition", - Index: indx, - Wrapped: fmt.Errorf("can not be empty"), - }) - } - case *pbmulticluster.ComputedExportedServicesConsumer_Peer: - if computedExportedServiceConsumer.GetPeer() == "" { - merr = multierror.Append(merr, resource.ErrInvalidListElement{ - Name: "peer", - Index: indx, - Wrapped: fmt.Errorf("can not be empty"), - }) - } - } - } - } - - return merr -} diff --git a/internal/multicluster/internal/types/namespace_exported_services.go b/internal/multicluster/internal/types/namespace_exported_services.go deleted file mode 100644 index 857ea868b8e96..0000000000000 --- a/internal/multicluster/internal/types/namespace_exported_services.go +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: BUSL-1.1 - -package types - -import ( - "github.com/hashicorp/consul/acl" - "github.com/hashicorp/consul/internal/resource" - pbmulticluster "github.com/hashicorp/consul/proto-public/pbmulticluster/v2beta1" - "github.com/hashicorp/consul/proto-public/pbresource" -) - -func RegisterNamespaceExportedServices(r resource.Registry) { - r.Register(resource.Registration{ - Type: pbmulticluster.NamespaceExportedServicesType, - Proto: &pbmulticluster.NamespaceExportedServices{}, - Scope: resource.ScopeNamespace, - Validate: ValidateNamespaceExportedServices, - ACLs: &resource.ACLHooks{ - Read: aclReadHookNamespaceExportedServices, - Write: aclWriteHookNamespaceExportedServices, - List: resource.NoOpACLListHook, - }, - }) -} - -func aclReadHookNamespaceExportedServices(authorizer acl.Authorizer, authzContext *acl.AuthorizerContext, id *pbresource.ID, res *pbresource.Resource) error { - return authorizer.ToAllowAuthorizer().MeshReadAllowed(authzContext) -} - -func aclWriteHookNamespaceExportedServices(authorizer acl.Authorizer, authzContext *acl.AuthorizerContext, res *pbresource.Resource) error { - return authorizer.ToAllowAuthorizer().MeshWriteAllowed(authzContext) -} diff --git a/internal/multicluster/internal/types/namespace_exported_services_test.go b/internal/multicluster/internal/types/namespace_exported_services_test.go deleted file mode 100644 index 06864997b3c2a..0000000000000 --- a/internal/multicluster/internal/types/namespace_exported_services_test.go +++ /dev/null @@ -1,187 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: BUSL-1.1 - -package types - -import ( - "testing" - - "github.com/stretchr/testify/require" - - "github.com/hashicorp/consul/internal/resource" - "github.com/hashicorp/consul/internal/resource/resourcetest" - pbmulticluster "github.com/hashicorp/consul/proto-public/pbmulticluster/v2beta1" - "github.com/hashicorp/consul/proto-public/pbresource" - "github.com/hashicorp/consul/version/versiontest" -) - -func validNamespaceExportedServicesWithPeer(peerName string) *pbmulticluster.NamespaceExportedServices { - consumers := []*pbmulticluster.ExportedServicesConsumer{ - { - ConsumerTenancy: &pbmulticluster.ExportedServicesConsumer_Peer{ - Peer: peerName, - }, - }, - } - return &pbmulticluster.NamespaceExportedServices{ - Consumers: consumers, - } -} - -func validNamespaceExportedServicesWithPartition(partitionName string) *pbmulticluster.NamespaceExportedServices { - consumers := []*pbmulticluster.ExportedServicesConsumer{ - { - ConsumerTenancy: &pbmulticluster.ExportedServicesConsumer_Partition{ - Partition: partitionName, - }, - }, - } - return &pbmulticluster.NamespaceExportedServices{ - Consumers: consumers, - } -} - -func validNamespaceExportedServicesWithSamenessGroup(samenessGroupName string) *pbmulticluster.NamespaceExportedServices { - consumers := []*pbmulticluster.ExportedServicesConsumer{ - { - ConsumerTenancy: &pbmulticluster.ExportedServicesConsumer_SamenessGroup{ - SamenessGroup: samenessGroupName, - }, - }, - } - return &pbmulticluster.NamespaceExportedServices{ - Consumers: consumers, - } -} - -func TestNamespaceExportedServicesACLs(t *testing.T) { - // Wire up a registry to generically invoke hooks - registry := resource.NewRegistry() - Register(registry) - - type testcase struct { - rules string - readOK string - writeOK string - listOK string - } - - const ( - DENY = resourcetest.DENY - ALLOW = resourcetest.ALLOW - DEFAULT = resourcetest.DEFAULT - ) - - cases := map[string]testcase{ - "no rules": { - rules: ``, - readOK: DENY, - writeOK: DENY, - listOK: DEFAULT, - }, - "mesh read policy": { - rules: `mesh = "read"`, - readOK: ALLOW, - writeOK: DENY, - listOK: DEFAULT, - }, - "mesh write policy": { - rules: `mesh = "write"`, - readOK: ALLOW, - writeOK: ALLOW, - listOK: DEFAULT, - }, - } - - exportedServiceData := &pbmulticluster.NamespaceExportedServices{} - res := resourcetest.Resource(pbmulticluster.NamespaceExportedServicesType, "namespace-exported-services"). - WithData(t, exportedServiceData). - Build() - resourcetest.ValidateAndNormalize(t, registry, res) - - for _, tc := range cases { - aclTestCase := resourcetest.ACLTestCase{ - Rules: tc.rules, - Res: res, - ReadOK: tc.readOK, - WriteOK: tc.writeOK, - ListOK: tc.listOK, - } - resourcetest.RunACLTestCase(t, aclTestCase, registry) - } -} - -func TestNamespaceExportedServicesValidations(t *testing.T) { - type testcase struct { - Resource *pbresource.Resource - expectErrorCE []string - expectErrorENT []string - } - - isEnterprise := versiontest.IsEnterprise() - - run := func(t *testing.T, tc testcase) { - expectError := tc.expectErrorCE - if isEnterprise { - expectError = tc.expectErrorENT - } - err := ValidateNamespaceExportedServices(tc.Resource) - if len(expectError) == 0 { - require.NoError(t, err) - } else { - require.Error(t, err) - for _, er := range expectError { - require.ErrorContains(t, err, er) - } - } - } - - cases := map[string]testcase{ - "namespace exported services with peer": { - Resource: resourcetest.Resource(pbmulticluster.NamespaceExportedServicesType, "namespace-exported-services"). - WithData(t, validNamespaceExportedServicesWithPeer("peer")). - Build(), - }, - "namespace exported services with partition": { - Resource: resourcetest.Resource(pbmulticluster.NamespaceExportedServicesType, "namespace-exported-services"). - WithData(t, validNamespaceExportedServicesWithPartition("partition")). - Build(), - expectErrorCE: []string{`invalid element at index 0 of list "partition": can only be set in Enterprise`}, - }, - "namespace exported services with sameness_group": { - Resource: resourcetest.Resource(pbmulticluster.NamespaceExportedServicesType, "namespace-exported-services"). - WithData(t, validNamespaceExportedServicesWithSamenessGroup("sameness_group")). - Build(), - expectErrorCE: []string{`invalid element at index 0 of list "sameness_group": can only be set in Enterprise`}, - }, - "namespace exported services with peer empty": { - Resource: resourcetest.Resource(pbmulticluster.NamespaceExportedServicesType, "namespace-exported-services"). - WithData(t, validNamespaceExportedServicesWithPeer("")). - Build(), - expectErrorCE: []string{`invalid element at index 0 of list "peer": can not be empty or local`}, - expectErrorENT: []string{`invalid element at index 0 of list "peer": can not be empty or local`}, - }, - "namespace exported services with partition empty": { - Resource: resourcetest.Resource(pbmulticluster.NamespaceExportedServicesType, "namespace-exported-services"). - WithData(t, validNamespaceExportedServicesWithPartition("")). - Build(), - expectErrorCE: []string{`invalid element at index 0 of list "partition": can not be empty`, - `invalid element at index 0 of list "partition": can only be set in Enterprise`}, - expectErrorENT: []string{`invalid element at index 0 of list "partition": can not be empty`}, - }, - "namespace exported services with sameness_group empty": { - Resource: resourcetest.Resource(pbmulticluster.NamespaceExportedServicesType, "namespace-exported-services"). - WithData(t, validNamespaceExportedServicesWithSamenessGroup("")). - Build(), - expectErrorCE: []string{`invalid element at index 0 of list "sameness_group": can not be empty`, - `invalid element at index 0 of list "sameness_group": can only be set in Enterprise`}, - expectErrorENT: []string{`invalid element at index 0 of list "sameness_group": can not be empty`}, - }, - } - - for name, tc := range cases { - t.Run(name, func(t *testing.T) { - run(t, tc) - }) - } -} diff --git a/internal/multicluster/internal/types/partition_exported_services.go b/internal/multicluster/internal/types/partition_exported_services.go deleted file mode 100644 index 110eb5d6efa13..0000000000000 --- a/internal/multicluster/internal/types/partition_exported_services.go +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: BUSL-1.1 - -package types - -import ( - "github.com/hashicorp/consul/acl" - "github.com/hashicorp/consul/internal/resource" - pbmulticluster "github.com/hashicorp/consul/proto-public/pbmulticluster/v2beta1" - "github.com/hashicorp/consul/proto-public/pbresource" -) - -func RegisterPartitionExportedServices(r resource.Registry) { - r.Register(resource.Registration{ - Type: pbmulticluster.PartitionExportedServicesType, - Proto: &pbmulticluster.PartitionExportedServices{}, - Scope: resource.ScopePartition, - Validate: ValidatePartitionExportedServices, - ACLs: &resource.ACLHooks{ - Read: aclReadHookPartitionExportedServices, - Write: aclWriteHookPartitionExportedServices, - List: resource.NoOpACLListHook, - }, - }) -} - -func aclReadHookPartitionExportedServices(authorizer acl.Authorizer, authzContext *acl.AuthorizerContext, id *pbresource.ID, res *pbresource.Resource) error { - return authorizer.ToAllowAuthorizer().MeshReadAllowed(authzContext) -} - -func aclWriteHookPartitionExportedServices(authorizer acl.Authorizer, authzContext *acl.AuthorizerContext, res *pbresource.Resource) error { - return authorizer.ToAllowAuthorizer().MeshWriteAllowed(authzContext) -} diff --git a/internal/multicluster/internal/types/partition_exported_services_test.go b/internal/multicluster/internal/types/partition_exported_services_test.go deleted file mode 100644 index ff557aae8fd2c..0000000000000 --- a/internal/multicluster/internal/types/partition_exported_services_test.go +++ /dev/null @@ -1,187 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: BUSL-1.1 - -package types - -import ( - "testing" - - "github.com/stretchr/testify/require" - - "github.com/hashicorp/consul/internal/resource" - "github.com/hashicorp/consul/internal/resource/resourcetest" - pbmulticluster "github.com/hashicorp/consul/proto-public/pbmulticluster/v2beta1" - "github.com/hashicorp/consul/proto-public/pbresource" - "github.com/hashicorp/consul/version/versiontest" -) - -func validPartitionExportedServicesWithPeer(peerName string) *pbmulticluster.PartitionExportedServices { - consumers := []*pbmulticluster.ExportedServicesConsumer{ - { - ConsumerTenancy: &pbmulticluster.ExportedServicesConsumer_Peer{ - Peer: peerName, - }, - }, - } - return &pbmulticluster.PartitionExportedServices{ - Consumers: consumers, - } -} - -func validPartitionExportedServicesWithPartition(partitionName string) *pbmulticluster.PartitionExportedServices { - consumers := []*pbmulticluster.ExportedServicesConsumer{ - { - ConsumerTenancy: &pbmulticluster.ExportedServicesConsumer_Partition{ - Partition: partitionName, - }, - }, - } - return &pbmulticluster.PartitionExportedServices{ - Consumers: consumers, - } -} - -func validPartitionExportedServicesWithSamenessGroup(samenessGroupName string) *pbmulticluster.PartitionExportedServices { - consumers := []*pbmulticluster.ExportedServicesConsumer{ - { - ConsumerTenancy: &pbmulticluster.ExportedServicesConsumer_SamenessGroup{ - SamenessGroup: samenessGroupName, - }, - }, - } - return &pbmulticluster.PartitionExportedServices{ - Consumers: consumers, - } -} - -func TestPartitionExportedServicesACLs(t *testing.T) { - // Wire up a registry to generically invoke hooks - registry := resource.NewRegistry() - Register(registry) - - type testcase struct { - rules string - readOK string - writeOK string - listOK string - } - - const ( - DENY = resourcetest.DENY - ALLOW = resourcetest.ALLOW - DEFAULT = resourcetest.DEFAULT - ) - - cases := map[string]testcase{ - "no rules": { - rules: ``, - readOK: DENY, - writeOK: DENY, - listOK: DEFAULT, - }, - "mesh read policy": { - rules: `mesh = "read"`, - readOK: ALLOW, - writeOK: DENY, - listOK: DEFAULT, - }, - "mesh write policy": { - rules: `mesh = "write"`, - readOK: ALLOW, - writeOK: ALLOW, - listOK: DEFAULT, - }, - } - - exportedServiceData := &pbmulticluster.PartitionExportedServices{} - res := resourcetest.Resource(pbmulticluster.PartitionExportedServicesType, "partition-exported-services"). - WithData(t, exportedServiceData). - Build() - resourcetest.ValidateAndNormalize(t, registry, res) - - for _, tc := range cases { - aclTestCase := resourcetest.ACLTestCase{ - Rules: tc.rules, - Res: res, - ReadOK: tc.readOK, - WriteOK: tc.writeOK, - ListOK: tc.listOK, - } - resourcetest.RunACLTestCase(t, aclTestCase, registry) - } -} - -func TestPartitionExportedServicesValidations(t *testing.T) { - type testcase struct { - Resource *pbresource.Resource - expectErrorCE []string - expectErrorENT []string - } - - isEnterprise := versiontest.IsEnterprise() - - run := func(t *testing.T, tc testcase) { - expectError := tc.expectErrorCE - if isEnterprise { - expectError = tc.expectErrorENT - } - err := ValidatePartitionExportedServices(tc.Resource) - if len(expectError) == 0 { - require.NoError(t, err) - } else { - require.Error(t, err) - for _, er := range expectError { - require.ErrorContains(t, err, er) - } - } - } - - cases := map[string]testcase{ - "partition exported services with peer": { - Resource: resourcetest.Resource(pbmulticluster.PartitionExportedServicesType, "partition-exported-services"). - WithData(t, validPartitionExportedServicesWithPeer("peer")). - Build(), - }, - "partition exported services with partition": { - Resource: resourcetest.Resource(pbmulticluster.PartitionExportedServicesType, "partition-exported-services"). - WithData(t, validPartitionExportedServicesWithPartition("partition")). - Build(), - expectErrorCE: []string{`invalid element at index 0 of list "partition": can only be set in Enterprise`}, - }, - "partition exported services with sameness_group": { - Resource: resourcetest.Resource(pbmulticluster.PartitionExportedServicesType, "partition-exported-services"). - WithData(t, validPartitionExportedServicesWithSamenessGroup("sameness_group")). - Build(), - expectErrorCE: []string{`invalid element at index 0 of list "sameness_group": can only be set in Enterprise`}, - }, - "partition exported services with peer empty": { - Resource: resourcetest.Resource(pbmulticluster.PartitionExportedServicesType, "partition-exported-services"). - WithData(t, validPartitionExportedServicesWithPeer("")). - Build(), - expectErrorCE: []string{`invalid element at index 0 of list "peer": can not be empty or local`}, - expectErrorENT: []string{`invalid element at index 0 of list "peer": can not be empty or local`}, - }, - "partition exported services with partition empty": { - Resource: resourcetest.Resource(pbmulticluster.PartitionExportedServicesType, "partition-exported-services"). - WithData(t, validPartitionExportedServicesWithPartition("")). - Build(), - expectErrorCE: []string{`invalid element at index 0 of list "partition": can not be empty`, - `invalid element at index 0 of list "partition": can only be set in Enterprise`}, - expectErrorENT: []string{`invalid element at index 0 of list "partition": can not be empty`}, - }, - "partition exported services with sameness_group empty": { - Resource: resourcetest.Resource(pbmulticluster.PartitionExportedServicesType, "partition-exported-services"). - WithData(t, validPartitionExportedServicesWithSamenessGroup("")). - Build(), - expectErrorCE: []string{`invalid element at index 0 of list "sameness_group": can not be empty`, - `invalid element at index 0 of list "sameness_group": can only be set in Enterprise`}, - expectErrorENT: []string{`invalid element at index 0 of list "sameness_group": can not be empty`}, - }, - } - - for name, tc := range cases { - t.Run(name, func(t *testing.T) { - run(t, tc) - }) - } -} diff --git a/internal/multicluster/internal/types/types.go b/internal/multicluster/internal/types/types.go deleted file mode 100644 index 9ee6691e19ec8..0000000000000 --- a/internal/multicluster/internal/types/types.go +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: BUSL-1.1 - -package types - -import ( - "github.com/hashicorp/consul/internal/resource" -) - -const ( - GroupName = "multicluster" - VersionV2Beta1 = "v2beta1" - CurrentVersion = VersionV2Beta1 -) - -func Register(r resource.Registry) { - RegisterExportedServices(r) - RegisterNamespaceExportedServices(r) - RegisterPartitionExportedServices(r) - RegisterComputedExportedServices(r) -} diff --git a/internal/protohcl/testproto/example.pb.go b/internal/protohcl/testproto/example.pb.go index 304eac53d6d90..99e6fe9807626 100644 --- a/internal/protohcl/testproto/example.pb.go +++ b/internal/protohcl/testproto/example.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: example.proto diff --git a/internal/resource/decode.go b/internal/resource/decode.go index 2b96853f1e13d..ba9abd87d60d9 100644 --- a/internal/resource/decode.go +++ b/internal/resource/decode.go @@ -16,10 +16,8 @@ import ( // DecodedResource is a generic holder to contain an original Resource and its // decoded contents. type DecodedResource[T proto.Message] struct { - // Embedding here allows us to shadow the Resource.Data Any field to fake out - // using a single struct with inlined data. - *pbresource.Resource - Data T + Resource *pbresource.Resource + Data T } func (d *DecodedResource[T]) GetResource() *pbresource.Resource { @@ -70,20 +68,3 @@ func GetDecodedResource[T proto.Message](ctx context.Context, client pbresource. } return Decode[T](rsp.Resource) } - -func ListDecodedResource[T proto.Message](ctx context.Context, client pbresource.ResourceServiceClient, req *pbresource.ListRequest) ([]*DecodedResource[T], error) { - rsp, err := client.List(ctx, req) - if err != nil { - return nil, err - } - - results := make([]*DecodedResource[T], len(rsp.Resources)) - for idx, rsc := range rsp.Resources { - d, err := Decode[T](rsc) - if err != nil { - return nil, err - } - results[idx] = d - } - return results, nil -} diff --git a/internal/resource/demo/controller.go b/internal/resource/demo/controller.go index a8757fcae2624..7f1bba902ea51 100644 --- a/internal/resource/demo/controller.go +++ b/internal/resource/demo/controller.go @@ -71,7 +71,7 @@ func (r *artistReconciler) Reconcile(ctx context.Context, rt controller.Runtime, actualAlbums, err := rt.Client.List(ctx, &pbresource.ListRequest{ Type: TypeV2Album, Tenancy: res.Id.Tenancy, - NamePrefix: fmt.Sprintf("%s-", res.Id.Name), + NamePrefix: fmt.Sprintf("%s/", res.Id.Name), }) if err != nil { return err diff --git a/internal/resource/demo/demo.go b/internal/resource/demo/demo.go index 12fced6718e61..8e978c9fb49ab 100644 --- a/internal/resource/demo/demo.go +++ b/internal/resource/demo/demo.go @@ -354,7 +354,7 @@ func generateV2Album(artistID *pbresource.ID, rand *rand.Rand) (*pbresource.Reso Id: &pbresource.ID{ Type: TypeV2Album, Tenancy: clone(artistID.Tenancy), - Name: fmt.Sprintf("%s-%s-%s", artistID.Name, strings.ToLower(adjective), strings.ToLower(noun)), + Name: fmt.Sprintf("%s/%s-%s", artistID.Name, strings.ToLower(adjective), strings.ToLower(noun)), }, Owner: artistID, Data: data, diff --git a/internal/resource/hooks.go b/internal/resource/hooks.go deleted file mode 100644 index 2b9d72b88925f..0000000000000 --- a/internal/resource/hooks.go +++ /dev/null @@ -1,107 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: BUSL-1.1 - -package resource - -import ( - "github.com/hashicorp/consul/acl" - "github.com/hashicorp/consul/proto-public/pbresource" - "google.golang.org/protobuf/proto" -) - -// DecodedValidationHook is the function signature needed for usage with the DecodeAndValidate function -type DecodedValidationHook[T proto.Message] func(*DecodedResource[T]) error - -// DecodeAndValidate will generate a validation hook function that decodes the specified type and -// passes it off to another validation hook. This is mainly a convenience to avoid many other -// validation hooks needing to attempt decoding the data and erroring in a consistent manner. -func DecodeAndValidate[T proto.Message](fn DecodedValidationHook[T]) ValidationHook { - return func(res *pbresource.Resource) error { - decoded, err := Decode[T](res) - if err != nil { - return err - } - - return fn(decoded) - } -} - -// DecodedMutationHook is the function signature needed for usage with the DecodeAndMutate function -// The boolean return value indicates whether the Data field within the DecodedResource was modified. -// When true, the DecodeAndMutate hook function will automatically re-encode the Any data and store -// it on the internal Resource's Data field. -type DecodedMutationHook[T proto.Message] func(*DecodedResource[T]) (bool, error) - -// DecodeAndMutate will generate a MutationHook that decodes the specified type and passes it -// off to another mutation hook. This is mainly a convenience to avoid other mutation hooks -// needing to decode and potentially reencode the Any data. When the inner mutation hook returns -// no error and that the Data was modified (true for the boolean return value), the generated -// hook will reencode the Any data back into the Resource wrapper -func DecodeAndMutate[T proto.Message](fn DecodedMutationHook[T]) MutationHook { - return func(res *pbresource.Resource) error { - decoded, err := Decode[T](res) - if err != nil { - return err - } - - modified, err := fn(decoded) - if err != nil { - return err - } - - if modified { - return decoded.Resource.Data.MarshalFrom(decoded.Data) - } - return nil - } -} - -// DecodedAuthorizationHook is the function signature needed for usage with the DecodeAndAuthorizeWrite -// and DecodeAndAuthorizeRead functions. -type DecodedAuthorizationHook[T proto.Message] func(acl.Authorizer, *acl.AuthorizerContext, *DecodedResource[T]) error - -// DecodeAndAuthorizeWrite will generate an ACLAuthorizeWriteHook that decodes the specified type and passes -// it off to another authorization hook. This is mainly a convenience to avoid many other write authorization -// hooks needing to attempt decoding the data and erroring in a consistent manner. -func DecodeAndAuthorizeWrite[T proto.Message](fn DecodedAuthorizationHook[T]) ACLAuthorizeWriteHook { - return func(authz acl.Authorizer, ctx *acl.AuthorizerContext, res *pbresource.Resource) error { - decoded, err := Decode[T](res) - if err != nil { - return err - } - - return fn(authz, ctx, decoded) - } -} - -// DecodeAndAuthorizeRead will generate an ACLAuthorizeReadHook that decodes the specified type and passes -// it off to another authorization hook. This is mainly a convenience to avoid many other read authorization -// hooks needing to attempt decoding the data and erroring in a consistent manner. -func DecodeAndAuthorizeRead[T proto.Message](fn DecodedAuthorizationHook[T]) ACLAuthorizeReadHook { - return func(authz acl.Authorizer, ctx *acl.AuthorizerContext, _ *pbresource.ID, res *pbresource.Resource) error { - if res == nil { - return ErrNeedResource - } - - decoded, err := Decode[T](res) - if err != nil { - return err - } - - return fn(authz, ctx, decoded) - } -} - -type ReadAuthorizationWithResourceHook func(acl.Authorizer, *acl.AuthorizerContext, *pbresource.Resource) error - -// AuthorizeReadWithResource is a small wrapper to ensure that the authorization function is -// invoked with the full resource being read instead of just an id. -func AuthorizeReadWithResource(fn ReadAuthorizationWithResourceHook) ACLAuthorizeReadHook { - return func(authz acl.Authorizer, ctx *acl.AuthorizerContext, id *pbresource.ID, res *pbresource.Resource) error { - if res == nil { - return ErrNeedResource - } - - return fn(authz, ctx, res) - } -} diff --git a/internal/resource/hooks_test.go b/internal/resource/hooks_test.go deleted file mode 100644 index d9fa4d4272b74..0000000000000 --- a/internal/resource/hooks_test.go +++ /dev/null @@ -1,243 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: BUSL-1.1 - -package resource_test - -import ( - "fmt" - "testing" - - "github.com/hashicorp/consul/acl" - "github.com/hashicorp/consul/internal/resource" - "github.com/hashicorp/consul/internal/resource/demo" - rtest "github.com/hashicorp/consul/internal/resource/resourcetest" - "github.com/hashicorp/consul/proto-public/pbresource" - pbdemo "github.com/hashicorp/consul/proto/private/pbdemo/v2" - "github.com/stretchr/testify/require" -) - -func TestDecodeAndValidate(t *testing.T) { - res := rtest.Resource(demo.TypeV2Artist, "babypants"). - WithData(t, &pbdemo.Artist{Name: "caspar babypants"}). - Build() - - t.Run("ok", func(t *testing.T) { - err := resource.DecodeAndValidate[*pbdemo.Artist](func(dec *resource.DecodedResource[*pbdemo.Artist]) error { - require.NotNil(t, dec.Resource) - require.NotNil(t, dec.Data) - - return nil - })(res) - - require.NoError(t, err) - }) - - t.Run("inner-validation-error", func(t *testing.T) { - fakeErr := fmt.Errorf("fake") - - err := resource.DecodeAndValidate[*pbdemo.Artist](func(dec *resource.DecodedResource[*pbdemo.Artist]) error { - return fakeErr - })(res) - - require.Error(t, err) - require.Equal(t, fakeErr, err) - }) - - t.Run("decode-error", func(t *testing.T) { - err := resource.DecodeAndValidate[*pbdemo.Album](func(dec *resource.DecodedResource[*pbdemo.Album]) error { - require.Fail(t, "callback should not be called when decoding fails") - return nil - })(res) - - require.Error(t, err) - require.ErrorAs(t, err, &resource.ErrDataParse{}) - }) -} - -func TestDecodeAndMutate(t *testing.T) { - res := rtest.Resource(demo.TypeV2Artist, "babypants"). - WithData(t, &pbdemo.Artist{Name: "caspar babypants"}). - Build() - - t.Run("no-writeback", func(t *testing.T) { - original := res.Data.Value - - err := resource.DecodeAndMutate[*pbdemo.Artist](func(dec *resource.DecodedResource[*pbdemo.Artist]) (bool, error) { - require.NotNil(t, dec.Resource) - require.NotNil(t, dec.Data) - - // we are going to change the data but not tell the outer hook about it - dec.Data.Name = "changed" - - return false, nil - })(res) - - require.NoError(t, err) - // Ensure that the outer hook didn't overwrite the resources data because we told it not to - require.Equal(t, original, res.Data.Value) - }) - - t.Run("writeback", func(t *testing.T) { - original := res.Data.Value - - err := resource.DecodeAndMutate[*pbdemo.Artist](func(dec *resource.DecodedResource[*pbdemo.Artist]) (bool, error) { - require.NotNil(t, dec.Resource) - require.NotNil(t, dec.Data) - - dec.Data.Name = "changed" - - return true, nil - })(res) - - require.NoError(t, err) - // Ensure that the outer hook reencoded the Any data because we told it to. - require.NotEqual(t, original, res.Data.Value) - }) - - t.Run("inner-mutation-error", func(t *testing.T) { - fakeErr := fmt.Errorf("fake") - - err := resource.DecodeAndMutate[*pbdemo.Artist](func(dec *resource.DecodedResource[*pbdemo.Artist]) (bool, error) { - return false, fakeErr - })(res) - - require.Error(t, err) - require.Equal(t, fakeErr, err) - }) - - t.Run("decode-error", func(t *testing.T) { - err := resource.DecodeAndMutate[*pbdemo.Album](func(dec *resource.DecodedResource[*pbdemo.Album]) (bool, error) { - require.Fail(t, "callback should not be called when decoding fails") - return false, nil - })(res) - - require.Error(t, err) - require.ErrorAs(t, err, &resource.ErrDataParse{}) - }) -} - -func TestDecodeAndAuthorizeWrite(t *testing.T) { - res := rtest.Resource(demo.TypeV2Artist, "babypants"). - WithData(t, &pbdemo.Artist{Name: "caspar babypants"}). - Build() - - t.Run("allowed", func(t *testing.T) { - err := resource.DecodeAndAuthorizeWrite[*pbdemo.Artist](func(a acl.Authorizer, c *acl.AuthorizerContext, dec *resource.DecodedResource[*pbdemo.Artist]) error { - require.NotNil(t, a) - require.NotNil(t, c) - require.NotNil(t, dec.Resource) - require.NotNil(t, dec.Data) - - // access allowed - return nil - })(acl.DenyAll(), &acl.AuthorizerContext{}, res) - - require.NoError(t, err) - }) - - t.Run("denied", func(t *testing.T) { - err := resource.DecodeAndAuthorizeWrite[*pbdemo.Artist](func(a acl.Authorizer, c *acl.AuthorizerContext, dec *resource.DecodedResource[*pbdemo.Artist]) error { - return acl.PermissionDenied("fake") - })(acl.DenyAll(), nil, res) - - require.Error(t, err) - require.True(t, acl.IsErrPermissionDenied(err)) - }) - - t.Run("decode-error", func(t *testing.T) { - err := resource.DecodeAndAuthorizeWrite[*pbdemo.Album](func(a acl.Authorizer, c *acl.AuthorizerContext, dec *resource.DecodedResource[*pbdemo.Album]) error { - require.Fail(t, "callback should not be called when decoding fails") - return nil - })(acl.DenyAll(), &acl.AuthorizerContext{}, res) - - require.Error(t, err) - require.ErrorAs(t, err, &resource.ErrDataParse{}) - }) -} - -func TestDecodeAndAuthorizeRead(t *testing.T) { - res := rtest.Resource(demo.TypeV2Artist, "babypants"). - WithData(t, &pbdemo.Artist{Name: "caspar babypants"}). - Build() - - t.Run("allowed", func(t *testing.T) { - err := resource.DecodeAndAuthorizeRead[*pbdemo.Artist](func(a acl.Authorizer, c *acl.AuthorizerContext, dec *resource.DecodedResource[*pbdemo.Artist]) error { - require.NotNil(t, a) - require.NotNil(t, c) - require.NotNil(t, dec.Resource) - require.NotNil(t, dec.Data) - - // access allowed - return nil - })(acl.DenyAll(), &acl.AuthorizerContext{}, nil, res) - - require.NoError(t, err) - }) - - t.Run("denied", func(t *testing.T) { - err := resource.DecodeAndAuthorizeRead[*pbdemo.Artist](func(a acl.Authorizer, c *acl.AuthorizerContext, dec *resource.DecodedResource[*pbdemo.Artist]) error { - return acl.PermissionDenied("fake") - })(acl.DenyAll(), nil, nil, res) - - require.Error(t, err) - require.True(t, acl.IsErrPermissionDenied(err)) - }) - - t.Run("decode-error", func(t *testing.T) { - err := resource.DecodeAndAuthorizeRead[*pbdemo.Album](func(a acl.Authorizer, c *acl.AuthorizerContext, dec *resource.DecodedResource[*pbdemo.Album]) error { - require.Fail(t, "callback should not be called when decoding fails") - return nil - })(acl.DenyAll(), &acl.AuthorizerContext{}, nil, res) - - require.Error(t, err) - require.ErrorAs(t, err, &resource.ErrDataParse{}) - }) - - t.Run("err-need-resource", func(t *testing.T) { - err := resource.DecodeAndAuthorizeRead[*pbdemo.Artist](func(a acl.Authorizer, c *acl.AuthorizerContext, dec *resource.DecodedResource[*pbdemo.Artist]) error { - require.Fail(t, "callback should not be called when no resource was provided to be decoded") - return nil - })(acl.DenyAll(), &acl.AuthorizerContext{}, nil, nil) - - require.Error(t, err) - require.ErrorIs(t, err, resource.ErrNeedResource) - }) -} - -func TestAuthorizeReadWithResource(t *testing.T) { - res := rtest.Resource(demo.TypeV2Artist, "babypants"). - WithData(t, &pbdemo.Artist{Name: "caspar babypants"}). - Build() - - t.Run("allowed", func(t *testing.T) { - err := resource.AuthorizeReadWithResource(func(a acl.Authorizer, c *acl.AuthorizerContext, res *pbresource.Resource) error { - require.NotNil(t, a) - require.NotNil(t, c) - require.NotNil(t, res) - - // access allowed - return nil - })(acl.DenyAll(), &acl.AuthorizerContext{}, nil, res) - - require.NoError(t, err) - }) - - t.Run("denied", func(t *testing.T) { - err := resource.AuthorizeReadWithResource(func(a acl.Authorizer, c *acl.AuthorizerContext, res *pbresource.Resource) error { - return acl.PermissionDenied("fake") - })(acl.DenyAll(), nil, nil, res) - - require.Error(t, err) - require.True(t, acl.IsErrPermissionDenied(err)) - }) - - t.Run("err-need-resource", func(t *testing.T) { - err := resource.AuthorizeReadWithResource(func(a acl.Authorizer, c *acl.AuthorizerContext, res *pbresource.Resource) error { - require.Fail(t, "callback should not be called when no resource was provided to be decoded") - return nil - })(acl.DenyAll(), &acl.AuthorizerContext{}, nil, nil) - - require.Error(t, err) - require.ErrorIs(t, err, resource.ErrNeedResource) - }) -} diff --git a/internal/resource/http/http_test.go b/internal/resource/http/http_test.go index aeb85f0b8332a..50f50fbe39488 100644 --- a/internal/resource/http/http_test.go +++ b/internal/resource/http/http_test.go @@ -42,7 +42,7 @@ func TestResourceHandler_InputValidation(t *testing.T) { request *http.Request response *httptest.ResponseRecorder expectedResponseCode int - responseBodyContains string + expectedErrorMessage string } client := svctest.RunResourceService(t, demo.RegisterTypes) resourceHandler := resourceHandler{ @@ -72,7 +72,7 @@ func TestResourceHandler_InputValidation(t *testing.T) { `)), response: httptest.NewRecorder(), expectedResponseCode: http.StatusBadRequest, - responseBodyContains: "resource.id.name invalid", + expectedErrorMessage: "rpc error: code = InvalidArgument desc = resource.id.name is required", }, { description: "wrong schema", @@ -89,21 +89,21 @@ func TestResourceHandler_InputValidation(t *testing.T) { `)), response: httptest.NewRecorder(), expectedResponseCode: http.StatusBadRequest, - responseBodyContains: "Request body didn't follow the resource schema", + expectedErrorMessage: "Request body didn't follow the resource schema", }, { description: "invalid request body", request: httptest.NewRequest("PUT", "/keith-urban?partition=default&peer_name=local&namespace=default", strings.NewReader("bad-input")), response: httptest.NewRecorder(), expectedResponseCode: http.StatusBadRequest, - responseBodyContains: "Request body format is invalid", + expectedErrorMessage: "Request body format is invalid", }, { description: "no id", request: httptest.NewRequest("DELETE", "/?partition=default&peer_name=local&namespace=default", strings.NewReader("")), response: httptest.NewRecorder(), expectedResponseCode: http.StatusBadRequest, - responseBodyContains: "id.name invalid", + expectedErrorMessage: "rpc error: code = InvalidArgument desc = id.name is required", }, } @@ -119,7 +119,7 @@ func TestResourceHandler_InputValidation(t *testing.T) { require.NoError(t, err) require.Equal(t, tc.expectedResponseCode, tc.response.Result().StatusCode) - require.Contains(t, string(b), tc.responseBodyContains) + require.Equal(t, tc.expectedErrorMessage, string(b)) }) } } @@ -157,7 +157,7 @@ func TestResourceWriteHandler(t *testing.T) { require.Equal(t, http.StatusForbidden, rsp.Result().StatusCode) }) - var readRsp *pbresource.ReadResponse + t.Run("should write to the resource backend", func(t *testing.T) { rsp := httptest.NewRecorder() req := httptest.NewRequest("PUT", "/demo/v2/artist/keith-urban?partition=default&peer_name=local&namespace=default", strings.NewReader(` @@ -183,8 +183,7 @@ func TestResourceWriteHandler(t *testing.T) { require.Equal(t, "Keith Urban", result["data"].(map[string]any)["name"]) require.Equal(t, "keith-urban", result["id"].(map[string]any)["name"]) - var err error - readRsp, err = client.Read(testutil.TestContext(t), &pbresource.ReadRequest{ + readRsp, err := client.Read(testutil.TestContext(t), &pbresource.ReadRequest{ Id: &pbresource.ID{ Type: demo.TypeV2Artist, Tenancy: resource.DefaultNamespacedTenancy(), @@ -201,7 +200,7 @@ func TestResourceWriteHandler(t *testing.T) { t.Run("should update the record with version parameter", func(t *testing.T) { rsp := httptest.NewRecorder() - req := httptest.NewRequest("PUT", fmt.Sprintf("/demo/v2/artist/keith-urban?partition=default&peer_name=local&namespace=default&version=%s", readRsp.Resource.Version), strings.NewReader(` + req := httptest.NewRequest("PUT", "/demo/v2/artist/keith-urban?partition=default&peer_name=local&namespace=default&version=1", strings.NewReader(` { "metadata": { "foo": "bar" diff --git a/internal/resource/reaper/controller_test.go b/internal/resource/reaper/controller_test.go index d78a105d21933..c06ccedab582d 100644 --- a/internal/resource/reaper/controller_test.go +++ b/internal/resource/reaper/controller_test.go @@ -4,7 +4,6 @@ package reaper import ( - "github.com/hashicorp/consul/internal/resource/resourcetest" "testing" "time" @@ -21,198 +20,174 @@ import ( ) func TestReconcile_ResourceWithNoChildren(t *testing.T) { - client := svctest.RunResourceServiceWithTenancies(t, demo.RegisterTypes) - - runReaperTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - // Seed the database with an artist. - res, err := demo.GenerateV2Artist() - - // set resource tenancy from default to test tenancy - res.Id.Tenancy = tenancy - - require.NoError(t, err) - ctx := testutil.TestContext(t) - writeRsp, err := client.Write(ctx, &pbresource.WriteRequest{Resource: res}) - require.NoError(t, err) - - // Delete the artist to create a tombstone - _, err = client.Delete(ctx, &pbresource.DeleteRequest{Id: writeRsp.Resource.Id}) - require.NoError(t, err) - - // Retrieve tombstone - listRsp, err := client.List(ctx, &pbresource.ListRequest{ - Type: resource.TypeV1Tombstone, - Tenancy: tenancy, - }) - require.NoError(t, err) - require.Len(t, listRsp.Resources, 1) - tombstone := listRsp.Resources[0] - - // Verify reconcile does first pass and queues up for a second pass - rec := newReconciler() - runtime := controller.Runtime{ - Client: client, - Logger: testutil.Logger(t), - } - req := controller.Request{ID: tombstone.Id} - require.ErrorIs(t, controller.RequeueAfterError(secondPassDelay), rec.Reconcile(ctx, runtime, req)) - - // Verify condition FirstPassCompleted is true - readRsp, err := client.Read(ctx, &pbresource.ReadRequest{Id: tombstone.Id}) - require.NoError(t, err) - tombstone = readRsp.Resource - condition := tombstone.Status[statusKeyReaperController].Conditions[0] - require.Equal(t, conditionTypeFirstPassCompleted, condition.Type) - require.Equal(t, pbresource.Condition_STATE_TRUE, condition.State) - - // Verify reconcile does second pass and tombstone is deleted - // Fake out time so elapsed time > secondPassDelay - rec.timeNow = func() time.Time { return time.Now().Add(secondPassDelay + time.Second) } - require.NoError(t, rec.Reconcile(ctx, runtime, req)) - _, err = client.Read(ctx, &pbresource.ReadRequest{Id: tombstone.Id}) - require.Error(t, err) - require.Equal(t, codes.NotFound.String(), status.Code(err).String()) - - // Reconcile again to verify no-op on an already deleted tombstone - require.NoError(t, rec.Reconcile(ctx, runtime, req)) + client := svctest.RunResourceService(t, demo.RegisterTypes) + + // Seed the database with an artist. + res, err := demo.GenerateV2Artist() + require.NoError(t, err) + ctx := testutil.TestContext(t) + writeRsp, err := client.Write(ctx, &pbresource.WriteRequest{Resource: res}) + require.NoError(t, err) + + // Delete the artist to create a tombstone + _, err = client.Delete(ctx, &pbresource.DeleteRequest{Id: writeRsp.Resource.Id}) + require.NoError(t, err) + + // Retrieve tombstone + listRsp, err := client.List(ctx, &pbresource.ListRequest{ + Type: resource.TypeV1Tombstone, + Tenancy: writeRsp.Resource.Id.Tenancy, }) + require.NoError(t, err) + require.Len(t, listRsp.Resources, 1) + tombstone := listRsp.Resources[0] + + // Verify reconcile does first pass and queues up for a second pass + rec := newReconciler() + runtime := controller.Runtime{ + Client: client, + Logger: testutil.Logger(t), + } + req := controller.Request{ID: tombstone.Id} + require.ErrorIs(t, controller.RequeueAfterError(secondPassDelay), rec.Reconcile(ctx, runtime, req)) + + // Verify condition FirstPassCompleted is true + readRsp, err := client.Read(ctx, &pbresource.ReadRequest{Id: tombstone.Id}) + require.NoError(t, err) + tombstone = readRsp.Resource + condition := tombstone.Status[statusKeyReaperController].Conditions[0] + require.Equal(t, conditionTypeFirstPassCompleted, condition.Type) + require.Equal(t, pbresource.Condition_STATE_TRUE, condition.State) + + // Verify reconcile does second pass and tombstone is deleted + // Fake out time so elapsed time > secondPassDelay + rec.timeNow = func() time.Time { return time.Now().Add(secondPassDelay + time.Second) } + require.NoError(t, rec.Reconcile(ctx, runtime, req)) + _, err = client.Read(ctx, &pbresource.ReadRequest{Id: tombstone.Id}) + require.Error(t, err) + require.Equal(t, codes.NotFound.String(), status.Code(err).String()) + + // Reconcile again to verify no-op on an already deleted tombstone + require.NoError(t, rec.Reconcile(ctx, runtime, req)) } func TestReconcile_ResourceWithChildren(t *testing.T) { - client := svctest.RunResourceServiceWithTenancies(t, demo.RegisterTypes) - - runReaperTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - // Seed the database with an artist - res, err := demo.GenerateV2Artist() + client := svctest.RunResourceService(t, demo.RegisterTypes) - // set resource tenancy from default to test tenancy - res.Id.Tenancy = tenancy + // Seed the database with an artist + res, err := demo.GenerateV2Artist() + require.NoError(t, err) + ctx := testutil.TestContext(t) + writeRsp, err := client.Write(ctx, &pbresource.WriteRequest{Resource: res}) + require.NoError(t, err) + artist := writeRsp.Resource + // Create 3 albums owned by the artist + numAlbums := 3 + for i := 0; i < numAlbums; i++ { + res, err = demo.GenerateV2Album(artist.Id) require.NoError(t, err) - ctx := testutil.TestContext(t) - writeRsp, err := client.Write(ctx, &pbresource.WriteRequest{Resource: res}) - require.NoError(t, err) - artist := writeRsp.Resource - - // Create 3 albums owned by the artist - numAlbums := 3 - for i := 0; i < numAlbums; i++ { - res, err = demo.GenerateV2Album(artist.Id) - require.NoError(t, err) - _, err := client.Write(ctx, &pbresource.WriteRequest{Resource: res}) - require.NoError(t, err) - } - - // Delete the artist to create a tombstone - _, err = client.Delete(ctx, &pbresource.DeleteRequest{Id: writeRsp.Resource.Id}) + _, err := client.Write(ctx, &pbresource.WriteRequest{Resource: res}) require.NoError(t, err) + } - // Retrieve the tombstone - listRsp, err := client.List(ctx, &pbresource.ListRequest{ - Type: resource.TypeV1Tombstone, - Tenancy: writeRsp.Resource.Id.Tenancy, - }) - require.NoError(t, err) - require.Len(t, listRsp.Resources, 1) - tombstone := listRsp.Resources[0] - - // Verify reconcile does first pass delete and queues up for a second pass - rec := newReconciler() - runtime := controller.Runtime{ - Client: client, - Logger: testutil.Logger(t), - } - req := controller.Request{ID: tombstone.Id} - require.ErrorIs(t, controller.RequeueAfterError(secondPassDelay), rec.Reconcile(ctx, runtime, req)) - - // Verify 3 albums deleted - listRsp, err = client.List(ctx, &pbresource.ListRequest{ - Type: demo.TypeV2Album, - Tenancy: artist.Id.Tenancy, - }) - require.NoError(t, err) - require.Empty(t, listRsp.Resources) + // Delete the artist to create a tombstone + _, err = client.Delete(ctx, &pbresource.DeleteRequest{Id: writeRsp.Resource.Id}) + require.NoError(t, err) - // Verify condition FirstPassCompleted is true - readRsp, err := client.Read(ctx, &pbresource.ReadRequest{Id: tombstone.Id}) - require.NoError(t, err) - tombstone = readRsp.Resource - condition := tombstone.Status[statusKeyReaperController].Conditions[0] - require.Equal(t, conditionTypeFirstPassCompleted, condition.Type) - require.Equal(t, pbresource.Condition_STATE_TRUE, condition.State) - - // Verify reconcile does second pass - // Fake out time so elapsed time > secondPassDelay - rec.timeNow = func() time.Time { return time.Now().Add(secondPassDelay + time.Second) } - require.NoError(t, rec.Reconcile(ctx, runtime, req)) - - // Verify artist tombstone deleted - _, err = client.Read(ctx, &pbresource.ReadRequest{Id: tombstone.Id}) - require.Error(t, err) - require.Equal(t, codes.NotFound.String(), status.Code(err).String()) - - // Verify tombstones for 3 albums created - listRsp, err = client.List(ctx, &pbresource.ListRequest{ - Type: resource.TypeV1Tombstone, - Tenancy: artist.Id.Tenancy, - }) - require.NoError(t, err) - require.Len(t, listRsp.Resources, numAlbums) + // Retrieve the tombstone + listRsp, err := client.List(ctx, &pbresource.ListRequest{ + Type: resource.TypeV1Tombstone, + Tenancy: writeRsp.Resource.Id.Tenancy, }) -} - -func TestReconcile_RequeueWithDelayWhenSecondPassDelayNotElapsed(t *testing.T) { - client := svctest.RunResourceServiceWithTenancies(t, demo.RegisterTypes) - - runReaperTestCaseWithTenancies(func(tenancy *pbresource.Tenancy) { - // Seed the database with an artist. - res, err := demo.GenerateV2Artist() - - // set resource tenancy from default to test tenancy - res.Id.Tenancy = tenancy - - require.NoError(t, err) - ctx := testutil.TestContext(t) - writeRsp, err := client.Write(ctx, &pbresource.WriteRequest{Resource: res}) - require.NoError(t, err) - - // Delete the artist to create a tombstone - _, err = client.Delete(ctx, &pbresource.DeleteRequest{Id: writeRsp.Resource.Id}) - require.NoError(t, err) - - // Retrieve tombstone - listRsp, err := client.List(ctx, &pbresource.ListRequest{ - Type: resource.TypeV1Tombstone, - Tenancy: writeRsp.Resource.Id.Tenancy, - }) - require.NoError(t, err) - require.Len(t, listRsp.Resources, 1) - tombstone := listRsp.Resources[0] - - // Verify reconcile does first pass and queues up for a second pass - rec := newReconciler() - runtime := controller.Runtime{ - Client: client, - Logger: testutil.Logger(t), - } - req := controller.Request{ID: tombstone.Id} - require.ErrorIs(t, controller.RequeueAfterError(secondPassDelay), rec.Reconcile(ctx, runtime, req)) - - // Verify condition FirstPassCompleted is true - readRsp, err := client.Read(ctx, &pbresource.ReadRequest{Id: tombstone.Id}) - require.NoError(t, err) - tombstone = readRsp.Resource - condition := tombstone.Status[statusKeyReaperController].Conditions[0] - require.Equal(t, conditionTypeFirstPassCompleted, condition.Type) - require.Equal(t, pbresource.Condition_STATE_TRUE, condition.State) + require.NoError(t, err) + require.Len(t, listRsp.Resources, 1) + tombstone := listRsp.Resources[0] + + // Verify reconcile does first pass delete and queues up for a second pass + rec := newReconciler() + runtime := controller.Runtime{ + Client: client, + Logger: testutil.Logger(t), + } + req := controller.Request{ID: tombstone.Id} + require.ErrorIs(t, controller.RequeueAfterError(secondPassDelay), rec.Reconcile(ctx, runtime, req)) - // Verify requeued for second pass since secondPassDelay time has not elapsed - require.ErrorIs(t, controller.RequeueAfterError(secondPassDelay), rec.Reconcile(ctx, runtime, req)) + // Verify 3 albums deleted + listRsp, err = client.List(ctx, &pbresource.ListRequest{ + Type: demo.TypeV2Album, + Tenancy: artist.Id.Tenancy, + }) + require.NoError(t, err) + require.Empty(t, listRsp.Resources) + + // Verify condition FirstPassCompleted is true + readRsp, err := client.Read(ctx, &pbresource.ReadRequest{Id: tombstone.Id}) + require.NoError(t, err) + tombstone = readRsp.Resource + condition := tombstone.Status[statusKeyReaperController].Conditions[0] + require.Equal(t, conditionTypeFirstPassCompleted, condition.Type) + require.Equal(t, pbresource.Condition_STATE_TRUE, condition.State) + + // Verify reconcile does second pass + // Fake out time so elapsed time > secondPassDelay + rec.timeNow = func() time.Time { return time.Now().Add(secondPassDelay + time.Second) } + require.NoError(t, rec.Reconcile(ctx, runtime, req)) + + // Verify artist tombstone deleted + _, err = client.Read(ctx, &pbresource.ReadRequest{Id: tombstone.Id}) + require.Error(t, err) + require.Equal(t, codes.NotFound.String(), status.Code(err).String()) + + // Verify tombstones for 3 albums created + listRsp, err = client.List(ctx, &pbresource.ListRequest{ + Type: resource.TypeV1Tombstone, + Tenancy: artist.Id.Tenancy, }) + require.NoError(t, err) + require.Len(t, listRsp.Resources, numAlbums) } -func runReaperTestCaseWithTenancies(testCase func(tenancy *pbresource.Tenancy)) { - for _, tenancy := range resourcetest.TestTenancies() { - testCase(tenancy) +func TestReconcile_RequeueWithDelayWhenSecondPassDelayNotElapsed(t *testing.T) { + client := svctest.RunResourceService(t, demo.RegisterTypes) + + // Seed the database with an artist. + res, err := demo.GenerateV2Artist() + require.NoError(t, err) + ctx := testutil.TestContext(t) + writeRsp, err := client.Write(ctx, &pbresource.WriteRequest{Resource: res}) + require.NoError(t, err) + + // Delete the artist to create a tombstone + _, err = client.Delete(ctx, &pbresource.DeleteRequest{Id: writeRsp.Resource.Id}) + require.NoError(t, err) + + // Retrieve tombstone + listRsp, err := client.List(ctx, &pbresource.ListRequest{ + Type: resource.TypeV1Tombstone, + Tenancy: writeRsp.Resource.Id.Tenancy, + }) + require.NoError(t, err) + require.Len(t, listRsp.Resources, 1) + tombstone := listRsp.Resources[0] + + // Verify reconcile does first pass and queues up for a second pass + rec := newReconciler() + runtime := controller.Runtime{ + Client: client, + Logger: testutil.Logger(t), } + req := controller.Request{ID: tombstone.Id} + require.ErrorIs(t, controller.RequeueAfterError(secondPassDelay), rec.Reconcile(ctx, runtime, req)) + + // Verify condition FirstPassCompleted is true + readRsp, err := client.Read(ctx, &pbresource.ReadRequest{Id: tombstone.Id}) + require.NoError(t, err) + tombstone = readRsp.Resource + condition := tombstone.Status[statusKeyReaperController].Conditions[0] + require.Equal(t, conditionTypeFirstPassCompleted, condition.Type) + require.Equal(t, pbresource.Condition_STATE_TRUE, condition.State) + + // Verify requeued for second pass since secondPassDelay time has not elapsed + require.ErrorIs(t, controller.RequeueAfterError(secondPassDelay), rec.Reconcile(ctx, runtime, req)) } diff --git a/internal/resource/registry.go b/internal/resource/registry.go index 7897ffb1b4bce..20c1f4dc41a85 100644 --- a/internal/resource/registry.go +++ b/internal/resource/registry.go @@ -42,17 +42,6 @@ type Registry interface { Types() []Registration } -// ValidationHook is the function signature for a validation hook. These hooks can inspect -// the data as they see fit but are expected to not mutate the data in any way. If Go -// supported it, we would pass something akin to a const pointer into the callback to have -// the compiler enforce this immutability. -type ValidationHook func(*pbresource.Resource) error - -// MutationHook is the function signature for a validation hook. These hooks can inspect -// and mutate the resource. If modifying the resources Data, the hook needs to ensure that -// the data gets reencoded and stored back to the Data field. -type MutationHook func(*pbresource.Resource) error - type Registration struct { // Type is the GVK of the resource type. Type *pbresource.Type @@ -67,13 +56,13 @@ type Registration struct { // Validate is called to structurally validate the resource (e.g. // check for required fields). Validate can assume that Mutate // has been called. - Validate ValidationHook + Validate func(*pbresource.Resource) error // Mutate is called to fill out any autogenerated fields (e.g. UUIDs) or // apply defaults before validation. Mutate can assume that // Resource.ID is populated and has non-empty tenancy fields. This does // not mean those tenancy fields actually exist. - Mutate MutationHook + Mutate func(*pbresource.Resource) error // Scope describes the tenancy scope of a resource. Scope Scope @@ -81,10 +70,6 @@ type Registration struct { var ErrNeedResource = errors.New("authorization check requires the entire resource") -type ACLAuthorizeReadHook func(acl.Authorizer, *acl.AuthorizerContext, *pbresource.ID, *pbresource.Resource) error -type ACLAuthorizeWriteHook func(acl.Authorizer, *acl.AuthorizerContext, *pbresource.Resource) error -type ACLAuthorizeListHook func(acl.Authorizer, *acl.AuthorizerContext) error - type ACLHooks struct { // Read is used to authorize Read RPCs and to filter results in List // RPCs. @@ -94,17 +79,17 @@ type ACLHooks struct { // check will be deferred until the data is fetched from the storage layer. // // If it is omitted, `operator:read` permission is assumed. - Read ACLAuthorizeReadHook + Read func(acl.Authorizer, *acl.AuthorizerContext, *pbresource.ID, *pbresource.Resource) error // Write is used to authorize Write and Delete RPCs. // // If it is omitted, `operator:write` permission is assumed. - Write ACLAuthorizeWriteHook + Write func(acl.Authorizer, *acl.AuthorizerContext, *pbresource.Resource) error // List is used to authorize List RPCs. // // If it is omitted, we only filter the results using Read. - List ACLAuthorizeListHook + List func(acl.Authorizer, *acl.AuthorizerContext) error } // Resource type registry diff --git a/internal/resource/resource.go b/internal/resource/resource.go deleted file mode 100644 index 6830f10931204..0000000000000 --- a/internal/resource/resource.go +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: BUSL-1.1 - -package resource - -import ( - "fmt" - "strings" - - mapset "github.com/deckarep/golang-set/v2" - - "github.com/hashicorp/consul/agent/dns" - "github.com/hashicorp/consul/proto-public/pbresource" -) - -// MaxNameLength is the maximum length of a resource name. -const MaxNameLength = 63 - -// DeletionTimestampKey is the key in a resource's metadata that stores the timestamp -// when a resource was marked for deletion. This only applies to resources with finalizers. -const DeletionTimestampKey = "deletionTimestamp" - -// FinalizerKey is the key in resource's metadata that stores the whitespace separated -// list of finalizers. -const FinalizerKey = "finalizers" - -// ValidateName returns an error a name is not a valid resource name. -// The error will contain reference to what constitutes a valid resource name. -func ValidateName(name string) error { - if !dns.IsValidLabel(name) || strings.ToLower(name) != name || len(name) > MaxNameLength { - return fmt.Errorf("a resource name must consist of lower case alphanumeric characters or '-', must start and end with an alphanumeric character and be less than %d characters, got: %q", MaxNameLength+1, name) - } - return nil -} - -// IsMarkedForDeletion returns true if a resource has been marked for deletion, -// false otherwise. -func IsMarkedForDeletion(res *pbresource.Resource) bool { - if res.Metadata == nil { - return false - } - _, ok := res.Metadata[DeletionTimestampKey] - return ok -} - -// HasFinalizers returns true if a resource has one or more finalizers, false otherwise. -func HasFinalizers(res *pbresource.Resource) bool { - return GetFinalizers(res).Cardinality() >= 1 -} - -// HasFinalizer returns true if a resource has a given finalizers, false otherwise. -func HasFinalizer(res *pbresource.Resource, finalizer string) bool { - return GetFinalizers(res).Contains(finalizer) -} - -// AddFinalizer adds a finalizer to the given resource. -func AddFinalizer(res *pbresource.Resource, finalizer string) { - finalizerSet := GetFinalizers(res) - finalizerSet.Add(finalizer) - if res.Metadata == nil { - res.Metadata = map[string]string{} - } - res.Metadata[FinalizerKey] = strings.Join(finalizerSet.ToSlice(), " ") -} - -// RemoveFinalizer removes a finalizer from the given resource. -func RemoveFinalizer(res *pbresource.Resource, finalizer string) { - finalizerSet := GetFinalizers(res) - finalizerSet.Remove(finalizer) - - if finalizerSet.Cardinality() == 0 { - // Remove key if no finalizers to prevent dual representations of - // the same state. - _, keyExists := res.Metadata[FinalizerKey] - if keyExists { - delete(res.Metadata, FinalizerKey) - } - } else { - // Add/update key - if res.Metadata == nil { - res.Metadata = map[string]string{} - } - res.Metadata[FinalizerKey] = strings.Join(finalizerSet.ToSlice(), " ") - } -} - -// GetFinalizers returns the set of finalizers for the given resource. -func GetFinalizers(res *pbresource.Resource) mapset.Set[string] { - if res.Metadata == nil { - return mapset.NewSet[string]() - } - finalizers, ok := res.Metadata[FinalizerKey] - if !ok { - return mapset.NewSet[string]() - } - return mapset.NewSet[string](strings.Fields(finalizers)...) -} diff --git a/internal/resource/resource_test.go b/internal/resource/resource_test.go deleted file mode 100644 index 5057bd4cf8f36..0000000000000 --- a/internal/resource/resource_test.go +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: BUSL-1.1 - -package resource_test - -import ( - "testing" - - mapset "github.com/deckarep/golang-set/v2" - "github.com/stretchr/testify/require" - - "github.com/hashicorp/consul/internal/resource" - rtest "github.com/hashicorp/consul/internal/resource/resourcetest" - pbtenancy "github.com/hashicorp/consul/proto-public/pbtenancy/v2beta1" -) - -func TestFinalizer(t *testing.T) { - t.Run("no finalizers", func(t *testing.T) { - res := rtest.Resource(pbtenancy.NamespaceType, "ns1").Build() - require.False(t, resource.HasFinalizers(res)) - require.False(t, resource.HasFinalizer(res, "finalizer1")) - require.Equal(t, mapset.NewSet[string](), resource.GetFinalizers(res)) - resource.RemoveFinalizer(res, "finalizer") - }) - - t.Run("add finalizer", func(t *testing.T) { - res := rtest.Resource(pbtenancy.NamespaceType, "ns1").Build() - resource.AddFinalizer(res, "finalizer1") - require.True(t, resource.HasFinalizers(res)) - require.True(t, resource.HasFinalizer(res, "finalizer1")) - require.False(t, resource.HasFinalizer(res, "finalizer2")) - require.Equal(t, mapset.NewSet[string]("finalizer1"), resource.GetFinalizers(res)) - - // add duplicate -> noop - resource.AddFinalizer(res, "finalizer1") - require.Equal(t, mapset.NewSet[string]("finalizer1"), resource.GetFinalizers(res)) - }) - - t.Run("remove finalizer", func(t *testing.T) { - res := rtest.Resource(pbtenancy.NamespaceType, "ns1").Build() - resource.AddFinalizer(res, "finalizer1") - resource.AddFinalizer(res, "finalizer2") - resource.RemoveFinalizer(res, "finalizer1") - require.False(t, resource.HasFinalizer(res, "finalizer1")) - require.True(t, resource.HasFinalizer(res, "finalizer2")) - require.Equal(t, mapset.NewSet[string]("finalizer2"), resource.GetFinalizers(res)) - - // remove non-existent -> noop - resource.RemoveFinalizer(res, "finalizer3") - require.Equal(t, mapset.NewSet[string]("finalizer2"), resource.GetFinalizers(res)) - }) - -} diff --git a/internal/resource/resourcetest/client.go b/internal/resource/resourcetest/client.go index a493499309ff6..a9ad08f5358de 100644 --- a/internal/resource/resourcetest/client.go +++ b/internal/resource/resourcetest/client.go @@ -280,17 +280,6 @@ func (client *Client) WaitForStatusCondition(t T, id *pbresource.ID, statusKey s return res } -func (client *Client) WaitForStatusConditionAnyGen(t T, id *pbresource.ID, statusKey string, condition *pbresource.Condition) *pbresource.Resource { - t.Helper() - - var res *pbresource.Resource - client.retry(t, func(r *retry.R) { - res = client.RequireStatusCondition(r, id, statusKey, condition) - }) - - return res -} - func (client *Client) WaitForStatusConditions(t T, id *pbresource.ID, statusKey string, conditions ...*pbresource.Condition) *pbresource.Resource { t.Helper() @@ -355,7 +344,7 @@ func (client *Client) MustDelete(t T, id *pbresource.ID) { // to the delete. func (client *Client) CleanupDelete(t T, id *pbresource.ID) { t.Helper() - client.retryDelete(t, id, false) + client.retryDelete(t, id, true) } func (client *Client) retryDelete(t T, id *pbresource.ID, shouldDelay bool) { diff --git a/internal/resource/resourcetest/tenancy.go b/internal/resource/resourcetest/tenancy.go index 72757466ed200..5f5c0525b6f43 100644 --- a/internal/resource/resourcetest/tenancy.go +++ b/internal/resource/resourcetest/tenancy.go @@ -4,28 +4,13 @@ package resourcetest import ( - "fmt" "strings" "testing" "github.com/hashicorp/consul/internal/resource" "github.com/hashicorp/consul/proto-public/pbresource" - "github.com/hashicorp/consul/version/versiontest" ) -// TestTenancies returns a list of tenancies which represent -// the namespace and partition combinations that can be used in unit tests -func TestTenancies() []*pbresource.Tenancy { - isEnterprise := versiontest.IsEnterprise() - - tenancies := []*pbresource.Tenancy{Tenancy("default.default")} - if isEnterprise { - tenancies = append(tenancies, Tenancy("default.bar"), Tenancy("foo.default"), Tenancy("foo.bar")) - } - - return tenancies -} - // Tenancy constructs a pbresource.Tenancy from a concise string representation // suitable for use in unit tests. // @@ -65,19 +50,3 @@ func DefaultTenancyForType(t *testing.T, reg resource.Registration) *pbresource. return nil } } - -func AppendTenancyInfoSubtest(name string, subtestName string, tenancy *pbresource.Tenancy) string { - return fmt.Sprintf("%s_%s_Namespace_%s_Partition/%s", name, tenancy.Namespace, tenancy.Partition, subtestName) -} - -func AppendTenancyInfo(name string, tenancy *pbresource.Tenancy) string { - return fmt.Sprintf("%s_%s_Namespace_%s_Partition", name, tenancy.Namespace, tenancy.Partition) -} - -func RunWithTenancies(testFunc func(tenancy *pbresource.Tenancy), t *testing.T) { - for _, tenancy := range TestTenancies() { - t.Run(AppendTenancyInfo(t.Name(), tenancy), func(t *testing.T) { - testFunc(tenancy) - }) - } -} diff --git a/internal/resource/sort_test.go b/internal/resource/sort_test.go index 3b7622adb1a91..e319266d9a925 100644 --- a/internal/resource/sort_test.go +++ b/internal/resource/sort_test.go @@ -17,9 +17,6 @@ import ( ) func TestLessReference(t *testing.T) { - if testing.Short() { - t.Skip("too slow for testing.Short") - } parseTenancy := func(s string) *pbresource.Tenancy { // format is: .. parts := strings.Split(s, ".") diff --git a/internal/resource/tenancy.go b/internal/resource/tenancy.go index 597253aa8dc13..126e12413f6a8 100644 --- a/internal/resource/tenancy.go +++ b/internal/resource/tenancy.go @@ -5,6 +5,7 @@ package resource import ( "fmt" + "strings" "google.golang.org/protobuf/proto" @@ -24,6 +25,15 @@ const ( DefaultPeerName = "local" ) +// V2TenancyBridge is used by the resource service to access V2 implementations of +// partitions and namespaces. +type V2TenancyBridge struct { +} + +func NewV2TenancyBridge() TenancyBridge { + return &V2TenancyBridge{} +} + // Scope describes the tenancy scope of a resource. type Scope int @@ -52,6 +62,20 @@ func (s Scope) String() string { panic(fmt.Sprintf("string mapping missing for scope %v", int(s))) } +// Normalize lowercases the partition and namespace. +func Normalize(tenancy *pbresource.Tenancy) { + if tenancy == nil { + return + } + tenancy.Partition = strings.ToLower(tenancy.Partition) + tenancy.Namespace = strings.ToLower(tenancy.Namespace) + + // TODO(spatel): NET-5475 - Remove as part of peer_name moving to PeerTenancy + if tenancy.PeerName == "" { + tenancy.PeerName = DefaultPeerName + } +} + // DefaultClusteredTenancy returns the default tenancy for a cluster scoped resource. func DefaultClusteredTenancy() *pbresource.Tenancy { return &pbresource.Tenancy{ @@ -132,6 +156,7 @@ func defaultTenancy(itemTenancy, parentTenancy, scopeTenancy *pbresource.Tenancy if itemTenancy.PeerName == "" { itemTenancy.PeerName = DefaultPeerName } + Normalize(itemTenancy) if parentTenancy != nil { // Recursively normalize this tenancy as well. @@ -142,6 +167,7 @@ func defaultTenancy(itemTenancy, parentTenancy, scopeTenancy *pbresource.Tenancy if parentTenancy == nil { parentTenancy = scopeTenancy } + Normalize(parentTenancy) if !equalOrEmpty(itemTenancy.PeerName, DefaultPeerName) { panic("peering is not supported yet for resource tenancies") diff --git a/internal/tenancy/internal/bridge/tenancy_bridge_ce.go b/internal/resource/tenancy_bridge_ce.go similarity index 52% rename from internal/tenancy/internal/bridge/tenancy_bridge_ce.go rename to internal/resource/tenancy_bridge_ce.go index dcf4df663cc73..9f88c22361998 100644 --- a/internal/tenancy/internal/bridge/tenancy_bridge_ce.go +++ b/internal/resource/tenancy_bridge_ce.go @@ -3,7 +3,7 @@ //go:build !consulent -package bridge +package resource func (b *V2TenancyBridge) PartitionExists(partition string) (bool, error) { if partition == "default" { @@ -15,3 +15,14 @@ func (b *V2TenancyBridge) PartitionExists(partition string) (bool, error) { func (b *V2TenancyBridge) IsPartitionMarkedForDeletion(partition string) (bool, error) { return false, nil } + +func (b *V2TenancyBridge) NamespaceExists(partition, namespace string) (bool, error) { + if partition == "default" && namespace == "default" { + return true, nil + } + return false, nil +} + +func (b *V2TenancyBridge) IsNamespaceMarkedForDeletion(partition, namespace string) (bool, error) { + return false, nil +} diff --git a/internal/storage/inmem/backend_test.go b/internal/storage/inmem/backend_test.go index c1aa13b70e4cc..7978dcdf29935 100644 --- a/internal/storage/inmem/backend_test.go +++ b/internal/storage/inmem/backend_test.go @@ -15,9 +15,6 @@ import ( ) func TestBackend_Conformance(t *testing.T) { - if testing.Short() { - t.Skip("too slow for testing.Short") - } conformance.Test(t, conformance.TestOptions{ NewBackend: func(t *testing.T) storage.Backend { backend, err := inmem.NewBackend() diff --git a/internal/storage/raft/conformance_test.go b/internal/storage/raft/conformance_test.go index d76ae1b456cb8..6c75e462d21c3 100644 --- a/internal/storage/raft/conformance_test.go +++ b/internal/storage/raft/conformance_test.go @@ -23,9 +23,6 @@ import ( ) func TestBackend_Conformance(t *testing.T) { - if testing.Short() { - t.Skip("too slow for testing.Short") - } t.Run("Leader", func(t *testing.T) { conformance.Test(t, conformance.TestOptions{ NewBackend: func(t *testing.T) storage.Backend { diff --git a/internal/tenancy/exports.go b/internal/tenancy/exports.go index 18340ce039240..aadd7efb59beb 100644 --- a/internal/tenancy/exports.go +++ b/internal/tenancy/exports.go @@ -4,15 +4,21 @@ package tenancy import ( - "github.com/hashicorp/consul/internal/controller" "github.com/hashicorp/consul/internal/resource" - "github.com/hashicorp/consul/internal/tenancy/internal/bridge" - "github.com/hashicorp/consul/internal/tenancy/internal/controllers" "github.com/hashicorp/consul/internal/tenancy/internal/types" ) -type ( - V2TenancyBridge = bridge.V2TenancyBridge +var ( + // API Group Information + + APIGroup = types.GroupName + VersionV1Alpha1 = types.VersionV1Alpha1 + CurrentVersion = types.CurrentVersion + + // Resource Kind Names. + + NamespaceKind = types.NamespaceKind + NamespaceV1Alpha1Type = types.NamespaceV1Alpha1Type ) // RegisterTypes adds all resource types within the "tenancy" API group @@ -20,15 +26,3 @@ type ( func RegisterTypes(r resource.Registry) { types.Register(r) } - -// RegisterControllers registers controllers for the tenancy types with -// the given controller manager. -func RegisterControllers(mgr *controller.Manager, deps Dependencies) { - controllers.Register(mgr, deps) -} - -func NewV2TenancyBridge() *V2TenancyBridge { - return bridge.NewV2TenancyBridge() -} - -type Dependencies = controllers.Dependencies diff --git a/internal/tenancy/internal/bridge/tenancy_bridge.go b/internal/tenancy/internal/bridge/tenancy_bridge.go deleted file mode 100644 index 029db1d6e3aef..0000000000000 --- a/internal/tenancy/internal/bridge/tenancy_bridge.go +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: BUSL-1.1 - -package bridge - -import ( - "context" - - "github.com/hashicorp/consul/internal/resource" - "github.com/hashicorp/consul/proto-public/pbresource" - pbtenancy "github.com/hashicorp/consul/proto-public/pbtenancy/v2beta1" -) - -// V2TenancyBridge is used by the resource service to access V2 implementations of -// partitions and namespaces. -type V2TenancyBridge struct { - client pbresource.ResourceServiceClient -} - -// WithClient inject a ResourceServiceClient in the V2TenancyBridge. -// This is needed to break a circular dependency between -// the ResourceServiceServer, ResourceServiceClient and the TenancyBridge -func (b *V2TenancyBridge) WithClient(client pbresource.ResourceServiceClient) *V2TenancyBridge { - b.client = client - return b -} - -func NewV2TenancyBridge() *V2TenancyBridge { - return &V2TenancyBridge{} -} - -func (b *V2TenancyBridge) NamespaceExists(partition, namespace string) (bool, error) { - rsp, err := b.client.Read(context.Background(), &pbresource.ReadRequest{ - Id: &pbresource.ID{ - Name: namespace, - Tenancy: &pbresource.Tenancy{ - Partition: partition, - }, - Type: pbtenancy.NamespaceType, - }, - }) - return rsp != nil && rsp.Resource != nil, err -} - -func (b *V2TenancyBridge) IsNamespaceMarkedForDeletion(partition, namespace string) (bool, error) { - rsp, err := b.client.Read(context.Background(), &pbresource.ReadRequest{ - Id: &pbresource.ID{ - Name: namespace, - Tenancy: &pbresource.Tenancy{ - Partition: partition, - }, - Type: pbtenancy.NamespaceType, - }, - }) - if err != nil { - return false, err - } - return resource.IsMarkedForDeletion(rsp.Resource), nil -} diff --git a/internal/tenancy/internal/controllers/register.go b/internal/tenancy/internal/controllers/register.go deleted file mode 100644 index 94b4255baeb57..0000000000000 --- a/internal/tenancy/internal/controllers/register.go +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: BUSL-1.1 - -package controllers - -import ( - "github.com/hashicorp/consul/internal/resource" -) - -type Dependencies struct { - Registry resource.Registry -} diff --git a/internal/tenancy/internal/controllers/register_ce.go b/internal/tenancy/internal/controllers/register_ce.go deleted file mode 100644 index a1623e5e95b52..0000000000000 --- a/internal/tenancy/internal/controllers/register_ce.go +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: BUSL-1.1 - -//go:build !consulent - -package controllers - -import ( - "github.com/hashicorp/consul/internal/controller" -) - -func Register(mgr *controller.Manager, deps Dependencies) { - //mgr.Register(namespace.NamespaceController()) -} diff --git a/internal/tenancy/internal/types/namespace.go b/internal/tenancy/internal/types/namespace.go index c45b405e8b325..4bc95d1505f7d 100644 --- a/internal/tenancy/internal/types/namespace.go +++ b/internal/tenancy/internal/types/namespace.go @@ -5,26 +5,44 @@ package types import ( "fmt" - "strings" - "github.com/hashicorp/consul/agent/dns" "github.com/hashicorp/consul/internal/resource" "github.com/hashicorp/consul/proto-public/pbresource" - pbtenancy "github.com/hashicorp/consul/proto-public/pbtenancy/v2beta1" + tenancyv1alpha1 "github.com/hashicorp/consul/proto-public/pbtenancy/v1alpha1" + "strings" +) + +const ( + NamespaceKind = "Namespace" +) + +var ( + NamespaceV1Alpha1Type = &pbresource.Type{ + Group: GroupName, + GroupVersion: VersionV1Alpha1, + Kind: NamespaceKind, + } + NamespaceType = NamespaceV1Alpha1Type ) func RegisterNamespace(r resource.Registry) { r.Register(resource.Registration{ - Type: pbtenancy.NamespaceType, - Proto: &pbtenancy.Namespace{}, + Type: NamespaceV1Alpha1Type, + Proto: &tenancyv1alpha1.Namespace{}, Scope: resource.ScopePartition, Validate: ValidateNamespace, + Mutate: MutateNamespace, // ACLs: TODO }) } +func MutateNamespace(res *pbresource.Resource) error { + res.Id.Name = strings.ToLower(res.Id.Name) + return nil +} + func ValidateNamespace(res *pbresource.Resource) error { - var ns pbtenancy.Namespace + var ns tenancyv1alpha1.Namespace if err := res.Data.UnmarshalTo(&ns); err != nil { return resource.NewErrDataParse(&ns, err) diff --git a/internal/tenancy/internal/types/types_test.go b/internal/tenancy/internal/types/namespace_test.go similarity index 54% rename from internal/tenancy/internal/types/types_test.go rename to internal/tenancy/internal/types/namespace_test.go index df22b71f13a27..b64f86d5212bc 100644 --- a/internal/tenancy/internal/types/types_test.go +++ b/internal/tenancy/internal/types/namespace_test.go @@ -4,6 +4,14 @@ package types import ( + "context" + "errors" + svctest "github.com/hashicorp/consul/agent/grpc-external/services/resource/testing" + rtest "github.com/hashicorp/consul/internal/resource/resourcetest" + pbcatalog "github.com/hashicorp/consul/proto-public/pbcatalog/v2beta1" + "github.com/hashicorp/consul/proto/private/prototest" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" "testing" "github.com/stretchr/testify/require" @@ -11,15 +19,14 @@ import ( "google.golang.org/protobuf/types/known/anypb" "github.com/hashicorp/consul/internal/resource" - pbcatalog "github.com/hashicorp/consul/proto-public/pbcatalog/v2beta1" "github.com/hashicorp/consul/proto-public/pbresource" - pbtenancy "github.com/hashicorp/consul/proto-public/pbtenancy/v2beta1" + pbtenancy "github.com/hashicorp/consul/proto-public/pbtenancy/v1alpha1" ) func createNamespaceResource(t *testing.T, data protoreflect.ProtoMessage) *pbresource.Resource { res := &pbresource.Resource{ Id: &pbresource.ID{ - Type: pbtenancy.NamespaceType, + Type: NamespaceV1Alpha1Type, Tenancy: resource.DefaultPartitionedTenancy(), Name: "ns1234", }, @@ -86,6 +93,28 @@ func TestValidateNamespace_ParseError(t *testing.T) { require.ErrorAs(t, err, &resource.ErrDataParse{}) } +func TestMutateNamespace(t *testing.T) { + tests := []struct { + name string + namespaceName string + expectedName string + err error + }{ + {"lower", "lower", "lower", nil}, + {"mixed", "MiXeD", "mixed", nil}, + {"upper", "UPPER", "upper", nil}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + res := &pbresource.Resource{Id: &pbresource.ID{Name: tt.namespaceName}} + if err := MutateNamespace(res); !errors.Is(err, tt.err) { + t.Errorf("MutateNamespace() error = %v", err) + } + require.Equal(t, res.Id.Name, tt.expectedName) + }) + } +} + func TestValidateNamespace(t *testing.T) { tests := []struct { name string @@ -114,6 +143,64 @@ func TestValidateNamespace(t *testing.T) { } } +func TestRead_Success(t *testing.T) { + client := svctest.RunResourceService(t, Register) + client = rtest.NewClient(client) + + res := rtest.Resource(NamespaceType, "ns1"). + WithData(t, validNamespace()). + Write(t, client) + + readRsp, err := client.Read(context.Background(), &pbresource.ReadRequest{Id: res.Id}) + require.NoError(t, err) + prototest.AssertDeepEqual(t, res.Id, readRsp.Resource.Id) +} + +func TestRead_NotFound(t *testing.T) { + client := svctest.RunResourceService(t, Register) + client = rtest.NewClient(client) + + res := rtest.Resource(NamespaceType, "ns1"). + WithData(t, validNamespace()).Build() + + _, err := client.Read(context.Background(), &pbresource.ReadRequest{Id: res.Id}) + require.Error(t, err) + require.Equal(t, codes.NotFound.String(), status.Code(err).String()) +} + +func TestDelete_Success(t *testing.T) { + client := svctest.RunResourceService(t, Register) + client = rtest.NewClient(client) + + res := rtest.Resource(NamespaceType, "ns1"). + WithData(t, validNamespace()).Write(t, client) + + readRsp, err := client.Read(context.Background(), &pbresource.ReadRequest{Id: res.Id}) + require.NoError(t, err) + prototest.AssertDeepEqual(t, res.Id, readRsp.Resource.Id) + + _, err = client.Delete(context.Background(), &pbresource.DeleteRequest{Id: res.Id}) + require.NoError(t, err) + + _, err = client.Read(context.Background(), &pbresource.ReadRequest{Id: res.Id}) + require.Error(t, err) + require.Equal(t, codes.NotFound.String(), status.Code(err).String()) + +} + +func TestRead_MixedCases_Success(t *testing.T) { + client := svctest.RunResourceService(t, Register) + client = rtest.NewClient(client) + + res := rtest.Resource(NamespaceType, "nS1"). + WithData(t, validNamespace()).Write(t, client) + + readRsp, err := client.Read(context.Background(), &pbresource.ReadRequest{Id: res.Id}) + require.NoError(t, err) + prototest.AssertDeepEqual(t, res.Id, readRsp.Resource.Id) + +} + func validNamespace() *pbtenancy.Namespace { return &pbtenancy.Namespace{ Description: "ns namespace", diff --git a/internal/tenancy/internal/types/types.go b/internal/tenancy/internal/types/types.go index 5955ade8a5d7b..be0a615153fd0 100644 --- a/internal/tenancy/internal/types/types.go +++ b/internal/tenancy/internal/types/types.go @@ -4,7 +4,7 @@ package types const ( - GroupName = "tenancy" - VersionV2Beta1 = "v2beta1" - CurrentVersion = VersionV2Beta1 + GroupName = "tenancy" + VersionV1Alpha1 = "v1alpha1" + CurrentVersion = VersionV1Alpha1 ) diff --git a/internal/tenancy/tenancytest/namespace_test.go b/internal/tenancy/tenancytest/namespace_test.go deleted file mode 100644 index e2461c254cd20..0000000000000 --- a/internal/tenancy/tenancytest/namespace_test.go +++ /dev/null @@ -1,130 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: BUSL-1.1 - -package tenancytest - -import ( - "context" - "testing" - - "github.com/stretchr/testify/require" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - svc "github.com/hashicorp/consul/agent/grpc-external/services/resource" - svctest "github.com/hashicorp/consul/agent/grpc-external/services/resource/testing" - "github.com/hashicorp/consul/internal/resource" - rtest "github.com/hashicorp/consul/internal/resource/resourcetest" - "github.com/hashicorp/consul/internal/tenancy" - "github.com/hashicorp/consul/proto-public/pbresource" - pbtenancy "github.com/hashicorp/consul/proto-public/pbtenancy/v2beta1" - "github.com/hashicorp/consul/proto/private/prototest" -) - -func TestWriteNamespace_Success(t *testing.T) { - v2TenancyBridge := tenancy.NewV2TenancyBridge() - config := svc.Config{TenancyBridge: v2TenancyBridge, UseV2Tenancy: true} - client := svctest.RunResourceServiceWithConfig(t, config, tenancy.RegisterTypes) - cl := rtest.NewClient(client) - - res := rtest.Resource(pbtenancy.NamespaceType, "ns1"). - WithTenancy(resource.DefaultPartitionedTenancy()). - WithData(t, validNamespace()). - Build() - - writeRsp, err := cl.Write(context.Background(), &pbresource.WriteRequest{Resource: res}) - require.NoError(t, err) - prototest.AssertDeepEqual(t, res.Id.Type, writeRsp.Resource.Id.Type) - prototest.AssertDeepEqual(t, res.Id.Tenancy, writeRsp.Resource.Id.Tenancy) - prototest.AssertDeepEqual(t, res.Id.Name, writeRsp.Resource.Id.Name) - prototest.AssertDeepEqual(t, res.Data, writeRsp.Resource.Data) -} - -func TestReadNamespace_Success(t *testing.T) { - v2TenancyBridge := tenancy.NewV2TenancyBridge() - config := svc.Config{TenancyBridge: v2TenancyBridge, UseV2Tenancy: true} - client := svctest.RunResourceServiceWithConfig(t, config, tenancy.RegisterTypes) - cl := rtest.NewClient(client) - - res := rtest.Resource(pbtenancy.NamespaceType, "ns1"). - WithData(t, validNamespace()). - Write(t, cl) - - cases := []struct { - name string - resource *pbresource.Resource - errMsg string - }{ - { - name: "read namespace", - resource: rtest.Resource(pbtenancy.NamespaceType, "ns1"). - WithData(t, validNamespace()). - Build(), - }, - } - - for _, tc := range cases { - t.Run(tc.name, func(t *testing.T) { - readRsp, err := cl.Read(context.Background(), &pbresource.ReadRequest{Id: tc.resource.Id}) - require.NoError(t, err) - prototest.AssertDeepEqual(t, res.Id, readRsp.Resource.Id) - prototest.AssertDeepEqual(t, res.Data, readRsp.Resource.Data) - }) - } -} - -func TestDeleteNamespace_Success(t *testing.T) { - v2TenancyBridge := tenancy.NewV2TenancyBridge() - config := svc.Config{TenancyBridge: v2TenancyBridge, UseV2Tenancy: true} - client := svctest.RunResourceServiceWithConfig(t, config, tenancy.RegisterTypes) - cl := rtest.NewClient(client) - - res := rtest.Resource(pbtenancy.NamespaceType, "ns1"). - WithData(t, validNamespace()).Write(t, cl) - - readRsp, err := cl.Read(context.Background(), &pbresource.ReadRequest{Id: res.Id}) - require.NoError(t, err) - prototest.AssertDeepEqual(t, res.Id, readRsp.Resource.Id) - - _, err = cl.Delete(context.Background(), &pbresource.DeleteRequest{Id: res.Id}) - require.NoError(t, err) - - _, err = cl.Read(context.Background(), &pbresource.ReadRequest{Id: res.Id}) - require.Error(t, err) - require.Equal(t, codes.NotFound.String(), status.Code(err).String()) - -} - -func TestListNamespace_Success(t *testing.T) { - v2TenancyBridge := tenancy.NewV2TenancyBridge() - config := svc.Config{TenancyBridge: v2TenancyBridge, UseV2Tenancy: true} - client := svctest.RunResourceServiceWithConfig(t, config, tenancy.RegisterTypes) - cl := rtest.NewClient(client) - - res := rtest.Resource(pbtenancy.NamespaceType, "ns1"). - WithData(t, validNamespace()).Write(t, cl) - - require.NotNil(t, res) - res = rtest.Resource(pbtenancy.NamespaceType, "ns2"). - WithData(t, validNamespace()).Write(t, cl) - - require.NotNil(t, res) - - listRsp, err := cl.List(context.Background(), &pbresource.ListRequest{Type: pbtenancy.NamespaceType, Tenancy: resource.DefaultPartitionedTenancy()}) - require.NoError(t, err) - require.Len(t, listRsp.Resources, 3) - names := []string{ - listRsp.Resources[0].Id.Name, - listRsp.Resources[1].Id.Name, - listRsp.Resources[2].Id.Name, - } - require.Contains(t, names, "default") - require.Contains(t, names, "ns1") - require.Contains(t, names, "ns2") -} - -func validNamespace() *pbtenancy.Namespace { - return &pbtenancy.Namespace{ - Description: "ns namespace", - } -} diff --git a/lib/channels/deliver_latest.go b/lib/channels/deliver_latest.go deleted file mode 100644 index 2e43c135e9e13..0000000000000 --- a/lib/channels/deliver_latest.go +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: BUSL-1.1 -package channels - -import "fmt" - -// DeliverLatest will drain the channel discarding any messages if there are any and sends the current message. -func DeliverLatest[T any](val T, ch chan T) error { - // Send if chan is empty - select { - case ch <- val: - return nil - default: - } - - // If it falls through to here, the channel is not empty. - // Drain the channel. - done := false - for !done { - select { - case <-ch: - continue - default: - done = true - } - } - - // Attempt to send again. If it is not empty, throw an error - select { - case ch <- val: - return nil - default: - return fmt.Errorf("failed to deliver latest event: chan full again after draining") - } -} diff --git a/logging/logfile_bsd.go b/logging/logfile_bsd.go index 21e5794245638..df599358d0478 100644 --- a/logging/logfile_bsd.go +++ b/logging/logfile_bsd.go @@ -14,5 +14,5 @@ import ( func (l *LogFile) createTime(stat os.FileInfo) time.Time { stat_t := stat.Sys().(*syscall.Stat_t) createTime := stat_t.Ctimespec - return time.Unix(int64(createTime.Sec), int64(createTime.Nsec)) //nolint:unconvert + return time.Unix(int64(createTime.Sec), int64(createTime.Nsec)) } diff --git a/proto-public/annotations/ratelimit/ratelimit.pb.go b/proto-public/annotations/ratelimit/ratelimit.pb.go index 3514d47ceb29d..624b55e25ad5e 100644 --- a/proto-public/annotations/ratelimit/ratelimit.pb.go +++ b/proto-public/annotations/ratelimit/ratelimit.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: annotations/ratelimit/ratelimit.proto diff --git a/proto-public/pbacl/acl.pb.go b/proto-public/pbacl/acl.pb.go index f85a9e0b48e8f..dd1ea0c58f2f3 100644 --- a/proto-public/pbacl/acl.pb.go +++ b/proto-public/pbacl/acl.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbacl/acl.proto diff --git a/proto-public/pbauth/v2beta1/computed_traffic_permissions.pb.go b/proto-public/pbauth/v2beta1/computed_traffic_permissions.pb.go index b88c2e86bd037..ad1c4f4004d84 100644 --- a/proto-public/pbauth/v2beta1/computed_traffic_permissions.pb.go +++ b/proto-public/pbauth/v2beta1/computed_traffic_permissions.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbauth/v2beta1/computed_traffic_permissions.proto diff --git a/proto-public/pbauth/v2beta1/traffic_permissions.pb.go b/proto-public/pbauth/v2beta1/traffic_permissions.pb.go index 4226925386ac2..13d785dc2c89f 100644 --- a/proto-public/pbauth/v2beta1/traffic_permissions.pb.go +++ b/proto-public/pbauth/v2beta1/traffic_permissions.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbauth/v2beta1/traffic_permissions.proto diff --git a/proto-public/pbauth/v2beta1/workload_identity.pb.go b/proto-public/pbauth/v2beta1/workload_identity.pb.go index c24f45c776eac..679008f3e3b29 100644 --- a/proto-public/pbauth/v2beta1/workload_identity.pb.go +++ b/proto-public/pbauth/v2beta1/workload_identity.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbauth/v2beta1/workload_identity.proto diff --git a/proto-public/pbcatalog/v2beta1/dns.pb.go b/proto-public/pbcatalog/v2beta1/dns.pb.go index 446e788d3e955..9345fc4a78dc0 100644 --- a/proto-public/pbcatalog/v2beta1/dns.pb.go +++ b/proto-public/pbcatalog/v2beta1/dns.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbcatalog/v2beta1/dns.proto diff --git a/proto-public/pbcatalog/v2beta1/failover_policy.pb.go b/proto-public/pbcatalog/v2beta1/failover_policy.pb.go index 844e9e7a0af71..7819ed5f2dfd6 100644 --- a/proto-public/pbcatalog/v2beta1/failover_policy.pb.go +++ b/proto-public/pbcatalog/v2beta1/failover_policy.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbcatalog/v2beta1/failover_policy.proto @@ -24,8 +24,6 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// +kubebuilder:validation:Enum=FAILOVER_MODE_UNSPECIFIED;FAILOVER_MODE_SEQUENTIAL;FAILOVER_MODE_ORDER_BY_LOCALITY -// +kubebuilder:validation:Type=string type FailoverMode int32 const ( diff --git a/proto-public/pbcatalog/v2beta1/failover_policy.proto b/proto-public/pbcatalog/v2beta1/failover_policy.proto index abbeb46a3ae8b..dec86807f7543 100644 --- a/proto-public/pbcatalog/v2beta1/failover_policy.proto +++ b/proto-public/pbcatalog/v2beta1/failover_policy.proto @@ -43,8 +43,6 @@ message FailoverDestination { string datacenter = 3; } -// +kubebuilder:validation:Enum=FAILOVER_MODE_UNSPECIFIED;FAILOVER_MODE_SEQUENTIAL;FAILOVER_MODE_ORDER_BY_LOCALITY -// +kubebuilder:validation:Type=string enum FailoverMode { FAILOVER_MODE_UNSPECIFIED = 0; FAILOVER_MODE_SEQUENTIAL = 1; diff --git a/proto-public/pbcatalog/v2beta1/health.pb.go b/proto-public/pbcatalog/v2beta1/health.pb.go index 154a183831b21..68899af76bd3f 100644 --- a/proto-public/pbcatalog/v2beta1/health.pb.go +++ b/proto-public/pbcatalog/v2beta1/health.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbcatalog/v2beta1/health.proto @@ -25,8 +25,6 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// +kubebuilder:validation:Enum=HEALTH_ANY;HEALTH_PASSING;HEALTH_WARNING;HEALTH_CRITICAL;HEALTH_MAINTENANCE -// +kubebuilder:validation:Type=string type Health int32 const ( diff --git a/proto-public/pbcatalog/v2beta1/health.proto b/proto-public/pbcatalog/v2beta1/health.proto index 29b4f5bf4cdd8..316c58d5d197f 100644 --- a/proto-public/pbcatalog/v2beta1/health.proto +++ b/proto-public/pbcatalog/v2beta1/health.proto @@ -23,8 +23,6 @@ message HealthStatus { string output = 4; } -// +kubebuilder:validation:Enum=HEALTH_ANY;HEALTH_PASSING;HEALTH_WARNING;HEALTH_CRITICAL;HEALTH_MAINTENANCE -// +kubebuilder:validation:Type=string enum Health { // buf:lint:ignore ENUM_ZERO_VALUE_SUFFIX HEALTH_ANY = 0; diff --git a/proto-public/pbcatalog/v2beta1/node.pb.go b/proto-public/pbcatalog/v2beta1/node.pb.go index fc6d57f7fc227..cf38a7be7ab33 100644 --- a/proto-public/pbcatalog/v2beta1/node.pb.go +++ b/proto-public/pbcatalog/v2beta1/node.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbcatalog/v2beta1/node.proto diff --git a/proto-public/pbcatalog/v2beta1/protocol.pb.go b/proto-public/pbcatalog/v2beta1/protocol.pb.go index a1bdc899d92c9..bb770e8ae96ae 100644 --- a/proto-public/pbcatalog/v2beta1/protocol.pb.go +++ b/proto-public/pbcatalog/v2beta1/protocol.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbcatalog/v2beta1/protocol.proto diff --git a/proto-public/pbcatalog/v2beta1/selector.pb.go b/proto-public/pbcatalog/v2beta1/selector.pb.go index be51858d72c6b..78de8adadf016 100644 --- a/proto-public/pbcatalog/v2beta1/selector.pb.go +++ b/proto-public/pbcatalog/v2beta1/selector.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbcatalog/v2beta1/selector.proto diff --git a/proto-public/pbcatalog/v2beta1/service.pb.go b/proto-public/pbcatalog/v2beta1/service.pb.go index 99d51a9783b55..e019f7b60a0bb 100644 --- a/proto-public/pbcatalog/v2beta1/service.pb.go +++ b/proto-public/pbcatalog/v2beta1/service.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbcatalog/v2beta1/service.proto diff --git a/proto-public/pbcatalog/v2beta1/service_endpoints.pb.go b/proto-public/pbcatalog/v2beta1/service_endpoints.pb.go index fe98e95b2f27f..d1c02ef552bd1 100644 --- a/proto-public/pbcatalog/v2beta1/service_endpoints.pb.go +++ b/proto-public/pbcatalog/v2beta1/service_endpoints.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbcatalog/v2beta1/service_endpoints.proto diff --git a/proto-public/pbcatalog/v2beta1/vip.pb.go b/proto-public/pbcatalog/v2beta1/vip.pb.go index f0774f08b3338..e70b92432c4b7 100644 --- a/proto-public/pbcatalog/v2beta1/vip.pb.go +++ b/proto-public/pbcatalog/v2beta1/vip.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbcatalog/v2beta1/vip.proto diff --git a/proto-public/pbcatalog/v2beta1/workload.pb.go b/proto-public/pbcatalog/v2beta1/workload.pb.go index fb2ffa773e46b..b8505dc767ba5 100644 --- a/proto-public/pbcatalog/v2beta1/workload.pb.go +++ b/proto-public/pbcatalog/v2beta1/workload.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbcatalog/v2beta1/workload.proto diff --git a/proto-public/pbconnectca/ca.pb.go b/proto-public/pbconnectca/ca.pb.go index b4312816f3105..544554e4e6991 100644 --- a/proto-public/pbconnectca/ca.pb.go +++ b/proto-public/pbconnectca/ca.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbconnectca/ca.proto diff --git a/proto-public/pbdataplane/dataplane.pb.go b/proto-public/pbdataplane/dataplane.pb.go index faa826994768a..872a1f785ab60 100644 --- a/proto-public/pbdataplane/dataplane.pb.go +++ b/proto-public/pbdataplane/dataplane.pb.go @@ -5,7 +5,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbdataplane/dataplane.proto diff --git a/proto-public/pbdns/dns.pb.go b/proto-public/pbdns/dns.pb.go index c3825d68e9e4e..0ca671422675e 100644 --- a/proto-public/pbdns/dns.pb.go +++ b/proto-public/pbdns/dns.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbdns/dns.proto diff --git a/proto-public/pbmesh/v2beta1/common.pb.go b/proto-public/pbmesh/v2beta1/common.pb.go index c960d7c923884..18df155c05ef2 100644 --- a/proto-public/pbmesh/v2beta1/common.pb.go +++ b/proto-public/pbmesh/v2beta1/common.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbmesh/v2beta1/common.proto diff --git a/proto-public/pbmesh/v2beta1/computed_explicit_destinations.pb.go b/proto-public/pbmesh/v2beta1/computed_explicit_destinations.pb.go index 407fd7d31d41c..d2373032143d9 100644 --- a/proto-public/pbmesh/v2beta1/computed_explicit_destinations.pb.go +++ b/proto-public/pbmesh/v2beta1/computed_explicit_destinations.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbmesh/v2beta1/computed_explicit_destinations.proto diff --git a/proto-public/pbmesh/v2beta1/computed_proxy_configuration.pb.go b/proto-public/pbmesh/v2beta1/computed_proxy_configuration.pb.go index a35764664e3c3..626b34499b79c 100644 --- a/proto-public/pbmesh/v2beta1/computed_proxy_configuration.pb.go +++ b/proto-public/pbmesh/v2beta1/computed_proxy_configuration.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbmesh/v2beta1/computed_proxy_configuration.proto diff --git a/proto-public/pbmesh/v2beta1/computed_routes.pb.go b/proto-public/pbmesh/v2beta1/computed_routes.pb.go index 612da01c249b3..c1af9f011c54f 100644 --- a/proto-public/pbmesh/v2beta1/computed_routes.pb.go +++ b/proto-public/pbmesh/v2beta1/computed_routes.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbmesh/v2beta1/computed_routes.proto diff --git a/proto-public/pbmesh/v2beta1/connection.pb.go b/proto-public/pbmesh/v2beta1/connection.pb.go index 591df222fc93e..4822bdff8b589 100644 --- a/proto-public/pbmesh/v2beta1/connection.pb.go +++ b/proto-public/pbmesh/v2beta1/connection.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbmesh/v2beta1/connection.proto diff --git a/proto-public/pbmesh/v2beta1/destination_policy.pb.go b/proto-public/pbmesh/v2beta1/destination_policy.pb.go index 99d7c7eaeaeeb..7853384e19c55 100644 --- a/proto-public/pbmesh/v2beta1/destination_policy.pb.go +++ b/proto-public/pbmesh/v2beta1/destination_policy.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbmesh/v2beta1/destination_policy.proto diff --git a/proto-public/pbmesh/v2beta1/destinations.pb.go b/proto-public/pbmesh/v2beta1/destinations.pb.go index 623920c5145e1..0e6f8c545eede 100644 --- a/proto-public/pbmesh/v2beta1/destinations.pb.go +++ b/proto-public/pbmesh/v2beta1/destinations.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbmesh/v2beta1/destinations.proto diff --git a/proto-public/pbmesh/v2beta1/destinations_configuration.pb.go b/proto-public/pbmesh/v2beta1/destinations_configuration.pb.go index 2e6a8f5e969d8..5e85fbfb927b5 100644 --- a/proto-public/pbmesh/v2beta1/destinations_configuration.pb.go +++ b/proto-public/pbmesh/v2beta1/destinations_configuration.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbmesh/v2beta1/destinations_configuration.proto diff --git a/proto-public/pbmesh/v2beta1/expose.pb.go b/proto-public/pbmesh/v2beta1/expose.pb.go index 63958a4b4f213..771dd028d2f32 100644 --- a/proto-public/pbmesh/v2beta1/expose.pb.go +++ b/proto-public/pbmesh/v2beta1/expose.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbmesh/v2beta1/expose.proto diff --git a/proto-public/pbmesh/v2beta1/gateway_class.pb.binary.go b/proto-public/pbmesh/v2beta1/gateway_class.pb.binary.go deleted file mode 100644 index 571b376668bea..0000000000000 --- a/proto-public/pbmesh/v2beta1/gateway_class.pb.binary.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by protoc-gen-go-binary. DO NOT EDIT. -// source: pbmesh/v2beta1/gateway_class.proto - -package meshv2beta1 - -import ( - "google.golang.org/protobuf/proto" -) - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *GatewayClass) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *GatewayClass) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *ParametersReference) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *ParametersReference) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} diff --git a/proto-public/pbmesh/v2beta1/gateway_class.pb.go b/proto-public/pbmesh/v2beta1/gateway_class.pb.go deleted file mode 100644 index 5e6d442fdd049..0000000000000 --- a/proto-public/pbmesh/v2beta1/gateway_class.pb.go +++ /dev/null @@ -1,311 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: MPL-2.0 - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.30.0 -// protoc (unknown) -// source: pbmesh/v2beta1/gateway_class.proto - -package meshv2beta1 - -import ( - _ "github.com/hashicorp/consul/proto-public/pbresource" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// NOTE: this should align to the GAMMA/gateway-api version, or at least be -// easily translatable. -// -// https://gateway-api.sigs.k8s.io/reference/spec/#gateway.networking.k8s.io/v1.GatewayClass -// -// This is a Resource type. -type GatewayClass struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // ControllerName is the name of the Kubernetes controller that manages Gateways of this class - ControllerName string `protobuf:"bytes,1,opt,name=controller_name,json=controllerName,proto3" json:"controller_name,omitempty"` - // ParametersRef refers to a resource responsible for configuring - // the behavior of the GatewayClass. - ParametersRef *ParametersReference `protobuf:"bytes,2,opt,name=parameters_ref,json=parametersRef,proto3,oneof" json:"parameters_ref,omitempty"` - // Description of GatewayClass - Description *string `protobuf:"bytes,3,opt,name=description,proto3,oneof" json:"description,omitempty"` -} - -func (x *GatewayClass) Reset() { - *x = GatewayClass{} - if protoimpl.UnsafeEnabled { - mi := &file_pbmesh_v2beta1_gateway_class_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GatewayClass) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GatewayClass) ProtoMessage() {} - -func (x *GatewayClass) ProtoReflect() protoreflect.Message { - mi := &file_pbmesh_v2beta1_gateway_class_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GatewayClass.ProtoReflect.Descriptor instead. -func (*GatewayClass) Descriptor() ([]byte, []int) { - return file_pbmesh_v2beta1_gateway_class_proto_rawDescGZIP(), []int{0} -} - -func (x *GatewayClass) GetControllerName() string { - if x != nil { - return x.ControllerName - } - return "" -} - -func (x *GatewayClass) GetParametersRef() *ParametersReference { - if x != nil { - return x.ParametersRef - } - return nil -} - -func (x *GatewayClass) GetDescription() string { - if x != nil && x.Description != nil { - return *x.Description - } - return "" -} - -// NOTE: this should align to the GAMMA/gateway-api version, or at least be -// easily translatable. -// -// ParametersReference specifies a resource that contains Kubernetes controller-specific configuration -// for a resource -// https://gateway-api.sigs.k8s.io/reference/spec/#gateway.networking.k8s.io/v1.ParametersReference -type ParametersReference struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The Kubernetes Group that the referred object belongs to - Group string `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` - // The Kubernetes Kind that the referred object is - Kind string `protobuf:"bytes,2,opt,name=kind,proto3" json:"kind,omitempty"` - // The name of the referred object - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - // The kubernetes namespace that the referred object is in - Namespace *string `protobuf:"bytes,4,opt,name=namespace,proto3,oneof" json:"namespace,omitempty"` -} - -func (x *ParametersReference) Reset() { - *x = ParametersReference{} - if protoimpl.UnsafeEnabled { - mi := &file_pbmesh_v2beta1_gateway_class_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ParametersReference) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ParametersReference) ProtoMessage() {} - -func (x *ParametersReference) ProtoReflect() protoreflect.Message { - mi := &file_pbmesh_v2beta1_gateway_class_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ParametersReference.ProtoReflect.Descriptor instead. -func (*ParametersReference) Descriptor() ([]byte, []int) { - return file_pbmesh_v2beta1_gateway_class_proto_rawDescGZIP(), []int{1} -} - -func (x *ParametersReference) GetGroup() string { - if x != nil { - return x.Group - } - return "" -} - -func (x *ParametersReference) GetKind() string { - if x != nil { - return x.Kind - } - return "" -} - -func (x *ParametersReference) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *ParametersReference) GetNamespace() string { - if x != nil && x.Namespace != nil { - return *x.Namespace - } - return "" -} - -var File_pbmesh_v2beta1_gateway_class_proto protoreflect.FileDescriptor - -var file_pbmesh_v2beta1_gateway_class_proto_rawDesc = []byte{ - 0x0a, 0x22, 0x70, 0x62, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1d, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, - 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x32, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x1a, 0x1c, 0x70, 0x62, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2f, - 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x22, 0xe9, 0x01, 0x0a, 0x0c, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x43, 0x6c, 0x61, - 0x73, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, - 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x5e, 0x0a, 0x0e, 0x70, - 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, - 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x32, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, - 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x70, 0x61, 0x72, 0x61, 0x6d, - 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x66, 0x88, 0x01, 0x01, 0x12, 0x25, 0x0a, 0x0b, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x48, 0x01, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x88, - 0x01, 0x01, 0x3a, 0x06, 0xa2, 0x93, 0x04, 0x02, 0x08, 0x01, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x70, - 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x5f, 0x72, 0x65, 0x66, 0x42, 0x0e, 0x0a, - 0x0c, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x84, 0x01, - 0x0a, 0x13, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6b, - 0x69, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x88, 0x01, 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x42, 0x92, 0x02, 0x0a, 0x21, 0x63, 0x6f, 0x6d, 0x2e, 0x68, 0x61, 0x73, - 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65, - 0x73, 0x68, 0x2e, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, 0x11, 0x47, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, - 0x43, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68, - 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x62, 0x6d, 0x65, 0x73, 0x68, - 0x2f, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x3b, 0x6d, 0x65, 0x73, 0x68, 0x76, 0x32, 0x62, - 0x65, 0x74, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x48, 0x43, 0x4d, 0xaa, 0x02, 0x1d, 0x48, 0x61, 0x73, - 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x4d, 0x65, - 0x73, 0x68, 0x2e, 0x56, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x1d, 0x48, 0x61, 0x73, - 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x5c, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x5c, 0x4d, 0x65, - 0x73, 0x68, 0x5c, 0x56, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, 0x29, 0x48, 0x61, 0x73, - 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x5c, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x5c, 0x4d, 0x65, - 0x73, 0x68, 0x5c, 0x56, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x20, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, - 0x72, 0x70, 0x3a, 0x3a, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x3a, 0x3a, 0x4d, 0x65, 0x73, 0x68, - 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, -} - -var ( - file_pbmesh_v2beta1_gateway_class_proto_rawDescOnce sync.Once - file_pbmesh_v2beta1_gateway_class_proto_rawDescData = file_pbmesh_v2beta1_gateway_class_proto_rawDesc -) - -func file_pbmesh_v2beta1_gateway_class_proto_rawDescGZIP() []byte { - file_pbmesh_v2beta1_gateway_class_proto_rawDescOnce.Do(func() { - file_pbmesh_v2beta1_gateway_class_proto_rawDescData = protoimpl.X.CompressGZIP(file_pbmesh_v2beta1_gateway_class_proto_rawDescData) - }) - return file_pbmesh_v2beta1_gateway_class_proto_rawDescData -} - -var file_pbmesh_v2beta1_gateway_class_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_pbmesh_v2beta1_gateway_class_proto_goTypes = []interface{}{ - (*GatewayClass)(nil), // 0: hashicorp.consul.mesh.v2beta1.GatewayClass - (*ParametersReference)(nil), // 1: hashicorp.consul.mesh.v2beta1.ParametersReference -} -var file_pbmesh_v2beta1_gateway_class_proto_depIdxs = []int32{ - 1, // 0: hashicorp.consul.mesh.v2beta1.GatewayClass.parameters_ref:type_name -> hashicorp.consul.mesh.v2beta1.ParametersReference - 1, // [1:1] is the sub-list for method output_type - 1, // [1:1] is the sub-list for method input_type - 1, // [1:1] is the sub-list for extension type_name - 1, // [1:1] is the sub-list for extension extendee - 0, // [0:1] is the sub-list for field type_name -} - -func init() { file_pbmesh_v2beta1_gateway_class_proto_init() } -func file_pbmesh_v2beta1_gateway_class_proto_init() { - if File_pbmesh_v2beta1_gateway_class_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_pbmesh_v2beta1_gateway_class_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GatewayClass); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pbmesh_v2beta1_gateway_class_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ParametersReference); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_pbmesh_v2beta1_gateway_class_proto_msgTypes[0].OneofWrappers = []interface{}{} - file_pbmesh_v2beta1_gateway_class_proto_msgTypes[1].OneofWrappers = []interface{}{} - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_pbmesh_v2beta1_gateway_class_proto_rawDesc, - NumEnums: 0, - NumMessages: 2, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_pbmesh_v2beta1_gateway_class_proto_goTypes, - DependencyIndexes: file_pbmesh_v2beta1_gateway_class_proto_depIdxs, - MessageInfos: file_pbmesh_v2beta1_gateway_class_proto_msgTypes, - }.Build() - File_pbmesh_v2beta1_gateway_class_proto = out.File - file_pbmesh_v2beta1_gateway_class_proto_rawDesc = nil - file_pbmesh_v2beta1_gateway_class_proto_goTypes = nil - file_pbmesh_v2beta1_gateway_class_proto_depIdxs = nil -} diff --git a/proto-public/pbmesh/v2beta1/gateway_class.proto b/proto-public/pbmesh/v2beta1/gateway_class.proto deleted file mode 100644 index 8bba03c416dd7..0000000000000 --- a/proto-public/pbmesh/v2beta1/gateway_class.proto +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: MPL-2.0 - -syntax = "proto3"; - -package hashicorp.consul.mesh.v2beta1; - -import "pbresource/annotations.proto"; - -// NOTE: this should align to the GAMMA/gateway-api version, or at least be -// easily translatable. -// -// https://gateway-api.sigs.k8s.io/reference/spec/#gateway.networking.k8s.io/v1.GatewayClass -// -// This is a Resource type. -message GatewayClass { - option (hashicorp.consul.resource.spec) = {scope: SCOPE_CLUSTER}; - - // ControllerName is the name of the Kubernetes controller that manages Gateways of this class - string controller_name = 1; - - // ParametersRef refers to a resource responsible for configuring - // the behavior of the GatewayClass. - optional ParametersReference parameters_ref = 2; - - // Description of GatewayClass - optional string description = 3; -} - -// NOTE: this should align to the GAMMA/gateway-api version, or at least be -// easily translatable. -// -// ParametersReference specifies a resource that contains Kubernetes controller-specific configuration -// for a resource -// https://gateway-api.sigs.k8s.io/reference/spec/#gateway.networking.k8s.io/v1.ParametersReference -// -message ParametersReference { - // The Kubernetes Group that the referred object belongs to - string group = 1; - - // The Kubernetes Kind that the referred object is - string kind = 2; - - // The name of the referred object - string name = 3; - - // The kubernetes namespace that the referred object is in - optional string namespace = 4; -} diff --git a/proto-public/pbmesh/v2beta1/gateway_class_deepcopy.gen.go b/proto-public/pbmesh/v2beta1/gateway_class_deepcopy.gen.go deleted file mode 100644 index c09a4cbe20055..0000000000000 --- a/proto-public/pbmesh/v2beta1/gateway_class_deepcopy.gen.go +++ /dev/null @@ -1,48 +0,0 @@ -// Code generated by protoc-gen-deepcopy. DO NOT EDIT. -package meshv2beta1 - -import ( - proto "google.golang.org/protobuf/proto" -) - -// DeepCopyInto supports using GatewayClass within kubernetes types, where deepcopy-gen is used. -func (in *GatewayClass) DeepCopyInto(out *GatewayClass) { - proto.Reset(out) - proto.Merge(out, proto.Clone(in)) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GatewayClass. Required by controller-gen. -func (in *GatewayClass) DeepCopy() *GatewayClass { - if in == nil { - return nil - } - out := new(GatewayClass) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new GatewayClass. Required by controller-gen. -func (in *GatewayClass) DeepCopyInterface() interface{} { - return in.DeepCopy() -} - -// DeepCopyInto supports using ParametersReference within kubernetes types, where deepcopy-gen is used. -func (in *ParametersReference) DeepCopyInto(out *ParametersReference) { - proto.Reset(out) - proto.Merge(out, proto.Clone(in)) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ParametersReference. Required by controller-gen. -func (in *ParametersReference) DeepCopy() *ParametersReference { - if in == nil { - return nil - } - out := new(ParametersReference) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new ParametersReference. Required by controller-gen. -func (in *ParametersReference) DeepCopyInterface() interface{} { - return in.DeepCopy() -} diff --git a/proto-public/pbmesh/v2beta1/gateway_class_json.gen.go b/proto-public/pbmesh/v2beta1/gateway_class_json.gen.go deleted file mode 100644 index 0b3bdea9d01a5..0000000000000 --- a/proto-public/pbmesh/v2beta1/gateway_class_json.gen.go +++ /dev/null @@ -1,33 +0,0 @@ -// Code generated by protoc-json-shim. DO NOT EDIT. -package meshv2beta1 - -import ( - protojson "google.golang.org/protobuf/encoding/protojson" -) - -// MarshalJSON is a custom marshaler for GatewayClass -func (this *GatewayClass) MarshalJSON() ([]byte, error) { - str, err := GatewayClassMarshaler.Marshal(this) - return []byte(str), err -} - -// UnmarshalJSON is a custom unmarshaler for GatewayClass -func (this *GatewayClass) UnmarshalJSON(b []byte) error { - return GatewayClassUnmarshaler.Unmarshal(b, this) -} - -// MarshalJSON is a custom marshaler for ParametersReference -func (this *ParametersReference) MarshalJSON() ([]byte, error) { - str, err := GatewayClassMarshaler.Marshal(this) - return []byte(str), err -} - -// UnmarshalJSON is a custom unmarshaler for ParametersReference -func (this *ParametersReference) UnmarshalJSON(b []byte) error { - return GatewayClassUnmarshaler.Unmarshal(b, this) -} - -var ( - GatewayClassMarshaler = &protojson.MarshalOptions{} - GatewayClassUnmarshaler = &protojson.UnmarshalOptions{DiscardUnknown: false} -) diff --git a/proto-public/pbmesh/v2beta1/gatewayclassconfig.pb.binary.go b/proto-public/pbmesh/v2beta1/gatewayclassconfig.pb.binary.go deleted file mode 100644 index d7437933f7b16..0000000000000 --- a/proto-public/pbmesh/v2beta1/gatewayclassconfig.pb.binary.go +++ /dev/null @@ -1,78 +0,0 @@ -// Code generated by protoc-gen-go-binary. DO NOT EDIT. -// source: pbmesh/v2beta1/gatewayclassconfig.proto - -package meshv2beta1 - -import ( - "google.golang.org/protobuf/proto" -) - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *GatewayClassConfig) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *GatewayClassConfig) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *Consul) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *Consul) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *Authentication) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *Authentication) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *Ports) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *Ports) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *CopyAnnotations) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *CopyAnnotations) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *Deployment) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *Deployment) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *Image) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *Image) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} diff --git a/proto-public/pbmesh/v2beta1/gatewayclassconfig.pb.go b/proto-public/pbmesh/v2beta1/gatewayclassconfig.pb.go deleted file mode 100644 index 116559b13154d..0000000000000 --- a/proto-public/pbmesh/v2beta1/gatewayclassconfig.pb.go +++ /dev/null @@ -1,798 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: MPL-2.0 - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.30.0 -// protoc (unknown) -// source: pbmesh/v2beta1/gatewayclassconfig.proto - -package meshv2beta1 - -import ( - _ "github.com/hashicorp/consul/proto-public/pbresource" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// This is a Resource type. -type GatewayClassConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Consul *Consul `protobuf:"bytes,1,opt,name=consul,proto3,oneof" json:"consul,omitempty"` - CopyAnnotations *CopyAnnotations `protobuf:"bytes,2,opt,name=copy_annotations,json=copyAnnotations,proto3,oneof" json:"copy_annotations,omitempty"` - Deployment *Deployment `protobuf:"bytes,3,opt,name=deployment,proto3,oneof" json:"deployment,omitempty"` - Image *Image `protobuf:"bytes,4,opt,name=image,proto3,oneof" json:"image,omitempty"` - LogLevel *string `protobuf:"bytes,5,opt,name=log_level,json=logLevel,proto3,oneof" json:"log_level,omitempty"` - MapPrivilegedContainerPorts *uint32 `protobuf:"varint,6,opt,name=map_privileged_container_ports,json=mapPrivilegedContainerPorts,proto3,oneof" json:"map_privileged_container_ports,omitempty"` - NodeSelector *string `protobuf:"bytes,7,opt,name=node_selector,json=nodeSelector,proto3,oneof" json:"node_selector,omitempty"` - OpenshiftSccName *string `protobuf:"bytes,8,opt,name=openshift_scc_name,json=openshiftSccName,proto3,oneof" json:"openshift_scc_name,omitempty"` - ServiceType *string `protobuf:"bytes,9,opt,name=service_type,json=serviceType,proto3,oneof" json:"service_type,omitempty"` - UseHostPorts *bool `protobuf:"varint,10,opt,name=use_host_ports,json=useHostPorts,proto3,oneof" json:"use_host_ports,omitempty"` -} - -func (x *GatewayClassConfig) Reset() { - *x = GatewayClassConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_pbmesh_v2beta1_gatewayclassconfig_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GatewayClassConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GatewayClassConfig) ProtoMessage() {} - -func (x *GatewayClassConfig) ProtoReflect() protoreflect.Message { - mi := &file_pbmesh_v2beta1_gatewayclassconfig_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GatewayClassConfig.ProtoReflect.Descriptor instead. -func (*GatewayClassConfig) Descriptor() ([]byte, []int) { - return file_pbmesh_v2beta1_gatewayclassconfig_proto_rawDescGZIP(), []int{0} -} - -func (x *GatewayClassConfig) GetConsul() *Consul { - if x != nil { - return x.Consul - } - return nil -} - -func (x *GatewayClassConfig) GetCopyAnnotations() *CopyAnnotations { - if x != nil { - return x.CopyAnnotations - } - return nil -} - -func (x *GatewayClassConfig) GetDeployment() *Deployment { - if x != nil { - return x.Deployment - } - return nil -} - -func (x *GatewayClassConfig) GetImage() *Image { - if x != nil { - return x.Image - } - return nil -} - -func (x *GatewayClassConfig) GetLogLevel() string { - if x != nil && x.LogLevel != nil { - return *x.LogLevel - } - return "" -} - -func (x *GatewayClassConfig) GetMapPrivilegedContainerPorts() uint32 { - if x != nil && x.MapPrivilegedContainerPorts != nil { - return *x.MapPrivilegedContainerPorts - } - return 0 -} - -func (x *GatewayClassConfig) GetNodeSelector() string { - if x != nil && x.NodeSelector != nil { - return *x.NodeSelector - } - return "" -} - -func (x *GatewayClassConfig) GetOpenshiftSccName() string { - if x != nil && x.OpenshiftSccName != nil { - return *x.OpenshiftSccName - } - return "" -} - -func (x *GatewayClassConfig) GetServiceType() string { - if x != nil && x.ServiceType != nil { - return *x.ServiceType - } - return "" -} - -func (x *GatewayClassConfig) GetUseHostPorts() bool { - if x != nil && x.UseHostPorts != nil { - return *x.UseHostPorts - } - return false -} - -type Consul struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Address *string `protobuf:"bytes,1,opt,name=address,proto3,oneof" json:"address,omitempty"` - Authentication *Authentication `protobuf:"bytes,2,opt,name=authentication,proto3,oneof" json:"authentication,omitempty"` - Scheme *string `protobuf:"bytes,3,opt,name=scheme,proto3,oneof" json:"scheme,omitempty"` - Ports *Ports `protobuf:"bytes,4,opt,name=ports,proto3,oneof" json:"ports,omitempty"` -} - -func (x *Consul) Reset() { - *x = Consul{} - if protoimpl.UnsafeEnabled { - mi := &file_pbmesh_v2beta1_gatewayclassconfig_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Consul) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Consul) ProtoMessage() {} - -func (x *Consul) ProtoReflect() protoreflect.Message { - mi := &file_pbmesh_v2beta1_gatewayclassconfig_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Consul.ProtoReflect.Descriptor instead. -func (*Consul) Descriptor() ([]byte, []int) { - return file_pbmesh_v2beta1_gatewayclassconfig_proto_rawDescGZIP(), []int{1} -} - -func (x *Consul) GetAddress() string { - if x != nil && x.Address != nil { - return *x.Address - } - return "" -} - -func (x *Consul) GetAuthentication() *Authentication { - if x != nil { - return x.Authentication - } - return nil -} - -func (x *Consul) GetScheme() string { - if x != nil && x.Scheme != nil { - return *x.Scheme - } - return "" -} - -func (x *Consul) GetPorts() *Ports { - if x != nil { - return x.Ports - } - return nil -} - -type Authentication struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Address *string `protobuf:"bytes,1,opt,name=address,proto3,oneof" json:"address,omitempty"` - Managed *bool `protobuf:"varint,2,opt,name=managed,proto3,oneof" json:"managed,omitempty"` - Method *string `protobuf:"bytes,3,opt,name=method,proto3,oneof" json:"method,omitempty"` - Namespace *string `protobuf:"bytes,4,opt,name=namespace,proto3,oneof" json:"namespace,omitempty"` -} - -func (x *Authentication) Reset() { - *x = Authentication{} - if protoimpl.UnsafeEnabled { - mi := &file_pbmesh_v2beta1_gatewayclassconfig_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Authentication) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Authentication) ProtoMessage() {} - -func (x *Authentication) ProtoReflect() protoreflect.Message { - mi := &file_pbmesh_v2beta1_gatewayclassconfig_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Authentication.ProtoReflect.Descriptor instead. -func (*Authentication) Descriptor() ([]byte, []int) { - return file_pbmesh_v2beta1_gatewayclassconfig_proto_rawDescGZIP(), []int{2} -} - -func (x *Authentication) GetAddress() string { - if x != nil && x.Address != nil { - return *x.Address - } - return "" -} - -func (x *Authentication) GetManaged() bool { - if x != nil && x.Managed != nil { - return *x.Managed - } - return false -} - -func (x *Authentication) GetMethod() string { - if x != nil && x.Method != nil { - return *x.Method - } - return "" -} - -func (x *Authentication) GetNamespace() string { - if x != nil && x.Namespace != nil { - return *x.Namespace - } - return "" -} - -type Ports struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Grpc *uint32 `protobuf:"varint,1,opt,name=grpc,proto3,oneof" json:"grpc,omitempty"` - Http *uint32 `protobuf:"varint,2,opt,name=http,proto3,oneof" json:"http,omitempty"` -} - -func (x *Ports) Reset() { - *x = Ports{} - if protoimpl.UnsafeEnabled { - mi := &file_pbmesh_v2beta1_gatewayclassconfig_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Ports) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Ports) ProtoMessage() {} - -func (x *Ports) ProtoReflect() protoreflect.Message { - mi := &file_pbmesh_v2beta1_gatewayclassconfig_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Ports.ProtoReflect.Descriptor instead. -func (*Ports) Descriptor() ([]byte, []int) { - return file_pbmesh_v2beta1_gatewayclassconfig_proto_rawDescGZIP(), []int{3} -} - -func (x *Ports) GetGrpc() uint32 { - if x != nil && x.Grpc != nil { - return *x.Grpc - } - return 0 -} - -func (x *Ports) GetHttp() uint32 { - if x != nil && x.Http != nil { - return *x.Http - } - return 0 -} - -type CopyAnnotations struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Service []string `protobuf:"bytes,1,rep,name=service,proto3" json:"service,omitempty"` -} - -func (x *CopyAnnotations) Reset() { - *x = CopyAnnotations{} - if protoimpl.UnsafeEnabled { - mi := &file_pbmesh_v2beta1_gatewayclassconfig_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CopyAnnotations) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CopyAnnotations) ProtoMessage() {} - -func (x *CopyAnnotations) ProtoReflect() protoreflect.Message { - mi := &file_pbmesh_v2beta1_gatewayclassconfig_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CopyAnnotations.ProtoReflect.Descriptor instead. -func (*CopyAnnotations) Descriptor() ([]byte, []int) { - return file_pbmesh_v2beta1_gatewayclassconfig_proto_rawDescGZIP(), []int{4} -} - -func (x *CopyAnnotations) GetService() []string { - if x != nil { - return x.Service - } - return nil -} - -type Deployment struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - DefaultInstances *uint32 `protobuf:"varint,1,opt,name=default_instances,json=defaultInstances,proto3,oneof" json:"default_instances,omitempty"` - MinInstances *uint32 `protobuf:"varint,2,opt,name=min_instances,json=minInstances,proto3,oneof" json:"min_instances,omitempty"` - MaxInstances *uint32 `protobuf:"varint,3,opt,name=max_instances,json=maxInstances,proto3,oneof" json:"max_instances,omitempty"` -} - -func (x *Deployment) Reset() { - *x = Deployment{} - if protoimpl.UnsafeEnabled { - mi := &file_pbmesh_v2beta1_gatewayclassconfig_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Deployment) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Deployment) ProtoMessage() {} - -func (x *Deployment) ProtoReflect() protoreflect.Message { - mi := &file_pbmesh_v2beta1_gatewayclassconfig_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Deployment.ProtoReflect.Descriptor instead. -func (*Deployment) Descriptor() ([]byte, []int) { - return file_pbmesh_v2beta1_gatewayclassconfig_proto_rawDescGZIP(), []int{5} -} - -func (x *Deployment) GetDefaultInstances() uint32 { - if x != nil && x.DefaultInstances != nil { - return *x.DefaultInstances - } - return 0 -} - -func (x *Deployment) GetMinInstances() uint32 { - if x != nil && x.MinInstances != nil { - return *x.MinInstances - } - return 0 -} - -func (x *Deployment) GetMaxInstances() uint32 { - if x != nil && x.MaxInstances != nil { - return *x.MaxInstances - } - return 0 -} - -type Image struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ConsulApiGateway *string `protobuf:"bytes,1,opt,name=consul_api_gateway,json=consulApiGateway,proto3,oneof" json:"consul_api_gateway,omitempty"` - Envoy *string `protobuf:"bytes,2,opt,name=envoy,proto3,oneof" json:"envoy,omitempty"` -} - -func (x *Image) Reset() { - *x = Image{} - if protoimpl.UnsafeEnabled { - mi := &file_pbmesh_v2beta1_gatewayclassconfig_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Image) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Image) ProtoMessage() {} - -func (x *Image) ProtoReflect() protoreflect.Message { - mi := &file_pbmesh_v2beta1_gatewayclassconfig_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Image.ProtoReflect.Descriptor instead. -func (*Image) Descriptor() ([]byte, []int) { - return file_pbmesh_v2beta1_gatewayclassconfig_proto_rawDescGZIP(), []int{6} -} - -func (x *Image) GetConsulApiGateway() string { - if x != nil && x.ConsulApiGateway != nil { - return *x.ConsulApiGateway - } - return "" -} - -func (x *Image) GetEnvoy() string { - if x != nil && x.Envoy != nil { - return *x.Envoy - } - return "" -} - -var File_pbmesh_v2beta1_gatewayclassconfig_proto protoreflect.FileDescriptor - -var file_pbmesh_v2beta1_gatewayclassconfig_proto_rawDesc = []byte{ - 0x0a, 0x27, 0x70, 0x62, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1d, 0x68, 0x61, 0x73, 0x68, 0x69, - 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, - 0x2e, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x1a, 0x1c, 0x70, 0x62, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa4, 0x06, 0x0a, 0x12, 0x47, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x42, 0x0a, - 0x06, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, - 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, - 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, - 0x6e, 0x73, 0x75, 0x6c, 0x48, 0x00, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x88, 0x01, - 0x01, 0x12, 0x5e, 0x0a, 0x10, 0x63, 0x6f, 0x70, 0x79, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x68, 0x61, - 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, - 0x65, 0x73, 0x68, 0x2e, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x70, 0x79, - 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x01, 0x52, 0x0f, 0x63, - 0x6f, 0x70, 0x79, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x88, 0x01, - 0x01, 0x12, 0x4e, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, - 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x32, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x48, 0x02, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x88, 0x01, - 0x01, 0x12, 0x3f, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x24, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, - 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x48, 0x03, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x88, - 0x01, 0x01, 0x12, 0x20, 0x0a, 0x09, 0x6c, 0x6f, 0x67, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x04, 0x52, 0x08, 0x6c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, - 0x6c, 0x88, 0x01, 0x01, 0x12, 0x48, 0x0a, 0x1e, 0x6d, 0x61, 0x70, 0x5f, 0x70, 0x72, 0x69, 0x76, - 0x69, 0x6c, 0x65, 0x67, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x05, 0x52, 0x1b, - 0x6d, 0x61, 0x70, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x64, 0x43, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x88, 0x01, 0x01, 0x12, 0x28, - 0x0a, 0x0d, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x09, 0x48, 0x06, 0x52, 0x0c, 0x6e, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x6c, - 0x65, 0x63, 0x74, 0x6f, 0x72, 0x88, 0x01, 0x01, 0x12, 0x31, 0x0a, 0x12, 0x6f, 0x70, 0x65, 0x6e, - 0x73, 0x68, 0x69, 0x66, 0x74, 0x5f, 0x73, 0x63, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x09, 0x48, 0x07, 0x52, 0x10, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x68, 0x69, 0x66, - 0x74, 0x53, 0x63, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x26, 0x0a, 0x0c, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x09, 0x48, 0x08, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, - 0x88, 0x01, 0x01, 0x12, 0x29, 0x0a, 0x0e, 0x75, 0x73, 0x65, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x5f, - 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x48, 0x09, 0x52, 0x0c, 0x75, - 0x73, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x88, 0x01, 0x01, 0x3a, 0x06, - 0xa2, 0x93, 0x04, 0x02, 0x08, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x75, - 0x6c, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x63, 0x6f, 0x70, 0x79, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x42, - 0x0c, 0x0a, 0x0a, 0x5f, 0x6c, 0x6f, 0x67, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x42, 0x21, 0x0a, - 0x1f, 0x5f, 0x6d, 0x61, 0x70, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x64, - 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x73, - 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x42, 0x15, 0x0a, 0x13, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x68, 0x69, 0x66, 0x74, - 0x5f, 0x73, 0x63, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x75, - 0x73, 0x65, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x22, 0x95, 0x02, - 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x12, 0x1d, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x61, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x88, 0x01, 0x01, 0x12, 0x5a, 0x0a, 0x0e, 0x61, 0x75, 0x74, 0x68, 0x65, - 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2d, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, - 0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x01, - 0x52, 0x0e, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x88, 0x01, 0x01, 0x12, 0x1b, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x88, 0x01, 0x01, - 0x12, 0x3f, 0x0a, 0x05, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x24, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, - 0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x50, 0x6f, 0x72, 0x74, 0x73, 0x48, 0x03, 0x52, 0x05, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x88, 0x01, - 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x42, 0x11, 0x0a, - 0x0f, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x42, 0x08, 0x0a, 0x06, 0x5f, - 0x70, 0x6f, 0x72, 0x74, 0x73, 0x22, 0xbf, 0x01, 0x0a, 0x0e, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, - 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x61, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x88, 0x01, 0x01, 0x12, 0x1d, 0x0a, 0x07, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, 0x07, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x64, 0x88, 0x01, 0x01, 0x12, 0x1b, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, - 0x88, 0x01, 0x01, 0x12, 0x21, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x03, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x88, 0x01, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x42, 0x09, - 0x0a, 0x07, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x4b, 0x0a, 0x05, 0x50, 0x6f, 0x72, 0x74, 0x73, - 0x12, 0x17, 0x0a, 0x04, 0x67, 0x72, 0x70, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x00, - 0x52, 0x04, 0x67, 0x72, 0x70, 0x63, 0x88, 0x01, 0x01, 0x12, 0x17, 0x0a, 0x04, 0x68, 0x74, 0x74, - 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x01, 0x52, 0x04, 0x68, 0x74, 0x74, 0x70, 0x88, - 0x01, 0x01, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x67, 0x72, 0x70, 0x63, 0x42, 0x07, 0x0a, 0x05, 0x5f, - 0x68, 0x74, 0x74, 0x70, 0x22, 0x2b, 0x0a, 0x0f, 0x43, 0x6f, 0x70, 0x79, 0x41, 0x6e, 0x6e, 0x6f, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x22, 0xcc, 0x01, 0x0a, 0x0a, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x12, 0x30, 0x0a, 0x11, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x00, 0x52, 0x10, 0x64, - 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x88, - 0x01, 0x01, 0x12, 0x28, 0x0a, 0x0d, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x01, 0x52, 0x0c, 0x6d, 0x69, 0x6e, - 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x88, 0x01, 0x01, 0x12, 0x28, 0x0a, 0x0d, - 0x6d, 0x61, 0x78, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0d, 0x48, 0x02, 0x52, 0x0c, 0x6d, 0x61, 0x78, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x73, 0x88, 0x01, 0x01, 0x42, 0x14, 0x0a, 0x12, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, - 0x6c, 0x74, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x42, 0x10, 0x0a, 0x0e, - 0x5f, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x42, 0x10, - 0x0a, 0x0e, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, - 0x22, 0x76, 0x0a, 0x05, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x31, 0x0a, 0x12, 0x63, 0x6f, 0x6e, - 0x73, 0x75, 0x6c, 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x10, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x41, - 0x70, 0x69, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x88, 0x01, 0x01, 0x12, 0x19, 0x0a, 0x05, - 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x05, 0x65, - 0x6e, 0x76, 0x6f, 0x79, 0x88, 0x01, 0x01, 0x42, 0x15, 0x0a, 0x13, 0x5f, 0x63, 0x6f, 0x6e, 0x73, - 0x75, 0x6c, 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x42, 0x08, - 0x0a, 0x06, 0x5f, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x42, 0x98, 0x02, 0x0a, 0x21, 0x63, 0x6f, 0x6d, - 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, - 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, 0x17, - 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x43, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f, - 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2d, 0x70, 0x75, 0x62, - 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x62, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76, 0x32, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x3b, 0x6d, 0x65, 0x73, 0x68, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0xa2, 0x02, - 0x03, 0x48, 0x43, 0x4d, 0xaa, 0x02, 0x1d, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, - 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x2e, 0x56, 0x32, 0x62, - 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x1d, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, - 0x5c, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x5c, 0x4d, 0x65, 0x73, 0x68, 0x5c, 0x56, 0x32, 0x62, - 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, 0x29, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, - 0x5c, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x5c, 0x4d, 0x65, 0x73, 0x68, 0x5c, 0x56, 0x32, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0xea, 0x02, 0x20, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x3a, 0x3a, 0x43, 0x6f, - 0x6e, 0x73, 0x75, 0x6c, 0x3a, 0x3a, 0x4d, 0x65, 0x73, 0x68, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_pbmesh_v2beta1_gatewayclassconfig_proto_rawDescOnce sync.Once - file_pbmesh_v2beta1_gatewayclassconfig_proto_rawDescData = file_pbmesh_v2beta1_gatewayclassconfig_proto_rawDesc -) - -func file_pbmesh_v2beta1_gatewayclassconfig_proto_rawDescGZIP() []byte { - file_pbmesh_v2beta1_gatewayclassconfig_proto_rawDescOnce.Do(func() { - file_pbmesh_v2beta1_gatewayclassconfig_proto_rawDescData = protoimpl.X.CompressGZIP(file_pbmesh_v2beta1_gatewayclassconfig_proto_rawDescData) - }) - return file_pbmesh_v2beta1_gatewayclassconfig_proto_rawDescData -} - -var file_pbmesh_v2beta1_gatewayclassconfig_proto_msgTypes = make([]protoimpl.MessageInfo, 7) -var file_pbmesh_v2beta1_gatewayclassconfig_proto_goTypes = []interface{}{ - (*GatewayClassConfig)(nil), // 0: hashicorp.consul.mesh.v2beta1.GatewayClassConfig - (*Consul)(nil), // 1: hashicorp.consul.mesh.v2beta1.Consul - (*Authentication)(nil), // 2: hashicorp.consul.mesh.v2beta1.Authentication - (*Ports)(nil), // 3: hashicorp.consul.mesh.v2beta1.Ports - (*CopyAnnotations)(nil), // 4: hashicorp.consul.mesh.v2beta1.CopyAnnotations - (*Deployment)(nil), // 5: hashicorp.consul.mesh.v2beta1.Deployment - (*Image)(nil), // 6: hashicorp.consul.mesh.v2beta1.Image -} -var file_pbmesh_v2beta1_gatewayclassconfig_proto_depIdxs = []int32{ - 1, // 0: hashicorp.consul.mesh.v2beta1.GatewayClassConfig.consul:type_name -> hashicorp.consul.mesh.v2beta1.Consul - 4, // 1: hashicorp.consul.mesh.v2beta1.GatewayClassConfig.copy_annotations:type_name -> hashicorp.consul.mesh.v2beta1.CopyAnnotations - 5, // 2: hashicorp.consul.mesh.v2beta1.GatewayClassConfig.deployment:type_name -> hashicorp.consul.mesh.v2beta1.Deployment - 6, // 3: hashicorp.consul.mesh.v2beta1.GatewayClassConfig.image:type_name -> hashicorp.consul.mesh.v2beta1.Image - 2, // 4: hashicorp.consul.mesh.v2beta1.Consul.authentication:type_name -> hashicorp.consul.mesh.v2beta1.Authentication - 3, // 5: hashicorp.consul.mesh.v2beta1.Consul.ports:type_name -> hashicorp.consul.mesh.v2beta1.Ports - 6, // [6:6] is the sub-list for method output_type - 6, // [6:6] is the sub-list for method input_type - 6, // [6:6] is the sub-list for extension type_name - 6, // [6:6] is the sub-list for extension extendee - 0, // [0:6] is the sub-list for field type_name -} - -func init() { file_pbmesh_v2beta1_gatewayclassconfig_proto_init() } -func file_pbmesh_v2beta1_gatewayclassconfig_proto_init() { - if File_pbmesh_v2beta1_gatewayclassconfig_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_pbmesh_v2beta1_gatewayclassconfig_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GatewayClassConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pbmesh_v2beta1_gatewayclassconfig_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Consul); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pbmesh_v2beta1_gatewayclassconfig_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Authentication); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pbmesh_v2beta1_gatewayclassconfig_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Ports); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pbmesh_v2beta1_gatewayclassconfig_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CopyAnnotations); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pbmesh_v2beta1_gatewayclassconfig_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Deployment); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pbmesh_v2beta1_gatewayclassconfig_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Image); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_pbmesh_v2beta1_gatewayclassconfig_proto_msgTypes[0].OneofWrappers = []interface{}{} - file_pbmesh_v2beta1_gatewayclassconfig_proto_msgTypes[1].OneofWrappers = []interface{}{} - file_pbmesh_v2beta1_gatewayclassconfig_proto_msgTypes[2].OneofWrappers = []interface{}{} - file_pbmesh_v2beta1_gatewayclassconfig_proto_msgTypes[3].OneofWrappers = []interface{}{} - file_pbmesh_v2beta1_gatewayclassconfig_proto_msgTypes[5].OneofWrappers = []interface{}{} - file_pbmesh_v2beta1_gatewayclassconfig_proto_msgTypes[6].OneofWrappers = []interface{}{} - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_pbmesh_v2beta1_gatewayclassconfig_proto_rawDesc, - NumEnums: 0, - NumMessages: 7, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_pbmesh_v2beta1_gatewayclassconfig_proto_goTypes, - DependencyIndexes: file_pbmesh_v2beta1_gatewayclassconfig_proto_depIdxs, - MessageInfos: file_pbmesh_v2beta1_gatewayclassconfig_proto_msgTypes, - }.Build() - File_pbmesh_v2beta1_gatewayclassconfig_proto = out.File - file_pbmesh_v2beta1_gatewayclassconfig_proto_rawDesc = nil - file_pbmesh_v2beta1_gatewayclassconfig_proto_goTypes = nil - file_pbmesh_v2beta1_gatewayclassconfig_proto_depIdxs = nil -} diff --git a/proto-public/pbmesh/v2beta1/gatewayclassconfig.proto b/proto-public/pbmesh/v2beta1/gatewayclassconfig.proto deleted file mode 100644 index ca4c30878d445..0000000000000 --- a/proto-public/pbmesh/v2beta1/gatewayclassconfig.proto +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: MPL-2.0 - -syntax = "proto3"; - -package hashicorp.consul.mesh.v2beta1; - -import "pbresource/annotations.proto"; - -// This is a Resource type. -message GatewayClassConfig { - option (hashicorp.consul.resource.spec) = {scope: SCOPE_CLUSTER}; - - optional Consul consul = 1; - optional CopyAnnotations copy_annotations = 2; - optional Deployment deployment = 3; - optional Image image = 4; - optional string log_level = 5; - optional uint32 map_privileged_container_ports = 6; - optional string node_selector = 7; - optional string openshift_scc_name = 8; - optional string service_type = 9; - optional bool use_host_ports = 10; -} - -message Consul { - optional string address = 1; - optional Authentication authentication = 2; - optional string scheme = 3; - optional Ports ports = 4; -} - -message Authentication { - optional string address = 1; - optional bool managed = 2; - optional string method = 3; - optional string namespace = 4; -} - -message Ports { - optional uint32 grpc = 1; - optional uint32 http = 2; -} - -message CopyAnnotations { - repeated string service = 1; -} - -message Deployment { - optional uint32 default_instances = 1; - optional uint32 min_instances = 2; - optional uint32 max_instances = 3; -} - -message Image { - optional string consul_api_gateway = 1; - optional string envoy = 2; -} diff --git a/proto-public/pbmesh/v2beta1/gatewayclassconfig_deepcopy.gen.go b/proto-public/pbmesh/v2beta1/gatewayclassconfig_deepcopy.gen.go deleted file mode 100644 index d211f1aaabf1a..0000000000000 --- a/proto-public/pbmesh/v2beta1/gatewayclassconfig_deepcopy.gen.go +++ /dev/null @@ -1,153 +0,0 @@ -// Code generated by protoc-gen-deepcopy. DO NOT EDIT. -package meshv2beta1 - -import ( - proto "google.golang.org/protobuf/proto" -) - -// DeepCopyInto supports using GatewayClassConfig within kubernetes types, where deepcopy-gen is used. -func (in *GatewayClassConfig) DeepCopyInto(out *GatewayClassConfig) { - proto.Reset(out) - proto.Merge(out, proto.Clone(in)) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GatewayClassConfig. Required by controller-gen. -func (in *GatewayClassConfig) DeepCopy() *GatewayClassConfig { - if in == nil { - return nil - } - out := new(GatewayClassConfig) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new GatewayClassConfig. Required by controller-gen. -func (in *GatewayClassConfig) DeepCopyInterface() interface{} { - return in.DeepCopy() -} - -// DeepCopyInto supports using Consul within kubernetes types, where deepcopy-gen is used. -func (in *Consul) DeepCopyInto(out *Consul) { - proto.Reset(out) - proto.Merge(out, proto.Clone(in)) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Consul. Required by controller-gen. -func (in *Consul) DeepCopy() *Consul { - if in == nil { - return nil - } - out := new(Consul) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new Consul. Required by controller-gen. -func (in *Consul) DeepCopyInterface() interface{} { - return in.DeepCopy() -} - -// DeepCopyInto supports using Authentication within kubernetes types, where deepcopy-gen is used. -func (in *Authentication) DeepCopyInto(out *Authentication) { - proto.Reset(out) - proto.Merge(out, proto.Clone(in)) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Authentication. Required by controller-gen. -func (in *Authentication) DeepCopy() *Authentication { - if in == nil { - return nil - } - out := new(Authentication) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new Authentication. Required by controller-gen. -func (in *Authentication) DeepCopyInterface() interface{} { - return in.DeepCopy() -} - -// DeepCopyInto supports using Ports within kubernetes types, where deepcopy-gen is used. -func (in *Ports) DeepCopyInto(out *Ports) { - proto.Reset(out) - proto.Merge(out, proto.Clone(in)) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Ports. Required by controller-gen. -func (in *Ports) DeepCopy() *Ports { - if in == nil { - return nil - } - out := new(Ports) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new Ports. Required by controller-gen. -func (in *Ports) DeepCopyInterface() interface{} { - return in.DeepCopy() -} - -// DeepCopyInto supports using CopyAnnotations within kubernetes types, where deepcopy-gen is used. -func (in *CopyAnnotations) DeepCopyInto(out *CopyAnnotations) { - proto.Reset(out) - proto.Merge(out, proto.Clone(in)) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CopyAnnotations. Required by controller-gen. -func (in *CopyAnnotations) DeepCopy() *CopyAnnotations { - if in == nil { - return nil - } - out := new(CopyAnnotations) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new CopyAnnotations. Required by controller-gen. -func (in *CopyAnnotations) DeepCopyInterface() interface{} { - return in.DeepCopy() -} - -// DeepCopyInto supports using Deployment within kubernetes types, where deepcopy-gen is used. -func (in *Deployment) DeepCopyInto(out *Deployment) { - proto.Reset(out) - proto.Merge(out, proto.Clone(in)) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Deployment. Required by controller-gen. -func (in *Deployment) DeepCopy() *Deployment { - if in == nil { - return nil - } - out := new(Deployment) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new Deployment. Required by controller-gen. -func (in *Deployment) DeepCopyInterface() interface{} { - return in.DeepCopy() -} - -// DeepCopyInto supports using Image within kubernetes types, where deepcopy-gen is used. -func (in *Image) DeepCopyInto(out *Image) { - proto.Reset(out) - proto.Merge(out, proto.Clone(in)) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Image. Required by controller-gen. -func (in *Image) DeepCopy() *Image { - if in == nil { - return nil - } - out := new(Image) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new Image. Required by controller-gen. -func (in *Image) DeepCopyInterface() interface{} { - return in.DeepCopy() -} diff --git a/proto-public/pbmesh/v2beta1/gatewayclassconfig_json.gen.go b/proto-public/pbmesh/v2beta1/gatewayclassconfig_json.gen.go deleted file mode 100644 index 363d096939c67..0000000000000 --- a/proto-public/pbmesh/v2beta1/gatewayclassconfig_json.gen.go +++ /dev/null @@ -1,88 +0,0 @@ -// Code generated by protoc-json-shim. DO NOT EDIT. -package meshv2beta1 - -import ( - protojson "google.golang.org/protobuf/encoding/protojson" -) - -// MarshalJSON is a custom marshaler for GatewayClassConfig -func (this *GatewayClassConfig) MarshalJSON() ([]byte, error) { - str, err := GatewayclassconfigMarshaler.Marshal(this) - return []byte(str), err -} - -// UnmarshalJSON is a custom unmarshaler for GatewayClassConfig -func (this *GatewayClassConfig) UnmarshalJSON(b []byte) error { - return GatewayclassconfigUnmarshaler.Unmarshal(b, this) -} - -// MarshalJSON is a custom marshaler for Consul -func (this *Consul) MarshalJSON() ([]byte, error) { - str, err := GatewayclassconfigMarshaler.Marshal(this) - return []byte(str), err -} - -// UnmarshalJSON is a custom unmarshaler for Consul -func (this *Consul) UnmarshalJSON(b []byte) error { - return GatewayclassconfigUnmarshaler.Unmarshal(b, this) -} - -// MarshalJSON is a custom marshaler for Authentication -func (this *Authentication) MarshalJSON() ([]byte, error) { - str, err := GatewayclassconfigMarshaler.Marshal(this) - return []byte(str), err -} - -// UnmarshalJSON is a custom unmarshaler for Authentication -func (this *Authentication) UnmarshalJSON(b []byte) error { - return GatewayclassconfigUnmarshaler.Unmarshal(b, this) -} - -// MarshalJSON is a custom marshaler for Ports -func (this *Ports) MarshalJSON() ([]byte, error) { - str, err := GatewayclassconfigMarshaler.Marshal(this) - return []byte(str), err -} - -// UnmarshalJSON is a custom unmarshaler for Ports -func (this *Ports) UnmarshalJSON(b []byte) error { - return GatewayclassconfigUnmarshaler.Unmarshal(b, this) -} - -// MarshalJSON is a custom marshaler for CopyAnnotations -func (this *CopyAnnotations) MarshalJSON() ([]byte, error) { - str, err := GatewayclassconfigMarshaler.Marshal(this) - return []byte(str), err -} - -// UnmarshalJSON is a custom unmarshaler for CopyAnnotations -func (this *CopyAnnotations) UnmarshalJSON(b []byte) error { - return GatewayclassconfigUnmarshaler.Unmarshal(b, this) -} - -// MarshalJSON is a custom marshaler for Deployment -func (this *Deployment) MarshalJSON() ([]byte, error) { - str, err := GatewayclassconfigMarshaler.Marshal(this) - return []byte(str), err -} - -// UnmarshalJSON is a custom unmarshaler for Deployment -func (this *Deployment) UnmarshalJSON(b []byte) error { - return GatewayclassconfigUnmarshaler.Unmarshal(b, this) -} - -// MarshalJSON is a custom marshaler for Image -func (this *Image) MarshalJSON() ([]byte, error) { - str, err := GatewayclassconfigMarshaler.Marshal(this) - return []byte(str), err -} - -// UnmarshalJSON is a custom unmarshaler for Image -func (this *Image) UnmarshalJSON(b []byte) error { - return GatewayclassconfigUnmarshaler.Unmarshal(b, this) -} - -var ( - GatewayclassconfigMarshaler = &protojson.MarshalOptions{} - GatewayclassconfigUnmarshaler = &protojson.UnmarshalOptions{DiscardUnknown: false} -) diff --git a/proto-public/pbmesh/v2beta1/grpc_route.pb.go b/proto-public/pbmesh/v2beta1/grpc_route.pb.go index e0b4f364810a9..cd3650962727f 100644 --- a/proto-public/pbmesh/v2beta1/grpc_route.pb.go +++ b/proto-public/pbmesh/v2beta1/grpc_route.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbmesh/v2beta1/grpc_route.proto diff --git a/proto-public/pbmesh/v2beta1/http_route.pb.go b/proto-public/pbmesh/v2beta1/http_route.pb.go index 383308f1ad000..3999fdff92405 100644 --- a/proto-public/pbmesh/v2beta1/http_route.pb.go +++ b/proto-public/pbmesh/v2beta1/http_route.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbmesh/v2beta1/http_route.proto diff --git a/proto-public/pbmesh/v2beta1/http_route_retries.pb.go b/proto-public/pbmesh/v2beta1/http_route_retries.pb.go index 49f1501fc78e5..0334d1e035a62 100644 --- a/proto-public/pbmesh/v2beta1/http_route_retries.pb.go +++ b/proto-public/pbmesh/v2beta1/http_route_retries.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbmesh/v2beta1/http_route_retries.proto diff --git a/proto-public/pbmesh/v2beta1/http_route_timeouts.pb.go b/proto-public/pbmesh/v2beta1/http_route_timeouts.pb.go index 87e5ec3f578ad..63b79dbe1485b 100644 --- a/proto-public/pbmesh/v2beta1/http_route_timeouts.pb.go +++ b/proto-public/pbmesh/v2beta1/http_route_timeouts.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbmesh/v2beta1/http_route_timeouts.proto diff --git a/proto-public/pbmesh/v2beta1/mesh_configuration.pb.binary.go b/proto-public/pbmesh/v2beta1/mesh_configuration.pb.binary.go deleted file mode 100644 index d8bffc0ae8119..0000000000000 --- a/proto-public/pbmesh/v2beta1/mesh_configuration.pb.binary.go +++ /dev/null @@ -1,18 +0,0 @@ -// Code generated by protoc-gen-go-binary. DO NOT EDIT. -// source: pbmesh/v2beta1/mesh_configuration.proto - -package meshv2beta1 - -import ( - "google.golang.org/protobuf/proto" -) - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *MeshConfiguration) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *MeshConfiguration) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} diff --git a/proto-public/pbmesh/v2beta1/mesh_configuration.pb.go b/proto-public/pbmesh/v2beta1/mesh_configuration.pb.go deleted file mode 100644 index 6b8dc035b4cfb..0000000000000 --- a/proto-public/pbmesh/v2beta1/mesh_configuration.pb.go +++ /dev/null @@ -1,160 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: MPL-2.0 - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.30.0 -// protoc (unknown) -// source: pbmesh/v2beta1/mesh_configuration.proto - -package meshv2beta1 - -import ( - _ "github.com/hashicorp/consul/proto-public/pbresource" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// MeshConfiguration is responsible for configuring the default behavior of Mesh Gateways. -// This is a Resource type. -type MeshConfiguration struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *MeshConfiguration) Reset() { - *x = MeshConfiguration{} - if protoimpl.UnsafeEnabled { - mi := &file_pbmesh_v2beta1_mesh_configuration_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *MeshConfiguration) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*MeshConfiguration) ProtoMessage() {} - -func (x *MeshConfiguration) ProtoReflect() protoreflect.Message { - mi := &file_pbmesh_v2beta1_mesh_configuration_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use MeshConfiguration.ProtoReflect.Descriptor instead. -func (*MeshConfiguration) Descriptor() ([]byte, []int) { - return file_pbmesh_v2beta1_mesh_configuration_proto_rawDescGZIP(), []int{0} -} - -var File_pbmesh_v2beta1_mesh_configuration_proto protoreflect.FileDescriptor - -var file_pbmesh_v2beta1_mesh_configuration_proto_rawDesc = []byte{ - 0x0a, 0x27, 0x70, 0x62, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2f, 0x6d, 0x65, 0x73, 0x68, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1d, 0x68, 0x61, 0x73, 0x68, 0x69, - 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, - 0x2e, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x1a, 0x1c, 0x70, 0x62, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x1b, 0x0a, 0x11, 0x4d, 0x65, 0x73, 0x68, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x06, 0xa2, 0x93, 0x04, - 0x02, 0x08, 0x01, 0x42, 0x97, 0x02, 0x0a, 0x21, 0x63, 0x6f, 0x6d, 0x2e, 0x68, 0x61, 0x73, 0x68, - 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, - 0x68, 0x2e, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, 0x16, 0x4d, 0x65, 0x73, 0x68, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x50, 0x01, 0x5a, 0x43, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, - 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x62, - 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x3b, 0x6d, 0x65, 0x73, - 0x68, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x48, 0x43, 0x4d, 0xaa, 0x02, - 0x1d, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x75, - 0x6c, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x2e, 0x56, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, - 0x1d, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x5c, 0x43, 0x6f, 0x6e, 0x73, 0x75, - 0x6c, 0x5c, 0x4d, 0x65, 0x73, 0x68, 0x5c, 0x56, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, - 0x29, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x5c, 0x43, 0x6f, 0x6e, 0x73, 0x75, - 0x6c, 0x5c, 0x4d, 0x65, 0x73, 0x68, 0x5c, 0x56, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x5c, 0x47, - 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x20, 0x48, 0x61, 0x73, - 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x3a, 0x3a, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x3a, 0x3a, - 0x4d, 0x65, 0x73, 0x68, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_pbmesh_v2beta1_mesh_configuration_proto_rawDescOnce sync.Once - file_pbmesh_v2beta1_mesh_configuration_proto_rawDescData = file_pbmesh_v2beta1_mesh_configuration_proto_rawDesc -) - -func file_pbmesh_v2beta1_mesh_configuration_proto_rawDescGZIP() []byte { - file_pbmesh_v2beta1_mesh_configuration_proto_rawDescOnce.Do(func() { - file_pbmesh_v2beta1_mesh_configuration_proto_rawDescData = protoimpl.X.CompressGZIP(file_pbmesh_v2beta1_mesh_configuration_proto_rawDescData) - }) - return file_pbmesh_v2beta1_mesh_configuration_proto_rawDescData -} - -var file_pbmesh_v2beta1_mesh_configuration_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_pbmesh_v2beta1_mesh_configuration_proto_goTypes = []interface{}{ - (*MeshConfiguration)(nil), // 0: hashicorp.consul.mesh.v2beta1.MeshConfiguration -} -var file_pbmesh_v2beta1_mesh_configuration_proto_depIdxs = []int32{ - 0, // [0:0] is the sub-list for method output_type - 0, // [0:0] is the sub-list for method input_type - 0, // [0:0] is the sub-list for extension type_name - 0, // [0:0] is the sub-list for extension extendee - 0, // [0:0] is the sub-list for field type_name -} - -func init() { file_pbmesh_v2beta1_mesh_configuration_proto_init() } -func file_pbmesh_v2beta1_mesh_configuration_proto_init() { - if File_pbmesh_v2beta1_mesh_configuration_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_pbmesh_v2beta1_mesh_configuration_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MeshConfiguration); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_pbmesh_v2beta1_mesh_configuration_proto_rawDesc, - NumEnums: 0, - NumMessages: 1, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_pbmesh_v2beta1_mesh_configuration_proto_goTypes, - DependencyIndexes: file_pbmesh_v2beta1_mesh_configuration_proto_depIdxs, - MessageInfos: file_pbmesh_v2beta1_mesh_configuration_proto_msgTypes, - }.Build() - File_pbmesh_v2beta1_mesh_configuration_proto = out.File - file_pbmesh_v2beta1_mesh_configuration_proto_rawDesc = nil - file_pbmesh_v2beta1_mesh_configuration_proto_goTypes = nil - file_pbmesh_v2beta1_mesh_configuration_proto_depIdxs = nil -} diff --git a/proto-public/pbmesh/v2beta1/mesh_configuration.proto b/proto-public/pbmesh/v2beta1/mesh_configuration.proto deleted file mode 100644 index c18548b487e9f..0000000000000 --- a/proto-public/pbmesh/v2beta1/mesh_configuration.proto +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: MPL-2.0 - -syntax = "proto3"; - -package hashicorp.consul.mesh.v2beta1; - -import "pbresource/annotations.proto"; - -// MeshConfiguration is responsible for configuring the default behavior of Mesh Gateways. -// This is a Resource type. -message MeshConfiguration { - option (hashicorp.consul.resource.spec) = {scope: SCOPE_CLUSTER}; -} diff --git a/proto-public/pbmesh/v2beta1/mesh_configuration_deepcopy.gen.go b/proto-public/pbmesh/v2beta1/mesh_configuration_deepcopy.gen.go deleted file mode 100644 index 5621246ecef84..0000000000000 --- a/proto-public/pbmesh/v2beta1/mesh_configuration_deepcopy.gen.go +++ /dev/null @@ -1,27 +0,0 @@ -// Code generated by protoc-gen-deepcopy. DO NOT EDIT. -package meshv2beta1 - -import ( - proto "google.golang.org/protobuf/proto" -) - -// DeepCopyInto supports using MeshConfiguration within kubernetes types, where deepcopy-gen is used. -func (in *MeshConfiguration) DeepCopyInto(out *MeshConfiguration) { - proto.Reset(out) - proto.Merge(out, proto.Clone(in)) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MeshConfiguration. Required by controller-gen. -func (in *MeshConfiguration) DeepCopy() *MeshConfiguration { - if in == nil { - return nil - } - out := new(MeshConfiguration) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new MeshConfiguration. Required by controller-gen. -func (in *MeshConfiguration) DeepCopyInterface() interface{} { - return in.DeepCopy() -} diff --git a/proto-public/pbmesh/v2beta1/mesh_configuration_json.gen.go b/proto-public/pbmesh/v2beta1/mesh_configuration_json.gen.go deleted file mode 100644 index c772e1326b38e..0000000000000 --- a/proto-public/pbmesh/v2beta1/mesh_configuration_json.gen.go +++ /dev/null @@ -1,22 +0,0 @@ -// Code generated by protoc-json-shim. DO NOT EDIT. -package meshv2beta1 - -import ( - protojson "google.golang.org/protobuf/encoding/protojson" -) - -// MarshalJSON is a custom marshaler for MeshConfiguration -func (this *MeshConfiguration) MarshalJSON() ([]byte, error) { - str, err := MeshConfigurationMarshaler.Marshal(this) - return []byte(str), err -} - -// UnmarshalJSON is a custom unmarshaler for MeshConfiguration -func (this *MeshConfiguration) UnmarshalJSON(b []byte) error { - return MeshConfigurationUnmarshaler.Unmarshal(b, this) -} - -var ( - MeshConfigurationMarshaler = &protojson.MarshalOptions{} - MeshConfigurationUnmarshaler = &protojson.UnmarshalOptions{DiscardUnknown: false} -) diff --git a/proto-public/pbmesh/v2beta1/mesh_gateway.pb.binary.go b/proto-public/pbmesh/v2beta1/mesh_gateway.pb.binary.go deleted file mode 100644 index 7cd36afdb3c06..0000000000000 --- a/proto-public/pbmesh/v2beta1/mesh_gateway.pb.binary.go +++ /dev/null @@ -1,18 +0,0 @@ -// Code generated by protoc-gen-go-binary. DO NOT EDIT. -// source: pbmesh/v2beta1/mesh_gateway.proto - -package meshv2beta1 - -import ( - "google.golang.org/protobuf/proto" -) - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *MeshGateway) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *MeshGateway) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} diff --git a/proto-public/pbmesh/v2beta1/mesh_gateway.pb.go b/proto-public/pbmesh/v2beta1/mesh_gateway.pb.go deleted file mode 100644 index f33d915e85855..0000000000000 --- a/proto-public/pbmesh/v2beta1/mesh_gateway.pb.go +++ /dev/null @@ -1,157 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: MPL-2.0 - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.30.0 -// protoc (unknown) -// source: pbmesh/v2beta1/mesh_gateway.proto - -package meshv2beta1 - -import ( - _ "github.com/hashicorp/consul/proto-public/pbresource" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type MeshGateway struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *MeshGateway) Reset() { - *x = MeshGateway{} - if protoimpl.UnsafeEnabled { - mi := &file_pbmesh_v2beta1_mesh_gateway_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *MeshGateway) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*MeshGateway) ProtoMessage() {} - -func (x *MeshGateway) ProtoReflect() protoreflect.Message { - mi := &file_pbmesh_v2beta1_mesh_gateway_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use MeshGateway.ProtoReflect.Descriptor instead. -func (*MeshGateway) Descriptor() ([]byte, []int) { - return file_pbmesh_v2beta1_mesh_gateway_proto_rawDescGZIP(), []int{0} -} - -var File_pbmesh_v2beta1_mesh_gateway_proto protoreflect.FileDescriptor - -var file_pbmesh_v2beta1_mesh_gateway_proto_rawDesc = []byte{ - 0x0a, 0x21, 0x70, 0x62, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2f, 0x6d, 0x65, 0x73, 0x68, 0x5f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x12, 0x1d, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, - 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x32, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x1a, 0x1c, 0x70, 0x62, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2f, 0x61, - 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x22, 0x15, 0x0a, 0x0b, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x3a, - 0x06, 0xa2, 0x93, 0x04, 0x02, 0x08, 0x02, 0x42, 0x91, 0x02, 0x0a, 0x21, 0x63, 0x6f, 0x6d, 0x2e, - 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, - 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, 0x10, 0x4d, - 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, - 0x01, 0x5a, 0x43, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, - 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x62, 0x6d, 0x65, - 0x73, 0x68, 0x2f, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x3b, 0x6d, 0x65, 0x73, 0x68, 0x76, - 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x48, 0x43, 0x4d, 0xaa, 0x02, 0x1d, 0x48, - 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, - 0x4d, 0x65, 0x73, 0x68, 0x2e, 0x56, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x1d, 0x48, - 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x5c, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x5c, - 0x4d, 0x65, 0x73, 0x68, 0x5c, 0x56, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, 0x29, 0x48, - 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x5c, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x5c, - 0x4d, 0x65, 0x73, 0x68, 0x5c, 0x56, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x20, 0x48, 0x61, 0x73, 0x68, 0x69, - 0x63, 0x6f, 0x72, 0x70, 0x3a, 0x3a, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x3a, 0x3a, 0x4d, 0x65, - 0x73, 0x68, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, -} - -var ( - file_pbmesh_v2beta1_mesh_gateway_proto_rawDescOnce sync.Once - file_pbmesh_v2beta1_mesh_gateway_proto_rawDescData = file_pbmesh_v2beta1_mesh_gateway_proto_rawDesc -) - -func file_pbmesh_v2beta1_mesh_gateway_proto_rawDescGZIP() []byte { - file_pbmesh_v2beta1_mesh_gateway_proto_rawDescOnce.Do(func() { - file_pbmesh_v2beta1_mesh_gateway_proto_rawDescData = protoimpl.X.CompressGZIP(file_pbmesh_v2beta1_mesh_gateway_proto_rawDescData) - }) - return file_pbmesh_v2beta1_mesh_gateway_proto_rawDescData -} - -var file_pbmesh_v2beta1_mesh_gateway_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_pbmesh_v2beta1_mesh_gateway_proto_goTypes = []interface{}{ - (*MeshGateway)(nil), // 0: hashicorp.consul.mesh.v2beta1.MeshGateway -} -var file_pbmesh_v2beta1_mesh_gateway_proto_depIdxs = []int32{ - 0, // [0:0] is the sub-list for method output_type - 0, // [0:0] is the sub-list for method input_type - 0, // [0:0] is the sub-list for extension type_name - 0, // [0:0] is the sub-list for extension extendee - 0, // [0:0] is the sub-list for field type_name -} - -func init() { file_pbmesh_v2beta1_mesh_gateway_proto_init() } -func file_pbmesh_v2beta1_mesh_gateway_proto_init() { - if File_pbmesh_v2beta1_mesh_gateway_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_pbmesh_v2beta1_mesh_gateway_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MeshGateway); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_pbmesh_v2beta1_mesh_gateway_proto_rawDesc, - NumEnums: 0, - NumMessages: 1, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_pbmesh_v2beta1_mesh_gateway_proto_goTypes, - DependencyIndexes: file_pbmesh_v2beta1_mesh_gateway_proto_depIdxs, - MessageInfos: file_pbmesh_v2beta1_mesh_gateway_proto_msgTypes, - }.Build() - File_pbmesh_v2beta1_mesh_gateway_proto = out.File - file_pbmesh_v2beta1_mesh_gateway_proto_rawDesc = nil - file_pbmesh_v2beta1_mesh_gateway_proto_goTypes = nil - file_pbmesh_v2beta1_mesh_gateway_proto_depIdxs = nil -} diff --git a/proto-public/pbmesh/v2beta1/mesh_gateway.proto b/proto-public/pbmesh/v2beta1/mesh_gateway.proto deleted file mode 100644 index 312cac061d25b..0000000000000 --- a/proto-public/pbmesh/v2beta1/mesh_gateway.proto +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: MPL-2.0 - -syntax = "proto3"; - -package hashicorp.consul.mesh.v2beta1; - -import "pbresource/annotations.proto"; - -message MeshGateway { - option (hashicorp.consul.resource.spec) = {scope: SCOPE_PARTITION}; -} diff --git a/proto-public/pbmesh/v2beta1/mesh_gateway_deepcopy.gen.go b/proto-public/pbmesh/v2beta1/mesh_gateway_deepcopy.gen.go deleted file mode 100644 index b14ad33a815a3..0000000000000 --- a/proto-public/pbmesh/v2beta1/mesh_gateway_deepcopy.gen.go +++ /dev/null @@ -1,27 +0,0 @@ -// Code generated by protoc-gen-deepcopy. DO NOT EDIT. -package meshv2beta1 - -import ( - proto "google.golang.org/protobuf/proto" -) - -// DeepCopyInto supports using MeshGateway within kubernetes types, where deepcopy-gen is used. -func (in *MeshGateway) DeepCopyInto(out *MeshGateway) { - proto.Reset(out) - proto.Merge(out, proto.Clone(in)) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MeshGateway. Required by controller-gen. -func (in *MeshGateway) DeepCopy() *MeshGateway { - if in == nil { - return nil - } - out := new(MeshGateway) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new MeshGateway. Required by controller-gen. -func (in *MeshGateway) DeepCopyInterface() interface{} { - return in.DeepCopy() -} diff --git a/proto-public/pbmesh/v2beta1/mesh_gateway_json.gen.go b/proto-public/pbmesh/v2beta1/mesh_gateway_json.gen.go deleted file mode 100644 index 548da69f08cdb..0000000000000 --- a/proto-public/pbmesh/v2beta1/mesh_gateway_json.gen.go +++ /dev/null @@ -1,22 +0,0 @@ -// Code generated by protoc-json-shim. DO NOT EDIT. -package meshv2beta1 - -import ( - protojson "google.golang.org/protobuf/encoding/protojson" -) - -// MarshalJSON is a custom marshaler for MeshGateway -func (this *MeshGateway) MarshalJSON() ([]byte, error) { - str, err := MeshGatewayMarshaler.Marshal(this) - return []byte(str), err -} - -// UnmarshalJSON is a custom unmarshaler for MeshGateway -func (this *MeshGateway) UnmarshalJSON(b []byte) error { - return MeshGatewayUnmarshaler.Unmarshal(b, this) -} - -var ( - MeshGatewayMarshaler = &protojson.MarshalOptions{} - MeshGatewayUnmarshaler = &protojson.UnmarshalOptions{DiscardUnknown: false} -) diff --git a/proto-public/pbmesh/v2beta1/pbproxystate/access_logs.pb.go b/proto-public/pbmesh/v2beta1/pbproxystate/access_logs.pb.go index c1c30af893c63..2bb741c5fff02 100644 --- a/proto-public/pbmesh/v2beta1/pbproxystate/access_logs.pb.go +++ b/proto-public/pbmesh/v2beta1/pbproxystate/access_logs.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbmesh/v2beta1/pbproxystate/access_logs.proto diff --git a/proto-public/pbmesh/v2beta1/pbproxystate/address.pb.go b/proto-public/pbmesh/v2beta1/pbproxystate/address.pb.go index 6c814f3c8f2d8..3df9ce857d88a 100644 --- a/proto-public/pbmesh/v2beta1/pbproxystate/address.pb.go +++ b/proto-public/pbmesh/v2beta1/pbproxystate/address.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbmesh/v2beta1/pbproxystate/address.proto diff --git a/proto-public/pbmesh/v2beta1/pbproxystate/cluster.pb.go b/proto-public/pbmesh/v2beta1/pbproxystate/cluster.pb.go index ba7386f527e00..4336ede8f2a0f 100644 --- a/proto-public/pbmesh/v2beta1/pbproxystate/cluster.pb.go +++ b/proto-public/pbmesh/v2beta1/pbproxystate/cluster.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbmesh/v2beta1/pbproxystate/cluster.proto diff --git a/proto-public/pbmesh/v2beta1/pbproxystate/endpoints.pb.go b/proto-public/pbmesh/v2beta1/pbproxystate/endpoints.pb.go index 5986ad83a12e5..6d1731be4a4c2 100644 --- a/proto-public/pbmesh/v2beta1/pbproxystate/endpoints.pb.go +++ b/proto-public/pbmesh/v2beta1/pbproxystate/endpoints.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbmesh/v2beta1/pbproxystate/endpoints.proto diff --git a/proto-public/pbmesh/v2beta1/pbproxystate/escape_hatches.pb.go b/proto-public/pbmesh/v2beta1/pbproxystate/escape_hatches.pb.go index 91e549564ced1..0acc09f044306 100644 --- a/proto-public/pbmesh/v2beta1/pbproxystate/escape_hatches.pb.go +++ b/proto-public/pbmesh/v2beta1/pbproxystate/escape_hatches.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbmesh/v2beta1/pbproxystate/escape_hatches.proto diff --git a/proto-public/pbmesh/v2beta1/pbproxystate/header_mutations.pb.go b/proto-public/pbmesh/v2beta1/pbproxystate/header_mutations.pb.go index 54bc797892fdc..c915a9f865e68 100644 --- a/proto-public/pbmesh/v2beta1/pbproxystate/header_mutations.pb.go +++ b/proto-public/pbmesh/v2beta1/pbproxystate/header_mutations.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbmesh/v2beta1/pbproxystate/header_mutations.proto diff --git a/proto-public/pbmesh/v2beta1/pbproxystate/listener.pb.go b/proto-public/pbmesh/v2beta1/pbproxystate/listener.pb.go index a7d7273163dab..fcc61d6dca0c5 100644 --- a/proto-public/pbmesh/v2beta1/pbproxystate/listener.pb.go +++ b/proto-public/pbmesh/v2beta1/pbproxystate/listener.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbmesh/v2beta1/pbproxystate/listener.proto diff --git a/proto-public/pbmesh/v2beta1/pbproxystate/protocol.pb.go b/proto-public/pbmesh/v2beta1/pbproxystate/protocol.pb.go index a14cdf986de6b..3b2207bd184df 100644 --- a/proto-public/pbmesh/v2beta1/pbproxystate/protocol.pb.go +++ b/proto-public/pbmesh/v2beta1/pbproxystate/protocol.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbmesh/v2beta1/pbproxystate/protocol.proto diff --git a/proto-public/pbmesh/v2beta1/pbproxystate/references.pb.go b/proto-public/pbmesh/v2beta1/pbproxystate/references.pb.go index c544d28030954..ecbba11af74a7 100644 --- a/proto-public/pbmesh/v2beta1/pbproxystate/references.pb.go +++ b/proto-public/pbmesh/v2beta1/pbproxystate/references.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbmesh/v2beta1/pbproxystate/references.proto diff --git a/proto-public/pbmesh/v2beta1/pbproxystate/route.pb.go b/proto-public/pbmesh/v2beta1/pbproxystate/route.pb.go index 0d88a016eb6f8..ce0433a63a814 100644 --- a/proto-public/pbmesh/v2beta1/pbproxystate/route.pb.go +++ b/proto-public/pbmesh/v2beta1/pbproxystate/route.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbmesh/v2beta1/pbproxystate/route.proto diff --git a/proto-public/pbmesh/v2beta1/pbproxystate/traffic_permissions.pb.go b/proto-public/pbmesh/v2beta1/pbproxystate/traffic_permissions.pb.go index def42e933f97d..95d12c4e5c149 100644 --- a/proto-public/pbmesh/v2beta1/pbproxystate/traffic_permissions.pb.go +++ b/proto-public/pbmesh/v2beta1/pbproxystate/traffic_permissions.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbmesh/v2beta1/pbproxystate/traffic_permissions.proto diff --git a/proto-public/pbmesh/v2beta1/pbproxystate/transport_socket.pb.go b/proto-public/pbmesh/v2beta1/pbproxystate/transport_socket.pb.go index d3acedebd182f..ab62a847c5c19 100644 --- a/proto-public/pbmesh/v2beta1/pbproxystate/transport_socket.pb.go +++ b/proto-public/pbmesh/v2beta1/pbproxystate/transport_socket.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbmesh/v2beta1/pbproxystate/transport_socket.proto diff --git a/proto-public/pbmesh/v2beta1/proxy_configuration.pb.go b/proto-public/pbmesh/v2beta1/proxy_configuration.pb.go index a374848fd20e0..4291d34fe9744 100644 --- a/proto-public/pbmesh/v2beta1/proxy_configuration.pb.go +++ b/proto-public/pbmesh/v2beta1/proxy_configuration.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbmesh/v2beta1/proxy_configuration.proto diff --git a/proto-public/pbmesh/v2beta1/proxy_state.pb.go b/proto-public/pbmesh/v2beta1/proxy_state.pb.go index 5f26294a5d1c3..b28c799116a49 100644 --- a/proto-public/pbmesh/v2beta1/proxy_state.pb.go +++ b/proto-public/pbmesh/v2beta1/proxy_state.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbmesh/v2beta1/proxy_state.proto diff --git a/proto-public/pbmesh/v2beta1/resource_types.gen.go b/proto-public/pbmesh/v2beta1/resource_types.gen.go index 925cc85be8e3d..68406c5d1e88d 100644 --- a/proto-public/pbmesh/v2beta1/resource_types.gen.go +++ b/proto-public/pbmesh/v2beta1/resource_types.gen.go @@ -17,11 +17,7 @@ const ( DestinationsKind = "Destinations" DestinationsConfigurationKind = "DestinationsConfiguration" GRPCRouteKind = "GRPCRoute" - GatewayClassKind = "GatewayClass" - GatewayClassConfigKind = "GatewayClassConfig" HTTPRouteKind = "HTTPRoute" - MeshConfigurationKind = "MeshConfiguration" - MeshGatewayKind = "MeshGateway" ProxyConfigurationKind = "ProxyConfiguration" ProxyStateTemplateKind = "ProxyStateTemplate" TCPRouteKind = "TCPRoute" @@ -70,36 +66,12 @@ var ( Kind: GRPCRouteKind, } - GatewayClassType = &pbresource.Type{ - Group: GroupName, - GroupVersion: Version, - Kind: GatewayClassKind, - } - - GatewayClassConfigType = &pbresource.Type{ - Group: GroupName, - GroupVersion: Version, - Kind: GatewayClassConfigKind, - } - HTTPRouteType = &pbresource.Type{ Group: GroupName, GroupVersion: Version, Kind: HTTPRouteKind, } - MeshConfigurationType = &pbresource.Type{ - Group: GroupName, - GroupVersion: Version, - Kind: MeshConfigurationKind, - } - - MeshGatewayType = &pbresource.Type{ - Group: GroupName, - GroupVersion: Version, - Kind: MeshGatewayKind, - } - ProxyConfigurationType = &pbresource.Type{ Group: GroupName, GroupVersion: Version, diff --git a/proto-public/pbmesh/v2beta1/routing.pb.go b/proto-public/pbmesh/v2beta1/routing.pb.go index 4b1f648774319..2772194f767ed 100644 --- a/proto-public/pbmesh/v2beta1/routing.pb.go +++ b/proto-public/pbmesh/v2beta1/routing.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbmesh/v2beta1/routing.proto diff --git a/proto-public/pbmesh/v2beta1/tcp_route.pb.go b/proto-public/pbmesh/v2beta1/tcp_route.pb.go index 5a2c401846af5..c28f74e56f1ae 100644 --- a/proto-public/pbmesh/v2beta1/tcp_route.pb.go +++ b/proto-public/pbmesh/v2beta1/tcp_route.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbmesh/v2beta1/tcp_route.proto diff --git a/proto-public/pbmulticluster/v2beta1/computed_exported_services.pb.binary.go b/proto-public/pbmulticluster/v2beta1/computed_exported_services.pb.binary.go deleted file mode 100644 index f5b389089f42d..0000000000000 --- a/proto-public/pbmulticluster/v2beta1/computed_exported_services.pb.binary.go +++ /dev/null @@ -1,38 +0,0 @@ -// Code generated by protoc-gen-go-binary. DO NOT EDIT. -// source: pbmulticluster/v2beta1/computed_exported_services.proto - -package multiclusterv2beta1 - -import ( - "google.golang.org/protobuf/proto" -) - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *ComputedExportedServices) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *ComputedExportedServices) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *ComputedExportedService) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *ComputedExportedService) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *ComputedExportedServicesConsumer) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *ComputedExportedServicesConsumer) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} diff --git a/proto-public/pbmulticluster/v2beta1/computed_exported_services.pb.go b/proto-public/pbmulticluster/v2beta1/computed_exported_services.pb.go deleted file mode 100644 index 11ebe79f9dc6f..0000000000000 --- a/proto-public/pbmulticluster/v2beta1/computed_exported_services.pb.go +++ /dev/null @@ -1,373 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: BUSL-1.1 - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.30.0 -// protoc (unknown) -// source: pbmulticluster/v2beta1/computed_exported_services.proto - -package multiclusterv2beta1 - -import ( - pbresource "github.com/hashicorp/consul/proto-public/pbresource" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type ComputedExportedServices struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Consumers []*ComputedExportedService `protobuf:"bytes,1,rep,name=consumers,proto3" json:"consumers,omitempty"` -} - -func (x *ComputedExportedServices) Reset() { - *x = ComputedExportedServices{} - if protoimpl.UnsafeEnabled { - mi := &file_pbmulticluster_v2beta1_computed_exported_services_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ComputedExportedServices) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ComputedExportedServices) ProtoMessage() {} - -func (x *ComputedExportedServices) ProtoReflect() protoreflect.Message { - mi := &file_pbmulticluster_v2beta1_computed_exported_services_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ComputedExportedServices.ProtoReflect.Descriptor instead. -func (*ComputedExportedServices) Descriptor() ([]byte, []int) { - return file_pbmulticluster_v2beta1_computed_exported_services_proto_rawDescGZIP(), []int{0} -} - -func (x *ComputedExportedServices) GetConsumers() []*ComputedExportedService { - if x != nil { - return x.Consumers - } - return nil -} - -type ComputedExportedService struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TargetRef *pbresource.Reference `protobuf:"bytes,1,opt,name=target_ref,json=targetRef,proto3" json:"target_ref,omitempty"` - Consumers []*ComputedExportedServicesConsumer `protobuf:"bytes,2,rep,name=consumers,proto3" json:"consumers,omitempty"` -} - -func (x *ComputedExportedService) Reset() { - *x = ComputedExportedService{} - if protoimpl.UnsafeEnabled { - mi := &file_pbmulticluster_v2beta1_computed_exported_services_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ComputedExportedService) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ComputedExportedService) ProtoMessage() {} - -func (x *ComputedExportedService) ProtoReflect() protoreflect.Message { - mi := &file_pbmulticluster_v2beta1_computed_exported_services_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ComputedExportedService.ProtoReflect.Descriptor instead. -func (*ComputedExportedService) Descriptor() ([]byte, []int) { - return file_pbmulticluster_v2beta1_computed_exported_services_proto_rawDescGZIP(), []int{1} -} - -func (x *ComputedExportedService) GetTargetRef() *pbresource.Reference { - if x != nil { - return x.TargetRef - } - return nil -} - -func (x *ComputedExportedService) GetConsumers() []*ComputedExportedServicesConsumer { - if x != nil { - return x.Consumers - } - return nil -} - -type ComputedExportedServicesConsumer struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // no sameness group - // - // Types that are assignable to ConsumerTenancy: - // - // *ComputedExportedServicesConsumer_Peer - // *ComputedExportedServicesConsumer_Partition - ConsumerTenancy isComputedExportedServicesConsumer_ConsumerTenancy `protobuf_oneof:"consumer_tenancy"` -} - -func (x *ComputedExportedServicesConsumer) Reset() { - *x = ComputedExportedServicesConsumer{} - if protoimpl.UnsafeEnabled { - mi := &file_pbmulticluster_v2beta1_computed_exported_services_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ComputedExportedServicesConsumer) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ComputedExportedServicesConsumer) ProtoMessage() {} - -func (x *ComputedExportedServicesConsumer) ProtoReflect() protoreflect.Message { - mi := &file_pbmulticluster_v2beta1_computed_exported_services_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ComputedExportedServicesConsumer.ProtoReflect.Descriptor instead. -func (*ComputedExportedServicesConsumer) Descriptor() ([]byte, []int) { - return file_pbmulticluster_v2beta1_computed_exported_services_proto_rawDescGZIP(), []int{2} -} - -func (m *ComputedExportedServicesConsumer) GetConsumerTenancy() isComputedExportedServicesConsumer_ConsumerTenancy { - if m != nil { - return m.ConsumerTenancy - } - return nil -} - -func (x *ComputedExportedServicesConsumer) GetPeer() string { - if x, ok := x.GetConsumerTenancy().(*ComputedExportedServicesConsumer_Peer); ok { - return x.Peer - } - return "" -} - -func (x *ComputedExportedServicesConsumer) GetPartition() string { - if x, ok := x.GetConsumerTenancy().(*ComputedExportedServicesConsumer_Partition); ok { - return x.Partition - } - return "" -} - -type isComputedExportedServicesConsumer_ConsumerTenancy interface { - isComputedExportedServicesConsumer_ConsumerTenancy() -} - -type ComputedExportedServicesConsumer_Peer struct { - Peer string `protobuf:"bytes,3,opt,name=peer,proto3,oneof"` -} - -type ComputedExportedServicesConsumer_Partition struct { - Partition string `protobuf:"bytes,4,opt,name=partition,proto3,oneof"` -} - -func (*ComputedExportedServicesConsumer_Peer) isComputedExportedServicesConsumer_ConsumerTenancy() {} - -func (*ComputedExportedServicesConsumer_Partition) isComputedExportedServicesConsumer_ConsumerTenancy() { -} - -var File_pbmulticluster_v2beta1_computed_exported_services_proto protoreflect.FileDescriptor - -var file_pbmulticluster_v2beta1_computed_exported_services_proto_rawDesc = []byte{ - 0x0a, 0x37, 0x70, 0x62, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x2f, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, - 0x64, 0x5f, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x25, 0x68, 0x61, 0x73, 0x68, 0x69, - 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x75, 0x6c, 0x74, - 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x1a, 0x1c, 0x70, 0x62, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2f, 0x61, 0x6e, 0x6e, - 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, - 0x70, 0x62, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x80, 0x01, 0x0a, 0x18, 0x43, 0x6f, - 0x6d, 0x70, 0x75, 0x74, 0x65, 0x64, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x5c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, - 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x68, 0x61, 0x73, 0x68, - 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x75, 0x6c, - 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x64, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, - 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x75, - 0x6d, 0x65, 0x72, 0x73, 0x3a, 0x06, 0xa2, 0x93, 0x04, 0x02, 0x08, 0x02, 0x22, 0xc5, 0x01, 0x0a, - 0x17, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x64, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, - 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x74, 0x61, 0x72, 0x67, - 0x65, 0x74, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x68, - 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x52, 0x09, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x65, 0x66, 0x12, 0x65, 0x0a, - 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x47, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, - 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x2e, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, - 0x64, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x73, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x75, - 0x6d, 0x65, 0x72, 0x73, 0x22, 0x6c, 0x0a, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x64, - 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, - 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x04, 0x70, 0x65, 0x65, 0x72, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x70, 0x65, 0x65, 0x72, 0x12, 0x1e, - 0x0a, 0x09, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x48, 0x00, 0x52, 0x09, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x12, - 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x5f, 0x74, 0x65, 0x6e, 0x61, 0x6e, - 0x63, 0x79, 0x42, 0xd6, 0x02, 0x0a, 0x29, 0x63, 0x6f, 0x6d, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, - 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x75, 0x6c, 0x74, - 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x42, 0x1d, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x64, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, - 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, - 0x01, 0x5a, 0x53, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, - 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x62, 0x6d, 0x75, - 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x3b, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x76, - 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x48, 0x43, 0x4d, 0xaa, 0x02, 0x25, 0x48, - 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, - 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x56, 0x32, 0x62, - 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x25, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, - 0x5c, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x5c, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x5c, 0x56, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, 0x31, 0x48, - 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x5c, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x5c, - 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5c, 0x56, 0x32, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0xea, 0x02, 0x28, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x3a, 0x3a, 0x43, 0x6f, - 0x6e, 0x73, 0x75, 0x6c, 0x3a, 0x3a, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, -} - -var ( - file_pbmulticluster_v2beta1_computed_exported_services_proto_rawDescOnce sync.Once - file_pbmulticluster_v2beta1_computed_exported_services_proto_rawDescData = file_pbmulticluster_v2beta1_computed_exported_services_proto_rawDesc -) - -func file_pbmulticluster_v2beta1_computed_exported_services_proto_rawDescGZIP() []byte { - file_pbmulticluster_v2beta1_computed_exported_services_proto_rawDescOnce.Do(func() { - file_pbmulticluster_v2beta1_computed_exported_services_proto_rawDescData = protoimpl.X.CompressGZIP(file_pbmulticluster_v2beta1_computed_exported_services_proto_rawDescData) - }) - return file_pbmulticluster_v2beta1_computed_exported_services_proto_rawDescData -} - -var file_pbmulticluster_v2beta1_computed_exported_services_proto_msgTypes = make([]protoimpl.MessageInfo, 3) -var file_pbmulticluster_v2beta1_computed_exported_services_proto_goTypes = []interface{}{ - (*ComputedExportedServices)(nil), // 0: hashicorp.consul.multicluster.v2beta1.ComputedExportedServices - (*ComputedExportedService)(nil), // 1: hashicorp.consul.multicluster.v2beta1.ComputedExportedService - (*ComputedExportedServicesConsumer)(nil), // 2: hashicorp.consul.multicluster.v2beta1.ComputedExportedServicesConsumer - (*pbresource.Reference)(nil), // 3: hashicorp.consul.resource.Reference -} -var file_pbmulticluster_v2beta1_computed_exported_services_proto_depIdxs = []int32{ - 1, // 0: hashicorp.consul.multicluster.v2beta1.ComputedExportedServices.consumers:type_name -> hashicorp.consul.multicluster.v2beta1.ComputedExportedService - 3, // 1: hashicorp.consul.multicluster.v2beta1.ComputedExportedService.target_ref:type_name -> hashicorp.consul.resource.Reference - 2, // 2: hashicorp.consul.multicluster.v2beta1.ComputedExportedService.consumers:type_name -> hashicorp.consul.multicluster.v2beta1.ComputedExportedServicesConsumer - 3, // [3:3] is the sub-list for method output_type - 3, // [3:3] is the sub-list for method input_type - 3, // [3:3] is the sub-list for extension type_name - 3, // [3:3] is the sub-list for extension extendee - 0, // [0:3] is the sub-list for field type_name -} - -func init() { file_pbmulticluster_v2beta1_computed_exported_services_proto_init() } -func file_pbmulticluster_v2beta1_computed_exported_services_proto_init() { - if File_pbmulticluster_v2beta1_computed_exported_services_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_pbmulticluster_v2beta1_computed_exported_services_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ComputedExportedServices); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pbmulticluster_v2beta1_computed_exported_services_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ComputedExportedService); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pbmulticluster_v2beta1_computed_exported_services_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ComputedExportedServicesConsumer); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_pbmulticluster_v2beta1_computed_exported_services_proto_msgTypes[2].OneofWrappers = []interface{}{ - (*ComputedExportedServicesConsumer_Peer)(nil), - (*ComputedExportedServicesConsumer_Partition)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_pbmulticluster_v2beta1_computed_exported_services_proto_rawDesc, - NumEnums: 0, - NumMessages: 3, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_pbmulticluster_v2beta1_computed_exported_services_proto_goTypes, - DependencyIndexes: file_pbmulticluster_v2beta1_computed_exported_services_proto_depIdxs, - MessageInfos: file_pbmulticluster_v2beta1_computed_exported_services_proto_msgTypes, - }.Build() - File_pbmulticluster_v2beta1_computed_exported_services_proto = out.File - file_pbmulticluster_v2beta1_computed_exported_services_proto_rawDesc = nil - file_pbmulticluster_v2beta1_computed_exported_services_proto_goTypes = nil - file_pbmulticluster_v2beta1_computed_exported_services_proto_depIdxs = nil -} diff --git a/proto-public/pbmulticluster/v2beta1/computed_exported_services.proto b/proto-public/pbmulticluster/v2beta1/computed_exported_services.proto deleted file mode 100644 index b8a619558451c..0000000000000 --- a/proto-public/pbmulticluster/v2beta1/computed_exported_services.proto +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: BUSL-1.1 - -syntax = "proto3"; - -package hashicorp.consul.multicluster.v2beta1; - -import "pbresource/annotations.proto"; -import "pbresource/resource.proto"; - -message ComputedExportedServices { - option (hashicorp.consul.resource.spec) = {scope: SCOPE_PARTITION}; - - repeated ComputedExportedService consumers = 1; -} - -message ComputedExportedService { - hashicorp.consul.resource.Reference target_ref = 1; - repeated ComputedExportedServicesConsumer consumers = 2; -} - -message ComputedExportedServicesConsumer { - // no sameness group - oneof consumer_tenancy { - string peer = 3; - string partition = 4; - } -} diff --git a/proto-public/pbmulticluster/v2beta1/computed_exported_services_deepcopy.gen.go b/proto-public/pbmulticluster/v2beta1/computed_exported_services_deepcopy.gen.go deleted file mode 100644 index b50f35a20bd92..0000000000000 --- a/proto-public/pbmulticluster/v2beta1/computed_exported_services_deepcopy.gen.go +++ /dev/null @@ -1,69 +0,0 @@ -// Code generated by protoc-gen-deepcopy. DO NOT EDIT. -package multiclusterv2beta1 - -import ( - proto "google.golang.org/protobuf/proto" -) - -// DeepCopyInto supports using ComputedExportedServices within kubernetes types, where deepcopy-gen is used. -func (in *ComputedExportedServices) DeepCopyInto(out *ComputedExportedServices) { - proto.Reset(out) - proto.Merge(out, proto.Clone(in)) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ComputedExportedServices. Required by controller-gen. -func (in *ComputedExportedServices) DeepCopy() *ComputedExportedServices { - if in == nil { - return nil - } - out := new(ComputedExportedServices) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new ComputedExportedServices. Required by controller-gen. -func (in *ComputedExportedServices) DeepCopyInterface() interface{} { - return in.DeepCopy() -} - -// DeepCopyInto supports using ComputedExportedService within kubernetes types, where deepcopy-gen is used. -func (in *ComputedExportedService) DeepCopyInto(out *ComputedExportedService) { - proto.Reset(out) - proto.Merge(out, proto.Clone(in)) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ComputedExportedService. Required by controller-gen. -func (in *ComputedExportedService) DeepCopy() *ComputedExportedService { - if in == nil { - return nil - } - out := new(ComputedExportedService) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new ComputedExportedService. Required by controller-gen. -func (in *ComputedExportedService) DeepCopyInterface() interface{} { - return in.DeepCopy() -} - -// DeepCopyInto supports using ComputedExportedServicesConsumer within kubernetes types, where deepcopy-gen is used. -func (in *ComputedExportedServicesConsumer) DeepCopyInto(out *ComputedExportedServicesConsumer) { - proto.Reset(out) - proto.Merge(out, proto.Clone(in)) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ComputedExportedServicesConsumer. Required by controller-gen. -func (in *ComputedExportedServicesConsumer) DeepCopy() *ComputedExportedServicesConsumer { - if in == nil { - return nil - } - out := new(ComputedExportedServicesConsumer) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new ComputedExportedServicesConsumer. Required by controller-gen. -func (in *ComputedExportedServicesConsumer) DeepCopyInterface() interface{} { - return in.DeepCopy() -} diff --git a/proto-public/pbmulticluster/v2beta1/computed_exported_services_json.gen.go b/proto-public/pbmulticluster/v2beta1/computed_exported_services_json.gen.go deleted file mode 100644 index 709a7e6ef6b20..0000000000000 --- a/proto-public/pbmulticluster/v2beta1/computed_exported_services_json.gen.go +++ /dev/null @@ -1,44 +0,0 @@ -// Code generated by protoc-json-shim. DO NOT EDIT. -package multiclusterv2beta1 - -import ( - protojson "google.golang.org/protobuf/encoding/protojson" -) - -// MarshalJSON is a custom marshaler for ComputedExportedServices -func (this *ComputedExportedServices) MarshalJSON() ([]byte, error) { - str, err := ComputedExportedServicesMarshaler.Marshal(this) - return []byte(str), err -} - -// UnmarshalJSON is a custom unmarshaler for ComputedExportedServices -func (this *ComputedExportedServices) UnmarshalJSON(b []byte) error { - return ComputedExportedServicesUnmarshaler.Unmarshal(b, this) -} - -// MarshalJSON is a custom marshaler for ComputedExportedService -func (this *ComputedExportedService) MarshalJSON() ([]byte, error) { - str, err := ComputedExportedServicesMarshaler.Marshal(this) - return []byte(str), err -} - -// UnmarshalJSON is a custom unmarshaler for ComputedExportedService -func (this *ComputedExportedService) UnmarshalJSON(b []byte) error { - return ComputedExportedServicesUnmarshaler.Unmarshal(b, this) -} - -// MarshalJSON is a custom marshaler for ComputedExportedServicesConsumer -func (this *ComputedExportedServicesConsumer) MarshalJSON() ([]byte, error) { - str, err := ComputedExportedServicesMarshaler.Marshal(this) - return []byte(str), err -} - -// UnmarshalJSON is a custom unmarshaler for ComputedExportedServicesConsumer -func (this *ComputedExportedServicesConsumer) UnmarshalJSON(b []byte) error { - return ComputedExportedServicesUnmarshaler.Unmarshal(b, this) -} - -var ( - ComputedExportedServicesMarshaler = &protojson.MarshalOptions{} - ComputedExportedServicesUnmarshaler = &protojson.UnmarshalOptions{DiscardUnknown: false} -) diff --git a/proto-public/pbmulticluster/v2beta1/exported_services.pb.binary.go b/proto-public/pbmulticluster/v2beta1/exported_services.pb.binary.go deleted file mode 100644 index 1530294804123..0000000000000 --- a/proto-public/pbmulticluster/v2beta1/exported_services.pb.binary.go +++ /dev/null @@ -1,18 +0,0 @@ -// Code generated by protoc-gen-go-binary. DO NOT EDIT. -// source: pbmulticluster/v2beta1/exported_services.proto - -package multiclusterv2beta1 - -import ( - "google.golang.org/protobuf/proto" -) - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *ExportedServices) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *ExportedServices) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} diff --git a/proto-public/pbmulticluster/v2beta1/exported_services.pb.go b/proto-public/pbmulticluster/v2beta1/exported_services.pb.go deleted file mode 100644 index 7e776c3a94c16..0000000000000 --- a/proto-public/pbmulticluster/v2beta1/exported_services.pb.go +++ /dev/null @@ -1,193 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: BUSL-1.1 - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.30.0 -// protoc (unknown) -// source: pbmulticluster/v2beta1/exported_services.proto - -package multiclusterv2beta1 - -import ( - _ "github.com/hashicorp/consul/proto-public/pbresource" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type ExportedServices struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Services []string `protobuf:"bytes,1,rep,name=services,proto3" json:"services,omitempty"` - Consumers []*ExportedServicesConsumer `protobuf:"bytes,2,rep,name=consumers,proto3" json:"consumers,omitempty"` -} - -func (x *ExportedServices) Reset() { - *x = ExportedServices{} - if protoimpl.UnsafeEnabled { - mi := &file_pbmulticluster_v2beta1_exported_services_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ExportedServices) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ExportedServices) ProtoMessage() {} - -func (x *ExportedServices) ProtoReflect() protoreflect.Message { - mi := &file_pbmulticluster_v2beta1_exported_services_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ExportedServices.ProtoReflect.Descriptor instead. -func (*ExportedServices) Descriptor() ([]byte, []int) { - return file_pbmulticluster_v2beta1_exported_services_proto_rawDescGZIP(), []int{0} -} - -func (x *ExportedServices) GetServices() []string { - if x != nil { - return x.Services - } - return nil -} - -func (x *ExportedServices) GetConsumers() []*ExportedServicesConsumer { - if x != nil { - return x.Consumers - } - return nil -} - -var File_pbmulticluster_v2beta1_exported_services_proto protoreflect.FileDescriptor - -var file_pbmulticluster_v2beta1_exported_services_proto_rawDesc = []byte{ - 0x0a, 0x2e, 0x70, 0x62, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x2f, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, - 0x64, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x12, 0x25, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, - 0x75, 0x6c, 0x2e, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, - 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x1a, 0x37, 0x70, 0x62, 0x6d, 0x75, 0x6c, 0x74, 0x69, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, - 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x1a, 0x1c, 0x70, 0x62, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2f, 0x61, 0x6e, 0x6e, - 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x95, - 0x01, 0x0a, 0x10, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, - 0x5d, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, - 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x2e, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, - 0x74, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x73, 0x75, - 0x6d, 0x65, 0x72, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x73, 0x3a, 0x06, - 0xa2, 0x93, 0x04, 0x02, 0x08, 0x03, 0x42, 0xce, 0x02, 0x0a, 0x29, 0x63, 0x6f, 0x6d, 0x2e, 0x68, - 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, - 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x42, 0x15, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x53, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, - 0x6f, 0x72, 0x70, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x62, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x3b, 0x6d, - 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x76, 0x32, 0x62, 0x65, 0x74, - 0x61, 0x31, 0xa2, 0x02, 0x03, 0x48, 0x43, 0x4d, 0xaa, 0x02, 0x25, 0x48, 0x61, 0x73, 0x68, 0x69, - 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x4d, 0x75, 0x6c, 0x74, - 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x56, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, - 0xca, 0x02, 0x25, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x5c, 0x43, 0x6f, 0x6e, - 0x73, 0x75, 0x6c, 0x5c, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x5c, 0x56, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, 0x31, 0x48, 0x61, 0x73, 0x68, 0x69, - 0x63, 0x6f, 0x72, 0x70, 0x5c, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x5c, 0x4d, 0x75, 0x6c, 0x74, - 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5c, 0x56, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x28, 0x48, - 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x3a, 0x3a, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, - 0x3a, 0x3a, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x3a, 0x3a, - 0x56, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_pbmulticluster_v2beta1_exported_services_proto_rawDescOnce sync.Once - file_pbmulticluster_v2beta1_exported_services_proto_rawDescData = file_pbmulticluster_v2beta1_exported_services_proto_rawDesc -) - -func file_pbmulticluster_v2beta1_exported_services_proto_rawDescGZIP() []byte { - file_pbmulticluster_v2beta1_exported_services_proto_rawDescOnce.Do(func() { - file_pbmulticluster_v2beta1_exported_services_proto_rawDescData = protoimpl.X.CompressGZIP(file_pbmulticluster_v2beta1_exported_services_proto_rawDescData) - }) - return file_pbmulticluster_v2beta1_exported_services_proto_rawDescData -} - -var file_pbmulticluster_v2beta1_exported_services_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_pbmulticluster_v2beta1_exported_services_proto_goTypes = []interface{}{ - (*ExportedServices)(nil), // 0: hashicorp.consul.multicluster.v2beta1.ExportedServices - (*ExportedServicesConsumer)(nil), // 1: hashicorp.consul.multicluster.v2beta1.ExportedServicesConsumer -} -var file_pbmulticluster_v2beta1_exported_services_proto_depIdxs = []int32{ - 1, // 0: hashicorp.consul.multicluster.v2beta1.ExportedServices.consumers:type_name -> hashicorp.consul.multicluster.v2beta1.ExportedServicesConsumer - 1, // [1:1] is the sub-list for method output_type - 1, // [1:1] is the sub-list for method input_type - 1, // [1:1] is the sub-list for extension type_name - 1, // [1:1] is the sub-list for extension extendee - 0, // [0:1] is the sub-list for field type_name -} - -func init() { file_pbmulticluster_v2beta1_exported_services_proto_init() } -func file_pbmulticluster_v2beta1_exported_services_proto_init() { - if File_pbmulticluster_v2beta1_exported_services_proto != nil { - return - } - file_pbmulticluster_v2beta1_exported_services_consumer_proto_init() - if !protoimpl.UnsafeEnabled { - file_pbmulticluster_v2beta1_exported_services_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExportedServices); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_pbmulticluster_v2beta1_exported_services_proto_rawDesc, - NumEnums: 0, - NumMessages: 1, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_pbmulticluster_v2beta1_exported_services_proto_goTypes, - DependencyIndexes: file_pbmulticluster_v2beta1_exported_services_proto_depIdxs, - MessageInfos: file_pbmulticluster_v2beta1_exported_services_proto_msgTypes, - }.Build() - File_pbmulticluster_v2beta1_exported_services_proto = out.File - file_pbmulticluster_v2beta1_exported_services_proto_rawDesc = nil - file_pbmulticluster_v2beta1_exported_services_proto_goTypes = nil - file_pbmulticluster_v2beta1_exported_services_proto_depIdxs = nil -} diff --git a/proto-public/pbmulticluster/v2beta1/exported_services.proto b/proto-public/pbmulticluster/v2beta1/exported_services.proto deleted file mode 100644 index 76cd98ad7a46f..0000000000000 --- a/proto-public/pbmulticluster/v2beta1/exported_services.proto +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: BUSL-1.1 - -syntax = "proto3"; - -package hashicorp.consul.multicluster.v2beta1; - -import "pbmulticluster/v2beta1/exported_services_consumer.proto"; -import "pbresource/annotations.proto"; - -message ExportedServices { - option (hashicorp.consul.resource.spec) = {scope: SCOPE_NAMESPACE}; - - repeated string services = 1; - repeated ExportedServicesConsumer consumers = 2; -} diff --git a/proto-public/pbmulticluster/v2beta1/exported_services_consumer.pb.binary.go b/proto-public/pbmulticluster/v2beta1/exported_services_consumer.pb.binary.go deleted file mode 100644 index 5f8eecd75158b..0000000000000 --- a/proto-public/pbmulticluster/v2beta1/exported_services_consumer.pb.binary.go +++ /dev/null @@ -1,18 +0,0 @@ -// Code generated by protoc-gen-go-binary. DO NOT EDIT. -// source: pbmulticluster/v2beta1/exported_services_consumer.proto - -package multiclusterv2beta1 - -import ( - "google.golang.org/protobuf/proto" -) - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *ExportedServicesConsumer) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *ExportedServicesConsumer) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} diff --git a/proto-public/pbmulticluster/v2beta1/exported_services_consumer.pb.go b/proto-public/pbmulticluster/v2beta1/exported_services_consumer.pb.go deleted file mode 100644 index a254b81af0a63..0000000000000 --- a/proto-public/pbmulticluster/v2beta1/exported_services_consumer.pb.go +++ /dev/null @@ -1,230 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: BUSL-1.1 - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.30.0 -// protoc (unknown) -// source: pbmulticluster/v2beta1/exported_services_consumer.proto - -package multiclusterv2beta1 - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type ExportedServicesConsumer struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to ConsumerTenancy: - // - // *ExportedServicesConsumer_Peer - // *ExportedServicesConsumer_Partition - // *ExportedServicesConsumer_SamenessGroup - ConsumerTenancy isExportedServicesConsumer_ConsumerTenancy `protobuf_oneof:"consumer_tenancy"` -} - -func (x *ExportedServicesConsumer) Reset() { - *x = ExportedServicesConsumer{} - if protoimpl.UnsafeEnabled { - mi := &file_pbmulticluster_v2beta1_exported_services_consumer_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ExportedServicesConsumer) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ExportedServicesConsumer) ProtoMessage() {} - -func (x *ExportedServicesConsumer) ProtoReflect() protoreflect.Message { - mi := &file_pbmulticluster_v2beta1_exported_services_consumer_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ExportedServicesConsumer.ProtoReflect.Descriptor instead. -func (*ExportedServicesConsumer) Descriptor() ([]byte, []int) { - return file_pbmulticluster_v2beta1_exported_services_consumer_proto_rawDescGZIP(), []int{0} -} - -func (m *ExportedServicesConsumer) GetConsumerTenancy() isExportedServicesConsumer_ConsumerTenancy { - if m != nil { - return m.ConsumerTenancy - } - return nil -} - -func (x *ExportedServicesConsumer) GetPeer() string { - if x, ok := x.GetConsumerTenancy().(*ExportedServicesConsumer_Peer); ok { - return x.Peer - } - return "" -} - -func (x *ExportedServicesConsumer) GetPartition() string { - if x, ok := x.GetConsumerTenancy().(*ExportedServicesConsumer_Partition); ok { - return x.Partition - } - return "" -} - -func (x *ExportedServicesConsumer) GetSamenessGroup() string { - if x, ok := x.GetConsumerTenancy().(*ExportedServicesConsumer_SamenessGroup); ok { - return x.SamenessGroup - } - return "" -} - -type isExportedServicesConsumer_ConsumerTenancy interface { - isExportedServicesConsumer_ConsumerTenancy() -} - -type ExportedServicesConsumer_Peer struct { - Peer string `protobuf:"bytes,1,opt,name=peer,proto3,oneof"` -} - -type ExportedServicesConsumer_Partition struct { - Partition string `protobuf:"bytes,2,opt,name=partition,proto3,oneof"` -} - -type ExportedServicesConsumer_SamenessGroup struct { - SamenessGroup string `protobuf:"bytes,3,opt,name=sameness_group,json=samenessGroup,proto3,oneof"` -} - -func (*ExportedServicesConsumer_Peer) isExportedServicesConsumer_ConsumerTenancy() {} - -func (*ExportedServicesConsumer_Partition) isExportedServicesConsumer_ConsumerTenancy() {} - -func (*ExportedServicesConsumer_SamenessGroup) isExportedServicesConsumer_ConsumerTenancy() {} - -var File_pbmulticluster_v2beta1_exported_services_consumer_proto protoreflect.FileDescriptor - -var file_pbmulticluster_v2beta1_exported_services_consumer_proto_rawDesc = []byte{ - 0x0a, 0x37, 0x70, 0x62, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x2f, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, - 0x64, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x75, - 0x6d, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x25, 0x68, 0x61, 0x73, 0x68, 0x69, - 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x75, 0x6c, 0x74, - 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x22, 0x8d, 0x01, 0x0a, 0x18, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x12, 0x14, 0x0a, - 0x04, 0x70, 0x65, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x70, - 0x65, 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0e, 0x73, 0x61, 0x6d, 0x65, 0x6e, 0x65, 0x73, 0x73, 0x5f, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0d, 0x73, - 0x61, 0x6d, 0x65, 0x6e, 0x65, 0x73, 0x73, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x12, 0x0a, 0x10, - 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x5f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x63, 0x79, - 0x42, 0xd6, 0x02, 0x0a, 0x29, 0x63, 0x6f, 0x6d, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, - 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, 0x1d, - 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, - 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, - 0x53, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68, - 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x62, 0x6d, 0x75, 0x6c, 0x74, - 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x3b, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x76, 0x32, 0x62, - 0x65, 0x74, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x48, 0x43, 0x4d, 0xaa, 0x02, 0x25, 0x48, 0x61, 0x73, - 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x4d, 0x75, - 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x56, 0x32, 0x62, 0x65, 0x74, - 0x61, 0x31, 0xca, 0x02, 0x25, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x5c, 0x43, - 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x5c, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x5c, 0x56, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, 0x31, 0x48, 0x61, 0x73, - 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x5c, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x5c, 0x4d, 0x75, - 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5c, 0x56, 0x32, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, - 0x28, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x3a, 0x3a, 0x43, 0x6f, 0x6e, 0x73, - 0x75, 0x6c, 0x3a, 0x3a, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, -} - -var ( - file_pbmulticluster_v2beta1_exported_services_consumer_proto_rawDescOnce sync.Once - file_pbmulticluster_v2beta1_exported_services_consumer_proto_rawDescData = file_pbmulticluster_v2beta1_exported_services_consumer_proto_rawDesc -) - -func file_pbmulticluster_v2beta1_exported_services_consumer_proto_rawDescGZIP() []byte { - file_pbmulticluster_v2beta1_exported_services_consumer_proto_rawDescOnce.Do(func() { - file_pbmulticluster_v2beta1_exported_services_consumer_proto_rawDescData = protoimpl.X.CompressGZIP(file_pbmulticluster_v2beta1_exported_services_consumer_proto_rawDescData) - }) - return file_pbmulticluster_v2beta1_exported_services_consumer_proto_rawDescData -} - -var file_pbmulticluster_v2beta1_exported_services_consumer_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_pbmulticluster_v2beta1_exported_services_consumer_proto_goTypes = []interface{}{ - (*ExportedServicesConsumer)(nil), // 0: hashicorp.consul.multicluster.v2beta1.ExportedServicesConsumer -} -var file_pbmulticluster_v2beta1_exported_services_consumer_proto_depIdxs = []int32{ - 0, // [0:0] is the sub-list for method output_type - 0, // [0:0] is the sub-list for method input_type - 0, // [0:0] is the sub-list for extension type_name - 0, // [0:0] is the sub-list for extension extendee - 0, // [0:0] is the sub-list for field type_name -} - -func init() { file_pbmulticluster_v2beta1_exported_services_consumer_proto_init() } -func file_pbmulticluster_v2beta1_exported_services_consumer_proto_init() { - if File_pbmulticluster_v2beta1_exported_services_consumer_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_pbmulticluster_v2beta1_exported_services_consumer_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExportedServicesConsumer); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_pbmulticluster_v2beta1_exported_services_consumer_proto_msgTypes[0].OneofWrappers = []interface{}{ - (*ExportedServicesConsumer_Peer)(nil), - (*ExportedServicesConsumer_Partition)(nil), - (*ExportedServicesConsumer_SamenessGroup)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_pbmulticluster_v2beta1_exported_services_consumer_proto_rawDesc, - NumEnums: 0, - NumMessages: 1, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_pbmulticluster_v2beta1_exported_services_consumer_proto_goTypes, - DependencyIndexes: file_pbmulticluster_v2beta1_exported_services_consumer_proto_depIdxs, - MessageInfos: file_pbmulticluster_v2beta1_exported_services_consumer_proto_msgTypes, - }.Build() - File_pbmulticluster_v2beta1_exported_services_consumer_proto = out.File - file_pbmulticluster_v2beta1_exported_services_consumer_proto_rawDesc = nil - file_pbmulticluster_v2beta1_exported_services_consumer_proto_goTypes = nil - file_pbmulticluster_v2beta1_exported_services_consumer_proto_depIdxs = nil -} diff --git a/proto-public/pbmulticluster/v2beta1/exported_services_consumer.proto b/proto-public/pbmulticluster/v2beta1/exported_services_consumer.proto deleted file mode 100644 index 1a110099dcf59..0000000000000 --- a/proto-public/pbmulticluster/v2beta1/exported_services_consumer.proto +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: BUSL-1.1 - -syntax = "proto3"; - -package hashicorp.consul.multicluster.v2beta1; - -message ExportedServicesConsumer { - oneof consumer_tenancy { - string peer = 1; - string partition = 2; - string sameness_group = 3; - } -} diff --git a/proto-public/pbmulticluster/v2beta1/exported_services_consumer_deepcopy.gen.go b/proto-public/pbmulticluster/v2beta1/exported_services_consumer_deepcopy.gen.go deleted file mode 100644 index 847fe0ec3e31d..0000000000000 --- a/proto-public/pbmulticluster/v2beta1/exported_services_consumer_deepcopy.gen.go +++ /dev/null @@ -1,27 +0,0 @@ -// Code generated by protoc-gen-deepcopy. DO NOT EDIT. -package multiclusterv2beta1 - -import ( - proto "google.golang.org/protobuf/proto" -) - -// DeepCopyInto supports using ExportedServicesConsumer within kubernetes types, where deepcopy-gen is used. -func (in *ExportedServicesConsumer) DeepCopyInto(out *ExportedServicesConsumer) { - proto.Reset(out) - proto.Merge(out, proto.Clone(in)) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExportedServicesConsumer. Required by controller-gen. -func (in *ExportedServicesConsumer) DeepCopy() *ExportedServicesConsumer { - if in == nil { - return nil - } - out := new(ExportedServicesConsumer) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new ExportedServicesConsumer. Required by controller-gen. -func (in *ExportedServicesConsumer) DeepCopyInterface() interface{} { - return in.DeepCopy() -} diff --git a/proto-public/pbmulticluster/v2beta1/exported_services_consumer_json.gen.go b/proto-public/pbmulticluster/v2beta1/exported_services_consumer_json.gen.go deleted file mode 100644 index 3f43f69932a19..0000000000000 --- a/proto-public/pbmulticluster/v2beta1/exported_services_consumer_json.gen.go +++ /dev/null @@ -1,22 +0,0 @@ -// Code generated by protoc-json-shim. DO NOT EDIT. -package multiclusterv2beta1 - -import ( - protojson "google.golang.org/protobuf/encoding/protojson" -) - -// MarshalJSON is a custom marshaler for ExportedServicesConsumer -func (this *ExportedServicesConsumer) MarshalJSON() ([]byte, error) { - str, err := ExportedServicesConsumerMarshaler.Marshal(this) - return []byte(str), err -} - -// UnmarshalJSON is a custom unmarshaler for ExportedServicesConsumer -func (this *ExportedServicesConsumer) UnmarshalJSON(b []byte) error { - return ExportedServicesConsumerUnmarshaler.Unmarshal(b, this) -} - -var ( - ExportedServicesConsumerMarshaler = &protojson.MarshalOptions{} - ExportedServicesConsumerUnmarshaler = &protojson.UnmarshalOptions{DiscardUnknown: false} -) diff --git a/proto-public/pbmulticluster/v2beta1/exported_services_deepcopy.gen.go b/proto-public/pbmulticluster/v2beta1/exported_services_deepcopy.gen.go deleted file mode 100644 index f5897233ef8b6..0000000000000 --- a/proto-public/pbmulticluster/v2beta1/exported_services_deepcopy.gen.go +++ /dev/null @@ -1,27 +0,0 @@ -// Code generated by protoc-gen-deepcopy. DO NOT EDIT. -package multiclusterv2beta1 - -import ( - proto "google.golang.org/protobuf/proto" -) - -// DeepCopyInto supports using ExportedServices within kubernetes types, where deepcopy-gen is used. -func (in *ExportedServices) DeepCopyInto(out *ExportedServices) { - proto.Reset(out) - proto.Merge(out, proto.Clone(in)) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExportedServices. Required by controller-gen. -func (in *ExportedServices) DeepCopy() *ExportedServices { - if in == nil { - return nil - } - out := new(ExportedServices) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new ExportedServices. Required by controller-gen. -func (in *ExportedServices) DeepCopyInterface() interface{} { - return in.DeepCopy() -} diff --git a/proto-public/pbmulticluster/v2beta1/exported_services_json.gen.go b/proto-public/pbmulticluster/v2beta1/exported_services_json.gen.go deleted file mode 100644 index 40a7cdc38b9b4..0000000000000 --- a/proto-public/pbmulticluster/v2beta1/exported_services_json.gen.go +++ /dev/null @@ -1,22 +0,0 @@ -// Code generated by protoc-json-shim. DO NOT EDIT. -package multiclusterv2beta1 - -import ( - protojson "google.golang.org/protobuf/encoding/protojson" -) - -// MarshalJSON is a custom marshaler for ExportedServices -func (this *ExportedServices) MarshalJSON() ([]byte, error) { - str, err := ExportedServicesMarshaler.Marshal(this) - return []byte(str), err -} - -// UnmarshalJSON is a custom unmarshaler for ExportedServices -func (this *ExportedServices) UnmarshalJSON(b []byte) error { - return ExportedServicesUnmarshaler.Unmarshal(b, this) -} - -var ( - ExportedServicesMarshaler = &protojson.MarshalOptions{} - ExportedServicesUnmarshaler = &protojson.UnmarshalOptions{DiscardUnknown: false} -) diff --git a/proto-public/pbmulticluster/v2beta1/namespace_exported_services.pb.binary.go b/proto-public/pbmulticluster/v2beta1/namespace_exported_services.pb.binary.go deleted file mode 100644 index eb000381077b7..0000000000000 --- a/proto-public/pbmulticluster/v2beta1/namespace_exported_services.pb.binary.go +++ /dev/null @@ -1,18 +0,0 @@ -// Code generated by protoc-gen-go-binary. DO NOT EDIT. -// source: pbmulticluster/v2beta1/namespace_exported_services.proto - -package multiclusterv2beta1 - -import ( - "google.golang.org/protobuf/proto" -) - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *NamespaceExportedServices) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *NamespaceExportedServices) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} diff --git a/proto-public/pbmulticluster/v2beta1/namespace_exported_services.pb.go b/proto-public/pbmulticluster/v2beta1/namespace_exported_services.pb.go deleted file mode 100644 index 5936f86fda119..0000000000000 --- a/proto-public/pbmulticluster/v2beta1/namespace_exported_services.pb.go +++ /dev/null @@ -1,185 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: BUSL-1.1 - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.30.0 -// protoc (unknown) -// source: pbmulticluster/v2beta1/namespace_exported_services.proto - -package multiclusterv2beta1 - -import ( - _ "github.com/hashicorp/consul/proto-public/pbresource" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type NamespaceExportedServices struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Consumers []*ExportedServicesConsumer `protobuf:"bytes,1,rep,name=consumers,proto3" json:"consumers,omitempty"` -} - -func (x *NamespaceExportedServices) Reset() { - *x = NamespaceExportedServices{} - if protoimpl.UnsafeEnabled { - mi := &file_pbmulticluster_v2beta1_namespace_exported_services_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *NamespaceExportedServices) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*NamespaceExportedServices) ProtoMessage() {} - -func (x *NamespaceExportedServices) ProtoReflect() protoreflect.Message { - mi := &file_pbmulticluster_v2beta1_namespace_exported_services_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use NamespaceExportedServices.ProtoReflect.Descriptor instead. -func (*NamespaceExportedServices) Descriptor() ([]byte, []int) { - return file_pbmulticluster_v2beta1_namespace_exported_services_proto_rawDescGZIP(), []int{0} -} - -func (x *NamespaceExportedServices) GetConsumers() []*ExportedServicesConsumer { - if x != nil { - return x.Consumers - } - return nil -} - -var File_pbmulticluster_v2beta1_namespace_exported_services_proto protoreflect.FileDescriptor - -var file_pbmulticluster_v2beta1_namespace_exported_services_proto_rawDesc = []byte{ - 0x0a, 0x38, 0x70, 0x62, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x2f, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x5f, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x25, 0x68, 0x61, 0x73, 0x68, - 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x75, 0x6c, - 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x1a, 0x37, 0x70, 0x62, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x2f, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, - 0x65, 0x64, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x73, - 0x75, 0x6d, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x70, 0x62, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x82, 0x01, 0x0a, 0x19, 0x4e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x5d, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, - 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x68, 0x61, 0x73, 0x68, - 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x75, 0x6c, - 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x73, - 0x75, 0x6d, 0x65, 0x72, 0x73, 0x3a, 0x06, 0xa2, 0x93, 0x04, 0x02, 0x08, 0x03, 0x42, 0xd7, 0x02, - 0x0a, 0x29, 0x63, 0x6f, 0x6d, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, - 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, 0x1e, 0x4e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x53, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, - 0x6f, 0x72, 0x70, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x62, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x3b, 0x6d, - 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x76, 0x32, 0x62, 0x65, 0x74, - 0x61, 0x31, 0xa2, 0x02, 0x03, 0x48, 0x43, 0x4d, 0xaa, 0x02, 0x25, 0x48, 0x61, 0x73, 0x68, 0x69, - 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x4d, 0x75, 0x6c, 0x74, - 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x56, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, - 0xca, 0x02, 0x25, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x5c, 0x43, 0x6f, 0x6e, - 0x73, 0x75, 0x6c, 0x5c, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x5c, 0x56, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, 0x31, 0x48, 0x61, 0x73, 0x68, 0x69, - 0x63, 0x6f, 0x72, 0x70, 0x5c, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x5c, 0x4d, 0x75, 0x6c, 0x74, - 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5c, 0x56, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x28, 0x48, - 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x3a, 0x3a, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, - 0x3a, 0x3a, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x3a, 0x3a, - 0x56, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_pbmulticluster_v2beta1_namespace_exported_services_proto_rawDescOnce sync.Once - file_pbmulticluster_v2beta1_namespace_exported_services_proto_rawDescData = file_pbmulticluster_v2beta1_namespace_exported_services_proto_rawDesc -) - -func file_pbmulticluster_v2beta1_namespace_exported_services_proto_rawDescGZIP() []byte { - file_pbmulticluster_v2beta1_namespace_exported_services_proto_rawDescOnce.Do(func() { - file_pbmulticluster_v2beta1_namespace_exported_services_proto_rawDescData = protoimpl.X.CompressGZIP(file_pbmulticluster_v2beta1_namespace_exported_services_proto_rawDescData) - }) - return file_pbmulticluster_v2beta1_namespace_exported_services_proto_rawDescData -} - -var file_pbmulticluster_v2beta1_namespace_exported_services_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_pbmulticluster_v2beta1_namespace_exported_services_proto_goTypes = []interface{}{ - (*NamespaceExportedServices)(nil), // 0: hashicorp.consul.multicluster.v2beta1.NamespaceExportedServices - (*ExportedServicesConsumer)(nil), // 1: hashicorp.consul.multicluster.v2beta1.ExportedServicesConsumer -} -var file_pbmulticluster_v2beta1_namespace_exported_services_proto_depIdxs = []int32{ - 1, // 0: hashicorp.consul.multicluster.v2beta1.NamespaceExportedServices.consumers:type_name -> hashicorp.consul.multicluster.v2beta1.ExportedServicesConsumer - 1, // [1:1] is the sub-list for method output_type - 1, // [1:1] is the sub-list for method input_type - 1, // [1:1] is the sub-list for extension type_name - 1, // [1:1] is the sub-list for extension extendee - 0, // [0:1] is the sub-list for field type_name -} - -func init() { file_pbmulticluster_v2beta1_namespace_exported_services_proto_init() } -func file_pbmulticluster_v2beta1_namespace_exported_services_proto_init() { - if File_pbmulticluster_v2beta1_namespace_exported_services_proto != nil { - return - } - file_pbmulticluster_v2beta1_exported_services_consumer_proto_init() - if !protoimpl.UnsafeEnabled { - file_pbmulticluster_v2beta1_namespace_exported_services_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NamespaceExportedServices); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_pbmulticluster_v2beta1_namespace_exported_services_proto_rawDesc, - NumEnums: 0, - NumMessages: 1, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_pbmulticluster_v2beta1_namespace_exported_services_proto_goTypes, - DependencyIndexes: file_pbmulticluster_v2beta1_namespace_exported_services_proto_depIdxs, - MessageInfos: file_pbmulticluster_v2beta1_namespace_exported_services_proto_msgTypes, - }.Build() - File_pbmulticluster_v2beta1_namespace_exported_services_proto = out.File - file_pbmulticluster_v2beta1_namespace_exported_services_proto_rawDesc = nil - file_pbmulticluster_v2beta1_namespace_exported_services_proto_goTypes = nil - file_pbmulticluster_v2beta1_namespace_exported_services_proto_depIdxs = nil -} diff --git a/proto-public/pbmulticluster/v2beta1/namespace_exported_services.proto b/proto-public/pbmulticluster/v2beta1/namespace_exported_services.proto deleted file mode 100644 index 074d44d36063e..0000000000000 --- a/proto-public/pbmulticluster/v2beta1/namespace_exported_services.proto +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: BUSL-1.1 - -syntax = "proto3"; - -package hashicorp.consul.multicluster.v2beta1; - -import "pbmulticluster/v2beta1/exported_services_consumer.proto"; -import "pbresource/annotations.proto"; - -message NamespaceExportedServices { - option (hashicorp.consul.resource.spec) = {scope: SCOPE_NAMESPACE}; - - repeated ExportedServicesConsumer consumers = 1; -} diff --git a/proto-public/pbmulticluster/v2beta1/namespace_exported_services_deepcopy.gen.go b/proto-public/pbmulticluster/v2beta1/namespace_exported_services_deepcopy.gen.go deleted file mode 100644 index 9d061a755bdae..0000000000000 --- a/proto-public/pbmulticluster/v2beta1/namespace_exported_services_deepcopy.gen.go +++ /dev/null @@ -1,27 +0,0 @@ -// Code generated by protoc-gen-deepcopy. DO NOT EDIT. -package multiclusterv2beta1 - -import ( - proto "google.golang.org/protobuf/proto" -) - -// DeepCopyInto supports using NamespaceExportedServices within kubernetes types, where deepcopy-gen is used. -func (in *NamespaceExportedServices) DeepCopyInto(out *NamespaceExportedServices) { - proto.Reset(out) - proto.Merge(out, proto.Clone(in)) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NamespaceExportedServices. Required by controller-gen. -func (in *NamespaceExportedServices) DeepCopy() *NamespaceExportedServices { - if in == nil { - return nil - } - out := new(NamespaceExportedServices) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new NamespaceExportedServices. Required by controller-gen. -func (in *NamespaceExportedServices) DeepCopyInterface() interface{} { - return in.DeepCopy() -} diff --git a/proto-public/pbmulticluster/v2beta1/namespace_exported_services_json.gen.go b/proto-public/pbmulticluster/v2beta1/namespace_exported_services_json.gen.go deleted file mode 100644 index 5d4ee1e42c7a9..0000000000000 --- a/proto-public/pbmulticluster/v2beta1/namespace_exported_services_json.gen.go +++ /dev/null @@ -1,22 +0,0 @@ -// Code generated by protoc-json-shim. DO NOT EDIT. -package multiclusterv2beta1 - -import ( - protojson "google.golang.org/protobuf/encoding/protojson" -) - -// MarshalJSON is a custom marshaler for NamespaceExportedServices -func (this *NamespaceExportedServices) MarshalJSON() ([]byte, error) { - str, err := NamespaceExportedServicesMarshaler.Marshal(this) - return []byte(str), err -} - -// UnmarshalJSON is a custom unmarshaler for NamespaceExportedServices -func (this *NamespaceExportedServices) UnmarshalJSON(b []byte) error { - return NamespaceExportedServicesUnmarshaler.Unmarshal(b, this) -} - -var ( - NamespaceExportedServicesMarshaler = &protojson.MarshalOptions{} - NamespaceExportedServicesUnmarshaler = &protojson.UnmarshalOptions{DiscardUnknown: false} -) diff --git a/proto-public/pbmulticluster/v2beta1/partition_exported_services.pb.binary.go b/proto-public/pbmulticluster/v2beta1/partition_exported_services.pb.binary.go deleted file mode 100644 index 5518b8a004053..0000000000000 --- a/proto-public/pbmulticluster/v2beta1/partition_exported_services.pb.binary.go +++ /dev/null @@ -1,18 +0,0 @@ -// Code generated by protoc-gen-go-binary. DO NOT EDIT. -// source: pbmulticluster/v2beta1/partition_exported_services.proto - -package multiclusterv2beta1 - -import ( - "google.golang.org/protobuf/proto" -) - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *PartitionExportedServices) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *PartitionExportedServices) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} diff --git a/proto-public/pbmulticluster/v2beta1/partition_exported_services.pb.go b/proto-public/pbmulticluster/v2beta1/partition_exported_services.pb.go deleted file mode 100644 index 116e4784e6fe7..0000000000000 --- a/proto-public/pbmulticluster/v2beta1/partition_exported_services.pb.go +++ /dev/null @@ -1,185 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: BUSL-1.1 - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.30.0 -// protoc (unknown) -// source: pbmulticluster/v2beta1/partition_exported_services.proto - -package multiclusterv2beta1 - -import ( - _ "github.com/hashicorp/consul/proto-public/pbresource" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type PartitionExportedServices struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Consumers []*ExportedServicesConsumer `protobuf:"bytes,1,rep,name=consumers,proto3" json:"consumers,omitempty"` -} - -func (x *PartitionExportedServices) Reset() { - *x = PartitionExportedServices{} - if protoimpl.UnsafeEnabled { - mi := &file_pbmulticluster_v2beta1_partition_exported_services_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PartitionExportedServices) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PartitionExportedServices) ProtoMessage() {} - -func (x *PartitionExportedServices) ProtoReflect() protoreflect.Message { - mi := &file_pbmulticluster_v2beta1_partition_exported_services_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PartitionExportedServices.ProtoReflect.Descriptor instead. -func (*PartitionExportedServices) Descriptor() ([]byte, []int) { - return file_pbmulticluster_v2beta1_partition_exported_services_proto_rawDescGZIP(), []int{0} -} - -func (x *PartitionExportedServices) GetConsumers() []*ExportedServicesConsumer { - if x != nil { - return x.Consumers - } - return nil -} - -var File_pbmulticluster_v2beta1_partition_exported_services_proto protoreflect.FileDescriptor - -var file_pbmulticluster_v2beta1_partition_exported_services_proto_rawDesc = []byte{ - 0x0a, 0x38, 0x70, 0x62, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x2f, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x25, 0x68, 0x61, 0x73, 0x68, - 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x75, 0x6c, - 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x1a, 0x37, 0x70, 0x62, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x2f, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, - 0x65, 0x64, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x73, - 0x75, 0x6d, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x70, 0x62, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x82, 0x01, 0x0a, 0x19, 0x50, 0x61, 0x72, - 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x5d, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, - 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x68, 0x61, 0x73, 0x68, - 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x75, 0x6c, - 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x73, - 0x75, 0x6d, 0x65, 0x72, 0x73, 0x3a, 0x06, 0xa2, 0x93, 0x04, 0x02, 0x08, 0x02, 0x42, 0xd7, 0x02, - 0x0a, 0x29, 0x63, 0x6f, 0x6d, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, - 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, 0x1e, 0x50, 0x61, 0x72, - 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x53, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, - 0x6f, 0x72, 0x70, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x62, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x3b, 0x6d, - 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x76, 0x32, 0x62, 0x65, 0x74, - 0x61, 0x31, 0xa2, 0x02, 0x03, 0x48, 0x43, 0x4d, 0xaa, 0x02, 0x25, 0x48, 0x61, 0x73, 0x68, 0x69, - 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x4d, 0x75, 0x6c, 0x74, - 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x56, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, - 0xca, 0x02, 0x25, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x5c, 0x43, 0x6f, 0x6e, - 0x73, 0x75, 0x6c, 0x5c, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x5c, 0x56, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, 0x31, 0x48, 0x61, 0x73, 0x68, 0x69, - 0x63, 0x6f, 0x72, 0x70, 0x5c, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x5c, 0x4d, 0x75, 0x6c, 0x74, - 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5c, 0x56, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x28, 0x48, - 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x3a, 0x3a, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, - 0x3a, 0x3a, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x3a, 0x3a, - 0x56, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_pbmulticluster_v2beta1_partition_exported_services_proto_rawDescOnce sync.Once - file_pbmulticluster_v2beta1_partition_exported_services_proto_rawDescData = file_pbmulticluster_v2beta1_partition_exported_services_proto_rawDesc -) - -func file_pbmulticluster_v2beta1_partition_exported_services_proto_rawDescGZIP() []byte { - file_pbmulticluster_v2beta1_partition_exported_services_proto_rawDescOnce.Do(func() { - file_pbmulticluster_v2beta1_partition_exported_services_proto_rawDescData = protoimpl.X.CompressGZIP(file_pbmulticluster_v2beta1_partition_exported_services_proto_rawDescData) - }) - return file_pbmulticluster_v2beta1_partition_exported_services_proto_rawDescData -} - -var file_pbmulticluster_v2beta1_partition_exported_services_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_pbmulticluster_v2beta1_partition_exported_services_proto_goTypes = []interface{}{ - (*PartitionExportedServices)(nil), // 0: hashicorp.consul.multicluster.v2beta1.PartitionExportedServices - (*ExportedServicesConsumer)(nil), // 1: hashicorp.consul.multicluster.v2beta1.ExportedServicesConsumer -} -var file_pbmulticluster_v2beta1_partition_exported_services_proto_depIdxs = []int32{ - 1, // 0: hashicorp.consul.multicluster.v2beta1.PartitionExportedServices.consumers:type_name -> hashicorp.consul.multicluster.v2beta1.ExportedServicesConsumer - 1, // [1:1] is the sub-list for method output_type - 1, // [1:1] is the sub-list for method input_type - 1, // [1:1] is the sub-list for extension type_name - 1, // [1:1] is the sub-list for extension extendee - 0, // [0:1] is the sub-list for field type_name -} - -func init() { file_pbmulticluster_v2beta1_partition_exported_services_proto_init() } -func file_pbmulticluster_v2beta1_partition_exported_services_proto_init() { - if File_pbmulticluster_v2beta1_partition_exported_services_proto != nil { - return - } - file_pbmulticluster_v2beta1_exported_services_consumer_proto_init() - if !protoimpl.UnsafeEnabled { - file_pbmulticluster_v2beta1_partition_exported_services_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PartitionExportedServices); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_pbmulticluster_v2beta1_partition_exported_services_proto_rawDesc, - NumEnums: 0, - NumMessages: 1, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_pbmulticluster_v2beta1_partition_exported_services_proto_goTypes, - DependencyIndexes: file_pbmulticluster_v2beta1_partition_exported_services_proto_depIdxs, - MessageInfos: file_pbmulticluster_v2beta1_partition_exported_services_proto_msgTypes, - }.Build() - File_pbmulticluster_v2beta1_partition_exported_services_proto = out.File - file_pbmulticluster_v2beta1_partition_exported_services_proto_rawDesc = nil - file_pbmulticluster_v2beta1_partition_exported_services_proto_goTypes = nil - file_pbmulticluster_v2beta1_partition_exported_services_proto_depIdxs = nil -} diff --git a/proto-public/pbmulticluster/v2beta1/partition_exported_services.proto b/proto-public/pbmulticluster/v2beta1/partition_exported_services.proto deleted file mode 100644 index b3cf249a0c90f..0000000000000 --- a/proto-public/pbmulticluster/v2beta1/partition_exported_services.proto +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: BUSL-1.1 - -syntax = "proto3"; - -package hashicorp.consul.multicluster.v2beta1; - -import "pbmulticluster/v2beta1/exported_services_consumer.proto"; -import "pbresource/annotations.proto"; - -message PartitionExportedServices { - option (hashicorp.consul.resource.spec) = {scope: SCOPE_PARTITION}; - - repeated ExportedServicesConsumer consumers = 1; -} diff --git a/proto-public/pbmulticluster/v2beta1/partition_exported_services_deepcopy.gen.go b/proto-public/pbmulticluster/v2beta1/partition_exported_services_deepcopy.gen.go deleted file mode 100644 index 9f048e16d2008..0000000000000 --- a/proto-public/pbmulticluster/v2beta1/partition_exported_services_deepcopy.gen.go +++ /dev/null @@ -1,27 +0,0 @@ -// Code generated by protoc-gen-deepcopy. DO NOT EDIT. -package multiclusterv2beta1 - -import ( - proto "google.golang.org/protobuf/proto" -) - -// DeepCopyInto supports using PartitionExportedServices within kubernetes types, where deepcopy-gen is used. -func (in *PartitionExportedServices) DeepCopyInto(out *PartitionExportedServices) { - proto.Reset(out) - proto.Merge(out, proto.Clone(in)) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PartitionExportedServices. Required by controller-gen. -func (in *PartitionExportedServices) DeepCopy() *PartitionExportedServices { - if in == nil { - return nil - } - out := new(PartitionExportedServices) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new PartitionExportedServices. Required by controller-gen. -func (in *PartitionExportedServices) DeepCopyInterface() interface{} { - return in.DeepCopy() -} diff --git a/proto-public/pbmulticluster/v2beta1/partition_exported_services_json.gen.go b/proto-public/pbmulticluster/v2beta1/partition_exported_services_json.gen.go deleted file mode 100644 index e9dfafd702740..0000000000000 --- a/proto-public/pbmulticluster/v2beta1/partition_exported_services_json.gen.go +++ /dev/null @@ -1,22 +0,0 @@ -// Code generated by protoc-json-shim. DO NOT EDIT. -package multiclusterv2beta1 - -import ( - protojson "google.golang.org/protobuf/encoding/protojson" -) - -// MarshalJSON is a custom marshaler for PartitionExportedServices -func (this *PartitionExportedServices) MarshalJSON() ([]byte, error) { - str, err := PartitionExportedServicesMarshaler.Marshal(this) - return []byte(str), err -} - -// UnmarshalJSON is a custom unmarshaler for PartitionExportedServices -func (this *PartitionExportedServices) UnmarshalJSON(b []byte) error { - return PartitionExportedServicesUnmarshaler.Unmarshal(b, this) -} - -var ( - PartitionExportedServicesMarshaler = &protojson.MarshalOptions{} - PartitionExportedServicesUnmarshaler = &protojson.UnmarshalOptions{DiscardUnknown: false} -) diff --git a/proto-public/pbmulticluster/v2beta1/resource_types.gen.go b/proto-public/pbmulticluster/v2beta1/resource_types.gen.go deleted file mode 100644 index 910811b98f931..0000000000000 --- a/proto-public/pbmulticluster/v2beta1/resource_types.gen.go +++ /dev/null @@ -1,43 +0,0 @@ -// Code generated by protoc-gen-resource-types. DO NOT EDIT. - -package multiclusterv2beta1 - -import ( - "github.com/hashicorp/consul/proto-public/pbresource" -) - -const ( - GroupName = "multicluster" - Version = "v2beta1" - - ComputedExportedServicesKind = "ComputedExportedServices" - ExportedServicesKind = "ExportedServices" - NamespaceExportedServicesKind = "NamespaceExportedServices" - PartitionExportedServicesKind = "PartitionExportedServices" -) - -var ( - ComputedExportedServicesType = &pbresource.Type{ - Group: GroupName, - GroupVersion: Version, - Kind: ComputedExportedServicesKind, - } - - ExportedServicesType = &pbresource.Type{ - Group: GroupName, - GroupVersion: Version, - Kind: ExportedServicesKind, - } - - NamespaceExportedServicesType = &pbresource.Type{ - Group: GroupName, - GroupVersion: Version, - Kind: NamespaceExportedServicesKind, - } - - PartitionExportedServicesType = &pbresource.Type{ - Group: GroupName, - GroupVersion: Version, - Kind: PartitionExportedServicesKind, - } -) diff --git a/proto-public/pbresource/annotations.pb.go b/proto-public/pbresource/annotations.pb.go index fa01056cf3d92..a23c051dab38c 100644 --- a/proto-public/pbresource/annotations.pb.go +++ b/proto-public/pbresource/annotations.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbresource/annotations.proto diff --git a/proto-public/pbresource/resource.pb.go b/proto-public/pbresource/resource.pb.go index d5205ae1f1506..0a88a4eea444e 100644 --- a/proto-public/pbresource/resource.pb.go +++ b/proto-public/pbresource/resource.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbresource/resource.proto @@ -399,7 +399,6 @@ type Resource struct { // can treat its timestamp component as the resource's modification time. Generation string `protobuf:"bytes,4,opt,name=generation,proto3" json:"generation,omitempty"` // Metadata contains key/value pairs of arbitrary metadata about the resource. - // "deletionTimestamp" and "finalizers" keys are reserved for internal use. Metadata map[string]string `protobuf:"bytes,5,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Status is used by controllers to communicate the result of attempting to // reconcile and apply the resource (e.g. surface semantic validation errors) diff --git a/proto-public/pbresource/resource.proto b/proto-public/pbresource/resource.proto index 814e039a443ec..9e65647587b76 100644 --- a/proto-public/pbresource/resource.proto +++ b/proto-public/pbresource/resource.proto @@ -99,7 +99,6 @@ message Resource { string generation = 4; // Metadata contains key/value pairs of arbitrary metadata about the resource. - // "deletionTimestamp" and "finalizers" keys are reserved for internal use. map metadata = 5; // Status is used by controllers to communicate the result of attempting to diff --git a/proto-public/pbserverdiscovery/serverdiscovery.pb.go b/proto-public/pbserverdiscovery/serverdiscovery.pb.go index 37b3b592e7d8f..e010c26dfb9e8 100644 --- a/proto-public/pbserverdiscovery/serverdiscovery.pb.go +++ b/proto-public/pbserverdiscovery/serverdiscovery.pb.go @@ -6,7 +6,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: pbserverdiscovery/serverdiscovery.proto diff --git a/proto-public/pbtenancy/v2beta1/namespace.pb.binary.go b/proto-public/pbtenancy/v1alpha1/namespace.pb.binary.go similarity index 84% rename from proto-public/pbtenancy/v2beta1/namespace.pb.binary.go rename to proto-public/pbtenancy/v1alpha1/namespace.pb.binary.go index 1884a0943b0da..f6097062d32dc 100644 --- a/proto-public/pbtenancy/v2beta1/namespace.pb.binary.go +++ b/proto-public/pbtenancy/v1alpha1/namespace.pb.binary.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-binary. DO NOT EDIT. -// source: pbtenancy/v2beta1/namespace.proto +// source: pbtenancy/v1alpha1/namespace.proto -package tenancyv2beta1 +package tenancyv1alpha1 import ( "google.golang.org/protobuf/proto" diff --git a/proto-public/pbtenancy/v1alpha1/namespace.pb.go b/proto-public/pbtenancy/v1alpha1/namespace.pb.go new file mode 100644 index 0000000000000..4fb9e32260fe2 --- /dev/null +++ b/proto-public/pbtenancy/v1alpha1/namespace.pb.go @@ -0,0 +1,172 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.31.0 +// protoc (unknown) +// source: pbtenancy/v1alpha1/namespace.proto + +package tenancyv1alpha1 + +import ( + _ "github.com/hashicorp/consul/proto-public/pbresource" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// The name of the Namespace is in the outer Resource.ID.Name. +// It must be unique within a partition and must be a +// DNS hostname. There are also other reserved names that may not be used. +type Namespace struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Description is where the user puts any information they want + // about the namespace. It is not used internally. + Description string `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"` +} + +func (x *Namespace) Reset() { + *x = Namespace{} + if protoimpl.UnsafeEnabled { + mi := &file_pbtenancy_v1alpha1_namespace_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Namespace) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Namespace) ProtoMessage() {} + +func (x *Namespace) ProtoReflect() protoreflect.Message { + mi := &file_pbtenancy_v1alpha1_namespace_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Namespace.ProtoReflect.Descriptor instead. +func (*Namespace) Descriptor() ([]byte, []int) { + return file_pbtenancy_v1alpha1_namespace_proto_rawDescGZIP(), []int{0} +} + +func (x *Namespace) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +var File_pbtenancy_v1alpha1_namespace_proto protoreflect.FileDescriptor + +var file_pbtenancy_v1alpha1_namespace_proto_rawDesc = []byte{ + 0x0a, 0x22, 0x70, 0x62, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x63, 0x79, 0x2f, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x21, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, + 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x63, 0x79, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x1a, 0x1c, 0x70, 0x62, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x35, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x06, 0xa2, 0x93, 0x04, 0x02, 0x08, 0x02, 0x42, 0xab, 0x02, 0x0a, + 0x25, 0x63, 0x6f, 0x6d, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, + 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x63, 0x79, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x0e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f, 0x63, + 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2d, 0x70, 0x75, 0x62, 0x6c, + 0x69, 0x63, 0x2f, 0x70, 0x62, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x63, 0x79, 0x2f, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x63, 0x79, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x48, 0x43, 0x54, 0xaa, 0x02, 0x21, 0x48, 0x61, + 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x54, + 0x65, 0x6e, 0x61, 0x6e, 0x63, 0x79, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, + 0x02, 0x21, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x5c, 0x43, 0x6f, 0x6e, 0x73, + 0x75, 0x6c, 0x5c, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x63, 0x79, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0xe2, 0x02, 0x2d, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x5c, + 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x5c, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x63, 0x79, 0x5c, 0x56, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0xea, 0x02, 0x24, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x3a, + 0x3a, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x3a, 0x3a, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x63, 0x79, + 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, +} + +var ( + file_pbtenancy_v1alpha1_namespace_proto_rawDescOnce sync.Once + file_pbtenancy_v1alpha1_namespace_proto_rawDescData = file_pbtenancy_v1alpha1_namespace_proto_rawDesc +) + +func file_pbtenancy_v1alpha1_namespace_proto_rawDescGZIP() []byte { + file_pbtenancy_v1alpha1_namespace_proto_rawDescOnce.Do(func() { + file_pbtenancy_v1alpha1_namespace_proto_rawDescData = protoimpl.X.CompressGZIP(file_pbtenancy_v1alpha1_namespace_proto_rawDescData) + }) + return file_pbtenancy_v1alpha1_namespace_proto_rawDescData +} + +var file_pbtenancy_v1alpha1_namespace_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_pbtenancy_v1alpha1_namespace_proto_goTypes = []interface{}{ + (*Namespace)(nil), // 0: hashicorp.consul.tenancy.v1alpha1.Namespace +} +var file_pbtenancy_v1alpha1_namespace_proto_depIdxs = []int32{ + 0, // [0:0] is the sub-list for method output_type + 0, // [0:0] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_pbtenancy_v1alpha1_namespace_proto_init() } +func file_pbtenancy_v1alpha1_namespace_proto_init() { + if File_pbtenancy_v1alpha1_namespace_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_pbtenancy_v1alpha1_namespace_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Namespace); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_pbtenancy_v1alpha1_namespace_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_pbtenancy_v1alpha1_namespace_proto_goTypes, + DependencyIndexes: file_pbtenancy_v1alpha1_namespace_proto_depIdxs, + MessageInfos: file_pbtenancy_v1alpha1_namespace_proto_msgTypes, + }.Build() + File_pbtenancy_v1alpha1_namespace_proto = out.File + file_pbtenancy_v1alpha1_namespace_proto_rawDesc = nil + file_pbtenancy_v1alpha1_namespace_proto_goTypes = nil + file_pbtenancy_v1alpha1_namespace_proto_depIdxs = nil +} diff --git a/proto-public/pbtenancy/v2beta1/namespace.proto b/proto-public/pbtenancy/v1alpha1/namespace.proto similarity index 91% rename from proto-public/pbtenancy/v2beta1/namespace.proto rename to proto-public/pbtenancy/v1alpha1/namespace.proto index 6d4a739f6e21f..e90b10c1e573c 100644 --- a/proto-public/pbtenancy/v2beta1/namespace.proto +++ b/proto-public/pbtenancy/v1alpha1/namespace.proto @@ -1,6 +1,6 @@ syntax = "proto3"; -package hashicorp.consul.tenancy.v2beta1; +package hashicorp.consul.tenancy.v1alpha1; import "pbresource/annotations.proto"; diff --git a/proto-public/pbtenancy/v2beta1/namespace_deepcopy.gen.go b/proto-public/pbtenancy/v1alpha1/namespace_deepcopy.gen.go similarity index 97% rename from proto-public/pbtenancy/v2beta1/namespace_deepcopy.gen.go rename to proto-public/pbtenancy/v1alpha1/namespace_deepcopy.gen.go index 2384004c869f3..97af531ab3330 100644 --- a/proto-public/pbtenancy/v2beta1/namespace_deepcopy.gen.go +++ b/proto-public/pbtenancy/v1alpha1/namespace_deepcopy.gen.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-deepcopy. DO NOT EDIT. -package tenancyv2beta1 +package tenancyv1alpha1 import ( proto "google.golang.org/protobuf/proto" diff --git a/proto-public/pbtenancy/v2beta1/namespace_json.gen.go b/proto-public/pbtenancy/v1alpha1/namespace_json.gen.go similarity index 96% rename from proto-public/pbtenancy/v2beta1/namespace_json.gen.go rename to proto-public/pbtenancy/v1alpha1/namespace_json.gen.go index 4ad7901c16c3c..9df4de9df7199 100644 --- a/proto-public/pbtenancy/v2beta1/namespace_json.gen.go +++ b/proto-public/pbtenancy/v1alpha1/namespace_json.gen.go @@ -1,5 +1,5 @@ // Code generated by protoc-json-shim. DO NOT EDIT. -package tenancyv2beta1 +package tenancyv1alpha1 import ( protojson "google.golang.org/protobuf/encoding/protojson" diff --git a/proto-public/pbtenancy/v2beta1/resource_types.gen.go b/proto-public/pbtenancy/v1alpha1/resource_types.gen.go similarity index 87% rename from proto-public/pbtenancy/v2beta1/resource_types.gen.go rename to proto-public/pbtenancy/v1alpha1/resource_types.gen.go index b0c3040408234..f1b6f70cf1038 100644 --- a/proto-public/pbtenancy/v2beta1/resource_types.gen.go +++ b/proto-public/pbtenancy/v1alpha1/resource_types.gen.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-resource-types. DO NOT EDIT. -package tenancyv2beta1 +package tenancyv1alpha1 import ( "github.com/hashicorp/consul/proto-public/pbresource" @@ -8,7 +8,7 @@ import ( const ( GroupName = "tenancy" - Version = "v2beta1" + Version = "v1alpha1" NamespaceKind = "Namespace" ) diff --git a/proto-public/pbtenancy/v2beta1/namespace.pb.go b/proto-public/pbtenancy/v2beta1/namespace.pb.go deleted file mode 100644 index 2118814a68a7f..0000000000000 --- a/proto-public/pbtenancy/v2beta1/namespace.pb.go +++ /dev/null @@ -1,171 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.30.0 -// protoc (unknown) -// source: pbtenancy/v2beta1/namespace.proto - -package tenancyv2beta1 - -import ( - _ "github.com/hashicorp/consul/proto-public/pbresource" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// The name of the Namespace is in the outer Resource.ID.Name. -// It must be unique within a partition and must be a -// DNS hostname. There are also other reserved names that may not be used. -type Namespace struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Description is where the user puts any information they want - // about the namespace. It is not used internally. - Description string `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"` -} - -func (x *Namespace) Reset() { - *x = Namespace{} - if protoimpl.UnsafeEnabled { - mi := &file_pbtenancy_v2beta1_namespace_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Namespace) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Namespace) ProtoMessage() {} - -func (x *Namespace) ProtoReflect() protoreflect.Message { - mi := &file_pbtenancy_v2beta1_namespace_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Namespace.ProtoReflect.Descriptor instead. -func (*Namespace) Descriptor() ([]byte, []int) { - return file_pbtenancy_v2beta1_namespace_proto_rawDescGZIP(), []int{0} -} - -func (x *Namespace) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -var File_pbtenancy_v2beta1_namespace_proto protoreflect.FileDescriptor - -var file_pbtenancy_v2beta1_namespace_proto_rawDesc = []byte{ - 0x0a, 0x21, 0x70, 0x62, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x63, 0x79, 0x2f, 0x76, 0x32, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x12, 0x20, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, - 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x63, 0x79, 0x2e, 0x76, 0x32, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x1a, 0x1c, 0x70, 0x62, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x22, 0x35, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x3a, 0x06, 0xa2, 0x93, 0x04, 0x02, 0x08, 0x02, 0x42, 0xa4, 0x02, 0x0a, 0x24, 0x63, - 0x6f, 0x6d, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, - 0x73, 0x75, 0x6c, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x63, 0x79, 0x2e, 0x76, 0x32, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x42, 0x0e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x49, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f, 0x63, 0x6f, 0x6e, 0x73, - 0x75, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, - 0x70, 0x62, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x63, 0x79, 0x2f, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x3b, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x63, 0x79, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, - 0xa2, 0x02, 0x03, 0x48, 0x43, 0x54, 0xaa, 0x02, 0x20, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, - 0x72, 0x70, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x63, - 0x79, 0x2e, 0x56, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x20, 0x48, 0x61, 0x73, 0x68, - 0x69, 0x63, 0x6f, 0x72, 0x70, 0x5c, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x5c, 0x54, 0x65, 0x6e, - 0x61, 0x6e, 0x63, 0x79, 0x5c, 0x56, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, 0x2c, 0x48, - 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x5c, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x5c, - 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x63, 0x79, 0x5c, 0x56, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x5c, - 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x23, 0x48, 0x61, - 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x3a, 0x3a, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x3a, - 0x3a, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x63, 0x79, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_pbtenancy_v2beta1_namespace_proto_rawDescOnce sync.Once - file_pbtenancy_v2beta1_namespace_proto_rawDescData = file_pbtenancy_v2beta1_namespace_proto_rawDesc -) - -func file_pbtenancy_v2beta1_namespace_proto_rawDescGZIP() []byte { - file_pbtenancy_v2beta1_namespace_proto_rawDescOnce.Do(func() { - file_pbtenancy_v2beta1_namespace_proto_rawDescData = protoimpl.X.CompressGZIP(file_pbtenancy_v2beta1_namespace_proto_rawDescData) - }) - return file_pbtenancy_v2beta1_namespace_proto_rawDescData -} - -var file_pbtenancy_v2beta1_namespace_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_pbtenancy_v2beta1_namespace_proto_goTypes = []interface{}{ - (*Namespace)(nil), // 0: hashicorp.consul.tenancy.v2beta1.Namespace -} -var file_pbtenancy_v2beta1_namespace_proto_depIdxs = []int32{ - 0, // [0:0] is the sub-list for method output_type - 0, // [0:0] is the sub-list for method input_type - 0, // [0:0] is the sub-list for extension type_name - 0, // [0:0] is the sub-list for extension extendee - 0, // [0:0] is the sub-list for field type_name -} - -func init() { file_pbtenancy_v2beta1_namespace_proto_init() } -func file_pbtenancy_v2beta1_namespace_proto_init() { - if File_pbtenancy_v2beta1_namespace_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_pbtenancy_v2beta1_namespace_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Namespace); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_pbtenancy_v2beta1_namespace_proto_rawDesc, - NumEnums: 0, - NumMessages: 1, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_pbtenancy_v2beta1_namespace_proto_goTypes, - DependencyIndexes: file_pbtenancy_v2beta1_namespace_proto_depIdxs, - MessageInfos: file_pbtenancy_v2beta1_namespace_proto_msgTypes, - }.Build() - File_pbtenancy_v2beta1_namespace_proto = out.File - file_pbtenancy_v2beta1_namespace_proto_rawDesc = nil - file_pbtenancy_v2beta1_namespace_proto_goTypes = nil - file_pbtenancy_v2beta1_namespace_proto_depIdxs = nil -} diff --git a/proto/private/pbacl/acl.pb.go b/proto/private/pbacl/acl.pb.go index f6aa5c3418cf2..a213c24783c54 100644 --- a/proto/private/pbacl/acl.pb.go +++ b/proto/private/pbacl/acl.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: private/pbacl/acl.proto diff --git a/proto/private/pbautoconf/auto_config.pb.go b/proto/private/pbautoconf/auto_config.pb.go index a9b4c2c891682..12755fcc1c937 100644 --- a/proto/private/pbautoconf/auto_config.pb.go +++ b/proto/private/pbautoconf/auto_config.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: private/pbautoconf/auto_config.proto diff --git a/proto/private/pbcommon/common.pb.go b/proto/private/pbcommon/common.pb.go index fc6928184132d..3b25f72b134c6 100644 --- a/proto/private/pbcommon/common.pb.go +++ b/proto/private/pbcommon/common.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: private/pbcommon/common.proto diff --git a/proto/private/pbconfig/config.pb.go b/proto/private/pbconfig/config.pb.go index ce8e43c7ce912..a9f9d51167079 100644 --- a/proto/private/pbconfig/config.pb.go +++ b/proto/private/pbconfig/config.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: private/pbconfig/config.proto diff --git a/proto/private/pbconfigentry/config_entry.gen.go b/proto/private/pbconfigentry/config_entry.gen.go index 6f9b53e01db79..34c18ed548671 100644 --- a/proto/private/pbconfigentry/config_entry.gen.go +++ b/proto/private/pbconfigentry/config_entry.gen.go @@ -146,6 +146,7 @@ func BoundAPIGatewayToStructs(s *BoundAPIGateway, t *structs.BoundAPIGatewayConf } } } + t.Services = serviceRefsToStructs(s.Services) t.Meta = s.Meta } func BoundAPIGatewayFromStructs(t *structs.BoundAPIGatewayConfigEntry, s *BoundAPIGateway) { @@ -162,6 +163,7 @@ func BoundAPIGatewayFromStructs(t *structs.BoundAPIGatewayConfigEntry, s *BoundA } } } + s.Services = serviceRefFromStructs(t.Services) s.Meta = t.Meta } func BoundAPIGatewayListenerToStructs(s *BoundAPIGatewayListener, t *structs.BoundAPIGatewayListener) { diff --git a/proto/private/pbconfigentry/config_entry.go b/proto/private/pbconfigentry/config_entry.go index 8ddfde8cccfb9..00557120fe5d4 100644 --- a/proto/private/pbconfigentry/config_entry.go +++ b/proto/private/pbconfigentry/config_entry.go @@ -572,3 +572,34 @@ func httpQueryMatchToStructs(a HTTPQueryMatchType) structs.HTTPQueryMatchType { return structs.HTTPQueryMatchExact } } + +// mog: func-to=serviceRefsToStructs func-from=serviceRefFromStructs +func serviceRefsToStructs(a map[string]*ListOfResourceReference) structs.ServiceRouteReferences { + m := make(structs.ServiceRouteReferences, len(a)) + + for key, refs := range a { + serviceName := structs.ServiceNameFromString(key) + m[serviceName] = make([]structs.ResourceReference, 0, len(refs.Ref)) + for _, ref := range refs.Ref { + structsRef := structs.ResourceReference{} + ResourceReferenceToStructs(ref, &structsRef) + m[serviceName] = append(m[serviceName], structsRef) + } + } + return m +} + +func serviceRefFromStructs(a structs.ServiceRouteReferences) map[string]*ListOfResourceReference { + m := make(map[string]*ListOfResourceReference, len(a)) + + for serviceName, refs := range a { + name := serviceName.String() + m[name] = &ListOfResourceReference{Ref: make([]*ResourceReference, len(refs))} + for _, ref := range refs { + resourceRef := &ResourceReference{} + ResourceReferenceFromStructs(&ref, resourceRef) + m[name].Ref = append(m[name].Ref, resourceRef) + } + } + return m +} diff --git a/proto/private/pbconfigentry/config_entry.pb.binary.go b/proto/private/pbconfigentry/config_entry.pb.binary.go index a1b70cabcb652..6824694c3cefb 100644 --- a/proto/private/pbconfigentry/config_entry.pb.binary.go +++ b/proto/private/pbconfigentry/config_entry.pb.binary.go @@ -597,6 +597,16 @@ func (msg *BoundAPIGateway) UnmarshalBinary(b []byte) error { return proto.Unmarshal(b, msg) } +// MarshalBinary implements encoding.BinaryMarshaler +func (msg *ListOfResourceReference) MarshalBinary() ([]byte, error) { + return proto.Marshal(msg) +} + +// UnmarshalBinary implements encoding.BinaryUnmarshaler +func (msg *ListOfResourceReference) UnmarshalBinary(b []byte) error { + return proto.Unmarshal(b, msg) +} + // MarshalBinary implements encoding.BinaryMarshaler func (msg *BoundAPIGatewayListener) MarshalBinary() ([]byte, error) { return proto.Marshal(msg) diff --git a/proto/private/pbconfigentry/config_entry.pb.go b/proto/private/pbconfigentry/config_entry.pb.go index 3d68e73763895..356753296fd25 100644 --- a/proto/private/pbconfigentry/config_entry.pb.go +++ b/proto/private/pbconfigentry/config_entry.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: private/pbconfigentry/config_entry.proto @@ -5204,6 +5204,8 @@ type BoundAPIGateway struct { Meta map[string]string `protobuf:"bytes,1,rep,name=Meta,proto3" json:"Meta,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` Listeners []*BoundAPIGatewayListener `protobuf:"bytes,2,rep,name=Listeners,proto3" json:"Listeners,omitempty"` + // mog: func-to=serviceRefsToStructs func-from=serviceRefFromStructs + Services map[string]*ListOfResourceReference `protobuf:"bytes,3,rep,name=Services,proto3" json:"Services,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (x *BoundAPIGateway) Reset() { @@ -5252,6 +5254,60 @@ func (x *BoundAPIGateway) GetListeners() []*BoundAPIGatewayListener { return nil } +func (x *BoundAPIGateway) GetServices() map[string]*ListOfResourceReference { + if x != nil { + return x.Services + } + return nil +} + +type ListOfResourceReference struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Ref []*ResourceReference `protobuf:"bytes,1,rep,name=Ref,proto3" json:"Ref,omitempty"` +} + +func (x *ListOfResourceReference) Reset() { + *x = ListOfResourceReference{} + if protoimpl.UnsafeEnabled { + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[59] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListOfResourceReference) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListOfResourceReference) ProtoMessage() {} + +func (x *ListOfResourceReference) ProtoReflect() protoreflect.Message { + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[59] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListOfResourceReference.ProtoReflect.Descriptor instead. +func (*ListOfResourceReference) Descriptor() ([]byte, []int) { + return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{59} +} + +func (x *ListOfResourceReference) GetRef() []*ResourceReference { + if x != nil { + return x.Ref + } + return nil +} + // mog annotation: // // target=github.com/hashicorp/consul/agent/structs.BoundAPIGatewayListener @@ -5270,7 +5326,7 @@ type BoundAPIGatewayListener struct { func (x *BoundAPIGatewayListener) Reset() { *x = BoundAPIGatewayListener{} if protoimpl.UnsafeEnabled { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[59] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5283,7 +5339,7 @@ func (x *BoundAPIGatewayListener) String() string { func (*BoundAPIGatewayListener) ProtoMessage() {} func (x *BoundAPIGatewayListener) ProtoReflect() protoreflect.Message { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[59] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[60] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5296,7 +5352,7 @@ func (x *BoundAPIGatewayListener) ProtoReflect() protoreflect.Message { // Deprecated: Use BoundAPIGatewayListener.ProtoReflect.Descriptor instead. func (*BoundAPIGatewayListener) Descriptor() ([]byte, []int) { - return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{59} + return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{60} } func (x *BoundAPIGatewayListener) GetName() string { @@ -5339,7 +5395,7 @@ type InlineCertificate struct { func (x *InlineCertificate) Reset() { *x = InlineCertificate{} if protoimpl.UnsafeEnabled { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[60] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5352,7 +5408,7 @@ func (x *InlineCertificate) String() string { func (*InlineCertificate) ProtoMessage() {} func (x *InlineCertificate) ProtoReflect() protoreflect.Message { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[60] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[61] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5365,7 +5421,7 @@ func (x *InlineCertificate) ProtoReflect() protoreflect.Message { // Deprecated: Use InlineCertificate.ProtoReflect.Descriptor instead. func (*InlineCertificate) Descriptor() ([]byte, []int) { - return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{60} + return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{61} } func (x *InlineCertificate) GetMeta() map[string]string { @@ -5410,7 +5466,7 @@ type HTTPRoute struct { func (x *HTTPRoute) Reset() { *x = HTTPRoute{} if protoimpl.UnsafeEnabled { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[61] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5423,7 +5479,7 @@ func (x *HTTPRoute) String() string { func (*HTTPRoute) ProtoMessage() {} func (x *HTTPRoute) ProtoReflect() protoreflect.Message { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[61] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[62] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5436,7 +5492,7 @@ func (x *HTTPRoute) ProtoReflect() protoreflect.Message { // Deprecated: Use HTTPRoute.ProtoReflect.Descriptor instead. func (*HTTPRoute) Descriptor() ([]byte, []int) { - return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{61} + return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{62} } func (x *HTTPRoute) GetMeta() map[string]string { @@ -5493,7 +5549,7 @@ type HTTPRouteRule struct { func (x *HTTPRouteRule) Reset() { *x = HTTPRouteRule{} if protoimpl.UnsafeEnabled { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[62] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[63] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5506,7 +5562,7 @@ func (x *HTTPRouteRule) String() string { func (*HTTPRouteRule) ProtoMessage() {} func (x *HTTPRouteRule) ProtoReflect() protoreflect.Message { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[62] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[63] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5519,7 +5575,7 @@ func (x *HTTPRouteRule) ProtoReflect() protoreflect.Message { // Deprecated: Use HTTPRouteRule.ProtoReflect.Descriptor instead. func (*HTTPRouteRule) Descriptor() ([]byte, []int) { - return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{62} + return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{63} } func (x *HTTPRouteRule) GetFilters() *HTTPFilters { @@ -5570,7 +5626,7 @@ type HTTPMatch struct { func (x *HTTPMatch) Reset() { *x = HTTPMatch{} if protoimpl.UnsafeEnabled { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[63] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[64] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5583,7 +5639,7 @@ func (x *HTTPMatch) String() string { func (*HTTPMatch) ProtoMessage() {} func (x *HTTPMatch) ProtoReflect() protoreflect.Message { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[63] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[64] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5596,7 +5652,7 @@ func (x *HTTPMatch) ProtoReflect() protoreflect.Message { // Deprecated: Use HTTPMatch.ProtoReflect.Descriptor instead. func (*HTTPMatch) Descriptor() ([]byte, []int) { - return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{63} + return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{64} } func (x *HTTPMatch) GetHeaders() []*HTTPHeaderMatch { @@ -5646,7 +5702,7 @@ type HTTPHeaderMatch struct { func (x *HTTPHeaderMatch) Reset() { *x = HTTPHeaderMatch{} if protoimpl.UnsafeEnabled { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[64] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[65] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5659,7 +5715,7 @@ func (x *HTTPHeaderMatch) String() string { func (*HTTPHeaderMatch) ProtoMessage() {} func (x *HTTPHeaderMatch) ProtoReflect() protoreflect.Message { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[64] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[65] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5672,7 +5728,7 @@ func (x *HTTPHeaderMatch) ProtoReflect() protoreflect.Message { // Deprecated: Use HTTPHeaderMatch.ProtoReflect.Descriptor instead. func (*HTTPHeaderMatch) Descriptor() ([]byte, []int) { - return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{64} + return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{65} } func (x *HTTPHeaderMatch) GetMatch() HTTPHeaderMatchType { @@ -5714,7 +5770,7 @@ type HTTPPathMatch struct { func (x *HTTPPathMatch) Reset() { *x = HTTPPathMatch{} if protoimpl.UnsafeEnabled { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[65] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[66] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5727,7 +5783,7 @@ func (x *HTTPPathMatch) String() string { func (*HTTPPathMatch) ProtoMessage() {} func (x *HTTPPathMatch) ProtoReflect() protoreflect.Message { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[65] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[66] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5740,7 +5796,7 @@ func (x *HTTPPathMatch) ProtoReflect() protoreflect.Message { // Deprecated: Use HTTPPathMatch.ProtoReflect.Descriptor instead. func (*HTTPPathMatch) Descriptor() ([]byte, []int) { - return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{65} + return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{66} } func (x *HTTPPathMatch) GetMatch() HTTPPathMatchType { @@ -5776,7 +5832,7 @@ type HTTPQueryMatch struct { func (x *HTTPQueryMatch) Reset() { *x = HTTPQueryMatch{} if protoimpl.UnsafeEnabled { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[66] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[67] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5789,7 +5845,7 @@ func (x *HTTPQueryMatch) String() string { func (*HTTPQueryMatch) ProtoMessage() {} func (x *HTTPQueryMatch) ProtoReflect() protoreflect.Message { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[66] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[67] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5802,7 +5858,7 @@ func (x *HTTPQueryMatch) ProtoReflect() protoreflect.Message { // Deprecated: Use HTTPQueryMatch.ProtoReflect.Descriptor instead. func (*HTTPQueryMatch) Descriptor() ([]byte, []int) { - return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{66} + return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{67} } func (x *HTTPQueryMatch) GetMatch() HTTPQueryMatchType { @@ -5847,7 +5903,7 @@ type HTTPFilters struct { func (x *HTTPFilters) Reset() { *x = HTTPFilters{} if protoimpl.UnsafeEnabled { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[67] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[68] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5860,7 +5916,7 @@ func (x *HTTPFilters) String() string { func (*HTTPFilters) ProtoMessage() {} func (x *HTTPFilters) ProtoReflect() protoreflect.Message { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[67] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[68] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5873,7 +5929,7 @@ func (x *HTTPFilters) ProtoReflect() protoreflect.Message { // Deprecated: Use HTTPFilters.ProtoReflect.Descriptor instead. func (*HTTPFilters) Descriptor() ([]byte, []int) { - return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{67} + return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{68} } func (x *HTTPFilters) GetHeaders() []*HTTPHeaderFilter { @@ -5927,7 +5983,7 @@ type HTTPResponseFilters struct { func (x *HTTPResponseFilters) Reset() { *x = HTTPResponseFilters{} if protoimpl.UnsafeEnabled { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[68] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[69] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5940,7 +5996,7 @@ func (x *HTTPResponseFilters) String() string { func (*HTTPResponseFilters) ProtoMessage() {} func (x *HTTPResponseFilters) ProtoReflect() protoreflect.Message { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[68] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[69] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5953,7 +6009,7 @@ func (x *HTTPResponseFilters) ProtoReflect() protoreflect.Message { // Deprecated: Use HTTPResponseFilters.ProtoReflect.Descriptor instead. func (*HTTPResponseFilters) Descriptor() ([]byte, []int) { - return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{68} + return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{69} } func (x *HTTPResponseFilters) GetHeaders() []*HTTPHeaderFilter { @@ -5979,7 +6035,7 @@ type URLRewrite struct { func (x *URLRewrite) Reset() { *x = URLRewrite{} if protoimpl.UnsafeEnabled { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[69] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[70] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5992,7 +6048,7 @@ func (x *URLRewrite) String() string { func (*URLRewrite) ProtoMessage() {} func (x *URLRewrite) ProtoReflect() protoreflect.Message { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[69] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[70] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6005,7 +6061,7 @@ func (x *URLRewrite) ProtoReflect() protoreflect.Message { // Deprecated: Use URLRewrite.ProtoReflect.Descriptor instead. func (*URLRewrite) Descriptor() ([]byte, []int) { - return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{69} + return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{70} } func (x *URLRewrite) GetPath() string { @@ -6034,7 +6090,7 @@ type RetryFilter struct { func (x *RetryFilter) Reset() { *x = RetryFilter{} if protoimpl.UnsafeEnabled { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[70] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[71] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6047,7 +6103,7 @@ func (x *RetryFilter) String() string { func (*RetryFilter) ProtoMessage() {} func (x *RetryFilter) ProtoReflect() protoreflect.Message { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[70] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[71] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6060,7 +6116,7 @@ func (x *RetryFilter) ProtoReflect() protoreflect.Message { // Deprecated: Use RetryFilter.ProtoReflect.Descriptor instead. func (*RetryFilter) Descriptor() ([]byte, []int) { - return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{70} + return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{71} } func (x *RetryFilter) GetNumRetries() uint32 { @@ -6110,7 +6166,7 @@ type TimeoutFilter struct { func (x *TimeoutFilter) Reset() { *x = TimeoutFilter{} if protoimpl.UnsafeEnabled { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[71] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[72] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6123,7 +6179,7 @@ func (x *TimeoutFilter) String() string { func (*TimeoutFilter) ProtoMessage() {} func (x *TimeoutFilter) ProtoReflect() protoreflect.Message { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[71] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[72] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6136,7 +6192,7 @@ func (x *TimeoutFilter) ProtoReflect() protoreflect.Message { // Deprecated: Use TimeoutFilter.ProtoReflect.Descriptor instead. func (*TimeoutFilter) Descriptor() ([]byte, []int) { - return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{71} + return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{72} } func (x *TimeoutFilter) GetRequestTimeout() *durationpb.Duration { @@ -6164,7 +6220,7 @@ type JWTFilter struct { func (x *JWTFilter) Reset() { *x = JWTFilter{} if protoimpl.UnsafeEnabled { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[72] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[73] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6177,7 +6233,7 @@ func (x *JWTFilter) String() string { func (*JWTFilter) ProtoMessage() {} func (x *JWTFilter) ProtoReflect() protoreflect.Message { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[72] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[73] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6190,7 +6246,7 @@ func (x *JWTFilter) ProtoReflect() protoreflect.Message { // Deprecated: Use JWTFilter.ProtoReflect.Descriptor instead. func (*JWTFilter) Descriptor() ([]byte, []int) { - return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{72} + return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{73} } func (x *JWTFilter) GetProviders() []*APIGatewayJWTProvider { @@ -6218,7 +6274,7 @@ type HTTPHeaderFilter struct { func (x *HTTPHeaderFilter) Reset() { *x = HTTPHeaderFilter{} if protoimpl.UnsafeEnabled { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[73] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[74] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6231,7 +6287,7 @@ func (x *HTTPHeaderFilter) String() string { func (*HTTPHeaderFilter) ProtoMessage() {} func (x *HTTPHeaderFilter) ProtoReflect() protoreflect.Message { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[73] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[74] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6244,7 +6300,7 @@ func (x *HTTPHeaderFilter) ProtoReflect() protoreflect.Message { // Deprecated: Use HTTPHeaderFilter.ProtoReflect.Descriptor instead. func (*HTTPHeaderFilter) Descriptor() ([]byte, []int) { - return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{73} + return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{74} } func (x *HTTPHeaderFilter) GetAdd() map[string]string { @@ -6290,7 +6346,7 @@ type HTTPService struct { func (x *HTTPService) Reset() { *x = HTTPService{} if protoimpl.UnsafeEnabled { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[74] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[75] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6303,7 +6359,7 @@ func (x *HTTPService) String() string { func (*HTTPService) ProtoMessage() {} func (x *HTTPService) ProtoReflect() protoreflect.Message { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[74] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[75] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6316,7 +6372,7 @@ func (x *HTTPService) ProtoReflect() protoreflect.Message { // Deprecated: Use HTTPService.ProtoReflect.Descriptor instead. func (*HTTPService) Descriptor() ([]byte, []int) { - return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{74} + return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{75} } func (x *HTTPService) GetName() string { @@ -6374,7 +6430,7 @@ type TCPRoute struct { func (x *TCPRoute) Reset() { *x = TCPRoute{} if protoimpl.UnsafeEnabled { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[75] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[76] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6387,7 +6443,7 @@ func (x *TCPRoute) String() string { func (*TCPRoute) ProtoMessage() {} func (x *TCPRoute) ProtoReflect() protoreflect.Message { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[75] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[76] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6400,7 +6456,7 @@ func (x *TCPRoute) ProtoReflect() protoreflect.Message { // Deprecated: Use TCPRoute.ProtoReflect.Descriptor instead. func (*TCPRoute) Descriptor() ([]byte, []int) { - return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{75} + return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{76} } func (x *TCPRoute) GetMeta() map[string]string { @@ -6449,7 +6505,7 @@ type TCPService struct { func (x *TCPService) Reset() { *x = TCPService{} if protoimpl.UnsafeEnabled { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[76] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[77] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6462,7 +6518,7 @@ func (x *TCPService) String() string { func (*TCPService) ProtoMessage() {} func (x *TCPService) ProtoReflect() protoreflect.Message { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[76] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[77] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6475,7 +6531,7 @@ func (x *TCPService) ProtoReflect() protoreflect.Message { // Deprecated: Use TCPService.ProtoReflect.Descriptor instead. func (*TCPService) Descriptor() ([]byte, []int) { - return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{76} + return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{77} } func (x *TCPService) GetName() string { @@ -6515,7 +6571,7 @@ type SamenessGroup struct { func (x *SamenessGroup) Reset() { *x = SamenessGroup{} if protoimpl.UnsafeEnabled { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[77] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[78] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6528,7 +6584,7 @@ func (x *SamenessGroup) String() string { func (*SamenessGroup) ProtoMessage() {} func (x *SamenessGroup) ProtoReflect() protoreflect.Message { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[77] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[78] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6541,7 +6597,7 @@ func (x *SamenessGroup) ProtoReflect() protoreflect.Message { // Deprecated: Use SamenessGroup.ProtoReflect.Descriptor instead. func (*SamenessGroup) Descriptor() ([]byte, []int) { - return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{77} + return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{78} } func (x *SamenessGroup) GetName() string { @@ -6603,7 +6659,7 @@ type SamenessGroupMember struct { func (x *SamenessGroupMember) Reset() { *x = SamenessGroupMember{} if protoimpl.UnsafeEnabled { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[78] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[79] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6616,7 +6672,7 @@ func (x *SamenessGroupMember) String() string { func (*SamenessGroupMember) ProtoMessage() {} func (x *SamenessGroupMember) ProtoReflect() protoreflect.Message { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[78] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[79] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6629,7 +6685,7 @@ func (x *SamenessGroupMember) ProtoReflect() protoreflect.Message { // Deprecated: Use SamenessGroupMember.ProtoReflect.Descriptor instead. func (*SamenessGroupMember) Descriptor() ([]byte, []int) { - return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{78} + return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{79} } func (x *SamenessGroupMember) GetPartition() string { @@ -6671,7 +6727,7 @@ type JWTProvider struct { func (x *JWTProvider) Reset() { *x = JWTProvider{} if protoimpl.UnsafeEnabled { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[79] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[80] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6684,7 +6740,7 @@ func (x *JWTProvider) String() string { func (*JWTProvider) ProtoMessage() {} func (x *JWTProvider) ProtoReflect() protoreflect.Message { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[79] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[80] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6697,7 +6753,7 @@ func (x *JWTProvider) ProtoReflect() protoreflect.Message { // Deprecated: Use JWTProvider.ProtoReflect.Descriptor instead. func (*JWTProvider) Descriptor() ([]byte, []int) { - return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{79} + return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{80} } func (x *JWTProvider) GetJSONWebKeySet() *JSONWebKeySet { @@ -6773,7 +6829,7 @@ type JSONWebKeySet struct { func (x *JSONWebKeySet) Reset() { *x = JSONWebKeySet{} if protoimpl.UnsafeEnabled { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[80] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[81] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6786,7 +6842,7 @@ func (x *JSONWebKeySet) String() string { func (*JSONWebKeySet) ProtoMessage() {} func (x *JSONWebKeySet) ProtoReflect() protoreflect.Message { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[80] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[81] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6799,7 +6855,7 @@ func (x *JSONWebKeySet) ProtoReflect() protoreflect.Message { // Deprecated: Use JSONWebKeySet.ProtoReflect.Descriptor instead. func (*JSONWebKeySet) Descriptor() ([]byte, []int) { - return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{80} + return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{81} } func (x *JSONWebKeySet) GetLocal() *LocalJWKS { @@ -6833,7 +6889,7 @@ type LocalJWKS struct { func (x *LocalJWKS) Reset() { *x = LocalJWKS{} if protoimpl.UnsafeEnabled { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[81] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[82] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6846,7 +6902,7 @@ func (x *LocalJWKS) String() string { func (*LocalJWKS) ProtoMessage() {} func (x *LocalJWKS) ProtoReflect() protoreflect.Message { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[81] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[82] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6859,7 +6915,7 @@ func (x *LocalJWKS) ProtoReflect() protoreflect.Message { // Deprecated: Use LocalJWKS.ProtoReflect.Descriptor instead. func (*LocalJWKS) Descriptor() ([]byte, []int) { - return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{81} + return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{82} } func (x *LocalJWKS) GetJWKS() string { @@ -6899,7 +6955,7 @@ type RemoteJWKS struct { func (x *RemoteJWKS) Reset() { *x = RemoteJWKS{} if protoimpl.UnsafeEnabled { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[82] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[83] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6912,7 +6968,7 @@ func (x *RemoteJWKS) String() string { func (*RemoteJWKS) ProtoMessage() {} func (x *RemoteJWKS) ProtoReflect() protoreflect.Message { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[82] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[83] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6925,7 +6981,7 @@ func (x *RemoteJWKS) ProtoReflect() protoreflect.Message { // Deprecated: Use RemoteJWKS.ProtoReflect.Descriptor instead. func (*RemoteJWKS) Descriptor() ([]byte, []int) { - return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{82} + return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{83} } func (x *RemoteJWKS) GetURI() string { @@ -6989,7 +7045,7 @@ type JWKSCluster struct { func (x *JWKSCluster) Reset() { *x = JWKSCluster{} if protoimpl.UnsafeEnabled { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[83] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[84] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7002,7 +7058,7 @@ func (x *JWKSCluster) String() string { func (*JWKSCluster) ProtoMessage() {} func (x *JWKSCluster) ProtoReflect() protoreflect.Message { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[83] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[84] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7015,7 +7071,7 @@ func (x *JWKSCluster) ProtoReflect() protoreflect.Message { // Deprecated: Use JWKSCluster.ProtoReflect.Descriptor instead. func (*JWKSCluster) Descriptor() ([]byte, []int) { - return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{83} + return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{84} } func (x *JWKSCluster) GetDiscoveryType() string { @@ -7056,7 +7112,7 @@ type JWKSTLSCertificate struct { func (x *JWKSTLSCertificate) Reset() { *x = JWKSTLSCertificate{} if protoimpl.UnsafeEnabled { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[84] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[85] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7069,7 +7125,7 @@ func (x *JWKSTLSCertificate) String() string { func (*JWKSTLSCertificate) ProtoMessage() {} func (x *JWKSTLSCertificate) ProtoReflect() protoreflect.Message { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[84] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[85] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7082,7 +7138,7 @@ func (x *JWKSTLSCertificate) ProtoReflect() protoreflect.Message { // Deprecated: Use JWKSTLSCertificate.ProtoReflect.Descriptor instead. func (*JWKSTLSCertificate) Descriptor() ([]byte, []int) { - return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{84} + return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{85} } func (x *JWKSTLSCertificate) GetCaCertificateProviderInstance() *JWKSTLSCertProviderInstance { @@ -7116,7 +7172,7 @@ type JWKSTLSCertProviderInstance struct { func (x *JWKSTLSCertProviderInstance) Reset() { *x = JWKSTLSCertProviderInstance{} if protoimpl.UnsafeEnabled { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[85] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[86] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7129,7 +7185,7 @@ func (x *JWKSTLSCertProviderInstance) String() string { func (*JWKSTLSCertProviderInstance) ProtoMessage() {} func (x *JWKSTLSCertProviderInstance) ProtoReflect() protoreflect.Message { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[85] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[86] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7142,7 +7198,7 @@ func (x *JWKSTLSCertProviderInstance) ProtoReflect() protoreflect.Message { // Deprecated: Use JWKSTLSCertProviderInstance.ProtoReflect.Descriptor instead. func (*JWKSTLSCertProviderInstance) Descriptor() ([]byte, []int) { - return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{85} + return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{86} } func (x *JWKSTLSCertProviderInstance) GetInstanceName() string { @@ -7178,7 +7234,7 @@ type JWKSTLSCertTrustedCA struct { func (x *JWKSTLSCertTrustedCA) Reset() { *x = JWKSTLSCertTrustedCA{} if protoimpl.UnsafeEnabled { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[86] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[87] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7191,7 +7247,7 @@ func (x *JWKSTLSCertTrustedCA) String() string { func (*JWKSTLSCertTrustedCA) ProtoMessage() {} func (x *JWKSTLSCertTrustedCA) ProtoReflect() protoreflect.Message { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[86] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[87] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7204,7 +7260,7 @@ func (x *JWKSTLSCertTrustedCA) ProtoReflect() protoreflect.Message { // Deprecated: Use JWKSTLSCertTrustedCA.ProtoReflect.Descriptor instead. func (*JWKSTLSCertTrustedCA) Descriptor() ([]byte, []int) { - return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{86} + return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{87} } func (x *JWKSTLSCertTrustedCA) GetFilename() string { @@ -7253,7 +7309,7 @@ type JWKSRetryPolicy struct { func (x *JWKSRetryPolicy) Reset() { *x = JWKSRetryPolicy{} if protoimpl.UnsafeEnabled { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[87] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[88] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7266,7 +7322,7 @@ func (x *JWKSRetryPolicy) String() string { func (*JWKSRetryPolicy) ProtoMessage() {} func (x *JWKSRetryPolicy) ProtoReflect() protoreflect.Message { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[87] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[88] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7279,7 +7335,7 @@ func (x *JWKSRetryPolicy) ProtoReflect() protoreflect.Message { // Deprecated: Use JWKSRetryPolicy.ProtoReflect.Descriptor instead. func (*JWKSRetryPolicy) Descriptor() ([]byte, []int) { - return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{87} + return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{88} } func (x *JWKSRetryPolicy) GetNumRetries() int32 { @@ -7315,7 +7371,7 @@ type RetryPolicyBackOff struct { func (x *RetryPolicyBackOff) Reset() { *x = RetryPolicyBackOff{} if protoimpl.UnsafeEnabled { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[88] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[89] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7328,7 +7384,7 @@ func (x *RetryPolicyBackOff) String() string { func (*RetryPolicyBackOff) ProtoMessage() {} func (x *RetryPolicyBackOff) ProtoReflect() protoreflect.Message { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[88] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[89] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7341,7 +7397,7 @@ func (x *RetryPolicyBackOff) ProtoReflect() protoreflect.Message { // Deprecated: Use RetryPolicyBackOff.ProtoReflect.Descriptor instead. func (*RetryPolicyBackOff) Descriptor() ([]byte, []int) { - return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{88} + return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{89} } func (x *RetryPolicyBackOff) GetBaseInterval() *durationpb.Duration { @@ -7376,7 +7432,7 @@ type JWTLocation struct { func (x *JWTLocation) Reset() { *x = JWTLocation{} if protoimpl.UnsafeEnabled { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[89] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[90] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7389,7 +7445,7 @@ func (x *JWTLocation) String() string { func (*JWTLocation) ProtoMessage() {} func (x *JWTLocation) ProtoReflect() protoreflect.Message { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[89] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[90] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7402,7 +7458,7 @@ func (x *JWTLocation) ProtoReflect() protoreflect.Message { // Deprecated: Use JWTLocation.ProtoReflect.Descriptor instead. func (*JWTLocation) Descriptor() ([]byte, []int) { - return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{89} + return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{90} } func (x *JWTLocation) GetHeader() *JWTLocationHeader { @@ -7444,7 +7500,7 @@ type JWTLocationHeader struct { func (x *JWTLocationHeader) Reset() { *x = JWTLocationHeader{} if protoimpl.UnsafeEnabled { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[90] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[91] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7457,7 +7513,7 @@ func (x *JWTLocationHeader) String() string { func (*JWTLocationHeader) ProtoMessage() {} func (x *JWTLocationHeader) ProtoReflect() protoreflect.Message { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[90] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[91] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7470,7 +7526,7 @@ func (x *JWTLocationHeader) ProtoReflect() protoreflect.Message { // Deprecated: Use JWTLocationHeader.ProtoReflect.Descriptor instead. func (*JWTLocationHeader) Descriptor() ([]byte, []int) { - return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{90} + return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{91} } func (x *JWTLocationHeader) GetName() string { @@ -7510,7 +7566,7 @@ type JWTLocationQueryParam struct { func (x *JWTLocationQueryParam) Reset() { *x = JWTLocationQueryParam{} if protoimpl.UnsafeEnabled { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[91] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[92] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7523,7 +7579,7 @@ func (x *JWTLocationQueryParam) String() string { func (*JWTLocationQueryParam) ProtoMessage() {} func (x *JWTLocationQueryParam) ProtoReflect() protoreflect.Message { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[91] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[92] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7536,7 +7592,7 @@ func (x *JWTLocationQueryParam) ProtoReflect() protoreflect.Message { // Deprecated: Use JWTLocationQueryParam.ProtoReflect.Descriptor instead. func (*JWTLocationQueryParam) Descriptor() ([]byte, []int) { - return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{91} + return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{92} } func (x *JWTLocationQueryParam) GetName() string { @@ -7562,7 +7618,7 @@ type JWTLocationCookie struct { func (x *JWTLocationCookie) Reset() { *x = JWTLocationCookie{} if protoimpl.UnsafeEnabled { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[92] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[93] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7575,7 +7631,7 @@ func (x *JWTLocationCookie) String() string { func (*JWTLocationCookie) ProtoMessage() {} func (x *JWTLocationCookie) ProtoReflect() protoreflect.Message { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[92] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[93] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7588,7 +7644,7 @@ func (x *JWTLocationCookie) ProtoReflect() protoreflect.Message { // Deprecated: Use JWTLocationCookie.ProtoReflect.Descriptor instead. func (*JWTLocationCookie) Descriptor() ([]byte, []int) { - return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{92} + return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{93} } func (x *JWTLocationCookie) GetName() string { @@ -7615,7 +7671,7 @@ type JWTForwardingConfig struct { func (x *JWTForwardingConfig) Reset() { *x = JWTForwardingConfig{} if protoimpl.UnsafeEnabled { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[93] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[94] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7628,7 +7684,7 @@ func (x *JWTForwardingConfig) String() string { func (*JWTForwardingConfig) ProtoMessage() {} func (x *JWTForwardingConfig) ProtoReflect() protoreflect.Message { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[93] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[94] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7641,7 +7697,7 @@ func (x *JWTForwardingConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use JWTForwardingConfig.ProtoReflect.Descriptor instead. func (*JWTForwardingConfig) Descriptor() ([]byte, []int) { - return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{93} + return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{94} } func (x *JWTForwardingConfig) GetHeaderName() string { @@ -7675,7 +7731,7 @@ type JWTCacheConfig struct { func (x *JWTCacheConfig) Reset() { *x = JWTCacheConfig{} if protoimpl.UnsafeEnabled { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[94] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[95] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7688,7 +7744,7 @@ func (x *JWTCacheConfig) String() string { func (*JWTCacheConfig) ProtoMessage() {} func (x *JWTCacheConfig) ProtoReflect() protoreflect.Message { - mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[94] + mi := &file_private_pbconfigentry_config_entry_proto_msgTypes[95] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7701,7 +7757,7 @@ func (x *JWTCacheConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use JWTCacheConfig.ProtoReflect.Descriptor instead. func (*JWTCacheConfig) Descriptor() ([]byte, []int) { - return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{94} + return file_private_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{95} } func (x *JWTCacheConfig) GetSize() int32 { @@ -8718,7 +8774,7 @@ var file_private_pbconfigentry_config_entry_proto_rawDesc = []byte{ 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x0e, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, - 0x69, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x22, 0xfe, 0x01, 0x0a, 0x0f, 0x42, 0x6f, 0x75, 0x6e, + 0x69, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x22, 0xdd, 0x03, 0x0a, 0x0f, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x41, 0x50, 0x49, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x54, 0x0a, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, @@ -8730,588 +8786,609 @@ var file_private_pbconfigentry_config_entry_proto_rawDesc = []byte{ 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x41, 0x50, 0x49, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4c, 0x69, 0x73, 0x74, - 0x65, 0x6e, 0x65, 0x72, 0x52, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x73, 0x1a, - 0x37, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xdd, 0x01, 0x0a, 0x17, 0x42, 0x6f, 0x75, - 0x6e, 0x64, 0x41, 0x50, 0x49, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4c, 0x69, 0x73, 0x74, - 0x65, 0x6e, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x5c, 0x0a, 0x0c, 0x43, 0x65, 0x72, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, - 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, - 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, - 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0c, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x12, 0x50, 0x0a, 0x06, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, + 0x65, 0x6e, 0x65, 0x72, 0x52, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x73, 0x12, + 0x60, 0x0a, 0x08, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x44, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, + 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x41, + 0x50, 0x49, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x73, 0x1a, 0x37, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x7b, 0x0a, 0x0d, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x54, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x68, + 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, + 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x66, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x65, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x4f, + 0x66, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x12, 0x4a, 0x0a, 0x03, 0x52, 0x65, 0x66, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x38, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, + 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x03, 0x52, 0x65, 0x66, 0x22, 0xdd, + 0x01, 0x0a, 0x17, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x41, 0x50, 0x49, 0x47, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x5c, + 0x0a, 0x0c, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, + 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0c, + 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x12, 0x50, 0x0a, 0x06, + 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x68, + 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, + 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, + 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x22, 0xe6, + 0x01, 0x0a, 0x11, 0x49, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x65, 0x12, 0x56, 0x0a, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, + 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6e, 0x6c, 0x69, 0x6e, + 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x2e, 0x4d, 0x65, 0x74, + 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x20, 0x0a, 0x0b, + 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x1e, + 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0a, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x1a, 0x37, + 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x99, 0x03, 0x0a, 0x09, 0x48, 0x54, 0x54, 0x50, + 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x4e, 0x0a, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, + 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x48, 0x54, 0x54, 0x50, + 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x04, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x52, 0x0a, 0x07, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x52, 0x06, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x22, 0xe6, 0x01, 0x0a, 0x11, 0x49, 0x6e, 0x6c, - 0x69, 0x6e, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x56, - 0x0a, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x68, + 0x52, 0x07, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x4a, 0x0a, 0x05, 0x52, 0x75, 0x6c, + 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, + 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, + 0x2e, 0x48, 0x54, 0x54, 0x50, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x05, + 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, + 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, + 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x52, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1a, 0x37, 0x0a, 0x09, 0x4d, 0x65, + 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x22, 0xdf, 0x02, 0x0a, 0x0d, 0x48, 0x54, 0x54, 0x50, 0x52, 0x6f, 0x75, 0x74, + 0x65, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x4c, 0x0a, 0x07, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, + 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x48, + 0x54, 0x54, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x07, 0x46, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x73, 0x12, 0x4a, 0x0a, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, + 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x48, 0x54, 0x54, + 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x12, + 0x4e, 0x0a, 0x08, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x32, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, + 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x08, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, + 0x64, 0x0a, 0x0f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, + 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, + 0x2e, 0x48, 0x54, 0x54, 0x50, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x46, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x73, 0x52, 0x0f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x46, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x73, 0x22, 0xc4, 0x02, 0x0a, 0x09, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, + 0x74, 0x63, 0x68, 0x12, 0x50, 0x0a, 0x07, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, + 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x48, 0x54, 0x54, + 0x50, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x07, 0x48, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x4e, 0x0a, 0x06, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x36, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, + 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x48, 0x54, + 0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x52, 0x06, 0x4d, + 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x48, 0x0a, 0x04, 0x50, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, + 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x48, 0x54, 0x54, 0x50, + 0x50, 0x61, 0x74, 0x68, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x04, 0x50, 0x61, 0x74, 0x68, 0x12, + 0x4b, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, + 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, + 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x22, 0x8d, 0x01, 0x0a, + 0x0f, 0x48, 0x54, 0x54, 0x50, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x12, 0x50, 0x0a, 0x05, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x3a, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, + 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x48, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x4d, 0x61, 0x74, + 0x63, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x75, 0x0a, 0x0d, + 0x48, 0x54, 0x54, 0x50, 0x50, 0x61, 0x74, 0x68, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x4e, 0x0a, + 0x05, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x38, 0x2e, 0x68, + 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, + 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x50, 0x61, 0x74, 0x68, 0x4d, 0x61, 0x74, + 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x14, 0x0a, + 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x22, 0x8b, 0x01, 0x0a, 0x0e, 0x48, 0x54, 0x54, 0x50, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x4f, 0x0a, 0x05, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x39, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, + 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x48, 0x54, + 0x54, 0x50, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, + 0x52, 0x05, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x22, 0xa9, 0x03, 0x0a, 0x0b, 0x48, 0x54, 0x54, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x73, 0x12, 0x51, 0x0a, 0x07, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, + 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x48, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x07, 0x48, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x73, 0x12, 0x51, 0x0a, 0x0a, 0x55, 0x52, 0x4c, 0x52, 0x65, 0x77, 0x72, 0x69, + 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, + 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, + 0x2e, 0x55, 0x52, 0x4c, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x0a, 0x55, 0x52, 0x4c, + 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x54, 0x0a, 0x0b, 0x52, 0x65, 0x74, 0x72, 0x79, + 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, - 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x43, 0x65, 0x72, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x76, - 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x50, 0x72, - 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x1a, 0x37, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x61, + 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x52, 0x0b, 0x52, 0x65, 0x74, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x5a, 0x0a, + 0x0d, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, + 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x6f, 0x75, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x0d, 0x54, 0x69, 0x6d, 0x65, + 0x6f, 0x75, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x42, 0x0a, 0x03, 0x4a, 0x57, 0x54, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, + 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x4a, + 0x57, 0x54, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x03, 0x4a, 0x57, 0x54, 0x22, 0x68, 0x0a, + 0x13, 0x48, 0x54, 0x54, 0x50, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x46, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x73, 0x12, 0x51, 0x0a, 0x07, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, + 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x48, 0x54, + 0x54, 0x50, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x07, + 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x22, 0x20, 0x0a, 0x0a, 0x55, 0x52, 0x4c, 0x52, 0x65, + 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x50, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x50, 0x61, 0x74, 0x68, 0x22, 0xad, 0x01, 0x0a, 0x0b, 0x52, 0x65, + 0x74, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x4e, 0x75, 0x6d, + 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x4e, + 0x75, 0x6d, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x52, 0x65, 0x74, + 0x72, 0x79, 0x4f, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x52, 0x65, 0x74, 0x72, + 0x79, 0x4f, 0x6e, 0x12, 0x2e, 0x0a, 0x12, 0x52, 0x65, 0x74, 0x72, 0x79, 0x4f, 0x6e, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x52, + 0x12, 0x52, 0x65, 0x74, 0x72, 0x79, 0x4f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, + 0x64, 0x65, 0x73, 0x12, 0x34, 0x0a, 0x15, 0x52, 0x65, 0x74, 0x72, 0x79, 0x4f, 0x6e, 0x43, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x15, 0x52, 0x65, 0x74, 0x72, 0x79, 0x4f, 0x6e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x22, 0x8f, 0x01, 0x0a, 0x0d, 0x54, 0x69, + 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x41, 0x0a, 0x0e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x3b, + 0x0a, 0x0b, 0x49, 0x64, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, + 0x49, 0x64, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x22, 0x67, 0x0a, 0x09, 0x4a, + 0x57, 0x54, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x5a, 0x0a, 0x09, 0x50, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x68, 0x61, + 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, + 0x74, 0x72, 0x79, 0x2e, 0x41, 0x50, 0x49, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4a, 0x57, + 0x54, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x09, 0x50, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x73, 0x22, 0xc2, 0x02, 0x0a, 0x10, 0x48, 0x54, 0x54, 0x50, 0x48, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x52, 0x0a, 0x03, 0x41, 0x64, 0x64, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, + 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x48, + 0x54, 0x54, 0x50, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, + 0x41, 0x64, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x03, 0x41, 0x64, 0x64, 0x12, 0x16, 0x0a, + 0x06, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x52, + 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12, 0x52, 0x0a, 0x03, 0x53, 0x65, 0x74, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, + 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x48, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x74, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x03, 0x53, 0x65, 0x74, 0x1a, 0x36, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x22, 0x99, 0x03, 0x0a, 0x09, 0x48, 0x54, 0x54, 0x50, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, - 0x4e, 0x0a, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, - 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, + 0x01, 0x1a, 0x36, 0x0a, 0x08, 0x53, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xc7, 0x02, 0x0a, 0x0b, 0x48, 0x54, + 0x54, 0x50, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, + 0x06, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x57, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x4c, 0x0a, 0x07, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, + 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x48, + 0x54, 0x54, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x07, 0x46, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x73, 0x12, 0x58, 0x0a, 0x0e, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, + 0x65, 0x4d, 0x65, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x68, 0x61, + 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x45, + 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x0e, 0x45, + 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x64, 0x0a, + 0x0f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, + 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x48, + 0x54, 0x54, 0x50, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x73, 0x52, 0x0f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x46, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x73, 0x22, 0xfc, 0x02, 0x0a, 0x08, 0x54, 0x43, 0x50, 0x52, 0x6f, 0x75, 0x74, 0x65, + 0x12, 0x4d, 0x0a, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, + 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, + 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x43, 0x50, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x52, 0x0a, 0x07, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x50, 0x61, 0x72, 0x65, - 0x6e, 0x74, 0x73, 0x12, 0x4a, 0x0a, 0x05, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, - 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x52, - 0x6f, 0x75, 0x74, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x05, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, - 0x1c, 0x0a, 0x09, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x09, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x45, 0x0a, - 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, - 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x1a, 0x37, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xdf, 0x02, - 0x0a, 0x0d, 0x48, 0x54, 0x54, 0x50, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x12, - 0x4c, 0x0a, 0x07, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x32, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, - 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x46, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x73, 0x52, 0x07, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, 0x4a, 0x0a, - 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, - 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, - 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, - 0x52, 0x07, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x12, 0x4e, 0x0a, 0x08, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x68, 0x61, - 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, - 0x74, 0x72, 0x79, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, - 0x08, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x64, 0x0a, 0x0f, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, + 0x6e, 0x74, 0x73, 0x12, 0x4d, 0x0a, 0x08, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, + 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x43, + 0x50, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x08, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x73, 0x12, 0x45, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x0f, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x22, - 0xc4, 0x02, 0x0a, 0x09, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x50, 0x0a, - 0x07, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, - 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, - 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x48, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x07, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, - 0x4e, 0x0a, 0x06, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x36, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, - 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, - 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x52, 0x06, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, - 0x48, 0x0a, 0x04, 0x50, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, - 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x50, 0x61, 0x74, 0x68, 0x4d, 0x61, - 0x74, 0x63, 0x68, 0x52, 0x04, 0x50, 0x61, 0x74, 0x68, 0x12, 0x4b, 0x0a, 0x05, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, - 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, - 0x2e, 0x48, 0x54, 0x54, 0x50, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, - 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x22, 0x8d, 0x01, 0x0a, 0x0f, 0x48, 0x54, 0x54, 0x50, 0x48, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x50, 0x0a, 0x05, 0x4d, 0x61, - 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3a, 0x2e, 0x68, 0x61, 0x73, 0x68, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x52, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1a, 0x37, 0x0a, 0x09, 0x4d, 0x65, 0x74, + 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x22, 0x7a, 0x0a, 0x0a, 0x54, 0x43, 0x50, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x58, 0x0a, 0x0e, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, + 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x68, + 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x45, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x0e, + 0x45, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x22, 0xb4, + 0x03, 0x0a, 0x0d, 0x53, 0x61, 0x6d, 0x65, 0x6e, 0x65, 0x73, 0x73, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x46, + 0x6f, 0x72, 0x46, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x12, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x46, 0x6f, 0x72, 0x46, 0x61, 0x69, 0x6c, + 0x6f, 0x76, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x0c, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4c, + 0x6f, 0x63, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x49, 0x6e, 0x63, 0x6c, + 0x75, 0x64, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x12, 0x54, 0x0a, 0x07, 0x4d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, - 0x79, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, - 0x68, 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x12, 0x0a, 0x04, - 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x14, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x75, 0x0a, 0x0d, 0x48, 0x54, 0x54, 0x50, 0x50, 0x61, - 0x74, 0x68, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x4e, 0x0a, 0x05, 0x4d, 0x61, 0x74, 0x63, 0x68, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x38, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, - 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x48, - 0x54, 0x54, 0x50, 0x50, 0x61, 0x74, 0x68, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, - 0x52, 0x05, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x8b, 0x01, - 0x0a, 0x0e, 0x48, 0x54, 0x54, 0x50, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, - 0x12, 0x4f, 0x0a, 0x05, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x39, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, - 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x4d, 0x61, 0x74, 0x63, - 0x68, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xa9, 0x03, 0x0a, 0x0b, - 0x48, 0x54, 0x54, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, 0x51, 0x0a, 0x07, 0x48, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x68, + 0x79, 0x2e, 0x53, 0x61, 0x6d, 0x65, 0x6e, 0x65, 0x73, 0x73, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x07, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x52, + 0x0a, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, - 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x46, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x07, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x51, - 0x0a, 0x0a, 0x55, 0x52, 0x4c, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, - 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x55, 0x52, 0x4c, 0x52, 0x65, - 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x0a, 0x55, 0x52, 0x4c, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, - 0x65, 0x12, 0x54, 0x0a, 0x0b, 0x52, 0x65, 0x74, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, - 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x52, - 0x65, 0x74, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x0b, 0x52, 0x65, 0x74, 0x72, - 0x79, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x5a, 0x0a, 0x0d, 0x54, 0x69, 0x6d, 0x65, 0x6f, - 0x75, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, - 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, - 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x46, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x52, 0x0d, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x46, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x12, 0x42, 0x0a, 0x03, 0x4a, 0x57, 0x54, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x30, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, - 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x4a, 0x57, 0x54, 0x46, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x52, 0x03, 0x4a, 0x57, 0x54, 0x22, 0x68, 0x0a, 0x13, 0x48, 0x54, 0x54, 0x50, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, 0x51, - 0x0a, 0x07, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x37, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, - 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x48, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x07, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x73, 0x22, 0x20, 0x0a, 0x0a, 0x55, 0x52, 0x4c, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x50, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x50, - 0x61, 0x74, 0x68, 0x22, 0xad, 0x01, 0x0a, 0x0b, 0x52, 0x65, 0x74, 0x72, 0x79, 0x46, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x4e, 0x75, 0x6d, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x4e, 0x75, 0x6d, 0x52, 0x65, 0x74, 0x72, - 0x69, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x52, 0x65, 0x74, 0x72, 0x79, 0x4f, 0x6e, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x52, 0x65, 0x74, 0x72, 0x79, 0x4f, 0x6e, 0x12, 0x2e, 0x0a, - 0x12, 0x52, 0x65, 0x74, 0x72, 0x79, 0x4f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, - 0x64, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x12, 0x52, 0x65, 0x74, 0x72, 0x79, - 0x4f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x34, 0x0a, - 0x15, 0x52, 0x65, 0x74, 0x72, 0x79, 0x4f, 0x6e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x46, - 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x52, 0x65, - 0x74, 0x72, 0x79, 0x4f, 0x6e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x46, 0x61, 0x69, 0x6c, - 0x75, 0x72, 0x65, 0x22, 0x8f, 0x01, 0x0a, 0x0d, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x46, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x41, 0x0a, 0x0e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x3b, 0x0a, 0x0b, 0x49, 0x64, 0x6c, 0x65, - 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x49, 0x64, 0x6c, 0x65, 0x54, 0x69, - 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x22, 0x67, 0x0a, 0x09, 0x4a, 0x57, 0x54, 0x46, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x12, 0x5a, 0x0a, 0x09, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, + 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x53, 0x61, 0x6d, 0x65, 0x6e, 0x65, 0x73, 0x73, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x4d, 0x65, + 0x74, 0x61, 0x12, 0x58, 0x0a, 0x0e, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, + 0x4d, 0x65, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x68, 0x61, 0x73, + 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, + 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x0e, 0x45, 0x6e, + 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x1a, 0x37, 0x0a, 0x09, + 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x47, 0x0a, 0x13, 0x53, 0x61, 0x6d, 0x65, 0x6e, 0x65, 0x73, + 0x73, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, + 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x50, 0x65, + 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x50, 0x65, 0x65, 0x72, 0x22, 0xdd, + 0x04, 0x0a, 0x0b, 0x4a, 0x57, 0x54, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x5a, + 0x0a, 0x0d, 0x4a, 0x53, 0x4f, 0x4e, 0x57, 0x65, 0x62, 0x4b, 0x65, 0x79, 0x53, 0x65, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x41, 0x50, - 0x49, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4a, 0x57, 0x54, 0x50, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x52, 0x09, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x22, 0xc2, - 0x02, 0x0a, 0x10, 0x48, 0x54, 0x54, 0x50, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x46, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x12, 0x52, 0x0a, 0x03, 0x41, 0x64, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x40, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, - 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x48, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x41, 0x64, 0x64, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x03, 0x41, 0x64, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x6d, 0x6f, 0x76, - 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12, - 0x52, 0x0a, 0x03, 0x53, 0x65, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x68, - 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, - 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x46, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x03, - 0x53, 0x65, 0x74, 0x1a, 0x36, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x36, 0x0a, 0x08, 0x53, - 0x65, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x22, 0xc7, 0x02, 0x0a, 0x0b, 0x48, 0x54, 0x54, 0x50, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x57, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, - 0x4c, 0x0a, 0x07, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x32, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, - 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x46, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x73, 0x52, 0x07, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, 0x58, 0x0a, - 0x0e, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, + 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x4a, 0x53, + 0x4f, 0x4e, 0x57, 0x65, 0x62, 0x4b, 0x65, 0x79, 0x53, 0x65, 0x74, 0x52, 0x0d, 0x4a, 0x53, 0x4f, + 0x4e, 0x57, 0x65, 0x62, 0x4b, 0x65, 0x79, 0x53, 0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x73, + 0x73, 0x75, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x49, 0x73, 0x73, 0x75, + 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x73, + 0x12, 0x50, 0x0a, 0x09, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, + 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x4a, 0x57, 0x54, 0x4c, + 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0x5a, 0x0a, 0x0a, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, + 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x4a, + 0x57, 0x54, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x52, 0x0a, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x57, + 0x0a, 0x0b, 0x43, 0x61, 0x63, 0x68, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, + 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x4a, 0x57, 0x54, 0x43, + 0x61, 0x63, 0x68, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x43, 0x61, 0x63, 0x68, + 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x50, 0x0a, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x18, + 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, - 0x69, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x0e, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, - 0x69, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x64, 0x0a, 0x0f, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x3a, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, - 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x0f, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x22, 0xfc, 0x02, - 0x0a, 0x08, 0x54, 0x43, 0x50, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x4d, 0x0a, 0x04, 0x4d, 0x65, - 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, + 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x4a, 0x57, + 0x54, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x2a, 0x0a, 0x10, 0x43, 0x6c, 0x6f, + 0x63, 0x6b, 0x53, 0x6b, 0x65, 0x77, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x10, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x6b, 0x65, 0x77, 0x53, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x1a, 0x37, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa2, + 0x01, 0x0a, 0x0d, 0x4a, 0x53, 0x4f, 0x4e, 0x57, 0x65, 0x62, 0x4b, 0x65, 0x79, 0x53, 0x65, 0x74, + 0x12, 0x46, 0x0a, 0x05, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x30, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, + 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x4a, 0x57, 0x4b, + 0x53, 0x52, 0x05, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x12, 0x49, 0x0a, 0x06, 0x52, 0x65, 0x6d, 0x6f, + 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, - 0x2e, 0x54, 0x43, 0x50, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x52, 0x0a, 0x07, 0x50, 0x61, 0x72, - 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x68, 0x61, 0x73, - 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, - 0x72, 0x79, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x4d, 0x0a, - 0x08, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x31, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, + 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x4a, 0x57, 0x4b, 0x53, 0x52, 0x06, 0x52, 0x65, 0x6d, + 0x6f, 0x74, 0x65, 0x22, 0x3b, 0x0a, 0x09, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x4a, 0x57, 0x4b, 0x53, + 0x12, 0x12, 0x0a, 0x04, 0x4a, 0x57, 0x4b, 0x53, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x4a, 0x57, 0x4b, 0x53, 0x12, 0x1a, 0x0a, 0x08, 0x46, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x46, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, + 0x22, 0xed, 0x02, 0x0a, 0x0a, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x4a, 0x57, 0x4b, 0x53, 0x12, + 0x10, 0x0a, 0x03, 0x55, 0x52, 0x49, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x52, + 0x49, 0x12, 0x2a, 0x0a, 0x10, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, + 0x6f, 0x75, 0x74, 0x4d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x4d, 0x73, 0x12, 0x3f, 0x0a, + 0x0d, 0x43, 0x61, 0x63, 0x68, 0x65, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x0d, 0x43, 0x61, 0x63, 0x68, 0x65, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x30, + 0x0a, 0x13, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x79, 0x6e, 0x63, 0x68, 0x72, 0x6f, 0x6e, + 0x6f, 0x75, 0x73, 0x6c, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x46, 0x65, 0x74, + 0x63, 0x68, 0x41, 0x73, 0x79, 0x6e, 0x63, 0x68, 0x72, 0x6f, 0x6e, 0x6f, 0x75, 0x73, 0x6c, 0x79, + 0x12, 0x58, 0x0a, 0x0b, 0x52, 0x65, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, + 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x4a, 0x57, + 0x4b, 0x53, 0x52, 0x65, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x0b, 0x52, + 0x65, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x54, 0x0a, 0x0b, 0x4a, 0x57, + 0x4b, 0x53, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x32, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x43, 0x50, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x52, 0x08, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x06, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x68, - 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, - 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x1a, 0x37, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x7a, 0x0a, 0x0a, - 0x54, 0x43, 0x50, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x58, - 0x0a, 0x0e, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, - 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x70, - 0x72, 0x69, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x0e, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x70, - 0x72, 0x69, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x22, 0xb4, 0x03, 0x0a, 0x0d, 0x53, 0x61, 0x6d, - 0x65, 0x6e, 0x65, 0x73, 0x73, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2e, - 0x0a, 0x12, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x46, 0x6f, 0x72, 0x46, 0x61, 0x69, 0x6c, - 0x6f, 0x76, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x44, 0x65, 0x66, 0x61, - 0x75, 0x6c, 0x74, 0x46, 0x6f, 0x72, 0x46, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x12, 0x22, - 0x0a, 0x0c, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4c, 0x6f, 0x63, - 0x61, 0x6c, 0x12, 0x54, 0x0a, 0x07, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, - 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x53, 0x61, 0x6d, 0x65, - 0x6e, 0x65, 0x73, 0x73, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, - 0x07, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x52, 0x0a, 0x04, 0x4d, 0x65, 0x74, 0x61, - 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, - 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x53, - 0x61, 0x6d, 0x65, 0x6e, 0x65, 0x73, 0x73, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x4d, 0x65, 0x74, - 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x58, 0x0a, 0x0e, - 0x45, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, - 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, - 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x0e, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, - 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x1a, 0x37, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, - 0x47, 0x0a, 0x13, 0x53, 0x61, 0x6d, 0x65, 0x6e, 0x65, 0x73, 0x73, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x50, 0x61, 0x72, 0x74, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x50, 0x65, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x50, 0x65, 0x65, 0x72, 0x22, 0xdd, 0x04, 0x0a, 0x0b, 0x4a, 0x57, 0x54, - 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x5a, 0x0a, 0x0d, 0x4a, 0x53, 0x4f, 0x4e, - 0x57, 0x65, 0x62, 0x4b, 0x65, 0x79, 0x53, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x34, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, + 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x4a, 0x57, 0x4b, 0x53, 0x43, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x52, 0x0b, 0x4a, 0x57, 0x4b, 0x53, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x22, 0xdb, 0x01, 0x0a, 0x0b, 0x4a, 0x57, 0x4b, 0x53, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x12, 0x24, 0x0a, 0x0d, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x54, 0x79, 0x70, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, + 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x63, 0x0a, 0x0f, 0x54, 0x4c, 0x53, 0x43, 0x65, 0x72, + 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x39, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x4a, 0x53, 0x4f, 0x4e, 0x57, 0x65, 0x62, 0x4b, - 0x65, 0x79, 0x53, 0x65, 0x74, 0x52, 0x0d, 0x4a, 0x53, 0x4f, 0x4e, 0x57, 0x65, 0x62, 0x4b, 0x65, - 0x79, 0x53, 0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x73, 0x73, 0x75, 0x65, 0x72, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x49, 0x73, 0x73, 0x75, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, - 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x09, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x50, 0x0a, 0x09, 0x4c, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, - 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x4a, 0x57, 0x54, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x09, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x5a, 0x0a, 0x0a, - 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x3a, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, - 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x4a, 0x57, 0x54, 0x46, 0x6f, 0x72, 0x77, - 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0a, 0x46, 0x6f, - 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x57, 0x0a, 0x0b, 0x43, 0x61, 0x63, 0x68, - 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, + 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x4a, 0x57, 0x4b, 0x53, 0x54, 0x4c, 0x53, 0x43, + 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x0f, 0x54, 0x4c, 0x53, 0x43, + 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x12, 0x41, 0x0a, 0x0e, 0x43, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, + 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x22, 0xfa, + 0x01, 0x0a, 0x12, 0x4a, 0x57, 0x4b, 0x53, 0x54, 0x4c, 0x53, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x88, 0x01, 0x0a, 0x1d, 0x43, 0x61, 0x43, 0x65, 0x72, 0x74, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x4a, 0x57, 0x54, 0x43, 0x61, 0x63, 0x68, 0x65, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x43, 0x61, 0x63, 0x68, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x12, 0x50, 0x0a, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x3c, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, - 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x4a, 0x57, 0x54, 0x50, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x4d, - 0x65, 0x74, 0x61, 0x12, 0x2a, 0x0a, 0x10, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x6b, 0x65, 0x77, - 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x43, - 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x6b, 0x65, 0x77, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x1a, - 0x37, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa2, 0x01, 0x0a, 0x0d, 0x4a, 0x53, 0x4f, - 0x4e, 0x57, 0x65, 0x62, 0x4b, 0x65, 0x79, 0x53, 0x65, 0x74, 0x12, 0x46, 0x0a, 0x05, 0x4c, 0x6f, - 0x63, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x68, 0x61, 0x73, 0x68, - 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, - 0x79, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x4a, 0x57, 0x4b, 0x53, 0x52, 0x05, 0x4c, 0x6f, 0x63, - 0x61, 0x6c, 0x12, 0x49, 0x0a, 0x06, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, - 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x74, - 0x65, 0x4a, 0x57, 0x4b, 0x53, 0x52, 0x06, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x22, 0x3b, 0x0a, - 0x09, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x4a, 0x57, 0x4b, 0x53, 0x12, 0x12, 0x0a, 0x04, 0x4a, 0x57, - 0x4b, 0x53, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4a, 0x57, 0x4b, 0x53, 0x12, 0x1a, - 0x0a, 0x08, 0x46, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x46, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xed, 0x02, 0x0a, 0x0a, 0x52, - 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x4a, 0x57, 0x4b, 0x53, 0x12, 0x10, 0x0a, 0x03, 0x55, 0x52, 0x49, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x52, 0x49, 0x12, 0x2a, 0x0a, 0x10, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x4d, 0x73, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x69, - 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x4d, 0x73, 0x12, 0x3f, 0x0a, 0x0d, 0x43, 0x61, 0x63, 0x68, 0x65, - 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x43, 0x61, 0x63, 0x68, 0x65, - 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x30, 0x0a, 0x13, 0x46, 0x65, 0x74, 0x63, - 0x68, 0x41, 0x73, 0x79, 0x6e, 0x63, 0x68, 0x72, 0x6f, 0x6e, 0x6f, 0x75, 0x73, 0x6c, 0x79, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x79, 0x6e, - 0x63, 0x68, 0x72, 0x6f, 0x6e, 0x6f, 0x75, 0x73, 0x6c, 0x79, 0x12, 0x58, 0x0a, 0x0b, 0x52, 0x65, - 0x74, 0x72, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x36, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, - 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x4a, 0x57, 0x4b, 0x53, 0x52, 0x65, 0x74, 0x72, - 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x0b, 0x52, 0x65, 0x74, 0x72, 0x79, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x12, 0x54, 0x0a, 0x0b, 0x4a, 0x57, 0x4b, 0x53, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x68, 0x61, 0x73, 0x68, - 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, - 0x79, 0x2e, 0x4a, 0x57, 0x4b, 0x53, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x0b, 0x4a, - 0x57, 0x4b, 0x53, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x22, 0xdb, 0x01, 0x0a, 0x0b, 0x4a, - 0x57, 0x4b, 0x53, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x24, 0x0a, 0x0d, 0x44, 0x69, - 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0d, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x63, 0x0a, 0x0f, 0x54, 0x4c, 0x53, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x68, 0x61, 0x73, 0x68, - 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, - 0x79, 0x2e, 0x4a, 0x57, 0x4b, 0x53, 0x54, 0x4c, 0x53, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x52, 0x0f, 0x54, 0x4c, 0x53, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x73, 0x12, 0x41, 0x0a, 0x0e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, - 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, - 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x22, 0xfa, 0x01, 0x0a, 0x12, 0x4a, 0x57, 0x4b, - 0x53, 0x54, 0x4c, 0x53, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, - 0x88, 0x01, 0x0a, 0x1d, 0x43, 0x61, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, + 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x4a, 0x57, 0x4b, 0x53, 0x54, 0x4c, 0x53, 0x43, 0x65, 0x72, + 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x52, 0x1d, 0x43, 0x61, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, + 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x12, 0x59, 0x0a, 0x09, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x43, 0x41, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, + 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x4a, 0x57, 0x4b, 0x53, + 0x54, 0x4c, 0x53, 0x43, 0x65, 0x72, 0x74, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x43, 0x41, + 0x52, 0x09, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x43, 0x41, 0x22, 0x6b, 0x0a, 0x1b, 0x4a, + 0x57, 0x4b, 0x53, 0x54, 0x4c, 0x53, 0x43, 0x65, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x72, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x49, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0c, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x28, + 0x0a, 0x0f, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xaa, 0x01, 0x0a, 0x14, 0x4a, 0x57, 0x4b, + 0x53, 0x54, 0x4c, 0x53, 0x43, 0x65, 0x72, 0x74, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x43, + 0x41, 0x12, 0x1a, 0x0a, 0x08, 0x46, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x46, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x30, 0x0a, + 0x13, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, + 0x61, 0x62, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x45, 0x6e, 0x76, 0x69, + 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x12, + 0x22, 0x0a, 0x0c, 0x49, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x49, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x12, 0x20, 0x0a, 0x0b, 0x49, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x42, 0x79, 0x74, + 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x49, 0x6e, 0x6c, 0x69, 0x6e, 0x65, + 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0x9c, 0x01, 0x0a, 0x0f, 0x4a, 0x57, 0x4b, 0x53, 0x52, 0x65, + 0x74, 0x72, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x1e, 0x0a, 0x0a, 0x4e, 0x75, 0x6d, + 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4e, + 0x75, 0x6d, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x69, 0x0a, 0x12, 0x52, 0x65, 0x74, + 0x72, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x42, 0x61, 0x63, 0x6b, 0x4f, 0x66, 0x66, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, + 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, + 0x74, 0x72, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x42, 0x61, 0x63, 0x6b, 0x4f, 0x66, 0x66, + 0x52, 0x12, 0x52, 0x65, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x42, 0x61, 0x63, + 0x6b, 0x4f, 0x66, 0x66, 0x22, 0x90, 0x01, 0x0a, 0x12, 0x52, 0x65, 0x74, 0x72, 0x79, 0x50, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x42, 0x61, 0x63, 0x6b, 0x4f, 0x66, 0x66, 0x12, 0x3d, 0x0a, 0x0c, 0x42, + 0x61, 0x73, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x42, 0x61, + 0x73, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x3b, 0x0a, 0x0b, 0x4d, 0x61, + 0x78, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x4d, 0x61, 0x78, 0x49, + 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x22, 0x8f, 0x02, 0x0a, 0x0b, 0x4a, 0x57, 0x54, 0x4c, + 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x50, 0x0a, 0x06, 0x48, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, - 0x4a, 0x57, 0x4b, 0x53, 0x54, 0x4c, 0x53, 0x43, 0x65, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x1d, 0x43, 0x61, 0x43, - 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x59, 0x0a, 0x09, 0x54, 0x72, - 0x75, 0x73, 0x74, 0x65, 0x64, 0x43, 0x41, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, + 0x4a, 0x57, 0x54, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x52, 0x06, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x5c, 0x0a, 0x0a, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x4a, 0x57, 0x4b, 0x53, 0x54, 0x4c, 0x53, 0x43, 0x65, 0x72, - 0x74, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x43, 0x41, 0x52, 0x09, 0x54, 0x72, 0x75, 0x73, - 0x74, 0x65, 0x64, 0x43, 0x41, 0x22, 0x6b, 0x0a, 0x1b, 0x4a, 0x57, 0x4b, 0x53, 0x54, 0x4c, 0x53, - 0x43, 0x65, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x49, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x43, 0x65, 0x72, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0f, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x4e, 0x61, - 0x6d, 0x65, 0x22, 0xaa, 0x01, 0x0a, 0x14, 0x4a, 0x57, 0x4b, 0x53, 0x54, 0x4c, 0x53, 0x43, 0x65, - 0x72, 0x74, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x43, 0x41, 0x12, 0x1a, 0x0a, 0x08, 0x46, - 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x46, - 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x30, 0x0a, 0x13, 0x45, 0x6e, 0x76, 0x69, 0x72, - 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, - 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x49, 0x6e, 0x6c, - 0x69, 0x6e, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0c, 0x49, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x20, 0x0a, - 0x0b, 0x49, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x0b, 0x49, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, - 0x9c, 0x01, 0x0a, 0x0f, 0x4a, 0x57, 0x4b, 0x53, 0x52, 0x65, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x12, 0x1e, 0x0a, 0x0a, 0x4e, 0x75, 0x6d, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4e, 0x75, 0x6d, 0x52, 0x65, 0x74, 0x72, - 0x69, 0x65, 0x73, 0x12, 0x69, 0x0a, 0x12, 0x52, 0x65, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x42, 0x61, 0x63, 0x6b, 0x4f, 0x66, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x39, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, - 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x42, 0x61, 0x63, 0x6b, 0x4f, 0x66, 0x66, 0x52, 0x12, 0x52, 0x65, 0x74, 0x72, - 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x42, 0x61, 0x63, 0x6b, 0x4f, 0x66, 0x66, 0x22, 0x90, - 0x01, 0x0a, 0x12, 0x52, 0x65, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x42, 0x61, - 0x63, 0x6b, 0x4f, 0x66, 0x66, 0x12, 0x3d, 0x0a, 0x0c, 0x42, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x74, - 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x42, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x74, 0x65, - 0x72, 0x76, 0x61, 0x6c, 0x12, 0x3b, 0x0a, 0x0b, 0x4d, 0x61, 0x78, 0x49, 0x6e, 0x74, 0x65, 0x72, - 0x76, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x4d, 0x61, 0x78, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, - 0x6c, 0x22, 0x8f, 0x02, 0x0a, 0x0b, 0x4a, 0x57, 0x54, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x50, 0x0a, 0x06, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x38, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, - 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x4a, 0x57, 0x54, 0x4c, 0x6f, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x06, 0x48, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x12, 0x5c, 0x0a, 0x0a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, + 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x4a, 0x57, 0x54, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x0a, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x50, 0x0a, 0x06, 0x43, 0x6f, 0x6f, 0x6b, 0x69, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, - 0x4a, 0x57, 0x54, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x0a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x12, 0x50, 0x0a, 0x06, 0x43, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x38, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, + 0x4a, 0x57, 0x54, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6f, 0x6b, 0x69, + 0x65, 0x52, 0x06, 0x43, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x22, 0x63, 0x0a, 0x11, 0x4a, 0x57, 0x54, + 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x12, + 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x72, 0x65, 0x66, 0x69, + 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x72, + 0x65, 0x66, 0x69, 0x78, 0x12, 0x18, 0x0a, 0x07, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x22, 0x2b, + 0x0a, 0x15, 0x4a, 0x57, 0x54, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x27, 0x0a, 0x11, 0x4a, + 0x57, 0x54, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6f, 0x6b, 0x69, 0x65, + 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x6f, 0x0a, 0x13, 0x4a, 0x57, 0x54, 0x46, 0x6f, 0x72, 0x77, 0x61, + 0x72, 0x64, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1e, 0x0a, 0x0a, 0x48, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x17, 0x50, + 0x61, 0x64, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, + 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x50, 0x61, + 0x64, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x48, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x24, 0x0a, 0x0e, 0x4a, 0x57, 0x54, 0x43, 0x61, 0x63, 0x68, + 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x69, 0x7a, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x69, 0x7a, 0x65, 0x2a, 0xa9, 0x02, 0x0a, 0x04, + 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x0f, 0x0a, 0x0b, 0x4b, 0x69, 0x6e, 0x64, 0x55, 0x6e, 0x6b, 0x6e, + 0x6f, 0x77, 0x6e, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x4b, 0x69, 0x6e, 0x64, 0x4d, 0x65, 0x73, + 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x4b, 0x69, 0x6e, + 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, + 0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, 0x4b, 0x69, 0x6e, 0x64, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, + 0x73, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x10, 0x03, 0x12, 0x19, 0x0a, 0x15, 0x4b, 0x69, + 0x6e, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x10, 0x04, 0x12, 0x17, 0x0a, 0x13, 0x4b, 0x69, 0x6e, 0x64, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x10, 0x05, 0x12, 0x19, + 0x0a, 0x15, 0x4b, 0x69, 0x6e, 0x64, 0x49, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x65, 0x72, 0x74, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x10, 0x06, 0x12, 0x12, 0x0a, 0x0e, 0x4b, 0x69, 0x6e, + 0x64, 0x41, 0x50, 0x49, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x10, 0x07, 0x12, 0x17, 0x0a, + 0x13, 0x4b, 0x69, 0x6e, 0x64, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x41, 0x50, 0x49, 0x47, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x10, 0x08, 0x12, 0x11, 0x0a, 0x0d, 0x4b, 0x69, 0x6e, 0x64, 0x48, 0x54, + 0x54, 0x50, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x10, 0x09, 0x12, 0x10, 0x0a, 0x0c, 0x4b, 0x69, 0x6e, + 0x64, 0x54, 0x43, 0x50, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x10, 0x0a, 0x12, 0x15, 0x0a, 0x11, 0x4b, + 0x69, 0x6e, 0x64, 0x53, 0x61, 0x6d, 0x65, 0x6e, 0x65, 0x73, 0x73, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x10, 0x0b, 0x12, 0x13, 0x0a, 0x0f, 0x4b, 0x69, 0x6e, 0x64, 0x4a, 0x57, 0x54, 0x50, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x72, 0x10, 0x0c, 0x2a, 0x26, 0x0a, 0x0f, 0x49, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x65, + 0x6e, 0x79, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x10, 0x01, 0x2a, + 0x21, 0x0a, 0x13, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, + 0x10, 0x00, 0x2a, 0x50, 0x0a, 0x09, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x12, + 0x14, 0x0a, 0x10, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x44, 0x65, 0x66, 0x61, + 0x75, 0x6c, 0x74, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x4d, 0x6f, + 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x10, 0x01, 0x12, + 0x13, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x44, 0x69, 0x72, 0x65, + 0x63, 0x74, 0x10, 0x02, 0x2a, 0x5f, 0x0a, 0x0d, 0x4d, 0x75, 0x74, 0x75, 0x61, 0x6c, 0x54, 0x4c, + 0x53, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x14, 0x4d, 0x75, 0x74, 0x75, 0x61, 0x6c, 0x54, + 0x4c, 0x53, 0x4d, 0x6f, 0x64, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x10, 0x00, 0x12, + 0x17, 0x0a, 0x13, 0x4d, 0x75, 0x74, 0x75, 0x61, 0x6c, 0x54, 0x4c, 0x53, 0x4d, 0x6f, 0x64, 0x65, + 0x53, 0x74, 0x72, 0x69, 0x63, 0x74, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x4d, 0x75, 0x74, 0x75, + 0x61, 0x6c, 0x54, 0x4c, 0x53, 0x4d, 0x6f, 0x64, 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, + 0x69, 0x76, 0x65, 0x10, 0x02, 0x2a, 0x7b, 0x0a, 0x0f, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x16, 0x4d, 0x65, 0x73, 0x68, + 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, + 0x6c, 0x74, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x4e, 0x6f, 0x6e, 0x65, 0x10, 0x01, 0x12, 0x18, 0x0a, + 0x14, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4d, 0x6f, 0x64, 0x65, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x10, 0x02, 0x12, 0x19, 0x0a, 0x15, 0x4d, 0x65, 0x73, 0x68, 0x47, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, + 0x10, 0x03, 0x2a, 0x4f, 0x0a, 0x1a, 0x41, 0x50, 0x49, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, + 0x12, 0x18, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6c, 0x48, 0x54, 0x54, 0x50, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x4c, 0x69, + 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x54, 0x43, + 0x50, 0x10, 0x01, 0x2a, 0x92, 0x02, 0x0a, 0x0f, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, + 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x16, 0x0a, 0x12, 0x48, 0x54, 0x54, 0x50, 0x4d, + 0x61, 0x74, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x41, 0x6c, 0x6c, 0x10, 0x00, 0x12, + 0x1a, 0x0a, 0x16, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, + 0x6f, 0x64, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x48, + 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, + 0x74, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x47, 0x65, 0x74, 0x10, 0x03, 0x12, 0x17, + 0x0a, 0x13, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, + 0x64, 0x48, 0x65, 0x61, 0x64, 0x10, 0x04, 0x12, 0x1a, 0x0a, 0x16, 0x48, 0x54, 0x54, 0x50, 0x4d, + 0x61, 0x74, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x10, 0x05, 0x12, 0x18, 0x0a, 0x14, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x50, 0x61, 0x74, 0x63, 0x68, 0x10, 0x06, 0x12, 0x17, 0x0a, + 0x13, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, + 0x50, 0x6f, 0x73, 0x74, 0x10, 0x07, 0x12, 0x16, 0x0a, 0x12, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, + 0x74, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x50, 0x75, 0x74, 0x10, 0x08, 0x12, 0x18, + 0x0a, 0x14, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, + 0x64, 0x54, 0x72, 0x61, 0x63, 0x65, 0x10, 0x09, 0x2a, 0xa7, 0x01, 0x0a, 0x13, 0x48, 0x54, 0x54, + 0x50, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x18, 0x0a, 0x14, 0x48, 0x54, 0x54, 0x50, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x61, + 0x74, 0x63, 0x68, 0x45, 0x78, 0x61, 0x63, 0x74, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x48, 0x54, + 0x54, 0x50, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x65, + 0x66, 0x69, 0x78, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x48, 0x54, 0x54, 0x50, 0x48, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x10, + 0x02, 0x12, 0x24, 0x0a, 0x20, 0x48, 0x54, 0x54, 0x50, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, + 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x10, 0x03, 0x12, 0x19, 0x0a, 0x15, 0x48, 0x54, 0x54, 0x50, 0x48, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x53, 0x75, 0x66, 0x66, 0x69, 0x78, + 0x10, 0x04, 0x2a, 0x68, 0x0a, 0x11, 0x48, 0x54, 0x54, 0x50, 0x50, 0x61, 0x74, 0x68, 0x4d, 0x61, + 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x12, 0x48, 0x54, 0x54, 0x50, 0x50, + 0x61, 0x74, 0x68, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x45, 0x78, 0x61, 0x63, 0x74, 0x10, 0x00, 0x12, + 0x17, 0x0a, 0x13, 0x48, 0x54, 0x54, 0x50, 0x50, 0x61, 0x74, 0x68, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x10, 0x01, 0x12, 0x22, 0x0a, 0x1e, 0x48, 0x54, 0x54, 0x50, + 0x50, 0x61, 0x74, 0x68, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x67, 0x75, 0x6c, 0x61, 0x72, + 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x10, 0x03, 0x2a, 0x6d, 0x0a, 0x12, + 0x48, 0x54, 0x54, 0x50, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x17, 0x0a, 0x13, 0x48, 0x54, 0x54, 0x50, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4d, + 0x61, 0x74, 0x63, 0x68, 0x45, 0x78, 0x61, 0x63, 0x74, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x48, + 0x54, 0x54, 0x50, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x65, + 0x73, 0x65, 0x6e, 0x74, 0x10, 0x01, 0x12, 0x23, 0x0a, 0x1f, 0x48, 0x54, 0x54, 0x50, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x45, + 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x10, 0x03, 0x42, 0xae, 0x02, 0x0a, 0x29, + 0x63, 0x6f, 0x6d, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x4a, 0x57, 0x54, 0x4c, 0x6f, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x52, 0x06, 0x43, 0x6f, 0x6f, - 0x6b, 0x69, 0x65, 0x22, 0x63, 0x0a, 0x11, 0x4a, 0x57, 0x54, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x18, - 0x0a, 0x07, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x07, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x22, 0x2b, 0x0a, 0x15, 0x4a, 0x57, 0x54, 0x4c, - 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x27, 0x0a, 0x11, 0x4a, 0x57, 0x54, 0x4c, 0x6f, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x6f, - 0x0a, 0x13, 0x4a, 0x57, 0x54, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1e, 0x0a, 0x0a, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x48, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x17, 0x50, 0x61, 0x64, 0x46, 0x6f, 0x72, 0x77, - 0x61, 0x72, 0x64, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x50, 0x61, 0x64, 0x46, 0x6f, 0x72, 0x77, 0x61, - 0x72, 0x64, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, - 0x24, 0x0a, 0x0e, 0x4a, 0x57, 0x54, 0x43, 0x61, 0x63, 0x68, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x53, 0x69, 0x7a, 0x65, 0x2a, 0xa9, 0x02, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x0f, - 0x0a, 0x0b, 0x4b, 0x69, 0x6e, 0x64, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x10, 0x00, 0x12, - 0x12, 0x0a, 0x0e, 0x4b, 0x69, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x4b, 0x69, 0x6e, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, - 0x4b, 0x69, 0x6e, 0x64, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x47, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x10, 0x03, 0x12, 0x19, 0x0a, 0x15, 0x4b, 0x69, 0x6e, 0x64, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x10, 0x04, 0x12, - 0x17, 0x0a, 0x13, 0x4b, 0x69, 0x6e, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, - 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x10, 0x05, 0x12, 0x19, 0x0a, 0x15, 0x4b, 0x69, 0x6e, 0x64, - 0x49, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x65, 0x10, 0x06, 0x12, 0x12, 0x0a, 0x0e, 0x4b, 0x69, 0x6e, 0x64, 0x41, 0x50, 0x49, 0x47, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x10, 0x07, 0x12, 0x17, 0x0a, 0x13, 0x4b, 0x69, 0x6e, 0x64, 0x42, - 0x6f, 0x75, 0x6e, 0x64, 0x41, 0x50, 0x49, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x10, 0x08, - 0x12, 0x11, 0x0a, 0x0d, 0x4b, 0x69, 0x6e, 0x64, 0x48, 0x54, 0x54, 0x50, 0x52, 0x6f, 0x75, 0x74, - 0x65, 0x10, 0x09, 0x12, 0x10, 0x0a, 0x0c, 0x4b, 0x69, 0x6e, 0x64, 0x54, 0x43, 0x50, 0x52, 0x6f, - 0x75, 0x74, 0x65, 0x10, 0x0a, 0x12, 0x15, 0x0a, 0x11, 0x4b, 0x69, 0x6e, 0x64, 0x53, 0x61, 0x6d, - 0x65, 0x6e, 0x65, 0x73, 0x73, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x10, 0x0b, 0x12, 0x13, 0x0a, 0x0f, - 0x4b, 0x69, 0x6e, 0x64, 0x4a, 0x57, 0x54, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x10, - 0x0c, 0x2a, 0x26, 0x0a, 0x0f, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x65, 0x6e, 0x79, 0x10, 0x00, 0x12, 0x09, - 0x0a, 0x05, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x10, 0x01, 0x2a, 0x21, 0x0a, 0x13, 0x49, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x10, 0x00, 0x2a, 0x50, 0x0a, 0x09, - 0x50, 0x72, 0x6f, 0x78, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x50, 0x72, 0x6f, - 0x78, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x10, 0x00, 0x12, - 0x18, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x50, 0x72, 0x6f, - 0x78, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x10, 0x02, 0x2a, 0x5f, - 0x0a, 0x0d, 0x4d, 0x75, 0x74, 0x75, 0x61, 0x6c, 0x54, 0x4c, 0x53, 0x4d, 0x6f, 0x64, 0x65, 0x12, - 0x18, 0x0a, 0x14, 0x4d, 0x75, 0x74, 0x75, 0x61, 0x6c, 0x54, 0x4c, 0x53, 0x4d, 0x6f, 0x64, 0x65, - 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x4d, 0x75, 0x74, - 0x75, 0x61, 0x6c, 0x54, 0x4c, 0x53, 0x4d, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x72, 0x69, 0x63, 0x74, - 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x4d, 0x75, 0x74, 0x75, 0x61, 0x6c, 0x54, 0x4c, 0x53, 0x4d, - 0x6f, 0x64, 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x76, 0x65, 0x10, 0x02, 0x2a, - 0x7b, 0x0a, 0x0f, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4d, 0x6f, - 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x16, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x10, 0x00, 0x12, 0x17, - 0x0a, 0x13, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4d, 0x6f, 0x64, - 0x65, 0x4e, 0x6f, 0x6e, 0x65, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x4d, 0x65, 0x73, 0x68, 0x47, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x10, - 0x02, 0x12, 0x19, 0x0a, 0x15, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x10, 0x03, 0x2a, 0x4f, 0x0a, 0x1a, - 0x41, 0x50, 0x49, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, - 0x65, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x18, 0x0a, 0x14, 0x4c, 0x69, - 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x48, 0x54, - 0x54, 0x50, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x54, 0x43, 0x50, 0x10, 0x01, 0x2a, 0x92, 0x02, - 0x0a, 0x0f, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, - 0x64, 0x12, 0x16, 0x0a, 0x12, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x65, - 0x74, 0x68, 0x6f, 0x64, 0x41, 0x6c, 0x6c, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x48, 0x54, 0x54, - 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x43, 0x6f, 0x6e, 0x6e, - 0x65, 0x63, 0x74, 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x10, 0x02, - 0x12, 0x16, 0x0a, 0x12, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x65, 0x74, - 0x68, 0x6f, 0x64, 0x47, 0x65, 0x74, 0x10, 0x03, 0x12, 0x17, 0x0a, 0x13, 0x48, 0x54, 0x54, 0x50, - 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x48, 0x65, 0x61, 0x64, 0x10, - 0x04, 0x12, 0x1a, 0x0a, 0x16, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x65, - 0x74, 0x68, 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x10, 0x05, 0x12, 0x18, 0x0a, - 0x14, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, - 0x50, 0x61, 0x74, 0x63, 0x68, 0x10, 0x06, 0x12, 0x17, 0x0a, 0x13, 0x48, 0x54, 0x54, 0x50, 0x4d, - 0x61, 0x74, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x50, 0x6f, 0x73, 0x74, 0x10, 0x07, - 0x12, 0x16, 0x0a, 0x12, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x65, 0x74, - 0x68, 0x6f, 0x64, 0x50, 0x75, 0x74, 0x10, 0x08, 0x12, 0x18, 0x0a, 0x14, 0x48, 0x54, 0x54, 0x50, - 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x54, 0x72, 0x61, 0x63, 0x65, - 0x10, 0x09, 0x2a, 0xa7, 0x01, 0x0a, 0x13, 0x48, 0x54, 0x54, 0x50, 0x48, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x14, 0x48, 0x54, - 0x54, 0x50, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x45, 0x78, 0x61, - 0x63, 0x74, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x48, 0x54, 0x54, 0x50, 0x48, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x10, 0x01, 0x12, - 0x1a, 0x0a, 0x16, 0x48, 0x54, 0x54, 0x50, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x10, 0x02, 0x12, 0x24, 0x0a, 0x20, 0x48, - 0x54, 0x54, 0x50, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, - 0x67, 0x75, 0x6c, 0x61, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x10, - 0x03, 0x12, 0x19, 0x0a, 0x15, 0x48, 0x54, 0x54, 0x50, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, - 0x61, 0x74, 0x63, 0x68, 0x53, 0x75, 0x66, 0x66, 0x69, 0x78, 0x10, 0x04, 0x2a, 0x68, 0x0a, 0x11, - 0x48, 0x54, 0x54, 0x50, 0x50, 0x61, 0x74, 0x68, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x16, 0x0a, 0x12, 0x48, 0x54, 0x54, 0x50, 0x50, 0x61, 0x74, 0x68, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x45, 0x78, 0x61, 0x63, 0x74, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x48, 0x54, 0x54, - 0x50, 0x50, 0x61, 0x74, 0x68, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, - 0x10, 0x01, 0x12, 0x22, 0x0a, 0x1e, 0x48, 0x54, 0x54, 0x50, 0x50, 0x61, 0x74, 0x68, 0x4d, 0x61, - 0x74, 0x63, 0x68, 0x52, 0x65, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x10, 0x03, 0x2a, 0x6d, 0x0a, 0x12, 0x48, 0x54, 0x54, 0x50, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x17, 0x0a, 0x13, - 0x48, 0x54, 0x54, 0x50, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x45, 0x78, - 0x61, 0x63, 0x74, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x48, 0x54, 0x54, 0x50, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x10, 0x01, - 0x12, 0x23, 0x0a, 0x1f, 0x48, 0x54, 0x54, 0x50, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x52, 0x65, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x10, 0x03, 0x42, 0xae, 0x02, 0x0a, 0x29, 0x63, 0x6f, 0x6d, 0x2e, 0x68, 0x61, - 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, - 0x74, 0x72, 0x79, 0x42, 0x10, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x37, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f, 0x63, 0x6f, - 0x6e, 0x73, 0x75, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, - 0x74, 0x65, 0x2f, 0x70, 0x62, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, - 0xa2, 0x02, 0x04, 0x48, 0x43, 0x49, 0x43, 0xaa, 0x02, 0x25, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, - 0x6f, 0x72, 0x70, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0xca, - 0x02, 0x25, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x5c, 0x43, 0x6f, 0x6e, 0x73, - 0x75, 0x6c, 0x5c, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5c, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0xe2, 0x02, 0x31, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, - 0x6f, 0x72, 0x70, 0x5c, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x5c, 0x49, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x5c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x5c, - 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x28, 0x48, 0x61, - 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x3a, 0x3a, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x3a, - 0x3a, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x3a, 0x3a, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x10, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x37, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, + 0x6f, 0x72, 0x70, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x70, 0x62, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0xa2, 0x02, 0x04, 0x48, 0x43, 0x49, 0x43, 0xaa, 0x02, 0x25, + 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, + 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x65, 0x6e, 0x74, 0x72, 0x79, 0xca, 0x02, 0x25, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, + 0x70, 0x5c, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x5c, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x5c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0xe2, 0x02, 0x31, + 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x5c, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, + 0x5c, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x65, 0x6e, 0x74, 0x72, 0x79, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0xea, 0x02, 0x28, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x3a, 0x3a, 0x43, + 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x3a, 0x3a, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x3a, + 0x3a, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -9327,7 +9404,7 @@ func file_private_pbconfigentry_config_entry_proto_rawDescGZIP() []byte { } var file_private_pbconfigentry_config_entry_proto_enumTypes = make([]protoimpl.EnumInfo, 11) -var file_private_pbconfigentry_config_entry_proto_msgTypes = make([]protoimpl.MessageInfo, 115) +var file_private_pbconfigentry_config_entry_proto_msgTypes = make([]protoimpl.MessageInfo, 117) var file_private_pbconfigentry_config_entry_proto_goTypes = []interface{}{ (Kind)(0), // 0: hashicorp.consul.internal.configentry.Kind (IntentionAction)(0), // 1: hashicorp.consul.internal.configentry.IntentionAction @@ -9399,72 +9476,74 @@ var file_private_pbconfigentry_config_entry_proto_goTypes = []interface{}{ (*APIGatewayJWTClaimVerification)(nil), // 67: hashicorp.consul.internal.configentry.APIGatewayJWTClaimVerification (*ResourceReference)(nil), // 68: hashicorp.consul.internal.configentry.ResourceReference (*BoundAPIGateway)(nil), // 69: hashicorp.consul.internal.configentry.BoundAPIGateway - (*BoundAPIGatewayListener)(nil), // 70: hashicorp.consul.internal.configentry.BoundAPIGatewayListener - (*InlineCertificate)(nil), // 71: hashicorp.consul.internal.configentry.InlineCertificate - (*HTTPRoute)(nil), // 72: hashicorp.consul.internal.configentry.HTTPRoute - (*HTTPRouteRule)(nil), // 73: hashicorp.consul.internal.configentry.HTTPRouteRule - (*HTTPMatch)(nil), // 74: hashicorp.consul.internal.configentry.HTTPMatch - (*HTTPHeaderMatch)(nil), // 75: hashicorp.consul.internal.configentry.HTTPHeaderMatch - (*HTTPPathMatch)(nil), // 76: hashicorp.consul.internal.configentry.HTTPPathMatch - (*HTTPQueryMatch)(nil), // 77: hashicorp.consul.internal.configentry.HTTPQueryMatch - (*HTTPFilters)(nil), // 78: hashicorp.consul.internal.configentry.HTTPFilters - (*HTTPResponseFilters)(nil), // 79: hashicorp.consul.internal.configentry.HTTPResponseFilters - (*URLRewrite)(nil), // 80: hashicorp.consul.internal.configentry.URLRewrite - (*RetryFilter)(nil), // 81: hashicorp.consul.internal.configentry.RetryFilter - (*TimeoutFilter)(nil), // 82: hashicorp.consul.internal.configentry.TimeoutFilter - (*JWTFilter)(nil), // 83: hashicorp.consul.internal.configentry.JWTFilter - (*HTTPHeaderFilter)(nil), // 84: hashicorp.consul.internal.configentry.HTTPHeaderFilter - (*HTTPService)(nil), // 85: hashicorp.consul.internal.configentry.HTTPService - (*TCPRoute)(nil), // 86: hashicorp.consul.internal.configentry.TCPRoute - (*TCPService)(nil), // 87: hashicorp.consul.internal.configentry.TCPService - (*SamenessGroup)(nil), // 88: hashicorp.consul.internal.configentry.SamenessGroup - (*SamenessGroupMember)(nil), // 89: hashicorp.consul.internal.configentry.SamenessGroupMember - (*JWTProvider)(nil), // 90: hashicorp.consul.internal.configentry.JWTProvider - (*JSONWebKeySet)(nil), // 91: hashicorp.consul.internal.configentry.JSONWebKeySet - (*LocalJWKS)(nil), // 92: hashicorp.consul.internal.configentry.LocalJWKS - (*RemoteJWKS)(nil), // 93: hashicorp.consul.internal.configentry.RemoteJWKS - (*JWKSCluster)(nil), // 94: hashicorp.consul.internal.configentry.JWKSCluster - (*JWKSTLSCertificate)(nil), // 95: hashicorp.consul.internal.configentry.JWKSTLSCertificate - (*JWKSTLSCertProviderInstance)(nil), // 96: hashicorp.consul.internal.configentry.JWKSTLSCertProviderInstance - (*JWKSTLSCertTrustedCA)(nil), // 97: hashicorp.consul.internal.configentry.JWKSTLSCertTrustedCA - (*JWKSRetryPolicy)(nil), // 98: hashicorp.consul.internal.configentry.JWKSRetryPolicy - (*RetryPolicyBackOff)(nil), // 99: hashicorp.consul.internal.configentry.RetryPolicyBackOff - (*JWTLocation)(nil), // 100: hashicorp.consul.internal.configentry.JWTLocation - (*JWTLocationHeader)(nil), // 101: hashicorp.consul.internal.configentry.JWTLocationHeader - (*JWTLocationQueryParam)(nil), // 102: hashicorp.consul.internal.configentry.JWTLocationQueryParam - (*JWTLocationCookie)(nil), // 103: hashicorp.consul.internal.configentry.JWTLocationCookie - (*JWTForwardingConfig)(nil), // 104: hashicorp.consul.internal.configentry.JWTForwardingConfig - (*JWTCacheConfig)(nil), // 105: hashicorp.consul.internal.configentry.JWTCacheConfig - nil, // 106: hashicorp.consul.internal.configentry.MeshConfig.MetaEntry - nil, // 107: hashicorp.consul.internal.configentry.ServiceResolver.SubsetsEntry - nil, // 108: hashicorp.consul.internal.configentry.ServiceResolver.FailoverEntry - nil, // 109: hashicorp.consul.internal.configentry.ServiceResolver.MetaEntry - nil, // 110: hashicorp.consul.internal.configentry.IngressGateway.MetaEntry - nil, // 111: hashicorp.consul.internal.configentry.IngressService.MetaEntry - nil, // 112: hashicorp.consul.internal.configentry.HTTPHeaderModifiers.AddEntry - nil, // 113: hashicorp.consul.internal.configentry.HTTPHeaderModifiers.SetEntry - nil, // 114: hashicorp.consul.internal.configentry.ServiceIntentions.MetaEntry - nil, // 115: hashicorp.consul.internal.configentry.SourceIntention.LegacyMetaEntry - nil, // 116: hashicorp.consul.internal.configentry.ServiceDefaults.MetaEntry - nil, // 117: hashicorp.consul.internal.configentry.APIGateway.MetaEntry - nil, // 118: hashicorp.consul.internal.configentry.BoundAPIGateway.MetaEntry - nil, // 119: hashicorp.consul.internal.configentry.InlineCertificate.MetaEntry - nil, // 120: hashicorp.consul.internal.configentry.HTTPRoute.MetaEntry - nil, // 121: hashicorp.consul.internal.configentry.HTTPHeaderFilter.AddEntry - nil, // 122: hashicorp.consul.internal.configentry.HTTPHeaderFilter.SetEntry - nil, // 123: hashicorp.consul.internal.configentry.TCPRoute.MetaEntry - nil, // 124: hashicorp.consul.internal.configentry.SamenessGroup.MetaEntry - nil, // 125: hashicorp.consul.internal.configentry.JWTProvider.MetaEntry - (*pbcommon.EnterpriseMeta)(nil), // 126: hashicorp.consul.internal.common.EnterpriseMeta - (*pbcommon.RaftIndex)(nil), // 127: hashicorp.consul.internal.common.RaftIndex - (*durationpb.Duration)(nil), // 128: google.protobuf.Duration - (*timestamppb.Timestamp)(nil), // 129: google.protobuf.Timestamp - (*pbcommon.EnvoyExtension)(nil), // 130: hashicorp.consul.internal.common.EnvoyExtension + (*ListOfResourceReference)(nil), // 70: hashicorp.consul.internal.configentry.ListOfResourceReference + (*BoundAPIGatewayListener)(nil), // 71: hashicorp.consul.internal.configentry.BoundAPIGatewayListener + (*InlineCertificate)(nil), // 72: hashicorp.consul.internal.configentry.InlineCertificate + (*HTTPRoute)(nil), // 73: hashicorp.consul.internal.configentry.HTTPRoute + (*HTTPRouteRule)(nil), // 74: hashicorp.consul.internal.configentry.HTTPRouteRule + (*HTTPMatch)(nil), // 75: hashicorp.consul.internal.configentry.HTTPMatch + (*HTTPHeaderMatch)(nil), // 76: hashicorp.consul.internal.configentry.HTTPHeaderMatch + (*HTTPPathMatch)(nil), // 77: hashicorp.consul.internal.configentry.HTTPPathMatch + (*HTTPQueryMatch)(nil), // 78: hashicorp.consul.internal.configentry.HTTPQueryMatch + (*HTTPFilters)(nil), // 79: hashicorp.consul.internal.configentry.HTTPFilters + (*HTTPResponseFilters)(nil), // 80: hashicorp.consul.internal.configentry.HTTPResponseFilters + (*URLRewrite)(nil), // 81: hashicorp.consul.internal.configentry.URLRewrite + (*RetryFilter)(nil), // 82: hashicorp.consul.internal.configentry.RetryFilter + (*TimeoutFilter)(nil), // 83: hashicorp.consul.internal.configentry.TimeoutFilter + (*JWTFilter)(nil), // 84: hashicorp.consul.internal.configentry.JWTFilter + (*HTTPHeaderFilter)(nil), // 85: hashicorp.consul.internal.configentry.HTTPHeaderFilter + (*HTTPService)(nil), // 86: hashicorp.consul.internal.configentry.HTTPService + (*TCPRoute)(nil), // 87: hashicorp.consul.internal.configentry.TCPRoute + (*TCPService)(nil), // 88: hashicorp.consul.internal.configentry.TCPService + (*SamenessGroup)(nil), // 89: hashicorp.consul.internal.configentry.SamenessGroup + (*SamenessGroupMember)(nil), // 90: hashicorp.consul.internal.configentry.SamenessGroupMember + (*JWTProvider)(nil), // 91: hashicorp.consul.internal.configentry.JWTProvider + (*JSONWebKeySet)(nil), // 92: hashicorp.consul.internal.configentry.JSONWebKeySet + (*LocalJWKS)(nil), // 93: hashicorp.consul.internal.configentry.LocalJWKS + (*RemoteJWKS)(nil), // 94: hashicorp.consul.internal.configentry.RemoteJWKS + (*JWKSCluster)(nil), // 95: hashicorp.consul.internal.configentry.JWKSCluster + (*JWKSTLSCertificate)(nil), // 96: hashicorp.consul.internal.configentry.JWKSTLSCertificate + (*JWKSTLSCertProviderInstance)(nil), // 97: hashicorp.consul.internal.configentry.JWKSTLSCertProviderInstance + (*JWKSTLSCertTrustedCA)(nil), // 98: hashicorp.consul.internal.configentry.JWKSTLSCertTrustedCA + (*JWKSRetryPolicy)(nil), // 99: hashicorp.consul.internal.configentry.JWKSRetryPolicy + (*RetryPolicyBackOff)(nil), // 100: hashicorp.consul.internal.configentry.RetryPolicyBackOff + (*JWTLocation)(nil), // 101: hashicorp.consul.internal.configentry.JWTLocation + (*JWTLocationHeader)(nil), // 102: hashicorp.consul.internal.configentry.JWTLocationHeader + (*JWTLocationQueryParam)(nil), // 103: hashicorp.consul.internal.configentry.JWTLocationQueryParam + (*JWTLocationCookie)(nil), // 104: hashicorp.consul.internal.configentry.JWTLocationCookie + (*JWTForwardingConfig)(nil), // 105: hashicorp.consul.internal.configentry.JWTForwardingConfig + (*JWTCacheConfig)(nil), // 106: hashicorp.consul.internal.configentry.JWTCacheConfig + nil, // 107: hashicorp.consul.internal.configentry.MeshConfig.MetaEntry + nil, // 108: hashicorp.consul.internal.configentry.ServiceResolver.SubsetsEntry + nil, // 109: hashicorp.consul.internal.configentry.ServiceResolver.FailoverEntry + nil, // 110: hashicorp.consul.internal.configentry.ServiceResolver.MetaEntry + nil, // 111: hashicorp.consul.internal.configentry.IngressGateway.MetaEntry + nil, // 112: hashicorp.consul.internal.configentry.IngressService.MetaEntry + nil, // 113: hashicorp.consul.internal.configentry.HTTPHeaderModifiers.AddEntry + nil, // 114: hashicorp.consul.internal.configentry.HTTPHeaderModifiers.SetEntry + nil, // 115: hashicorp.consul.internal.configentry.ServiceIntentions.MetaEntry + nil, // 116: hashicorp.consul.internal.configentry.SourceIntention.LegacyMetaEntry + nil, // 117: hashicorp.consul.internal.configentry.ServiceDefaults.MetaEntry + nil, // 118: hashicorp.consul.internal.configentry.APIGateway.MetaEntry + nil, // 119: hashicorp.consul.internal.configentry.BoundAPIGateway.MetaEntry + nil, // 120: hashicorp.consul.internal.configentry.BoundAPIGateway.ServicesEntry + nil, // 121: hashicorp.consul.internal.configentry.InlineCertificate.MetaEntry + nil, // 122: hashicorp.consul.internal.configentry.HTTPRoute.MetaEntry + nil, // 123: hashicorp.consul.internal.configentry.HTTPHeaderFilter.AddEntry + nil, // 124: hashicorp.consul.internal.configentry.HTTPHeaderFilter.SetEntry + nil, // 125: hashicorp.consul.internal.configentry.TCPRoute.MetaEntry + nil, // 126: hashicorp.consul.internal.configentry.SamenessGroup.MetaEntry + nil, // 127: hashicorp.consul.internal.configentry.JWTProvider.MetaEntry + (*pbcommon.EnterpriseMeta)(nil), // 128: hashicorp.consul.internal.common.EnterpriseMeta + (*pbcommon.RaftIndex)(nil), // 129: hashicorp.consul.internal.common.RaftIndex + (*durationpb.Duration)(nil), // 130: google.protobuf.Duration + (*timestamppb.Timestamp)(nil), // 131: google.protobuf.Timestamp + (*pbcommon.EnvoyExtension)(nil), // 132: hashicorp.consul.internal.common.EnvoyExtension } var file_private_pbconfigentry_config_entry_proto_depIdxs = []int32{ 0, // 0: hashicorp.consul.internal.configentry.ConfigEntry.Kind:type_name -> hashicorp.consul.internal.configentry.Kind - 126, // 1: hashicorp.consul.internal.configentry.ConfigEntry.EnterpriseMeta:type_name -> hashicorp.consul.internal.common.EnterpriseMeta - 127, // 2: hashicorp.consul.internal.configentry.ConfigEntry.RaftIndex:type_name -> hashicorp.consul.internal.common.RaftIndex + 128, // 1: hashicorp.consul.internal.configentry.ConfigEntry.EnterpriseMeta:type_name -> hashicorp.consul.internal.common.EnterpriseMeta + 129, // 2: hashicorp.consul.internal.configentry.ConfigEntry.RaftIndex:type_name -> hashicorp.consul.internal.common.RaftIndex 12, // 3: hashicorp.consul.internal.configentry.ConfigEntry.MeshConfig:type_name -> hashicorp.consul.internal.configentry.MeshConfig 18, // 4: hashicorp.consul.internal.configentry.ConfigEntry.ServiceResolver:type_name -> hashicorp.consul.internal.configentry.ServiceResolver 30, // 5: hashicorp.consul.internal.configentry.ConfigEntry.IngressGateway:type_name -> hashicorp.consul.internal.configentry.IngressGateway @@ -9472,25 +9551,25 @@ var file_private_pbconfigentry_config_entry_proto_depIdxs = []int32{ 46, // 7: hashicorp.consul.internal.configentry.ConfigEntry.ServiceDefaults:type_name -> hashicorp.consul.internal.configentry.ServiceDefaults 59, // 8: hashicorp.consul.internal.configentry.ConfigEntry.APIGateway:type_name -> hashicorp.consul.internal.configentry.APIGateway 69, // 9: hashicorp.consul.internal.configentry.ConfigEntry.BoundAPIGateway:type_name -> hashicorp.consul.internal.configentry.BoundAPIGateway - 86, // 10: hashicorp.consul.internal.configentry.ConfigEntry.TCPRoute:type_name -> hashicorp.consul.internal.configentry.TCPRoute - 72, // 11: hashicorp.consul.internal.configentry.ConfigEntry.HTTPRoute:type_name -> hashicorp.consul.internal.configentry.HTTPRoute - 71, // 12: hashicorp.consul.internal.configentry.ConfigEntry.InlineCertificate:type_name -> hashicorp.consul.internal.configentry.InlineCertificate - 88, // 13: hashicorp.consul.internal.configentry.ConfigEntry.SamenessGroup:type_name -> hashicorp.consul.internal.configentry.SamenessGroup - 90, // 14: hashicorp.consul.internal.configentry.ConfigEntry.JWTProvider:type_name -> hashicorp.consul.internal.configentry.JWTProvider + 87, // 10: hashicorp.consul.internal.configentry.ConfigEntry.TCPRoute:type_name -> hashicorp.consul.internal.configentry.TCPRoute + 73, // 11: hashicorp.consul.internal.configentry.ConfigEntry.HTTPRoute:type_name -> hashicorp.consul.internal.configentry.HTTPRoute + 72, // 12: hashicorp.consul.internal.configentry.ConfigEntry.InlineCertificate:type_name -> hashicorp.consul.internal.configentry.InlineCertificate + 89, // 13: hashicorp.consul.internal.configentry.ConfigEntry.SamenessGroup:type_name -> hashicorp.consul.internal.configentry.SamenessGroup + 91, // 14: hashicorp.consul.internal.configentry.ConfigEntry.JWTProvider:type_name -> hashicorp.consul.internal.configentry.JWTProvider 13, // 15: hashicorp.consul.internal.configentry.MeshConfig.TransparentProxy:type_name -> hashicorp.consul.internal.configentry.TransparentProxyMeshConfig 14, // 16: hashicorp.consul.internal.configentry.MeshConfig.TLS:type_name -> hashicorp.consul.internal.configentry.MeshTLSConfig 16, // 17: hashicorp.consul.internal.configentry.MeshConfig.HTTP:type_name -> hashicorp.consul.internal.configentry.MeshHTTPConfig - 106, // 18: hashicorp.consul.internal.configentry.MeshConfig.Meta:type_name -> hashicorp.consul.internal.configentry.MeshConfig.MetaEntry + 107, // 18: hashicorp.consul.internal.configentry.MeshConfig.Meta:type_name -> hashicorp.consul.internal.configentry.MeshConfig.MetaEntry 17, // 19: hashicorp.consul.internal.configentry.MeshConfig.Peering:type_name -> hashicorp.consul.internal.configentry.PeeringMeshConfig 15, // 20: hashicorp.consul.internal.configentry.MeshTLSConfig.Incoming:type_name -> hashicorp.consul.internal.configentry.MeshDirectionalTLSConfig 15, // 21: hashicorp.consul.internal.configentry.MeshTLSConfig.Outgoing:type_name -> hashicorp.consul.internal.configentry.MeshDirectionalTLSConfig - 107, // 22: hashicorp.consul.internal.configentry.ServiceResolver.Subsets:type_name -> hashicorp.consul.internal.configentry.ServiceResolver.SubsetsEntry + 108, // 22: hashicorp.consul.internal.configentry.ServiceResolver.Subsets:type_name -> hashicorp.consul.internal.configentry.ServiceResolver.SubsetsEntry 20, // 23: hashicorp.consul.internal.configentry.ServiceResolver.Redirect:type_name -> hashicorp.consul.internal.configentry.ServiceResolverRedirect - 108, // 24: hashicorp.consul.internal.configentry.ServiceResolver.Failover:type_name -> hashicorp.consul.internal.configentry.ServiceResolver.FailoverEntry - 128, // 25: hashicorp.consul.internal.configentry.ServiceResolver.ConnectTimeout:type_name -> google.protobuf.Duration + 109, // 24: hashicorp.consul.internal.configentry.ServiceResolver.Failover:type_name -> hashicorp.consul.internal.configentry.ServiceResolver.FailoverEntry + 130, // 25: hashicorp.consul.internal.configentry.ServiceResolver.ConnectTimeout:type_name -> google.protobuf.Duration 25, // 26: hashicorp.consul.internal.configentry.ServiceResolver.LoadBalancer:type_name -> hashicorp.consul.internal.configentry.LoadBalancer - 109, // 27: hashicorp.consul.internal.configentry.ServiceResolver.Meta:type_name -> hashicorp.consul.internal.configentry.ServiceResolver.MetaEntry - 128, // 28: hashicorp.consul.internal.configentry.ServiceResolver.RequestTimeout:type_name -> google.protobuf.Duration + 110, // 27: hashicorp.consul.internal.configentry.ServiceResolver.Meta:type_name -> hashicorp.consul.internal.configentry.ServiceResolver.MetaEntry + 130, // 28: hashicorp.consul.internal.configentry.ServiceResolver.RequestTimeout:type_name -> google.protobuf.Duration 23, // 29: hashicorp.consul.internal.configentry.ServiceResolver.PrioritizeByLocality:type_name -> hashicorp.consul.internal.configentry.ServiceResolverPrioritizeByLocality 24, // 30: hashicorp.consul.internal.configentry.ServiceResolverFailover.Targets:type_name -> hashicorp.consul.internal.configentry.ServiceResolverFailoverTarget 22, // 31: hashicorp.consul.internal.configentry.ServiceResolverFailover.Policy:type_name -> hashicorp.consul.internal.configentry.ServiceResolverFailoverPolicy @@ -9498,10 +9577,10 @@ var file_private_pbconfigentry_config_entry_proto_depIdxs = []int32{ 27, // 33: hashicorp.consul.internal.configentry.LoadBalancer.LeastRequestConfig:type_name -> hashicorp.consul.internal.configentry.LeastRequestConfig 28, // 34: hashicorp.consul.internal.configentry.LoadBalancer.HashPolicies:type_name -> hashicorp.consul.internal.configentry.HashPolicy 29, // 35: hashicorp.consul.internal.configentry.HashPolicy.CookieConfig:type_name -> hashicorp.consul.internal.configentry.CookieConfig - 128, // 36: hashicorp.consul.internal.configentry.CookieConfig.TTL:type_name -> google.protobuf.Duration + 130, // 36: hashicorp.consul.internal.configentry.CookieConfig.TTL:type_name -> google.protobuf.Duration 32, // 37: hashicorp.consul.internal.configentry.IngressGateway.TLS:type_name -> hashicorp.consul.internal.configentry.GatewayTLSConfig 34, // 38: hashicorp.consul.internal.configentry.IngressGateway.Listeners:type_name -> hashicorp.consul.internal.configentry.IngressListener - 110, // 39: hashicorp.consul.internal.configentry.IngressGateway.Meta:type_name -> hashicorp.consul.internal.configentry.IngressGateway.MetaEntry + 111, // 39: hashicorp.consul.internal.configentry.IngressGateway.Meta:type_name -> hashicorp.consul.internal.configentry.IngressGateway.MetaEntry 31, // 40: hashicorp.consul.internal.configentry.IngressGateway.Defaults:type_name -> hashicorp.consul.internal.configentry.IngressServiceConfig 54, // 41: hashicorp.consul.internal.configentry.IngressServiceConfig.PassiveHealthCheck:type_name -> hashicorp.consul.internal.configentry.PassiveHealthCheck 33, // 42: hashicorp.consul.internal.configentry.GatewayTLSConfig.SDS:type_name -> hashicorp.consul.internal.configentry.GatewayTLSSDSConfig @@ -9510,24 +9589,24 @@ var file_private_pbconfigentry_config_entry_proto_depIdxs = []int32{ 36, // 45: hashicorp.consul.internal.configentry.IngressService.TLS:type_name -> hashicorp.consul.internal.configentry.GatewayServiceTLSConfig 37, // 46: hashicorp.consul.internal.configentry.IngressService.RequestHeaders:type_name -> hashicorp.consul.internal.configentry.HTTPHeaderModifiers 37, // 47: hashicorp.consul.internal.configentry.IngressService.ResponseHeaders:type_name -> hashicorp.consul.internal.configentry.HTTPHeaderModifiers - 111, // 48: hashicorp.consul.internal.configentry.IngressService.Meta:type_name -> hashicorp.consul.internal.configentry.IngressService.MetaEntry - 126, // 49: hashicorp.consul.internal.configentry.IngressService.EnterpriseMeta:type_name -> hashicorp.consul.internal.common.EnterpriseMeta + 112, // 48: hashicorp.consul.internal.configentry.IngressService.Meta:type_name -> hashicorp.consul.internal.configentry.IngressService.MetaEntry + 128, // 49: hashicorp.consul.internal.configentry.IngressService.EnterpriseMeta:type_name -> hashicorp.consul.internal.common.EnterpriseMeta 54, // 50: hashicorp.consul.internal.configentry.IngressService.PassiveHealthCheck:type_name -> hashicorp.consul.internal.configentry.PassiveHealthCheck 33, // 51: hashicorp.consul.internal.configentry.GatewayServiceTLSConfig.SDS:type_name -> hashicorp.consul.internal.configentry.GatewayTLSSDSConfig - 112, // 52: hashicorp.consul.internal.configentry.HTTPHeaderModifiers.Add:type_name -> hashicorp.consul.internal.configentry.HTTPHeaderModifiers.AddEntry - 113, // 53: hashicorp.consul.internal.configentry.HTTPHeaderModifiers.Set:type_name -> hashicorp.consul.internal.configentry.HTTPHeaderModifiers.SetEntry + 113, // 52: hashicorp.consul.internal.configentry.HTTPHeaderModifiers.Add:type_name -> hashicorp.consul.internal.configentry.HTTPHeaderModifiers.AddEntry + 114, // 53: hashicorp.consul.internal.configentry.HTTPHeaderModifiers.Set:type_name -> hashicorp.consul.internal.configentry.HTTPHeaderModifiers.SetEntry 42, // 54: hashicorp.consul.internal.configentry.ServiceIntentions.Sources:type_name -> hashicorp.consul.internal.configentry.SourceIntention - 114, // 55: hashicorp.consul.internal.configentry.ServiceIntentions.Meta:type_name -> hashicorp.consul.internal.configentry.ServiceIntentions.MetaEntry + 115, // 55: hashicorp.consul.internal.configentry.ServiceIntentions.Meta:type_name -> hashicorp.consul.internal.configentry.ServiceIntentions.MetaEntry 39, // 56: hashicorp.consul.internal.configentry.ServiceIntentions.JWT:type_name -> hashicorp.consul.internal.configentry.IntentionJWTRequirement 40, // 57: hashicorp.consul.internal.configentry.IntentionJWTRequirement.Providers:type_name -> hashicorp.consul.internal.configentry.IntentionJWTProvider 41, // 58: hashicorp.consul.internal.configentry.IntentionJWTProvider.VerifyClaims:type_name -> hashicorp.consul.internal.configentry.IntentionJWTClaimVerification 1, // 59: hashicorp.consul.internal.configentry.SourceIntention.Action:type_name -> hashicorp.consul.internal.configentry.IntentionAction 43, // 60: hashicorp.consul.internal.configentry.SourceIntention.Permissions:type_name -> hashicorp.consul.internal.configentry.IntentionPermission 2, // 61: hashicorp.consul.internal.configentry.SourceIntention.Type:type_name -> hashicorp.consul.internal.configentry.IntentionSourceType - 115, // 62: hashicorp.consul.internal.configentry.SourceIntention.LegacyMeta:type_name -> hashicorp.consul.internal.configentry.SourceIntention.LegacyMetaEntry - 129, // 63: hashicorp.consul.internal.configentry.SourceIntention.LegacyCreateTime:type_name -> google.protobuf.Timestamp - 129, // 64: hashicorp.consul.internal.configentry.SourceIntention.LegacyUpdateTime:type_name -> google.protobuf.Timestamp - 126, // 65: hashicorp.consul.internal.configentry.SourceIntention.EnterpriseMeta:type_name -> hashicorp.consul.internal.common.EnterpriseMeta + 116, // 62: hashicorp.consul.internal.configentry.SourceIntention.LegacyMeta:type_name -> hashicorp.consul.internal.configentry.SourceIntention.LegacyMetaEntry + 131, // 63: hashicorp.consul.internal.configentry.SourceIntention.LegacyCreateTime:type_name -> google.protobuf.Timestamp + 131, // 64: hashicorp.consul.internal.configentry.SourceIntention.LegacyUpdateTime:type_name -> google.protobuf.Timestamp + 128, // 65: hashicorp.consul.internal.configentry.SourceIntention.EnterpriseMeta:type_name -> hashicorp.consul.internal.common.EnterpriseMeta 1, // 66: hashicorp.consul.internal.configentry.IntentionPermission.Action:type_name -> hashicorp.consul.internal.configentry.IntentionAction 44, // 67: hashicorp.consul.internal.configentry.IntentionPermission.HTTP:type_name -> hashicorp.consul.internal.configentry.IntentionHTTPPermission 39, // 68: hashicorp.consul.internal.configentry.IntentionPermission.JWT:type_name -> hashicorp.consul.internal.configentry.IntentionJWTRequirement @@ -9539,27 +9618,27 @@ var file_private_pbconfigentry_config_entry_proto_depIdxs = []int32{ 51, // 74: hashicorp.consul.internal.configentry.ServiceDefaults.UpstreamConfig:type_name -> hashicorp.consul.internal.configentry.UpstreamConfiguration 55, // 75: hashicorp.consul.internal.configentry.ServiceDefaults.Destination:type_name -> hashicorp.consul.internal.configentry.DestinationConfig 56, // 76: hashicorp.consul.internal.configentry.ServiceDefaults.RateLimits:type_name -> hashicorp.consul.internal.configentry.RateLimits - 116, // 77: hashicorp.consul.internal.configentry.ServiceDefaults.Meta:type_name -> hashicorp.consul.internal.configentry.ServiceDefaults.MetaEntry - 130, // 78: hashicorp.consul.internal.configentry.ServiceDefaults.EnvoyExtensions:type_name -> hashicorp.consul.internal.common.EnvoyExtension + 117, // 77: hashicorp.consul.internal.configentry.ServiceDefaults.Meta:type_name -> hashicorp.consul.internal.configentry.ServiceDefaults.MetaEntry + 132, // 78: hashicorp.consul.internal.configentry.ServiceDefaults.EnvoyExtensions:type_name -> hashicorp.consul.internal.common.EnvoyExtension 4, // 79: hashicorp.consul.internal.configentry.ServiceDefaults.MutualTLSMode:type_name -> hashicorp.consul.internal.configentry.MutualTLSMode 5, // 80: hashicorp.consul.internal.configentry.MeshGatewayConfig.Mode:type_name -> hashicorp.consul.internal.configentry.MeshGatewayMode 50, // 81: hashicorp.consul.internal.configentry.ExposeConfig.Paths:type_name -> hashicorp.consul.internal.configentry.ExposePath 52, // 82: hashicorp.consul.internal.configentry.UpstreamConfiguration.Overrides:type_name -> hashicorp.consul.internal.configentry.UpstreamConfig 52, // 83: hashicorp.consul.internal.configentry.UpstreamConfiguration.Defaults:type_name -> hashicorp.consul.internal.configentry.UpstreamConfig - 126, // 84: hashicorp.consul.internal.configentry.UpstreamConfig.EnterpriseMeta:type_name -> hashicorp.consul.internal.common.EnterpriseMeta + 128, // 84: hashicorp.consul.internal.configentry.UpstreamConfig.EnterpriseMeta:type_name -> hashicorp.consul.internal.common.EnterpriseMeta 53, // 85: hashicorp.consul.internal.configentry.UpstreamConfig.Limits:type_name -> hashicorp.consul.internal.configentry.UpstreamLimits 54, // 86: hashicorp.consul.internal.configentry.UpstreamConfig.PassiveHealthCheck:type_name -> hashicorp.consul.internal.configentry.PassiveHealthCheck 48, // 87: hashicorp.consul.internal.configentry.UpstreamConfig.MeshGateway:type_name -> hashicorp.consul.internal.configentry.MeshGatewayConfig - 128, // 88: hashicorp.consul.internal.configentry.PassiveHealthCheck.Interval:type_name -> google.protobuf.Duration - 128, // 89: hashicorp.consul.internal.configentry.PassiveHealthCheck.BaseEjectionTime:type_name -> google.protobuf.Duration + 130, // 88: hashicorp.consul.internal.configentry.PassiveHealthCheck.Interval:type_name -> google.protobuf.Duration + 130, // 89: hashicorp.consul.internal.configentry.PassiveHealthCheck.BaseEjectionTime:type_name -> google.protobuf.Duration 57, // 90: hashicorp.consul.internal.configentry.RateLimits.InstanceLevel:type_name -> hashicorp.consul.internal.configentry.InstanceLevelRateLimits 58, // 91: hashicorp.consul.internal.configentry.InstanceLevelRateLimits.Routes:type_name -> hashicorp.consul.internal.configentry.InstanceLevelRouteRateLimits - 117, // 92: hashicorp.consul.internal.configentry.APIGateway.Meta:type_name -> hashicorp.consul.internal.configentry.APIGateway.MetaEntry + 118, // 92: hashicorp.consul.internal.configentry.APIGateway.Meta:type_name -> hashicorp.consul.internal.configentry.APIGateway.MetaEntry 62, // 93: hashicorp.consul.internal.configentry.APIGateway.Listeners:type_name -> hashicorp.consul.internal.configentry.APIGatewayListener 60, // 94: hashicorp.consul.internal.configentry.APIGateway.Status:type_name -> hashicorp.consul.internal.configentry.Status 61, // 95: hashicorp.consul.internal.configentry.Status.Conditions:type_name -> hashicorp.consul.internal.configentry.Condition 68, // 96: hashicorp.consul.internal.configentry.Condition.Resource:type_name -> hashicorp.consul.internal.configentry.ResourceReference - 129, // 97: hashicorp.consul.internal.configentry.Condition.LastTransitionTime:type_name -> google.protobuf.Timestamp + 131, // 97: hashicorp.consul.internal.configentry.Condition.LastTransitionTime:type_name -> google.protobuf.Timestamp 6, // 98: hashicorp.consul.internal.configentry.APIGatewayListener.Protocol:type_name -> hashicorp.consul.internal.configentry.APIGatewayListenerProtocol 63, // 99: hashicorp.consul.internal.configentry.APIGatewayListener.TLS:type_name -> hashicorp.consul.internal.configentry.APIGatewayTLSConfiguration 64, // 100: hashicorp.consul.internal.configentry.APIGatewayListener.Override:type_name -> hashicorp.consul.internal.configentry.APIGatewayPolicy @@ -9568,76 +9647,79 @@ var file_private_pbconfigentry_config_entry_proto_depIdxs = []int32{ 65, // 103: hashicorp.consul.internal.configentry.APIGatewayPolicy.JWT:type_name -> hashicorp.consul.internal.configentry.APIGatewayJWTRequirement 66, // 104: hashicorp.consul.internal.configentry.APIGatewayJWTRequirement.Providers:type_name -> hashicorp.consul.internal.configentry.APIGatewayJWTProvider 67, // 105: hashicorp.consul.internal.configentry.APIGatewayJWTProvider.VerifyClaims:type_name -> hashicorp.consul.internal.configentry.APIGatewayJWTClaimVerification - 126, // 106: hashicorp.consul.internal.configentry.ResourceReference.EnterpriseMeta:type_name -> hashicorp.consul.internal.common.EnterpriseMeta - 118, // 107: hashicorp.consul.internal.configentry.BoundAPIGateway.Meta:type_name -> hashicorp.consul.internal.configentry.BoundAPIGateway.MetaEntry - 70, // 108: hashicorp.consul.internal.configentry.BoundAPIGateway.Listeners:type_name -> hashicorp.consul.internal.configentry.BoundAPIGatewayListener - 68, // 109: hashicorp.consul.internal.configentry.BoundAPIGatewayListener.Certificates:type_name -> hashicorp.consul.internal.configentry.ResourceReference - 68, // 110: hashicorp.consul.internal.configentry.BoundAPIGatewayListener.Routes:type_name -> hashicorp.consul.internal.configentry.ResourceReference - 119, // 111: hashicorp.consul.internal.configentry.InlineCertificate.Meta:type_name -> hashicorp.consul.internal.configentry.InlineCertificate.MetaEntry - 120, // 112: hashicorp.consul.internal.configentry.HTTPRoute.Meta:type_name -> hashicorp.consul.internal.configentry.HTTPRoute.MetaEntry - 68, // 113: hashicorp.consul.internal.configentry.HTTPRoute.Parents:type_name -> hashicorp.consul.internal.configentry.ResourceReference - 73, // 114: hashicorp.consul.internal.configentry.HTTPRoute.Rules:type_name -> hashicorp.consul.internal.configentry.HTTPRouteRule - 60, // 115: hashicorp.consul.internal.configentry.HTTPRoute.Status:type_name -> hashicorp.consul.internal.configentry.Status - 78, // 116: hashicorp.consul.internal.configentry.HTTPRouteRule.Filters:type_name -> hashicorp.consul.internal.configentry.HTTPFilters - 74, // 117: hashicorp.consul.internal.configentry.HTTPRouteRule.Matches:type_name -> hashicorp.consul.internal.configentry.HTTPMatch - 85, // 118: hashicorp.consul.internal.configentry.HTTPRouteRule.Services:type_name -> hashicorp.consul.internal.configentry.HTTPService - 79, // 119: hashicorp.consul.internal.configentry.HTTPRouteRule.ResponseFilters:type_name -> hashicorp.consul.internal.configentry.HTTPResponseFilters - 75, // 120: hashicorp.consul.internal.configentry.HTTPMatch.Headers:type_name -> hashicorp.consul.internal.configentry.HTTPHeaderMatch - 7, // 121: hashicorp.consul.internal.configentry.HTTPMatch.Method:type_name -> hashicorp.consul.internal.configentry.HTTPMatchMethod - 76, // 122: hashicorp.consul.internal.configentry.HTTPMatch.Path:type_name -> hashicorp.consul.internal.configentry.HTTPPathMatch - 77, // 123: hashicorp.consul.internal.configentry.HTTPMatch.Query:type_name -> hashicorp.consul.internal.configentry.HTTPQueryMatch - 8, // 124: hashicorp.consul.internal.configentry.HTTPHeaderMatch.Match:type_name -> hashicorp.consul.internal.configentry.HTTPHeaderMatchType - 9, // 125: hashicorp.consul.internal.configentry.HTTPPathMatch.Match:type_name -> hashicorp.consul.internal.configentry.HTTPPathMatchType - 10, // 126: hashicorp.consul.internal.configentry.HTTPQueryMatch.Match:type_name -> hashicorp.consul.internal.configentry.HTTPQueryMatchType - 84, // 127: hashicorp.consul.internal.configentry.HTTPFilters.Headers:type_name -> hashicorp.consul.internal.configentry.HTTPHeaderFilter - 80, // 128: hashicorp.consul.internal.configentry.HTTPFilters.URLRewrite:type_name -> hashicorp.consul.internal.configentry.URLRewrite - 81, // 129: hashicorp.consul.internal.configentry.HTTPFilters.RetryFilter:type_name -> hashicorp.consul.internal.configentry.RetryFilter - 82, // 130: hashicorp.consul.internal.configentry.HTTPFilters.TimeoutFilter:type_name -> hashicorp.consul.internal.configentry.TimeoutFilter - 83, // 131: hashicorp.consul.internal.configentry.HTTPFilters.JWT:type_name -> hashicorp.consul.internal.configentry.JWTFilter - 84, // 132: hashicorp.consul.internal.configentry.HTTPResponseFilters.Headers:type_name -> hashicorp.consul.internal.configentry.HTTPHeaderFilter - 128, // 133: hashicorp.consul.internal.configentry.TimeoutFilter.RequestTimeout:type_name -> google.protobuf.Duration - 128, // 134: hashicorp.consul.internal.configentry.TimeoutFilter.IdleTimeout:type_name -> google.protobuf.Duration - 66, // 135: hashicorp.consul.internal.configentry.JWTFilter.Providers:type_name -> hashicorp.consul.internal.configentry.APIGatewayJWTProvider - 121, // 136: hashicorp.consul.internal.configentry.HTTPHeaderFilter.Add:type_name -> hashicorp.consul.internal.configentry.HTTPHeaderFilter.AddEntry - 122, // 137: hashicorp.consul.internal.configentry.HTTPHeaderFilter.Set:type_name -> hashicorp.consul.internal.configentry.HTTPHeaderFilter.SetEntry - 78, // 138: hashicorp.consul.internal.configentry.HTTPService.Filters:type_name -> hashicorp.consul.internal.configentry.HTTPFilters - 126, // 139: hashicorp.consul.internal.configentry.HTTPService.EnterpriseMeta:type_name -> hashicorp.consul.internal.common.EnterpriseMeta - 79, // 140: hashicorp.consul.internal.configentry.HTTPService.ResponseFilters:type_name -> hashicorp.consul.internal.configentry.HTTPResponseFilters - 123, // 141: hashicorp.consul.internal.configentry.TCPRoute.Meta:type_name -> hashicorp.consul.internal.configentry.TCPRoute.MetaEntry - 68, // 142: hashicorp.consul.internal.configentry.TCPRoute.Parents:type_name -> hashicorp.consul.internal.configentry.ResourceReference - 87, // 143: hashicorp.consul.internal.configentry.TCPRoute.Services:type_name -> hashicorp.consul.internal.configentry.TCPService - 60, // 144: hashicorp.consul.internal.configentry.TCPRoute.Status:type_name -> hashicorp.consul.internal.configentry.Status - 126, // 145: hashicorp.consul.internal.configentry.TCPService.EnterpriseMeta:type_name -> hashicorp.consul.internal.common.EnterpriseMeta - 89, // 146: hashicorp.consul.internal.configentry.SamenessGroup.Members:type_name -> hashicorp.consul.internal.configentry.SamenessGroupMember - 124, // 147: hashicorp.consul.internal.configentry.SamenessGroup.Meta:type_name -> hashicorp.consul.internal.configentry.SamenessGroup.MetaEntry - 126, // 148: hashicorp.consul.internal.configentry.SamenessGroup.EnterpriseMeta:type_name -> hashicorp.consul.internal.common.EnterpriseMeta - 91, // 149: hashicorp.consul.internal.configentry.JWTProvider.JSONWebKeySet:type_name -> hashicorp.consul.internal.configentry.JSONWebKeySet - 100, // 150: hashicorp.consul.internal.configentry.JWTProvider.Locations:type_name -> hashicorp.consul.internal.configentry.JWTLocation - 104, // 151: hashicorp.consul.internal.configentry.JWTProvider.Forwarding:type_name -> hashicorp.consul.internal.configentry.JWTForwardingConfig - 105, // 152: hashicorp.consul.internal.configentry.JWTProvider.CacheConfig:type_name -> hashicorp.consul.internal.configentry.JWTCacheConfig - 125, // 153: hashicorp.consul.internal.configentry.JWTProvider.Meta:type_name -> hashicorp.consul.internal.configentry.JWTProvider.MetaEntry - 92, // 154: hashicorp.consul.internal.configentry.JSONWebKeySet.Local:type_name -> hashicorp.consul.internal.configentry.LocalJWKS - 93, // 155: hashicorp.consul.internal.configentry.JSONWebKeySet.Remote:type_name -> hashicorp.consul.internal.configentry.RemoteJWKS - 128, // 156: hashicorp.consul.internal.configentry.RemoteJWKS.CacheDuration:type_name -> google.protobuf.Duration - 98, // 157: hashicorp.consul.internal.configentry.RemoteJWKS.RetryPolicy:type_name -> hashicorp.consul.internal.configentry.JWKSRetryPolicy - 94, // 158: hashicorp.consul.internal.configentry.RemoteJWKS.JWKSCluster:type_name -> hashicorp.consul.internal.configentry.JWKSCluster - 95, // 159: hashicorp.consul.internal.configentry.JWKSCluster.TLSCertificates:type_name -> hashicorp.consul.internal.configentry.JWKSTLSCertificate - 128, // 160: hashicorp.consul.internal.configentry.JWKSCluster.ConnectTimeout:type_name -> google.protobuf.Duration - 96, // 161: hashicorp.consul.internal.configentry.JWKSTLSCertificate.CaCertificateProviderInstance:type_name -> hashicorp.consul.internal.configentry.JWKSTLSCertProviderInstance - 97, // 162: hashicorp.consul.internal.configentry.JWKSTLSCertificate.TrustedCA:type_name -> hashicorp.consul.internal.configentry.JWKSTLSCertTrustedCA - 99, // 163: hashicorp.consul.internal.configentry.JWKSRetryPolicy.RetryPolicyBackOff:type_name -> hashicorp.consul.internal.configentry.RetryPolicyBackOff - 128, // 164: hashicorp.consul.internal.configentry.RetryPolicyBackOff.BaseInterval:type_name -> google.protobuf.Duration - 128, // 165: hashicorp.consul.internal.configentry.RetryPolicyBackOff.MaxInterval:type_name -> google.protobuf.Duration - 101, // 166: hashicorp.consul.internal.configentry.JWTLocation.Header:type_name -> hashicorp.consul.internal.configentry.JWTLocationHeader - 102, // 167: hashicorp.consul.internal.configentry.JWTLocation.QueryParam:type_name -> hashicorp.consul.internal.configentry.JWTLocationQueryParam - 103, // 168: hashicorp.consul.internal.configentry.JWTLocation.Cookie:type_name -> hashicorp.consul.internal.configentry.JWTLocationCookie - 19, // 169: hashicorp.consul.internal.configentry.ServiceResolver.SubsetsEntry.value:type_name -> hashicorp.consul.internal.configentry.ServiceResolverSubset - 21, // 170: hashicorp.consul.internal.configentry.ServiceResolver.FailoverEntry.value:type_name -> hashicorp.consul.internal.configentry.ServiceResolverFailover - 171, // [171:171] is the sub-list for method output_type - 171, // [171:171] is the sub-list for method input_type - 171, // [171:171] is the sub-list for extension type_name - 171, // [171:171] is the sub-list for extension extendee - 0, // [0:171] is the sub-list for field type_name + 128, // 106: hashicorp.consul.internal.configentry.ResourceReference.EnterpriseMeta:type_name -> hashicorp.consul.internal.common.EnterpriseMeta + 119, // 107: hashicorp.consul.internal.configentry.BoundAPIGateway.Meta:type_name -> hashicorp.consul.internal.configentry.BoundAPIGateway.MetaEntry + 71, // 108: hashicorp.consul.internal.configentry.BoundAPIGateway.Listeners:type_name -> hashicorp.consul.internal.configentry.BoundAPIGatewayListener + 120, // 109: hashicorp.consul.internal.configentry.BoundAPIGateway.Services:type_name -> hashicorp.consul.internal.configentry.BoundAPIGateway.ServicesEntry + 68, // 110: hashicorp.consul.internal.configentry.ListOfResourceReference.Ref:type_name -> hashicorp.consul.internal.configentry.ResourceReference + 68, // 111: hashicorp.consul.internal.configentry.BoundAPIGatewayListener.Certificates:type_name -> hashicorp.consul.internal.configentry.ResourceReference + 68, // 112: hashicorp.consul.internal.configentry.BoundAPIGatewayListener.Routes:type_name -> hashicorp.consul.internal.configentry.ResourceReference + 121, // 113: hashicorp.consul.internal.configentry.InlineCertificate.Meta:type_name -> hashicorp.consul.internal.configentry.InlineCertificate.MetaEntry + 122, // 114: hashicorp.consul.internal.configentry.HTTPRoute.Meta:type_name -> hashicorp.consul.internal.configentry.HTTPRoute.MetaEntry + 68, // 115: hashicorp.consul.internal.configentry.HTTPRoute.Parents:type_name -> hashicorp.consul.internal.configentry.ResourceReference + 74, // 116: hashicorp.consul.internal.configentry.HTTPRoute.Rules:type_name -> hashicorp.consul.internal.configentry.HTTPRouteRule + 60, // 117: hashicorp.consul.internal.configentry.HTTPRoute.Status:type_name -> hashicorp.consul.internal.configentry.Status + 79, // 118: hashicorp.consul.internal.configentry.HTTPRouteRule.Filters:type_name -> hashicorp.consul.internal.configentry.HTTPFilters + 75, // 119: hashicorp.consul.internal.configentry.HTTPRouteRule.Matches:type_name -> hashicorp.consul.internal.configentry.HTTPMatch + 86, // 120: hashicorp.consul.internal.configentry.HTTPRouteRule.Services:type_name -> hashicorp.consul.internal.configentry.HTTPService + 80, // 121: hashicorp.consul.internal.configentry.HTTPRouteRule.ResponseFilters:type_name -> hashicorp.consul.internal.configentry.HTTPResponseFilters + 76, // 122: hashicorp.consul.internal.configentry.HTTPMatch.Headers:type_name -> hashicorp.consul.internal.configentry.HTTPHeaderMatch + 7, // 123: hashicorp.consul.internal.configentry.HTTPMatch.Method:type_name -> hashicorp.consul.internal.configentry.HTTPMatchMethod + 77, // 124: hashicorp.consul.internal.configentry.HTTPMatch.Path:type_name -> hashicorp.consul.internal.configentry.HTTPPathMatch + 78, // 125: hashicorp.consul.internal.configentry.HTTPMatch.Query:type_name -> hashicorp.consul.internal.configentry.HTTPQueryMatch + 8, // 126: hashicorp.consul.internal.configentry.HTTPHeaderMatch.Match:type_name -> hashicorp.consul.internal.configentry.HTTPHeaderMatchType + 9, // 127: hashicorp.consul.internal.configentry.HTTPPathMatch.Match:type_name -> hashicorp.consul.internal.configentry.HTTPPathMatchType + 10, // 128: hashicorp.consul.internal.configentry.HTTPQueryMatch.Match:type_name -> hashicorp.consul.internal.configentry.HTTPQueryMatchType + 85, // 129: hashicorp.consul.internal.configentry.HTTPFilters.Headers:type_name -> hashicorp.consul.internal.configentry.HTTPHeaderFilter + 81, // 130: hashicorp.consul.internal.configentry.HTTPFilters.URLRewrite:type_name -> hashicorp.consul.internal.configentry.URLRewrite + 82, // 131: hashicorp.consul.internal.configentry.HTTPFilters.RetryFilter:type_name -> hashicorp.consul.internal.configentry.RetryFilter + 83, // 132: hashicorp.consul.internal.configentry.HTTPFilters.TimeoutFilter:type_name -> hashicorp.consul.internal.configentry.TimeoutFilter + 84, // 133: hashicorp.consul.internal.configentry.HTTPFilters.JWT:type_name -> hashicorp.consul.internal.configentry.JWTFilter + 85, // 134: hashicorp.consul.internal.configentry.HTTPResponseFilters.Headers:type_name -> hashicorp.consul.internal.configentry.HTTPHeaderFilter + 130, // 135: hashicorp.consul.internal.configentry.TimeoutFilter.RequestTimeout:type_name -> google.protobuf.Duration + 130, // 136: hashicorp.consul.internal.configentry.TimeoutFilter.IdleTimeout:type_name -> google.protobuf.Duration + 66, // 137: hashicorp.consul.internal.configentry.JWTFilter.Providers:type_name -> hashicorp.consul.internal.configentry.APIGatewayJWTProvider + 123, // 138: hashicorp.consul.internal.configentry.HTTPHeaderFilter.Add:type_name -> hashicorp.consul.internal.configentry.HTTPHeaderFilter.AddEntry + 124, // 139: hashicorp.consul.internal.configentry.HTTPHeaderFilter.Set:type_name -> hashicorp.consul.internal.configentry.HTTPHeaderFilter.SetEntry + 79, // 140: hashicorp.consul.internal.configentry.HTTPService.Filters:type_name -> hashicorp.consul.internal.configentry.HTTPFilters + 128, // 141: hashicorp.consul.internal.configentry.HTTPService.EnterpriseMeta:type_name -> hashicorp.consul.internal.common.EnterpriseMeta + 80, // 142: hashicorp.consul.internal.configentry.HTTPService.ResponseFilters:type_name -> hashicorp.consul.internal.configentry.HTTPResponseFilters + 125, // 143: hashicorp.consul.internal.configentry.TCPRoute.Meta:type_name -> hashicorp.consul.internal.configentry.TCPRoute.MetaEntry + 68, // 144: hashicorp.consul.internal.configentry.TCPRoute.Parents:type_name -> hashicorp.consul.internal.configentry.ResourceReference + 88, // 145: hashicorp.consul.internal.configentry.TCPRoute.Services:type_name -> hashicorp.consul.internal.configentry.TCPService + 60, // 146: hashicorp.consul.internal.configentry.TCPRoute.Status:type_name -> hashicorp.consul.internal.configentry.Status + 128, // 147: hashicorp.consul.internal.configentry.TCPService.EnterpriseMeta:type_name -> hashicorp.consul.internal.common.EnterpriseMeta + 90, // 148: hashicorp.consul.internal.configentry.SamenessGroup.Members:type_name -> hashicorp.consul.internal.configentry.SamenessGroupMember + 126, // 149: hashicorp.consul.internal.configentry.SamenessGroup.Meta:type_name -> hashicorp.consul.internal.configentry.SamenessGroup.MetaEntry + 128, // 150: hashicorp.consul.internal.configentry.SamenessGroup.EnterpriseMeta:type_name -> hashicorp.consul.internal.common.EnterpriseMeta + 92, // 151: hashicorp.consul.internal.configentry.JWTProvider.JSONWebKeySet:type_name -> hashicorp.consul.internal.configentry.JSONWebKeySet + 101, // 152: hashicorp.consul.internal.configentry.JWTProvider.Locations:type_name -> hashicorp.consul.internal.configentry.JWTLocation + 105, // 153: hashicorp.consul.internal.configentry.JWTProvider.Forwarding:type_name -> hashicorp.consul.internal.configentry.JWTForwardingConfig + 106, // 154: hashicorp.consul.internal.configentry.JWTProvider.CacheConfig:type_name -> hashicorp.consul.internal.configentry.JWTCacheConfig + 127, // 155: hashicorp.consul.internal.configentry.JWTProvider.Meta:type_name -> hashicorp.consul.internal.configentry.JWTProvider.MetaEntry + 93, // 156: hashicorp.consul.internal.configentry.JSONWebKeySet.Local:type_name -> hashicorp.consul.internal.configentry.LocalJWKS + 94, // 157: hashicorp.consul.internal.configentry.JSONWebKeySet.Remote:type_name -> hashicorp.consul.internal.configentry.RemoteJWKS + 130, // 158: hashicorp.consul.internal.configentry.RemoteJWKS.CacheDuration:type_name -> google.protobuf.Duration + 99, // 159: hashicorp.consul.internal.configentry.RemoteJWKS.RetryPolicy:type_name -> hashicorp.consul.internal.configentry.JWKSRetryPolicy + 95, // 160: hashicorp.consul.internal.configentry.RemoteJWKS.JWKSCluster:type_name -> hashicorp.consul.internal.configentry.JWKSCluster + 96, // 161: hashicorp.consul.internal.configentry.JWKSCluster.TLSCertificates:type_name -> hashicorp.consul.internal.configentry.JWKSTLSCertificate + 130, // 162: hashicorp.consul.internal.configentry.JWKSCluster.ConnectTimeout:type_name -> google.protobuf.Duration + 97, // 163: hashicorp.consul.internal.configentry.JWKSTLSCertificate.CaCertificateProviderInstance:type_name -> hashicorp.consul.internal.configentry.JWKSTLSCertProviderInstance + 98, // 164: hashicorp.consul.internal.configentry.JWKSTLSCertificate.TrustedCA:type_name -> hashicorp.consul.internal.configentry.JWKSTLSCertTrustedCA + 100, // 165: hashicorp.consul.internal.configentry.JWKSRetryPolicy.RetryPolicyBackOff:type_name -> hashicorp.consul.internal.configentry.RetryPolicyBackOff + 130, // 166: hashicorp.consul.internal.configentry.RetryPolicyBackOff.BaseInterval:type_name -> google.protobuf.Duration + 130, // 167: hashicorp.consul.internal.configentry.RetryPolicyBackOff.MaxInterval:type_name -> google.protobuf.Duration + 102, // 168: hashicorp.consul.internal.configentry.JWTLocation.Header:type_name -> hashicorp.consul.internal.configentry.JWTLocationHeader + 103, // 169: hashicorp.consul.internal.configentry.JWTLocation.QueryParam:type_name -> hashicorp.consul.internal.configentry.JWTLocationQueryParam + 104, // 170: hashicorp.consul.internal.configentry.JWTLocation.Cookie:type_name -> hashicorp.consul.internal.configentry.JWTLocationCookie + 19, // 171: hashicorp.consul.internal.configentry.ServiceResolver.SubsetsEntry.value:type_name -> hashicorp.consul.internal.configentry.ServiceResolverSubset + 21, // 172: hashicorp.consul.internal.configentry.ServiceResolver.FailoverEntry.value:type_name -> hashicorp.consul.internal.configentry.ServiceResolverFailover + 70, // 173: hashicorp.consul.internal.configentry.BoundAPIGateway.ServicesEntry.value:type_name -> hashicorp.consul.internal.configentry.ListOfResourceReference + 174, // [174:174] is the sub-list for method output_type + 174, // [174:174] is the sub-list for method input_type + 174, // [174:174] is the sub-list for extension type_name + 174, // [174:174] is the sub-list for extension extendee + 0, // [0:174] is the sub-list for field type_name } func init() { file_private_pbconfigentry_config_entry_proto_init() } @@ -10355,7 +10437,7 @@ func file_private_pbconfigentry_config_entry_proto_init() { } } file_private_pbconfigentry_config_entry_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BoundAPIGatewayListener); i { + switch v := v.(*ListOfResourceReference); i { case 0: return &v.state case 1: @@ -10367,7 +10449,7 @@ func file_private_pbconfigentry_config_entry_proto_init() { } } file_private_pbconfigentry_config_entry_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InlineCertificate); i { + switch v := v.(*BoundAPIGatewayListener); i { case 0: return &v.state case 1: @@ -10379,7 +10461,7 @@ func file_private_pbconfigentry_config_entry_proto_init() { } } file_private_pbconfigentry_config_entry_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HTTPRoute); i { + switch v := v.(*InlineCertificate); i { case 0: return &v.state case 1: @@ -10391,7 +10473,7 @@ func file_private_pbconfigentry_config_entry_proto_init() { } } file_private_pbconfigentry_config_entry_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HTTPRouteRule); i { + switch v := v.(*HTTPRoute); i { case 0: return &v.state case 1: @@ -10403,7 +10485,7 @@ func file_private_pbconfigentry_config_entry_proto_init() { } } file_private_pbconfigentry_config_entry_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HTTPMatch); i { + switch v := v.(*HTTPRouteRule); i { case 0: return &v.state case 1: @@ -10415,7 +10497,7 @@ func file_private_pbconfigentry_config_entry_proto_init() { } } file_private_pbconfigentry_config_entry_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HTTPHeaderMatch); i { + switch v := v.(*HTTPMatch); i { case 0: return &v.state case 1: @@ -10427,7 +10509,7 @@ func file_private_pbconfigentry_config_entry_proto_init() { } } file_private_pbconfigentry_config_entry_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HTTPPathMatch); i { + switch v := v.(*HTTPHeaderMatch); i { case 0: return &v.state case 1: @@ -10439,7 +10521,7 @@ func file_private_pbconfigentry_config_entry_proto_init() { } } file_private_pbconfigentry_config_entry_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HTTPQueryMatch); i { + switch v := v.(*HTTPPathMatch); i { case 0: return &v.state case 1: @@ -10451,7 +10533,7 @@ func file_private_pbconfigentry_config_entry_proto_init() { } } file_private_pbconfigentry_config_entry_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HTTPFilters); i { + switch v := v.(*HTTPQueryMatch); i { case 0: return &v.state case 1: @@ -10463,7 +10545,7 @@ func file_private_pbconfigentry_config_entry_proto_init() { } } file_private_pbconfigentry_config_entry_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HTTPResponseFilters); i { + switch v := v.(*HTTPFilters); i { case 0: return &v.state case 1: @@ -10475,7 +10557,7 @@ func file_private_pbconfigentry_config_entry_proto_init() { } } file_private_pbconfigentry_config_entry_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*URLRewrite); i { + switch v := v.(*HTTPResponseFilters); i { case 0: return &v.state case 1: @@ -10487,7 +10569,7 @@ func file_private_pbconfigentry_config_entry_proto_init() { } } file_private_pbconfigentry_config_entry_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RetryFilter); i { + switch v := v.(*URLRewrite); i { case 0: return &v.state case 1: @@ -10499,7 +10581,7 @@ func file_private_pbconfigentry_config_entry_proto_init() { } } file_private_pbconfigentry_config_entry_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TimeoutFilter); i { + switch v := v.(*RetryFilter); i { case 0: return &v.state case 1: @@ -10511,7 +10593,7 @@ func file_private_pbconfigentry_config_entry_proto_init() { } } file_private_pbconfigentry_config_entry_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*JWTFilter); i { + switch v := v.(*TimeoutFilter); i { case 0: return &v.state case 1: @@ -10523,7 +10605,7 @@ func file_private_pbconfigentry_config_entry_proto_init() { } } file_private_pbconfigentry_config_entry_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HTTPHeaderFilter); i { + switch v := v.(*JWTFilter); i { case 0: return &v.state case 1: @@ -10535,7 +10617,7 @@ func file_private_pbconfigentry_config_entry_proto_init() { } } file_private_pbconfigentry_config_entry_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HTTPService); i { + switch v := v.(*HTTPHeaderFilter); i { case 0: return &v.state case 1: @@ -10547,7 +10629,7 @@ func file_private_pbconfigentry_config_entry_proto_init() { } } file_private_pbconfigentry_config_entry_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TCPRoute); i { + switch v := v.(*HTTPService); i { case 0: return &v.state case 1: @@ -10559,7 +10641,7 @@ func file_private_pbconfigentry_config_entry_proto_init() { } } file_private_pbconfigentry_config_entry_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TCPService); i { + switch v := v.(*TCPRoute); i { case 0: return &v.state case 1: @@ -10571,7 +10653,7 @@ func file_private_pbconfigentry_config_entry_proto_init() { } } file_private_pbconfigentry_config_entry_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SamenessGroup); i { + switch v := v.(*TCPService); i { case 0: return &v.state case 1: @@ -10583,7 +10665,7 @@ func file_private_pbconfigentry_config_entry_proto_init() { } } file_private_pbconfigentry_config_entry_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SamenessGroupMember); i { + switch v := v.(*SamenessGroup); i { case 0: return &v.state case 1: @@ -10595,7 +10677,7 @@ func file_private_pbconfigentry_config_entry_proto_init() { } } file_private_pbconfigentry_config_entry_proto_msgTypes[79].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*JWTProvider); i { + switch v := v.(*SamenessGroupMember); i { case 0: return &v.state case 1: @@ -10607,7 +10689,7 @@ func file_private_pbconfigentry_config_entry_proto_init() { } } file_private_pbconfigentry_config_entry_proto_msgTypes[80].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*JSONWebKeySet); i { + switch v := v.(*JWTProvider); i { case 0: return &v.state case 1: @@ -10619,7 +10701,7 @@ func file_private_pbconfigentry_config_entry_proto_init() { } } file_private_pbconfigentry_config_entry_proto_msgTypes[81].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LocalJWKS); i { + switch v := v.(*JSONWebKeySet); i { case 0: return &v.state case 1: @@ -10631,7 +10713,7 @@ func file_private_pbconfigentry_config_entry_proto_init() { } } file_private_pbconfigentry_config_entry_proto_msgTypes[82].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RemoteJWKS); i { + switch v := v.(*LocalJWKS); i { case 0: return &v.state case 1: @@ -10643,7 +10725,7 @@ func file_private_pbconfigentry_config_entry_proto_init() { } } file_private_pbconfigentry_config_entry_proto_msgTypes[83].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*JWKSCluster); i { + switch v := v.(*RemoteJWKS); i { case 0: return &v.state case 1: @@ -10655,7 +10737,7 @@ func file_private_pbconfigentry_config_entry_proto_init() { } } file_private_pbconfigentry_config_entry_proto_msgTypes[84].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*JWKSTLSCertificate); i { + switch v := v.(*JWKSCluster); i { case 0: return &v.state case 1: @@ -10667,7 +10749,7 @@ func file_private_pbconfigentry_config_entry_proto_init() { } } file_private_pbconfigentry_config_entry_proto_msgTypes[85].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*JWKSTLSCertProviderInstance); i { + switch v := v.(*JWKSTLSCertificate); i { case 0: return &v.state case 1: @@ -10679,7 +10761,7 @@ func file_private_pbconfigentry_config_entry_proto_init() { } } file_private_pbconfigentry_config_entry_proto_msgTypes[86].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*JWKSTLSCertTrustedCA); i { + switch v := v.(*JWKSTLSCertProviderInstance); i { case 0: return &v.state case 1: @@ -10691,7 +10773,7 @@ func file_private_pbconfigentry_config_entry_proto_init() { } } file_private_pbconfigentry_config_entry_proto_msgTypes[87].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*JWKSRetryPolicy); i { + switch v := v.(*JWKSTLSCertTrustedCA); i { case 0: return &v.state case 1: @@ -10703,7 +10785,7 @@ func file_private_pbconfigentry_config_entry_proto_init() { } } file_private_pbconfigentry_config_entry_proto_msgTypes[88].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RetryPolicyBackOff); i { + switch v := v.(*JWKSRetryPolicy); i { case 0: return &v.state case 1: @@ -10715,7 +10797,7 @@ func file_private_pbconfigentry_config_entry_proto_init() { } } file_private_pbconfigentry_config_entry_proto_msgTypes[89].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*JWTLocation); i { + switch v := v.(*RetryPolicyBackOff); i { case 0: return &v.state case 1: @@ -10727,7 +10809,7 @@ func file_private_pbconfigentry_config_entry_proto_init() { } } file_private_pbconfigentry_config_entry_proto_msgTypes[90].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*JWTLocationHeader); i { + switch v := v.(*JWTLocation); i { case 0: return &v.state case 1: @@ -10739,7 +10821,7 @@ func file_private_pbconfigentry_config_entry_proto_init() { } } file_private_pbconfigentry_config_entry_proto_msgTypes[91].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*JWTLocationQueryParam); i { + switch v := v.(*JWTLocationHeader); i { case 0: return &v.state case 1: @@ -10751,7 +10833,7 @@ func file_private_pbconfigentry_config_entry_proto_init() { } } file_private_pbconfigentry_config_entry_proto_msgTypes[92].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*JWTLocationCookie); i { + switch v := v.(*JWTLocationQueryParam); i { case 0: return &v.state case 1: @@ -10763,7 +10845,7 @@ func file_private_pbconfigentry_config_entry_proto_init() { } } file_private_pbconfigentry_config_entry_proto_msgTypes[93].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*JWTForwardingConfig); i { + switch v := v.(*JWTLocationCookie); i { case 0: return &v.state case 1: @@ -10775,6 +10857,18 @@ func file_private_pbconfigentry_config_entry_proto_init() { } } file_private_pbconfigentry_config_entry_proto_msgTypes[94].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*JWTForwardingConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_private_pbconfigentry_config_entry_proto_msgTypes[95].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*JWTCacheConfig); i { case 0: return &v.state @@ -10807,7 +10901,7 @@ func file_private_pbconfigentry_config_entry_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_private_pbconfigentry_config_entry_proto_rawDesc, NumEnums: 11, - NumMessages: 115, + NumMessages: 117, NumExtensions: 0, NumServices: 0, }, diff --git a/proto/private/pbconfigentry/config_entry.proto b/proto/private/pbconfigentry/config_entry.proto index b5143774eeb6b..3594f46f0f83e 100644 --- a/proto/private/pbconfigentry/config_entry.proto +++ b/proto/private/pbconfigentry/config_entry.proto @@ -809,6 +809,12 @@ message ResourceReference { message BoundAPIGateway { map Meta = 1; repeated BoundAPIGatewayListener Listeners = 2; + // mog: func-to=serviceRefsToStructs func-from=serviceRefFromStructs + map Services = 3; +} + +message ListOfResourceReference { + repeated ResourceReference Ref = 1; } // mog annotation: diff --git a/proto/private/pbconnect/connect.pb.go b/proto/private/pbconnect/connect.pb.go index 72fce82238c97..c8668ebb94320 100644 --- a/proto/private/pbconnect/connect.pb.go +++ b/proto/private/pbconnect/connect.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: private/pbconnect/connect.proto diff --git a/proto/private/pbdemo/v1/demo.pb.go b/proto/private/pbdemo/v1/demo.pb.go index cb3e2b8cd3ff2..2cbf9ea8d15e9 100644 --- a/proto/private/pbdemo/v1/demo.pb.go +++ b/proto/private/pbdemo/v1/demo.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: private/pbdemo/v1/demo.proto diff --git a/proto/private/pbdemo/v2/demo.pb.go b/proto/private/pbdemo/v2/demo.pb.go index a4c52a99d6a6c..9d9a7053a7f24 100644 --- a/proto/private/pbdemo/v2/demo.pb.go +++ b/proto/private/pbdemo/v2/demo.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: private/pbdemo/v2/demo.proto diff --git a/proto/private/pboperator/operator.pb.go b/proto/private/pboperator/operator.pb.go index e7e457bc7389e..b21726ae4e088 100644 --- a/proto/private/pboperator/operator.pb.go +++ b/proto/private/pboperator/operator.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: private/pboperator/operator.proto diff --git a/proto/private/pbpeering/peering.pb.go b/proto/private/pbpeering/peering.pb.go index a0c7bd21676d2..643f3cc279b76 100644 --- a/proto/private/pbpeering/peering.pb.go +++ b/proto/private/pbpeering/peering.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: private/pbpeering/peering.proto diff --git a/proto/private/pbpeerstream/peerstream.pb.go b/proto/private/pbpeerstream/peerstream.pb.go index aeb1bdb22082f..2fb0acf7dbd02 100644 --- a/proto/private/pbpeerstream/peerstream.pb.go +++ b/proto/private/pbpeerstream/peerstream.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: private/pbpeerstream/peerstream.proto diff --git a/proto/private/pbservice/healthcheck.pb.go b/proto/private/pbservice/healthcheck.pb.go index 0392fd77455be..33080ae2dffcb 100644 --- a/proto/private/pbservice/healthcheck.pb.go +++ b/proto/private/pbservice/healthcheck.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: private/pbservice/healthcheck.proto diff --git a/proto/private/pbservice/node.pb.go b/proto/private/pbservice/node.pb.go index 3d562fe31f716..05975fad01076 100644 --- a/proto/private/pbservice/node.pb.go +++ b/proto/private/pbservice/node.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: private/pbservice/node.proto diff --git a/proto/private/pbservice/service.pb.go b/proto/private/pbservice/service.pb.go index 871b6a04118cd..9001dee33e297 100644 --- a/proto/private/pbservice/service.pb.go +++ b/proto/private/pbservice/service.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: private/pbservice/service.proto diff --git a/proto/private/pbstatus/status.pb.go b/proto/private/pbstatus/status.pb.go index ce1658b68cc0e..3768ad4d783e9 100644 --- a/proto/private/pbstatus/status.pb.go +++ b/proto/private/pbstatus/status.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: private/pbstatus/status.proto diff --git a/proto/private/pbstorage/raft.pb.go b/proto/private/pbstorage/raft.pb.go index 6efa5c8f8fb10..c8b6a6d6162fd 100644 --- a/proto/private/pbstorage/raft.pb.go +++ b/proto/private/pbstorage/raft.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: private/pbstorage/raft.proto diff --git a/proto/private/pbsubscribe/subscribe.pb.go b/proto/private/pbsubscribe/subscribe.pb.go index 93dcf9c21c230..485be62bad3fa 100644 --- a/proto/private/pbsubscribe/subscribe.pb.go +++ b/proto/private/pbsubscribe/subscribe.pb.go @@ -6,7 +6,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.31.0 // protoc (unknown) // source: private/pbsubscribe/subscribe.proto diff --git a/sdk/iptables/iptables.go b/sdk/iptables/iptables.go index ad81946551216..32f089a6c9a82 100644 --- a/sdk/iptables/iptables.go +++ b/sdk/iptables/iptables.go @@ -78,11 +78,8 @@ type Provider interface { // ApplyRules executes rules that have been added via AddRule. // This operation is currently not atomic, and if there's an error applying rules, // you may be left in a state where partial rules were applied. - // ApplyRules should not be called twice on the same instance in order to avoid - // duplicate rule application. ApplyRules() error - // Rules returns the list of rules that have been added (including those not yet - // applied). + // Rules returns the list of rules that have been added but not applied yet. Rules() []string } diff --git a/test/integration/consul-container/go.mod b/test/integration/consul-container/go.mod index 18af2c9954bd5..034722c074db7 100644 --- a/test/integration/consul-container/go.mod +++ b/test/integration/consul-container/go.mod @@ -55,7 +55,6 @@ require ( github.com/containerd/containerd v1.7.3 // indirect github.com/cpuguy83/dockercfg v0.3.1 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect - github.com/deckarep/golang-set/v2 v2.3.1 // indirect github.com/docker/distribution v2.8.2+incompatible // indirect github.com/docker/go-units v0.5.0 // indirect github.com/envoyproxy/go-control-plane v0.11.1 // indirect diff --git a/test/integration/consul-container/go.sum b/test/integration/consul-container/go.sum index be31c2f43ab27..9443bb1e74324 100644 --- a/test/integration/consul-container/go.sum +++ b/test/integration/consul-container/go.sum @@ -116,8 +116,6 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/deckarep/golang-set/v2 v2.3.1 h1:vjmkvJt/IV27WXPyYQpAh4bRyWJc5Y435D17XQ9QU5A= -github.com/deckarep/golang-set/v2 v2.3.1/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/docker v24.0.5+incompatible h1:WmgcE4fxyI6EEXxBRxsHnZXrO1pQ3smi0k/jho4HLeY= diff --git a/test/key/ourdomain_with_intermediate.cer b/test/key/ourdomain_with_intermediate.cer new file mode 100644 index 0000000000000..8aa55e500c8a3 --- /dev/null +++ b/test/key/ourdomain_with_intermediate.cer @@ -0,0 +1,50 @@ +-----BEGIN CERTIFICATE----- +MIIETTCCAzWgAwIBAgIBKDANBgkqhkiG9w0BAQ0FADCBmDELMAkGA1UEBhMCVVMx +CzAJBgNVBAgMAkNBMRYwFAYDVQQHDA1TYW4gRnJhbmNpc2NvMRwwGgYDVQQKDBNI +YXNoaUNvcnAgVGVzdCBDZXJ0MQwwCgYDVQQLDANEZXYxFjAUBgNVBAMMDXRlc3Qu +aW50ZXJuYWwxIDAeBgkqhkiG9w0BCQEWEXRlc3RAaW50ZXJuYWwuY29tMCAXDTIz +MTEwMjE3MjAxNloYDzIxMjMxMDA5MTcyMDE2WjCBjTEYMBYGA1UEAwwPdGVzdGNv +LmludGVybmFsMRMwEQYDVQQIDApDYWxpZm9ybmlhMQswCQYDVQQGEwJVUzEpMCcG +CSqGSIb3DQEJARYaZG8tbm90LXJlcGx5QGhhc2hpY29ycC5jb20xEjAQBgNVBAoM +CUVuZCBQb2ludDEQMA4GA1UECwwHVGVzdGluZzCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBAOR5UJpDbgTsIgDNF6/fcafrPYTZlJnvMmYGxgPBH7lV2qqI +64yDE03++lLIOwPy8p0JHgCeoCsxRKhOXjaaBjOi3QGQFUU6rl/v8IZFsUo9NIyS +JJttiJaZCTjzgSZri3PdOHAClP5zF1/aAhTmNf326vAxqkn2MI8yglorOq+CSlOM +6p9nUGRAsoSvfjmz1vYDoyf4T0ZCUU+ieQ9KbcSVSrMip+r/CekfXglfIygfA+dx +dSK2Ivp0YjQbsnGEueDOaXMd2HX6Fh93K7IuvGKF2fAHHNl92uhnkbe63aJ7ZYgO +ftHKvVZFgq6cFFccAuI9qJlk6mo8P+m1ZNfv3dsCAwEAAaOBqDCBpTAJBgNVHRME +AjAAMB0GA1UdDgQWBBTxigs6/Ob0ULZZeeWqgTrxhfwQRDAfBgNVHSMEGDAWgBTm +rmqnZIdFOj6vhCUAJKLZNUDwFDALBgNVHQ8EBAMCBaAwHQYDVR0lBBYwFAYIKwYB +BQUHAwEGCCsGAQUFBwMCMCwGA1UdHwQlMCMwIaAfoB2GG2h0dHA6Ly9wYXRoLnRv +LmNybC9teWNhLmNybDANBgkqhkiG9w0BAQ0FAAOCAQEAXS69n70i8mdd2KpUtuVQ +TqCZPggLJ0ctSzSOVFz3ZFMTg50g3bvMZaK3jdwpL8GH7tMjEZANFaM/QNAJWMVb +pc0UD1UxdqahNj40I5V5RL/ocYZbzCVcNi6Y5Z9skROHS6/j4OsvCseYRkpVGMkE +x9bcWJ/cRfLmK9CO8MUrq8gCPYBA1av/uMAot7aT+2rLLcduF5bKuBGGTccVQ01x +5h+2bmFj8jxpju39HPGvZ7mnOqseVKhbKwE87vxirccM4UkwJDmWNuL7pX4CvwHi +aDtzDHJws/WPduT/r4eaXjMat7CF42tLP+w4FWNJH/P3UAzHPaPq2i2eHmCcuw4A +eA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEEzCCAvugAwIBAgIUIYIXKNRBFBPuuOit2D2CfVJAoDAwDQYJKoZIhvcNAQEL +BQAwgZgxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTEWMBQGA1UEBwwNU2FuIEZy +YW5jaXNjbzEcMBoGA1UECgwTSGFzaGlDb3JwIFRlc3QgQ2VydDEMMAoGA1UECwwD +RGV2MRYwFAYDVQQDDA10ZXN0LmludGVybmFsMSAwHgYJKoZIhvcNAQkBFhF0ZXN0 +QGludGVybmFsLmNvbTAeFw0yMzExMDIxNTUwMjlaFw0zMzEwMzAxNTUwMjlaMIGY +MQswCQYDVQQGEwJVUzELMAkGA1UECAwCQ0ExFjAUBgNVBAcMDVNhbiBGcmFuY2lz +Y28xHDAaBgNVBAoME0hhc2hpQ29ycCBUZXN0IENlcnQxDDAKBgNVBAsMA0RldjEW +MBQGA1UEAwwNdGVzdC5pbnRlcm5hbDEgMB4GCSqGSIb3DQEJARYRdGVzdEBpbnRl +cm5hbC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCIA00iG5Iv +eRzZwf2P1Laih3eoiK2Wl1Re22cz2Pcpf6gb7agPguwU5Hco0DWzsnmek2Qyw9gl +oroX1t7LbTW2rxbK1hP7PkFCwSxi9u8MZDaLF3a79bwbsYZzf3toeoz8DCBxo9bB +SSACj4uI/S+lUjMctQrK1nFjGoNUHfxioXPwIJH+TS/76TiZPu3Zj6kN6taVFNe3 +ISBNXW6Vg8E3koz+9Bwv0a6Ty7oFRoJXpsud1k/83Iy288jhYDuB56+ypUmcCNqG +T+e0Bn/VXHx26GXTx97cXSLJE+o+JrHZaI1TcQUL2Z5DJZVJRUg/wtcXggoMLVI1 +O0enJm2jdmLXAgMBAAGjUzBRMB0GA1UdDgQWBBTmrmqnZIdFOj6vhCUAJKLZNUDw +FDAfBgNVHSMEGDAWgBTmrmqnZIdFOj6vhCUAJKLZNUDwFDAPBgNVHRMBAf8EBTAD +AQH/MA0GCSqGSIb3DQEBCwUAA4IBAQB3j6gvalxq54hZSwVmVZPMzjdTVYRC11b0 +6C9pWKsLwu+WINcs59ui8wpYVjcw1AK4/2I1Q7P4RgpSarAxG5tYIMB1xcfFKqBn +f/dDXexONgwpW6SoBJ58c7OB/aH8CenDT8Vwk3fwjYslOywbFRqBjH+PB8uTlu0e +D1fzjpcQCrQeA5VD4pjJAaTmi7bLVuH5XIya3++f/N3xOn53GVMUDO1OdFz8ZMvJ +Wrrg7E/wMXB1b5Wo2n2ypVU4sejikSjg2nfdLojUWGMrZ8TuUnjFs88PeQ9CObAp +A36dLfs4JLF3sVOtqTd6BGwegDsmmllYO5Ky6I+laoLSHpGDEihS +-----END CERTIFICATE----- diff --git a/testing/deployer/go.mod b/testing/deployer/go.mod index d091194242c97..e79223effb607 100644 --- a/testing/deployer/go.mod +++ b/testing/deployer/go.mod @@ -6,8 +6,8 @@ require ( github.com/avast/retry-go v3.0.0+incompatible github.com/google/go-cmp v0.5.9 github.com/hashicorp/consul-server-connection-manager v0.1.4 - github.com/hashicorp/consul/api v1.26.1 - github.com/hashicorp/consul/proto-public v0.5.1 + github.com/hashicorp/consul/api v1.24.0 + github.com/hashicorp/consul/proto-public v0.1.0 github.com/hashicorp/consul/sdk v0.15.0 github.com/hashicorp/go-cleanhttp v0.5.2 github.com/hashicorp/go-hclog v1.5.0 diff --git a/testing/deployer/topology/compile.go b/testing/deployer/topology/compile.go index 2f1761e15b274..7698de7465c2f 100644 --- a/testing/deployer/topology/compile.go +++ b/testing/deployer/topology/compile.go @@ -273,7 +273,7 @@ func compile(logger hclog.Logger, raw *Config, prev *Topology) (*Topology, error n.Index = nextIndex nextIndex++ - n.Images = c.Images.OverrideWith(n.Images.ChooseConsul(c.Enterprise)).ChooseNode(n.Kind) + n.Images = c.Images.OverrideWith(n.Images).ChooseNode(n.Kind) n.Cluster = c.Name n.Datacenter = c.Datacenter diff --git a/testing/deployer/topology/images.go b/testing/deployer/topology/images.go index a41adf550452e..b8e1ebce6aded 100644 --- a/testing/deployer/topology/images.go +++ b/testing/deployer/topology/images.go @@ -8,12 +8,8 @@ import ( ) type Images struct { - // Consul is the image used for creating the container, - // Use ChooseConsul() to control which image (ConsulCE or ConsulEnterprise) assign to Consul - Consul string `json:",omitempty"` - // ConsulCE sets the CE image - ConsulCE string `json:",omitempty"` - // ConsulEnterprise sets the ent image + Consul string `json:",omitempty"` + ConsulCE string `json:",omitempty"` ConsulEnterprise string `json:",omitempty"` Envoy string Dataplane string @@ -84,7 +80,6 @@ func (i Images) ChooseNode(kind NodeKind) Images { return i } -// ChooseConsul controls which image assigns to Consul func (i Images) ChooseConsul(enterprise bool) Images { if enterprise { i.Consul = i.ConsulEnterprise diff --git a/tlsutil/config.go b/tlsutil/config.go index 5cba2597f19d7..2e2adcad98c27 100644 --- a/tlsutil/config.go +++ b/tlsutil/config.go @@ -183,6 +183,18 @@ type protocolConfig struct { useAutoCert bool } +// ConfiguratorIface is the interface for the Configurator +type ConfiguratorIface interface { + Base() Config + Cert() *tls.Certificate + ManualCAPems() []string + + VerifyIncomingRPC() bool + VerifyServerHostname() bool +} + +var _ ConfiguratorIface = (*Configurator)(nil) + // Configurator provides tls.Config and net.Dial wrappers to enable TLS for // clients and servers, for internal RPC, and external gRPC and HTTPS connections. // diff --git a/tlsutil/mock.go b/tlsutil/mock.go new file mode 100644 index 0000000000000..55e98eec26691 --- /dev/null +++ b/tlsutil/mock.go @@ -0,0 +1,37 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: BUSL-1.1 + +package tlsutil + +import "crypto/tls" + +var _ ConfiguratorIface = (*MockConfigurator)(nil) + +// MockConfigurator is used for mocking the ConfiguratorIface in testing +type MockConfigurator struct { + BaseConfig Config + TlsCert *tls.Certificate + ManualCAPemsArr []string + VerifyIncomingRPCBool bool + VerifyServerHostnameBool bool +} + +func (m MockConfigurator) Base() Config { + return m.BaseConfig +} + +func (m MockConfigurator) Cert() *tls.Certificate { + return m.TlsCert +} + +func (m MockConfigurator) ManualCAPems() []string { + return m.ManualCAPemsArr +} + +func (m MockConfigurator) VerifyIncomingRPC() bool { + return m.VerifyIncomingRPCBool +} + +func (m MockConfigurator) VerifyServerHostname() bool { + return m.VerifyServerHostnameBool +} diff --git a/ui/packages/consul-ui/app/components/topology-metrics/index.hbs b/ui/packages/consul-ui/app/components/topology-metrics/index.hbs index 46f8dc9e01d07..760d3719c040d 100644 --- a/ui/packages/consul-ui/app/components/topology-metrics/index.hbs +++ b/ui/packages/consul-ui/app/components/topology-metrics/index.hbs @@ -32,7 +32,7 @@ @hasMetricsProvider={{@hasMetricsProvider}} @noMetricsReason={{this.noMetricsReason}} > - {{#if (and @hasMetricsProvider this.mainNotIngressService (not-eq item.Kind 'ingress-gateway'))}} + {{#if (and @hasMetricsProvider this.mainNotIngressService (not-eq item.Kind 'ingress-gateway') this.mainNotAPIGatewayService (not-eq item.Kind 'api-gateway'))}} {{!-- One of the only places in the app where it's acceptable to default to 'default' namespace --}} {{@service.Service.Service}} - {{#if (not-eq @service.Service.Meta.external-source 'consul-api-gateway')}} + {{#if (not (and (eq @service.Service.Meta.external-source 'consul-api-gateway') (eq @service.Service.Kind 'ingress-gateway'))) }} {{#if @hasMetricsProvider}} - {{#if this.mainNotIngressService}} + {{#if (or (this.mainNotIngressService) (this.mainNotAPIGatewayService))}} ` - Name to bind on match. Can use `${var}` interpolation. This flag is required. -- `-bind-type=` - Type of binding to perform (`"service"`, `"node"`, `"templated-policy"`, `"policy"` or `"role"`). +- `-bind-type=` - Type of binding to perform (`"service"` or `"role"`). - `-description=` - A description of the binding rule. @@ -90,35 +90,3 @@ BindType: role BindName: vault Selector: serviceaccount.namespace==default and serviceaccount.name==vault ``` - -Create a new binding rule that binds to a policy: - -```shell-session -$ consul acl binding-rule create -method 'nomad' \ - -description 'gets policy for nomad job' \ - -bind-type 'policy' \ - -bind-name 'nomad-${nomad.jobname}' \ - -selector 'nomad.jobname==billing-app' -ID: e21ae868-7b13-a230-0235-f8e83510642c -AuthMethod: nomad -Description: gets policy for nomad job -BindType: policy -BindName: nomad-billing-app -Selector: nomad.jobname==billing-app -``` - -Create a new binding rule that binds to a templated policy: - -```shell-session -$ consul acl binding-rule create -method 'remote-jwks' \ - -description 'gets templated policy for dns tokens' \ - -bind-type 'templated-policy' \ - -bind-name 'builtin/dns' \ - -selector 'serviceaccount.namespace==default' -ID: eaca9aa4-8913-c8ef-ba39-bfae64f66d99 -AuthMethod: remote-jwks -Description: gets templated policy for dns tokens -BindType: templated-policy -BindName: builtin/dns -Selector: serviceaccount.namespace==default -``` \ No newline at end of file diff --git a/website/content/commands/acl/binding-rule/update.mdx b/website/content/commands/acl/binding-rule/update.mdx index e33b7e026da5c..24f690129433e 100644 --- a/website/content/commands/acl/binding-rule/update.mdx +++ b/website/content/commands/acl/binding-rule/update.mdx @@ -33,7 +33,7 @@ Usage: `consul acl binding-rule update [options] [args]` - `-bind-name=` - Name to bind on match. Can use `${var}` interpolation. This flag is required. -- `-bind-type=` - Type of binding to perform (`"service"`, `"node"`, `"templated-policy"`, `"policy"` or `"role"`). +- `-bind-type=` - Type of binding to perform (`"service"` or `"role"`). - `-description=` - A description of the binding rule. diff --git a/website/content/docs/architecture/catalog/v2.mdx b/website/content/docs/architecture/catalog/v2.mdx index c18255fa9ee3b..aa646d1bd0d69 100644 --- a/website/content/docs/architecture/catalog/v2.mdx +++ b/website/content/docs/architecture/catalog/v2.mdx @@ -10,7 +10,7 @@ description: Learn about version 2 of the Consul catalog, which uses GAMMA speci The v2 catalog API is in a beta release for testing and development purposes. Do not use the v2 catalog or multi-port services in secure production environments. -This topic provides conceptual information about version 2 (v2) of the Consul catalog API. The catalog tracks registered services and their locations for both service discovery and service mesh use cases +This topic provides information about version 2 (v2) of the Consul catalog API. The catalog tracks registered services and their locations for both service discovery and service mesh use cases. Consul supports the v2 catalog for service mesh use cases on Kubernetes deployments only. For more information about Consul’s default catalog, refer to [v1 Catalog API](/consul/docs/architecture/catalog/v1). @@ -22,38 +22,71 @@ When Consul registers services, it records [user-defined and Consul-assigned inf - Locations of the _nodes_ the instances run on - Names of the _services_ the instances are associated with -This information enables Consul to associate service names with the individual instances and their unique network addresses, and it is essential to Consul’s service discovery and service mesh operations. +This information enables Consul to associate service names with the individual instances and their unique network addresses, which makes it essential to Consul’s service discovery and service mesh operations. -The [Consul v1 catalog API](/consul/docs/architecture/catalog/v1) was designed prior to the introduction of Consul’s service mesh features. Communication in Consul’s service mesh is secured through Consul's ACL system, which requires that a Kubernetes ServiceAccount resource match the Service name. As a result, only one service can represent a service instance in the v1 catalog. +The [Consul v1 catalog API](/consul/docs/architecture/catalog/v1) was designed prior to the introduction of Consul’s service mesh features. One major implication of this design is that communication in Consul’s service mesh is secured through Consul's ACL system, which requires that a Kubernetes ServiceAccount resource match the Service name. As a result, only one Kubernetes Service can represent a service instance in the v1 catalog. -The v2 catalog API aligns more closely with the [Kubernetes Gateway API's GAMMA initiative](https://gateway-api.sigs.k8s.io/concepts/gamma/), enabling functionality such as associating Kubernetes Pods with multiple Kubernetes Services and allowing Services and Pods registered with Consul to have multiple ports. For more information about how the differences between the catalog API impacts Consul operations, refer to [changes to Consul's existing architecture](#changes-to-consul-s-existing-architecture). +The v2 catalog API aligns more closely with the [Kubernetes Gateway API's GAMMA initiative](https://gateway-api.sigs.k8s.io/concepts/gamma/), which conceptualizes a Kubernetes Service as having two facets: + +- The Service _front end_ is a combination of cluster IP and DNS name +- The Service _back end_ is a collection of endpoint IPs + +For more information about the differences between the two facets and their impact on how Kubernetes directs requests, refer to [The Different Facets of a Service](https://gateway-api.sigs.k8s.io/concepts/service-facets/) in the Kubernetes documentation. + +Consul's v2 catalog API makes a similar distinction, enabling it associate Kubernetes Pods with multiple Kubernetes Services. As a direct result of this change in catalog structure, Consul can register Services and Pods with multiple ports. For more information about how the differences between the catalog API impacts other Consul operations, refer to [changes to Consul's existing architecture](#changes-to-consul-s-existing-architecture). The v2 catalog API is available alongside the existing v1 catalog API, but the catalogs cannot be used simultaneously. The v2 catalog is disabled by default. This beta release is for testing and development purposes only. We do not recommend implementing v2 in production environments or migrating to v2 until the API is generally available. ## Catalog structure -Consul v1.17 introduces a new version of the catalog API designed to bridge differences between the Consul and Kubernetes data models. The v2 catalog API still tracks services and nodes for Consul, but replaces service instances with _workloads_ and _workload identites_, which belong to different catalog groups. +Consul v1.17 introduces a new version of the catalog API designed to bridge differences between the Consul and Kubernetes data models. The v2 catalog API continues to track services and nodes for Consul, but it replaces service instances with _workloads_ and _workload identites_. -Traffic permissions are part of the `auth` group, and the [`TrafficPermissions` CRD](/consul/docs/k8s/multiport/reference/trafficpermissions) configures permissions according to an `identityName` that corresponds to the other resource in the `auth` group, workload identity. +### Catalog resources -The [`HTTPRoute`](/consul/docs/k8s/multiport/reference/httproute), [`GRPCRoute`](/consul/docs/k8s/multiport/reference/grpcroute), and [`TCPRoute`](/consul/docs/k8s/multiport/reference/tcproute) CRDS are part of the `mesh` group, but they include `type` blocks that use a `group.groupVersion.kind` syntax to reference Consul services. Because a service is part of the `catalog` group, these CRDs refer to services using `catalog.v2beta1.Service`. +The following table describes resources in the v2 catalog, how they generally compare to the v1 catalog and Kubernetes resources, and whether they are created by Kubernetes or computed by Consul when it registers a service. -The following table describes resources in the v2 catalog, including their `group`, how they compare to the v1 catalog and Kubernetes resources, and whether they are created by Kubernetes or computed by Consul when it registers a service. - -| Catalog v2 resource | Catalog v2 `group` | Description | Catalog v1 analogue | Kubernetes analogue | Source | -| :------------------ | :-------- | :---------- | :--------------------------- | :--------------------------- | :----- | -| Service | `catalog` | The name of the service Consul registers a workload under. | Service | [Kubernetes Service](https://kubernetes.io/docs/concepts/services-networking/service/) | Created by Kubernetes | -| Node | `catalog` | The address of the Consul node where the workload runs. | Node | [Kubernetes Node](https://kubernetes.io/docs/concepts/architecture/nodes/) | Computed by Consul | -| Workload | `catalog` | An application instance running in a set of one or more Pods scheduled according to a Kubernetes Workload resource such as a Deployment or StatefulSet. | Service instance | [Kubernetes Pod](https://kubernetes.io/docs/concepts/workloads/pods/) | Created by Kubernetes | -| Workload identity | `auth` | Provides a distinct identity for a workload to assume. Each workload identity is tied to an Envoy proxy. This identity is used when Consul generates mTLS certificates. | Service name | [Kubernetes Service Accounts](https://kubernetes.io/docs/concepts/security/service-accounts/) | Created by Kubernetes | +| Catalog v2 resource | Description | Catalog v1 analogue | Kubernetes analogue | Source | +| :------------------ | :---------- | :--------------------------- | :--------------------------- | :----- | +| Service | The name of the service Consul registers a workload under. | Service | [Kubernetes Service](https://kubernetes.io/docs/concepts/services-networking/service/) | Created by Kubernetes | +| Node | The address of the Consul node where the workload runs. | Node | [Kubernetes Node](https://kubernetes.io/docs/concepts/architecture/nodes/) | Computed by Consul | +| Workload | An application instance running in a set of one or more Pods scheduled according to a Kubernetes Workload resource such as a Deployment or StatefulSet. | Service instance | [Kubernetes Pod](https://kubernetes.io/docs/concepts/workloads/pods/) | Created by Kubernetes | +| Workload identity | Provides a distinct identity for a workload to assume. Each workload identity is tied to an Envoy proxy. This identity is used when Consul generates mTLS certificates. | Service name | [Kubernetes Service Accounts](https://kubernetes.io/docs/concepts/security/service-accounts/) | Created by Kubernetes | | Service endpoint | Maps services to workload addresses and endpoints. | None | [Kubernetes Endpoints](https://kubernetes.io/docs/reference/kubernetes-api/service-resources/endpoints-v1/) | Computed by Consul | -| Health status | `catalog` | A resource for reporting the health status of a workload. | Service instance health status | [PodStatus](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#PodStatus) | Created by Kubernetes | -| Health check | None | A resource for defining the health checks for a workload. | [Service instance health check](/consul/docs/services/usage/checks) | [Liveness, Readiness, and Startup Probes](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes) | Created by Kubernetes | -| Proxy configuration | `mesh` | Represents a configuration for a sidecar or gateway proxy. | `Proxy` field in service definition | None | Created by Kubernetes or user CRD | -| Destinations | `catalog` | Represents explicit service upstreams. When using the v1 catalog, these upstreams are configured in Helm chart as [Upstream Service annotations](/consul/docs/k8s/annotations-and-labels#consul-hashicorp-com-connect-service-upstreams) | [Proxy Configuration](/consul/docs/connect/proxies/envoy#envoy-proxy-configuration-for-service-mesh) | None | Created by Kubernetes | -| Traffic permissions | `auth` | Enables L4 traffic authorization according to workload identity instead of service identity. | [Service intentions](/consul/docs/connect/intentions) | None | Created by user CRD | +| Health status | A resource for reporting the health status of a workload. | Service instance health status | [PodStatus](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#PodStatus) | Created by Kubernetes | +| Health check | A resource for defining the health checks for a workload. | [Service instance health check](/consul/docs/services/usage/checks) | [Liveness, Readiness, and Startup Probes](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes) | Created by Kubernetes | +| Proxy configuration | Represents a configuration for a sidecar or gateway proxy. | `Proxy` field in service definition | None | Created by Kubernetes or user CRD | +| Destinations | Represents explicit service upstreams. When using the v1 catalog, these upstreams are configured in Helm chart as [Upstream Service annotations](/consul/docs/k8s/annotations-and-labels#consul-hashicorp-com-connect-service-upstreams) | [Proxy Configuration](/consul/docs/connect/proxies/envoy#envoy-proxy-configuration-for-service-mesh) | None | Created by Kubernetes | +| Traffic permissions| Enables L4 traffic authorization according to workload identity instead of service identity. | [Service intentions](/consul/docs/connect/intentions) | None | Created by user CRD | + +## Resource groups + +Each resource is part of a _resource group_. These resource groups structure Consul's ability to target either an _individual workload identity_ or an _entire collection of workload endpoints_ when managing service mesh traffic. There are three resource groups in the v2 API: + +- `auth` group: Resources apply to workload identity +- `catalog` group: Resources apply to all workloads associated with a service +- `mesh` group: Resources apply to either workload identities or all workloads + +For example, traffic permissions are part of the `auth` group. Permissions allow or deny traffic according to the other v2 catalog resource in the `auth` group, the workload identity. Meanwhile, when Consul routes service mesh traffic it applies rules to workloads based on the Service, which is a resource in the `catalog` group. + +One practical impact of resource groups is that the [HTTPRoute](/consul/docs/k8s/multiport/reference/httproute), [GRPCRoute](/consul/docs/k8s/multiport/reference/grpcroute), and [TCPRoute](/consul/docs/k8s/multiport/reference/tcproute) CRDs require you to specify a `name` and `type` in configuration blocks. The `catalog.v2beta1.Service` type indicates that the rules defined in these CRDs apply to all workloads registered in the Consul catalog under the given name. + +You can also use the `consul resource` command to return information about Consul resources in each group using a `group.groupVersion.kind` syntax. Refer to [`consul resource`](/consul/docs/k8s/multiport/reference/resource-command) for more information. + +The following table describes the Consul resources that belong to each resource group and the resource's `group.groupVersion.kind` syntax. -You can also use the `consul resource` command to return information about resources using the `group.groupVersion.kind` syntax. Refer to [`consul resource`](/consul/docs/k8s/multiport/reference/resource-command) for more information. +| Resource `group` | v2 resource | Consul resource syntax | +| :------------------ | :-------- | :---- | +| `auth` | Traffic permissions | `auth.v2beta1.TrafficPermissions` | +| `auth` | Workload identity | `auth.v2beta1.WorkloadIdentity` | +| `catalog` | Service | `catalog.v2beta1.Service` | +| `catalog` | Node | `catalog.v2beta1.Node` | +| `catalog` | Workload | `catalog.v2beta1.Workload` | +| `catalog` | Health status | `catalog.v2beta1.HealthStatus` | +| `catalog` | Destinations | `catalog.v2beta1.Destination` | +| `mesh` | GRPCRoute | `mesh.v2beta1.GRPCRoute` | +| `mesh` | HTTPRoute | `mesh.v2beta1.HTTPRoute` | +| `mesh` | Proxy configuration | `mesh.v2beta1.ProxyConfiguration` | +| `mesh` | TCPRoute | `mesh.v2beta1.TCPRoute` | ## Changes to Consul’s existing architecture diff --git a/website/content/docs/connect/gateways/api-gateway/configuration/routetimeoutfilter.mdx b/website/content/docs/connect/gateways/api-gateway/configuration/routetimeoutfilter.mdx index 3f0a5e6def6a0..4effb11e13191 100644 --- a/website/content/docs/connect/gateways/api-gateway/configuration/routetimeoutfilter.mdx +++ b/website/content/docs/connect/gateways/api-gateway/configuration/routetimeoutfilter.mdx @@ -97,18 +97,18 @@ Map that contains the details about the gateway policy. The `apiVersion`, `kind` ### `spec.idleTimeout -Specifies the total amount of time permitted for the request stream to be idle. Must specify a parseable number and a unit, for example "5s". +Specifies the total amount of time permitted for the request stream to be idle. Format the string as `""`, for example `"5s"`. Consul uses the `metav1.Duration` package to parse the value. Refer to the [Go documentation](https://pkg.go.dev/k8s.io/apimachinery/pkg/apis/meta/v1#Duration) for additional information about defining parseable values. #### Values - Default: "" -- Data type: string +- Data type: String ### `spec.requestTimeout` -Specifies the total amount of time in nanoseconds, including retry attempts, Consul permits for the entire downstream request to be processed. Must specify a parseable number and a unit, for example "5s". +Specifies the total amount of time in nanoseconds, including retry attempts, Consul permits for the entire downstream request to be processed. Format the string as `""`, for example `"5s"`. Consul uses the `metav1.Duration` package to parse the value. Refer to the [Go documentation](https://pkg.go.dev/k8s.io/apimachinery/pkg/apis/meta/v1#Duration) for additional information about defining parseable values. #### Values - Default: "" -- Data type: Integer +- Data type: String diff --git a/website/content/docs/connect/manage-traffic/route-to-local-upstreams.mdx b/website/content/docs/connect/manage-traffic/route-to-local-upstreams.mdx index baf36b8dc9b9d..b2e891734c245 100644 --- a/website/content/docs/connect/manage-traffic/route-to-local-upstreams.mdx +++ b/website/content/docs/connect/manage-traffic/route-to-local-upstreams.mdx @@ -10,10 +10,6 @@ This topic describes how to enable locality-aware routing so that Consul can pri This feature is available in Consul Enterprise. -!> **Warning**: Locality-aware routing is an advanced feature that may adversely impact service capacity if used incorrectly. By default, this feature routes 100% of traffic to the most local set of service instances, and failover only occurs when there are no healthy instances available in the most local set. You should only follow these instructions when every service within a zone has enough capacity to handle requests from downstream services within the same zone. - --> **Note**: It is possible to adjust the load balancing and failover behavior for this feature globally or per-service via the [Property Override Envoy extension](/consul/docs/connect/proxies/envoy-extensions/usage/property-override). Please familiarize with Envoy docs on [`overprovisioning_factor`](https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/endpoint/v3/endpoint.proto#config-endpoint-v3-clusterloadassignment) and [outlier detection](https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/cluster/v3/outlier_detection.proto#config-cluster-v3-outlierdetection) before attempting to modify configuration. - ## Introduction By default, Consul balances traffic to all healthy upstream instances in the cluster, even if the instances are in different network zones. You can specify the cloud service provider (CSP) locality for Consul server agents and services registered to the service mesh, which enables several benefits: @@ -21,16 +17,26 @@ By default, Consul balances traffic to all healthy upstream instances in the clu - Consul prioritizes the nearest upstream instances when routing traffic through the mesh. - When upstream service instances becomes unhealthy, Consul prioritizes failing over to instances that are in the same region as the downstream service. Refer to [Failover](/consul/docs/connect/traffic-management/failover) for additional information about failover strategies in Consul. -When properly implemented, routing traffic to local upstreams can reduce latency and transfer costs associated with sending requests to other regions. +When properly implemented, routing traffic to local upstreams can reduce latency and transfer costs associated with sending requests to other regions. + ### Workflow For networks deployed to virtual machines, complete the following steps to route traffic to local upstream services: 1. Specify the region and zone for your Consul client agents. This allows services to inherit the region and zone configured for the Consul agent that the services are registered with. +1. Specify the localities of your service instances. This step is optional and is only necessary when defining a custom network topology or when your deployed environment requires explicitly set localities for certain service's instances. 1. Configure service mesh proxies to route traffic locally within the partition. -For Kubernetes-orchestrated networks using `consul-k8s`, Consul automatically populates geographic information about service instances using the `topology.kubernetes.io/region` and `topology.kubernetes.io/zone` annotations from the Kubernetes nodes. Similarly, when deploying on AWS ECS using `consul-ecs`, the `AWS_REGION` environment variable and `AvailabilityZone` attribute of the ECS task meta are used. As a result, you do not need to specify the regions and zones on these platforms unless you are implementing a custom deployment. +#### Container orchestration platforms + +If you deployed Consul to a Kubernetes or ECS environment using `consul-k8s` or `consul-ecs`, service instance locality information is inherited from the host machine. As a result, you do not need to specify the regions and zones on containerized platforms unless you are implementing a custom deployment. + +On Kubernetes, Consul automatically populates geographic information about service instances using the `topology.kubernetes.io/region` and `topology.kubernetes.io/zone` labels from the Kubernetes nodes. On AWS ECS, Consul uses the `AWS_REGION` environment variable and `AvailabilityZone` attribute of the ECS task meta. + +### Requirements + +You should only enable locality-aware routing when each set of external upstream instances within the same zone and region have enough capacity to handle requests from downstream service instances in their respective zones. Locality-aware routing is an advanced feature that may adversely impact service capacity if used incorrectly. When enabled, Consul routes all traffic to the nearest set of service instances and only fails over when no healthy instances are available in the nearest set. ## Specify the locality of your Consul agents @@ -53,9 +59,9 @@ locality = { ## Specify the localities of your service instances (optional) --> This step is not typically required and should only be used if defining a custom network topology or your deployed environment requires explicitly setting the locality of certain services instances. Otherwise, follow the instructions above for VM workloads. For Kubernetes and ECS deployments using `consul-k8s` / `consul-ecs`, locality information will be inherited from the host machine. +This step is optional in most scenarios. Refer to [Workflow](#workflow) for additional information. -1. Configure the `locality` block in your service definition. The `locality` block is a map containing the `region` and `zone` parameters. When you start a proxy for the service, Consul passes the locality to the proxy so that it can route traffic accordingly. +1. Configure the `locality` block in your service definition for both downstream (client) and upstream services. The `locality` block is a map containing the `region` and `zone` parameters. When you start a proxy for the service, Consul passes the locality to the proxy so that it can route traffic accordingly. The parameters should match the values for regions and zones defined in your network. Refer to [`locality`](/consul/docs/services/configuration/services-configuration-reference#locality) in the services configuration reference for additional information. @@ -83,23 +89,273 @@ You can configure the default routing behavior for all proxies in the mesh as we ### Configure default routing behavior -1. Configure the `PrioritizeByLocality` block in the proxy defaults configuration entry and specify the `failover` mode. This configuration enables proxies in the mesh to use the region and zone defined in the service configuration to route traffic. Refer to [`PrioritizeByLocality`](/consul/docs/connect/config-entries/proxy-defaults#prioritizebylocality) in the proxy defaults reference for details about the configuration. -1. Apply the configuration by either calling the [`/config` HTTP API endpoint](/consul/api-docs/config) or running the [`consul config write` CLI command](/consul/commands/config/write). +Configure the `PrioritizeByLocality` block in the proxy defaults configuration entry and specify the `failover` mode. This configuration enables proxies in the mesh to use the region and zone defined in the service configuration to route traffic. Refer to [`PrioritizeByLocality`](/consul/docs/connect/config-entries/proxy-defaults#prioritizebylocality) in the proxy defaults reference for details about the configuration. - The following example writes a proxy defaults configuration entry from a local HCL file using the CLI: + + + - ```shell-session - $ consul config write proxy-defaults.hcl - ``` +```hcl +Kind = "proxy-defaults" +Name = "global" +PrioritizeByLocality = { + Mode = "failover" +} +``` + + + + + + +```json +{ + "kind": "proxy-defaults", + "name": "global", + "prioritizeByLocality": { + "mode": "failover" + } +} +``` + + + + + +```yaml +apiversion: consul.hashicorp.com/v1alpha1 +kind: ProxyDefaults +metadata: + name: global +spec: + prioritizeByLocality: + mode: failover +``` + + + + + +Apply the configuration by either running the [`consul config write` CLI command](/consul/commands/config/write), applying the Kubernetes CRD, or calling the [`/config` HTTP API endpoint](/consul/api-docs/config). + + + + + ```shell-session + $ consul config write proxy-defaults.hcl + ``` + + + + + + ```shell-session + $ kubectl apply -f proxy-defaults.yaml + ``` + + + + + ```shell-session + $ curl --request PUT --data @proxy-defaults.hcl http://127.0.0.1:8500/v1/config + ``` + + + ### Configure routing behavior for individual service 1. Create a service resolver configuration entry and specify the following fields: - - `Name`: Specify the name of the target upstream service for which downstream clients should use locality-aware routing. + - `Name`: The name of the target upstream service for which downstream clients should use locality-aware routing. - `PrioritizeByLocality`: This block enables proxies in the mesh to use the region and zone defined in the service configuration to route traffic. Set the `mode` inside the block to `failover`. Refer to [`PrioritizeByLocality`](/consul/docs/connect/config-entries/service-resolver#prioritizebylocality) in the service resolver reference for details about the configuration. -1. Apply the configuration by either calling the [`/config` HTTP API endpoint](/consul/api-docs/config) or running the [`consul config write` CLI command](/consul/commands/config/write). - The following example writes a proxy defaults configuration entry from a local HCL file using the CLI: - ```shell-session - $ consul config write web-resolver.hcl + + + + + ```hcl + Kind = "service-resolver" + Name = "api" + PrioritizeByLocality = { + Mode = "failover" + } + ``` + + + + + + + ```json + { + "kind": "service-resolver", + "name": "api", + "prioritizeByLocality": { + "mode": "failover" + } + } ``` + + + + + + ```yaml + apiversion: consul.hashicorp.com/v1alpha1 + kind: ServiceResolver + metadata: + name: api + spec: + prioritizeByLocality: + mode: failover + ``` + + + + + +1. Apply the configuration by either running the [`consul config write` CLI command](/consul/commands/config/write), applying the Kubernetes CRD, or calling the [`/config` HTTP API endpoint](/consul/api-docs/config). + + + + + ```shell-session + $ consul config write api-resolver.hcl + ``` + + + + + + ```shell-session + $ kubectl apply -f api-resolver.yaml + ``` + + + + + ```shell-session + $ curl --request PUT --data @api-resolver.hcl http://127.0.0.1:8500/v1/config + ``` + + + + +### Configure locality on Kubernetes test clusters explicitly + +You can explicitly configure locality for each Kubernetes node so that you can test locality-aware routing with a local Kubernetes cluster or in an environment where `topology.kubernetes.io` labels are not set. + +Run the `kubectl label node` command and specify the locality as arguments. The following example specifies the `us-east-1` region and `us-east-1a` zone for the node: + +```shell-session +kubectl label node $K8S_NODE topology.kubernetes.io/region="us-east-1" topology.kubernetes.io/zone="us-east-1a" +``` + +After setting these values, subsequent service and proxy registrations in your cluster inherit the values from their local Kubernetes node. + +## Verify routes + +The routes from each downstream service instance to the nearest set of healthy upstream instances are the most immediately observable routing changes. + +Consul configures Envoy's built-in [`overprovisioning_factor`](https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/endpoint/v3/endpoint.proto#config-endpoint-v3-clusterloadassignment) and [outlier detection](https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/cluster/v3/outlier_detection.proto#config-cluster-v3-outlierdetection) settings to enforce failover behavior. However, Envoy does not provide granular metrics specific to failover or endpoint traffic within a cluster. As a result, using external observability tools that expose network traffic within your environment is the best method for observing route changes. + +To verify that locality-aware routing and failover configurations, you can inspect Envoy's xDS configuration dump for a downstream proxy. Refer to the [consul-k8s CLI docs](https://developer.hashicorp.com/consul/docs/k8s/k8s-cli#proxy-read) for details on how to obtain the xDS configuration dump on Kubernetes. For other workloads, use the Envoy [admin interface](https://www.envoyproxy.io/docs/envoy/latest/operations/admin) and ensure that you [include EDS](https://www.envoyproxy.io/docs/envoy/latest/operations/admin#get--config_dump?include_eds). + +Inspect the [priority](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/load_balancing/priority#arch-overview-load-balancing-priority-levels) on each set of endpoints under the upstream `ClusterLoadAssignment` in the `EndpointsConfigDump`. Alternatively, the same priorities should be visibile within the output of the [`/clusters?format=json`](https://www.envoyproxy.io/docs/envoy/latest/operations/admin#get--clusters?format=json) admin endpoint. + +```json +{ + "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", + "cluster_name": "web.default.dc1.internal.161d7b5a-bb5f-379c-7d5a-1fc7504f95da.consul", + "endpoints": [ + { + "lb_endpoints": [ + { + "endpoint": { + "address": { + "socket_address": { + "address": "10.42.2.6", + "port_value": 20000 + } + }, + "health_check_config": {} + }, + ... + }, + ... + ], + "locality": {} + }, + { + "lb_endpoints": [ + { + "endpoint": { + "address": { + "socket_address": { + "address": "10.42.3.6", + "port_value": 20000 + } + }, + "health_check_config": {} + }, + ... + }, + ... + ], + "locality": {}, + "priority": 1 + }, + { + "lb_endpoints": [ + { + "endpoint": { + "address": { + "socket_address": { + "address": "10.42.0.6", + "port_value": 20000 + } + }, + "health_check_config": {} + }, + ... + }, + ... + ], + "locality": {}, + "priority": 2 + } + ], + ... +} +``` + +### Force an observable failover + +To force a failover for testing purposes, scale the upstream service instances in the downstream's local zone or region, if no local zone instances are available, to `0`. + +Note the following behaviors: + + - Consul prioritizes failovers in ascending order starting with `0`. The highest priority, `0`, is not explicitly visible in xDS output. This is because `0` is the default value for that field. + - After Envoy failover configuration is in place, the specific timing of failover is determined by the downstream Envoy proxy, not Consul. Consul health status may not directly correspond to Envoy's failover behavior, which is also dependent on outlier detection. + +Refer to [Troubleshooting](#troubleshooting) if you do not observe the expected behavior. + +## Adjust load balancing and failover behavior + +You can adjust the global or per-service load balancing and failover behaviors by applying the property override Envoy extension. The property override extension allows you to set and remove individual properties on the Envoy resources Consul generates. Refer to [Configure Envoy proxy properties](/consul/docs/connect/proxies/envoy-extensions/usage/property-override) for additional information. + +1. Add the `EnvoyExtensions` configuration block to the service defaults or proxy defaults configuration entry. +1. Configure the following settings in the `EnvoyExtensions` configuration: + - [`overprovisioning_factor`](https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/endpoint/v3/endpoint.proto#config-endpoint-v3-clusterloadassignment) + - [outlier detection](https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/cluster/v3/outlier_detection.proto#config-cluster-v3-outlierdetection) configuration. +1. Apply the configuration. Refer to [Apply the configuration entry](/consul/docs/connect/proxies/envoy-extensions/usage/property-override#apply-the-configuration-entry) for details. + +By default, Consul sets `overprovisioning_factor` to `100000`, which enforces total failover, and `max_ejection_percent` to `100`. Refer to the Envoy documentation about these fields before attempting to modify them. + +## Troubleshooting + +If you do not see the expected priorities, verify that locality is configured in the Consul agent and that `PrioritizeByLocality` is enabled in your proxy defaults or service resolver configuration entry. When `PrioritizeByLocality` is enabled but the local proxy lacks locality configuration, Consul emits a warning log to indicate that the policy could not be applied: + +``` +`no local service locality provided, skipping locality failover policy` +``` diff --git a/website/content/docs/connect/proxies/envoy.mdx b/website/content/docs/connect/proxies/envoy.mdx index c060346229856..890d980f4cb51 100644 --- a/website/content/docs/connect/proxies/envoy.mdx +++ b/website/content/docs/connect/proxies/envoy.mdx @@ -193,8 +193,7 @@ the [`sidecar_service`](/consul/docs/connect/proxies/deploy-sidecar-services) bl - `envoy_telemetry_collector_bind_socket_dir` - Specifies the directory where Envoy creates a Unix socket. Envoy sends metrics to the socket where a Consul telemetry collector can collect them. - The socket is not configured by default. - Enabling this sets Envoy's [`stats_flush_interval`](https://www.envoyproxy.io/docs/envoy/v1.17.2/api-v3/config/bootstrap/v3/bootstrap.proto#envoy-v3-api-field-config-bootstrap-v3-bootstrap-stats-flush-interval) to one minute if `envoy_stats_flush_interval` is unset and if no other stats sinks are configured, like `envoy_dogstats_url`, for instance. + The socket is not configured by default. The [Advanced Configuration](#advanced-configuration) section describes additional configurations that allow incremental or complete control over the bootstrap configuration generated. diff --git a/website/content/docs/enterprise/fips.mdx b/website/content/docs/enterprise/fips.mdx index 5f5cf281967ad..0aca1ad20784f 100644 --- a/website/content/docs/enterprise/fips.mdx +++ b/website/content/docs/enterprise/fips.mdx @@ -32,6 +32,10 @@ The FIPS 140-2 variant of Consul uses separate binaries that are available from The above naming conventions, which append `.fips1402` to binary names and tags, and `-fips` to registry names, also apply to `consul-k8s`, `consul-k8s-control-plane`, `consul-dataplane`, and `consul-ecs`, which are packaged separately from Consul Enterprise. +### Cluster peering support + +A Consul cluster running FIPS variants of Consul can peer with any combination of standard (non-FIPS) Consul clusters and FIPS Consul clusters. Consul supports all cluster peering features between FIPS clusters and non-FIPS clusters. + ### Usage restrictions When using Consul Enterprise with FIPS 140-2, be aware of the following operation restrictions: diff --git a/website/content/docs/enterprise/index.mdx b/website/content/docs/enterprise/index.mdx index a8ff184784073..86f57794c158f 100644 --- a/website/content/docs/enterprise/index.mdx +++ b/website/content/docs/enterprise/index.mdx @@ -187,4 +187,4 @@ Consul Enterprise feature availability can change depending on your server and c | [Traffic rate limiting for services](/consul/docs/connect/manage-traffic/limit-request-rates) | ✅ | ✅ | ✅ | - + \ No newline at end of file diff --git a/website/content/docs/k8s/helm.mdx b/website/content/docs/k8s/helm.mdx index 319ed9746dd61..12e6077f36066 100644 --- a/website/content/docs/k8s/helm.mdx +++ b/website/content/docs/k8s/helm.mdx @@ -759,19 +759,6 @@ Use these links to navigate to a particular top-level stanza. contains best practices and recommendations for selecting suitable hardware sizes for your Consul servers. - - `persistentVolumeClaimRetentionPolicy` ((#v-server-persistentvolumeclaimretentionpolicy)) (`map`) - The [Persistent Volume Claim (PVC) retention policy](https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#persistentvolumeclaim-retention) - controls if and how PVCs are deleted during the lifecycle of a StatefulSet. - WhenDeleted specifies what happens to PVCs created from StatefulSet VolumeClaimTemplates when the StatefulSet is deleted, - and WhenScaled specifies what happens to PVCs created from StatefulSet VolumeClaimTemplates when the StatefulSet is scaled down. - - Example: - - ```yaml - persistentVolumeClaimRetentionPolicy: - whenDeleted: Retain - whenScaled: Retain - ``` - - `connect` ((#v-server-connect)) (`boolean: true`) - This will enable/disable [service mesh](/consul/docs/connect). Setting this to true _will not_ automatically secure pod communication, this setting will only enable usage of the feature. Consul will automatically initialize diff --git a/website/content/docs/security/acl/acl-rules.mdx b/website/content/docs/security/acl/acl-rules.mdx index 6139ddeabbb9b..c3f87970d576d 100644 --- a/website/content/docs/security/acl/acl-rules.mdx +++ b/website/content/docs/security/acl/acl-rules.mdx @@ -19,6 +19,7 @@ The following table provides an overview of the resources you can use to create | `partition`
      `partition_prefix` | Controls access to one or more admin partitions.
      See [Admin Partition Rules](#admin-partition-rules) for details. | Yes | | `agent`
      `agent_prefix` | Controls access to the utility operations in the [Agent API](/consul/api-docs/agent), such as `join` and `leave`.
      See [Agent Rules](#agent-rules) for details. | Yes | | `event`
      `event_prefix` | Controls access to event operations in the [Event API](/consul/api-docs/event), such as firing and listing events.
      See [Event Rules](#event-rules) for details. | Yes | +| `identity`
      `identity_prefix` | Controls access to workload identity operations in the [Catalog v2 group](/consul/docs/architecture/catalog/v2). | `key`
      `key_prefix`   | Controls access to key/value store operations in the [KV API](/consul/api-docs/kv).
      Can also use the `list` access level when setting the policy disposition.
      Has additional value options in Consul Enterprise for integrating with [Sentinel](https://docs.hashicorp.com/sentinel/consul).
      See [Key/Value Rules](#key-value-rules) for details. | Yes | | `keyring`       | Controls access to keyring operations in the [Keyring API](/consul/api-docs/operator/keyring).
      See [Keyring Rules](#keyring-rules) for details. | No | | `mesh`       | Provides operator-level permissions for resources in the admin partition, such as ingress gateways or mesh proxy defaults. See [Mesh Rules](#mesh-rules) for details. | No | @@ -247,6 +248,48 @@ operation, so to enable this feature in a Consul environment with ACLs enabled, give agents a token with access to this event prefix, in addition to configuring [`disable_remote_exec`](/consul/docs/agent/config/config-files#disable_remote_exec) to `false`. +## Identity Rules + +The `identity` and `identity_prefix` resources control workload-identity-level registration and read access to the [Catalog v2 API group](/consul/docs/architecture/catalog/v2). +Specify the resource label in identity rules to set the scope of the rule. +The resource label in the following example is empty. As a result, the rules allow read-only access to any workload identity name with the empty prefix. +The rules also allow read-write access to the `app` identity and deny all access to the `admin` identity: + + + +```hcl +identity_prefix "" { + policy = "read" +} +identity "app" { + policy = "write" +} +identity "admin" { + policy = "deny" +} +``` + +```json +{ + "identity_prefix": { + "": { + "policy": "read" + } + }, + "identity": { + "app": { + "policy": "write" + }, + "admin": { + "policy": "deny" + } + } +} +``` + + + + ## Key/Value Rules The `key` and `key_prefix` resources control access to key/value store operations in the [KV API](/consul/api-docs/kv). @@ -592,13 +635,13 @@ These actions may required an ACL token to complete. Use the following methods t Nodes rules affect read access to nodes with services exported by [`exported-services` configuration entries](/consul/docs/connect/config-entries/exported-services#reading-services), including nodes imported from [cluster peerings](/consul/docs/connect/cluster-peering) or [admin partitions](/consul/docs/enterprise/admin-partitions) (Enterprise-only). Read access to all imported nodes is granted when either of the following rule sets are attached to a token: -- `service:write` is granted to any service. +- `service:write` is granted to any service. - `node:read` is granted to all nodes. For Consul Enterprise, either set of rules must be scoped to the requesting services's partition and at least one namespace. You may need similarly scoped [Service Rules](#reading-imported-services) to read Consul data, depending on the endpoint (e.g. `/v1/health/service/:name`). -These permissions are satisfied when using a [service identity](/consul/docs/security/acl/acl-roles#service-identities). +These permissions are satisfied when using a [service identity](/consul/docs/security/acl/acl-roles#service-identities). Refer to [Reading Services](/consul/docs/connect/config-entries/exported-services#reading-services) for example ACL policies used to read imported services using the health endpoint. @@ -831,13 +874,13 @@ set to `true` in order to enable script checks. Service rules affect read access to services exported by [`exported-services` configuration entries](/consul/docs/connect/config-entries/exported-services#reading-services), including services exported between [cluster peerings](/consul/docs/connect/cluster-peering) or [admin partitions](/consul/docs/enterprise/admin-partitions) (Enterprise-only). Read access to all imported services is granted when either of the following rule sets are attached to a token: -- `service:write` is granted to any service. +- `service:write` is granted to any service. - `service:read` is granted to all services. For Consul Enterprise, either set of rules must be scoped to the requesting services's partition and at least one namespace. You may need similarly scoped [Node Rules](#reading-imported-nodes) to read Consul data, depending on the endpoint (e.g. `/v1/health/service/:name`). -These permissions are satisfied when using a [service identity](/consul/docs/security/acl/acl-roles#service-identities). +These permissions are satisfied when using a [service identity](/consul/docs/security/acl/acl-roles#service-identities). Refer to [Reading Services](/consul/docs/connect/config-entries/exported-services#reading-services) for example ACL policies used to read imported services using the health endpoint. diff --git a/website/content/docs/services/discovery/dns-configuration.mdx b/website/content/docs/services/discovery/dns-configuration.mdx index 5a0d890e79bff..369f8fe50ff79 100644 --- a/website/content/docs/services/discovery/dns-configuration.mdx +++ b/website/content/docs/services/discovery/dns-configuration.mdx @@ -16,7 +16,7 @@ The Consul DNS is the primary interface for querying records when Consul service By default, the Consul DNS listens for queries at `127.0.0.1:8600` and uses the `consul` domain. Specify the following parameters in the agent configuration to determine DNS behavior when querying services: - [`client_addr`](/consul/docs/agent/config/config-files#client_addr) -- [`ports.dns`](/consul/docs/agent/config/config-files#dns_port) : Consul does not use port `53`, which is typically reserved for the default port for DNS resolvers, by default because it requires an escalated privilege to bind to. +- [`ports.dns`](/consul/docs/agent/config/config-files#dns_port) : Consul does not use port `53`, which is typically reserved for the default port for DNS resolvers, by default because it requires an escalated privilege to bind to. - [`recursors`](/consul/docs/agent/config/config-files#recursors) - [`domain`](/consul/docs/agent/config/config-files#domain) - [`alt_domain`](/consul/docs/agent/config/config-files#alt_domain)